Compare commits

..

1 Enmetoj

Author SHA1 Message Date
Alberto Flores 20344f649a FIXED: missing bin directory 2021-01-07 11:08:56 -06:00
22 changed files with 175 additions and 1590 deletions

View File

@ -18,6 +18,7 @@ endif
rm -rf bin/monkune-win32
test: love
mkdir -p bin
love bin/monkune.love
clean:

View File

@ -1,33 +0,0 @@
# Monkune
Monkune is a platform-ish game, where you stack monkeys in order to get bananas.
![Screenshot of the game.](art/screenshot.png)
Made for [Librejam 2020-01](https://bytecrab.org/librejam/202101.html), with the
theme of ”cooperation.” It also bears the honor of being the winner… by default,
due to lack of competitors. :^)
## Running
Monkune should run just fine on any operating system with
[LÖVE](https://love2d.org) — including GNU/Linux, BSD, and Haiku.
Make sure LÖVE (`love2d`) is installed with your package manager, and then:
`$ make test`
### Building
The Makefile can make both the `monkune.love` archive and the Windows executable.
Make sure the `./bin/` directory exists, and that LÖVE is installed with your
package manager.
```
$ make win32
$ make love
```
## Meta
Author: Jaidyn Ann <jadedctrl@posteo.at>
Code is under the GPLv3 (see COPYING.txt)
Art assets all under the CC-BY 3.0.

30
README.txt Normal file
View File

@ -0,0 +1,30 @@
MONKUNE
================================================================================
is a puzzle-ish game made for Librejam 2020-01.
INSTALL
--------------------------------------------------
LINUX/UNIX/HAIKU
--------------------
Download and open the "monkune.love" archive with the `love2d` command.
WINDOWS
--------------------
Download and extract the "monkune-win32.zip" file.
From there, run "Monkune.exe".
"BUILD"
--------------------------------------------------
The makefile can make both the "monkune.love" archive and the windows
executable. Make sure the `./bin/` directory exists, and that love2d
is installed with your package manager.
BORING STUFF
--------------------------------------------------
Jaidyn Ann <jadedctrl@teknik.io>
Code under GPLv3 (see COPYING.txt)
Art under varying (libre; see ./art/COPYING.txt)
Libraries under varying (libre; see ./lib/COPYING.txt)

Binary file not shown.

View File

@ -1,5 +0,0 @@
https://opengameart.org/content/quirky-runner
Quirky Runner
CC-BY 3.0

Binary file not shown.

View File

@ -1,4 +0,0 @@
https://opengameart.org/sites/default/files/the_life_and_times_of_inky_blinky_pinky_and_clyde_1.mp3
The Life and Times of Inky, Blinky, Pinky and Clyde
CC-BY 3.0

Binary file not shown.

View File

@ -1,5 +0,0 @@
https://opengameart.org/content/windle-pixels-8-bit-circus
Windle Pixel's 8-Bit Circus
CC-BY 3.0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

BIN
bin/monkune.love Normal file

Binary file not shown.

560
main.lua
View File

@ -4,9 +4,9 @@ wind = require "lib/windfield"
stalker = require "lib/STALKER-X"
downwall = 1; rightwall = 2; leftwall = 3
mainmenu = 0; game = 1; gameover = 2; pause = 3; youwin = 4
mainmenu = 0; game = 1; gameover = 2; pause = 3
world = wind.newWorld(0, 40, true)
world = wind.newWorld(0, 400, true)
-- GAME STATES
--------------------------------------------------------------------------------
@ -20,9 +20,8 @@ function love.load ()
a_ttf = love.graphics.newFont("art/font/alagard.ttf", nil, "none")
r_ttf = love.graphics.newFont("art/font/romulus.ttf", nil, "none")
camera = stalker()
mainmenu_load()
-- mainmenu_load()
game_load()
end
@ -30,28 +29,17 @@ function love.update(dt)
if(mode == mainmenu) then mainmenu_update(dt)
elseif(mode == game) then game_update(dt)
elseif(mode == gameover) then gameover_update(dt)
elseif(mode == youwin) then youwin_update(dt)
elseif(mode == pause) then pause_update(dt)
end
camera:update(dt)
end
function love.draw()
camera:attach()
function love.draw ()
if(mode == mainmenu) then mainmenu_draw()
elseif(mode == game) then game_draw()
elseif(mode == gameover) then gameover_draw()
elseif(mode == youwin) then youwin_draw()
elseif(mode == pause) then pause_draw()
end
camera:detach()
camera:draw()
end
function love.resize()
camera = stalker()
end
@ -59,7 +47,6 @@ function love.keypressed(key)
if(mode == mainmenu) then mainmenu_keypressed(key)
elseif(mode == game) then game_keypressed(key)
elseif(mode == gameover) then gameover_keypressed(key)
elseif(mode == youwin) then youwin_keypressed(key)
elseif(mode == pause) then pause_keypressed(key)
end
end
@ -69,7 +56,6 @@ function love.keyreleased (key)
if(mode == mainmenu) then mainmenu_keyreleased(key)
elseif(mode == game) then game_keyreleased(key)
elseif(mode == gameover) then gameover_keyreleased(key)
elseif(mode == youwin) then youwin_keyreleased(key)
elseif(mode == pause) then pause_keyreleased(key)
end
end
@ -80,126 +66,44 @@ end
function mainmenu_load ()
mode = mainmenu
selection = 1
if(bgm) then
bgm:stop()
end
bgm = love.audio.newSource("art/music/default.mp3", "static")
bgm:play()
bgm:setLooping(true)
-- if(bgm) then
-- bgm:stop()
-- end
-- bgm = love.audio.newSource("art/music/menu.ogg", "static")
-- bgm:play()
-- bgm:setLooping(true)
-- bgm:setVolume(1.5)
frontMenu = nil
mapMenu = nil
frontMenu_init()
camera = stalker()
map = Map:new("maps/sys/menu.lua")
player.following = true
--
-- frontMenu = Menu:new(100, 100, 30, 50, 2,
-- { { love.graphics.newText(a_ttf, "get banana!"),
-- function () game_load() end },
-- { love.graphics.newText(a_ttf, "get help!"),
-- function () helpScreen = true end },
-- { love.graphics.newText(a_ttf, "get outta dodge!"),
-- function () love.event.quit(0) end } })
end
function mainmenu_update(dt)
if not (mapMenu == nil) then return; end
world:update(dt)
player:update(dt)
map:update(dt)
-- make player monkey move randomly
local num = math.random(100)
local dirs = player.directionals
if (num == 1) then
dirs['left'] = 1
dirs['right'] = 0
elseif (num == 2) then
dirs['right'] = 1
dirs['left'] = 0
elseif (num == 3) then
dirs['up'] = 1
end
end
function mainmenu_draw ()
if (mapMenu == nil) then
map:draw()
player:draw()
frontMenu:draw()
else
mapMenu:draw()
end
end
function mainmenu_keypressed(key)
if (mapMenu == nil) then
frontMenu:keypressed(key)
else
mapMenu:keypressed(key)
end
end
function mainmenu_keyreleased(key)
if (mapMenu == nil) then
frontMenu:keyreleased(key)
else
mapMenu:keyreleased(key)
end
end
function frontMenu_init()
frontMenu = Menu:new(100, 100, 30, 50, 3, {
{love.graphics.newText(a_ttf, "get banana"),
function () mapMenu_init() end},
-- camera:fade(.2, {0,0,0,1}, function() mapMenu_init() end)
-- 2, {0,0,0,1}, function() mapMenu_init() end)
-- end},
{love.graphics.newText(a_ttf, "get outta dodge"),
function () love.event.quit(0) end }})
mapMenu = nil
end
function mapMenu_init(directory)
directory = directory or "maps"
local menuEntries = {[1] = {love.graphics.newText(a_ttf, "../"),
function () mainmenu_load() end}}
-- if (directory == "maps") then mainmenu_load()
local indice = 2
local files = love.filesystem.getDirectoryItems(directory)
for k,file in pairs(files) do
file = directory .. "/" .. file
local filetype = love.filesystem.getInfo(file).type
local fileSplit = split(file, ".")
local fileExt = fileSplit[2] or ""
if (filetype == "directory") then
menuEntries[indice] = {love.graphics.newText(a_ttf, file .. "/"),
function() mapMenu_init(file) end}
indice = indice + 1
elseif (filetype == "file" and fileExt == "lua") then
menuEntries[indice] = {love.graphics.newText(a_ttf, fileSplit[1]),
function() game_load(file) end}
indice = indice + 1
end
end
mapMenu = Menu:new(100, 100, 30, 50, 3, menuEntries)
frontMenu = nil
end
-- PAUSE STATE
----------------------------------------
function pause_load()
if(bgm) then
bgm:stop()
end
mode = pause
function pause_load ()
end
@ -208,23 +112,10 @@ end
function pause_draw ()
game_draw()
camera:detach()
love.graphics.draw(love.graphics.newText(r_ttf,
"paused\n[enter to continue]\n[escape to exit]"), 200, 200, 0, 3, 3)
camera:attach()
end
function pause_keypressed(key)
if (key == "return") then
if(bgm) then
bgm:play()
end
mode = game
elseif (key == "escape") then
mainmenu_load()
end
end
@ -235,7 +126,6 @@ end
-- GAMEOVER STATE
----------------------------------------
function gameover_load ()
mode = gameover
end
@ -245,17 +135,11 @@ end
function gameover_draw ()
game_draw()
camera:detach()
love.graphics.draw(love.graphics.newText(r_ttf,
"nice try!\n[enter to restart]\n[escape to exit]"), 200, 200, 0, 3, 3)
camera:attach()
end
function gameover_keypressed(key)
if (key == "return" or key == "space") then
camera:fade(.2, {0,0,0,1}, function() game_load() end)
elseif (key == "escape") then
if(key == "return" or key == "escape") then
mainmenu_load()
end
end
@ -266,63 +150,14 @@ end
-- YOUWIN STATE
----------------------------------------
function youwin_load ()
mode = youwin
if(bgm) then
bgm:stop()
end
bgm = love.audio.newSource("art/music/win.mp3", "static")
bgm:play()
bgm:setLooping(true)
camera = stalker()
map = Map:new("maps/sys/win.lua")
end
function youwin_update(dt)
world:update(dt)
player:update(dt)
end
function youwin_draw ()
map:draw()
player:draw()
camera:detach()
love.graphics.draw(love.graphics.newText(r_ttf,
"monkey happy!\nhit enter!"), 200, 200, 0, 3, 3)
camera:attach()
end
function youwin_keypressed(key)
if (key == "return" or key == "space" or key == "escape") then
mainmenu_load()
end
end
function youwin_keyreleased(key)
end
-- GAME STATE
----------------------------------------
function game_load(mapfile)
function game_load ()
mode = game
mapfile = mapfile or map.filepath
map = Map:new(mapfile)
camera:fade(.2, {0,0,0,0})
camera:setFollowLerp(0.1)
map = Map:new("maps/tutorial/1.lua")
camera = stalker()
camera:setFollowStyle('PLATFORMER')
camera:setFollowLerp(0.1)
-- bgm:stop()
-- bgm = love.audio.newSource("art/music/game.ogg", "static")
@ -336,13 +171,20 @@ function game_update(dt)
map:update(dt)
local x, y = player.monks[player.current].body:getPosition()
camera:update(dt)
camera:follow(x, y)
end
function game_draw ()
camera:attach()
map:draw()
player:draw()
banana:draw()
camera:detach()
camera:draw()
end
@ -370,12 +212,9 @@ function game_keypressed(key)
player.following = false
elseif (key == "=" and camera.scale < 10) then
camera.scale = camera.scale + .5
elseif (key == "-" and camera.scale > .5) then
camera.scale = camera.scale - .5
elseif (key == "escape") then
pause_load()
camera.scale = camera.scale + 1
elseif (key == "-" and camera.scale > 1) then
camera.scale = camera.scale - 1
end
end
@ -405,10 +244,10 @@ end
-- MONK player class
----------------------------------------
Monk = class('Monk')
world:addCollisionClass('Monk')
function Monk:initialize(x, y, count)
self.monks = {}
self.frozen = {}
self.onGround = {}
self.current = 0
self.last = count - 1
@ -423,10 +262,9 @@ function Monk:initialize(x, y, count)
for i=0,(count-1) do
self.monks[i] = world:newRectangleCollider(x - (i * 20), y, 16, 16);
self.monks[i]:setCollisionClass('monk')
self.monks[i]:setCollisionClass('Monk')
self.monks[i]:setObject(self)
self.monkSprites[i] = 'default'
self.frozen[i] = false
local collision = self:makeCollisionCallback(i)
self.monks[i]:setPreSolve(collision)
@ -446,22 +284,10 @@ function Monk:update(dt)
for i=0,(self.last) do
if (self.onGround[i] > 0) then self.monkSprites[i] = 'default'
elseif (self.frozen[i] == true) then self.monkSprites[i] = 'frozen'
else self.monkSprites[i] = 'jump'
end
end
local allFrozen = true
for k,frozen in pairs(self.frozen) do
if (frozen == true) then
self.monks[k]:setType('static')
self.monks[k]:setCollisionClass('platform')
elseif (frozen == false) then
allFrozen = false
end
end
if (allFrozen == true) then gameover_load(); end
-- cleanup
for i=0,(self.last) do
self.onGround[i] = 0
@ -472,13 +298,22 @@ end
function Monk:draw ()
for i=0,self.last do
-- live monkeys
for i=self.current,self.last do
local monk = self.monks[i]
local x,y = monk.body:getWorldPoints(monk.shape:getPoints())
love.graphics.draw(self.sprites[self.monkSprites[i]], x, y,
monk.body:getAngle(), 1, 1)
end
-- frozen monkeys
for i=0,self.current-1 do
local monk = self.monks[i]
local x,y = monk.body:getWorldPoints(monk.shape:getPoints())
love.graphics.draw(self.sprites['frozen'], x, y, monk.body:getAngle(),
1, 1)
end
end
@ -525,9 +360,9 @@ function Monk:follow ()
local mx, my = thisMonk.body:getPosition()
local dx, dy = thisMonk:getLinearVelocity()
if (mx < (x + 30) and math.random(20) == 1) then
if (mx < (x + 30)) then
thisMonk:setLinearVelocity(newVel, dy)
elseif ((x - 30) < mx and math.random(10) == 1) then
elseif ((x - 30) < mx) then
thisMonk:setLinearVelocity(-newVel, dy)
end
@ -553,18 +388,12 @@ end
-- freeze the player monkey in place, making it a platform
function Monk:freeze (indice)
indice = indice or self.current
local monk = self.monks[indice]
self.frozen[indice] = true
if (indice == self.current) then
for i=0,self.last do
if (self.frozen[self.last - i] == false) then
self:switch(self.last - i)
i = self.last
end
end
function Monk:freeze ()
if not (self.current > self.last) then
local monk = self.monks[self.current]
monk:setType('static')
monk:setCollisionClass('Platform')
self:switch(self.current + 1)
end
end
@ -572,6 +401,9 @@ end
-- switch from current monkey to next
function Monk:switch (index)
self.current = index
if (index > self.last) then
gameover_load()
end
end
@ -580,8 +412,8 @@ function Monk:makeCollisionCallback (i)
local function collision(collision1, collision2, contact)
local nx, ny = contact:getNormal( )
if (collision1.collision_class == "monk"
and collision2.collision_class == "platform")
if collision1.collision_class == "Monk"
and collision2.collision_class == "Platform"
then
if (math.abs(ny) == 1) then
self.onGround[i] = downwall
@ -592,22 +424,6 @@ function Monk:makeCollisionCallback (i)
if not (self.onGround[i] == 0) then return; end
self.onGround[i] = rightwall
end
elseif (collision1.collision_class == "monk"
and collision2.collision_class == "banana")
then
youwin_load()
elseif (collision1.collision_class == "monk"
and collision2.collision_class == "button")
then
map.buttonHit = true
elseif (collision1.collision_class == "monk"
and collision2.collision_class == "frozenButton"
and self.frozen[i] == true)
then
map.frozenHit = true
end
end
return collision
@ -617,16 +433,16 @@ end
-- BANNANA owo (win condition obj)
----------------------------------------
Banana = class('Banana')
Bananna = class('Bananna')
world:addCollisionClass('Bananna')
function Banana:initialize(x, y)
function Bananna:initialize(x, y)
self.sprite = love.graphics.newImage("art/sprites/banana.png")
self.collider = world:newRectangleCollider(x, y, 16, 16);
self.collider:setCollisionClass('banana')
end
function Banana:draw()
function Bananna:draw()
local col = self.collider
local x,y = col.body:getWorldPoints(col.shape:getPoints())
love.graphics.draw(self.sprite, x, y, col.body:getAngle(), 1, 1)
@ -637,179 +453,83 @@ end
-- MAP used to store map data (ofc)
----------------------------------------
Map = class('Map')
world:addCollisionClass('Platform')
function Map:initialize(filepath)
self.filepath = filepath
self.ground = {}
self.platforms = {}
self.tables = {}
self.objects = {}
self.outOfBounds = "die"
self.spawn = {['x'] = 100, ['y'] = 100}
self.respawn = {['x'] = 100, ['y'] = 100}
self.buttonHit = false
self.frozenHit = false
self.object_c = 0
local maptable = dofile(filepath)
self.width,self.height = maptable.width,maptable.height
self.tileWidth,self.tileHeight = maptable.tilewidth,maptable.tileheight
love.graphics.setBackgroundColor(146/255, 187/255, 203/255)
local monkCount = 3
local monkX,monkY = 100,100
world:destroy()
world = wind.newWorld(0, 400, true)
world:addCollisionClass('monk')
world:addCollisionClass('banana')
world:addCollisionClass('platform')
world:addCollisionClass('button')
world:addCollisionClass('frozenButton')
world:addCollisionClass('toyButton')
world:addCollisionClass('door')
world:addCollisionClass('frozenDoor')
world:addCollisionClass('toyDoor')
world:addCollisionClass('toy')
local bananaX,bananaY = 200,200
for n,layer in pairs(maptable.layers) do
if not (layer.type == "objectgroup") then break; end
for nn,object in pairs(layer.objects) do
if (object.shape == "rectangle") then
self.tables[object.id] =
self.object_c = self.object_c + 1
local o_c = self.object_c
self.objects[o_c] =
world:newRectangleCollider(object.x, object.y,
object.width, object.height)
self.tables[object.id]:setType('static')
self.tables[object.id]:setCollisionClass('platform')
elseif (object.shape == "polygon") then
local ox,oy = object.x,object.y
local vertices = {}
local vi = 1
for kk,verticePair in pairs(object.polygon) do
vertices[vi] = verticePair['x'] + ox
vertices[vi+1] = verticePair['y'] + oy
vi = vi + 2
end
self.tables[object.id] =
world:newPolygonCollider(vertices)
self.tables[object.id]:setType('static')
self.tables[object.id]:setCollisionClass('platform')
self.objects[o_c]:setType('static')
self.objects[o_c]:setCollisionClass('Platform')
elseif (object.shape == "text") then
self.tables[object.id] = object
self.object_c = self.object_c + 1
self.objects[self.object_c] = object
elseif (object.shape == "point" and object.type == "spawn") then
if not (object.properties == nil
or object.properties["count"] == nil) then
and object.properties["count"] == nil) then
monkCount = object.properties["count"]
end
self.spawn['x'],self.spawn['y'] = object.x,object.y
elseif (object.shape == "point" and object.type == "respawn") then
self.respawn['x'],self.respawn['y'] = object.x,object.y
self.outOfBounds = "teleport"
monkX,monkY = object.x,object.y
elseif (object.shape == "point" and object.type == "banana") then
self.objects[object.id] = Banana:new(object.x, object.y)
end
local thisTable = self.tables[object.id]
if (object.type == "toy") then
thisTable:setCollisionClass('toy')
thisTable:setType('kinematic')
end
if (object.type == "door" or object.type == "frozenDoor"
or object.type == "toyDoor")
then
thisTable.normPos = {}
thisTable.normPos['x'],thisTable.normPos['y'] =
thisTable.body:getPosition()
end
if (object.type == "door") then
thisTable:setCollisionClass('door')
elseif (object.type == "frozenDoor") then
thisTable:setCollisionClass('frozenDoor')
elseif (object.type == "toyDoor") then
thisTable:setCollisionClass('toyDoor')
elseif (object.type == "button") then
thisTable:setCollisionClass('button')
elseif (object.type == "frozenButton") then
thisTable:setCollisionClass('frozenButton')
elseif (object.type == "toyButton") then
thisTable:setCollisionClass('toyButton')
bananaX,bananaY = object.x,object.y
end
end
end
player = Monk:new(self.spawn['x'], self.spawn['y'], monkCount)
player = Monk:new(monkX, monkY, monkCount)
banana = Bananna:new(bananaX, bananaY)
end
function Map:update(dt)
local heightMax = self.height * self.tileHeight + 100
local widthMax = self.width * self.tileWidth + 200
-- enforce borders
for i=0,player.last do
local x,y = player.monks[i].body:getPosition()
if ((math.abs(x) > widthMax or y > heightMax)
and self.outOfBounds == "die") then
player:freeze(i)
elseif ((math.abs(x) > widthMax or y > heightMax)
and self.outOfBounds == "teleport") then
player.monks[i].body:setPosition(
self.respawn['x'], self.respawn['y'])
end
end
-- unlock or reset doors
for k,table in pairs(self.tables) do
if (table.collision_class == "door" and self.buttonHit == true) then
table.body:setPosition(-1000, -1000)
elseif (table.collision_class == "door") then
table.body:setPosition(table.normPos['x'], table.normPos['y'])
elseif (table.collision_class == "frozenDoor"
and self.frozenHit == true)
then
table.body:setPosition(-1000, -1000)
elseif (table.collision_clas == "frozenDoor") then
table.body:setPosition(table.normPos['x'], table.normPos['y'])
elseif (table.collision_class == "toyDoor"
and self.toyHit == true)
then
table.body:setPosition(-1000, -1000)
elseif (table.collision_class == "toyDoor") then
table.body:setPosition(table.normPos['x'], table.normPos['y'])
end
end
self.toyHit = false
end
function Map:draw()
for k,table in pairs(self.tables) do
if (table.type == "Rectangle" or table.type == "Polygon") then
love.graphics.polygon('fill',
table.body:getWorldPoints(table.shape:getPoints()))
elseif (table.shape == "text") then
love.graphics.draw(love.graphics.newText(a_ttf, table.text),
table.x, table.y, 0, 2, 2)
end
end
for k,object in pairs(self.objects) do
object:draw()
if (object.type == "Rectangle") then
love.graphics.polygon('fill',
object.body:getWorldPoints(object.shape:getPoints()))
elseif (object.shape == "text") then
love.graphics.draw(love.graphics.newText(a_ttf, object.text),
object.x, object.y)
end
end
end
-- TEXTBOX gods forgive me
----------------------------------------
Textbox = class("Textbox")
function Textbox:initialize(x, y, string)
self.x,self.y = x,y
self.text = love.graphics.newText(a_ttf, string)
end
function Textbox:draw()
love.graphics.draw(self.text, self.x, self.y)
end
@ -819,79 +539,57 @@ end
Menu = class("Menu")
function Menu:initialize(x, y, offset_x, offset_y, scale, menuItems)
self.x,self.y = x,y
self.offset_x,self.offset_y = offset_x,offset_y
self.x = x; self.y = y
self.offset_x = offset_x; self.offset_y = offset_y
self.scale = scale
self.options = menuItems
self.selected = 1
self.scale = scale
self.keys = {}
self.keys['up'] = false
self.keys['down'] = false
self.keys['enter'] = false
self.ttf = r_ttf
self.enter = false
self.up = false
self.down = false
end
function Menu:draw ()
for i=1,table.maxn(self.options) do
local this_y = self.y + (self.offset_y * i)
love.graphics.draw(self.options[i][1],
self.x, this_y, 0, self.scale, self.scale)
if (i == self.selected) then
love.graphics.draw(love.graphics.newText(self.ttf, ">>"),
self.x - self.offset_x, this_y, 0, self.scale, self.scale)
end
end
-- love.graphics.draw(love.graphics.newText(a_ttf, ">>"),
-- self.x - self.offset_x, this_y, 0,
-- self.scale, self.scale)
love.graphics.draw(love.graphics.newText(a_ttf, ">>"),
self.x - self.offset_x, this_y, 0,
self.scale, self.scale)
end
function Menu:keypressed(key)
maxn = table.maxn(self.options)
if (key == "return" or key == "space") then
self.keys['enter'] = true
if(key == "return" and self.enter == false) then
self.enter = true
if(self.options[self.selected][2]) then
self.options[self.selected][2]()
end
elseif (key == "up" and self.selected > 1
and self.keys['up'] == false) then
self.keys['up'] = true
elseif(key == "up" and self.selected > 1 and self.up == false) then
self.up = true
self.selected = self.selected - 1
elseif (key == "up" and self.keys['up'] == false) then
self.keys['up'] = true
elseif(key == "up" and self.up == false) then
self.up = true
self.selected = maxn
elseif (key == "down" and self.selected < maxn
and self.keys['down'] == false) then
self.keys['down'] = true
elseif(key == "down" and self.selected < maxn and self.down == false) then
self.down = true
self.selected = self.selected + 1
elseif (key == "down" and self.keys['down'] == false) then
self.keys['down'] = true
elseif(key == "down" and self.down == false) then
self.down = true
self.selected = 1
end
end
function Menu:keyreleased(key)
if (key == "return" or key == "space") then
self.keys['enter'] = false
elseif (key == "up") then
self.keys['up'] = false
elseif (key == "down") then
self.keys['down'] = false
if(key == "return") then
self.enter = false
elseif(key == "up") then
self.up = false
elseif(key == "down") then
self.down = false
end
end
function split(inputString, seperator)
local newString = {}
for stringBit in string.gmatch(inputString, "([^"..seperator.."]+)") do
table.insert(newString, stringBit)
end
return newString
end

