New no-game screen (credits go to rude), updated version number and codename

This commit is contained in:
Bart van Strien
2011-06-23 17:08:26 +02:00
parent d9c5892f0a
commit a012a4408e
10 changed files with 1152 additions and 1765 deletions
+227 -434
View File
@@ -362,458 +362,251 @@ end
-----------------------------------------------------------
function love.nogame()
local pig_png =
"iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ\
bWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp\
bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6\
eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz\
NDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo\
dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw\
dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv\
IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS\
ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD\
cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlE\
PSJ4bXAuaWlkOjdCQTYxREYxOUQ5RDExRTBBNjY4RTc1NEVEQTU1MERDIiB4bXBNTTpEb2N1bWVu\
dElEPSJ4bXAuZGlkOjdCQTYxREYyOUQ5RDExRTBBNjY4RTc1NEVEQTU1MERDIj4gPHhtcE1NOkRl\
cml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6N0JBNjFERUY5RDlEMTFFMEE2NjhF\
NzU0RURBNTUwREMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6N0JBNjFERjA5RDlEMTFFMEE2\
NjhFNzU0RURBNTUwREMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1l\
dGE+IDw/eHBhY2tldCBlbmQ9InIiPz6gRGuzAAAYXklEQVR42uydX2hcV37Hz4xkeTdxNrITkpBk\
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\
4xkvbY9d6gAAAABJRU5ErkJggg=="
local heart_png =
"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ\
bWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp\
bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6\
eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz\
NDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo\
dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw\
dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv\
IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS\
ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD\
cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlE\
PSJ4bXAuaWlkOjk3NUYxN0NGOUQ5RDExRTA5MTgyQjc4MkNEQkY5RkI1IiB4bXBNTTpEb2N1bWVu\
dElEPSJ4bXAuZGlkOjk3NUYxN0QwOUQ5RDExRTA5MTgyQjc4MkNEQkY5RkI1Ij4gPHhtcE1NOkRl\
cml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTc1RjE3Q0Q5RDlEMTFFMDkxODJC\
NzgyQ0RCRjlGQjUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTc1RjE3Q0U5RDlEMTFFMDkx\
ODJCNzgyQ0RCRjlGQjUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1l\
dGE+IDw/eHBhY2tldCBlbmQ9InIiPz7MtgYTAAACd0lEQVR42uyajW2CUBDHH8YBWKBJR8AJChvY\
AZriBNYJrBOIE9imA6gTyAZlg9p0ATaw99IzfSEgvI9DlLvk5UUUuPu9/71PvePxKPpsA9FzYwAM\
gAEwAAbAABgAA2AADIABMAAG0EcbmtzkeV7p9Z+nVQhViB8PUNK7j+nBxkF4ZgzVHMp9ydeZfAeU\
d3hPVnZ/3X6HZ7IhUgQATgZQraEEJT+XDi7AwVQzcB+qjQK0zuTzJ0Xg5ACw1aWjfs1tCTg30wh+\
XwH0nOVQIlUNpACw5fcNglclKx3MCYJXIYxOSqiLb2CRm75m8AKD+kJwVba2CF6gP+s2RoGlZvCq\
g/syCHDtFaqxg849hGeNyQDAw2WPHFu20gZVpKbT3OEI90ypgKkDB+9RCScIG8dDfCMFDE0l5shJ\
2epLgPBdMc5bGaoqowAQOPQzFnTmU6XAVViTydctA2g0Bb9lAGnfAewoAaQdDz6H/N9SAth1HMCK\
eiq87XLry5UnKQBcaXUVwurcatNlJzi79ta3AoAqSDoGYKHT+tYbIjjf/nQ8NTa1DIIfFS+SbYgo\
9ojSu7RNTG6yBoCpEF0YwqJqV5g8BQpLT90tMjLpt5kCJyVkqIRDi8HnptInWQsghFHdJoRDm5lK\
n2wxhMOQVMIbcfDynMH6Hc76gDKDfuFF/O0eO1/qQvBRkx+21gdUqCHBlHDZL2Q49Dox8v0ApV9I\
HAUf6c72LpYCJSkRYkoEbQXfyumwAYhYVB95O235TgIogJjWKCKVOW8q+04DKMwi5UnOg/g/dMlx\
imvVd5AAuCXjP0kxAAbAABgAA2AADIABMAAGwAB6ab8CDACjlPepVvE3rwAAAABJRU5ErkJggg=="
local knoll1_base64 = [[
iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAC7mlDQ1BJQ0MgUHJvZmlsZQAA
eAGFVM9rE0EU/jZuqdAiCFprDrJ4kCJJWatoRdQ2/RFiawzbH7ZFkGQzSdZuNuvuJrWliOTi
0SreRe2hB/+AHnrwZC9KhVpFKN6rKGKhFy3xzW5MtqXqwM5+8943731vdt8ADXLSNPWABOQN
x1KiEWlsfEJq/IgAjqIJQTQlVdvsTiQGQYNz+Xvn2HoPgVtWw3v7d7J3rZrStpoHhP1A4Eea
2Sqw7xdxClkSAog836Epx3QI3+PY8uyPOU55eMG1Dys9xFkifEA1Lc5/TbhTzSXTQINIOJT1
cVI+nNeLlNcdB2luZsbIEL1PkKa7zO6rYqGcTvYOkL2d9H5Os94+wiHCCxmtP0a4jZ71jNU/
4mHhpObEhj0cGDX0+GAVtxqp+DXCFF8QTSeiVHHZLg3xmK79VvJKgnCQOMpkYYBzWkhP10xu
+LqHBX0m1xOv4ndWUeF5jxNn3tTd70XaAq8wDh0MGgyaDUhQEEUEYZiwUECGPBoxNLJyPyOr
BhuTezJ1JGq7dGJEsUF7Ntw9t1Gk3Tz+KCJxlEO1CJL8Qf4qr8lP5Xn5y1yw2Fb3lK2bmrry
4DvF5Zm5Gh7X08jjc01efJXUdpNXR5aseXq8muwaP+xXlzHmgjWPxHOw+/EtX5XMlymMFMXj
VfPqS4R1WjE3359sfzs94i7PLrXWc62JizdWm5dn/WpI++6qvJPmVflPXvXx/GfNxGPiKTEm
dornIYmXxS7xkthLqwviYG3HCJ2VhinSbZH6JNVgYJq89S9dP1t4vUZ/DPVRlBnM0lSJ93/C
KmQ0nbkOb/qP28f8F+T3iuefKAIvbODImbptU3HvEKFlpW5zrgIXv9F98LZua6N+OPwEWDyr
Fq1SNZ8gvAEcdod6HugpmNOWls05Uocsn5O66cpiUsxQ20NSUtcl12VLFrOZVWLpdtiZ0x1u
HKE5QvfEp0plk/qv8RGw/bBS+fmsUtl+ThrWgZf6b8C8/UXAeIuJAAAACXBIWXMAAAsTAAAL
EwEAmpwYAAAKEElEQVR4Ae2ba2wU1xXHz+yuqY3BYOMQaHikxjziNpAUMIKkwqVShITUylXV
VqoqRaqECFCpLSJSPyVRP0QiUlsVbEdRP1SK+iGKWtRUSG3VhxIlcbzGEFJk1mvABvxevLbX
3vU+5/bcTU12Z2bxGttnz9rnftm9d+7MOfd/fnvuzJ27hlIKpCxfBVzLd+gycq2AALDMORAA
BIBlrsAyH75kAAFgmSuwzIcvGUAAWOYKLPPhe5by+Ns7mzeYbngeFOwFQ20HMJ7E8dYAqEr8
zCw9eCyI7dcMMG4rU3nN1fEPD276+XRmp6X43VhKK4Gtfb8pc0+VNILhOqIMOAxK1c4vaEYH
CvQ+wnOpfufpf8/vWjzPXhIAeP1NjWDCjzHojYslM2aGCWWod8B0vXVg10sdi2WH+rpFDYC3
u+WYSpnnwIA6YuHeM1PGmYN1J28S211wc0UJQKv/fL1buV7H11hHFlyRuV3w7RVu88yztT8N
zO00Pr2LCoBW/5tPuM3U+XxTfSIVh9B0EMLxEESTYYglohBLRiFpJrIi8CVPGXhcHli5YjWU
ekqhvHQtrCmtAsPI7ynZAGhJlcfPFONNY9EA4O1qOaHAbMmKnENlOhGG+1MDEIyMwHQ87NAj
vyYd/AoEoWrlelhXvhE87pJZTjS6XYZ6af+OU/+apSOrw+wB+LT3t2tj0ZIWnOd/+DDlgpFh
6B/vgXAs9LBuj3QMbwChsrwaNlduh7KSVbNd440DO0+9PFsnLsdZA+DturAP8/AfcM/KV3MJ
NhUdhzvBLpiMTeTqsmDtGoTqVRsRhFpYgVNFroL9Po4MBg43NLySzNWHSztbAD7xXWgwMPgo
1FYnsXSqvxv0w1iE/v7LZbhhQ8VmeGJNDbjdOdbSFLR5VEnj3qeODzr5z6WNJQDt/qZvmQre
QZHWOQnVP34L+sZu4wJfYbezlbhKYNv6p2FtWbWTm5i8jKtJt+vooW0nRhw7MGjM7zaX0FGd
9pUy3kaTtuAnUwm4MdQB98ZuFTz4WpIEPk34hq6gP91Ys8OIq6zPuhOp93RfroVVBvj41pvr
3cnU+yjWLqtgseQ0Bv8yRBM8l+eryh+D7Y/tyfHoaDQf2HnylHVMHOqsMoAnaV50Cv50Ygqu
97exDb4OZDAcgBuDlyGlUg5xVSfb/E0CgIMyD5rauprO4Zx+6EHD/79EExHoHGjHdBu3HmJX
D8XGoWv4Cr6DMu2+KbjQ7mu2jc/ekbaFRQb4pLv5KRz2WevQ9Uqeb7gjPddaj3Gth6bH4Gbg
v47umQbMupDleOIiNrIAwGXC7+1jVNAduMY67dt9/rxlNIyLUmNO74nUbq+/+Xyu8wrRXnAA
cqX+eyig/jUVa+nDVclQ1O4/Phmc1htVuIyroAC8C++6cdXsuFWMSRRuYLzX2lxUdb1GoacC
p5tC3KXEJgsUFICtvhF947cmO7IKekZvsHjOz/Zr7rU4vnnsxzULe1Hfa/VdeNreTt9SUADw
ofkn1iEPh+5BJD5lbS7a+mDoLt7HRGz+u8F4zdZYgIaCAdDmazpu/fXrx6f+iZ4CyLB4JvWY
Pl8pzLah9zR0dP5uS3Yrfa1gABgGvGgd7shkH8STMWtz0deDYdybgC+vrCXp9vzC2kZdz/Eq
a3HdaO1srnW54aDVysDEHWtTVn3nxudg07qv4UaNDTASugk9gXYYGPNn9XnUyuqyKti18TBs
qtqNd+9D0Dd6Ha9/FYG0p++52tA3hIOhXqhZZ32rrb6N1/rZXK+3kP0L8i7A29V0Fl+dnMsc
SCgahE5cSnUqKzwr4bv1r8HjFTtsh+/evwKXPn1jXoHaX9MIh3a8aLt2NBGCv3/2a+hFEOZb
3PgKee/WBtCvkjOLqdTug7tOO68cZXZcpO8FmQLwbd9h63gCkwPWpnT9YcHXHbZUfz0Nh+73
KOW5HT9yDL6+VmlJBXxn76ugM898i34c1FOBtbgN46i1jbJeEADwjxZHrIPMtbHD+svXv0r9
q9efM0VnBt1vrhDowO6r+f7MZdKf+trDoexp5eielxcEgjHcp2gtmAmft7ZR1snvAdp8Lfg3
LSjLHGQkPmnbqauP69ScmfZ1YP7sfSWd7q2ZQfc79sxZuHg5v6er6lWboKHuRKYb8Ldr56Br
8KN02+4tL8A36754gaf7jk7ewQ2nfVnnzKUygTuU7cX4hr2NroU+AxjKRvxEdNQ2Yn1Tljkv
61/8TPB1Z31zpuuZv1Y9HXy50n6fYLs4NtTX/iCd4meOZQZft3129x/wn86mmcPpvnuePPag
/ihf9HZ0/Wo7u6jKtpvn67Lb6Gr0AADssw4vHP0inVuPzdT/euVXths9DcGlq69nTQeT0fsz
p+T92T30wYNffuZJGgJ9bKaEHFL4zLF8P512LRtJ45l8z1/ofuRTgAFqG857WSWKu32sZRLT
5V86XoVtj9fDrWFvzsc93e9Pbb+Er6zfD4HJXtD1fMo/r7fARGQo3bX99sWcp+h+gdBt/ENJ
GHwDH+bsl++BiC0D4JmGq2AZgBwADL71YdhxkUQLqh+/8nkE0/PyXOdmnT0+8v9x1rjpfg8D
ZNYLWDrEHJaFcT/hdks3sirpFNDR8dZKHFlF5uhMfDxKmcnMpiX9Pea80rm5UIMmBSC21rT9
rSZlpgo19oLYTSk77JgVbbpQOUcKgCeZLLcOzHQQxNpnKdWdgDcALK/E6UZMCkBK2Ul3EoRu
+GKJFACRm58CAgC/mJB6JACQys3PmADALyakHgkApHLzMyYA8IsJqUcCAKnc/IwJAPxiQuqR
AEAqNz9jAgC/mJB6JACQys3PmADALyakHgkApHLzMyYA8IsJqUcCAKnc/IwJAPxiQuqRAEAq
Nz9jAgC/mJB6JACQys3PmADALyakHgkApHLzMyYA8IsJqUcCAKnc/IwJAPxiQuqRAEAqNz9j
AgC/mJB6JACQys3PmADALyakHgkApHLzMyYA8IsJqUcCAKnc/IwJAPxiQuqRAEAqNz9jAgC/
mJB6JACQys3PmADALyakHgkApHLzMyYA8IsJqUcCAKnc/IwJAPxiQuqRAEAqNz9jAgC/mJB6
JACQys3PmADALyakHgkApHLzMyYA8IsJqUcCAKnc/IwJAPxiQuqRAEAqNz9jAgC/mJB6JACQ
ys3PmADALyakHgkApHLzMyYA8IsJqUcCAKnc/IwJAPxiQuqRAEAqNz9jAgC/mJB6JACQys3P
mADALyakHgkApHLzMyYA8IsJqUcCAKnc/IwJAPxiQuqRAEAqNz9jAgC/mJB6JACQys3PmADA
LyakHgkApHLzMyYA8IsJqUcCAKnc/IwJAPxiQuqRAEAqNz9jAgC/mJB6JACQys3PmADALyak
HgkApHLzMyYA8IsJqUcCAKnc/IwJAPxiQuqRAEAqNz9jAgC/mJB6JACQys3P2P8AC/kd1/6a
KZcAAAAASUVORK5CYII=]]
local love_base64 = [[
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
kVm7kiJJ6gAAAABJRU5ErkJggg==]]
local planet_base64 = [[
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]]
local star1_base64 = [[
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABSElEQVRYhe2W0W3CMBCGv1S8
NyNU6gKwQdmk3SBMAExAmQB1AtoJmk5QGACJEcIE6YMd9bBQfOekSh/yPzmO7f//z3e2s7qu
GRJ3g7KPAkYB/0HApK+FTpfr78d73bzOEThdrshXwNQyXxWB0B04h6I/BzbAM1D2LsBjAxw9
wTkg/8ToPEVADux8++CFfPm+PIUcINPcBd7tFPhWrDkHyr9IwsZ1DDnczptkAcLNm2L4Diga
ETEhqi1oFvPQ3t8lsMBFDrh9NqgiIMgLJTnAEy5nVrQkqSUHHoClYTw491XbgGgZCvfacjsD
78DWt1uhPQcKXEhjOAAz2RErR8tBtBYkFb8Hk4zKh4Y0RcBry7+9aJd6agd1GYYIbsAmOTOw
RSBZQCBij9uKuYUcOr4HBNkLLuvN6OtJVuFKz4xOW9AHBn+UjgJGAT/m/FW9QwCi3AAAAABJ
RU5ErkJggg==]]
local function create_star(scale, speed)
return {
x0 = -100,
x = 1000,
y = math.random() * 600,
r0 = math.random() * math.pi * 2,
rv = math.random() * math.pi * 4,
t = math.random(),
scale = scale,
speed = speed,
}
end
local function create_star_layer(num_stars, scale, speed)
local layer = {}
for i = 1,num_stars do
table.insert(layer, create_star(scale, speed))
local hearts = {}
local rings = {}
local cx = 400
local cy = 300
local pig
local heart_image
local function add_heart_ring(radius, number, speed)
local step = math.pi*2/number
for i = 1,number do
local heart = {
radius = radius,
position = step*i,
speed = speed,
opacity = radius/450
}
table.insert(hearts, heart)
end
return layer
table.insert(rings, radius)
end
local function update_star(dt, s)
s.t = s.t + 0.1 * s.speed * dt
while s.t > 1 do
s.t = s.t - 1
local function update_hearts(dt)
for i,v in ipairs(hearts) do
v.position = v.position + v.speed*dt*0.6
end
end
local function draw_star(s)
local x = s.x0 + s.x * s.t
local y = s.y
local r = s.r0 + s.rv * s.t
local sx = s.scale
local sy = s.scale
love.graphics.setColor(255*s.scale, 255*s.scale, 255, 255*s.scale)
love.graphics.draw(star1, x, y, r, sx, sy, 16, 16)
end
local function update_star_layer(dt, layer)
for k,v in ipairs(layer) do
update_star(dt, v)
local function draw_hearts()
for i,v in ipairs(hearts) do
local x = math.cos(v.position) * v.radius + cx
local y = math.sin(v.position) * v.radius + cy
love.graphics.setColor(255, 255, 255, v.opacity*255)
love.graphics.draw(heart_image, x, y, v.position+0.4, 1, 1, 32, 32)
end
end
local function draw_star_layer(layer)
for k,v in ipairs(layer) do
draw_star(v)
end
local function draw_pig(p)
love.graphics.setColor(255, 255, 255, 255)
love.graphics.draw(p.img, p.x, p.y, 0, 1, 1, 128, 128)
end
local function create_knoll(p)
return {
p = p,
t0 = math.random() * 10,
t = 0
}
local function loadimage(file, name)
return love.graphics.newImage(love.image.newImageData(love.filesystem.newFileData(file, name:gsub("_", "."), "base64")))
end
local function create_knolls(n)
local t = {}
for i = 1,n do
table.insert(t, create_knoll((math.pi * 2 / n) * i))
end
return t
end
local function update_knoll(dt, k)
k.t = k.t + dt
end
local function draw_knoll(k)
local x = planet.x
local y = planet.y
local a = k.p + k.t
local h = 225 + 20 * (1 + math.sin(k.t0 + k.t))
love.graphics.draw(knoll1, x, y, a, .75, .75, 64, h)
end
local function update_logo(dt)
logo.r = logo.r + dt
if logo.r > 360 then logo.r = logo.r - 360 end
logo.y = planet.y
end
local function update_planet(dt)
planet.t = planet.t + dt
planet.y = 300 + math.sin(planet.t)*30
end
local function load_image_b64(b64, filename)
local file_data = love.filesystem.newFileData(b64, filename, "base64")
local image_data = love.image.newImageData(file_data)
return love.graphics.newImage(image_data)
end
function love.load()
planet = {
x = 400,
y = 300,
w = 128,
h = 128,
t = 0,
img = load_image_b64(planet_base64, "planet.png")
}
logo = {
x = 400,
y = 300,
w = 256,
h = 64,
r = 0,
img = load_image_b64(love_base64, "love.png")
}
love.graphics.setBackgroundColor(18, 18, 18)
star1 = load_image_b64(star1_base64, "star1.png")
knoll1 = load_image_b64(knoll1_base64, "knoll1.png")
layers = {}
knolls = create_knolls(10)
-- Add star layers.
table.insert(layers, create_star_layer(100, 0.5, 0.5))
table.insert(layers, create_star_layer(70, 0.7, 0.7))
table.insert(layers, create_star_layer(50, 1, 1))
math.randomseed(os.time())
pig = {
x = cx,
y = cy,
img = loadimage(pig_png, "pig.png")
}
heart_image = loadimage(heart_png, "heart.png")
add_heart_ring(100, 10, 2.4)
add_heart_ring(150, 20, 2.2)
add_heart_ring(200, 25, 2.0)
add_heart_ring(250, 35, 1.8)
add_heart_ring(300, 40, 1.6)
add_heart_ring(350, 50, 1.4)
add_heart_ring(400, 60, 1.2)
add_heart_ring(450, 70, 1)
end
function love.draw()
for k, v in ipairs(layers) do
draw_star_layer(v)
end
for k, v in ipairs(knolls) do
draw_knoll(v)
end
love.graphics.draw(planet.img, planet.x, planet.y, 0, 1, 1, planet.w, planet.h)
love.graphics.draw(logo.img, logo.x, logo.y, logo.r, 1, 1, logo.w/2, logo.h/2)
end
function love.update(dt)
for k, v in ipairs(layers) do
update_star_layer(dt, v)
update_hearts(dt)
end
function love.draw()
love.graphics.setBackgroundColor(254, 224, 238)
draw_hearts()
draw_pig(pig)
end
function love.keyreleased(key)
if key == "escape" then
love.event.push("q")
end
for k, v in ipairs(knolls) do
update_knoll(dt, v)
end
update_planet(dt)
update_logo(dt)
end
function love.conf(t)
t.title = "LOVE " .. love._version_string .. " (" .. love._version_codename .. ")"
t.modules.audio = false
t.modules.sound = false
t.modules.physics = false
t.modules.joystick = false
end
t.title = "LOVE " .. love._version_string .. " (" .. love._version_codename .. ")"
t.modules.audio = false
t.modules.sound = false
t.modules.physics = false
t.modules.joystick = false
end
end
-----------------------------------------------------------