diff --git a/src/scripts/nogame.lua b/src/scripts/nogame.lua index 20cdbdad8..cda17d438 100644 --- a/src/scripts/nogame.lua +++ b/src/scripts/nogame.lua @@ -741,6 +741,7 @@ function love.nogame() self.batch = love.graphics.newSpriteBatch(mosaic_image, SIZE, "stream") self.pieces = {} self.color_t = 1 + self.generation = 1 local COLORS = {} @@ -757,10 +758,6 @@ function love.nogame() -- Insert only once. This way it appears half as often. table.insert(COLORS, { 220, 239, 113 }) -- LIME - self.generator = function() - return COLORS[love.math.random(1, #COLORS)] - end - -- When using the higher-res mosaic sprite sheet, we want to draw its -- sprites at the same scale as the regular-resolution one, because -- we'll globally love.graphics.scale *everything* by the screen's @@ -785,6 +782,38 @@ function love.nogame() local exclude_height = exclude_bottom - exclude_top + 1 local exclude_area = exclude_width * exclude_height + local exclude_center_x = exclude_left + 1.5 + local exclude_center_y = exclude_top + 1.5 + + self.generators = { + function(piece, generation) + return COLORS[math.random(1, #COLORS)] + end, + function(piece, generation) + return COLORS[1 + (generation + piece.grid_x - piece.grid_y) % #COLORS] + end, + function(piece, generation) + return COLORS[1 + (piece.grid_x + generation) % #COLORS] + end, + function(piece, generation) + local len = generation + math.sqrt(piece.grid_x ^ 2 + piece.grid_y ^ 2) + return COLORS[1 + math.floor(len) % #COLORS] + end, + function(piece, generation) + local dx = piece.grid_x - exclude_center_x + local dy = piece.grid_y - exclude_center_y + local len = generation - math.sqrt(dx ^ 2 + dy ^ 2) + return COLORS[1 + math.floor(len) % #COLORS] + end, + function(piece, generation) + local dx = math.abs(piece.grid_x - exclude_center_x) - generation + local dy = math.abs(piece.grid_y - exclude_center_y) - generation + return COLORS[1 + math.floor(math.max(dx, dy)) % #COLORS] + end, + } + + self.generator = self.generators[1] + local EXCLUDE = {} for y = exclude_top,exclude_bottom do EXCLUDE[y] = {} @@ -797,6 +826,8 @@ function love.nogame() for x = 1,SIZE_X do if not EXCLUDE[y] or not EXCLUDE[y][x] then local piece = { + grid_x = x, + grid_y = y, x = (x - 1) * 32, y = (y - 1) * 32, r = love.math.random(0, 100) / 100 * math.pi, @@ -805,7 +836,7 @@ function love.nogame() quad = QUADS[(x + y) % 4 + 1] } - piece.color.prev = self.generator(#self.pieces + 1, 0, 2) + piece.color.prev = self.generator(piece, self.generation) piece.color.next = piece.color.prev table.insert(self.pieces, piece) end @@ -853,18 +884,30 @@ function love.nogame() put_text("SUPER TOAST", 0, text_center_x - 4, exclude_top - 3) end + function Mosaic:addGeneration() + self.generation = self.generation + 1 + if self.generation % 5 == 0 then + if math.random(0, 100) < 30 then + self.generator = self.generators[math.random(2, #self.generators)] + else + self.generator = self.generators[1] + end + end + end + function Mosaic:update(dt) self.color_t = math.max(self.color_t - dt, 0) local change_color = self.color_t == 0 if change_color then self.color_t = 1 + self:addGeneration() end local gen = self.generator for idx,piece in ipairs(self.pieces) do piece.r = piece.r + piece.rv * dt - if change_color and not piece.color.immutable then + if change_color then piece.color.prev = piece.color.next - piece.color.next = gen() + piece.color.next = gen(piece, self.generation) end end end diff --git a/src/scripts/nogame.lua.h b/src/scripts/nogame.lua.h index 809a57463..a7a1b32ae 100644 --- a/src/scripts/nogame.lua.h +++ b/src/scripts/nogame.lua.h @@ -3155,6 +3155,8 @@ const unsigned char nogame_lua[] = 0x29, 0x0a, 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x20, 0x3d, 0x20, 0x31, 0x0a, + 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x3d, 0x20, 0x31, 0x0a, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x5f, 0x2c, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x69, @@ -3180,12 +3182,6 @@ const unsigned char nogame_lua[] = 0x09, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x2c, 0x20, 0x7b, 0x20, 0x32, 0x32, 0x30, 0x2c, 0x20, 0x32, 0x33, 0x39, 0x2c, 0x20, 0x31, 0x31, 0x33, 0x20, 0x7d, 0x29, 0x20, 0x2d, 0x2d, 0x20, 0x4c, 0x49, 0x4d, 0x45, 0x0a, - 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, - 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, - 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5b, 0x6c, - 0x6f, 0x76, 0x65, 0x2e, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x31, 0x2c, - 0x20, 0x23, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x29, 0x5d, 0x0a, - 0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a, 0x09, 0x09, 0x2d, 0x2d, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x2d, 0x72, 0x65, 0x73, 0x20, 0x6d, 0x6f, 0x73, 0x61, 0x69, 0x63, 0x20, 0x73, 0x70, 0x72, 0x69, 0x74, 0x65, 0x20, 0x73, 0x68, 0x65, 0x65, 0x74, 0x2c, 0x20, 0x77, 0x65, @@ -3257,6 +3253,81 @@ const unsigned char nogame_lua[] = 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x61, 0x72, 0x65, 0x61, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x77, 0x69, 0x64, 0x74, 0x68, 0x20, 0x2a, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x0a, + 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x78, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6c, + 0x65, 0x66, 0x74, 0x20, 0x2b, 0x20, 0x31, 0x2e, 0x35, 0x0a, + 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x79, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, + 0x6f, 0x70, 0x20, 0x2b, 0x20, 0x31, 0x2e, 0x35, 0x0a, + 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x20, + 0x3d, 0x20, 0x7b, 0x0a, + 0x09, 0x09, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2c, + 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5b, + 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x31, 0x2c, 0x20, 0x23, 0x43, 0x4f, + 0x4c, 0x4f, 0x52, 0x53, 0x29, 0x5d, 0x0a, + 0x09, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x2c, 0x0a, + 0x09, 0x09, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2c, + 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5b, + 0x31, 0x20, 0x2b, 0x20, 0x28, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2b, 0x20, + 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x78, 0x20, 0x2d, 0x20, 0x70, 0x69, 0x65, + 0x63, 0x65, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x79, 0x29, 0x20, 0x25, 0x20, 0x23, 0x43, 0x4f, 0x4c, 0x4f, + 0x52, 0x53, 0x5d, 0x0a, + 0x09, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x2c, 0x0a, + 0x09, 0x09, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2c, + 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5b, + 0x31, 0x20, 0x2b, 0x20, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x78, 0x20, + 0x2b, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x25, 0x20, 0x23, 0x43, + 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5d, 0x0a, + 0x09, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x2c, 0x0a, + 0x09, 0x09, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2c, + 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2b, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x71, + 0x72, 0x74, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x78, 0x20, 0x5e, 0x20, + 0x32, 0x20, 0x2b, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x79, 0x20, 0x5e, + 0x20, 0x32, 0x29, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5b, + 0x31, 0x20, 0x2b, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x6c, 0x65, 0x6e, + 0x29, 0x20, 0x25, 0x20, 0x23, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5d, 0x0a, + 0x09, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x2c, 0x0a, + 0x09, 0x09, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2c, + 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x78, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x65, + 0x63, 0x65, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x78, 0x20, 0x2d, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x78, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x79, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x65, + 0x63, 0x65, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x79, 0x20, 0x2d, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x79, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x71, + 0x72, 0x74, 0x28, 0x64, 0x78, 0x20, 0x5e, 0x20, 0x32, 0x20, 0x2b, 0x20, 0x64, 0x79, 0x20, 0x5e, 0x20, 0x32, + 0x29, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5b, + 0x31, 0x20, 0x2b, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x6c, 0x65, 0x6e, + 0x29, 0x20, 0x25, 0x20, 0x23, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5d, 0x0a, + 0x09, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x2c, 0x0a, + 0x09, 0x09, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2c, + 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x78, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, + 0x68, 0x2e, 0x61, 0x62, 0x73, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x78, + 0x20, 0x2d, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x5f, + 0x78, 0x29, 0x20, 0x2d, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x64, 0x79, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, + 0x68, 0x2e, 0x61, 0x62, 0x73, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x79, + 0x20, 0x2d, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x5f, + 0x79, 0x29, 0x20, 0x2d, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5b, + 0x31, 0x20, 0x2b, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x6d, 0x61, 0x74, + 0x68, 0x2e, 0x6d, 0x61, 0x78, 0x28, 0x64, 0x78, 0x2c, 0x20, 0x64, 0x79, 0x29, 0x29, 0x20, 0x25, 0x20, 0x23, + 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x5d, 0x0a, + 0x09, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x2c, 0x0a, + 0x09, 0x09, 0x7d, 0x0a, + 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, + 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x5b, 0x31, + 0x5d, 0x0a, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a, 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x79, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, @@ -3280,6 +3351,8 @@ const unsigned char nogame_lua[] = 0x5b, 0x79, 0x5d, 0x5b, 0x78, 0x5d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x7b, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x78, 0x20, 0x3d, 0x20, 0x78, 0x2c, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x79, 0x20, 0x3d, 0x20, 0x79, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x78, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, 0x2a, 0x20, 0x33, 0x32, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x79, 0x20, 0x3d, 0x20, 0x28, 0x79, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, @@ -3294,8 +3367,8 @@ const unsigned char nogame_lua[] = 0x09, 0x09, 0x09, 0x09, 0x09, 0x7d, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x65, 0x76, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x28, 0x23, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x70, 0x69, 0x65, 0x63, 0x65, 0x73, 0x20, 0x2b, 0x20, - 0x31, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x32, 0x29, 0x0a, + 0x6f, 0x72, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2c, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x65, 0x76, 0x0a, @@ -3390,6 +3463,26 @@ const unsigned char nogame_lua[] = 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x78, 0x20, 0x2d, 0x20, 0x34, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x2d, 0x20, 0x33, 0x29, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x0a, + 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x4d, 0x6f, 0x73, 0x61, 0x69, 0x63, 0x3a, 0x61, + 0x64, 0x64, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, + 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x2b, 0x20, 0x31, 0x0a, + 0x09, 0x09, 0x69, 0x66, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x20, 0x25, 0x20, 0x35, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, + 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, + 0x30, 0x2c, 0x20, 0x31, 0x30, 0x30, 0x29, 0x20, 0x3c, 0x20, 0x33, 0x30, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, + 0x5b, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x32, 0x2c, 0x20, 0x23, 0x73, + 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x29, 0x5d, 0x0a, + 0x09, 0x09, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x0a, + 0x09, 0x09, 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x73, + 0x5b, 0x31, 0x5d, 0x0a, + 0x09, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a, + 0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a, + 0x09, 0x65, 0x6e, 0x64, 0x0a, 0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x4d, 0x6f, 0x73, 0x61, 0x69, 0x63, 0x3a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x28, 0x64, 0x74, 0x29, 0x0a, 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x20, 0x3d, 0x20, 0x6d, @@ -3402,6 +3495,8 @@ const unsigned char nogame_lua[] = 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x09, 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x20, 0x3d, 0x20, 0x31, 0x0a, + 0x09, 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x3a, 0x61, 0x64, 0x64, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x67, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x0a, @@ -3411,13 +3506,13 @@ const unsigned char nogame_lua[] = 0x09, 0x09, 0x09, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x72, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x72, 0x20, 0x2b, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x72, 0x76, 0x20, 0x2a, 0x20, 0x64, 0x74, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x66, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x2e, 0x69, 0x6d, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, + 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x65, 0x76, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6e, 0x65, 0x78, 0x74, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6e, 0x65, - 0x78, 0x74, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x6e, 0x28, 0x29, 0x0a, + 0x78, 0x74, 0x20, 0x3d, 0x20, 0x67, 0x65, 0x6e, 0x28, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2c, 0x20, 0x73, 0x65, + 0x6c, 0x66, 0x2e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a, 0x09, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x0a,