View File

@ -1,262 +0,0 @@
return {
version = "1.4",
luaversion = "5.1",
tiledversion = "1.4.3",
orientation = "orthogonal",
renderorder = "right-down",
width = 50,
height = 50,
tilewidth = 16,
tileheight = 16,
nextlayerid = 7,
nextobjectid = 23,
properties = {},
tilesets = {},
layers = {
{
type = "objectgroup",
draworder = "topdown",
id = 2,
name = "platforms",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 5,
name = "",
type = "",
shape = "rectangle",
x = 779.288,
y = 116.365,
width = 20,
height = 145.333,
rotation = 0,
visible = true,
properties = {}
},
{
id = 18,
name = "",
type = "",
shape = "rectangle",
x = 16.2311,
y = 735.171,
width = 782.91,
height = 63.9694,
rotation = 0,
visible = true,
properties = {}
},
{
id = 19,
name = "",
type = "",
shape = "rectangle",
x = 112.663,
y = 258.742,
width = 683.614,
height = 479.293,
rotation = 0,
visible = true,
properties = {}
},
{
id = 20,
name = "",
type = "",
shape = "polygon",
x = 301.707,
y = 257.787,
width = 0,
height = 0,
rotation = 0,
visible = true,
polygon = {
{ x = 0, y = 0 },
{ x = -188.089, y = -98.3411 },
{ x = -189.044, y = 0.954768 }
},
properties = {}
},
{
id = 21,
name = "",
type = "",
shape = "rectangle",
x = 374.269,
y = 118.391,
width = 423.917,
height = 21.9597,
rotation = 0,
visible = true,
properties = {}
}
}
},
{
type = "objectgroup",
draworder = "topdown",
id = 4,
name = "special",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 9,
name = "",
type = "spawn",
shape = "point",
x = 50.0004,
y = 727.578,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {
["count"] = 2
}
},
{
id = 12,
name = "",
type = "banana",
shape = "point",
x = 725.869,
y = 252.003,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
}
}
},
{
type = "objectgroup",
draworder = "topdown",
id = 6,
name = "signs",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 17,
name = "",
type = "",
shape = "text",
x = 407.506,
y = 84.5049,
width = 82.0781,
height = 17,
rotation = 0,
visible = true,
text = "frozen button + frozen monkey",
wrap = true,
properties = {}
},
{
id = 22,
name = "",
type = "",
shape = "text",
x = 17.944,
y = 604.416,
width = 80.5938,
height = 19,
rotation = 0,
visible = true,
text = "climb!",
wrap = true,
properties = {}
}
}
},
{
type = "objectgroup",
draworder = "topdown",
id = 3,
name = "doors",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 7,
name = "",
type = "door",
shape = "rectangle",
x = 376.211,
y = 132.398,
width = 20,
height = 128,
rotation = 0,
visible = true,
properties = {}
},
{
id = 8,
name = "",
type = "frozenDoor",
shape = "rectangle",
x = 625.287,
y = 128.201,
width = 17.3333,
height = 129.333,
rotation = 0,
visible = true,
properties = {}
}
}
},
{
type = "objectgroup",
draworder = "topdown",
id = 5,
name = "buttons",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 10,
name = "",
type = "button",
shape = "rectangle",
x = 304.323,
y = 247.822,
width = 42.6667,
height = 9.33333,
rotation = 0,
visible = true,
properties = {}
},
{
id = 11,
name = "",
type = "frozenButton",
shape = "rectangle",
x = 539.767,
y = 249.732,
width = 58.6667,
height = 9.33333,
rotation = 0,
visible = true,
properties = {}
}
}
}
}
}

