struct cmp_level
{
+ // Basic info
+ int serial_id;
+
const char *map_name;
const char *title;
const char *description;
- const char *achievement;
- int unlocked;
- int completed_score;
+ const char *achievement;
int _unlock, _linked; // When completed, unlock this level
- struct cmp_level *unlock, *linked;
+ int is_tutorial;
+ // Aesthetic
struct world_string
{
enum placement
const char *str;
}
strings[2];
-
- int serial_id;
- int is_tutorial;
+ // Persistent stats
+ int unlocked;
+ int completed_score;
+
+ // Runtime
struct world_button btn;
+ struct cmp_level *unlock, *linked;
#ifdef VG_STEAM
SteamLeaderboard_t steam_leaderboard;
static struct cmp_level cmp_levels_tutorials[] =
{
- {
- .serial_id = 0,
- .title = "PRINCIPLE 1",
- .map_name = "cmp_t01",
- .description =
- "",
-
+ {
+ 0, "cmp_t01", "PRINCIPLE 1", "",
._unlock = 1,
.is_tutorial = 1
},
- {
- .serial_id = 1,
- .title = "PRINCIPLE 2",
- .map_name = "cmp_t02",
- .description =
- "",
-
+ {
+ 1, "cmp_t02", "PRINCIPLE 2", "",
._unlock = 2,
.is_tutorial = 1,
},
{
- .serial_id = 2,
- .title = "PRINCIPLE 3",
- .map_name = "cmp_t03",
- .description =
- "",
-
+ 2, "cmp_t03", "PRINCIPLE 3", "",
._unlock = 12,
.is_tutorial = 1
},
{
- .serial_id = 12,
- .title = "PRINCIPLE 4",
- .map_name = "cmp_t04",
- .description =
- "",
-
+ 12, "cmp_t04", "PRINCIPLE 4", "",
._unlock = 6,
.is_tutorial = 1,
.achievement = "TUTORIALS"
},
{
- .serial_id = 15,
- .title = "PRINCIPLE 5",
- .map_name = "cmp_b10",
- .description =
- "",
-
+ 15, "cmp_b10", "PRINCIPLE 5", "",
._unlock = 16,
.is_tutorial = 1
},
{
- .serial_id = 17,
- .title = "PRINCIPLE 6",
- .map_name = "cmp_b11",
- .description =
- "(Right click)",
-
+ 17, "cmp_b11", "PRINCIPLE 6", "(Right click)",
._unlock = 18,
.is_tutorial = 1
},
{
- .serial_id = 26,
- .title = "PRINCIPLE 7",
- .map_name = "cmp_p7",
- .description = "Emitters",
+ 26, "cmp_p7", "PRINCIPLE 7", "Emitters",
._unlock = 27,
.is_tutorial = 1
}
static struct cmp_level cmp_levels_basic[] =
{
{
- .serial_id = 6,
- .title = "PATCH",
- .map_name = "cmp_b04",
- .description =
- "",
-
+ 6, "cmp_b04", "PATCH", "",
._unlock = 7,
._linked = 3
},
{
- .serial_id = 3,
- .title = "SUBDIVISION 1",
- .map_name = "cmp_b01",
- .description =
- "",
-
+ 3, "cmp_b01", "SUBDIVISION 1", "",
._linked = 4,
._unlock = 5
},
{
- .serial_id = 4,
- .title = "SUBDIVISION 2",
- .map_name = "cmp_b02",
- .description =
- "",
-
+ 4, "cmp_b02", "SUBDIVISION 2", "",
._unlock = 7
},
{
- .serial_id = 5,
- .title = "RESTRUCTURE",
- .map_name = "cmp_b03",
- .description =
- "",
-
+ 5, "cmp_b03", "RESTRUCTURE", "",
._unlock = 8
},
{
- .serial_id = 7,
- .title = "PATTERNS 1",
- .map_name = "cmp_b05",
- .description =
- "",
-
+ 7, "cmp_b05", "PATTERNS 1", "",
._unlock = 15,
._linked = 8
},
{
- .serial_id = 8,
- .title = "PATTERNS 2",
- .map_name = "cmp_b06",
- .description =
- "",
-
+ 8, "cmp_b06", "PATTERNS 2", "",
._unlock = 15
},
{
- .serial_id = 16,
- .title = "ROUTING PROBLEM",
- .map_name = "cmp_routing",
- .description =
- "",
-
+ 16, "cmp_routing", "ROUTING PROBLEM", "",
._linked = 9
},
{
- .serial_id = 9,
- .title = "MIGHTY CONSUMER",
- .map_name = "cmp_b07",
- .description =
- "",
-
+ 9, "cmp_b07", "MIGHTY CONSUMER", "",
._linked = 10,
._unlock = 11,
.achievement = "MIGHTY_CONSUMER"
},
{
- .serial_id = 10,
- .title = "SHIFT",
- .map_name = "cmp_b08",
- .description =
- "",
-
+ 10, "cmp_b08", "SHIFT", "",
._unlock = 17
},
{
- .serial_id = 11,
- .title = "REVERSE",
- .map_name = "cmp_b09",
- .description =
- "",
-
+ 11, "cmp_b09", "REVERSE", "",
._unlock = 17
},
{
- .serial_id = 18,
- .title = "NOT GATE",
- .map_name = "cmp_not",
- .description = "",
-
+ 18, "cmp_not", "NOT GATE", "",
._linked = 19,
._unlock = 20
},
{
- .serial_id = 19,
- .title = "AND GATE",
- .map_name = "cmp_and",
- .description = "",
-
+ 19, "cmp_and", "AND GATE", "",
._unlock = 20
},
{
- .serial_id = 20,
- .title = "QUALIFICATION PROJECT",
- .map_name = "cmp_xor",
- .description = "",
-
+ 20, "cmp_xor", "QUALIFICATION PROJECT", "",
._unlock = 25,
.achievement = "GRADUATE"
},
{
- .serial_id = 27,
- .title = "EXPAND",
- .map_name = "cmp_expander",
- .description = "",
-
+ 27, "cmp_expander", "EXPAND", "",
._unlock = 28
},
{
- .serial_id = 28,
- .title = "PATTERNS 3",
- .map_name = "cmp_pattern3",
- .description = "",
+ 28, "cmp_pattern3", "PATTERNS 3", "",
._linked = 29
},
{
- .serial_id = 29,
- .title = "ROUTING PROBLEM 2",
- .map_name = "cmp_routing2",
- .description = "Spaghetti!",
+ 29, "cmp_routing2", "ROUTING PROBLEM 2", "Spaghetti!",
._linked = 30
},
{
- .serial_id = 30,
- .title = "EXACTLY 5",
- .map_name = "cmp_exact5",
- .description = ""
+ 30, "cmp_exact5", "EXACTLY 5", ""
}
};
static struct cmp_level cmp_levels_grad[] =
{
- // r2
{
- .serial_id = 13,
- .title = "SORT",
- .map_name = "cmp_i01",
- .description = "",
+ 13, "cmp_i01", "SORT", "",
._linked = 14
-
},
- // r2
{
- .serial_id = 14,
- .title = "THIRDS",
- .map_name = "cmp_i02",
- .description = "",
+ 14, "cmp_i02", "THIRDS", "",
._linked = 21
-
},
{
- .serial_id = 21,
- .title = "SIMPLE ADDITION",
- .map_name = "cmp_grad",
- .description = "",
-
+ 21, "cmp_grad", "SIMPLE ADDITION", "",
._linked = 22,
._unlock = 23
},
{
- .serial_id = 22,
- .title = "SECRET CODE",
- .map_name = "cmp_secret",
- .description = "",
-
+ 22, "cmp_secret", "SECRET CODE", "",
._unlock = 23
}
};
static struct cmp_level cmp_levels_computer[] =
{
{
- .serial_id = 23,
- .title = "3 BIT BINARY",
- .map_name = "cmp_binary",
- .description = "convert amount to binary",
+ 23, "cmp_binary", "3 BIT BINARY", "Convert amount to binary",
+ ._unlock = 24,
.strings =
{
{
"\n"
"\t\t\t\t\t\t\t\t\t\t\t Count"
}
- },
-
- ._unlock = 24
+ }
},
{
- .serial_id = 24,
- .title = "3 BIT ADDER",
- .map_name = "cmp_add3b",
- .description = "binary addition",
+ 24, "cmp_add3b", "3 BIT ADDER", "Binary addition",
+ ._unlock = 25,
.strings =
{
{
"\t\t\t\x83 \x84 result a+b\n"
"\t\t\t\x83 8 4 2 1 \x84"
}
- },
-
- ._unlock = 25
+ }
},
{
- .serial_id = 25,
- .title = "3x3 PLOT",
- .map_name = "cmp_plot3x3",
- .description = "2 bit x/y",
-
+ 25, "cmp_plot3x3", "3x3 PLOT", "2 bit x/y",
.strings =
{
{