From http://www.jwz.org/xscreensaver/xscreensaver-5.37.tar.gz
[xscreensaver] / hacks / glx / glsnake.c
index 0a8e2d86cba97cf8a2ed27677aff16841c7d2861..1d8ef965a10a73c398d5125e300d8ebd0d5cec13 100644 (file)
@@ -1,6 +1,6 @@
 /* glsnake.c - OpenGL imitation of Rubik's Snake
  * 
- * (c) 2001-2003 Jamie Wilkinson <jaq@spacepants.org>
+ * (c) 2001-2005 Jamie Wilkinson <jaq@spacepants.org>
  * (c) 2001-2003 Andrew Bennetts <andrew@puzzling.org> 
  * (c) 2001-2003 Peter Aylett <peter@ylett.com>
  * 
 #ifdef HAVE_GLUT
 # include <GL/glut.h>
 #else
-# include <GL/gl.h>
-# include <GL/glu.h>
+# ifdef HAVE_JWXYZ
+#  define HAVE_GETTIMEOFDAY
+# else
+#  include <GL/gl.h>
+#  include <GL/glu.h>
+# endif
+#endif
+# ifdef HAVE_ANDROID
+# include <GLES/gl.h>
+#endif
+
+#ifdef HAVE_JWZGLES
+# include "jwzgles.h"
+#endif /* HAVE_JWZGLES */
+
+#ifdef STANDALONE
+# include "xlockmoreI.h"
 #endif
 
 #include <stdio.h>
 #define RIGHT   270.0
 
 #ifdef HAVE_GETTIMEOFDAY
-#ifdef GETTIMEOFDAY_TWO_ARGS
-# include <sys/time.h>
-# include <time.h>
-  typedef struct timeval snaketime;
-# define GETSECS(t) ((t).tv_sec)
-# define GETMSECS(t) ((t).tv_usec/1000)
-#else /* GETTIMEOFDAY_TWO_ARGS */
-# include <sys/time.h>
-# include <time.h>
-  typedef struct timeval snaketime;
-# define GETSECS(t) ((t).tv_sec)
-# define GETMSECS(t) ((t).tv_usec/1000)
-#endif
-#else /* HAVE_GETTIMEOFDAY */
-#ifdef HAVE_FTIME
-# include <sys/timeb.h>
-  typedef struct timeb snaketime;
-# define GETSECS(t) ((long)(t).time)
-# define GETMSECS(t) ((t).millitm/1000)
-#endif /* HAVE_FTIME */
+# ifdef GETTIMEOFDAY_TWO_ARGS
+
+#  include <sys/time.h>
+#  include <time.h>
+   typedef struct timeval snaketime;
+#  define GETSECS(t) ((t).tv_sec)
+#  define GETMSECS(t) ((t).tv_usec/1000)
+
+# else /* !GETTIMEOFDAY_TWO_ARGS */
+
+#  include <sys/time.h>
+#  include <time.h>
+   typedef struct timeval snaketime;
+#  define GETSECS(t) ((t).tv_sec)
+#  define GETMSECS(t) ((t).tv_usec/1000)
+
+# endif /* GETTIMEOFDAY_TWO_ARGS */
+
+#else /* !HAVE_GETTIMEOFDAY */
+# ifdef HAVE_FTIME
+
+#  include <sys/timeb.h>
+   typedef struct timeb snaketime;
+#  define GETSECS(t) ((long)(t).time)
+#  define GETMSECS(t) ((t).millitm/1000)
+
+# endif /* HAVE_FTIME */
 #endif /* HAVE_GETTIMEOFDAY */
 
 #include <math.h>
 #define DEF_ZANGVEL     0.14
 #define DEF_EXPLODE     0.03
 #define DEF_ANGVEL      1.0
-#define DEF_ACCEL       0.1
 #define DEF_STATICTIME  5000
 #define DEF_ALTCOLOUR   0
-#define DEF_TITLES      1
+#define DEF_TITLES      0
 #define DEF_INTERACTIVE 0
 #define DEF_ZOOM        25.0
 #define DEF_WIREFRAME   0
+#define DEF_TRANSPARENT 1
 #else
 /* xscreensaver options doobies prefer strings */
 #define DEF_YANGVEL     "0.10"
 #define DEF_ZANGVEL     "0.14"
 #define DEF_EXPLODE     "0.03"
 #define DEF_ANGVEL      "1.0"
-#define DEF_ACCEL       "0.1"
 #define DEF_STATICTIME  "5000"
 #define DEF_ALTCOLOUR   "False"
-#define DEF_TITLES      "True"
+#define DEF_TITLES      "False"
 #define DEF_INTERACTIVE "False"
 #define DEF_ZOOM        "25.0"
 #define DEF_WIREFRAME   "False"
+#define DEF_TRANSPARENT "True"
 #endif
 
 /* static variables */
-#ifndef HAVE_GLUT
-# include <X11/Intrinsic.h>
-#else
-/* xscreensaver boolean type */
-# define Bool int
-#endif
 
 static GLfloat explode;
-static GLfloat accel;
 static long statictime;
-static GLfloat yspin = 0;
-static GLfloat zspin = 0;
+static GLfloat yspin = 60.0;
+static GLfloat zspin = -45.0;
 static GLfloat yangvel;
 static GLfloat zangvel;
 static Bool altcolour;
 static Bool titles;
 static Bool interactive;
 static Bool wireframe;
+static Bool transparent;
 static GLfloat zoom;
 static GLfloat angvel;
 
 #ifndef HAVE_GLUT
-/* xscreensaver setup */
-extern XtAppContext app;
-
-#define PROGCLASS "glsnake"
-#define HACK_INIT glsnake_init
-#define HACK_DRAW glsnake_display
-#define HACK_RESHAPE glsnake_reshape
-#define sws_opts xlockmore_opts
 
+#define glsnake_init    init_glsnake
+#define glsnake_display draw_glsnake
+#define glsnake_reshape reshape_glsnake
+#define refresh_glsnake 0
+#define release_glsnake 0
+#define glsnake_handle_event 0
 
 /* xscreensaver defaults */
 #define DEFAULTS "*delay:          30000                      \n" \
                  "*count:          30                         \n" \
                  "*showFPS:        False                      \n" \
-                "*labelfont:   -*-times-bold-r-normal-*-180-*\n" \
+               "*suppressRotationAnimation: True\n" \
+         "*labelfont:   -*-helvetica-medium-r-normal-*-*-180-*-*-*-*-*-*\n" \
+
 
 #undef countof
 #define countof(x) (sizeof((x))/sizeof((*x)))
 
 #include "xlockmore.h"