View File

@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="50" height="50" tilewidth="16" tileheight="16" infinite="0" nextlayerid="7" nextobjectid="23">
<editorsettings>
<export target="2.lua" format="lua"/>
</editorsettings>
<objectgroup id="2" name="platforms">
<object id="5" x="779.288" y="116.365" width="20" height="145.333"/>
<object id="18" x="16.2311" y="735.171" width="782.91" height="63.9694"/>
<object id="19" x="112.663" y="258.742" width="683.614" height="479.293"/>
<object id="20" x="301.707" y="257.787">
<polygon points="0,0 -188.089,-98.3411 -189.044,0.954768"/>
</object>
<object id="21" x="374.269" y="118.391" width="423.917" height="21.9597"/>
</objectgroup>
<objectgroup id="4" name="special">
<object id="9" type="spawn" x="50.0004" y="727.578">
<properties>
<property name="count" type="int" value="2"/>
</properties>
<point/>
</object>
<object id="12" type="banana" x="725.869" y="252.003">
<point/>
</object>
</objectgroup>
<objectgroup id="6" name="signs">
<object id="17" x="407.506" y="84.5049" width="82.0781" height="17">
<text wrap="1">frozen button + frozen monkey</text>
</object>
<object id="22" x="17.944" y="604.416" width="80.5938" height="19">
<text wrap="1">climb!</text>
</object>
</objectgroup>
<objectgroup id="3" name="doors">
<object id="7" type="door" x="376.211" y="132.398" width="20" height="128"/>
<object id="8" type="frozenDoor" x="625.287" y="128.201" width="17.3333" height="129.333"/>
</objectgroup>
<objectgroup id="5" name="buttons">
<object id="10" type="button" x="304.323" y="247.822" width="42.6667" height="9.33333"/>
<object id="11" type="frozenButton" x="539.767" y="249.732" width="58.6667" height="9.33333"/>
</objectgroup>
</map>

