revamped sound engine
[fishladder.git] / fishladder_resources.h
index 77601be0ac5678e2e3d47df489ce350a786f257a..24ba9933069c814e8761115cca6ad23f475ee619 100644 (file)
+// FONTS
+/*
+vg_tex2d tex_ubuntu            =  { .path = "textures/ubuntu.qoi" };
+
+static struct ui_sdf_char characters_Ubuntu[] = {
+  {62911, 23039, 64063, 27647, 9, 9, 18, 18, 7},
+  {3519, 23039, 4991, 33279, 7, 31, 23, 40, 9},
+  {50815, 23039, 52543, 29695, 7, 33, 27, 26, 13},
+  {22783, 12543, 25087, 22783, 7, 31, 36, 40, 21},
+  {19647, 0, 21695, 11775, 7, 34, 32, 46, 18},
+  {36095, 0, 38783, 10495, 7, 31, 42, 41, 27},
+  {41343, 0, 43775, 10495, 8, 31, 38, 41, 21},
+  {52543, 23039, 53887, 29695, 7, 33, 21, 26, 7},
+  {7551, 0, 9215, 12543, 6, 34, 26, 49, 10},
+  {9215, 0, 10879, 12543, 9, 34, 26, 49, 10},
+  {43135, 23039, 45119, 30975, 8, 31, 31, 31, 15},
+  {32703, 23039, 34815, 31743, 7, 26, 33, 34, 18},
+  {49343, 23039, 50815, 29951, 8, 12, 23, 27, 8},
+  {61247, 23039, 62911, 28415, 8, 20, 26, 21, 9},
+  {57599, 23039, 59071, 28671, 7, 13, 23, 22, 8},
+  {0, 0, 2047, 12543, 10, 34, 32, 49, 12},
+  {50623, 0, 52735, 10495, 7, 32, 33, 41, 18},
+  {1791, 23039, 3519, 33279, 6, 31, 27, 40, 18},
+  {61183, 0, 63231, 10495, 7, 32, 32, 41, 18},
+  {63231, 0, 65279, 10495, 7, 32, 32, 41, 18},
+  {38655, 12543, 40831, 22783, 8, 31, 34, 40, 18},
+  {0, 12543, 2047, 23039, 7, 31, 32, 41, 18},
+  {55807, 12543, 57855, 22783, 7, 31, 32, 40, 18},
+  {47359, 12543, 49471, 22783, 7, 31, 33, 40, 18},
+  {52735, 0, 54847, 10495, 7, 31, 33, 41, 18},
+  {49471, 12543, 51583, 22783, 7, 31, 33, 40, 18},
+  {28543, 23039, 30015, 31999, 7, 25, 23, 35, 8},
+  {4991, 23039, 6463, 33279, 8, 26, 23, 40, 8},
+  {38911, 23039, 41023, 31487, 7, 26, 33, 33, 18},
+  {47231, 23039, 49343, 29951, 7, 23, 33, 27, 18},
+  {41023, 23039, 43135, 31487, 7, 26, 33, 33, 18},
+  {4095, 12543, 6015, 23039, 8, 31, 30, 41, 13},
+  {21695, 0, 24511, 11519, 7, 31, 44, 45, 30},
+  {13055, 12543, 15551, 22783, 9, 31, 39, 40, 21},
+  {40831, 12543, 43007, 22783, 6, 31, 34, 40, 20},
+  {43775, 0, 46079, 10495, 7, 31, 36, 41, 20},
+  {25087, 12543, 27391, 22783, 6, 31, 36, 40, 23},
+  {51583, 12543, 53695, 22783, 6, 31, 33, 40, 18},
+  {57855, 12543, 59903, 22783, 6, 31, 32, 40, 17},
+  {46079, 0, 48383, 10495, 7, 31, 36, 41, 21},
+  {29695, 12543, 31935, 22783, 6, 31, 35, 40, 22},
+  {6463, 23039, 7807, 33279, 6, 31, 21, 40, 8},
+  {61951, 12543, 63935, 22783, 9, 31, 31, 40, 16},
+  {31935, 12543, 34175, 22783, 6, 31, 35, 40, 20},
+  {59903, 12543, 61951, 22783, 6, 31, 32, 40, 16},
+  {10367, 12543, 13055, 22783, 7, 31, 42, 40, 28},
+  {27391, 12543, 29695, 22783, 6, 31, 36, 40, 23},
+  {38783, 0, 41343, 10495, 7, 31, 40, 41, 25},
+  {43007, 12543, 45183, 22783, 6, 31, 34, 40, 19},
+  {17087, 0, 19647, 11775, 7, 31, 40, 46, 25},
+  {48383, 0, 50623, 10495, 6, 31, 35, 41, 20},
+  {54847, 0, 56959, 10495, 8, 32, 33, 41, 17},
+  {34175, 12543, 36415, 22783, 8, 31, 35, 40, 18},
+  {36415, 12543, 38655, 22783, 6, 31, 35, 40, 22},
+  {15551, 12543, 18047, 22783, 9, 31, 39, 40, 21},
+  {7423, 12543, 10367, 22783, 8, 31, 46, 40, 29},
+  {18047, 12543, 20415, 22783, 8, 31, 37, 40, 20},
+  {20415, 12543, 22783, 22783, 9, 31, 37, 40, 19},
+  {45183, 12543, 47359, 22783, 8, 31, 34, 40, 18},
+  {10879, 0, 12479, 12543, 6, 34, 25, 49, 10},
+  {2047, 0, 4095, 12543, 10, 34, 32, 49, 12},
+  {12479, 0, 14079, 12543, 9, 34, 25, 49, 10},
+  {45119, 23039, 47231, 30719, 7, 31, 33, 30, 18},
+  {59071, 23039, 61247, 28415, 9, 6, 34, 21, 15},
+  {53887, 23039, 55423, 29183, 7, 34, 24, 24, 12},
+  {18879, 23039, 20863, 31999, 8, 26, 31, 35, 16},
+  {24511, 0, 26623, 11007, 6, 34, 33, 43, 19},
+  {20863, 23039, 22847, 31999, 7, 26, 31, 35, 15},
+  {26623, 0, 28735, 11007, 7, 34, 33, 43, 19},
+  {12607, 23039, 14719, 31999, 7, 26, 33, 35, 18},
+  {32767, 0, 34559, 11007, 6, 34, 28, 43, 12},
+  {2047, 12543, 4095, 23039, 7, 26, 32, 41, 18},
+  {30783, 0, 32767, 11007, 6, 34, 31, 43, 18},
+  {6015, 12543, 7423, 23039, 7, 32, 22, 41, 8},
+  {15423, 0, 17087, 12031, 11, 32, 26, 47, 8},
+  {28735, 0, 30783, 11007, 6, 34, 32, 43, 16},
+  {34559, 0, 36095, 11007, 7, 34, 24, 43, 8},
+  {7807, 23039, 10431, 31999, 6, 26, 41, 35, 27},
+  {22847, 23039, 24831, 31999, 6, 26, 31, 35, 18},
+  {10431, 23039, 12607, 31999, 7, 26, 34, 35, 19},
+  {56959, 0, 59071, 10495, 6, 26, 33, 41, 19},
+  {59071, 0, 61183, 10495, 7, 26, 33, 41, 19},
+  {26751, 23039, 28543, 31999, 6, 26, 28, 35, 12},
+  {24831, 23039, 26751, 31999, 8, 26, 30, 35, 14},
+  {0, 23039, 1791, 33279, 7, 31, 28, 40, 13},
+  {16831, 23039, 18879, 31999, 7, 25, 32, 35, 18},
+  {34815, 23039, 36927, 31743, 8, 25, 33, 34, 16},
+  {30015, 23039, 32703, 31743, 8, 25, 42, 34, 25},
+  {14719, 23039, 16831, 31999, 8, 26, 33, 35, 16},
+  {53695, 12543, 55807, 22783, 9, 25, 33, 40, 16},
+  {36927, 23039, 38911, 31743, 8, 25, 31, 34, 15},
+  {4095, 0, 5823, 12543, 8, 34, 27, 49, 10},
+  {14079, 0, 15423, 12543, 6, 34, 21, 49, 9},
+  {5823, 0, 7551, 12543, 9, 34, 27, 49, 10},
+  {55423, 23039, 57599, 28927, 8, 21, 34, 23, 18},
+};
+
+static struct ui_sdf_font font_Ubuntu = { "Ubuntu", 32, 1024, 256, characters_Ubuntu, &tex_ubuntu };
+*/
+
 // TEXTURES
 // ===========================================================================================================
 
 vg_tex2d tex_tile_data =       { .path = "textures/tileset.qoi" };
 vg_tex2d tex_tile_detail = { .path = "textures/tile_overlays.qoi" };
 vg_tex2d tex_wood =                    { .path = "textures/wood.qoi" };
 // TEXTURES
 // ===========================================================================================================
 
 vg_tex2d tex_tile_data =       { .path = "textures/tileset.qoi" };
 vg_tex2d tex_tile_detail = { .path = "textures/tile_overlays.qoi" };
 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_unkown            =  { .path = "textures/unkown.qoi" };
 vg_tex2d tex_buttons           =  { .path = "textures/buttons.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 tex_buttons           =  { .path = "textures/buttons.qoi" };
 
-vg_tex2d *texture_list[] = { &tex_tile_detail, &tex_tile_data, &tex_wood, &tex_background, &tex_ball_noise, &tex_monofur, &tex_unkown, &tex_buttons };
+vg_tex2d *texture_list[] = { &tex_tile_detail, &tex_tile_data, &tex_wood, &tex_ball_noise, &tex_monofur, &tex_unkown, &tex_buttons };
 
 // AUDIO
 // ===========================================================================================================
 
 // AUDIO
 // ===========================================================================================================
@@ -72,17 +176,31 @@ sound/click_b.ogg\0\
 sound/click_c.ogg\0"
 };
 
 sound/click_c.ogg\0"
 };
 