-#include "glxfonts.h"
+#include "texfont.h"
 
 static XrmOptionDescRec opts[] = {
     { "-explode", ".explode", XrmoptionSepArg, DEF_EXPLODE },
     { "-angvel", ".angvel", XrmoptionSepArg, DEF_ANGVEL },
-    { "-accel", ".accel", XrmoptionSepArg, DEF_ACCEL },
     { "-statictime", ".statictime", XrmoptionSepArg, DEF_STATICTIME },
     { "-yangvel", ".yangvel", XrmoptionSepArg, DEF_YANGVEL },
     { "-zangvel", ".zangvel", XrmoptionSepArg, DEF_ZANGVEL },
@@ -160,12 +175,13 @@ static XrmOptionDescRec opts[] = {
     { "-zoom", ".zoom", XrmoptionSepArg, DEF_ZOOM },
     { "-wireframe", ".wireframe", XrmoptionNoArg, "true" },
     { "-no-wireframe", ".wireframe", XrmoptionNoArg, "false" },
+    { "-transparent", ".transparent", XrmoptionNoArg, "true" },
+    { "-no-transparent", ".transparent", XrmoptionNoArg, "false" },
 };
 
 static argtype vars[] = {
     {&explode, "explode", "Explode", DEF_EXPLODE, t_Float},
     {&angvel, "angvel", "Angular Velocity", DEF_ANGVEL, t_Float},
-    {&accel, "accel", "Acceleration", DEF_ACCEL, t_Float},
     {&statictime, "statictime", "Static Time", DEF_STATICTIME, t_Int},
     {&yangvel, "yangvel", "Angular Velocity about Y axis", DEF_YANGVEL, t_Float},
     {&zangvel, "zangvel", "Angular Velocity about X axis", DEF_ZANGVEL, t_Float},
@@ -174,21 +190,21 @@ static argtype vars[] = {
     {&titles, "titles", "Titles", DEF_TITLES, t_Bool},
     {&zoom, "zoom", "Zoom", DEF_ZOOM, t_Float},
     {&wireframe, "wireframe", "Wireframe", DEF_WIREFRAME, t_Bool},
+    {&transparent, "transparent", "Transparent!", DEF_TRANSPARENT, t_Bool},
 };
 
-ModeSpecOpt sws_opts = {countof(opts), opts, countof(vars), vars, NULL};
+ENTRYPOINT ModeSpecOpt glsnake_opts = {countof(opts), opts, countof(vars), vars, NULL};
 #endif
 
 struct model_s {
-    char * name;
+    const char * name;
     float node[NODE_COUNT];
 };
 
 struct glsnake_cfg {
 #ifndef HAVE_GLUT
     GLXContext * glx_context;
-    XFontStruct * font;
-    GLuint font_list;
+    texture_font_data *font_data;
 #else
     /* font list number */
     int font;
@@ -206,7 +222,7 @@ struct glsnake_cfg {
     /* snake metrics */
     int is_cyclic;
     int is_legal;
-    int last_turn;
+    float last_turn;
     int debug;
 
     /* the shape of the model */
@@ -216,14 +232,14 @@ struct glsnake_cfg {
     int selected;
 
     /* models */
-    int prev_model;
-    int next_model;
+    unsigned int prev_model;
+    unsigned int next_model;
 
     /* model morphing */
     int new_morph;
 
     /* colours */
-    float colour[2][3];
+    float colour[2][4];
     int next_colour;
     int prev_colour;
 
@@ -236,7 +252,8 @@ struct glsnake_cfg {
     int old_width, old_height;
 
     /* the id of the display lists for drawing a node */
-    int node_solid, node_wire;
+    GLuint node_solid, node_wire;
+    int node_polys;
 
     /* is the window fullscreen? */
     int fullscreen;
@@ -246,40 +263,44 @@ struct glsnake_cfg {
 #define COLOUR_ACYCLIC 1
 #define COLOUR_INVALID 2
 #define COLOUR_AUTHENTIC 3
+#define COLOUR_ORIGLOGO 4
 
-float colour[][2][3] = {
+static const float colour[][2][4] = {
     /* cyclic - green */
-    { { 0.4, 0.8, 0.2 },
-      { 1.0, 1.0, 1.0 } },
+    { { 0.4, 0.8, 0.2, 0.6 },
+      { 1.0, 1.0, 1.0, 0.6 } },
     /* acyclic - blue */
-    { { 0.3, 0.1, 0.9 },
-      { 1.0, 1.0, 1.0 } },
+    { { 0.3, 0.1, 0.9, 0.6 },
+      { 1.0, 1.0, 1.0, 0.6 } },
     /* invalid - grey */
-    { { 0.3, 0.1, 0.9 },
-      { 1.0, 1.0, 1.0 } },
+    { { 0.3, 0.1, 0.9, 0.6 },
+      { 1.0, 1.0, 1.0, 0.6 } },
     /* authentic - purple and green */
-    { { 0.38, 0.0, 0.55 },
-      { 0.0,  0.5, 0.34 } }
+    { { 0.38, 0.0, 0.55, 0.7 },
+      { 0.0,  0.5, 0.34, 0.7 } },
+    /* old "authentic" colours from the logo */
+    { { 171/255.0, 0, 1.0, 1.0 },
+      { 46/255.0, 205/255.0, 227/255.0, 1.0 } }
 };
 
-struct model_s model[] = {
+static const struct model_s model[] = {
 #define STRAIGHT_MODEL 0
     { "straight",
       { ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO,
        ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO,
-       ZERO, ZERO }
+       ZERO, ZERO, ZERO }
     },
     /* the models in the Rubik's snake manual */
-#define START_MODEL 1
     { "ball",
       { RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT,
        RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT,
-       RIGHT, LEFT, RIGHT, LEFT }
+       RIGHT, LEFT, RIGHT, LEFT, ZERO }
     },
+#define START_MODEL 2
     { "snow",
       { RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT,
        RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT,
-       RIGHT, LEFT, LEFT, LEFT }
+       RIGHT, LEFT, LEFT, LEFT, ZERO }
     },
     { "propellor",
       { ZERO, ZERO, ZERO, RIGHT, LEFT, RIGHT, ZERO, LEFT, ZERO, ZERO,
@@ -289,62 +310,64 @@ struct model_s model[] = {
     { "flamingo",
       { ZERO, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, RIGHT, RIGHT, PIN,
        RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, RIGHT, ZERO, ZERO,
-       ZERO, PIN }
+       ZERO, PIN, ZERO }
     },
     { "cat",
       { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN,
        ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO,
-       ZERO }
+       ZERO, ZERO }
     },
     { "rooster",
       { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, LEFT, RIGHT, PIN, RIGHT,
        ZERO, PIN, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, ZERO, LEFT, ZERO,
-       PIN }
+       PIN, ZERO }
     },
     /* These models were taken from Andrew and Peter's original snake.c
      * as well as some newer ones made up by Jamie, Andrew and Peter. */
     { "half balls",
       { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT,
        LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT,
-       RIGHT, LEFT, LEFT, LEFT }
+       RIGHT, LEFT, LEFT, LEFT, ZERO }
     },
     { "zigzag1",
       { RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT,
        LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT,
-       RIGHT, RIGHT, LEFT, LEFT }
+       RIGHT, RIGHT, LEFT, LEFT, ZERO }
     },
     { "zigzag2",
       { PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN,
-       ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN }
+       ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN,
+       ZERO }
     },
     { "zigzag3",
       { PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN,
-       LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN }
+       LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN,
+       ZERO }
     },
     { "caterpillar",
       { RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT,
        LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN,
-       LEFT, LEFT }
+       LEFT, LEFT, ZERO }
     },
     { "bow",
       { RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT,
        LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT,
-       RIGHT, RIGHT, LEFT, LEFT }
+       RIGHT, RIGHT, LEFT, LEFT, ZERO }
     },
     { "turtle",
       { ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT,
        LEFT, RIGHT, LEFT, LEFT, PIN, LEFT, LEFT, LEFT, RIGHT, LEFT,
-       RIGHT, RIGHT, RIGHT }
+       RIGHT, RIGHT, RIGHT, ZERO }
     },
     { "basket",
       { RIGHT, PIN, ZERO, ZERO, PIN, LEFT, ZERO, LEFT, LEFT, ZERO,
        LEFT, PIN, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, ZERO,
-       PIN, LEFT }
+       PIN, LEFT, ZERO }
     },
     { "thing",
       { PIN, RIGHT, LEFT, RIGHT, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT,
        LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, RIGHT, LEFT, PIN, LEFT,
-       RIGHT, LEFT, LEFT }
+       RIGHT, LEFT, LEFT, ZERO }
     },
     { "hexagon",
       { ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO,
@@ -378,41 +401,41 @@ struct model_s model[] = {
     { "bird",
       { ZERO, ZERO, ZERO, ZERO, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT,
        ZERO, RIGHT, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT,
-       LEFT, ZERO, PIN }
+       LEFT, ZERO, PIN, ZERO }
     },
     { "seal",
       { RIGHT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO,
        LEFT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, LEFT, LEFT, PIN, RIGHT,
-       RIGHT, LEFT }
+       RIGHT, LEFT, ZERO }
     },
     { "dog",
       { ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN,
-       ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN }
+       ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO }
     },
     { "frog",
       { RIGHT, RIGHT, LEFT, LEFT, RIGHT, PIN, RIGHT, PIN, LEFT, PIN,
        RIGHT, ZERO, LEFT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, LEFT,
-       RIGHT, LEFT, LEFT }
+       RIGHT, LEFT, LEFT, ZERO }
     },
     { "quavers",
       { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO, ZERO, ZERO,
        RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, ZERO, LEFT, LEFT,
-       RIGHT, LEFT, RIGHT, RIGHT }
+       RIGHT, LEFT, RIGHT, RIGHT, ZERO }
     },
     { "fly",
       { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO, PIN, ZERO, ZERO,
        LEFT, PIN, RIGHT, ZERO, ZERO, PIN, ZERO, LEFT, LEFT, RIGHT, LEFT,
-       RIGHT, RIGHT }
+       RIGHT, RIGHT, ZERO }
     },
     { "puppy",
       { ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO,
        RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT,
-       LEFT }
+       LEFT, ZERO, ZERO }
     },
     { "stars",
       { LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT,
        ZERO, ZERO, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN,
-       RIGHT, LEFT }
+       RIGHT, LEFT, ZERO }
     },
     { "mountains",
       { RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN,
@@ -482,7 +505,7 @@ struct model_s model[] = {
     { "duck",
       { LEFT, PIN, LEFT, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, LEFT,
        PIN, RIGHT, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, LEFT, PIN,
-       LEFT }
+       LEFT, ZERO }
     },
     { "prayer",
       { RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO, ZERO,
@@ -497,7 +520,7 @@ struct model_s model[] = {
     { "tie fighter",
       { PIN, LEFT, RIGHT, LEFT, LEFT, PIN, RIGHT, ZERO, RIGHT, LEFT,
        ZERO, PIN, LEFT, LEFT, RIGHT, RIGHT, RIGHT, PIN, LEFT, ZERO,
-       LEFT, RIGHT, ZERO }
+       LEFT, RIGHT, ZERO, ZERO }
     },
     { "Strong Arms",
       { PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, RIGHT,
@@ -507,7 +530,7 @@ struct model_s model[] = {
 
     /* the following modesl were created during the slug/compsoc codefest
      * febrray 2003 */
-    { "cool gegl",
+    { "cool looking gegl",
       { PIN, PIN, ZERO, ZERO, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT,
        ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, RIGHT, PIN, ZERO,
        ZERO, ZERO }
@@ -532,7 +555,7 @@ struct model_s model[] = {
        RIGHT, LEFT, RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT,
        RIGHT, ZERO, LEFT, ZERO }
     },
-    { "arse gegl",
+    { "not very good (but accurate) gegl",
       { ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO,
        PIN, PIN, ZERO, RIGHT, LEFT, ZERO, PIN, ZERO, PIN, PIN, ZERO,
        PIN, ZERO }
@@ -625,627 +648,635 @@ struct model_s model[] = {
 
     /* These models come from the website at 
      * http://www.geocities.com/stigeide/snake */
+#if 0
     { "Abstract",
-        { RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, PIN, ZERO, RIGHT, LEFT, RIGHT, ZERO }
+      { RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, PIN, ZERO, RIGHT, LEFT, RIGHT, ZERO, ZERO }
     },
-    { "AlanH1",
-        { LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN }
+#endif
+    { "toadstool",
+      { LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, ZERO }
     },
     { "AlanH2",
-        { LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT }
+      { LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, ZERO }
     },
     { "AlanH3",
-        { LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN }
+      { LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, ZERO }
     },
     { "AlanH4",
-        { ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, PIN, ZERO, ZERO }
+      { ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, PIN, ZERO, ZERO, ZERO }
     },
     { "Alien",
-        { RIGHT, LEFT, RIGHT, PIN, ZERO, ZERO, PIN, RIGHT, LEFT, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, ZERO, PIN, PIN }
+      { RIGHT, LEFT, RIGHT, PIN, ZERO, ZERO, PIN, RIGHT, LEFT, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, ZERO, PIN, PIN, ZERO }
     },
     { "Angel",
-        { ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT }
+      { ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO }
     },
     { "AnotherFigure",
-        { LEFT, PIN, RIGHT, ZERO, ZERO, PIN, RIGHT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, PIN, ZERO }
+      { LEFT, PIN, RIGHT, ZERO, ZERO, PIN, RIGHT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, PIN, ZERO, ZERO }
     },
     { "Ball",
-        { LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT }
+        { LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT , ZERO }
     },
     { "Basket",
-        { ZERO, RIGHT, RIGHT, ZERO, RIGHT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, ZERO, LEFT }
+        { ZERO, RIGHT, RIGHT, ZERO, RIGHT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, ZERO, LEFT , ZERO }
     },
     { "Beetle",
-        { PIN, LEFT, RIGHT, ZERO, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO, LEFT, RIGHT, PIN, RIGHT }
+        { PIN, LEFT, RIGHT, ZERO, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO, LEFT, RIGHT, PIN, RIGHT , ZERO }
     },
-    { "Bone",
-        { PIN, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, PIN }
+    { "bone",
+        { PIN, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, PIN , ZERO }
     },
     { "Bow",
-        { LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT }
+        { LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT , ZERO }
     },
-    { "Bra",
-        { RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT }
+    { "bra",
+        { RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT , ZERO }
     },
-    { "BronchoSaurian",
-        { ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, PIN }
+    { "bronchosaurus",
+        { ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, PIN , ZERO }
     },
     { "Cactus",
-        { PIN, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, ZERO, ZERO }
+        { PIN, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, ZERO, ZERO , ZERO }
     },
     { "Camel",
-        { RIGHT, ZERO, PIN, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, ZERO, ZERO, LEFT }
+        { RIGHT, ZERO, PIN, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, ZERO, ZERO, LEFT , ZERO }
     },
     { "Candlestick",
-        { LEFT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, RIGHT }
+        { LEFT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, RIGHT , ZERO }
     },
     { "Cat",
-        { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO }
+        { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO , ZERO }
     },
     { "Cave",
-        { RIGHT, ZERO, ZERO, PIN, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, LEFT, PIN, RIGHT, RIGHT, LEFT, PIN, ZERO, ZERO }
+        { RIGHT, ZERO, ZERO, PIN, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, LEFT, PIN, RIGHT, RIGHT, LEFT, PIN, ZERO, ZERO , ZERO }
     },
     { "Chains",
-        { PIN, ZERO, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO }
+        { PIN, ZERO, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO , ZERO }
     },
     { "Chair",
-        { RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, LEFT, RIGHT, LEFT, LEFT }
+        { RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, LEFT, RIGHT, LEFT, LEFT , ZERO }
     },
     { "Chick",
-        { RIGHT, RIGHT, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, LEFT, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, LEFT, LEFT }
+        { RIGHT, RIGHT, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, LEFT, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, LEFT, LEFT , ZERO }
     },
     { "Clockwise",
-        { RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT }
+        { RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT , ZERO }
     },
-    { "Cobra",
-        { ZERO, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, LEFT, ZERO, LEFT, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT }
+    { "cobra",
+        { ZERO, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, LEFT, ZERO, LEFT, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT , ZERO }
     },
+#if 0
     { "Cobra2",
-        { LEFT, ZERO, PIN, ZERO, PIN, LEFT, ZERO, PIN, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, PIN, ZERO, RIGHT, PIN, ZERO, PIN, ZERO, RIGHT }
+        { LEFT, ZERO, PIN, ZERO, PIN, LEFT, ZERO, PIN, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, PIN, ZERO, RIGHT, PIN, ZERO, PIN, ZERO, RIGHT , ZERO }
     },
+#endif
     { "Cobra3",
-        { ZERO, LEFT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, LEFT }
+        { ZERO, LEFT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, LEFT , ZERO }
     },
     { "Compact1",
-        { ZERO, ZERO, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, PIN }
+        { ZERO, ZERO, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, PIN , ZERO }
     },
     { "Compact2",
-        { LEFT, PIN, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO }
+        { LEFT, PIN, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO , ZERO }
     },
     { "Compact3",
-        { ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN }
+        { ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN , ZERO }
     },
     { "Compact4",
-        { PIN, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO }
+        { PIN, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO , ZERO }
     },
     { "Compact5",
-        { LEFT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT }
+        { LEFT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT , ZERO }
     },
     { "Contact",
-        { PIN, ZERO, ZERO, PIN, LEFT, LEFT, PIN, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO, PIN, RIGHT, PIN }
+        { PIN, ZERO, ZERO, PIN, LEFT, LEFT, PIN, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO, PIN, RIGHT, PIN , ZERO }
     },
     { "Contact2",
-        { RIGHT, PIN, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, PIN, LEFT }
+        { RIGHT, PIN, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, PIN, LEFT , ZERO }
     },
     { "Cook",
-        { ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, RIGHT, LEFT, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, PIN, LEFT, RIGHT, ZERO, RIGHT, ZERO, PIN }
+        { ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, RIGHT, LEFT, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, PIN, LEFT, RIGHT, ZERO, RIGHT, ZERO, PIN , ZERO }
     },
     { "Counterclockwise",
-        { LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT }
+        { LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT , ZERO }
     },
     { "Cradle",
-        { LEFT, LEFT, ZERO, PIN, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, PIN, ZERO, RIGHT, RIGHT, LEFT, LEFT, ZERO, ZERO, RIGHT }
+        { LEFT, LEFT, ZERO, PIN, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, PIN, ZERO, RIGHT, RIGHT, LEFT, LEFT, ZERO, ZERO, RIGHT , ZERO }
     },
     { "Crankshaft",
-        { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO, PIN, RIGHT }
+        { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO, PIN, RIGHT , ZERO }
     },
     { "Cross",
-        { ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN }
+        { ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN , ZERO }
     },
     { "Cross2",
-        { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO }
+        { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO , ZERO }
     },
     { "Cross3",
-        { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO }
+        { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, ZERO, PIN, PIN, ZERO, ZERO }
     },
     { "CrossVersion1",
-        { PIN, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN }
+        { PIN, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, ZERO }
     },
     { "CrossVersion2",
-        { RIGHT, LEFT, PIN, LEFT, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, LEFT, LEFT, PIN, LEFT, RIGHT }
+        { RIGHT, LEFT, PIN, LEFT, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, LEFT, LEFT, PIN, LEFT, RIGHT, ZERO }
     },
     { "Crown",
-        { LEFT, ZERO, PIN, ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO, PIN, ZERO, RIGHT, LEFT, ZERO, PIN, ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO, PIN, ZERO }
+        { LEFT, ZERO, PIN, ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO, PIN, ZERO, RIGHT, LEFT, ZERO, PIN, ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO, PIN, ZERO, ZERO }
     },
     { "DNAStrand",
-        { RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT }
+        { RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, ZERO }
     },
     { "Diamond",
-        { ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, LEFT }
+        { ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, LEFT, ZERO }
     },
     { "Dog",
-        { RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO, LEFT, RIGHT }
+        { RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO, LEFT, RIGHT, ZERO }
     },
     { "DogFace",
-        { ZERO, ZERO, PIN, PIN, ZERO, LEFT, LEFT, RIGHT, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, RIGHT, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, PIN }
+        { ZERO, ZERO, PIN, PIN, ZERO, LEFT, LEFT, RIGHT, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, RIGHT, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO }
     },
     { "DoublePeak",
-        { ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, LEFT, ZERO, PIN, ZERO, RIGHT, RIGHT, LEFT, PIN, LEFT, RIGHT }
+        { ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, LEFT, ZERO, PIN, ZERO, RIGHT, RIGHT, LEFT, PIN, LEFT, RIGHT, ZERO }
     },
     { "DoubleRoof",
-        { ZERO, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT }
+        { ZERO, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO }
     },
-    { "DoubleToboggan",
-        { ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO, ZERO, PIN }
+    { "txoboggan",
+        { ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO }
     },
     { "Doubled",
-        { LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, ZERO, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT }
+        { LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, ZERO, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, ZERO }
     },
     { "Doubled1",
-        { LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, ZERO, RIGHT, ZERO, RIGHT, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT }
+        { LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, ZERO, RIGHT, ZERO, RIGHT, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, ZERO }
     },
     { "Doubled2",
-        { LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, RIGHT, ZERO, RIGHT, LEFT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT }
+        { LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, RIGHT, ZERO, RIGHT, LEFT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, ZERO }
     },
     { "DumblingSpoon",
-        { PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO }
+        { PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, ZERO }
     },
     { "Embrace",
-        { PIN, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO }
+        { PIN, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, ZERO }
     },
     { "EndlessBelt",
-        { ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO, LEFT, RIGHT, ZERO, PIN, RIGHT, LEFT, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, ZERO, LEFT, RIGHT }
+        { ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO, LEFT, RIGHT, ZERO, PIN, RIGHT, LEFT, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO }
     },
     { "Entrance",
-        { LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT }
+        { LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, ZERO }
     },
     { "Esthetic",
-        { LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT }
+        { LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, ZERO }
     },
-    { "Explotion",
-        { RIGHT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT }
+    { "Explosion",
+        { RIGHT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, ZERO }
     },
     { "F-ZeroXCar",
-        { RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT }
+        { RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, ZERO }
     },
     { "Face",
-        { ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT }
+        { ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO }
     },
     { "Fantasy",
-        { LEFT, LEFT, RIGHT, PIN, ZERO, RIGHT, ZERO, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, ZERO, LEFT, ZERO, PIN, LEFT, RIGHT, RIGHT, RIGHT, PIN }
+        { LEFT, LEFT, RIGHT, PIN, ZERO, RIGHT, ZERO, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, ZERO, LEFT, ZERO, PIN, LEFT, RIGHT, RIGHT, RIGHT, PIN, ZERO }
     },
     { "Fantasy1",
-        { PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN }
+        { PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO }
     },
     { "FaserGun",
-        { ZERO, ZERO, LEFT, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, RIGHT, ZERO, PIN }
+        { ZERO, ZERO, LEFT, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, RIGHT, ZERO, PIN, ZERO }
     },
     { "FelixW",
-        { ZERO, RIGHT, ZERO, PIN, LEFT, ZERO, LEFT, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, RIGHT, ZERO, RIGHT, PIN, ZERO, LEFT, ZERO }
+        { ZERO, RIGHT, ZERO, PIN, LEFT, ZERO, LEFT, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, RIGHT, ZERO, RIGHT, PIN, ZERO, LEFT, ZERO, ZERO }
     },
     { "Flamingo",
-        { ZERO, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, LEFT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, ZERO, ZERO, ZERO, PIN }
+        { ZERO, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, LEFT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, ZERO, ZERO, ZERO, PIN, ZERO }
     },
     { "FlatOnTheTop",
-        { ZERO, PIN, PIN, ZERO, PIN, RIGHT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, PIN }
+        { ZERO, PIN, PIN, ZERO, PIN, RIGHT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO }
     },
     { "Fly",
-        { ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT }
+        { ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO }
     },
     { "Fountain",
-        { LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, PIN, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, PIN, RIGHT, PIN }
+        { LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, PIN, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, PIN, RIGHT, PIN, ZERO }
     },
     { "Frog",
-        { LEFT, LEFT, RIGHT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, RIGHT, LEFT, RIGHT, RIGHT }
+        { LEFT, LEFT, RIGHT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, RIGHT, LEFT, RIGHT, RIGHT, ZERO }
     },
     { "Frog2",
-        { LEFT, ZERO, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, RIGHT, ZERO, RIGHT }
+        { LEFT, ZERO, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, RIGHT, ZERO, RIGHT, ZERO }
     },
     { "Furby",
-        { PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, PIN, ZERO, ZERO, PIN }
+        { PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, PIN, ZERO, ZERO, PIN, ZERO }
     },
     { "Gate",
-        { ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, ZERO, PIN, PIN, ZERO }
+        { ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, ZERO }
     },
     { "Ghost",
-        { LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT }
+        { LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO }
     },
     { "Globus",
-        { RIGHT, LEFT, ZERO, PIN, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, PIN, ZERO, RIGHT, LEFT, ZERO }
+        { RIGHT, LEFT, ZERO, PIN, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, PIN, ZERO, RIGHT, LEFT, ZERO, ZERO }
     },
     { "Grotto",
-        { PIN, PIN, ZERO, LEFT, RIGHT, LEFT, ZERO, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, ZERO, RIGHT, LEFT, RIGHT }
+        { PIN, PIN, ZERO, LEFT, RIGHT, LEFT, ZERO, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, ZERO, RIGHT, LEFT, RIGHT, ZERO }
     },
     { "H",
-        { PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, LEFT, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO }
+        { PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, LEFT, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO }
     },
     { "HeadOfDevil",
-        { PIN, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO, ZERO }
+        { PIN, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO, ZERO, ZERO }
     },
     { "Heart",
-        { RIGHT, ZERO, ZERO, ZERO, PIN, LEFT, PIN, LEFT, RIGHT, RIGHT, ZERO, PIN, ZERO, LEFT, LEFT, RIGHT, PIN, RIGHT, PIN, ZERO, ZERO, ZERO, LEFT }
+        { RIGHT, ZERO, ZERO, ZERO, PIN, LEFT, PIN, LEFT, RIGHT, RIGHT, ZERO, PIN, ZERO, LEFT, LEFT, RIGHT, PIN, RIGHT, PIN, ZERO, ZERO, ZERO, LEFT, ZERO }
     },
     { "Heart2",
-        { ZERO, PIN, ZERO, ZERO, LEFT, ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO, RIGHT, ZERO, ZERO, PIN, ZERO }
+        { ZERO, PIN, ZERO, ZERO, LEFT, ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO }
     },
     { "Hexagon",
-        { ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO }
+        { ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, ZERO }
     },
     { "HoleInTheMiddle1",
-        { ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT }
+        { ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, ZERO }
     },
     { "HoleInTheMiddle2",
-        { ZERO, LEFT, RIGHT, ZERO, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT }
+        { ZERO, LEFT, RIGHT, ZERO, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, ZERO }
     },
     { "HouseBoat",
-        { RIGHT, RIGHT, PIN, LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, RIGHT, PIN }
+        { RIGHT, RIGHT, PIN, LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, ZERO }
     },
     { "HouseByHouse",
-        { LEFT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT }
+        { LEFT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, RIGHT, ZERO }
     },
     { "Infinity",
-        { LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT }
+        { LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, ZERO }
     },
     { "Integral",
-        { RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT }
+        { RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO }
     },
     { "Iron",
-        { ZERO, ZERO, ZERO, ZERO, PIN, RIGHT, ZERO, RIGHT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, ZERO, RIGHT }
+        { ZERO, ZERO, ZERO, ZERO, PIN, RIGHT, ZERO, RIGHT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, ZERO, RIGHT, ZERO }
     },
-    { "JustSquares",
-        { RIGHT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, LEFT, PIN, RIGHT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, LEFT }
+    { "just squares",
+        { RIGHT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, LEFT, PIN, RIGHT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, LEFT, ZERO }
     },
     { "Kink",
-        { ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO }
+        { ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO }
     },
     { "Knot",
-        { LEFT, LEFT, PIN, LEFT, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, RIGHT, LEFT, RIGHT, ZERO, RIGHT, PIN, RIGHT, RIGHT, LEFT }
+        { LEFT, LEFT, PIN, LEFT, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, RIGHT, LEFT, RIGHT, ZERO, RIGHT, PIN, RIGHT, RIGHT, LEFT, ZERO }
     },
     { "Leaf",
-        { ZERO, PIN, PIN, ZERO, ZERO, LEFT, ZERO, LEFT, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO }
+        { ZERO, PIN, PIN, ZERO, ZERO, LEFT, ZERO, LEFT, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO }
     },
     { "LeftAsRight",
-        { RIGHT, PIN, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, PIN, LEFT }
+        { RIGHT, PIN, LEFT, RIGHT, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, RIGHT, LEFT, RIGHT, PIN, LEFT, ZERO }
     },
     { "Long-necked",
-        { PIN, ZERO, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, PIN, PIN, ZERO }
+        { PIN, ZERO, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, PIN, PIN, ZERO, ZERO }
     },
-    { "LunaModule",
-        { PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT }
+    { "lunar module",
+        { PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, ZERO }
     },
-    { "MagnifyingGlass",
-        { ZERO, ZERO, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, ZERO, ZERO }
+    { "magnifying glass",
+        { ZERO, ZERO, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, ZERO, ZERO, ZERO }
     },
     { "Mask",
-        { ZERO, ZERO, ZERO, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT }
+        { ZERO, ZERO, ZERO, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, ZERO }
     },
     { "Microscope",
-        { PIN, PIN, ZERO, ZERO, PIN, ZERO, RIGHT, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, LEFT, ZERO, PIN, PIN, ZERO, PIN, PIN }
+        { PIN, PIN, ZERO, ZERO, PIN, ZERO, RIGHT, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, LEFT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO }
     },
     { "Mirror",
-        { PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, LEFT, RIGHT, PIN, RIGHT, ZERO, PIN, PIN, ZERO }
+        { PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, PIN, ZERO, ZERO, LEFT, RIGHT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, ZERO }
     },
     { "MissPiggy",
-        { ZERO, LEFT, LEFT, PIN, RIGHT, ZERO, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, ZERO, LEFT, PIN, RIGHT, RIGHT, ZERO, RIGHT }
+        { ZERO, LEFT, LEFT, PIN, RIGHT, ZERO, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, ZERO, LEFT, PIN, RIGHT, RIGHT, ZERO, RIGHT, ZERO }
     },
     { "Mole",
-        { ZERO, RIGHT, ZERO, RIGHT, LEFT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, LEFT, ZERO, RIGHT, RIGHT, PIN, LEFT }
+        { ZERO, RIGHT, ZERO, RIGHT, LEFT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, LEFT, ZERO, RIGHT, RIGHT, PIN, LEFT, ZERO }
     },
     { "Monk",
-        { LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT }
+        { LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO }
     },
     { "Mountain",
-        { ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, LEFT, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO }
+        { ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, LEFT, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO }
     },
-    { "Mountains",
-        { ZERO, PIN, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO }
+    { "mountains",
+        { ZERO, PIN, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, ZERO }
     },
     { "MouseWithoutTail",
-        { ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO }
+        { ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, ZERO }
     },
-    { "Mushroom",
-        { PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN }
+    { "mushroom",
+        { PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, ZERO }
     },
-    { "Necklace",
-        { ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, RIGHT, ZERO, ZERO }
+    { "necklace",
+        { ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, LEFT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO, RIGHT, ZERO, ZERO, ZERO }
     },
     { "NestledAgainst",
-        { LEFT, ZERO, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT }
+        { LEFT, ZERO, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, ZERO }
     },
     { "NoClue",
-        { ZERO, RIGHT, PIN, LEFT, LEFT, LEFT, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, RIGHT, RIGHT, RIGHT, PIN, LEFT, ZERO }
+        { ZERO, RIGHT, PIN, LEFT, LEFT, LEFT, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, RIGHT, RIGHT, RIGHT, PIN, LEFT, ZERO, ZERO }
     },
     { "Noname",
-        { LEFT, PIN, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT }
+        { LEFT, PIN, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, ZERO }
     },
     { "Obelisk",
-        { PIN, ZERO, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, ZERO, ZERO, ZERO }
+        { PIN, ZERO, ZERO, ZERO, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, ZERO, ZERO, ZERO, ZERO }
     },
     { "Ostrich",
-        { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN }
+        { ZERO, ZERO, PIN, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, ZERO }
     },
     { "Ostrich2",
-        { PIN, PIN, ZERO, PIN, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO }
+        { PIN, PIN, ZERO, PIN, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO }
     },
-    { "PairOfGlasses",
-        { ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, LEFT, ZERO, PIN, ZERO, RIGHT, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO }
+    { "pair of glasses",
+        { ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, LEFT, ZERO, PIN, ZERO, RIGHT, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO }
     },
     { "Parrot",
-        { ZERO, ZERO, ZERO, ZERO, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, ZERO, PIN }
+        { ZERO, ZERO, ZERO, ZERO, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, ZERO, PIN, ZERO }
     },
     { "Penis",
-        { PIN, PIN, RIGHT, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, PIN, PIN }
+        { PIN, PIN, RIGHT, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, LEFT, PIN, PIN, ZERO }
     },
-    { "PictureCommingSoon",
-        { LEFT, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO, RIGHT, RIGHT }
+    { "PictureComingSoon",
+        { LEFT, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO, RIGHT, RIGHT, ZERO }
     },
     { "Pitti",
-        { LEFT, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, RIGHT }
+        { LEFT, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, RIGHT, ZERO }
     },
     { "Plait",
-        { LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT }
+        { LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, ZERO }
     },
     { "Platform",
-        { RIGHT, PIN, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT }
+        { RIGHT, PIN, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, LEFT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO }
     },
     { "PodRacer",
-        { ZERO, PIN, ZERO, PIN, RIGHT, PIN, ZERO, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, ZERO, PIN, LEFT }
+        { ZERO, PIN, ZERO, PIN, RIGHT, PIN, ZERO, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, ZERO, PIN, LEFT, ZERO }
     },
+#if 0
     { "Pokemon",
-        { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT }
+        { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, ZERO }
     },
+#endif
     { "Prawn",
-        { RIGHT, PIN, ZERO, PIN, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT, PIN, ZERO, PIN, LEFT }
+        { RIGHT, PIN, ZERO, PIN, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, PIN, PIN, ZERO, LEFT, PIN, ZERO, PIN, LEFT, ZERO }
     },
     { "Propeller",
-        { ZERO, ZERO, ZERO, RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, RIGHT, ZERO, LEFT, RIGHT }
+        { ZERO, ZERO, ZERO, RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, RIGHT, ZERO, LEFT, RIGHT, ZERO }
     },
     { "Pyramid",
-        { ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, RIGHT, LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, LEFT }
+        { ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, RIGHT, LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, LEFT, ZERO }
     },
     { "QuarterbackTiltedAndReadyToHut",
-        { PIN, ZERO, RIGHT, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, LEFT, ZERO, PIN }
+        { PIN, ZERO, RIGHT, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, LEFT, ZERO, PIN, ZERO }
     },
     { "Ra",
-        { PIN, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT }
+        { PIN, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO }
     },
     { "Rattlesnake",
-        { LEFT, ZERO, LEFT, ZERO, LEFT, ZERO, LEFT, LEFT, ZERO, LEFT, ZERO, LEFT, ZERO, LEFT, RIGHT, ZERO, PIN, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT }
+        { LEFT, ZERO, LEFT, ZERO, LEFT, ZERO, LEFT, LEFT, ZERO, LEFT, ZERO, LEFT, ZERO, LEFT, RIGHT, ZERO, PIN, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, ZERO }
     },
     { "Revelation",
-        { ZERO, ZERO, ZERO, PIN, ZERO, ZERO, PIN, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN }
+        { ZERO, ZERO, ZERO, PIN, ZERO, ZERO, PIN, RIGHT, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, ZERO }
     },
     { "Revolution1",
-        { LEFT, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT }
+        { LEFT, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, ZERO }
     },
     { "Ribbon",
-        { RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT }
+        { RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO }
     },
     { "Rocket",
-        { RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, RIGHT, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, ZERO, LEFT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT }
+        { RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, RIGHT, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, ZERO, LEFT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, ZERO }
     },
     { "Roofed",
-        { ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, ZERO, PIN, ZERO, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, ZERO, PIN, ZERO, RIGHT }
+        { ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, ZERO, PIN, ZERO, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, LEFT, ZERO, PIN, ZERO, RIGHT, ZERO }
     },
     { "Roofs",
-        { PIN, PIN, RIGHT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, LEFT, PIN, PIN }
+        { PIN, PIN, RIGHT, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, LEFT, PIN, PIN, ZERO }
     },
     { "RowHouses",
-        { RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT }
+        { RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO }
     },
     { "Sculpture",
-        { RIGHT, LEFT, PIN, ZERO, ZERO, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, PIN, LEFT, RIGHT, LEFT }
+        { RIGHT, LEFT, PIN, ZERO, ZERO, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO, ZERO, ZERO, PIN, LEFT, RIGHT, LEFT, ZERO }
     },
     { "Seal",
-        { LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, LEFT }
+        { LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO }
     },
     { "Seal2",
-        { RIGHT, PIN, ZERO, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO }
+        { RIGHT, PIN, ZERO, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, PIN, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, ZERO }
     },
     { "Sheep",
-        { RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, LEFT }
+        { RIGHT, LEFT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, LEFT, LEFT, RIGHT, LEFT, ZERO }
     },
     { "Shelter",
-        { LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, RIGHT }
+        { LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, ZERO, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO }
     },
     { "Ship",
-        { PIN, RIGHT, LEFT, LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, LEFT, ZERO, PIN, PIN }
+        { PIN, RIGHT, LEFT, LEFT, LEFT, LEFT, PIN, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, LEFT, ZERO, PIN, PIN, ZERO }
     },
     { "Shpongle",
-        { LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO }
+        { LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, ZERO }
     },
     { "Slide",
-        { LEFT, RIGHT, LEFT, RIGHT, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, RIGHT, LEFT }
+        { LEFT, RIGHT, LEFT, RIGHT, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, RIGHT, LEFT, ZERO }
     },
     { "SmallShip",
-        { ZERO, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, LEFT, RIGHT, ZERO, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, LEFT }
+        { ZERO, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, LEFT, RIGHT, ZERO, LEFT, RIGHT, ZERO, RIGHT, LEFT, ZERO, LEFT, RIGHT, ZERO, LEFT, ZERO }
     },
     { "SnakeReadyToStrike",
-        { LEFT, ZERO, LEFT, ZERO, LEFT, ZERO, LEFT, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, LEFT, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, LEFT }
+        { LEFT, ZERO, LEFT, ZERO, LEFT, ZERO, LEFT, RIGHT, ZERO, RIGHT, ZERO, RIGHT, ZERO, LEFT, ZERO, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO, LEFT, ZERO }
     },
     { "Snakes14",
-        { RIGHT, RIGHT, PIN, ZERO, RIGHT, LEFT, RIGHT, ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, ZERO, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, LEFT, RIGHT }
+        { RIGHT, RIGHT, PIN, ZERO, RIGHT, LEFT, RIGHT, ZERO, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, ZERO, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO }
     },
     { "Snakes15",
-        { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO, PIN, RIGHT }
+        { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, ZERO, PIN, RIGHT, ZERO }
     },
     { "Snakes18",
-        { PIN, PIN, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, PIN }
+        { PIN, PIN, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, RIGHT, PIN, RIGHT, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO }
     },
     { "Snowflake",
-        { LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT }
+        { LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, RIGHT, ZERO }
     },
     { "Snowman",
-        { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO }
+        { ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO }
     },
     { "Source",
-        { PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN }
+        { PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, ZERO }
     },
     { "Spaceship",
-        { PIN, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, PIN }
+        { PIN, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, RIGHT, PIN, PIN, ZERO }
     },
     { "Spaceship2",
-        { PIN, PIN, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, LEFT, LEFT, PIN, PIN }
+        { PIN, PIN, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, LEFT, LEFT, PIN, PIN, ZERO }
     },
     { "Speedboat",
-        { LEFT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, LEFT, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT }
+        { LEFT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, LEFT, ZERO, ZERO, PIN, ZERO, ZERO, RIGHT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, ZERO }
     },
     { "Speedboat2",
-        { PIN, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, PIN, ZERO, RIGHT, PIN, LEFT }
+        { PIN, RIGHT, LEFT, LEFT, RIGHT, RIGHT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, LEFT, LEFT, RIGHT, RIGHT, LEFT, PIN, ZERO, RIGHT, PIN, LEFT, ZERO }
     },
     { "Spider",
-        { RIGHT, RIGHT, ZERO, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, RIGHT, LEFT, RIGHT, ZERO, ZERO, LEFT }
+        { RIGHT, RIGHT, ZERO, ZERO, LEFT, RIGHT, LEFT, PIN, ZERO, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, ZERO, PIN, RIGHT, LEFT, RIGHT, ZERO, ZERO, LEFT, ZERO }
     },
     { "Spitzbergen",
-        { PIN, LEFT, ZERO, RIGHT, RIGHT, LEFT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, PIN, RIGHT, LEFT, LEFT, ZERO }
+        { PIN, LEFT, ZERO, RIGHT, RIGHT, LEFT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, PIN, RIGHT, LEFT, LEFT, ZERO, ZERO }
     },
     { "Square",
-        { ZERO, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, ZERO }
+        { ZERO, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, ZERO, LEFT, LEFT, PIN, RIGHT, RIGHT, ZERO, ZERO, ZERO }
     },
     { "SquareHole",
-        { PIN, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, PIN }
+        { PIN, ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO }
     },
     { "Stage",
-        { RIGHT, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO }
+        { RIGHT, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, LEFT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, ZERO }
     },
     { "Stairs",
-        { ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO }
+        { ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, ZERO }
     },
     { "Stairs2",
-        { ZERO, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO }
+        { ZERO, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO }
     },
     { "Straight",
-        { ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO }
+        { ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO }
     },
     { "Swan",
-        { ZERO, PIN, ZERO, PIN, LEFT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, RIGHT }
+        { ZERO, PIN, ZERO, PIN, LEFT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, LEFT, PIN, LEFT, RIGHT, ZERO }
     },
     { "Swan2",
-        { PIN, ZERO, PIN, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, PIN }
+        { PIN, ZERO, PIN, RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, RIGHT, PIN, ZERO, ZERO, ZERO, ZERO, ZERO, PIN, PIN, ZERO }
     },
     { "Swan3",
-        { PIN, PIN, ZERO, ZERO, ZERO, RIGHT, ZERO, RIGHT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, ZERO, RIGHT }
+        { PIN, PIN, ZERO, ZERO, ZERO, RIGHT, ZERO, RIGHT, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, ZERO, RIGHT, ZERO }
     },
     { "Symbol",
-        { RIGHT, RIGHT, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, RIGHT }
+        { RIGHT, RIGHT, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, ZERO, PIN, PIN, ZERO, PIN, LEFT, LEFT, RIGHT, ZERO }
     },
     { "Symmetry",
-        { RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, LEFT, RIGHT, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, LEFT }
+        { RIGHT, ZERO, LEFT, RIGHT, LEFT, ZERO, LEFT, RIGHT, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, RIGHT, ZERO, RIGHT, LEFT, RIGHT, ZERO, LEFT, ZERO }
     },
     { "Symmetry2",
-        { ZERO, PIN, LEFT, LEFT, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, PIN, LEFT }
+        { ZERO, PIN, LEFT, LEFT, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, PIN, LEFT, ZERO }
     },
     { "TableFireworks",
-        { ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO, RIGHT, PIN }
+        { ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO, RIGHT, PIN, ZERO }
     },
     { "Tapering",
-        { ZERO, ZERO, RIGHT, LEFT, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, ZERO, ZERO }
+        { ZERO, ZERO, RIGHT, LEFT, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, PIN, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, ZERO, ZERO, ZERO }
     },
     { "TaperingTurned",
-        { ZERO, ZERO, RIGHT, LEFT, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, ZERO, ZERO }
+        { ZERO, ZERO, RIGHT, LEFT, PIN, LEFT, ZERO, PIN, PIN, ZERO, LEFT, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, ZERO, ZERO, ZERO }
     },
     { "TeaLightStick",
-        { RIGHT, ZERO, PIN, PIN, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN }
+        { RIGHT, ZERO, PIN, PIN, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, ZERO }
     },
-    { "Tent",
-        { RIGHT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO }
+    { "thighmaster",
+        { RIGHT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO }
     },
     { "Terraces",
-        { RIGHT, LEFT, ZERO, RIGHT, LEFT, PIN, LEFT, LEFT, PIN, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT }
+        { RIGHT, LEFT, ZERO, RIGHT, LEFT, PIN, LEFT, LEFT, PIN, LEFT, RIGHT, RIGHT, RIGHT, LEFT, LEFT, LEFT, RIGHT, PIN, RIGHT, RIGHT, PIN, RIGHT, LEFT, ZERO }
     },
     { "Terrier",
-        { PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO }
+        { PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO }
     },
     { "Three-Legged",
-        { RIGHT, ZERO, LEFT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, RIGHT, ZERO, PIN, ZERO, LEFT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, RIGHT, ZERO, LEFT }
+        { RIGHT, ZERO, LEFT, RIGHT, ZERO, LEFT, PIN, RIGHT, ZERO, RIGHT, ZERO, PIN, ZERO, LEFT, ZERO, LEFT, PIN, RIGHT, ZERO, LEFT, RIGHT, ZERO, LEFT, ZERO }
     },
     { "ThreePeaks",
-        { RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT }
+        { RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, ZERO }
     },
     { "ToTheFront",
-        { ZERO, PIN, RIGHT, LEFT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, LEFT, LEFT, PIN, ZERO, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT }
+        { ZERO, PIN, RIGHT, LEFT, LEFT, LEFT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, LEFT, LEFT, PIN, ZERO, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, ZERO }
     },
     { "Top",
-        { PIN, LEFT, LEFT, PIN, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, RIGHT, PIN, RIGHT, RIGHT, PIN, ZERO }
+        { PIN, LEFT, LEFT, PIN, LEFT, ZERO, ZERO, RIGHT, LEFT, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, RIGHT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO }
     },
     { "Transport",
-        { PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO, ZERO }
+        { PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, ZERO, ZERO, ZERO }
     },
     { "Triangle",
-        { ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT }
+        { ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, LEFT, ZERO, ZERO, ZERO, ZERO, ZERO, ZERO, RIGHT, ZERO }
     },
     { "Tripple",
-        { PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN }
+        { PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, PIN, LEFT, PIN, LEFT, PIN, RIGHT, PIN, ZERO }
     },
+#if 0
     { "Turtle",
-        { RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO }
+        { RIGHT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, PIN, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, ZERO, LEFT, RIGHT, ZERO, ZERO }
     },
+#endif
     { "Twins",
-        { ZERO, PIN, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, ZERO, ZERO, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, ZERO }
+        { ZERO, PIN, ZERO, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, PIN, ZERO, ZERO, PIN, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, ZERO, PIN, ZERO, ZERO, ZERO }
     },
     { "TwoSlants",
-        { ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, PIN }
+        { ZERO, PIN, ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, ZERO, RIGHT, PIN, ZERO }
     },
     { "TwoWings",
-        { PIN, LEFT, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, ZERO }
+        { PIN, LEFT, ZERO, RIGHT, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, PIN, PIN, ZERO, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, LEFT, ZERO, ZERO }
     },
     { "UFO",
-        { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, PIN, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT }
+        { LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, LEFT, PIN, LEFT, LEFT, LEFT, RIGHT, LEFT, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO }
     },
-    { "USSEnterprice",
-        { LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, ZERO }
+    { "USS Enterprise",
+        { LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, ZERO, PIN, PIN, ZERO, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, ZERO }
     },
     { "UpAndDown",
-        { ZERO, PIN, ZERO, PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO }
+        { ZERO, PIN, ZERO, PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, ZERO }
     },
     { "Upright",
-        { ZERO, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO }
+        { ZERO, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, PIN, ZERO, ZERO, LEFT, PIN, RIGHT, ZERO, ZERO, PIN, RIGHT, RIGHT, LEFT, RIGHT, LEFT, LEFT, ZERO, ZERO }
     },
     { "Upside-down",
-        { PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, RIGHT, LEFT, LEFT, PIN, RIGHT, RIGHT, LEFT, LEFT, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN }
+        { PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, RIGHT, RIGHT, LEFT, LEFT, PIN, RIGHT, RIGHT, LEFT, LEFT, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, ZERO }
     },
     { "Valley",
-        { ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO }
+        { ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, RIGHT, ZERO, PIN, ZERO, LEFT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, PIN, LEFT, ZERO, ZERO }
     },
     { "Viaduct",
-        { PIN, RIGHT, PIN, LEFT, PIN, ZERO, ZERO, PIN, RIGHT, ZERO, RIGHT, RIGHT, ZERO, RIGHT, PIN, ZERO, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO }
+        { PIN, RIGHT, PIN, LEFT, PIN, ZERO, ZERO, PIN, RIGHT, ZERO, RIGHT, RIGHT, ZERO, RIGHT, PIN, ZERO, ZERO, PIN, LEFT, PIN, RIGHT, PIN, ZERO, ZERO }
     },
     { "View",
-        { ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, PIN, RIGHT, PIN, LEFT }
+        { ZERO, RIGHT, PIN, LEFT, PIN, RIGHT, ZERO, ZERO, RIGHT, PIN, LEFT, LEFT, RIGHT, RIGHT, PIN, LEFT, ZERO, ZERO, LEFT, PIN, RIGHT, PIN, LEFT, ZERO }
     },
     { "Waterfall",
-        { LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT }
+        { LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, PIN, LEFT, ZERO, RIGHT, ZERO }
     },
-    { "WindWheel",
-        { PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO }
+    { "windwheel",
+        { PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, ZERO, ZERO }
     },
     { "Window",
-        { PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO }
+        { PIN, ZERO, PIN, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, ZERO, PIN, PIN, ZERO, ZERO, ZERO, ZERO, ZERO }
     },
     { "WindowToTheWorld",
-        { PIN, LEFT, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO }
+        { PIN, LEFT, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, RIGHT, PIN, LEFT, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO, PIN, ZERO, ZERO }
     },
     { "Windshield",
-        { PIN, PIN, ZERO, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, ZERO, PIN, PIN, ZERO, PIN }
+        { PIN, PIN, ZERO, RIGHT, PIN, LEFT, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, RIGHT, PIN, LEFT, ZERO, PIN, PIN, ZERO, PIN, ZERO }
     },
     { "WingNut",
-        { ZERO, ZERO, ZERO, ZERO, PIN, RIGHT, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, RIGHT, RIGHT, PIN, ZERO, ZERO, ZERO, ZERO }
+        { ZERO, ZERO, ZERO, ZERO, PIN, RIGHT, RIGHT, RIGHT, PIN, RIGHT, LEFT, PIN, LEFT, RIGHT, PIN, RIGHT, RIGHT, RIGHT, PIN, ZERO, ZERO, ZERO, ZERO, ZERO }
     },
     { "Wings2",
-        { RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, ZERO }
+        { RIGHT, ZERO, PIN, ZERO, LEFT, PIN, RIGHT, PIN, RIGHT, LEFT, RIGHT, RIGHT, LEFT, LEFT, RIGHT, LEFT, PIN, LEFT, PIN, RIGHT, ZERO, PIN, ZERO, ZERO }
     },
     { "WithoutName",
-        { PIN, RIGHT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN }
+        { PIN, RIGHT, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, ZERO, PIN, RIGHT, PIN, LEFT, PIN, ZERO, PIN, RIGHT, RIGHT, PIN, LEFT, LEFT, PIN, ZERO }
     },
     { "Wolf",
-        { ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN }
+        { ZERO, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, PIN, ZERO, PIN, PIN, ZERO, PIN, ZERO, ZERO, ZERO, PIN, PIN, ZERO, ZERO, ZERO, PIN, ZERO }
     },
     { "X",
-        { LEFT, ZERO, ZERO, PIN, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, RIGHT, PIN, ZERO, ZERO }
+        { LEFT, ZERO, ZERO, PIN, LEFT, RIGHT, RIGHT, PIN, LEFT, RIGHT, ZERO, PIN, PIN, ZERO, LEFT, RIGHT, PIN, LEFT, LEFT, RIGHT, PIN, ZERO, ZERO, ZERO }
     },
 };
 
-int models = (sizeof(model) / sizeof(struct model_s));
+static size_t models = sizeof(model) / sizeof(struct model_s);
 
 #define VOFFSET 0.045
 
@@ -1269,7 +1300,7 @@ int models = (sizeof(model) / sizeof(struct model_s));
 #define RANDSIGN() ((random() & 1) ? 1 : -1)
 
 /* the triangular prism what makes up the basic unit */
-float solid_prism_v[][3] = {
+static const float solid_prism_v[][3] = {
     /* first corner, bottom left front */
     { VOFFSET, VOFFSET, 1.0 },
     { VOFFSET, 0.00, 1.0 - VOFFSET },
@@ -1295,7 +1326,7 @@ float solid_prism_v[][3] = {
     { VOFFSET / M_SQRT1_2, 1.0 - VOFFSET * M_SQRT1_2, VOFFSET },
     { 0.0, 1.0 - VOFFSET / M_SQRT1_2, VOFFSET }};
 
-float solid_prism_n[][3] = {/* corners */
+static const float solid_prism_n[][3] = {/* corners */
     { -VOFFSET, -VOFFSET, VOFFSET },
     { VOFFSET, -VOFFSET, VOFFSET },
     { -VOFFSET, VOFFSET, VOFFSET },
@@ -1319,18 +1350,20 @@ float solid_prism_n[][3] = {/* corners */
     { -1.0, 0.0, 0.0 },
     { 0.0, 0.0, -1.0 }};
 
-float wire_prism_v[][3] = {{ 0.0, 0.0, 1.0 },
+static const float wire_prism_v[][3] = {{ 0.0, 0.0, 1.0 },
                           { 1.0, 0.0, 1.0 },
                           { 0.0, 1.0, 1.0 },
                           { 0.0, 0.0, 0.0 },
                           { 1.0, 0.0, 0.0 },
                           { 0.0, 1.0, 0.0 }};
 
-float wire_prism_n[][3] = {{ 0.0, 0.0, 1.0},
+/*
+static const float wire_prism_n[][3] = {{ 0.0, 0.0, 1.0},
                           { 0.0,-1.0, 0.0},
                           { M_SQRT1_2, M_SQRT1_2, 0.0},
                           {-1.0, 0.0, 0.0},
                           { 0.0, 0.0,-1.0}};
+*/
 
 static struct glsnake_cfg * glc = NULL;
 #ifdef HAVE_GLUT
@@ -1341,39 +1374,57 @@ typedef float (*morphFunc)(long);
 
 #ifdef HAVE_GLUT
 /* forward definitions for GLUT functions */
-void calc_rotation();
-inline void ui_mousedrag();
+static void calc_rotation();
+static inline void ui_mousedrag();
 #endif
 
-void gl_init(
+static const GLfloat white_light[] = { 1.0, 1.0, 1.0, 1.0 };
+static const GLfloat lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
+static const GLfloat mat_specular[] = { 0.1, 0.1, 0.1, 1.0 };
+static const GLfloat mat_shininess[] = { 20.0 };
+
+static void gl_init(
 #ifndef HAVE_GLUT
             ModeInfo * mi
 #endif
-            ) {
-    float light_pos[][3] = {{0.0, 0.0, 20.0}, {0.0, 20.0, 0.0}};
-    float light_dir[][3] = {{0.0, 0.0,-20.0}, {0.0,-20.0, 0.0}};
+            ) 
+{
+    float light_pos[][3] = {{0.0, 10.0, 20.0}, {0.0, 20.0, -1.0}};
+    float light_dir[][3] = {{0.0, -10.0,-20.0}, {0.0,-20.0, 1.0}};
 
-    glClearColor(0.0, 0.0, 0.0, 0.0);
     glEnable(GL_DEPTH_TEST);
     glShadeModel(GL_SMOOTH);
     glCullFace(GL_BACK);
-    glEnable(GL_CULL_FACE);
+    /*glEnable(GL_CULL_FACE);*/
     glEnable(GL_NORMALIZE);
+    if (transparent) {
+       glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+       glEnable(GL_BLEND);
+    }
 
     if (!wireframe) {
-       glColor3f(1.0, 1.0, 1.0);
+       /*glColor4f(1.0, 1.0, 1.0, 1.0);*/
        glLightfv(GL_LIGHT0, GL_POSITION, light_pos[0]);
        glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, light_dir[0]);
+       glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light);
+       /*glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);*/
+#if 1
        glLightfv(GL_LIGHT1, GL_POSITION, light_pos[1]);
        glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, light_dir[1]);
+       glLightfv(GL_LIGHT1, GL_DIFFUSE, white_light);
+       glLightfv(GL_LIGHT1, GL_SPECULAR, white_light);
+#endif
+       glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
+       glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
+       glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT0);
        glEnable(GL_LIGHT1);
-       glEnable(GL_COLOR_MATERIAL);
+       /*glEnable(GL_COLOR_MATERIAL);*/
     }
 }
 
-void gettime(snaketime *t)
+static void gettime(snaketime *t)
 {
 #ifdef HAVE_GETTIMEOFDAY
 #ifdef GETTIMEOFDAY_TWO_ARGS
@@ -1390,25 +1441,27 @@ void gettime(snaketime *t)
 }
 
 
-void start_morph(int model_index, int immediate);
+ENTRYPOINT void glsnake_reshape(
+#ifndef HAVE_GLUT
+                    ModeInfo * mi,
+#endif
+                    int w, int h);
+
+static void start_morph(struct glsnake_cfg *,
+                        unsigned int model_index, int immediate);
 
 /* wot initialises it */
-void glsnake_init(
+ENTRYPOINT void glsnake_init(
 #ifndef HAVE_GLUT
 ModeInfo * mi
 #endif
-) {
+) 
+{
 #ifndef HAVE_GLUT
     struct glsnake_cfg * bp;
 
     /* set up the conf struct and glx contexts */
-    if (!glc) {
-       glc = (struct glsnake_cfg *) calloc(MI_NUM_SCREENS(mi), sizeof(struct glsnake_cfg));
-       if (!glc) {
-           fprintf(stderr, "%s: out of memory\n", progname);
-           exit(1);
-       }
-    }
+    MI_INIT(mi, glc, NULL);
     bp = &glc[MI_SCREEN(mi)];
 
     if ((bp->glx_context = init_GL(mi)) != NULL) {
@@ -1436,49 +1489,56 @@ ModeInfo * mi
     bp->prev_colour = bp->next_colour = COLOUR_ACYCLIC;
     bp->next_model = RAND(models);
     bp->prev_model = START_MODEL;
-    start_morph(bp->prev_model, 1);
+    start_morph(bp, bp->prev_model, 1);
 
     /* set up a font for the labels */
 #ifndef HAVE_GLUT
     if (titles)
-       load_font(mi->dpy, "labelfont", &bp->font, &bp->font_list);
+        bp->font_data = load_texture_font (mi->dpy, "labelfont");
 #endif
     
     /* build a solid display list */
-    glc->node_solid = glGenLists(1);
-    glNewList(glc->node_solid, GL_COMPILE);
+    bp->node_solid = glGenLists(1);
+    glNewList(bp->node_solid, GL_COMPILE);
     /* corners */
     glBegin(GL_TRIANGLES);
     glNormal3fv(solid_prism_n[0]);
     glVertex3fv(solid_prism_v[0]);
     glVertex3fv(solid_prism_v[2]);
     glVertex3fv(solid_prism_v[1]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[1]);
     glVertex3fv(solid_prism_v[6]);
     glVertex3fv(solid_prism_v[7]);
     glVertex3fv(solid_prism_v[8]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[2]);
     glVertex3fv(solid_prism_v[12]);
     glVertex3fv(solid_prism_v[13]);
     glVertex3fv(solid_prism_v[14]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[3]);
     glVertex3fv(solid_prism_v[3]);
     glVertex3fv(solid_prism_v[4]);
     glVertex3fv(solid_prism_v[5]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[4]);
     glVertex3fv(solid_prism_v[9]);
     glVertex3fv(solid_prism_v[11]);
     glVertex3fv(solid_prism_v[10]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[5]);
     glVertex3fv(solid_prism_v[16]);
     glVertex3fv(solid_prism_v[15]);
     glVertex3fv(solid_prism_v[17]);
+    bp->node_polys++;
     glEnd();
+
     /* edges */
     glBegin(GL_QUADS);
     glNormal3fv(solid_prism_n[6]);
@@ -1486,54 +1546,63 @@ ModeInfo * mi
     glVertex3fv(solid_prism_v[12]);
     glVertex3fv(solid_prism_v[14]);
     glVertex3fv(solid_prism_v[2]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[7]);
     glVertex3fv(solid_prism_v[0]);
     glVertex3fv(solid_prism_v[1]);
     glVertex3fv(solid_prism_v[7]);
     glVertex3fv(solid_prism_v[6]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[8]);
     glVertex3fv(solid_prism_v[6]);
     glVertex3fv(solid_prism_v[8]);
     glVertex3fv(solid_prism_v[13]);
     glVertex3fv(solid_prism_v[12]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[9]);
     glVertex3fv(solid_prism_v[3]);
     glVertex3fv(solid_prism_v[5]);
     glVertex3fv(solid_prism_v[17]);
     glVertex3fv(solid_prism_v[15]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[10]);
     glVertex3fv(solid_prism_v[3]);
     glVertex3fv(solid_prism_v[9]);
     glVertex3fv(solid_prism_v[10]);
     glVertex3fv(solid_prism_v[4]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[11]);
     glVertex3fv(solid_prism_v[15]);
     glVertex3fv(solid_prism_v[16]);
     glVertex3fv(solid_prism_v[11]);
     glVertex3fv(solid_prism_v[9]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[12]);
     glVertex3fv(solid_prism_v[1]);
     glVertex3fv(solid_prism_v[2]);
     glVertex3fv(solid_prism_v[5]);
     glVertex3fv(solid_prism_v[4]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[13]);
     glVertex3fv(solid_prism_v[8]);
     glVertex3fv(solid_prism_v[7]);
     glVertex3fv(solid_prism_v[10]);
     glVertex3fv(solid_prism_v[11]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[14]);
     glVertex3fv(solid_prism_v[13]);
     glVertex3fv(solid_prism_v[16]);
     glVertex3fv(solid_prism_v[17]);
     glVertex3fv(solid_prism_v[14]);
+    bp->node_polys++;
     glEnd();
     
     /* faces */
@@ -1542,11 +1611,13 @@ ModeInfo * mi
     glVertex3fv(solid_prism_v[0]);
     glVertex3fv(solid_prism_v[6]);
     glVertex3fv(solid_prism_v[12]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[19]);
     glVertex3fv(solid_prism_v[3]);
     glVertex3fv(solid_prism_v[15]);
     glVertex3fv(solid_prism_v[9]);
+    bp->node_polys++;
     glEnd();
     
     glBegin(GL_QUADS);
@@ -1555,39 +1626,48 @@ ModeInfo * mi
     glVertex3fv(solid_prism_v[4]);
     glVertex3fv(solid_prism_v[10]);
     glVertex3fv(solid_prism_v[7]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[17]);
     glVertex3fv(solid_prism_v[8]);
     glVertex3fv(solid_prism_v[11]);
     glVertex3fv(solid_prism_v[16]);
     glVertex3fv(solid_prism_v[13]);
+    bp->node_polys++;
     
     glNormal3fv(solid_prism_n[18]);
     glVertex3fv(solid_prism_v[2]);
     glVertex3fv(solid_prism_v[14]);
     glVertex3fv(solid_prism_v[17]);
     glVertex3fv(solid_prism_v[5]);
+    bp->node_polys++;
     glEnd();
     glEndList();
     
     /* build wire display list */
-    glc->node_wire = glGenLists(1);
-    glNewList(glc->node_wire, GL_COMPILE);
+    bp->node_wire = glGenLists(1);
+    glNewList(bp->node_wire, GL_COMPILE);
     glBegin(GL_LINE_STRIP);
     glVertex3fv(wire_prism_v[0]);
     glVertex3fv(wire_prism_v[1]);
+    bp->node_polys++;
     glVertex3fv(wire_prism_v[2]);
     glVertex3fv(wire_prism_v[0]);
+    bp->node_polys++;
     glVertex3fv(wire_prism_v[3]);
     glVertex3fv(wire_prism_v[4]);
+    bp->node_polys++;
     glVertex3fv(wire_prism_v[5]);
     glVertex3fv(wire_prism_v[3]);
+    bp->node_polys++;
     glEnd();
     glBegin(GL_LINES);
     glVertex3fv(wire_prism_v[1]);
     glVertex3fv(wire_prism_v[4]);
+    bp->node_polys++;
     glVertex3fv(wire_prism_v[2]);
     glVertex3fv(wire_prism_v[5]);
+    bp->node_polys++;
     glEnd();
     glEndList();
     
@@ -1597,19 +1677,24 @@ ModeInfo * mi
 #endif
 }
 
-void draw_title(
+static void draw_title(
 #ifndef HAVE_GLUT
                ModeInfo * mi
 #endif
-               ) {
+               ) 
+{
 #ifndef HAVE_GLUT
     struct glsnake_cfg * bp = &glc[MI_SCREEN(mi)];
 #endif
 
     /* draw some text */
-    glPushAttrib(GL_TRANSFORM_BIT | GL_ENABLE_BIT);
+
+/*    glPushAttrib((GLbitfield) GL_TRANSFORM_BIT | GL_ENABLE_BIT);*/
     glDisable(GL_LIGHTING);
     glDisable(GL_DEPTH_TEST);
+    if (transparent) {
+       glDisable(GL_BLEND);
+    }
     glMatrixMode(GL_PROJECTION);
     glPushMatrix();
     glLoadIdentity();
@@ -1617,32 +1702,50 @@ void draw_title(
     glPushMatrix();
     glLoadIdentity();
 #ifdef HAVE_GLUT
-    gluOrtho2D(0, glc->width, 0, glc->height);
+    glOrtho((GLdouble) 0., (GLdouble) bp->width, (GLdouble) 0., (GLdouble) bp->height, -1, 1);
 #else
-    gluOrtho2D(0, mi->xgwa.width, 0, mi->xgwa.height);
+    glOrtho((GLdouble) 0., (GLdouble) mi->xgwa.width, (GLdouble) 0., (GLdouble) mi->xgwa.height, -1, 1);
 #endif
-    glColor3f(1.0, 1.0, 1.0);
+
+    glColor4f(1.0, 1.0, 1.0, 1.0);
     {
        char interactstr[] = "interactive";
-       char * s;
+       const char * s;
+#ifdef HAVE_GLUT
+       int w;
+#endif
+       
        if (interactive)
            s = interactstr;
        else
-           s = model[glc->next_model].name;
-
-        print_gl_string (mi->dpy, bp->font, bp->font_list,
-                         mi->xgwa.width, mi->xgwa.height,
-                         10, mi->xgwa.height - 10,
-                         s);
+           s = model[bp->next_model].name;
+       
+#ifdef HAVE_GLUT
+       {
+           unsigned int i = 0;
+           
+           w = glutBitmapLength(GLUT_BITMAP_HELVETICA_12, (const unsigned char *) s);
+           glRasterPos2f((GLfloat) (bp->width - w - 3), 4.0);
+           while (s[i] != '\0')
+               glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, s[i++]);
+       }
+#else
+       print_texture_label (mi->dpy, bp->font_data,
+                             mi->xgwa.width, mi->xgwa.height,
+                             1, s);
+#endif
     }
     glPopMatrix();
     glMatrixMode(GL_PROJECTION);
     glPopMatrix();
-    glPopAttrib();
+
+
+/*    glPopAttrib();*/
 }
 
 /* apply the matrix to the origin and stick it in vec */
-void matmult_origin(float rotmat[16], float vec[4]) {
+static void matmult_origin(float rotmat[16], float vec[4]) 
+{
 #if 1
     vec[0] = 0.5 * rotmat[0] + 0.5 * rotmat[4] + 0.5 * rotmat [8] + 1 * rotmat[12];
     vec[1] = 0.5 * rotmat[1] + 0.5 * rotmat[5] + 0.5 * rotmat [9] + 1 * rotmat[13];
@@ -1661,27 +1764,30 @@ void matmult_origin(float rotmat[16], float vec[4]) {
 }
 
 /* wot gets called when the winder is resized */
-void glsnake_reshape(
+ENTRYPOINT void glsnake_reshape(
 #ifndef HAVE_GLUT
                     ModeInfo * mi,
 #endif
-                    int w, int h) {
+                    int w, int h) 
+{
     glViewport(0, 0, (GLint) w, (GLint) h);
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
-    gluPerspective(zoom, w/(GLfloat)h, 0.05, 100.0);
+    /* jwz: 0.05 was too close (left black rectangles) */
+    gluPerspective(zoom, (GLdouble) w / (GLdouble) h, 1.0, 100.0);
     gluLookAt(0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
     glMatrixMode(GL_MODELVIEW);
     /*gluLookAt(0.0, 0.0, 20.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);*/
     glLoadIdentity();
 #ifdef HAVE_GLUT
-    glc->width = w;
-    glc->height = h;
+    bp->width = w;
+    bp->height = h;
 #endif
 }
 
 /* Returns the new dst_dir for the given src_dir and dst_dir */
-int cross_product(int src_dir, int dst_dir) {
+static int cross_product(int src_dir, int dst_dir) 
+{
     return X_MASK*(GETSCALAR(src_dir,Y_MASK) * GETSCALAR(dst_dir,Z_MASK) -
                   GETSCALAR(src_dir,Z_MASK) * GETSCALAR(dst_dir,Y_MASK))+ 
        Y_MASK*(GETSCALAR(src_dir,Z_MASK) * GETSCALAR(dst_dir,X_MASK) -
@@ -1695,7 +1801,8 @@ int cross_product(int src_dir, int dst_dir) {
  *  is_cyclic = true if last node connects back to first node
  *  last_turn = for cyclic snakes, specifes what the 24th turn would be
  */
-void calc_snake_metrics(void) {
+static void calc_snake_metrics(struct glsnake_cfg *bp) 
+{
     int srcDir, dstDir;
     int i, x, y, z;
     int prevSrcDir = -Y_MASK;
@@ -1705,7 +1812,7 @@ void calc_snake_metrics(void) {
     /* zero the grid */
     memset(&grid, 0, sizeof(int) * 25*25*25);
     
-    glc->is_legal = 1;
+    bp->is_legal = 1;
     x = y = z = 12;
     
     /* trace path of snake - and keep record for is_legal */
@@ -1717,7 +1824,7 @@ void calc_snake_metrics(void) {
        y += GETSCALAR(prevDstDir, Y_MASK);
        z += GETSCALAR(prevDstDir, Z_MASK);
 
-       switch ((int) model[glc->next_model].node[i]) {
+       switch ((int) model[bp->next_model].node[i]) {
          case (int) (ZERO):
            dstDir = -prevSrcDir;
            break;
@@ -1727,7 +1834,7 @@ void calc_snake_metrics(void) {
          case (int) (RIGHT):
          case (int) (LEFT):
            dstDir = cross_product(prevSrcDir, prevDstDir);
-           if (model[glc->next_model].node[i] == (int) (RIGHT))
+           if (model[bp->next_model].node[i] == (int) (RIGHT))
                dstDir = -dstDir;
            break;
          default:
@@ -1743,28 +1850,29 @@ void calc_snake_metrics(void) {
        else if (grid[x][y][z] + srcDir + dstDir == 0)
            grid[x][y][z] = 8;
        else
-           glc->is_legal = 0;
+           bp->is_legal = 0;
        
        prevSrcDir = srcDir;
        prevDstDir = dstDir;
     }  
     
     /* determine if the snake is cyclic */
-    glc->is_cyclic = (dstDir == Y_MASK && x == 12 && y == 11 && z == 12);
+    bp->is_cyclic = (dstDir == Y_MASK && x == 12 && y == 11 && z == 12);
     
     /* determine last_turn */
-    glc->last_turn = -1;
-    if (glc->is_cyclic)
+    bp->last_turn = -1;
+    if (bp->is_cyclic)
        switch (srcDir) {
-         case -Z_MASK: glc->last_turn = ZERO; break;
-         case Z_MASK:  glc->last_turn = PIN; break;
-         case X_MASK:  glc->last_turn = LEFT; break;
-         case -X_MASK: glc->last_turn = RIGHT; break;
+         case -Z_MASK: bp->last_turn = ZERO; break;
+         case Z_MASK:  bp->last_turn = PIN; break;
+         case X_MASK:  bp->last_turn = LEFT; break;
+         case -X_MASK: bp->last_turn = RIGHT; break;
        }
 }
 
 /* work out how far through the current morph we are */
-float morph_percent(void) {
+static float morph_percent(struct glsnake_cfg *bp) 
+{
     float retval;
     int i;
 
@@ -1784,14 +1892,14 @@ float morph_percent(void) {
            /* work out the maximum rotation this node has to go through
             * from the previous to the next model, taking into account that
             * the snake always morphs through the smaller angle */
-           rot = fabs(model[glc->prev_model].node[i] -
-                      model[glc->next_model].node[i]);
+           rot = fabs(model[bp->prev_model].node[i] -
+                      model[bp->next_model].node[i]);
            if (rot > 180.0) rot = 180.0 - rot;
            /* work out the difference between the current position and the
             * target */
-           ang_diff = fabs(glc->node[i] -
-                           model[glc->next_model].node[i]);
-           if (ang_diff > 180.0) ang_diff = 180 - ang_diff;
+           ang_diff = fabs(bp->node[i] -
+                           model[bp->next_model].node[i]);
+           if (ang_diff > 180.0) ang_diff = 180.0 - ang_diff;
            /* if it's the biggest so far, record it */
            if (rot > rot_max) rot_max = rot;
            if (ang_diff > ang_diff_max) ang_diff_max = ang_diff;
@@ -1811,101 +1919,112 @@ float morph_percent(void) {
     return retval;
 }
 
-void morph_colour(void) {
+static void morph_colour(struct glsnake_cfg *bp) 
+{
     float percent, compct; /* complement of percentage */
 
-    percent = morph_percent();
+    percent = morph_percent(bp);
     compct = 1.0 - percent;
 
-    glc->colour[0][0] = colour[glc->prev_colour][0][0] * compct + colour[glc->next_colour][0][0] * percent;
-    glc->colour[0][1] = colour[glc->prev_colour][0][1] * compct + colour[glc->next_colour][0][1] * percent;
-    glc->colour[0][2] = colour[glc->prev_colour][0][2] * compct + colour[glc->next_colour][0][2] * percent;
+    bp->colour[0][0] = colour[bp->prev_colour][0][0] * compct + colour[bp->next_colour][0][0] * percent;
+    bp->colour[0][1] = colour[bp->prev_colour][0][1] * compct + colour[bp->next_colour][0][1] * percent;
+    bp->colour[0][2] = colour[bp->prev_colour][0][2] * compct + colour[bp->next_colour][0][2] * percent;
+    bp->colour[0][3] = colour[bp->prev_colour][0][3] * compct + colour[bp->next_colour][0][3] * percent;
 
-    glc->colour[1][0] = colour[glc->prev_colour][1][0] * compct + colour[glc->next_colour][1][0] * percent;
-    glc->colour[1][1] = colour[glc->prev_colour][1][1] * compct + colour[glc->next_colour][1][1] * percent;
-    glc->colour[1][2] = colour[glc->prev_colour][1][2] * compct + colour[glc->next_colour][1][2] * percent;
+    bp->colour[1][0] = colour[bp->prev_colour][1][0] * compct + colour[bp->next_colour][1][0] * percent;
+    bp->colour[1][1] = colour[bp->prev_colour][1][1] * compct + colour[bp->next_colour][1][1] * percent;
+    bp->colour[1][2] = colour[bp->prev_colour][1][2] * compct + colour[bp->next_colour][1][2] * percent;
+    bp->colour[1][3] = colour[bp->prev_colour][1][3] * compct + colour[bp->next_colour][1][3] * percent;
 }
 
 /* Start morph process to this model */
-void start_morph(int model_index, int immediate) {
+static void start_morph(struct glsnake_cfg *bp, 
+                        unsigned int model_index, int immediate)
+{
     /* if immediate, don't bother morphing, go straight to the next model */
     if (immediate) {
        int i;
 
        for (i = 0; i < NODE_COUNT; i++)
-           glc->node[i] = model[model_index].node[i];
+           bp->node[i] = model[model_index].node[i];
     }
 
-    glc->prev_model = glc->next_model;
-    glc->next_model = model_index;
-    glc->prev_colour = glc->next_colour;
+    bp->prev_model = bp->next_model;
+    bp->next_model = model_index;
+    bp->prev_colour = bp->next_colour;
 
-    calc_snake_metrics();
-    if (!glc->is_legal)
-       glc->next_colour = COLOUR_INVALID;
+    calc_snake_metrics(bp);
+    if (!bp->is_legal)
+       bp->next_colour = COLOUR_INVALID;
     else if (altcolour)
-       glc->next_colour = COLOUR_AUTHENTIC;
-    else if (glc->is_cyclic)
-       glc->next_colour = COLOUR_CYCLIC;
+       bp->next_colour = COLOUR_AUTHENTIC;
+    else if (bp->is_cyclic)
+       bp->next_colour = COLOUR_CYCLIC;
     else
-       glc->next_colour = COLOUR_ACYCLIC;
+       bp->next_colour = COLOUR_ACYCLIC;
 
     if (immediate) {
-       glc->colour[0][0] = colour[glc->next_colour][0][0];
-       glc->colour[0][1] = colour[glc->next_colour][0][1];
-       glc->colour[0][2] = colour[glc->next_colour][0][2];
-       glc->colour[1][0] = colour[glc->next_colour][1][0];
-       glc->colour[1][1] = colour[glc->next_colour][1][1];
-       glc->colour[1][2] = colour[glc->next_colour][1][2];
+       bp->colour[0][0] = colour[bp->next_colour][0][0];
+       bp->colour[0][1] = colour[bp->next_colour][0][1];
+       bp->colour[0][2] = colour[bp->next_colour][0][2];
+       bp->colour[0][3] = colour[bp->next_colour][0][3];
+       bp->colour[1][0] = colour[bp->next_colour][1][0];
+       bp->colour[1][1] = colour[bp->next_colour][1][1];
+       bp->colour[1][2] = colour[bp->next_colour][1][2];
+       bp->colour[1][3] = colour[bp->next_colour][1][3];
     }
-    glc->morphing = 1;
+    bp->morphing = 1;
 
-    morph_colour();
+    morph_colour(bp);
 }
 
+#if 0
 /* Returns morph progress */
-float morph(long iter_msec) {
+static float morph(long iter_msec) 
+{
     /* work out the maximum angle for this iteration */
     int still_morphing;
     float iter_angle_max, largest_diff, largest_progress;
     int i;
 
-    if (glc->new_morph)
-       glc->new_morph = 0;
+    if (bp->new_morph)
+       bp->new_morph = 0;
        
     iter_angle_max = 90.0 * (angvel/1000.0) * iter_msec;
        
     still_morphing = 0;
     largest_diff = largest_progress = 0.0;
     for (i = 0; i < NODE_COUNT; i++) {
-       float curAngle = glc->node[i];
-       float destAngle = model[glc->next_model].node[i];
+       float curAngle = bp->node[i];
+       float destAngle = model[bp->next_model].node[i];
        if (curAngle != destAngle) {
            still_morphing = 1;
            if (fabs(curAngle-destAngle) <= iter_angle_max)
-               glc->node[i] = destAngle;
+               bp->node[i] = destAngle;
            else if (fmod(curAngle-destAngle+360,360) > 180)
-               glc->node[i] = fmod(curAngle + iter_angle_max, 360);
+               bp->node[i] = fmod(curAngle + iter_angle_max, 360);
            else
-               glc->node[i] = fmod(curAngle+360 - iter_angle_max, 360);
-           largest_diff = MAX(largest_diff, fabs(destAngle-glc->node[i]));
-           largest_progress = MAX(largest_diff, fabs(glc->node[i] - model[glc->prev_model].node[i]));
+               bp->node[i] = fmod(curAngle+360 - iter_angle_max, 360);
+           largest_diff = MAX(largest_diff, fabs(destAngle-bp->node[i]));
+           largest_progress = MAX(largest_diff, fabs(bp->node[i] - model[bp->prev_model].node[i]));
        }
     }
        
     return MIN(largest_diff / largest_progress, 1.0);
 }
+#endif
+
 
 #ifdef HAVE_GLUT
-void glsnake_idle();
+static void glsnake_idle();
 
-void restore_idle(int value)
+static restore_idle(int v __attribute__((__unused__)))
 {
     glutIdleFunc(glsnake_idle);
 }
 #endif
 
-void quick_sleep(void)
+static void quick_sleep(void)
 {
 #ifdef HAVE_GLUT
     /* By using glutTimerFunc we can keep responding to 
@@ -1918,11 +2037,12 @@ void quick_sleep(void)
 #endif
 }
 
-void glsnake_idle(
+static void glsnake_idle(
 #ifndef HAVE_GLUT
                  struct glsnake_cfg * bp
 #endif
-                 ) {
+                 ) 
+{
     /* time since last iteration */
     long iter_msec;
     /* time since the beginning of last morph */
@@ -1934,7 +2054,7 @@ void glsnake_idle(
     int i;
     
     /* Do nothing to the model if we are paused */
-    if (glc->paused) {
+    if (bp->paused) {
        /* Avoid busy waiting when nothing is changing */
        quick_sleep();
 #ifdef HAVE_GLUT
@@ -1953,29 +2073,29 @@ void glsnake_idle(
      */
     gettime(&current_time);
     
-    iter_msec = (long) GETMSECS(current_time) - GETMSECS(glc->last_iteration) + 
-       ((long) GETSECS(current_time) - GETSECS(glc->last_iteration)) * 1000L;
+    iter_msec = (long) GETMSECS(current_time) - GETMSECS(bp->last_iteration) + 
+       ((long) GETSECS(current_time) - GETSECS(bp->last_iteration)) * 1000L;
 
     if (iter_msec) {
        /* save the current time */
-       memcpy(&glc->last_iteration, &current_time, sizeof(snaketime));
+       memcpy(&bp->last_iteration, &current_time, sizeof(snaketime));
        
        /* work out if we have to switch models */
-       morf_msec = GETMSECS(glc->last_iteration) - GETMSECS(glc->last_morph) +
-           ((long) (GETSECS(glc->last_iteration)-GETSECS(glc->last_morph)) * 1000L);
+       morf_msec = GETMSECS(bp->last_iteration) - GETMSECS(bp->last_morph) +
+           ((long) (GETSECS(bp->last_iteration)-GETSECS(bp->last_morph)) * 1000L);
 
-       if ((morf_msec > statictime) && !interactive && !glc->morphing) {
+       if ((morf_msec > statictime) && !interactive && !bp->morphing) {
            /*printf("starting morph\n");*/
-           memcpy(&glc->last_morph, &(glc->last_iteration), sizeof(glc->last_morph));
-           start_morph(RAND(models), 0);
+           memcpy(&bp->last_morph, &(bp->last_iteration), sizeof(bp->last_morph));
+           start_morph(bp, RAND(models), 0);
        }
        
-       if (interactive && !glc->morphing) {
+       if (interactive && !bp->morphing) {
            quick_sleep();
            return;
        }
        
-       /*      if (!glc->dragging && !glc->interactive) { */
+       /*      if (!bp->dragging && !bp->interactive) { */
        if (!interactive) {
            
            yspin += 360/((1000/yangvel)/iter_msec);
@@ -1995,24 +2115,24 @@ void glsnake_idle(
 
        still_morphing = 0;
        for (i = 0; i < NODE_COUNT; i++) {
-           float cur_angle = glc->node[i];
-           float dest_angle = model[glc->next_model].node[i];
+           float cur_angle = bp->node[i];
+           float dest_angle = model[bp->next_model].node[i];
            if (cur_angle != dest_angle) {
                still_morphing = 1;
                if (fabs(cur_angle - dest_angle) <= iter_angle_max)
-                   glc->node[i] = dest_angle;
+                   bp->node[i] = dest_angle;
                else if (fmod(cur_angle - dest_angle + 360, 360) > 180)
-                   glc->node[i] = fmod(cur_angle + iter_angle_max, 360);
+                   bp->node[i] = fmod(cur_angle + iter_angle_max, 360);
                else
-                   glc->node[i] = fmod(cur_angle + 360 - iter_angle_max, 360);
+                   bp->node[i] = fmod(cur_angle + 360 - iter_angle_max, 360);
            }
        }
 
        if (!still_morphing)
-           glc->morphing = 0;
+           bp->morphing = 0;
 
        /* colour cycling */
-       morph_colour();
+       morph_colour(bp);
        
 #ifdef HAVE_GLUT
        glutSwapBuffers();
@@ -2026,11 +2146,12 @@ void glsnake_idle(
 }
 
 /* wot draws it */
-void glsnake_display(
+ENTRYPOINT void glsnake_display(
 #ifndef HAVE_GLUT
                     ModeInfo * mi
 #endif
-                    ) {
+                    ) 
+{
 #ifndef HAVE_GLUT
     struct glsnake_cfg * bp = &glc[MI_SCREEN(mi)];
     Display * dpy = MI_DISPLAY(mi);
@@ -2045,10 +2166,14 @@ void glsnake_display(
 #ifndef HAVE_GLUT
     if (!bp->glx_context)
        return;
+
+    glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(bp->glx_context));
 #endif
     
+    gl_init(mi);
+
     /* clear the buffer */
-    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+    glClear((GLbitfield) GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     
     /* go into the modelview stack */
     glMatrixMode(GL_MODELVIEW);
@@ -2075,14 +2200,14 @@ void glsnake_display(
     for (i = 0; i < NODE_COUNT; i++) {
        float rotmat[16];
 
-       ang = glc->node[i];
+       ang = bp->node[i];
 
        /*printf("ang = %f\n", ang);*/
        
        glTranslatef(0.5, 0.5, 0.5);            /* move to center */
-       glRotatef(90, 0.0, 0.0, -1.0);          /* reorient  */
+       glRotatef(90.0, 0.0, 0.0, -1.0);        /* reorient  */
        glTranslatef(1.0 + explode, 0.0, 0.0);  /* move to new pos. */
-       glRotatef(180 + ang, 1.0, 0.0, 0.0);    /* pivot to new angle */
+       glRotatef(180.0 + ang, 1.0, 0.0, 0.0);  /* pivot to new angle */
        glTranslatef(-0.5, -0.5, -0.5);         /* return from center */
 
        glGetFloatv(GL_MODELVIEW_MATRIX, rotmat);
@@ -2113,7 +2238,7 @@ void glsnake_display(
     glTranslatef(-com[0], -com[1], -com[2]);
 
     glDisable(GL_LIGHTING);
-    glColor3f(1.0, 0.0, 0.0);
+    glColor4f(1.0, 0.0, 0.0, 1.0);
     glBegin(GL_LINE_STRIP);
     for (i = 0; i < NODE_COUNT - 1; i++) {
        glVertex3fv(positions[i]);
@@ -2136,30 +2261,45 @@ void glsnake_display(
     glRotatef(yspin, 0.0, 1.0, 0.0); 
     glRotatef(zspin, 0.0, 0.0, 1.0); 
 
+# ifdef HAVE_MOBILE    /* Keep it the same relative size when rotated. */
+    {
+      GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi);
+      int o = (int) current_device_rotation();
+      if (o != 0 && o != 180 && o != -180)
+        glScalef (1/h, 1/h, 1/h);
+    }
+# endif
+
     /* now draw each node along the snake -- this is quite ugly :p */
+    mi->polygon_count = 0;
     for (i = 0; i < NODE_COUNT; i++) {
        /* choose a colour for this node */
-       if ((i == glc->selected || i == glc->selected+1) && interactive)
+       if ((i == bp->selected || i == bp->selected+1) && interactive)
            /* yellow */
-           glColor3f(1.0, 1.0, 0.0);
-       else
-           glColor3fv(glc->colour[(i+1)%2]);
+           glColor4f(1.0, 1.0, 0.0, 1.0);
+       else {
+           /*glColor4fv(bp->colour[(i+1)%2]);*/
+           glMaterialfv(GL_FRONT, GL_AMBIENT, bp->colour[(i+1)%2]);
+           glMaterialfv(GL_FRONT, GL_DIFFUSE, bp->colour[(i+1)%2]);
+           /*glMaterialfv(GL_FRONT, GL_SPECULAR, bp->colour[(i+1)%2]);*/
+       }
 
        /* draw the node */
        if (wireframe)
-           glCallList(glc->node_wire);
+           glCallList(bp->node_wire);
        else
-           glCallList(glc->node_solid);
+           glCallList(bp->node_solid);
+        mi->polygon_count += bp->node_polys;
 
        /* now work out where to draw the next one */
        
        /* Interpolate between models */
-       ang = glc->node[i];
+       ang = bp->node[i];
        
        glTranslatef(0.5, 0.5, 0.5);            /* move to center */
-       glRotatef(90, 0.0, 0.0, -1.0);          /* reorient  */
+       glRotatef(90.0, 0.0, 0.0, -1.0);        /* reorient  */
        glTranslatef(1.0 + explode, 0.0, 0.0);  /* move to new pos. */
-       glRotatef(180 + ang, 1.0, 0.0, 0.0);    /* pivot to new angle */
+       glRotatef(180.0 + ang, 1.0, 0.0, 0.0);  /* pivot to new angle */
        glTranslatef(-0.5, -0.5, -0.5);         /* return from center */
     }
 
@@ -2174,6 +2314,7 @@ void glsnake_display(
 
 #ifndef HAVE_GLUT
        glsnake_idle(bp);
+        if (mi->fps_p) do_fps(mi);
 #endif
     
     glFlush();
@@ -2186,30 +2327,32 @@ void glsnake_display(
 
 #ifdef HAVE_GLUT
 /* anything that needs to be cleaned up goes here */
-void unmain() {
-    glutDestroyWindow(glc->window);
-    free(glc);
+static void unmain() 
+{
+    glutDestroyWindow(bp->window);
+    free(bp);
 }
 
-void ui_init(int *, char **);
+static void ui_init(int *, char **);
 
-int main(int argc, char ** argv) {
-    glc = malloc(sizeof(struct glsnake_cfg));
-    memset(glc, 0, sizeof(struct glsnake_cfg));
+int main(int argc, char ** argv) 
+{
+    bp = malloc(sizeof(struct glsnake_cfg));
+    memset(bp, 0, sizeof(struct glsnake_cfg));
 
-    glc->width = 320;
-    glc->height = 240;
+    bp->width = 640;
+    bp->height = 480;
     
     ui_init(&argc, argv);
 
-    gettime(&glc->last_iteration);
-    memcpy(&glc->last_morph, &glc->last_iteration, sizeof(snaketime));
-    srand((unsigned int)GETSECS(glc->last_iteration));
+    gettime(&bp->last_iteration);
+    memcpy(&bp->last_morph, &bp->last_iteration, sizeof(snaketime));
+    srand((unsigned int)GETSECS(bp->last_iteration));
 
-    glc->prev_colour = glc->next_colour = COLOUR_ACYCLIC;
-    glc->next_model = RAND(models);
-    glc->prev_model = 0;
-    start_morph(glc->prev_model, 1);   
+    bp->prev_colour = bp->next_colour = COLOUR_ACYCLIC;
+    bp->next_model = RAND(models);
+    bp->prev_model = 0;
+    start_morph(bp->prev_model, 1);    
 
     glsnake_init();
     
@@ -2228,20 +2371,21 @@ int main(int argc, char ** argv) {
 #ifdef HAVE_GLUT
 
 /* trackball quaternions */
-float cumquat[4] = {0.0,0.0,0.0,0.0}, oldquat[4] = {0.0,0.0,0.0,0.1};
+static float cumquat[4] = {0.0,0.0,0.0,0.0}, oldquat[4] = {0.0,0.0,0.0,0.1};
 
 /* rotation matrix */
-float rotation[16];
+static float rotation[16];
 
 /* mouse drag vectors: start and end */
-float m_s[3], m_e[3];
+static float mouse_start[3], mouse_end[3];
 
 /* dragging boolean */
-int dragging = 0;
+static int dragging = 0;
 
 /* this function calculates the rotation matrix based on the quaternions
  * generated from the mouse drag vectors */
-void calc_rotation() {
+static void calc_rotation() 
+{
     double Nq, s;
     double xs, ys, zs, wx, wy, wz, xx, xy, xz, yy, yz, zz;
 
@@ -2268,11 +2412,13 @@ void calc_rotation() {
     rotation[15] = 1.0;
 }
 
-inline void ui_mousedrag() {
+static inline void ui_mousedrag() 
+{
     glMultMatrixf(rotation);
 }
 
-void ui_keyboard(unsigned char c, int x, int y) {
+static void ui_keyboard(unsigned char c, int x__attribute__((__unused__)), int y __attribute__((__unused__)))
+{
     int i;
     
     switch (c) {
@@ -2291,33 +2437,33 @@ void ui_keyboard(unsigned char c, int x, int y) {
        break;
       case '.':
        /* next model */
-       glc->next_model++;
-       glc->next_model %= models;
-       start_morph(glc->next_model, 0);
+       bp->next_model++;
+       bp->next_model %= models;
+       start_morph(bp->next_model, 0);
        
        /* Reset last_morph time */
-       gettime(&glc->last_morph);                      
+       gettime(&bp->last_morph);                       
        break;
       case ',':
        /* previous model */
-       glc->next_model = (glc->next_model + models - 1) % models;
-       start_morph(glc->next_model, 0);
+       bp->next_model = (bp->next_model + (int)models - 1) % (int)models;
+       start_morph(bp->next_model, 0);
        
-       /* Reset glc->last_morph time */
-       gettime(&glc->last_morph);                      
+       /* Reset bp->last_morph time */
+       gettime(&bp->last_morph);                       
        break;
       case '+':
-       angvel += DEF_ACCEL;
+       angvel += DEF_ANGVEL;
        break;
       case '-':
-       if (angvel > DEF_ACCEL)
-           angvel -= DEF_ACCEL;
+       if (angvel > DEF_ANGVEL)
+           angvel -= DEF_ANGVEL;
        break;
       case 'i':
        if (interactive) {
            /* Reset last_iteration and last_morph time */
-           gettime(&glc->last_iteration);
-           gettime(&glc->last_morph);
+           gettime(&bp->last_iteration);
+           gettime(&bp->last_morph);
        }
        interactive = 1 - interactive;
        glutPostRedisplay();
@@ -2330,87 +2476,99 @@ void ui_keyboard(unsigned char c, int x, int y) {
            glEnable(GL_LIGHTING);
        glutPostRedisplay();
        break;
+      case 'a':
+       transparent = 1 - transparent;
+       if (transparent) {
+           glEnable(GL_BLEND);
+       } else {
+           glDisable(GL_BLEND);
+       }
+       break;
       case 'p':
-       if (glc->paused) {
+       if (bp->paused) {
            /* unpausing, reset last_iteration and last_morph time */
-           gettime(&glc->last_iteration);
-           gettime(&glc->last_morph);
+           gettime(&bp->last_iteration);
+           gettime(&bp->last_morph);
        }
-       glc->paused = 1 - glc->paused;
+       bp->paused = 1 - bp->paused;
        break;
       case 'd':
        /* dump the current model so we can add it! */
-       printf("# %s\nnoname:\t", model[glc->next_model].name);
-       for (i = 0; i < NODE_COUNT; i++) {
-           if (glc->node[i] == ZERO)
-               printf("Z");
-           else if (glc->node[i] == LEFT)
-               printf("L");
-           else if (glc->node[i] == PIN)
-               printf("P");
-           else if (glc->node[i] == RIGHT)
-               printf("R");
-           /*
-             else
-             printf("%f", node[i].curAngle);
-           */
-           if (i < NODE_COUNT - 1)
-               printf(" ");
+       printf("# %s\nnoname:\t", model[bp->next_model].name);
+       {
+           int i;
+           
+           for (i = 0; i < NODE_COUNT; i++) {
+               if (bp->node[i] == ZERO)
+                   printf("Z");
+               else if (bp->node[i] == LEFT)
+                   printf("L");
+               else if (bp->node[i] == PIN)
+                   printf("P");
+               else if (bp->node[i] == RIGHT)
+                   printf("R");
+               /*
+                 else
+                 printf("%f", node[i].curAngle);
+               */
+               if (i < NODE_COUNT - 1)
+                   printf(" ");
+           }
        }
        printf("\n");
        break;
       case 'f':
-       glc->fullscreen = 1 - glc->fullscreen;
-       if (glc->fullscreen) {
-           glc->old_width = glc->width;
-           glc->old_height = glc->height;
+       bp->fullscreen = 1 - bp->fullscreen;
+       if (bp->fullscreen) {
+           bp->old_width = bp->width;
+           bp->old_height = bp->height;
            glutFullScreen();
        } else {
-           glutReshapeWindow(glc->old_width, glc->old_height);
+           glutReshapeWindow(bp->old_width, bp->old_height);
            glutPositionWindow(50,50);
        }
        break;
       case 't':
        titles = 1 - titles;
-       if (interactive || glc->paused)
+       if (interactive || bp->paused)
            glutPostRedisplay();
        break;
-      case 'a':
+      case 'c':
        altcolour = 1 - altcolour;
        break;
       case 'z':
        zoom += 1.0;
-       glsnake_reshape(glc->width, glc->height);
+       glsnake_reshape(bp->width, bp->height);
        break;
       case 'Z':
        zoom -= 1.0;
-       glsnake_reshape(glc->width, glc->height);
+       glsnake_reshape(bp->width, bp->height);
        break;
       default:
        break;
     }
 }
 
-void ui_special(int key, int x, int y) {
-    int i;
-    float *destAngle = &(model[glc->next_model].node[glc->selected]);
+static void ui_special(int key, int x__attribute__((__unused__)), int y __attribute__((__unused__)))
+{
+    float *destAngle = &(model[bp->next_model].node[bp->selected]);
     int unknown_key = 0;
 
     if (interactive) {
        switch (key) {
          case GLUT_KEY_UP:
-           glc->selected = (glc->selected + (NODE_COUNT - 2)) % (NODE_COUNT - 1);
+           bp->selected = (bp->selected + (NODE_COUNT - 2)) % (NODE_COUNT - 1);
            break;
          case GLUT_KEY_DOWN:
-           glc->selected = (glc->selected + 1) % (NODE_COUNT - 1);
+           bp->selected = (bp->selected + 1) % (NODE_COUNT - 1);
            break;
          case GLUT_KEY_LEFT:
            *destAngle = fmod(*destAngle+(LEFT), 360);
-           glc->morphing = glc->new_morph = 1;
+           bp->morphing = bp->new_morph = 1;
            break;
          case GLUT_KEY_RIGHT:
            *destAngle = fmod(*destAngle+(RIGHT), 360);
-           glc->morphing = glc->new_morph = 1;
+           bp->morphing = bp->new_morph = 1;
            break;
          case GLUT_KEY_HOME:
            start_morph(STRAIGHT_MODEL, 0);
@@ -2426,16 +2584,17 @@ void ui_special(int key, int x, int y) {
        glutPostRedisplay();
 }
 
-void ui_mouse(int button, int state, int x, int y) {
+static void ui_mouse(int button, int state, int x, int y) 
+{
     if (button==0) {
        switch (state) {
          case GLUT_DOWN:
            dragging = 1;
-           m_s[0] = M_SQRT1_2 * 
-               (x - (glc->width / 2.0)) / (glc->width / 2.0);
-           m_s[1] = M_SQRT1_2 * 
-               ((glc->height / 2.0) - y) / (glc->height / 2.0);
-           m_s[2] = sqrt(1-(m_s[0]*m_s[0]+m_s[1]*m_s[1]));
+           mouse_start[0] = M_SQRT1_2 * 
+               (x - (bp->width / 2.0)) / (bp->width / 2.0);
+           mouse_start[1] = M_SQRT1_2 * 
+               ((bp->height / 2.0) - y) / (bp->height / 2.0);
+           mouse_start[2] = sqrt((double)(1-(mouse_start[0]*mouse_start[0]+mouse_start[1]*mouse_start[1])));
            break;
          case GLUT_UP:
            dragging = 0;
@@ -2451,32 +2610,33 @@ void ui_mouse(int button, int state, int x, int y) {
     glutPostRedisplay();
 }
 
-void ui_motion(int x, int y) {
+static void ui_motion(int x, int y) 
+{
     double norm;
     float q[4];
     
     if (dragging) {
        /* construct the motion end vector from the x,y position on the
         * window */
-       m_e[0] = (x - (glc->width/ 2.0)) / (glc->width / 2.0);
-       m_e[1] = ((glc->height / 2.0) - y) / (glc->height / 2.0);
+       mouse_end[0] = M_SQRT1_2 * (x - (bp->width/ 2.0)) / (bp->width / 2.0);
+       mouse_end[1] = M_SQRT1_2 * ((bp->height / 2.0) - y) / (bp->height / 2.0);
        /* calculate the normal of the vector... */
-       norm = m_e[0] * m_e[0] + m_e[1] * m_e[1];
+       norm = mouse_end[0] * mouse_end[0] + mouse_end[1] * mouse_end[1];
        /* check if norm is outside the sphere and wraparound if necessary */
        if (norm > 1.0) {
-           m_e[0] = -m_e[0];
-           m_e[1] = -m_e[1];
-           m_e[2] = sqrt(norm - 1);
+           mouse_end[0] = -mouse_end[0];
+           mouse_end[1] = -mouse_end[1];
+           mouse_end[2] = sqrt(norm - 1);
        } else {
            /* the z value comes from projecting onto an elliptical spheroid */
-           m_e[2] = sqrt(1 - norm);
+           mouse_end[2] = sqrt(1 - norm);
        }
 
-       /* now here, build a quaternion from m_s and m_e */
-       q[0] = m_s[1] * m_e[2] - m_s[2] * m_e[1];
-       q[1] = m_s[2] * m_e[0] - m_s[0] * m_e[2];
-       q[2] = m_s[0] * m_e[1] - m_s[1] * m_e[0];
-       q[3] = m_s[0] * m_e[0] + m_s[1] * m_e[1] + m_s[2] * m_e[2];
+       /* now here, build a quaternion from mouse_start and mouse_end */
+       q[0] = mouse_start[1] * mouse_end[2] - mouse_start[2] * mouse_end[1];
+       q[1] = mouse_start[2] * mouse_end[0] - mouse_start[0] * mouse_end[2];
+       q[2] = mouse_start[0] * mouse_end[1] - mouse_start[1] * mouse_end[0];
+       q[3] = mouse_start[0] * mouse_end[0] + mouse_start[1] * mouse_end[1] + mouse_start[2] * mouse_end[2];
 
        /* new rotation is the product of the new one and the old one */
        cumquat[0] = q[3] * oldquat[0] + q[0] * oldquat[3] + 
@@ -2493,11 +2653,12 @@ void ui_motion(int x, int y) {
     glutPostRedisplay();
 }
 
-void ui_init(int * argc, char ** argv) {
+static void ui_init(int * argc, char ** argv) 
+{
     glutInit(argc, argv);
     glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
-    glutInitWindowSize(glc->width, glc->height);
-    glc->window = glutCreateWindow("glsnake");
+    glutInitWindowSize(bp->width, bp->height);
+    bp->window = glutCreateWindow("glsnake");
 
     glutDisplayFunc(glsnake_display);
     glutReshapeFunc(glsnake_reshape);
@@ -2517,5 +2678,8 @@ void ui_init(int * argc, char ** argv) {
     interactive = DEF_INTERACTIVE;
     zoom = DEF_ZOOM;
     wireframe = DEF_WIREFRAME;
+    transparent = DEF_TRANSPARENT;
 }
 #endif /* HAVE_GLUT */
+
+XSCREENSAVER_MODULE ("GLSnake", glsnake)