I was playing around in Codea tonight and decided to make this simple game logo generator. Feel free to use it however you like. Note that the code is a bit hacked together, as I didn’t really have an idea in mind of what I wanted before starting.
Example output
You can customise colour palette and font.
--# Main
-- Logotron
displayMode(STANDARD)
function setup()
local bounds = vec2(600, 300)
logoImg = nil
fontSize(96)
local generate = function()
logoImg = genLogo(bounds)
end
parameter.text("NAME", "Title Here", generate)
parameter.integer("PALETTE", 1, 7, 1, generate)
parameter.integer("FONT", 1, 9, 1, generate)
parameter.action("Regenerate", generate)
end
function genLogo(bounds)
local pal = {
palettes.winter,
palettes.earthy,
palettes.fiery,
palettes.space,
palettes.darkness,
palettes.dusty,
palettes.sky,
}
local fonts = {
("AmericanTypewriter-Bold"),
("ArialRoundedMTBold"),
("Futura-Medium"),
("Futura-CondensedExtraBold"),
("Courier-Bold"),
("HelveticaNeue-Light"),
("Noteworthy-Bold"),
("SourceSansPro-Bold"),
("Vegur-Bold"),
}
local pidx = PALETTE or 1
local fidx = FONT or 1
local img = image(bounds:unpack())
font(fonts[fidx])
setContext(img)
renderString(NAME, bounds, pal[pidx])
setContext()
return img
end
function draw()
-- This sets a dark background color
background(85, 85, 108, 255)
-- This sets the line thickness
strokeWidth(5)
-- Do your drawing here
sprite(logoImg, WIDTH/2, HEIGHT/2)
end
function renderCircles(count, origin, bounds)
local ls = bounds.x // 5
local us = bounds.x // 2
for i = 1, count do
local rad = math.random(ls, us)
local pos = vec2(math.random(math.floor(bounds.x)),
math.random(math.floor(bounds.y)))
pos = pos + origin
ellipse(pos.x, pos.y, rad)
end
end
function renderString(str, bounds, scheme)
pushStyle()
textAlign(CENTER)
local w,h = textSize(str)
local xoffset = bounds.x/2 - w/3
local ycenter = bounds.y/2
str:gsub(".", function(c)
w = textSize(c)
if c == " " then
w = w * 1.35
else
w = w * 0.85
end
local s = (math.random() * 0.25) + 0.75
local pos = vec2(xoffset, ycenter + math.random(-5, 5))
pushMatrix()
translate(pos:unpack())
scale(s)
rotate(math.random() * 10 - 5)
translate(-pos:unpack())
blendMode(NORMAL)
fill(scheme[4])
text(c, 3, -5)
fill(scheme[3])
text(c, -2, 2)
fill(scheme[1])
text(c, 0, 0)
blendMode(MULTIPLY)
fill(scheme[2])
renderCircles(20, -vec2(w, h)/2, vec2(w, h))
popMatrix()
xoffset = xoffset + w * s
end)
popStyle()
end
--# Palettes
palettes = {}
palettes.winter = {
color(241, 243, 243, 255),
color(169, 219, 223, 255),
color(59, 130, 169, 255),
color(38, 80, 83, 255),
}
palettes.earthy = {
color(83, 218, 43, 255),
color(28, 160, 25, 255),
color(155, 79, 50, 255),
color(63, 40, 40, 255),
}
palettes.fiery = {
color(251, 92, 0, 255),
color(222, 182, 130, 255),
color(116, 43, 31, 255),
color(71, 30, 30, 255),
}
palettes.space = {
color(52, 41, 103, 255),
color(203, 200, 223, 255),
color(148, 139, 205, 255),
color(156, 54, 201, 255),
}
palettes.darkness = {
color(0, 0, 0, 255),
color(42, 85, 72, 255),
color(58, 101, 129, 255),
color(163, 183, 192, 255),
}
palettes.dusty = {
color(255, 255, 255, 255),
color(222, 201, 175, 255),
color(249, 194, 13, 255),
color(57, 69, 30, 255),
}
palettes.sky = {
color(93, 163, 230, 255),
color(216, 222, 230, 255),
color(154, 192, 223, 255),
color(30, 45, 118, 255),
}