added stuff
[fishladder.git] / fishladder_resources.h
index da8b8ea2052b31275b22735697b7924168351468..8c8ee3b64e32417ece53df146b67ab9fb2da9e7c 100644 (file)
@@ -7,8 +7,9 @@ vg_tex2d tex_wood =                     { .path = "textures/wood.qoi" };
 vg_tex2d tex_background =      { .path = "textures/background.qoi" };
 vg_tex2d tex_ball_noise =  { .path = "textures/bnoise.qoi" };
 vg_tex2d tex_monofur   =  { .path = "textures/ascii.qoi", .flags = VG_TEXTURE_NO_MIP };
 vg_tex2d tex_background =      { .path = "textures/background.qoi" };
 vg_tex2d tex_ball_noise =  { .path = "textures/bnoise.qoi" };
 vg_tex2d tex_monofur   =  { .path = "textures/ascii.qoi", .flags = VG_TEXTURE_NO_MIP };
+vg_tex2d tex_unkown            =  { .path = "textures/unkown.qoi" };
 
 
-vg_tex2d *texture_list[] = { &tex_tile_detail, &tex_tile_data, &tex_wood, &tex_background, &tex_ball_noise, &tex_monofur };
+vg_tex2d *texture_list[] = { &tex_tile_detail, &tex_tile_data, &tex_wood, &tex_background, &tex_ball_noise, &tex_monofur, &tex_unkown };
 
 // AUDIO
 // ===========================================================================================================
 
 // AUDIO
 // ===========================================================================================================
@@ -90,12 +91,27 @@ sfx_system audio_system_balls_extra =
        .name = "Balls Extra"
 };
 
        .name = "Balls Extra"
 };
 