View File

@ -1,221 +0,0 @@
return {
version = "1.4",
luaversion = "5.1",
tiledversion = "1.4.3",
orientation = "orthogonal",
renderorder = "right-down",
width = 100,
height = 100,
tilewidth = 16,
tileheight = 16,
nextlayerid = 5,
nextobjectid = 14,
properties = {},
tilesets = {},
layers = {
{
type = "objectgroup",
draworder = "topdown",
id = 2,
name = "platforms",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 1,
name = "",
type = "",
shape = "rectangle",
x = 333.333,
y = 950.667,
width = 754.667,
height = 93.3333,
rotation = 0,
visible = true,
properties = {}
},
{
id = 2,
name = "",
type = "",
shape = "rectangle",
x = 624.667,
y = 79.3333,
width = 162,
height = 18,
rotation = 0,
visible = true,
properties = {}
},
{
id = 3,
name = "",
type = "",
shape = "rectangle",
x = 626.667,
y = 98.3333,
width = 21,
height = 109,
rotation = 0,
visible = true,
properties = {}
},
{
id = 4,
name = "",
type = "",
shape = "rectangle",
x = 767.667,
y = 98.3333,
width = 20,
height = 108,
rotation = 0,
visible = true,
properties = {}
}
}
},
{
type = "objectgroup",
draworder = "topdown",
id = 3,
name = "doors",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 5,
name = "",
type = "door",
shape = "rectangle",
x = 628.667,
y = 192.333,
width = 159,
height = 17,
rotation = 0,
visible = true,
properties = {}
}
}
},
{
type = "objectgroup",
draworder = "topdown",
id = 4,
name = "buttons",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 6,
name = "",
type = "button",
shape = "rectangle",
x = 672.667,
y = 393.667,
width = 70.3333,
height = 16,
rotation = 0,
visible = true,
properties = {}
},
{
id = 7,
name = "",
type = "banana",
shape = "point",
x = 702.667,
y = 191.333,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 8,
name = "",
type = "spawn",
shape = "point",
x = 711.667,
y = 950.333,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {
["count"] = "10"
}
},
{
id = 9,
name = "",
type = "",
shape = "text",
x = 663.703,
y = 786.5,
width = 80.5938,
height = 19,
rotation = 0,
visible = true,
text = "+/- to zoom",
wrap = true,
properties = {}
},
{
id = 11,
name = "",
type = "",
shape = "rectangle",
x = 858.667,
y = 613.333,
width = 24,
height = 76,
rotation = 0,
visible = true,
properties = {}
},
{
id = 12,
name = "",
type = "",
shape = "polygon",
x = 870.667,
y = 580,
width = 0,
height = 0,
rotation = 0,
visible = true,
polygon = {
{ x = 0, y = 0 },
{ x = -25.3333, y = 38.6667 },
{ x = 30.6667, y = 38.6667 }
},
properties = {}
},
{
id = 13,
name = "",
type = "",
shape = "rectangle",
x = 566.667,
y = 412,
width = 302.667,
height = 41.3333,
rotation = 0,
visible = true,
properties = {}
}
}
}
}
}