+sfx_set audio_tones = 
+{
+       .sources = "\
+sound/y0.ogg\0\
+sound/y1.ogg\0\
+sound/y2.ogg\0\
+sound/y3.ogg\0\
+sound/y4.ogg\0\
+sound/y5.ogg\0\
+sound/y6.ogg\0\
+sound/y7.ogg\0\
+sound/y8.ogg\0"
+};
+
 // One two or three layers of rolling noise
 sfx_system audio_system_balls_rolling =
 {
 // One two or three layers of rolling noise
 sfx_system audio_system_balls_rolling =
 {
-       .vol = 1.f, .ch = 1, .vol_src = &audio_volume_sfx, 
-       .name = "Balls Rolling", .flags = SFX_FLAG_REPEAT
+       .vol = 0.7f, .ch = 1, .vol_src = &audio_volume_sfx, 
+       .name = "Balls Rolling", .flags = SFX_FLAG_REPEAT | SFX_FLAG_PERSISTENT
 };
 
 // Various oneshots
 sfx_system audio_system_balls_switching =
 {
 };
 
 // Various oneshots
 sfx_system audio_system_balls_switching =
 {
-       .vol = 1.f, .ch = 1, .vol_src = &audio_volume_sfx, 
+       .vol = 0.2f, .ch = 1, .vol_src = &audio_volume_sfx, 
        .name = "Balls Switching"
 };
 
        .name = "Balls Switching"
 };
 
