Files
3dsStuff/potion-compat.lua

349 lines
6.9 KiB
Lua

--[[
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