Browse Source

Add some mosaic patterns which appear sometimes.

rude 9 years ago
parent
commit
2990b6d440
2 changed files with 156 additions and 18 deletions
  1. 50 7
      src/scripts/nogame.lua
  2. 106 11
      src/scripts/nogame.lua.h

+ 50 - 7
src/scripts/nogame.lua

@@ -741,6 +741,7 @@ function love.nogame()
 		self.batch = love.graphics.newSpriteBatch(mosaic_image, SIZE, "stream")
 		self.batch = love.graphics.newSpriteBatch(mosaic_image, SIZE, "stream")
 		self.pieces = {}
 		self.pieces = {}
 		self.color_t = 1
 		self.color_t = 1
+		self.generation = 1
 
 
 		local COLORS = {}
 		local COLORS = {}
 
 
@@ -757,10 +758,6 @@ function love.nogame()
 		-- Insert only once. This way it appears half as often.
 		-- Insert only once. This way it appears half as often.
 		table.insert(COLORS, { 220, 239, 113 }) -- LIME
 		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
 		-- When using the higher-res mosaic sprite sheet, we want to draw its
 		-- sprites at the same scale as the regular-resolution one, because
 		-- sprites at the same scale as the regular-resolution one, because
 		-- we'll globally love.graphics.scale *everything* by the screen's
 		-- 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_height = exclude_bottom - exclude_top + 1
 		local exclude_area = exclude_width * exclude_height
 		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 = {}
 		local EXCLUDE = {}
 		for y = exclude_top,exclude_bottom do
 		for y = exclude_top,exclude_bottom do
 			EXCLUDE[y]  = {}
 			EXCLUDE[y]  = {}
@@ -797,6 +826,8 @@ function love.nogame()
 			for x = 1,SIZE_X do
 			for x = 1,SIZE_X do
 				if not EXCLUDE[y] or not EXCLUDE[y][x] then
 				if not EXCLUDE[y] or not EXCLUDE[y][x] then
 					local piece = {
 					local piece = {
+						grid_x = x,
+						grid_y = y,
 						x = (x - 1) * 32,
 						x = (x - 1) * 32,
 						y = (y - 1) * 32,
 						y = (y - 1) * 32,
 						r = love.math.random(0, 100) / 100 * math.pi,
 						r = love.math.random(0, 100) / 100 * math.pi,
@@ -805,7 +836,7 @@ function love.nogame()
 						quad = QUADS[(x + y) % 4 + 1]
 						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
 					piece.color.next = piece.color.prev
 					table.insert(self.pieces, piece)
 					table.insert(self.pieces, piece)
 				end
 				end
@@ -853,18 +884,30 @@ function love.nogame()
 		put_text("SUPER TOAST", 0, text_center_x - 4, exclude_top - 3)
 		put_text("SUPER TOAST", 0, text_center_x - 4, exclude_top - 3)
 	end
 	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)
 	function Mosaic:update(dt)
 		self.color_t = math.max(self.color_t - dt, 0)
 		self.color_t = math.max(self.color_t - dt, 0)
 		local change_color = self.color_t == 0
 		local change_color = self.color_t == 0
 		if change_color then
 		if change_color then
 			self.color_t = 1
 			self.color_t = 1
+			self:addGeneration()
 		end
 		end
 		local gen = self.generator
 		local gen = self.generator
 		for idx,piece in ipairs(self.pieces) do
 		for idx,piece in ipairs(self.pieces) do
 			piece.r = piece.r + piece.rv * dt
 			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.prev = piece.color.next
-				piece.color.next = gen()
+				piece.color.next = gen(piece, self.generation)
 			end
 			end
 		end
 		end
 	end
 	end

+ 106 - 11
src/scripts/nogame.lua.h

@@ -3155,6 +3155,8 @@ const unsigned char nogame_lua[] =
 	0x29, 0x0a,
 	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, 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, 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, 
 	0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x53, 0x20, 0x3d, 0x20, 0x7b, 
 	0x7d, 0x0a,
 	0x7d, 0x0a,
 	0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x5f, 0x2c, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x69, 
 	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, 
 	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, 
 	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,
 	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, 
 	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, 
 	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, 
 	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, 
 	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, 
 	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,
 	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, 
 	0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x45, 0x58, 0x43, 0x4c, 0x55, 0x44, 0x45, 0x20, 0x3d, 0x20, 
 	0x7b, 0x7d, 0x0a,
 	0x7b, 0x7d, 0x0a,
 	0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x79, 0x20, 0x3d, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 
 	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,
 	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, 
 	0x09, 0x09, 0x09, 0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x20, 0x3d, 
 	0x20, 0x7b, 0x0a,
 	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, 
 	0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x78, 0x20, 0x3d, 0x20, 0x28, 0x78, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, 
 	0x2a, 0x20, 0x33, 0x32, 0x2c, 0x0a,
 	0x2a, 0x20, 0x33, 0x32, 0x2c, 0x0a,
 	0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x79, 0x20, 0x3d, 0x20, 0x28, 0x79, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, 
 	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, 0x7d, 0x0a,
 	0x09, 0x09, 0x09, 0x09, 0x09, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x70, 
 	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, 
 	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, 
 	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, 
 	0x65, 0x78, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 
 	0x70, 0x72, 0x65, 0x76, 0x0a,
 	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, 
 	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,
 	0x65, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x2d, 0x20, 0x33, 0x29, 0x0a,
 	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, 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, 
 	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,
 	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, 
 	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,
 	0x74, 0x68, 0x65, 0x6e, 0x0a,
 	0x09, 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x20, 0x3d, 0x20, 
 	0x09, 0x09, 0x09, 0x73, 0x65, 0x6c, 0x66, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x20, 0x3d, 0x20, 
 	0x31, 0x0a,
 	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, 0x65, 0x6e, 0x64, 0x0a,
 	0x09, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x67, 0x65, 0x6e, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x6c, 0x66, 
 	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,
 	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, 
 	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,
 	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, 
 	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, 
 	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, 0x76, 0x20, 0x3d, 0x20, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6e, 
 	0x65, 0x78, 0x74, 0x0a,
 	0x65, 0x78, 0x74, 0x0a,
 	0x09, 0x09, 0x09, 0x09, 0x70, 0x69, 0x65, 0x63, 0x65, 0x2e, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x6e, 0x65, 
 	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, 0x09, 0x65, 0x6e, 0x64, 0x0a,
 	0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a,
 	0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a,
 	0x09, 0x65, 0x6e, 0x64, 0x0a,
 	0x09, 0x65, 0x6e, 0x64, 0x0a,