@@ -96,7 +214,7 @@ sfx_system audio_system_balls_important =
 // Suplemental sounds
 sfx_system audio_system_balls_extra = 
 {
 // Suplemental sounds
 sfx_system audio_system_balls_extra = 
 {
-       .vol = 1.f, .ch = 1, .vol_src = &audio_volume_sfx, 
+       .vol = 0.27f, .ch = 1, .vol_src = &audio_volume_sfx, 
        .name = "Balls Extra"
 };
 
        .name = "Balls Extra"
 };
 
@@ -120,11 +238,8 @@ ui_colourset ui_fl_colours_inactive = {
 
 static void resource_load_main(void)
 {
 
 static void resource_load_main(void)
 {
-       // Textures
+       // Textures // UI
        vg_tex2d_init( texture_list, vg_list_size( texture_list ) );
        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();
        
        ui_global_ctx.colours_main = &ui_fl_colours;
        gui_reset_colours();
        
@@ -134,6 +249,7 @@ static void resource_load_main(void)
        sfx_set_init( &audio_rolls, NULL );
        sfx_set_init( &audio_random, NULL );
        sfx_set_init( &audio_clicks, NULL );
        sfx_set_init( &audio_rolls, NULL );
        sfx_set_init( &audio_random, NULL );
        sfx_set_init( &audio_clicks, NULL );
+       sfx_set_init( &audio_tones, NULL );
 }
 
 static void resource_free_main(void)
 }
 
 static void resource_free_main(void)
@@ -145,6 +261,7 @@ static void resource_free_main(void)
        sfx_set_free( &audio_rolls );
        sfx_set_free( &audio_random );
        sfx_set_free( &audio_clicks );
        sfx_set_free( &audio_rolls );
        sfx_set_free( &audio_random );
        sfx_set_free( &audio_clicks );
+       sfx_set_free( &audio_tones );
 }
 
 // SHADERS
 }
 
 // SHADERS