+ui_colourset ui_fl_colours = {
+       .main = 0xff807373,
+       .hover = 0xff918484,
+       .active = 0xffad9f9e
+};
+
+ui_colourset ui_fl_colours_inactive = {
+       .main = 0xff655958,
+       .hover = 0xff655958,
+       .active = 0xff655958
+};
+
 static void resource_load_main(void)
 {
        // Textures
        vg_tex2d_init( texture_list, vg_list_size( texture_list ) );
        
        ui_override_font( tex_monofur.name, 7 );
 static void resource_load_main(void)
 {
        // Textures
        vg_tex2d_init( texture_list, vg_list_size( texture_list ) );
        
        ui_override_font( tex_monofur.name, 7 );
+
+       ui_global_ctx.colours_main = &ui_fl_colours;
+       gui_reset_colours();
        
        // Audio
        sfx_set_init( &audio_tile_mod, NULL );
        
        // Audio
        sfx_set_init( &audio_tile_mod, NULL );
@@ -239,7 +255,7 @@ SHADER_DEFINE( shader_tile_main,
        ""
        "void main()"
        "{"
        ""
        "void main()"
        "{"
-               "vec3 shadowing_colour = vec3( 0.93, 0.88536, 0.8184 );"
+               "vec3 shadowing_colour = vec3( 0.93, 0.88536, 0.8184 ) * 0.97;"
                "vec4 glyph = texture( uTexGlyphs, aTexCoords.xy );"
                "vec4 wood = texture( uTexWood, aTexCoords.zw );"
                "vec4 wood_secondary = texture( uTexWood, aTexCoords.zw + 0.25 );"
                "vec4 glyph = texture( uTexGlyphs, aTexCoords.xy );"
                "vec4 wood = texture( uTexWood, aTexCoords.zw );"
                "vec4 wood_secondary = texture( uTexWood, aTexCoords.zw + 0.25 );"
@@ -297,7 +313,7 @@ SHADER_DEFINE( shader_background,
                
                "ao_accum -= data_this_tile.r;"
                
                
                "ao_accum -= data_this_tile.r;"
                
-               "vec3 colour_main = vec3( 0.369768, 0.3654, 0.42 );"
+               "vec3 colour_main = mix( vec3( 0.369768, 0.3654, 0.42 ),vec3( 0.275, 0.388, 0.553 ), data_this_tile.g );"
                
                "vec2 square_coords = fract( aTexCoords * 64.0 );"
                "vec2 grid_coords = abs( square_coords - 0.5 );"
                
                "vec2 square_coords = fract( aTexCoords * 64.0 );"
                "vec2 grid_coords = abs( square_coords - 0.5 );"
@@ -550,217 +566,316 @@ struct cmp_level
        const char *title;
        const char *description;
        
        const char *title;
        const char *description;
        
+       int unlocked;
+       int completed_score;
+       
+       int _unlock, _linked;   // When completed, unlock this level
+       struct cmp_level *unlock, *linked;
+       
        int serial_id;
        int serial_id;
+       int is_tutorial;
+       
+       SteamLeaderboard_t steam_leaderboard;
 };
 
 };
 
-struct cmp_level cmp_levels_tutorials[] = 
+static struct cmp_level cmp_levels_tutorials[] = 
 {
        {
 {
        {
+               .serial_id = 0,
                .title = "PRINCIPLE 1",
                .map_name = "cmp_t01",
                .description = "Utilize basic transport methods",
                
                .title = "PRINCIPLE 1",
                .map_name = "cmp_t01",
                .description = "Utilize basic transport methods",
                
-               .serial_id = 0
+               ._unlock = 1,
+               .is_tutorial = 1
        },
        {
        },
        {
+               .serial_id = 1,
                .title = "PRINCIPLE 2",
                .map_name = "cmp_t02",
                .title = "PRINCIPLE 2",
                .map_name = "cmp_t02",
-               .description = "Utilize the twisty turny(TM) piece",
+               .description = "Utilize the twisty turny(TM) piece to split\n"
+                                                       "the marble stream into two",
                
                
-               .serial_id = 1
+               ._unlock = 2,
+               .is_tutorial = 1,
        },
        {
        },
        {
+               .serial_id = 2,
                .title = "PRINCIPLE 3",
                .map_name = "cmp_t03",
                .description = "Merge transport into one",
                
                .title = "PRINCIPLE 3",
                .map_name = "cmp_t03",
                .description = "Merge transport into one",
                
-               .serial_id = 2
+               ._unlock = 12,
+               .is_tutorial = 1
        },
        {
        },
        {
+               .serial_id = 12,
                .title = "PRINCIPLE 4",
                .map_name = "cmp_t04",
                .title = "PRINCIPLE 4",
                .map_name = "cmp_t04",
-               .description = "Some stages require multiple runs to succeed in order to pass",
+               .description = "Some stages require multiple runs to succeed\n" 
+                                                       "in order to pass",
                
                
-               .serial_id = 12
+               ._unlock = 3,
+               .is_tutorial = 1
        }
 };
 
        }
 };
 
-struct cmp_level cmp_levels_basic[] =
+static struct cmp_level cmp_levels_basic[] =
 {
        {
 {
        {
+               .serial_id = 3,
                .title = "SUBDIVISION 1",
                .map_name = "cmp_b01",
                .description = "Simple maths, branching required.",
                
                .title = "SUBDIVISION 1",
                .map_name = "cmp_b01",
                .description = "Simple maths, branching required.",
                
-               .serial_id = 3
+               ._linked = 4,
+               ._unlock = 6
        },
        {
        },
        {
+               .serial_id = 4,
                .title = "SUBDIVISION 2",
                .map_name = "cmp_b02",
                .title = "SUBDIVISION 2",
                .map_name = "cmp_b02",
-               .description = "Simple maths. Futher.",
-
-               .serial_id = 4
+               .description = "Simple maths, except more.",
+               
+               ._linked = 5,
+               ._unlock = 7
        },
        {
        },
        {
+               .serial_id = 5,
                .title = "RESTRUCTURE",
                .map_name = "cmp_b03",
                .description = "Not so simple swap",
                
                .title = "RESTRUCTURE",
                .map_name = "cmp_b03",
                .description = "Not so simple swap",
                
-               .serial_id = 5
+               ._unlock = 8
        },
        {
        },
        {
+               .serial_id = 6,
                .title = "SERIALIZE",
                .map_name = "cmp_b04",
                .description = "Merge and sort",
                
                .title = "SERIALIZE",
                .map_name = "cmp_b04",
                .description = "Merge and sort",
                
-               .serial_id = 6
+               ._unlock = 7
        },
        {
        },
        {
+               .serial_id = 7,
                .title = "PATTERNS 1",
                .map_name = "cmp_b05",
                .description = "Replicate",
                
                .title = "PATTERNS 1",
                .map_name = "cmp_b05",
                .description = "Replicate",
                
-               .serial_id = 7
+               ._linked = 8
        },
        {
        },
        {
+               .serial_id = 8,
                .title = "PATTERNS 2",
                .map_name = "cmp_b06",
                .description = "Replicate MORE",
                
                .title = "PATTERNS 2",
                .map_name = "cmp_b06",
                .description = "Replicate MORE",
                
-               .serial_id = 8
+               ._unlock = 9
        },
        {
        },
        {
+               .serial_id = 9,
                .title = "MIGHTY CONSUMER",
                .map_name = "cmp_b07",
                .description = "Build a greedy system",
                
                .title = "MIGHTY CONSUMER",
                .map_name = "cmp_b07",
                .description = "Build a greedy system",
                
-               .serial_id = 9
+               ._linked = 10,
+               ._unlock = 11
        },
        {
        },
        {
+               .serial_id = 10,
                .title = "ENCRYPTED 1",
                .map_name = "cmp_b08",
                .description = "Some configurations may not be valid",
 
                .title = "ENCRYPTED 1",
                .map_name = "cmp_b08",
                .description = "Some configurations may not be valid",
 
-               .serial_id = 10
+               ._unlock = 15
        },
        {
        },
        {
+               .serial_id = 11,
                .title = "REVERSE",
                .map_name = "cmp_b09",
                .description = "Reverse the incoming order. Always length 4",
                
                .title = "REVERSE",
                .map_name = "cmp_b09",
                .description = "Reverse the incoming order. Always length 4",
                
-               .serial_id = 11
+               ._unlock = 15
        },
        {
        },
        {
+               .serial_id = 15,
                .title = "PRINCIPLE 5",
                .map_name = "cmp_b10",
                .description = 
                        "The competent engineers among you may have already\n" 
                        "spotted and utilized these parts of the system\n"
                        "\n"
                .title = "PRINCIPLE 5",
                .map_name = "cmp_b10",
                .description = 
                        "The competent engineers among you may have already\n" 
                        "spotted and utilized these parts of the system\n"
                        "\n"
-                       "We forgot to include the relevant principle tasks\n"
-                       "as part of your training package, you will now be\n"
-                       "tasked to complete them",
+                       "We forgot to include the relevant principle tasks as\n"
+                       "of your training package, you will now be tasked to\n"
+                       "complete them",
 
 
-               .serial_id = 15
+               ._unlock = 16
        },
        {
        },
        {
+               .serial_id = 16,
                .title = "ROUTING PROBLEM",
                .map_name = "cmp_routing",
                .description = 
                .title = "ROUTING PROBLEM",
                .map_name = "cmp_routing",
                .description = 
-                       "Things can get a little chaotic on tight boards,\n"
-                       "Do your best to utilize principle 5 to get the job\n"
-                       "done.",
+                       "Things can get a little chaotic on tight boards, do your\n"
+                       "best to utilize principle 5 to get the job done\n",
                
                
-               .serial_id = 16
+               ._unlock = 17
        },
        {
        },
        {
+               .serial_id = 17,
                .title = "PRINCIPLE 6",
                .map_name = "cmp_b11",
                .description =
                .title = "PRINCIPLE 6",
                .map_name = "cmp_b11",
                .description =
-                       "While hovering over a simple tile peice, right click\n"
-                       "and drag to start creating a wire. These can be\n"
-                       "connected to the left, or right recieving pins of a\n"
-                       "Twisty Turny(TM) peice.\n"
+                       "While hovering over a simple tile peice, right click and\n"
+                       "drag to start creating a wire. These can be connected to\n"
+                       "the left, or right recieving pins of a Twisty Turny(TM).\n"
                        "\n"
                        "Once connected, the Twisty Turny(TM) will no longer\n"
                        "\n"
                        "Once connected, the Twisty Turny(TM) will no longer\n"
-                       "'flip flop' as marbles run through them, but instead\n"
-                       "be set to left or right rotating only. As indicated\n"
-                       "by the status arrow beneath them\n"
+                       "'flip flop' as marbles run through them, but instead be\n"
+                       "et to left or right rotating only. As indicated by the\n"
+                       "status arrow beneath them\n"
                        "\n"
                        "When the left or right slot is triggered, the Twisty\n"
                        "Turny(TM) will switch modes according to that input.\n"
                        "\n"
                        "\n"
                        "When the left or right slot is triggered, the Twisty\n"
                        "Turny(TM) will switch modes according to that input.\n"
                        "\n"
-                       "Trigger wires apply instantaneously, however if both\n"
-                       "the left and right inputs are recieved at the same\n"
-                       "time, this results in no operation being performed,\n"
-                       "and no state changes take place in the Twisty Turny(TM)\n",
+                       "Trigger wires apply instantaneously, however if both the\n"
+                       "left and right inputs are recieved at the same time,\n"
+                       "this results in no operation being performed, and no\n"
+                       "state changes take place in the Twisty Turny(TM)\n",
 
 
-                       .serial_id = 17
+               ._unlock = 18
        },
        {
        },
        {
+               .serial_id = 18,
                .title = "NOT GATE",
                .map_name = "cmp_not",
                .description = 
                        "Test your knowledge of triggers, build an 'NOT GATE'\n"
                        "emulated by marble logic.",
                
                .title = "NOT GATE",
                .map_name = "cmp_not",
                .description = 
                        "Test your knowledge of triggers, build an 'NOT GATE'\n"
                        "emulated by marble logic.",
                
-               .serial_id = 18
+               ._linked = 19,
+               ._unlock = 20
        },
        {
        },
        {
+               .serial_id = 19,
                .title = "AND GATE",
                .map_name = "cmp_and",
                .description = 
                        "A slightly more complicated gate, but shouldn't be\n"
                        "too difficult for your skillset.",
                
                .title = "AND GATE",
                .map_name = "cmp_and",
                .description = 
                        "A slightly more complicated gate, but shouldn't be\n"
                        "too difficult for your skillset.",
                
-               .serial_id = 19
+               ._unlock = 20
        },
        {
        },
        {
+               .serial_id = 20,
                .title = "QUALIFICATION PROJECT",
                .map_name = "cmp_grad",
                .description =
                        "There's no instructions here, resolve and complete this\n"
                        "task to qualify yourself as an official marble engineer",
                .title = "QUALIFICATION PROJECT",
                .map_name = "cmp_grad",
                .description =
                        "There's no instructions here, resolve and complete this\n"
                        "task to qualify yourself as an official marble engineer",
-               .serial_id = 20
+               ._unlock = 13
        }
 };
 
        }
 };
 
-struct cmp_level cmp_levels_grad[] =
+static struct cmp_level cmp_levels_grad[] =
 {
        {
 {
        {
+               .serial_id = 13,
                .title = "SORT",
                .map_name = "cmp_i01",
                .description = 
                        "Device a scheme to filter and sort the inputs. If you\n"
                        "believe you lack the tools required to solve this one,\n"
                        "take a harder look at the inputs.",
                .title = "SORT",
                .map_name = "cmp_i01",
                .description = 
                        "Device a scheme to filter and sort the inputs. If you\n"
                        "believe you lack the tools required to solve this one,\n"
                        "take a harder look at the inputs.",
+               ._linked = 14
                
                
-               .serial_id = 13
        },
        {
        },
        {
+               .serial_id = 14,
                .title = "THIRDS",
                .map_name = "cmp_i02",
                .description = 
                .title = "THIRDS",
                .map_name = "cmp_i02",
                .description = 
-                       "Spit your inputs up into a third of its value\n"
+                       "Split the inputs up into a third of their values\n"
+                       "\n"
                        "Is this possible? -HG",
                        "Is this possible? -HG",
+               ._linked = 21
                
                
-               .serial_id = 14
        },
        {
        },
        {
+               .serial_id = 21,
                .title = "XOR CHIP",
                .map_name = "cmp_xor",
                .description = 
                        "Significantly more complicated than an AND or NOT gate,\n"
                        "but possible.",
                .title = "XOR CHIP",
                .map_name = "cmp_xor",
                .description = 
                        "Significantly more complicated than an AND or NOT gate,\n"
                        "but possible.",
-               .serial_id = 21
+               ._linked = 22
        },
        {
        },
        {
+               .serial_id = 22,
                .title = "SECRET CODE",
                .map_name = "cmp_secret",
                .description = 
                        "Only one input should send an unlock signal marble to\n"
                        "the output.\n"
                .title = "SECRET CODE",
                .map_name = "cmp_secret",
                .description = 
                        "Only one input should send an unlock signal marble to\n"
                        "the output.\n"
-                       "The code: 100110",
-               .serial_id = 22
+                       "The code: 100110"
+       }
+};
+
+#define NUM_CAMPAIGN_LEVELS (vg_list_size( cmp_levels_tutorials ) + vg_list_size( cmp_levels_basic ) + vg_list_size( cmp_levels_grad ))
+
+/*
+static struct
+{
+}
+career_local = 
+{
+};*/
+
+static struct serializable_set 
+{
+       struct cmp_level *pack;
+       int count;
+} 
+career_serializable[] =
+{
+       {
+               .pack = cmp_levels_tutorials,
+               .count = vg_list_size( cmp_levels_tutorials )
+       },
+       {
+               .pack = cmp_levels_basic,
+               .count = vg_list_size( cmp_levels_basic )
+       },
+       {
+               .pack = cmp_levels_grad,
+               .count = vg_list_size( cmp_levels_grad )
        }
 };
        }
 };
+
+// Setup pointers and that
+static void career_local_data_init(void)
+{
+       struct cmp_level *level_ptrs[ NUM_CAMPAIGN_LEVELS ];
+       
+       // COllect pointers
+       for( int i = 0; i < vg_list_size( career_serializable ); i ++ )
+       {
+               struct serializable_set *set = &career_serializable[i];
+               
+               for( int j = 0; j < set->count; j ++ )
+                       level_ptrs[ set->pack[j].serial_id ] = &set->pack[j];
+       }
+       
+       // Apply
+       for( int i = 0; i < vg_list_size( career_serializable ); i ++ )
+       {
+               struct serializable_set *set = &career_serializable[i];
+               
+               for( int j = 0; j < set->count; j ++ )
+               {
+                       struct cmp_level *lvl = &set->pack[j];
+                       lvl->unlock = lvl->_unlock? level_ptrs[ lvl->_unlock ]: NULL;
+                       lvl->linked = lvl->_linked? level_ptrs[ lvl->_linked ]: NULL;
+               }
+       }
+}