View File

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="100" height="100" tilewidth="16" tileheight="16" infinite="0" nextlayerid="5" nextobjectid="14">
<objectgroup id="2" name="platforms">
<object id="1" x="333.333" y="950.667" width="754.667" height="93.3333"/>
<object id="2" x="624.667" y="79.3333" width="162" height="18"/>
<object id="3" x="626.667" y="98.3333" width="21" height="109"/>
<object id="4" x="767.667" y="98.3333" width="20" height="108"/>
</objectgroup>
<objectgroup id="3" name="doors">
<object id="5" type="frozenDoor" x="628.667" y="192.333" width="159" height="17"/>
</objectgroup>
<objectgroup id="4" name="buttons">
<object id="6" type="frozenButton" x="672.667" y="393.667" width="70.3333" height="16"/>
<object id="7" type="banana" x="702.667" y="191.333">
<point/>
</object>
<object id="8" type="spawn" x="711.667" y="950.333">
<properties>
<property name="count" value="10"/>
</properties>
<point/>
</object>
<object id="9" x="663.703" y="786.5" width="80.5938" height="19">
<text wrap="1">+/- to zoom</text>
</object>
<object id="11" x="858.667" y="613.333" width="24" height="76"/>
<object id="12" x="870.667" y="580">
<polygon points="0,0 -25.3333,38.6667 30.6667,38.6667"/>
</object>
<object id="13" x="566.667" y="412" width="302.667" height="41.3333"/>
</objectgroup>
</map>

