mirror of
https://github.com/bvanroll/3dsStuff.git
synced 2025-08-28 11:22:40 +00:00
349 lines
6.9 KiB
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
|