@@ -385,15 +502,26 @@ SHADER_DEFINE( shader_wire,
        ""
        "uniform sampler2D uTexMain;"
        "uniform vec4 uColour;"
        ""
        "uniform sampler2D uTexMain;"
        "uniform vec4 uColour;"
+       "uniform float uTime;"
+       "uniform float uGlow;"
        ""
        "in vec2 aTexCoords;"
        ""
        "void main()"
        "{"
        ""
        "in vec2 aTexCoords;"
        ""
        "void main()"
        "{"
-               "FragColor = uColour;"
+               // Compute shadowing
+               "float shadow = 1.0 - abs(aTexCoords.y - 0.5) * 2.0;"
+               "float masking = smoothstep( 0.5, 0.8, shadow );"
+               
+               "vec3 colour_comp = mix( vec3(0.0,0.0,0.0), uColour.rgb, masking );"
+               
+               "float flow_thing = fract( aTexCoords.x + uTime );"
+               "vec3 final_comp = colour_comp + flow_thing * uGlow;"
+               
+               "FragColor = vec4( final_comp, max( shadow* 0.2, masking ) * uColour.a );"
        "}"
        ,
        "}"
        ,
-       UNIFORMS({ "uPv", "uColour", "uTexMain", "uStart", "uEnd", "uCurve" })
+       UNIFORMS({ "uPv", "uColour", "uTexMain", "uStart", "uEnd", "uCurve", "uTime", "uGlow" })
 )
 
 SHADER_DEFINE( shader_buttons,
 )
 
 SHADER_DEFINE( shader_buttons,
@@ -640,7 +768,8 @@ static struct cmp_level cmp_levels_tutorials[] =
                .serial_id = 0,
                .title = "PRINCIPLE 1",
                .map_name = "cmp_t01",
                .serial_id = 0,
                .title = "PRINCIPLE 1",
                .map_name = "cmp_t01",
-               .description = "Utilize basic transport methods",
+               .description = 
+                       "Utilize basic transport methods",
                
                ._unlock = 1,
                .is_tutorial = 1
                
                ._unlock = 1,
                .is_tutorial = 1
@@ -650,8 +779,9 @@ static struct cmp_level cmp_levels_tutorials[] =
                .serial_id = 1,
                .title = "PRINCIPLE 2",
                .map_name = "cmp_t02",
                .serial_id = 1,
                .title = "PRINCIPLE 2",
                .map_name = "cmp_t02",
-               .description = "Utilize the twisty turny(TM) piece to split\n"
-                                                       "the marble stream into two",
+               .description = 
+                       "Utilize the twisty turny(TM) piece to split the marble\n"
+                       "stream into two",
                
                ._unlock = 2,
                .is_tutorial = 1,
                
                ._unlock = 2,
                .is_tutorial = 1,
@@ -661,7 +791,8 @@ static struct cmp_level cmp_levels_tutorials[] =
                .serial_id = 2,
                .title = "PRINCIPLE 3",
                .map_name = "cmp_t03",
                .serial_id = 2,
                .title = "PRINCIPLE 3",
                .map_name = "cmp_t03",
-               .description = "Merge transport into one",
+               .description = 
+                       "Merge transport into one path",
                
                ._unlock = 12,
                .is_tutorial = 1
                
                ._unlock = 12,
                .is_tutorial = 1
@@ -671,10 +802,11 @@ static struct cmp_level cmp_levels_tutorials[] =
                .serial_id = 12,
                .title = "PRINCIPLE 4",
                .map_name = "cmp_t04",
                .serial_id = 12,
                .title = "PRINCIPLE 4",
                .map_name = "cmp_t04",
-               .description = "Some stages require multiple runs to succeed\n" 
-                                                       "in order to pass",
+               .description = 
+                       "Some stages require multiple runs to succeed in order to\n" 
+                       "pass",
                
                
-               ._unlock = 3,
+               ._unlock = 6,
                .is_tutorial = 1
        }
 };
                .is_tutorial = 1
        }
 };