View File

@ -1,180 +0,0 @@
return {
version = "1.4",
luaversion = "5.1",
tiledversion = "1.4.3",
orientation = "orthogonal",
renderorder = "right-down",
width = 50,
height = 50,
tilewidth = 16,
tileheight = 16,
nextlayerid = 4,
nextobjectid = 49,
properties = {},
tilesets = {},
layers = {
{
type = "objectgroup",
draworder = "topdown",
id = 2,
name = "Object Layer 1",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 2,
name = "",
type = "",
shape = "rectangle",
x = 38.932,
y = 306.814,
width = 14.6488,
height = 242.519,
rotation = 0,
visible = true,
properties = {}
},
{
id = 4,
name = "",
type = "",
shape = "rectangle",
x = 55.2085,
y = 537.94,
width = 524.102,
height = 11.3935,
rotation = 0,
visible = true,
properties = {}
},
{
id = 6,
name = "",
type = "",
shape = "rectangle",
x = 581.752,
y = 306,
width = 14.6488,
height = 242.52,
rotation = 0,
visible = true,
properties = {}
},
{
id = 27,
name = "",
type = "",
shape = "polygon",
x = 800,
y = 530.242,
width = 0,
height = 0,
rotation = 0,
visible = true,
polygon = {
{ x = 0, y = 0 },
{ x = -360.606, y = 269.697 },
{ x = -6.06061, y = 266.667 }
},
properties = {}
},
{
id = 28,
name = "",
type = "",
shape = "rectangle",
x = 46.6665,
y = 791.333,
width = 66.6667,
height = 14.6667,
rotation = 0,
visible = true,
properties = {}
},
{
id = 29,
name = "",
type = "",
shape = "rectangle",
x = 177.333,
y = 790,
width = 105.333,
height = 16,
rotation = 0,
visible = true,
properties = {}
},
{
id = 30,
name = "",
type = "",
shape = "rectangle",
x = 346.667,
y = 788.667,
width = 54.6667,
height = 16,
rotation = 0,
visible = true,
properties = {}
}
}
},
{
type = "objectgroup",
draworder = "topdown",
id = 3,
name = "Object Layer 2",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 31,
name = "",
type = "spawn",
shape = "point",
x = 321.333,
y = 484,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {
["count"] = 10
}
},
{
id = 32,
name = "",
type = "respawn",
shape = "point",
x = 330.667,
y = 2.66667,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 33,
name = "",
type = "banana",
shape = "point",
x = 78.9474,
y = 784.897,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
}
}
}
}
}

