function love.load() fps = 30 upTime = love.timer.getTime() nextTime = upTime windowProfile = { mode = { width = 256, height = 240, }, scale = { x = 2, y = 2, }, title = "GNU & Bola - The libre beat'em up game", } love.graphics.setBackgroundColor(0, 232, 216) love.graphics.setDefaultFilter('nearest', 'nearest') love.window.setMode(windowProfile.mode.width * windowProfile.scale.x, windowProfile.mode.height * windowProfile.scale.y) love.window.setTitle(windowProfile.title) button = { left = 'a', right = 'd', up = 'w', down = 's', button0 = 'j', button1 = 'k', select = 'g', start = 'h', quit = 'escape', } sprites = { bola = { image = love.graphics.newImage('metaspritessheet0_color0_alpha.png'), x = 24, y = 32, } } character = { bola = { position = { x = windowProfile.mode.width / 2, y = windowProfile.mode.height / 2, }, orientation = 0, scale = { x = 1, y = 1, }, origin = { x = sprites.bola.x / 2, y = sprites.bola.y / 2, }, acceleration = 0, speed = 125, stand = { love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 1, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 2, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 1, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 3, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 3, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 5, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 6, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 5, sprites.bola.y * 0, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), start = 1, fps = 9, }, walk = { love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 1, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 2, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 1, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 3, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 3, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), start = 1, fps = 9, }, run = { love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 1, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 2, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 1, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 0, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 3, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 4, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), love.graphics.newQuad(sprites.bola.x * 3, sprites.bola.y * 1, sprites.bola.x, sprites.bola.y, sprites.bola.image:getDimensions()), start = 1, fps = 12, }, crouch = { love.graphics.newQuad(sprites.bola.x * 2, sprites.bola.y * 2, sprites.bola.x, sprites.bola.y / 2, sprites.bola.image:getDimensions()), start = 1, fps = 9, }, } } end function love.keypressed(key) if key == button.quit then love.event.quit() end end function love.update(dt) nextTime = nextTime + (1 / fps) character.bola.stand.start = character.bola.stand.start + (dt * character.bola.stand.fps) character.bola.walk.start = character.bola.walk.start + (dt * character.bola.walk.fps) frames = { bola = { stand = # character.bola.stand, walk = # character.bola.walk, } } game = { animation = function(start, frames) if math.floor(start) > frames then start = 1 end return start end } character.bola.stand.start = game.animation(character.bola.stand.start, frames.bola.stand) character.bola.walk.start = game.animation(character.bola.walk.start, frames.bola.walk) transform = { bola = { origin = { y = character.bola.origin.y } } } if love.keyboard.isDown(button.left) then character.bola.acceleration = character.bola.acceleration + dt if character.bola.position.x >= character.bola.origin.x then if character.bola.acceleration < 3 then character.bola.position.x = character.bola.position.x - (character.bola.speed * dt) - character.bola.acceleration else character.bola.position.x = character.bola.position.x - (character.bola.speed * dt) - 3 end end quad = character.bola.walk[math.floor(character.bola.walk.start)] character.bola.scale.x = -1 elseif love.keyboard.isDown(button.right) then character.bola.acceleration = character.bola.acceleration + dt if character.bola.position.x <= windowProfile.mode.width - character.bola.origin.x then if character.bola.acceleration < 3 then character.bola.position.x = character.bola.position.x + (character.bola.speed * dt) + character.bola.acceleration else character.bola.position.x = character.bola.position.x + (character.bola.speed * dt) + 3 end end quad = character.bola.walk[math.floor(character.bola.walk.start)] character.bola.scale.x = 1 elseif love.keyboard.isDown(button.down) then character.bola.acceleration = 0 transform.bola.origin.y = character.bola.origin.y - character.bola.origin.y quad = character.bola.crouch[1] else character.bola.acceleration = 0 quad = character.bola.stand[math.floor(character.bola.stand.start)] end end function love.draw() local currentTime = love.timer.getTime() if nextTime <= currentTime then nextTime = currentTime return end love.timer.sleep(nextTime - currentTime) love.graphics.scale(windowProfile.scale.x, windowProfile.scale.y) love.graphics.print('FPS: ' .. love.timer.getFPS(), 0, 0) love.graphics.draw( sprites.bola.image, quad, character.bola.position.x, character.bola.position.y, character.bola.orientation, character.bola.scale.x, character.bola.scale.y, character.bola.origin.x, transform.bola.origin.y ) end