@@ -686,10 +818,10 @@ static struct cmp_level cmp_levels_basic[] =
                .serial_id = 6,
                .title = "PATCH",
                .map_name = "cmp_b04",
                .serial_id = 6,
                .title = "PATCH",
                .map_name = "cmp_b04",
-               .description = "For some reason, the division module our\n"
-                                                       "intern built for us is sending twice as many\n"
-                                                       "yellows as needed. We need to send the\n"
-                                                       "excess to be recycled!",
+               .description = 
+                       "For some reason, the division module our intern built\n"
+                       "for us is sending twice as many yellows as needed. Send\n"
+                       "the excess to be recycled!",
                
                ._unlock = 7,
                ._linked = 3
                
                ._unlock = 7,
                ._linked = 3
@@ -699,8 +831,9 @@ static struct cmp_level cmp_levels_basic[] =
                .serial_id = 3,
                .title = "SUBDIVISION 1",
                .map_name = "cmp_b01",
                .serial_id = 3,
                .title = "SUBDIVISION 1",
                .map_name = "cmp_b01",
-               .description = "Sometimes getting the desired amount takes\n"
-                                                       "dividing up the input and recombining it.",
+               .description = 
+                       "Sometimes getting the desired amount takes dividing up\n"
+                       "the input and recombining it.",
                
                ._linked = 4,
                ._unlock = 5
                
                ._linked = 4,
                ._unlock = 5
@@ -710,7 +843,8 @@ static struct cmp_level cmp_levels_basic[] =
                .serial_id = 4,
                .title = "SUBDIVISION 2",
                .map_name = "cmp_b02",
                .serial_id = 4,
                .title = "SUBDIVISION 2",
                .map_name = "cmp_b02",
-               .description = "",
+               .description = 
+                       "",
                
                ._unlock = 7
        },
                
                ._unlock = 7
        },
@@ -719,8 +853,9 @@ static struct cmp_level cmp_levels_basic[] =
                .serial_id = 5,
                .title = "RESTRUCTURE",
                .map_name = "cmp_b03",
                .serial_id = 5,
                .title = "RESTRUCTURE",
                .map_name = "cmp_b03",
-               .description = "It is possible to swap these values using\n"
-                                                       "simple division and addition.",
+               .description = 
+                       "It is possible to swap these values using simple\n"
+                       "division and addition.",
                
                ._unlock = 8
        },
                
                ._unlock = 8
        },
@@ -729,7 +864,8 @@ static struct cmp_level cmp_levels_basic[] =
                .serial_id = 7,
                .title = "PATTERNS 1",
                .map_name = "cmp_b05",
                .serial_id = 7,
                .title = "PATTERNS 1",
                .map_name = "cmp_b05",
-               .description = "Replicate",
+               .description = 
+                       "Replicate the pattern",
                
                ._linked = 8
        },
                
                ._linked = 8
        },
@@ -738,7 +874,8 @@ static struct cmp_level cmp_levels_basic[] =
                .serial_id = 8,
                .title = "PATTERNS 2",
                .map_name = "cmp_b06",
                .serial_id = 8,
                .title = "PATTERNS 2",
                .map_name = "cmp_b06",
-               .description = "Replicate MORE",
+               .description = 
+                       "Replicate MORE",
                
                ._unlock = 15
        },
                
                ._unlock = 15
        },
@@ -748,8 +885,8 @@ static struct cmp_level cmp_levels_basic[] =
                .title = "PRINCIPLE 5",
                .map_name = "cmp_b10",
                .description = 
                .title = "PRINCIPLE 5",
                .map_name = "cmp_b10",
                .description = 