View File

@ -1,31 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="50" height="50" tilewidth="16" tileheight="16" infinite="0" nextlayerid="4" nextobjectid="49">
<editorsettings>
<export format="lua"/>
</editorsettings>
<objectgroup id="2" name="Object Layer 1">
<object id="2" x="38.932" y="306.814" width="14.6488" height="242.519"/>
<object id="4" x="55.2085" y="537.94" width="524.102" height="11.3935"/>
<object id="6" x="581.752" y="306" width="14.6488" height="242.52"/>
<object id="27" x="800" y="530.242">
<polygon points="0,0 -360.606,269.697 -6.06061,266.667"/>
</object>
<object id="28" x="46.6665" y="791.333" width="66.6667" height="14.6667"/>
<object id="29" x="177.333" y="790" width="105.333" height="16"/>
<object id="30" x="346.667" y="788.667" width="54.6667" height="16"/>
</objectgroup>
<objectgroup id="3" name="Object Layer 2">
<object id="31" type="spawn" x="321.333" y="484">
<properties>
<property name="count" type="int" value="10"/>
</properties>
<point/>
</object>
<object id="32" type="respawn" x="330.667" y="2.66667">
<point/>
</object>
<object id="33" type="banana" x="78.9474" y="784.897">
<point/>
</object>
</objectgroup>
</map>

View File

@ -1,258 +0,0 @@
return {
version = "1.4",
luaversion = "5.1",
tiledversion = "1.4.3",
orientation = "orthogonal",
renderorder = "right-down",
width = 50,
height = 50,
tilewidth = 16,
tileheight = 16,
nextlayerid = 4,
nextobjectid = 49,
properties = {},
tilesets = {},
layers = {
{
type = "objectgroup",
draworder = "topdown",
id = 2,
name = "Object Layer 1",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 2,
name = "",
type = "",
shape = "rectangle",
x = 38.932,
y = 306.814,
width = 14.6488,
height = 242.519,
rotation = 0,
visible = true,
properties = {}
},
{
id = 4,
name = "",
type = "",
shape = "rectangle",
x = 55.2085,
y = 537.94,
width = 524.102,
height = 11.3935,
rotation = 0,
visible = true,
properties = {}
},
{
id = 6,
name = "",
type = "",
shape = "rectangle",
x = 581.752,
y = 306,
width = 14.6488,
height = 242.52,
rotation = 0,
visible = true,
properties = {}
},
{
id = 37,
name = "",
type = "",
shape = "rectangle",
x = 466.819,
y = 306.636,
width = 120.137,
height = 11.4416,
rotation = 0,
visible = true,
properties = {}
},
{
id = 40,
name = "",
type = "",
shape = "polygon",
x = 54.9199,
y = 311.213,
width = 0,
height = 0,
rotation = 0,
visible = true,
polygon = {
{ x = 0, y = 0 },
{ x = 529.748, y = 225.4 },
{ x = -3.43249, y = 229.977 }
},
properties = {}
}
}
},
{
type = "objectgroup",
draworder = "topdown",
id = 3,
name = "Object Layer 2",
visible = true,
opacity = 1,
offsetx = 0,
offsety = 0,
properties = {},
objects = {
{
id = 31,
name = "",
type = "spawn",
shape = "point",
x = 521.562,
y = 299.789,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {
["count"] = 1
}
},
{
id = 32,
name = "",
type = "respawn",
shape = "point",
x = 535.472,
y = 17.5408,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 33,
name = "",
type = "banana",
shape = "point",
x = 99.5423,
y = 315.789,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 41,
name = "",
type = "banana",
shape = "point",
x = 133.867,
y = 320.366,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 42,
name = "",
type = "banana",
shape = "point",
x = 124.714,
y = 291.762,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 43,
name = "",
type = "banana",
shape = "point",
x = 183.066,
y = 307.78,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 44,
name = "",
type = "banana",
shape = "point",
x = 177.346,
y = 259.725,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 45,
name = "",
type = "banana",
shape = "point",
x = 219.68,
y = 296.339,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 46,
name = "",
type = "banana",
shape = "point",
x = 181.922,
y = 356.979,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 47,
name = "",
type = "banana",
shape = "point",
x = 217.391,
y = 328.375,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 48,
name = "",
type = "banana",
shape = "point",
x = 245.995,
y = 358.124,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
}
}
}
}
}

