local function write_header() io.write('#include \n') io.write('#include "level.h"\n') io.write('#include "tiles.h"\n') end local function load_level(level_id) local level = require("level_" .. level_id) return level end local function write_layer(layer, level_id) local data = layer.data io.write("const Tile tiles_", level_id, "_", layer.name, "[] = {\n") for _, v in ipairs(data) do if v ~= 0 then v = v - 1 end io.write(v, ",") end io.write("};\n") end local function write_level(level, level_id) solid_layer = 1 bg_color = level.backgroundcolor or { 255, 255, 255 } for i, v in ipairs(bg_color) do bg_color[i] = math.floor(v / 8) end -- write every layer for i, layer in ipairs(level.layers) do if layer.name == "solid" then solid_layer = i end write_layer(layer, level_id) end io.write("const Tile *layers_", level_id, "[] = {") for i, layer in ipairs(level.layers) do io.write("tiles_", level_id, "_", layer.name, ",") end io.write("};\n") -- create level struct io.write("const Level level_", level_id, " = {\n") io.write("\t.width = ", level.width, ",\n") io.write("\t.height = ", level.height, ",\n") io.write("\t#ifdef FXCG50\n") io.write("\t.bg_color = C_RGB(", bg_color[1], ", ", bg_color[2], ", ", bg_color[3], "),\n") io.write("\t#else\n") io.write("\t.bg_color = C_WHITE,\n") io.write("\t#endif\n") io.write("\t.layers = layers_", level_id, ",\n") io.write("\t.layers_count = ", #level.layers, ",\n") io.write("\t.solid_layer = ", solid_layer - 1, "\n") io.write("};\n") end local function write_function(first_level, last_level) io.write("void level_set(const Level **level, uint level_id) {\n") io.write("\tswitch(level_id) {\n") for i = first_level, last_level, 1 do io.write("\t\tcase ", i, ": *level = &level_", i, "; break;\n") end io.write("\t}\n") io.write("}\n") end write_header() local level_id = 1 write_level(load_level(level_id), level_id) write_function(1, 1)