-                       "The eager engineers among you may have already spotted\n" 
-                       "and utilized these parts of the system\n"
+                       "The sharp engineers among you may have already spotted\n" 
+                       "and utilized this part of the system\n"
                        "\n"
                        "We forgot to include the relevant principle tasks as\n"
                        "of your training package, you will now be tasked to\n"
                        "\n"
                        "We forgot to include the relevant principle tasks as\n"
                        "of your training package, you will now be tasked to\n"
@@ -774,7 +911,8 @@ static struct cmp_level cmp_levels_basic[] =
                .serial_id = 9,
                .title = "MIGHTY CONSUMER",
                .map_name = "cmp_b07",
                .serial_id = 9,
                .title = "MIGHTY CONSUMER",
                .map_name = "cmp_b07",
-               .description = "Build a greedy system",
+               .description = 
+                       "Build a greedy system",
                
                ._linked = 10,
                ._unlock = 11
                
                ._linked = 10,
                ._unlock = 11
@@ -783,7 +921,8 @@ static struct cmp_level cmp_levels_basic[] =
                .serial_id = 10,
                .title = "SHIFT",
                .map_name = "cmp_b08",
                .serial_id = 10,
                .title = "SHIFT",
                .map_name = "cmp_b08",
-               .description = "",
+               .description = 
+                       "",
 
                ._unlock = 17
        },
 
                ._unlock = 17
        },
@@ -792,7 +931,8 @@ static struct cmp_level cmp_levels_basic[] =
                .serial_id = 11,
                .title = "REVERSE",
                .map_name = "cmp_b09",
                .serial_id = 11,
                .title = "REVERSE",
                .map_name = "cmp_b09",
-               .description = "Reverse the incoming order. Always length 4",
+               .description = 
+                       "Reverse the incoming order. Always length 4",
                
                ._unlock = 17
        },
                
                ._unlock = 17
        },
@@ -837,30 +977,34 @@ static struct cmp_level cmp_levels_basic[] =
                
                ._unlock = 20
        },
                
                ._unlock = 20
        },
+       // r2 GM
        {
                .serial_id = 20,
                .title = "QUALIFICATION PROJECT",
        {
                .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",
+               .map_name = "cmp_xor",
+               .description =  
+                       "Significantly more complicated than an AND or NOT gate,\n"
+                       "but possible.",
+
                ._unlock = 13
        }
 };
 
 static struct cmp_level cmp_levels_grad[] =
 {
                ._unlock = 13
        }
 };
 
 static struct cmp_level cmp_levels_grad[] =
 {
+       // r2
        {
                .serial_id = 13,
                .title = "SORT",
                .map_name = "cmp_i01",
                .description = 
        {
                .serial_id = 13,
                .title = "SORT",
                .map_name = "cmp_i01",
                .description = 
-                       "Device a scheme to filter and sort the inputs. If you\n"
+                       "Devise 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
                
        },
                        "believe you lack the tools required to solve this one,\n"
                        "take a harder look at the inputs.",
                ._linked = 14
                
        },
+       // r2
        {
                .serial_id = 14,
                .title = "THIRDS",
        {
                .serial_id = 14,
                .title = "THIRDS",
@@ -872,36 +1016,29 @@ static struct cmp_level cmp_levels_grad[] =
                ._linked = 21
                
        },
                ._linked = 21
                
        },
+       // r2 GM
        {
                .serial_id = 21,
        {
                .serial_id = 21,
-               .title = "XOR CHIP",
-               .map_name = "cmp_xor",
+               .title = "SIMPLE ADDITION",
+               .map_name = "cmp_grad",
                .description = 
                .description = 
-                       "Significantly more complicated than an AND or NOT gate,\n"
-                       "but possible.",
+                       "Take the amount of yellows coming in, and add them\n"
+                       "together. Send your result using the stream of blues.",
+
                ._linked = 22
        },
                ._linked = 22
        },
+       // r2 GM
        {
                .serial_id = 22,
                .title = "SECRET CODE",
                .map_name = "cmp_secret",
                .description = 
        {
                .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"
-                       "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 ))
 
        }
 };
 
 #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;
 static struct serializable_set 
 {
        struct cmp_level *pack;