108 lines
No EOL
3.8 KiB
Lua
108 lines
No EOL
3.8 KiB
Lua
-----------------------
|
|
-- Name: Game Boy Mode
|
|
-- Author: upsilandre
|
|
-----------------------
|
|
-- Simulates the game boy's display limitations
|
|
-- 1. Adds a 160x144 frame which can be moved by clicking inside it. Clicking outside of it will hide the black overlay.
|
|
-- 2. Restricts the palette to a 4-color palette like the game boy - right-click the screen to change the palette.
|
|
-----------------------
|
|
|
|
function Main()
|
|
mouse = emu.getMouseState()
|
|
if mouse.left then
|
|
if stencil then
|
|
if mouse.x > window_X and mouse.x < window_X + 160 and mouse.y > window_Y and mouse.y < window_Y + 144 then
|
|
window_X = mouse.x - 80
|
|
window_Y = mouse.y - 72
|
|
else
|
|
stencil = false
|
|
holdLeft = true
|
|
end
|
|
else
|
|
if not holdLeft then
|
|
holdLeft = true
|
|
stencil = true
|
|
window_X = mouse.x - 80
|
|
window_Y = mouse.y - 72
|
|
end
|
|
end
|
|
else
|
|
holdLeft = false
|
|
end
|
|
|
|
if stencil then
|
|
if window_X > 0 then
|
|
emu.drawRectangle(0, window_Y, window_X, 144, 0x000000, true)
|
|
end
|
|
if window_X < 96 then
|
|
emu.drawRectangle(window_X + 160, window_Y, 96 - window_X, 144, 0x000000, true)
|
|
end
|
|
if window_Y > 0 then
|
|
emu.drawRectangle(0, 0, 256, window_Y, 0x000000, true)
|
|
end
|
|
if window_Y < 96 then
|
|
emu.drawRectangle(0, window_Y + 144, 256, 96 - window_Y, 0x000000, true)
|
|
end
|
|
end
|
|
|
|
if mouse.right then
|
|
if not holdRight then
|
|
holdRight = true
|
|
UI_X = mouse.x - selectX
|
|
UI_Y = mouse.y - selectY
|
|
end
|
|
emu.drawRectangle(UI_X+16, UI_Y, 128, 16, 0x808080, true)
|
|
emu.drawRectangle(UI_X, UI_Y+16, 16, 128, 0x808080, true)
|
|
for x = UI_X+16, UI_X+128, 16 do
|
|
emu.drawRectangle(x, UI_Y, 17, 17, 0x404040)
|
|
end
|
|
for y = UI_Y+16, UI_Y+128, 16 do
|
|
emu.drawRectangle(UI_X, y, 17, 17, 0x404040)
|
|
end
|
|
if mouse.x > UI_X + 16 and mouse.x < UI_X + 145 and mouse.y > UI_Y + 16 and mouse.y < UI_Y + 145 then
|
|
paletteBg = (mouse.x - 1 - UI_X) >> 4
|
|
paletteSpr = (mouse.y - 1 - UI_Y) >> 4
|
|
offsetX = (UI_X & 0x0f) + 1
|
|
offsetY = (UI_Y & 0x0f) + 1
|
|
emu.drawRectangle(((mouse.x - offsetX) & 0xf0) + offsetX, UI_Y+1, 15, 15, 0xff0000, true)
|
|
emu.drawRectangle( UI_X+1, ((mouse.y - offsetY) & 0xf0) + offsetY, 15, 15, 0xff0000, true)
|
|
emu.drawLine(UI_X+17, mouse.y, mouse.x, mouse.y, 0xff0000)
|
|
emu.drawLine(mouse.x, UI_Y+17, mouse.x, mouse.y, 0xff0000)
|
|
selectX = mouse.x - UI_X
|
|
selectY = mouse.y - UI_Y
|
|
end
|
|
for i = 1,#text,3 do
|
|
emu.drawString(UI_X + text[i], UI_Y + text[i+1], text[i+2], 0xffffff, 0xff000000)
|
|
end
|
|
else
|
|
holdRight = false
|
|
end
|
|
|
|
for palAddr = 0,0x0f,4 do
|
|
emu.write(palAddr, color[paletteBg][1], emu.memType.palette)
|
|
emu.write(palAddr + 1, color[paletteBg][2], emu.memType.palette)
|
|
emu.write(palAddr + 2, color[paletteBg][3], emu.memType.palette)
|
|
emu.write(palAddr + 3, color[paletteBg][4], emu.memType.palette)
|
|
emu.write(palAddr + 16, color[paletteBg][1], emu.memType.palette)
|
|
emu.write(palAddr + 17, color[paletteSpr][1], emu.memType.palette)
|
|
emu.write(palAddr + 18, color[paletteSpr][2], emu.memType.palette)
|
|
emu.write(palAddr + 19, color[paletteSpr][3], emu.memType.palette)
|
|
end
|
|
end
|
|
|
|
stencil = false
|
|
holdLeft = false
|
|
holdRight = false
|
|
window_X = 48
|
|
window_Y = 48
|
|
selectX = 72
|
|
selectY = 72
|
|
paletteSpr = 4
|
|
paletteBg = 4
|
|
color = {{0x38,0x28,0x18,0x08},{0x28,0x18,0x08,0x38},{0x18,0x08,0x38,0x28},{0x08,0x38,0x28,0x18},
|
|
{0x08,0x18,0x28,0x38},{0x18,0x28,0x38,0x08},{0x28,0x38,0x08,0x18},{0x38,0x08,0x18,0x28}}
|
|
text = {48,-9,"Background",22,5,"1",38,5,"2",54,5,"3",70,5,"4",86,5,"5",102,5,"6",
|
|
118,5,"7",134,5,"8",-6,51,"S",-6,57,"p",-6,64,"r",-6,72,"i",-7,80,"t",-7,86,"e",
|
|
6,21,"1",6,37,"2",6,53,"3",6,69,"4",6,85,"5",6,101,"6",6,117,"7",6,133,"8"}
|
|
emu.addEventCallback(Main, emu.eventType.startFrame)
|
|
emu.displayMessage("Script", "Game Boy mode") |