diff --git a/main.lua b/main.lua index a755f33..c61c999 100644 --- a/main.lua +++ b/main.lua @@ -16,9 +16,7 @@ end function love.draw() - love.graphics.setScreen('top') snakeplayer:draw() - love.graphics.setScreen('bottom') fly:draw() end @@ -127,3 +125,4 @@ end +require("potion-compat") \ No newline at end of file diff --git a/potion-compat.lua b/potion-compat.lua new file mode 100644 index 0000000..f811f7d --- /dev/null +++ b/potion-compat.lua @@ -0,0 +1,348 @@ +--[[ + FOR NINTENDO 3DS ONLY + + You may use this for -Love Potion- only! + This is to allow filesystem calls to be made + without the need to understand io operation. + + Only works for Love Potion 1.0.8 + + If you want to use view this in 3DSXL mode: + Use love.graphics.scale(scale, scale) before drawing in love.draw! + + require this at the **END** of your main.lua file + + TurtleP +--]] + +if not love.filesystem then + love.filesystem = {} + + function love.filesystem.isFile(path) + return io.open(path) + end + + function love.filesystem.isDirectory(path) + return love.filesystem.isFile(path):read(1) == 21 + end + + function love.filesystem.write(path, data) + if path and data then + local file = io.open(path, "w") + + if file then + file:write(data) + + file:flush() + + file:close() + else + error("Could not create file!") + end + else + error("Could not write file: " .. path .. "!") + end + end + + function love.filesystem.read(path) + if path then + local file = io.open(path, "r") + + if file then + return file:read() + else + error("Could not read file, does not exist!") + end + else + assert(type(path) == "string", "String expected, got " .. type(path)) + end + end + + function love.filesystem.remove(path) + if path then + os.remove(path) + end + end + + local function fsize(file) + local startf = file:seek("start") + + local sizeof = file:seek("end") + + file:seek("set", startf) + + return sizeof + end + + function love.filesystem.getDirectoryItems(path) + if type(path) ~= "string" then + error("String expected, got " .. type(path)) + else + if love.filesystem.isDirectory(path) then + + end + end + end +end + +if not love.graphics.scale then + function love.graphics.scale(scalarX, scalarY) + --do nothing + end +end + +if not love.graphics.setDefaultFilter then + function love.graphics.setDefaultFilter(min, max) + --do nothing + end +end + +if not love.audio.setVolume then + function love.audio.setVolume(volume) + --do nothing + end +end + +if not love.math then + love.math = {} + + function love.math.random(min, max) + return math.random(min, max) + end +end + +local oldSetColor = love.graphics.setColor +function love.graphics.setColor(r, g, b, a) + if type(r) == "table" then + oldSetColor(unpack(r)) + else + oldSetColor(r, g, b, a) + end +end + +--Because tables +local oldSetColor = love.graphics.setColor +function love.graphics.setColor(r, g, b, a) + if type(r) == "table" then + oldSetColor(unpack(r)) + else + oldSetColor(r, g, b, a) + end +end + +if love.system.getOS() == "3ds" then + return +end + +local _KEYNAMES = +{ + "a", "b", "select", "start", + "dright", "dleft", "dup", "ddown", + "rbutton", "lbutton", "x", "y", + "lzbutton", "rzbutton", "cstickright", + "cstickleft", "cstickup", "cstickdown", + "cpadright", "cpadleft", "cpadup", "cpaddown" +} + +BUTTONCONFIG = +{ + ["a"] = "z", + ["b"] = "x", + ["y"] = "c", + ["x"] = "v", + ["start"] = "return", + ["select"] = "rshift", + ["dup"] = "w", + ["dleft"] = "a", + ["dright"] = "d", + ["ddown"] = "s", + ["rbutton"] = "kp0", + ["lbutton"] = "rctrl", + ["cpadright"] = "right", + ["cpadleft"] = "left", + ["cpadup"] = "up", + ["cpaddown"] = "down", + ["cstickleft"] = "", + ["cstickright"] ="", + ["cstickup"] = "", + ["cstickdown"] = "" +} + +function love.graphics.setDepth(depthValue) + assert(depthValue and type(depthValue) == "number", "Number expected: got " .. type(depthValue)) +end + +function love.graphics.set3D(enable3D) + assert(enable3D and type(enable3D) == "boolean", "Boolean expected: got " .. type(depthValue)) +end + +local olddraw = love.graphics.draw +function love.graphics.draw(...) + local args = {...} + + local image = args[1] + local quad + local x, y, r = 0, 0, 0 + local scalex, scaley + + if type(args[2]) == "userdata" then + quad = args[2] + x = args[3] or 0 + y = args[4] or 0 + scalex, scaley = args[5], args[6] + else + x, y = args[2] or 0, args[3] or 0 + r = args[4] or 0 + end + + if love.graphics.getScreen() == "bottom" then + x = x + 40 + y = y + 240 + end + + if not quad then + if r then + olddraw(image, x + image:getWidth() / 2, y + image:getHeight() / 2, r, 1, 1, image:getWidth() / 2, image:getHeight() / 2) + else + olddraw(image, x, y) + end + else + olddraw(image, quad, x, y, 0, 1, 1) + end +end + +local oldRectangle = love.graphics.rectangle +function love.graphics.rectangle(mode, x, y, width, height) + local x = x or 0 + local y = y or 0 + if love.graphics.getScreen() == "bottom" then + x = x + 40 + y = y + 240 + end + oldRectangle(mode, x, y, width, height) +end + +local oldCircle = love.graphics.circle +function love.graphics.circle(mode, x, y, r, segments) + local x = x or 0 + local y = y or 0 + if love.graphics.getScreen() == "bottom" then + x = x + 40 + y = y + 240 + end + oldCircle(mode, x, y, r, segments) +end + +local oldPrint = love.graphics.print +function love.graphics.print(text, x, y, r, scalex, scaley, sx, sy) + local x = x or 0 + local y = y or 0 + if love.graphics.getScreen() == "bottom" then + x = x + 40 + y = y + 240 + end + oldPrint(text, x, y, r, scalex, scaley, sx, sy) +end + +local oldKey = love.keypressed +function love.keypressed(key) + for k, v in pairs(BUTTONCONFIG) do + if key == v then + oldKey(k) + break + end + end +end + +local oldKey = love.keyreleased +function love.keyreleased(key) + for k, v in pairs(BUTTONCONFIG) do + if key == v then + oldKey(k) + break + end + end + + if key == "1" or key == "2" then + love.system.setModel(tonumber(key)) + end +end + +function math.clamp(low, n, high) + return math.min(math.max(low, n), high) +end + +local oldMousePressed = love.mousepressed +function love.mousepressed(x, y, button) + x, y = math.clamp(0, x - 40, 320), math.clamp(0, y - 240, 240) + + if oldMousePressed then + oldMousePressed(x, y, 1) + end +end + +local oldMouseReleased = love.mousereleased +function love.mousereleased(x, y, button) + x, y = math.clamp(0, x - 40, 320), math.clamp(0, y - 240, 240) + + if oldMouseReleased then + oldMouseReleased(x, y, 1) + end +end + +_SCREEN = "top" + +models = {"3DS", "3DSXL"} +function love.system.getModel() + return models[scale] +end + +function love.system.setModel(s) + scale = s + + love.window.setMode(400 * scale, 240 * scale, {vsync = true}) + + love.window.setTitle(love.filesystem.getIdentity() .. " :: " .. love.system.getModel()) +end + +love.system.setModel(1) + +function love.graphics.setScreen(screen) + assert(type(screen) == "string", "String expected, got " .. type(screen)) + _SCREEN = screen + + love.graphics.setColor(32, 32, 32) + + love.graphics.rectangle("fill", 0, 240, 40, 240) + love.graphics.rectangle("fill", 360, 240, 40, 240) + + love.graphics.setColor(255, 255, 255) + + if screen == "top" then + love.graphics.setScissor(0, 0, 400 * scale, 240 * scale) + elseif screen == "bottom" then + love.graphics.setScissor(40 * scale, 240 * scale, 320 * scale, 240 * scale) + end +end + +function love.graphics.getWidth() + if love.graphics.getScreen() == "bottom" then + return 320 + end + return 400 +end + +function love.graphics.getHeight() + return 240 +end + +function love.graphics.getScreen() + return _SCREEN +end + +local oldclear = love.graphics.clear +function love.graphics.clear(r, g, b, a) + love.graphics.setScissor() + + oldclear(r, g, b, a) +end diff --git a/snake.lua b/snake.lua index b75cd1e..15426a5 100644 --- a/snake.lua +++ b/snake.lua @@ -16,6 +16,7 @@ snake = { frames = 0, hgrid = 20, vgrid = 11, + screen = "bottom", bgCol = { r = 0, g = 0, @@ -56,7 +57,7 @@ function snakeplayer:hardreset() self.x = 10 self.y = 10 self.blocks = {} - love.graphics.setScreen("top") + love.graphics.setScreen(snake.screen) self.w = love.graphics.getWidth()/snake.hgrid end @@ -114,11 +115,10 @@ function snakeplayer:update(dt) end function snakeplayer:draw() - love.graphics.setScreen('top') + love.graphics.setScreen(snake.screen) love.graphics.setColor(snake.bgCol.r, snake.bgCol.g, snake.bgCol.b) love.graphics.rectangle("fill", 0, 0, love.graphics.getWidth(), love.graphics.getHeight()) love.graphics.setColor(0,255,0) - temp = 0 for i in ipairs(self.blocks) do love.graphics.rectangle(self.mode, self.blocks[i].x*self.w, self.blocks[i].y*self.w, self.w, self.w) end diff --git a/swat.lua b/swat.lua index 2cf76c0..2ab34fd 100644 --- a/swat.lua +++ b/swat.lua @@ -1,29 +1,26 @@ fly = { - sx = 0, - sy = 0, - x = 50, - y = 50, - sprite = love.graphics.newImage("data/fly.png"), - af = love.graphics.newQuad(87, 40, 75, 66, 368, 195), --162 106 - af = love.graphics.newQuad(87, 40, 75, 66, 368, 195), --162 106 - rot = 0, - scl = 20, - anf = 0, - anc = false, - ans = 10, - alive = true, - ttl = 4, - tl = 0, - timer = false + sx = 0, --startx or current x + sy = 0, --starty or current y + x = 50, --destination x + y = 50, --destination -y + sprite = love.graphics.newImage("data/fly.png"), --image + quad = love.graphics.newQuad(87, 40, 75, 66, 368, 195), --162 106 + rot = 0, --rotation + scl = 20, --scale + alive = true, --is the fly alive + ttl = 4, --time to live before the fly dies + tl = 0, --time lived + timer = false --flies only start living when they stop moving, this is to keep tracking that } swat = { + screen = "top", score = 0, - diff = 1, + diff = 1, --difficulty frames = 0, - width = 1, - height = 1, - bgCol = { + width = 1,--set later width of screen + height = 1,--set later height of screen + bgCol = { --background colors of screen r = 255, g = 255, b = 255 @@ -31,7 +28,7 @@ swat = { } function swat:load() - love.graphics.setScreen("bottom") + love.graphics.setScreen(swat.screen) swat.width = love.graphics.getWidth() swat.height = love.graphics.getHeight() swat.score = 0 @@ -46,10 +43,13 @@ function swat:update( dt) swat.frames = 0 end swat.frames = swat.frames+dt - fly.anf = fly.anf +dt if fly.timer then fly.tl = fly.tl + dt end + if fly.tl >= fly.ttl then + swat.score = swat.score -1 + fly:newFly() + end if fly.alive then --draw the existing fly if he's not on path, move him on his path. if fly.sx ~= fly.x or fly.sy ~= fly.y then @@ -77,22 +77,11 @@ function swat:update( dt) end function fly:draw() - love.graphics.setScreen("bottom") + love.graphics.setScreen(swat.screen) love.graphics.setColor(swat.bgCol.r, swat.bgCol.g, swat.bgCol.b) love.graphics.rectangle("fill", 0, 0, love.graphics.getWidth(), love.graphics.getHeight()) - if fly.anf > fly.ans then - fly.anf = 0 - if fly.anc then - fly.anc = false - else - fly.anc = true - end - end - if fly.anc then - love.graphics.draw(fly.sprite, fly.af, fly.sx, fly.sy, fly.rot, 0.2, 0.2) - else - love.graphics.draw(fly.sprite, fly.bf, fly.sx, fly.sy, fly.rot, 1, 1) - + if fly.alive then + love.graphics.draw(fly.sprite, fly.quad, fly.sx, fly.sy, 0, 0, 0,0,0) end end