added stuff
[fishladder.git] / fishladder_resources.h
index fca9152da0e1fc9b032a856b8bfbaecaecd634c3..8c8ee3b64e32417ece53df146b67ab9fb2da9e7c 100644 (file)
@@ -255,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 );"
@@ -313,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 );"
@@ -566,127 +566,139 @@ struct cmp_level
        const char *title;
        const char *description;
        
        const char *title;
        const char *description;
        
+       int unlocked;
        int completed_score;
        
        int completed_score;
        
-       int unlocks;                    // When completed, unlock this many levels
-       int linked_unlocks;     // When unlocked, unlock this many levels additionally
+       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;
 };
 
        
        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,
-               .unlocks = 1
+               ._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,
-               .unlocks = 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,
-               .unlocks = 1,
+               ._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,
-               .unlocks = 3
+               ._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,
-               .unlocks = 1
+               ._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,
-               .unlocks = 1
+               .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,
-               .unlocks = 1
+               ._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,
-               .unlocks = 1
+               ._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,
-               .unlocks = 1
+               ._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,
-               .unlocks = 1
+               ._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,
-               .unlocks = 1
+               ._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,
-               .unlocks = 1
+               ._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,
-               .unlocks = 1
+               ._unlock = 15
        },
        {
        },
        {
+               .serial_id = 15,
                .title = "PRINCIPLE 5",
                .map_name = "cmp_b10",
                .description = 
                .title = "PRINCIPLE 5",
                .map_name = "cmp_b10",
                .description = 
@@ -697,20 +709,20 @@ struct cmp_level cmp_levels_basic[] =
                        "of your training package, you will now be tasked to\n"
                        "complete them",
 
                        "of your training package, you will now be tasked to\n"
                        "complete them",
 
-               .serial_id = 15,
-               .linked_unlocks = 1
+               ._unlock = 16
        },
        {
        },
        {
+               .serial_id = 16,
                .title = "ROUTING PROBLEM",
                .map_name = "cmp_routing",
                .description = 
                        "Things can get a little chaotic on tight boards, do your\n"
                        "best to utilize principle 5 to get the job done\n",
                
                .title = "ROUTING PROBLEM",
                .map_name = "cmp_routing",
                .description = 
                        "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,
-               .unlocks = 1
+               ._unlock = 17
        },
        {
        },
        {
+               .serial_id = 17,
                .title = "PRINCIPLE 6",
                .map_name = "cmp_b11",
                .description =
                .title = "PRINCIPLE 6",
                .map_name = "cmp_b11",
                .description =
@@ -731,86 +743,139 @@ struct cmp_level cmp_levels_basic[] =
                        "this results in no operation being performed, and no\n"
                        "state changes take place in the Twisty Turny(TM)\n",
 
                        "this results in no operation being performed, and no\n"
                        "state changes take place in the Twisty Turny(TM)\n",
 
-                       .serial_id = 17,
-                       .linked_unlocks = 1
+               ._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,
-               .unlocks = 1
+               ._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,
-               .unlocks = 1
+               ._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,
-               .unlocks = 3
+               ._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 = 
                        "Split the inputs up into a third of their values\n"
                        "\n"
                        "Is this possible? -HG",
                .title = "THIRDS",
                .map_name = "cmp_i02",
                .description = 
                        "Split the inputs up into a third of their values\n"
                        "\n"
                        "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"
        }
 };
 
        }
 };
 
-struct
+#define NUM_CAMPAIGN_LEVELS (vg_list_size( cmp_levels_tutorials ) + vg_list_size( cmp_levels_basic ) + vg_list_size( cmp_levels_grad ))
+
+/*
+static struct
 {
 {
-       int total_unlocked;
 }
 career_local = 
 {
 }
 career_local = 
 {
-       .total_unlocked = 1
+};*/
+
+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;
+               }
+       }
+}