View File

@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="50" height="50" tilewidth="16" tileheight="16" infinite="0" nextlayerid="4" nextobjectid="49">
<editorsettings>
<export target="win.lua" format="lua"/>
</editorsettings>
<objectgroup id="2" name="Object Layer 1">
<object id="2" x="38.932" y="306.814" width="14.6488" height="242.519"/>
<object id="4" x="55.2085" y="537.94" width="524.102" height="11.3935"/>
<object id="6" x="581.752" y="306" width="14.6488" height="242.52"/>
<object id="37" x="466.819" y="306.636" width="120.137" height="11.4416"/>
<object id="40" x="54.9199" y="311.213">
<polygon points="0,0 529.748,225.4 -3.43249,229.977"/>
</object>
</objectgroup>
<objectgroup id="3" name="Object Layer 2">
<object id="31" type="spawn" x="521.562" y="299.789">
<properties>
<property name="count" type="int" value="10"/>
</properties>
<point/>
</object>
<object id="32" type="respawn" x="535.472" y="17.5408">
<point/>
</object>
<object id="33" type="banana" x="99.5423" y="315.789">
<point/>
</object>
<object id="41" type="banana" x="133.867" y="320.366">
<point/>
</object>
<object id="42" type="banana" x="124.714" y="291.762">
<point/>
</object>
<object id="43" type="banana" x="183.066" y="307.78">
<point/>
</object>
<object id="44" type="banana" x="177.346" y="259.725">
<point/>
</object>
<object id="45" type="banana" x="219.68" y="296.339">
<point/>
</object>
<object id="46" type="banana" x="181.922" y="356.979">
<point/>
</object>
<object id="47" type="banana" x="217.391" y="328.375">
<point/>
</object>
<object id="48" type="banana" x="245.995" y="358.124">
<point/>
</object>
</objectgroup>
</map>

View File

@ -4,12 +4,12 @@ return {
tiledversion = "1.4.3",
orientation = "orthogonal",
renderorder = "right-down",
width = 120,
height = 50,
width = 100,
height = 100,
tilewidth = 16,
tileheight = 16,
nextlayerid = 5,
nextobjectid = 47,
nextobjectid = 46,
properties = {},
tilesets = {},
layers = {
@ -29,8 +29,8 @@ return {
name = "hi",
type = "",
shape = "text",
x = 390.961,
y = 10.1667,
x = 37.6276,
y = 34.1667,
width = 94.08,
height = 17,
rotation = 0,
@ -319,8 +319,8 @@ return {
name = "",
type = "",
shape = "rectangle",
x = 1619.33,
y = 241.333,
x = 1370,
y = 236,
width = 222.667,
height = 77.3333,
rotation = 0,
@ -345,8 +345,8 @@ return {
name = "",
type = "spawn",
shape = "point",
x = 441,
y = 82.6667,
x = 93,
y = 80,
width = 0,
height = 0,
rotation = 0,
@ -360,28 +360,13 @@ return {
name = "",
type = "banana",
shape = "point",
x = 1721.33,
y = 238.667,
x = 1484,
y = 240,
width = 0,
height = 0,
rotation = 0,
visible = true,
properties = {}
},
{
id = 46,
name = "",
type = "",
shape = "text",
x = 1121.04,
y = 265.167,
width = 80.5938,
height = 19,
rotation = 0,
visible = true,
text = "-->",
wrap = true,
properties = {}
}
}
}

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="120" height="50" tilewidth="16" tileheight="16" infinite="0" nextlayerid="5" nextobjectid="47">
<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="100" height="100" tilewidth="16" tileheight="16" infinite="0" nextlayerid="5" nextobjectid="46">
<editorsettings>
<export target="1.lua" format="lua"/>
</editorsettings>
<objectgroup id="2" name="Object Layer 1">
<object id="2" name="hi" x="390.961" y="10.1667" width="94.08" height="17">
<object id="2" name="hi" x="37.6276" y="34.1667" width="94.08" height="17">
<text wrap="1">move with wasd or arrow keys</text>
</object>
<object id="38" x="1102.96" y="312.833" width="82.0781" height="17">
@ -31,20 +31,17 @@
<object id="24" x="959.333" y="353.333" width="30.6667" height="157.333"/>
<object id="26" x="989.333" y="367.333" width="34.6667" height="143.333"/>
<object id="29" x="1024" y="384.667" width="224" height="126.667"/>
<object id="43" x="1619.33" y="241.333" width="222.667" height="77.3333"/>
<object id="43" x="1370" y="236" width="222.667" height="77.3333"/>
</objectgroup>
<objectgroup id="4" name="Object Layer 3">
<object id="32" type="spawn" x="441" y="82.6667">
<object id="32" type="spawn" x="93" y="80">
<properties>
<property name="count" type="int" value="4"/>
</properties>
<point/>
</object>
<object id="45" type="bananna" x="1721.33" y="238.667">
<object id="45" type="bananna" x="1484" y="240">
<point/>
</object>
<object id="46" x="1121.04" y="265.167" width="80.5938" height="19">
<text wrap="1">--&gt;</text>
</object>
</objectgroup>
</map>