+static struct cell *pcell( v2i pos )
+{
+ return &world.data[ pos[1]*world.w + pos[0] ];
+}
+
+int main( int argc, char *argv[] )
+{
+ vg_init( argc, argv, "FishLadder" );
+}
+
+void vg_register(void)
+{
+ SHADER_INIT( shader_tile_colour );
+}
+
+void vg_start(void)
+{
+ // Quad mesh
+ {
+ float quad_mesh[] =
+ {
+ 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,
+ 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f,
+
+ 0.48f, 0.48f, 0.5f, 0.52f, 0.52f, 0.52f, // Static dot
+ 0.375f, 0.25f, 0.5f, 0.75f, 0.625f, 0.25f, // Downwards pointing arrow
+ 0.25f, 0.625f, 0.75f, 0.5f, 0.25f, 0.375f, // Left
+ 0.625f, 0.75f, 0.5f, 0.25f, 0.375f, 0.75f, // up
+ 0.75f, 0.375f, 0.25f, 0.5f, 0.75f, 0.625f
+ };
+
+ init_mesh( &world.tile, quad_mesh, vg_list_size(quad_mesh) );
+ }
+
+ // Circle mesh
+ {
+ float circle_mesh[32*6*3];
+ int res = vg_list_size( circle_mesh ) / (6*3);
+
+ for( int i = 0; i < res; i ++ )
+ {
+ v2f v0 = { sinf( ((float)i/(float)res)*VG_TAUf ), cosf( ((float)i/(float)res)*VG_TAUf ) };
+ v2f v1 = { sinf( ((float)(i+1)/(float)res)*VG_TAUf ), cosf( ((float)(i+1)/(float)res)*VG_TAUf ) };
+
+ circle_mesh[ i*6+0 ] = 0.0f;
+ circle_mesh[ i*6+1 ] = 0.0f;
+
+ v2_copy( v0, circle_mesh + 32*6 + i*12 );
+ v2_muls( v0, 0.8f, circle_mesh + 32*6 + i*12+2 );
+ v2_copy( v1, circle_mesh + 32*6 + i*12+4 );
+
+ v2_copy( v1, circle_mesh + 32*6 + i*12+6 );
+ v2_muls( v1, 0.8f, circle_mesh + 32*6 + i*12+8 );
+ v2_muls( v0, 0.8f, circle_mesh + 32*6 + i*12+10 );
+
+ v2_copy( v0, circle_mesh + i*6+4 );
+ v2_copy( v1, circle_mesh + i*6+2 );
+ v2_copy( v0, circle_mesh+i*6+4 );
+ v2_copy( v1, circle_mesh+i*6+2 );
+ }
+
+ init_mesh( &world.circle, circle_mesh, vg_list_size( circle_mesh ) );
+ }
+
+ // splitters (temp)
+ {
+ float splitter_l[] =
+ {
+ #include "models/splitter_l.obj.h"
+ };
+ float splitter_r[] =
+ {
+ #include "models/splitter_r.obj.h"
+ };
+
+ init_mesh( &world.splitter_l, splitter_l, vg_list_size( splitter_l ) );
+ init_mesh( &world.splitter_r, splitter_r, vg_list_size( splitter_r ) );
+ }
+
+ map_load
+ (
+ "#############;\n"
+ "###-#####-###;aaa,aa\n"
+ "## ##;\n"
+ "## ##;\n"
+ "## ##;\n"
+ "## ##;\n"
+ "## ##;\n"
+ "## ##;\n"
+ "###+#####+###;aa,aaa\n"
+ "#############;\n"
+ );
+}
+
+void vg_free(void)
+{
+ free_mesh( &world.tile );
+ free_mesh( &world.circle );
+ free_mesh( &world.splitter_l );
+ free_mesh( &world.splitter_r );
+
+ map_free();
+}
+
+static int cell_interactive( v2i co )