0.9.2:方向键选择控件

This commit is contained in:
MrZ_26
2020-07-23 15:12:17 +08:00
parent bb2c732529
commit b97319afe0
8 changed files with 469 additions and 318 deletions

View File

@@ -1839,7 +1839,7 @@ function LANG.set(l)
text=langList[l] text=langList[l]
for S,L in next,Widgets do for S,L in next,Widgets do
for N,W in next,L do for N,W in next,L do
W.text=text.WidgetText[S][N] W.text=text.WidgetText[S][W.name]
end end
end end
for _,s in next,drawableTextLoad do for _,s in next,drawableTextLoad do

View File

@@ -168,6 +168,10 @@ function Pnt.main()
setFont(30) setFont(30)
gc.print(gameVersion,70,125) gc.print(gameVersion,70,125)
gc.print(system,610,100) gc.print(system,610,100)
local L=text.modes[stat.lastPlay]
setFont(25)
gc.print(L[1],700,470)
gc.print(L[2],700,500)
players[1]:draw() players[1]:draw()
end end
function Pnt.mode() function Pnt.mode()

View File

@@ -1,8 +1,9 @@
local gc=love.graphics local gc=love.graphics
local kb=love.keyboard local kb=love.keyboard
local int=math.floor local int,abs=math.floor,math.abs
local format=string.format local format=string.format
local next=next local color=color
local EMPTY={} local EMPTY={}
local button={ local button={
@@ -15,6 +16,9 @@ end
function button:isAbove(x,y) function button:isAbove(x,y)
return x>self.x-self.ATV and x<self.x+self.w+2*self.ATV and y>self.y-self.ATV and y<self.y+self.h+2*self.ATV return x>self.x-self.ATV and x<self.x+self.w+2*self.ATV and y>self.y-self.ATV and y<self.y+self.h+2*self.ATV
end end
function button:getCenter()
return self.x+self.w*.5,self.y+self.h*.5
end
function button:FX() function button:FX()
sysFX.new("ripple",.16,self.x-self.ATV,self.y-self.ATV,self.w+2*self.ATV,self.h+2*self.ATV) sysFX.new("ripple",.16,self.x-self.ATV,self.y-self.ATV,self.w+2*self.ATV,self.h+2*self.ATV)
end end
@@ -65,6 +69,9 @@ end
function switch:isAbove(x,y) function switch:isAbove(x,y)
return x>self.x and x<self.x+50 and y>self.y-25 and y<self.y+25 return x>self.x and x<self.x+50 and y>self.y-25 and y<self.y+25
end end
function switch:getCenter()
return self.x,self.y
end
function switch:update() function switch:update()
local _=self.ATV local _=self.ATV
if WIDGET.sel==self then if _<8 then self.ATV=_+1 end if WIDGET.sel==self then if _<8 then self.ATV=_+1 end
@@ -77,6 +84,8 @@ function switch:update()
end end
function switch:draw() function switch:draw()
local x,y=self.x,self.y-25 local x,y=self.x,self.y-25
--Checked
if self.ATV>0 then if self.ATV>0 then
gc.setColor(1,1,1,self.ATV*.08) gc.setColor(1,1,1,self.ATV*.08)
gc.rectangle("fill",x,y,50,50) gc.rectangle("fill",x,y,50,50)
@@ -86,11 +95,13 @@ function switch:draw()
gc.setLineWidth(6) gc.setLineWidth(6)
gc.line(x+5,y+25,x+18,y+38,x+45,y+11) gc.line(x+5,y+25,x+18,y+38,x+45,y+11)
end end
--checked
--Frame
gc.setLineWidth(4) gc.setLineWidth(4)
gc.setColor(1,1,1,.6+self.ATV*.05) gc.setColor(1,1,1,.6+self.ATV*.05)
gc.rectangle("line",x,y,50,50) gc.rectangle("line",x,y,50,50)
--frame
--Text
local t=self.text local t=self.text
if t then if t then
gc.setColor(1,1,1) gc.setColor(1,1,1)
@@ -114,11 +125,15 @@ end
function slider:isAbove(x,y) function slider:isAbove(x,y)
return x>self.x-10 and x<self.x+self.w+10 and y>self.y-20 and y<self.y+20 return x>self.x-10 and x<self.x+self.w+10 and y>self.y-20 and y<self.y+20
end end
function slider:getCenter()
return self.x+self.w*(self.pos/self.unit),self.y
end
function slider:update() function slider:update()
local _=self.ATV
if WIDGET.sel==self then if WIDGET.sel==self then
if self.ATV<6 then self.ATV=self.ATV+1 end if _<6 then self.ATV=_+1 end
else else
if self.ATV>0 then self.ATV=self.ATV-1 end if _>0 then self.ATV=_-1 end
end end
if not(self.hide and self.hide())then if not(self.hide and self.hide())then
self.pos=self.pos*.7+self.disp()*.3 self.pos=self.pos*.7+self.disp()*.3
@@ -126,6 +141,8 @@ function slider:update()
end end
function slider:draw() function slider:draw()
local x,y=self.x,self.y local x,y=self.x,self.y
--Units
gc.setColor(1,1,1,.5+self.ATV*.06) gc.setColor(1,1,1,.5+self.ATV*.06)
gc.setLineWidth(2) gc.setLineWidth(2)
local x1,x2=x,x+self.w local x1,x2=x,x+self.w
@@ -133,17 +150,20 @@ function slider:draw()
local x=x1+(x2-x1)*p/self.unit local x=x1+(x2-x1)*p/self.unit
gc.line(x,y+7,x,y-7) gc.line(x,y+7,x,y-7)
end end
--units
--Axis
gc.setLineWidth(4) gc.setLineWidth(4)
gc.line(x1,y,x2,y) gc.line(x1,y,x2,y)
--axis
--Text
local t=self.text local t=self.text
if t then if t then
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(self.font) setFont(self.font)
gc.printf(t,x-312,y-self.font*.7,300,"right") gc.printf(t,x-312,y-self.font*.7,300,"right")
end end
--text
--Block
local x,y,w,h=x1+(x2-x1)*self.pos/self.unit-10-self.ATV*.5,y-16-self.ATV,20+self.ATV,32+2*self.ATV local x,y,w,h=x1+(x2-x1)*self.pos/self.unit-10-self.ATV*.5,y-16-self.ATV,20+self.ATV,32+2*self.ATV
gc.setColor(.8,.8,.8) gc.setColor(.8,.8,.8)
gc.rectangle("fill",x,y,w,h) gc.rectangle("fill",x,y,w,h)
@@ -152,7 +172,6 @@ function slider:draw()
gc.setColor(1,1,1,self.ATV*.16) gc.setColor(1,1,1,self.ATV*.16)
gc.rectangle("line",x+1,y+1,w-2,h-2) gc.rectangle("line",x+1,y+1,w-2,h-2)
end end
--block
end end
function slider:getInfo() function slider:getInfo()
print(format("x=%d,y=%d,w=%d",self.x,self.y,self.w)) print(format("x=%d,y=%d,w=%d",self.x,self.y,self.w))
@@ -172,36 +191,96 @@ function WIDGET.set(L)
end end
WIDGET.new={} WIDGET.new={}
function WIDGET.new.button(x,y,w,h,color,font,code,hide,N) function WIDGET.newText(D)
local _={ local _={
x=x-w*.5,y=y-h*.5, name= D.name,
w=w,h=h, x= D.x,
color=color, y= D.y,
font=font, align= D.align,
code=code, color= color[D.color]or D.color,
hide=hide, font= D.font,
next=N, hide= D.hide,
}for k,v in next,button do _[k]=v end return _ }for k,v in next,button do _[k]=v end return _
end end
function WIDGET.new.switch(x,y,font,disp,code,hide,N) function WIDGET.newImage(D)
local _={ local _={
x=x,y=y,font=font, name= D.name,
disp=disp, x= D.x-w*.5,
code=code, y= D.y-h*.5,
hide=hide, w= D.w,
next=N, h= D.h,
color= color[D.color]or D.color,
font= D.font,
code= D.code,
hide= D.hide,
}for k,v in next,button do _[k]=v end return _
end
function WIDGET.newButton(D)
local _={
name= D.name,
x= D.x-D.w*.5,
y= D.y-D.h*.5,
w= D.w,
h= D.h,
resCtr={
D.x,D.y,
D.x-D.w*.35,D.y-D.h*.35,
D.x-D.w*.35,D.y+D.h*.35,
D.x+D.w*.35,D.y-D.h*.35,
D.x+D.w*.35,D.y+D.h*.35,
},
color= color[D.color]or D.color,
font= D.font,
code= D.code,
hide= D.hide,
}for k,v in next,button do _[k]=v end return _
end
function WIDGET.newSwitch(D)
local _={
name= D.name,
x= D.x,
y= D.y,
cx= D.x+25,
cy= D.y,
resCtr={
D.x+25,D.y,
},
font= D.font,
disp= D.disp,
code= D.code,
hide= D.hide,
}for k,v in next,switch do _[k]=v end return _ }for k,v in next,switch do _[k]=v end return _
end end
function WIDGET.new.slider(x,y,w,unit,font,change,disp,code,hide,N) function WIDGET.newSlider(D)
local _={ local _={
x=x,y=y, name= D.name,
w=w,unit=unit,
font=font, x= D.x,
change=change, y= D.y,
disp=disp, w= D.w,
code=code,
hide=hide, cx= D.x+D.w*.5,
next=N, cy= D.y,
resCtr={
D.x,D.y,
D.x+D.w*.25,D.y,
D.x+D.w*.5,D.y,
D.x+D.w*.75,D.y,
D.x+D.w,D.y,
},
unit= D.unit,
font= D.font,
change= D.change,
disp= D.disp,
code= D.code,
hide= D.hide,
}for k,v in next,slider do _[k]=v end return _ }for k,v in next,slider do _[k]=v end return _
end end
@@ -247,27 +326,74 @@ function WIDGET.drag(x,y,dx,dy)
end end
end end
function WIDGET.keyPressed(i) function WIDGET.keyPressed(i)
if i=="tab"then if i=="space"or i=="return"then
if WIDGET.sel then if WIDGET.sel then
WIDGET.sel=kb.isDown("lshift")and WIDGET.sel.prev or WIDGET.sel.next or WIDGET.sel WIDGET.press()
else
WIDGET.sel=select(2,next(WIDGET.active))
end end
elseif i=="space"or i=="return"then elseif kb.isDown("lshift","lalt","lctrl")then
if WIDGET.sel then --when hold [↑], control slider with left/right
WIDGET.press(WIDGET.sel) if i=="left"or i=="right"then
end local W=WIDGET.sel
elseif i=="left"or i=="right"then if W then
local W=WIDGET.sel if W.type=="slider"then
if W then local p=W.disp()
if W.type=="slider"then local P=i=="left"and(p>0 and p-1)or p<W.unit and p+1
local p=W.disp() if p==P or not P then return end
local P=i=="left"and(p>0 and p-1)or p<W.unit and p+1 W.code(P)
if p==P or not P then return end if W.change then W.change()end
W.code(P) end
if W.change then W.change()end
end end
end end
elseif i=="up"or i=="down"or i=="left"or i=="right"then
if WIDGET.sel then
local W=WIDGET.sel
local WX,WY=W:getCenter()
local dir=(i=="right"or i=="down")and 1 or -1
local tar
local minDist=1e99
if i=="left"or i=="right"then
for i=1,#WIDGET.active do
local W1=WIDGET.active[i]
if W~=W1 then
local L=W1.resCtr
for j=1,#L,2 do
local x,y=L[j],L[j+1]
local dist=(x-WX)*dir
if dist>10 then
dist=dist+abs(y-WY)*6.26
if dist<minDist then
minDist=dist
tar=W1
end
end
end
end
end
else
for i=1,#WIDGET.active do
local W1=WIDGET.active[i]
if W~=W1 then
local L=W1.resCtr
for j=1,#L,2 do
local x,y=L[j],L[j+1]
local dist=(y-WY)*dir
if dist>10 then
dist=dist+abs(x-WX)*6.26
if dist<minDist then
minDist=dist
tar=W1
end
end
end
end
end
end
if tar then
WIDGET.sel=tar
end
else
WIDGET.sel=WIDGET.active[1]
end
end end
end end
function WIDGET.gamepadPressed(i) function WIDGET.gamepadPressed(i)
@@ -296,7 +422,9 @@ function WIDGET.gamepadPressed(i)
end end
function WIDGET.update() function WIDGET.update()
for _,W in next,WIDGET.active do W:update()end for _,W in next,WIDGET.active do
W:update()
end
end end
function WIDGET.draw() function WIDGET.draw()
for _,W in next,WIDGET.active do for _,W in next,WIDGET.active do

View File

@@ -74,7 +74,7 @@ local virtualkeySet={
},--PC key feedback(top&in a row) },--PC key feedback(top&in a row)
} }
--lambda Funcs for widgets,delete at file end --Lambda Funcs for widgets,delete at file end
local function SETval(k) return function()return setting[k] end end local function SETval(k) return function()return setting[k] end end
local function SETsto(k) return function(i)setting[k]=i end end local function SETsto(k) return function(i)setting[k]=i end end
local function SETrev(k) return function()setting[k]=not setting[k] end end local function SETrev(k) return function()setting[k]=not setting[k] end end
@@ -86,253 +86,261 @@ local function nextDir(n) return function()SKIN.rotate(n) end end
local function VKAdisp(n) return function()return VK_org[n].ava end end local function VKAdisp(n) return function()return VK_org[n].ava end end
local function VKAcode(n) return function()VK_org[n].ava=not VK_org[n].ava end end local function VKAcode(n) return function()VK_org[n].ava=not VK_org[n].ava end end
local function setLang(n) return function()LANG.set(n)setting.lang=n end end local function setLang(n) return function()LANG.set(n)setting.lang=n end end
local newButton,newSwitch,newSlider=WIDGET.new.button,WIDGET.new.switch,WIDGET.new.slider
--newXXX
newText=WIDGET.newText
newImage=WIDGET.newImage
newButton=WIDGET.newButton
newSwitch=WIDGET.newSwitch
newSlider=WIDGET.newSlider
local C=color --All widgets
local Widgets={ local Widgets={
load={},intro={},quit={}, load={},intro={},quit={},
main={ main={
play= newButton(150,280,200,160,C.lightRed, 55,function()SCN.goto("mode")end, nil,"setting"), newButton({name="play", x=150,y=280,w=200,h=160,color="lightRed", font=55,code=function()SCN.goto("mode")end}),
setting=newButton(370,280,200,160,C.lightBlue, 45,function()SCN.goto("setting_game")end, nil,"music"), newButton({name="setting", x=370,y=280,w=200,h=160,color="lightBlue", font=45,code=function()SCN.goto("setting_game")end}),
music= newButton(590,280,200,160,C.lightPurple, 32,function()SCN.goto("music")end, nil,"help"), newButton({name="music", x=590,y=280,w=200,h=160,color="lightPurple",font=32,code=function()SCN.goto("music")end}),
help= newButton(150,460,200,160,C.lightYellow, 50,function()SCN.goto("help")end, nil,"stat"), newButton({name="help", x=150,y=460,w=200,h=160,color="lightYellow",font=50,code=function()SCN.goto("help")end}),
stat= newButton(370,460,200,160,C.lightCyan, 43,function()SCN.goto("stat")end, nil,"qplay"), newButton({name="stat", x=370,y=460,w=200,h=160,color="lightCyan", font=43,code=function()SCN.goto("stat")end}),
qplay= newButton(590,460,200,160,C.lightOrange, 43,function()SCN.push()loadGame(stat.lastPlay)end, nil,"lang"), newButton({name="qplay", x=590,y=460,w=200,h=160,color="lightOrange",font=43,code=function()SCN.push()loadGame(stat.lastPlay)end}),
lang= newButton(150,610,160,100,C.lightGreen, 45,function()SCN.goto("setting_lang")end, nil,"quit"), newButton({name="lang", x=150,y=610,w=160,h=100,color="lightGreen", font=45,code=function()SCN.goto("setting_lang")end}),
quit= newButton(590,610,160,100,C.lightGrey, 45,function()VOC.play("bye")SCN.swapTo("quit","slowFade")end,nil,"play"), newButton({name="quit", x=590,y=610,w=160,h=100,color="lightGrey", font=45,code=function()VO"play"("bye")SCN.swapTo("quit","slowFade")end}),
}, },
mode={ mode={
setting=newButton(1100, 540,240,90,C.lightGreen, 40,function() newButton({name="setting",x=1100,y=540,w=240,h=90,color="lightGreen", font=40,code=function()
SCN.goto("custom") SCN.goto("custom")
end, end,
function() hide=function()
return mapCam.sel~="custom_clear" and mapCam.sel~="custom_puzzle" return mapCam.sel~="custom_clear" and mapCam.sel~="custom_puzzle"
end), end}),
start= newButton(1040, 655,180,80,C.lightGrey, 40,pressKey("return"),function()return not mapCam.sel end), newButton({name="start", x=1040,y=655,w=180,h=80,color="lightGrey", font=40,code=pressKey("return"),hide=function()return not mapCam.sel end}),
back= newButton(1200, 655,120,80,C.white, 40,BACK), newButton({name="back", x=1200,y=655,w=120,h=80,color="white", font=40,code=BACK}),
}, },
music={ music={
bgm= newSlider(760, 80,400,10,35,function()BGM.freshVolume()end,SETval("bgm"),SETsto("bgm")), newSlider({name="bgm", x=760, y=80, w=400,unit=10, font=35,change=function()BGM.freshVolume()end,disp=SETval("bgm"),code=SETsto("bgm")}),
up= newButton(1100, 200,120,120,C.white, 55,pressKey("up")), newButton({name="up", x=1100, y=200, w=120,h=120, color="white", font=55,code=pressKey("up")}),
play= newButton(1100, 340,120,120,C.white, 35,pressKey("space"),function()return setting.bgm==0 end), newButton({name="play", x=1100, y=340, w=120,h=120, color="white", font=35,code=pressKey("space"),hide=function()return setting.bgm==0 end}),
down= newButton(1100, 480,120,120,C.white, 55,pressKey("down")), newButton({name="down", x=1100, y=480, w=120,h=120, color="white", font=55,code=pressKey("down")}),
back= newButton(640, 630,230,90, C.white, 40,BACK), newButton({name="back", x=640, y=630, w=230,h=90, color="white", font=40,code=BACK}),
}, },
custom={ custom={
up= newButton(1140, 100,100,100,C.white, 45,function()sceneTemp=(sceneTemp-2)%#customID+1 end), newButton({name="up", x=1140, y=100, w=100,h=100, color="white", font=45,code=function()sceneTemp=(sceneTemp-2)%#customID+1 end}),
down= newButton(1140, 340,100,100,C.white, 45,function()sceneTemp=sceneTemp%#customID+1 end), newButton({name="down", x=1140, y=340, w=100,h=100, color="white", font=45,code=function()sceneTemp=sceneTemp%#customID+1 end}),
left= newButton(1080, 220,100,100,C.white, 45,pressKey("left")), newButton({name="left", x=1080, y=220, w=100,h=100, color="white", font=45,code=pressKey("left")}),
right= newButton(1200, 220,100,100,C.white, 45,pressKey("right")), newButton({name="right", x=1200, y=220, w=100,h=100, color="white", font=45,code=pressKey("right")}),
set1= newButton(940, 320,260,70, C.lightYellow, 32,pressKey("1")), newButton({name="set1", x=940, y=320, w=260,h=70, color="lightYellow",font=32,code=pressKey("1")}),
set2= newButton(940, 400,260,70, C.lightYellow, 32,pressKey("2")), newButton({name="set2", x=940, y=400, w=260,h=70, color="lightYellow",font=32,code=pressKey("2")}),
set3= newButton(940, 480,260,70, C.lightYellow, 32,pressKey("3")), newButton({name="set3", x=940, y=480, w=260,h=70, color="lightYellow",font=32,code=pressKey("3")}),
set4= newButton(940, 560,260,70, C.lightYellow, 32,pressKey("4")), newButton({name="set4", x=940, y=560, w=260,h=70, color="lightYellow",font=32,code=pressKey("4")}),
set5= newButton(940, 640,260,70, C.lightYellow, 32,pressKey("5")), newButton({name="set5", x=940, y=640, w=260,h=70, color="lightYellow",font=32,code=pressKey("5")}),
seq= newButton(665, 415,200,40, C.lightGreen, 30,pressKey("q")), newButton({name="seq", x=665, y=415, w=200,h=40, color="lightGreen", font=30,code=pressKey("q")}),
draw= newButton(150, 80, 220,80, C.white, 35,pressKey("e")), newButton({name="draw", x=150, y=80, w=220,h=80, color="white", font=35,code=pressKey("e")}),
back= newButton(1200, 640,120,120,C.white, 35,BACK), newButton({name="back", x=1200, y=640, w=120,h=120, color="white", font=35,code=BACK}),
}, },
sequence={ sequence={
Z= newButton(150, 440,90, 90,C.white, 50,pressKey(1)), newButton({name="Z", x=150, y=440, w=90,h=90, color="white", font=50,code=pressKey(1)}),
S= newButton(250, 440,90, 90,C.white, 50,pressKey(2)), newButton({name="S", x=250, y=440, w=90,h=90, color="white", font=50,code=pressKey(2)}),
J= newButton(350, 440,90, 90,C.white, 50,pressKey(3)), newButton({name="J", x=350, y=440, w=90,h=90, color="white", font=50,code=pressKey(3)}),
L= newButton(450, 440,90, 90,C.white, 50,pressKey(4)), newButton({name="L", x=450, y=440, w=90,h=90, color="white", font=50,code=pressKey(4)}),
T= newButton(550, 440,90, 90,C.white, 50,pressKey(5)), newButton({name="T", x=550, y=440, w=90,h=90, color="white", font=50,code=pressKey(5)}),
O= newButton(650, 440,90, 90,C.white, 50,pressKey(6)), newButton({name="O", x=650, y=440, w=90,h=90, color="white", font=50,code=pressKey(6)}),
I= newButton(750, 440,90, 90,C.white, 50,pressKey(7)), newButton({name="I", x=750, y=440, w=90,h=90, color="white", font=50,code=pressKey(7)}),
Z5= newButton(150, 540,90, 90,C.darkGrey, 50,pressKey(8)), newButton({name="Z5", x=150, y=540, w=90,h=90, color="darkGrey", font=50,code=pressKey(8)}),
S5= newButton(250, 540,90, 90,C.darkGrey, 50,pressKey(9)), newButton({name="S5", x=250, y=540, w=90,h=90, color="darkGrey", font=50,code=pressKey(9)}),
P= newButton(350, 540,90, 90,C.darkGrey, 50,pressKey(10)), newButton({name="P", x=350, y=540, w=90,h=90, color="darkGrey", font=50,code=pressKey(10)}),
Q= newButton(450, 540,90, 90,C.darkGrey, 50,pressKey(11)), newButton({name="Q", x=450, y=540, w=90,h=90, color="darkGrey", font=50,code=pressKey(11)}),
F= newButton(550, 540,90, 90,C.darkGrey, 50,pressKey(12)), newButton({name="F", x=550, y=540, w=90,h=90, color="darkGrey", font=50,code=pressKey(12)}),
E= newButton(650, 540,90, 90,C.darkGrey, 50,pressKey(13)), newButton({name="E", x=650, y=540, w=90,h=90, color="darkGrey", font=50,code=pressKey(13)}),
T5= newButton(750, 540,90, 90,C.darkGrey, 50,pressKey(14)), newButton({name="T5", x=750, y=540, w=90,h=90, color="darkGrey", font=50,code=pressKey(14)}),
U= newButton(850, 540,90, 90,C.darkGrey, 50,pressKey(15)), newButton({name="U", x=850, y=540, w=90,h=90, color="darkGrey", font=50,code=pressKey(15)}),
V= newButton(950, 540,90, 90,C.darkGrey, 50,pressKey(16)), newButton({name="V", x=950, y=540, w=90,h=90, color="darkGrey", font=50,code=pressKey(16)}),
W= newButton(150, 640,90, 90,C.darkGrey, 50,pressKey(17)), newButton({name="W", x=150, y=640, w=90,h=90, color="darkGrey", font=50,code=pressKey(17)}),
X= newButton(250, 640,90, 90,C.darkGrey, 50,pressKey(18)), newButton({name="X", x=250, y=640, w=90,h=90, color="darkGrey", font=50,code=pressKey(18)}),
J5= newButton(350, 640,90, 90,C.darkGrey, 50,pressKey(19)), newButton({name="J5", x=350, y=640, w=90,h=90, color="darkGrey", font=50,code=pressKey(19)}),
L5= newButton(450, 640,90, 90,C.darkGrey, 50,pressKey(20)), newButton({name="L5", x=450, y=640, w=90,h=90, color="darkGrey", font=50,code=pressKey(20)}),
R= newButton(550, 640,90, 90,C.darkGrey, 50,pressKey(21)), newButton({name="R", x=550, y=640, w=90,h=90, color="darkGrey", font=50,code=pressKey(21)}),
Y= newButton(650, 640,90, 90,C.darkGrey, 50,pressKey(22)), newButton({name="Y", x=650, y=640, w=90,h=90, color="darkGrey", font=50,code=pressKey(22)}),
N= newButton(750, 640,90, 90,C.darkGrey, 50,pressKey(23)), newButton({name="N", x=750, y=640, w=90,h=90, color="darkGrey", font=50,code=pressKey(23)}),
H= newButton(850, 640,90, 90,C.darkGrey, 50,pressKey(24)), newButton({name="H", x=850, y=640, w=90,h=90, color="darkGrey", font=50,code=pressKey(24)}),
I5= newButton(950, 640,90, 90,C.darkGrey, 50,pressKey(25)), newButton({name="I5", x=950, y=640, w=90,h=90, color="darkGrey", font=50,code=pressKey(25)}),
left= newButton(850, 440,90, 90,C.lightGreen, 55,pressKey("left")), newButton({name="left", x=850, y=440, w=90,h=90, color="lightGreen", font=55,code=pressKey("left")}),
right= newButton(950, 440,90, 90,C.lightGreen, 55,pressKey("right")), newButton({name="right", x=950, y=440, w=90,h=90, color="lightGreen", font=55,code=pressKey("right")}),
backsp= newButton(1050, 440,90, 90,C.lightRed, 50,pressKey("backspace")), newButton({name="backsp", x=1050, y=440, w=90,h=90, color="lightRed", font=50,code=pressKey("backspace")}),
reset= newButton(1050, 540,90, 90,C.lightRed, 50,pressKey("delete")), newButton({name="reset", x=1050, y=540, w=90,h=90, color="lightRed", font=50,code=pressKey("delete")}),
back= newButton(1200, 640,120,120,C.white, 35,BACK), newButton({name="back", x=1200, y=640, w=120,h=120, color="white", font=35,code=BACK}),
}, },
draw={ draw={
b1= newButton(500+65*1, 150,58,58,C.red, 30,setPen(1)),--B1 newButton({name="b1", x=500+65*1, y=150,w=58,h=58, color="red", font=30,code=setPen(1)}),--B1
b2= newButton(500+65*2, 150,58,58,C.orange, 30,setPen(2)),--B2 newButton({name="b2", x=500+65*2, y=150,w=58,h=58, color="orange", font=30,code=setPen(2)}),--B2
b3= newButton(500+65*3, 150,58,58,C.yellow, 30,setPen(3)),--B3 newButton({name="b3", x=500+65*3, y=150,w=58,h=58, color="yellow", font=30,code=setPen(3)}),--B3
b4= newButton(500+65*4, 150,58,58,C.grass, 30,setPen(4)),--B4 newButton({name="b4", x=500+65*4, y=150,w=58,h=58, color="grass", font=30,code=setPen(4)}),--B4
b5= newButton(500+65*5, 150,58,58,C.green, 30,setPen(5)),--B5 newButton({name="b5", x=500+65*5, y=150,w=58,h=58, color="green", font=30,code=setPen(5)}),--B5
b6= newButton(500+65*6, 150,58,58,C.water, 30,setPen(6)),--B6 newButton({name="b6", x=500+65*6, y=150,w=58,h=58, color="water", font=30,code=setPen(6)}),--B6
b7= newButton(500+65*7, 150,58,58,C.cyan, 30,setPen(7)),--B7 newButton({name="b7", x=500+65*7, y=150,w=58,h=58, color="cyan", font=30,code=setPen(7)}),--B7
b8= newButton(500+65*8, 150,58,58,C.blue, 30,setPen(8)),--B8 newButton({name="b8", x=500+65*8, y=150,w=58,h=58, color="blue", font=30,code=setPen(8)}),--B8
b9= newButton(500+65*9, 150,58,58,C.purple, 30,setPen(9)),--B9 newButton({name="b9", x=500+65*9, y=150,w=58,h=58, color="purple", font=30,code=setPen(9)}),--B9
b10= newButton(500+65*10,150,58,58,C.magenta, 30,setPen(10)),--B10 newButton({name="b10", x=500+65*10,y=150,w=58,h=58, color="magenta", font=30,code=setPen(10)}),--B10
b11= newButton(500+65*11,150,58,58,C.pink, 30,setPen(11)),--B11 newButton({name="b11", x=500+65*11,y=150,w=58,h=58, color="pink", font=30,code=setPen(11)}),--B11
b12= newButton(500+65*1, 230,58,58,C.darkGrey, 30,setPen(12)),--Bone newButton({name="b12", x=500+65*1, y=230,w=58,h=58, color="darkGrey", font=30,code=setPen(12)}),--Bone
b13= newButton(500+65*2, 230,58,58,C.grey, 30,setPen(13)),--GB1 newButton({name="b13", x=500+65*2, y=230,w=58,h=58, color="grey", font=30,code=setPen(13)}),--GB1
b14= newButton(500+65*3, 230,58,58,C.lightGrey, 30,setPen(14)),--GB2 newButton({name="b14", x=500+65*3, y=230,w=58,h=58, color="lightGrey", font=30,code=setPen(14)}),--GB2
b15= newButton(500+65*4, 230,58,58,C.darkPurple, 30,setPen(15)),--GB3 newButton({name="b15", x=500+65*4, y=230,w=58,h=58, color="darkPurple", font=30,code=setPen(15)}),--GB3
b16= newButton(500+65*5, 230,58,58,C.darkRed, 30,setPen(16)),--GB4 newButton({name="b16", x=500+65*5, y=230,w=58,h=58, color="darkRed", font=30,code=setPen(16)}),--GB4
b17= newButton(500+65*6, 230,58,58,C.darkGreen, 30,setPen(17)),--GB5 newButton({name="b17", x=500+65*6, y=230,w=58,h=58, color="darkGreen", font=30,code=setPen(17)}),--GB5
any= newButton(600, 360,120,120,C.lightGrey, 40,setPen(0)), newButton({name="any", x=600, y=360, w=120,h=120, color="lightGrey", font=40,code=setPen(0)}),
space= newButton(730, 360,120,120,C.grey, 65,setPen(-1)), newButton({name="space", x=730, y=360, w=120,h=120, color="grey", font=65,code=setPen(-1)}),
clear= newButton(1200, 500,120,120,C.white, 40,pressKey("delete")), newButton({name="clear", x=1200, y=500, w=120,h=120, color="white", font=40,code=pressKey("delete")}),
demo= newSwitch(755, 640,30,function()return sceneTemp.demo end,function()sceneTemp.demo=not sceneTemp.demo end), newSwitch({name="demo", x=755, y=640, font=30,disp=function()return sceneTemp.demo end,code=function()sceneTemp.demo=not sceneTemp.demo end}),
copy= newButton(920, 640,120,120,C.lightRed, 35,function()copyBoard()end), newButton({name="copy", x=920, y=640, w=120,h=120, color="lightRed", font=35,code=function()copyBoard()end}),
paste= newButton(1060, 640,120,120,C.lightBlue, 35,function()pasteBoard()end), newButton({name="paste", x=1060, y=640, w=120,h=120, color="lightBlue", font=35,code=function()pasteBoard()end}),
custom= newButton(110, 80, 140,80, C.white, 35,function()SCN.goto("custom")end), newButton({name="custom", x=110, y=80, w=140,h=80, color="white", font=35,code=function()SCN.goto("custom")end}),
back= newButton(1200, 640,120,120,C.white, 35,BACK), newButton({name="back", x=1200, y=640, w=120,h=120, color="white", font=35,code=BACK}),
}, },
play={ play={
pause= newButton(1235,45,80,80,C.white,25,function()pauseGame()end), newButton({name="pause", x=1235, y=45, w=80,h=80, color="white", font=25,code=function()pauseGame()end}),
}, },
pause={ pause={
resume= newButton(640,290,240,100,C.white,30,function()resumeGame()end), newButton({name="resume", x=640,y=290,w=240,h=100,color="white",font=30,code=function()resumeGame()end}),
restart=newButton(640,445,240,100,C.white,33,function() newButton({name="restart", x=640,y=445,w=240,h=100,color="white",font=33,code=function()
TASK.removeTask_code(TICK.autoPause) TASK.removeTask_code(TICK.autoPause)
mergeStat(stat,players[1].stat) mergeStat(stat,players[1].stat)
resetGameData() resetGameData()
SCN.swapTo("play","none") SCN.swapTo("play","none")
end), end}),
setting=newButton(1120,70,240,90,C.lightBlue,35,function() newButton({name="setting", x=1120, y=70, w=240,h=90, color="lightBlue",font=35,code=function()
SCN.goto("setting_sound") SCN.goto("setting_sound")
end), end}),
quit= newButton(640,600,240,100,C.white,35,BACK), newButton({name="quit", x=640, y=600, w=240,h=100,color="white",font=35,code=BACK}),
}, },
setting_game={ setting_game={
graphic=newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_video")end, nil,"sound"), newButton({name="graphic", x=200, y=80, w=240,h=80, color="lightCyan", font=35,code=function()SCN.swapTo("setting_video")end}),
sound= newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_sound")end, nil,"ctrl"), newButton({name="sound", x=1080, y=80, w=240,h=80, color="lightCyan", font=35,code=function()SCN.swapTo("setting_sound")end}),
ctrl= newButton(290,220,320,80,C.lightYellow,35,function()SCN.goto("setting_control")end, nil,"key"), newButton({name="ctrl", x=290, y=220, w=320,h=80, color="lightYellow",font=35,code=function()SCN.goto("setting_control")end}),
key= newButton(640,220,320,80,C.lightGreen,35,function()SCN.goto("setting_key")end, nil,"touch"), newButton({name="key", x=640, y=220, w=320,h=80, color="lightGreen", font=35,code=function()SCN.goto("setting_key")end}),
touch= newButton(990,220,320,80,C.lightBlue,35,function()SCN.goto("setting_touch")end, nil,"reTime"), newButton({name="touch", x=990, y=220, w=320,h=80, color="lightBlue", font=35,code=function()SCN.goto("setting_touch")end}),
reTime= newSlider(350,340,300,10,30,nil, SETval("reTime"), SETsto("reTime"), nil,"maxNext"), newSlider({name="reTime", x=350, y=340, w=300,unit=10, font=30,disp=SETval("reTime"), code=SETsto("reTime")}),
maxNext=newSlider(350,440,300,6,30,nil, SETval("maxNext"), SETsto("maxNext"), nil,"autoPause"), newSlider({name="maxNext", x=350, y=440, w=300,unit=6, font=30,disp=SETval("maxNext"), code=SETsto("maxNext")}),
autoPause=newSwitch(350,540,20, SETval("autoPause"), SETrev("autoPause"), nil,"layout"), newSwitch({name="autoPause",x=350, y=540, font=20,disp=SETval("autoPause"),code=SETrev("autoPause")}),
layout= newButton(590,540,140,70,C.white,35,function() newButton({name="layout", x=590, y=540, w=140,h=70,color="white", font=35,code=function()
SCN.goto("setting_skin") SCN.goto("setting_skin")
end,nil,"quickR"), end}),
quickR= newSwitch(1050,320,35, SETval("quickR"), SETrev("quickR"), nil,"swap"), newSwitch({name="quickR", x=1050,y=320,font=35, disp=SETval("quickR"), code=SETrev("quickR")}),
swap= newSwitch(1050,400,20, SETval("swap"), SETrev("swap"), nil,"fine"), newSwitch({name="swap", x=1050,y=400,font=20, disp=SETval("swap"), code=SETrev("swap")}),
fine= newSwitch(1050,480,20, SETval("fine"), SETrev("fine"), nil,"back"), newSwitch({name="fine", x=1050,y=480,font=20, disp=SETval("fine"), code=SETrev("fine")}),
back= newButton(1140,650,200,80,C.white,40,BACK, nil,"graphic"), newButton({name="back", x=1140,y=650,w=200,h=80,color="white",font=40,code=BACK}),
}, },
setting_video={ setting_video={
sound= newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_sound")end, nil,"game"), newButton({name="sound", x=200, y=80,w=240,h=80,color="lightCyan",font=35,code=function()SCN.swapTo("setting_sound")end}),
game= newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_game")end, nil,"ghost"), newButton({name="game", x=1080, y=80,w=240,h=80,color="lightCyan",font=35,code=function()SCN.swapTo("setting_game")end}),
ghost= newSwitch(250,180,35, SETval("ghost"), SETrev("ghost"), nil,"smooth"), newSwitch({name="ghost", x=250, y=180,font=35, disp=SETval("ghost"), code=SETrev("ghost")}),
smooth= newSwitch(250,260,25, SETval("smooth"), SETrev("smooth"), nil,"center"), newSwitch({name="smooth", x=250, y=260,font=25, disp=SETval("smooth"), code=SETrev("smooth")}),
center= newSwitch(500,180,35, SETval("center"), SETrev("center"), nil,"grid"), newSwitch({name="center", x=500, y=180,font=35, disp=SETval("center"), code=SETrev("center")}),
grid= newSwitch(500,260,30, SETval("grid"), SETrev("grid"), nil,"bagLine"), newSwitch({name="grid", x=500, y=260,font=30, disp=SETval("grid"), code=SETrev("grid")}),
bagLine=newSwitch(730,180,30, SETval("bagLine"), SETrev("bagLine"), nil,"lockFX"), newSwitch({name="bagLine", x=730, y=180,font=30, disp=SETval("bagLine"), code=SETrev("bagLine")}),
lockFX= newSlider(350,340,373,3,32,nil, SETval("lockFX"), SETsto("lockFX"), nil,"dropFX"), newSlider({name="lockFX", x=350, y=340,w=373,unit=3, font=32,disp=SETval("lockFX"), code=SETsto("lockFX")}),
dropFX= newSlider(350,400,373,5,32,nil, SETval("dropFX"), SETsto("dropFX"), nil,"clearFX"), newSlider({name="dropFX", x=350, y=400,w=373,unit=5, font=32,disp=SETval("dropFX"), code=SETsto("dropFX")}),
clearFX=newSlider(350,460,373,3,32,nil, SETval("clearFX"), SETsto("clearFX"), nil,"shakeFX"), newSlider({name="clearFX", x=350, y=460,w=373,unit=3, font=32,disp=SETval("clearFX"), code=SETsto("clearFX")}),
shakeFX=newSlider(350,520,373,5,32,nil, SETval("shakeFX"), SETsto("shakeFX"), nil,"atkFX"), newSlider({name="shakeFX", x=350, y=520,w=373,unit=5, font=32,disp=SETval("shakeFX"), code=SETsto("shakeFX")}),
atkFX= newSlider(350,580,373,5,32,nil, SETval("atkFX"), SETsto("atkFX"), nil,"frame"), newSlider({name="atkFX", x=350, y=580,w=373,unit=5, font=32,disp=SETval("atkFX"), code=SETsto("atkFX")}),
frame= newSlider(350,640,373,10,30,nil,function()return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4 end,function(i)setting.frameMul=i<5 and 5*i+20 or 10*i end,nil,"text"), newSlider({name="frame", x=350, y=640,w=373,unit=10,font=30,disp=function()
text= newSwitch(1050,180,35,SETval("text"),SETrev("text"),nil,"warn"), return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4
warn= newSwitch(1050,260,35,SETval("warn"),SETrev("warn"),nil,"fullscreen"), end,
fullscreen=newSwitch(1050,340,35,SETval("fullscreen"),function() code=function(i)setting.frameMul=i<5 and 5*i+20 or 10*i end}),
newSwitch({name="text", x=1050, y=180, font=35,disp=SETval("text"),code=SETrev("text")}),
newSwitch({name="warn", x=1050, y=260, font=35,disp=SETval("warn"),code=SETrev("warn")}),
newSwitch({name="fullscreen",x=1050,y=340, font=35,disp=SETval("fullscreen"),code=function()
setting.fullscreen=not setting.fullscreen setting.fullscreen=not setting.fullscreen
love.window.setFullscreen(setting.fullscreen) love.window.setFullscreen(setting.fullscreen)
love.resize(love.graphics.getWidth(),love.graphics.getHeight()) love.resize(love.graphics.getWidth(),love.graphics.getHeight())
end,nil,"bg"), end}),
bg= newSwitch(1050,420,35,SETval("bg"),function() newSwitch({name="bg", x=1050, y=420, font=35,disp=SETval("bg"),code=function()
BG.set("none") BG.set("none")
setting.bg=not setting.bg setting.bg=not setting.bg
BG.set("space") BG.set("space")
end,nil,"power"), end}),
power= newSwitch(1050,500,35,SETval("powerInfo"),function() newSwitch({name="power", x=1050, y=500,font=35,disp=SETval("powerInfo"),code=function()
setting.powerInfo=not setting.powerInfo setting.powerInfo=not setting.powerInfo
end,nil,"back"), end}),
back= newButton(1140,650,200,80,C.white,40,BACK,nil,"sound"), newButton({name="back", x=1140, y=650,w=200,h=80,color="white",font=40,code=BACK}),
}, },
setting_sound={ setting_sound={
game= newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_game")end, nil,"graphic"), newButton({name="game", x=200, y=80,w=240,h=80,color="lightCyan",font=35,code=function()SCN.swapTo("setting_game")end}),
graphic=newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_video")end, nil,"sfx"), newButton({name="graphic", x=1080, y=80,w=240,h=80,color="lightCyan",font=35,code=function()SCN.swapTo("setting_video")end}),
sfx= newSlider(180,200,400,10,35,function()SFX.play("blip_1")end, SETval("sfx"), SETsto("sfx"), nil,"stereo"), newSlider({name="sfx", x=180, y=200,w=400,unit=10,font=35,code=function()SFX.play("blip_1")end, disp=SETval("sfx"), code=SETsto("sfx")}),
stereo= newSlider(180,500,400,10,35,function()SFX.play("move",1,-1)SFX.play("lock",1,1)end, SETval("stereo"), SETsto("stereo"),function()return setting.sfx==0 end,"spawn"), newSlider({name="stereo", x=180, y=500,w=400,unit=10,font=35,code=function()SFX.play("move",1,-1)SFX.play("lock",1,1)end, disp=SETval("stereo"), code=SETsto("stereo"),hide=function()return setting.sfx==0 end}),
spawn= newSlider(180,300,400,10,30,function()SFX.play("spawn_1",setting.spawn,nil,true)end,SETval("spawn"), SETsto("spawn"),nil,"bgm"), newSlider({name="spawn", x=180, y=300,w=400,unit=10,font=30,code=function()SFX.play("spawn_1",setting.spawn,nil,true)end, disp=SETval("spawn"), code=SETsto("spawn")}),
bgm= newSlider(180,400,400,10,35,function()BGM.freshVolume()end, SETval("bgm"), SETsto("bgm"), nil,"vib"), newSlider({name="bgm", x=180, y=400,w=400,unit=10,font=35,code=function()BGM.freshVolume()end, disp=SETval("bgm"), code=SETsto("bgm")}),
vib= newSlider(750,200,400,5 ,28,function()VIB(2)end, SETval("vib"), SETsto("vib"), nil,"voc"), newSlider({name="vib", x=750, y=200,w=400,unit=5, font=28,code=function()VIB(2)end, disp=SETval("vib"), code=SETsto("vib")}),
voc= newSlider(750,300,400,10,32,function()VOC.play("nya")end, SETval("voc"), SETsto("voc"), nil,"back"), newSlider({name="voc", x=750, y=300,w=400,unit=10,font=32,code=function()VOC.play("nya")end, disp=SETval("voc"), code=SETsto("voc")}),
back= newButton(1140,650,200,80,C.white,40,BACK,nil,"game"), newButton({name="back", x=1140, y=650,w=200,h=80,color="white",font=40,code=BACK}),
}, },
setting_control={ setting_control={
das= newSlider(226,200,910, 26, 30,nil,SETval("das"), SETsto("das"), nil,"arr"), newSlider({name="das", x=226, y=200,w=910, unit=26, font=30,disp=SETval("das"), code=SETsto("das")}),
arr= newSlider(226,290,525, 15, 30,nil,SETval("arr"), SETsto("arr"), nil,"sddas"), newSlider({name="arr", x=226, y=290,w=525, unit=15, font=30,disp=SETval("arr"), code=SETsto("arr")}),
sddas= newSlider(226,380,350, 10, 30,nil,SETval("sddas"), SETsto("sddas"),nil,"sdarr"), newSlider({name="sddas", x=226, y=380,w=350, unit=10, font=30,disp=SETval("sddas"), code=SETsto("sddas")}),
sdarr= newSlider(226,470,140, 4, 30,nil,SETval("sdarr"), SETsto("sdarr"),nil,"ihs"), newSlider({name="sdarr", x=226, y=470,w=140, unit=4, font=30,disp=SETval("sdarr"), code=SETsto("sdarr")}),
ihs= newSwitch(1100,290,30, SETval("ihs"), SETrev("ihs"),nil,"irs"), newSwitch({name="ihs", x=1100, y=290,font=30, disp=SETval("ihs"), code=SETrev("ihs")}),
irs= newSwitch(1100,380,30, SETval("irs"), SETrev("irs"),nil,"ihs"), newSwitch({name="irs", x=1100, y=380,font=30, disp=SETval("irs"), code=SETrev("irs")}),
ims= newSwitch(1100,470,30, SETval("ims"), SETrev("ims"),nil,"reset"), newSwitch({name="ims", x=1100, y=470,font=30, disp=SETval("ims"), code=SETrev("ims")}),
reset= newButton(160,580,200, 100,C.lightRed,40,function() newButton({name="reset", x=160, y=580,w=200,h=100,color="lightRed",font=40,code=function()
local _=setting local _=setting
_.das,_.arr=10,2 _.das,_.arr=10,2
_.sddas,_.sdarr=0,2 _.sddas,_.sdarr=0,2
_.ihs,_.irs,_.ims=false,false,false _.ihs,_.irs,_.ims=false,false,false
end,nil,"back"), end}),
back= newButton(1140,650,200,80,C.white,40,BACK,nil,"das"), newButton({name="back", x=1140,y=650,w=200,h=80,color="white",font=40,code=BACK}),
}, },
setting_key={ setting_key={
back=newButton(1140,650,200,80,C.white,45,BACK), newButton({name="back", x=1140,y=650,w=200,h=80,color="white",font=45,code=BACK}),
}, },
setting_skin={ setting_skin={
prev= newButton(700,100,140,100,C.white,50,function()SKIN.prevSet()end), newButton({name="prev", x=700,y=100,w=140,h=100,color="white",font=50,code=function()SKIN.prevSet()end}),
next= newButton(860,100,140,100,C.white,50,function()SKIN.nextSet()end), newButton({name="next", x=860,y=100,w=140,h=100,color="white",font=50,code=function()SKIN.nextSet()end}),
prev1= newButton(130,230,90,65,C.white,30,prevSkin(1)), newButton({name="prev1", x=130,y=230,w=90,h=65,color="white",font=30,code=prevSkin(1)}),
prev2= newButton(270,230,90,65,C.white,30,prevSkin(2)), newButton({name="prev2", x=270,y=230,w=90,h=65,color="white",font=30,code=prevSkin(2)}),
prev3= newButton(410,230,90,65,C.white,30,prevSkin(3)), newButton({name="prev3", x=410,y=230,w=90,h=65,color="white",font=30,code=prevSkin(3)}),
prev4= newButton(550,230,90,65,C.white,30,prevSkin(4)), newButton({name="prev4", x=550,y=230,w=90,h=65,color="white",font=30,code=prevSkin(4)}),
prev5= newButton(690,230,90,65,C.white,30,prevSkin(5)), newButton({name="prev5", x=690,y=230,w=90,h=65,color="white",font=30,code=prevSkin(5)}),
prev6= newButton(830,230,90,65,C.white,30,prevSkin(6)), newButton({name="prev6", x=830,y=230,w=90,h=65,color="white",font=30,code=prevSkin(6)}),
prev7= newButton(970,230,90,65,C.white,30,prevSkin(7)), newButton({name="prev7", x=970,y=230,w=90,h=65,color="white",font=30,code=prevSkin(7)}),
next1= newButton(130,450,90,65,C.white,30,nextSkin(1)), newButton({name="next1", x=130,y=450,w=90,h=65,color="white",font=30,code=nextSkin(1)}),
next2= newButton(270,450,90,65,C.white,30,nextSkin(2)), newButton({name="next2", x=270,y=450,w=90,h=65,color="white",font=30,code=nextSkin(2)}),
next3= newButton(410,450,90,65,C.white,30,nextSkin(3)), newButton({name="next3", x=410,y=450,w=90,h=65,color="white",font=30,code=nextSkin(3)}),
next4= newButton(550,450,90,65,C.white,30,nextSkin(4)), newButton({name="next4", x=550,y=450,w=90,h=65,color="white",font=30,code=nextSkin(4)}),
next5= newButton(690,450,90,65,C.white,30,nextSkin(5)), newButton({name="next5", x=690,y=450,w=90,h=65,color="white",font=30,code=nextSkin(5)}),
next6= newButton(830,450,90,65,C.white,30,nextSkin(6)), newButton({name="next6", x=830,y=450,w=90,h=65,color="white",font=30,code=nextSkin(6)}),
next7= newButton(970,450,90,65,C.white,30,nextSkin(7)), newButton({name="next7", x=970,y=450,w=90,h=65,color="white",font=30,code=nextSkin(7)}),
spin1= newButton(130,540,90,65,C.white,30,nextDir(1)), newButton({name="spin1", x=130,y=540,w=90,h=65,color="white",font=30,code=nextDir(1)}),
spin2= newButton(270,540,90,65,C.white,30,nextDir(2)), newButton({name="spin2", x=270,y=540,w=90,h=65,color="white",font=30,code=nextDir(2)}),
spin3= newButton(410,540,90,65,C.white,30,nextDir(3)), newButton({name="spin3", x=410,y=540,w=90,h=65,color="white",font=30,code=nextDir(3)}),
spin4= newButton(550,540,90,65,C.white,30,nextDir(4)), newButton({name="spin4", x=550,y=540,w=90,h=65,color="white",font=30,code=nextDir(4)}),
spin5= newButton(690,540,90,65,C.white,30,nextDir(5)), newButton({name="spin5", x=690,y=540,w=90,h=65,color="white",font=30,code=nextDir(5)}),
--spin6=newButton(825,540,90,65,C.white,30,nextDir(6)),--cannot rotate O --newButton({name="spin6",x=825,y=540,w=90,h=65,color="white",font=30,code=nextDir(6)}),--cannot rotate O
spin7= newButton(970,540,90,65,C.white,30,nextDir(7)), newButton({name="spin7", x=970,y=540,w=90,h=65,color="white",font=30,code=nextDir(7)}),
skinR= newButton(200,640,220,80,C.lightPurple,35,function() newButton({name="skinR", x=200,y=640,w=220,h=80,color="lightPurple",font=35,code=function()
setting.skin={1,5,8,2,10,3,7,1,5,5,1,8,2,10,3,7,10,7,8,2,8,2,1,5,3} setting.skin={1,5,8,2,10,3,7,1,5,5,1,8,2,10,3,7,10,7,8,2,8,2,1,5,3}
SFX.play("rotate") SFX.play("rotate")
end), end}),
faceR= newButton(480,640,220,80,C.lightRed,35,function() newButton({name="faceR", x=480,y=640,w=220,h=80,color="lightRed",font=35,code=function()
for i=1,25 do for i=1,25 do
setting.face[i]=0 setting.face[i]=0
end end
SFX.play("hold") SFX.play("hold")
end), end}),
back= newButton(1140,650,200,80,C.white,40,BACK), newButton({name="back", x=1140,y=650,w=200,h=80,color="white",font=40,code=BACK}),
}, },
setting_touch={ setting_touch={
default=newButton(520,80,170,80,C.white,35,function() newButton({name="default", x=520,y=80,w=170,h=80,color="white",font=35,code=function()
local D=virtualkeySet[sceneTemp.default] local D=virtualkeySet[sceneTemp.default]
for i=1,#VK_org do for i=1,#VK_org do
VK_org[i].ava=false VK_org[i].ava=false
@@ -347,96 +355,98 @@ local Widgets={
end--Replace keys end--Replace keys
sceneTemp.default=sceneTemp.default%5+1 sceneTemp.default=sceneTemp.default%5+1
sceneTemp.sel=nil sceneTemp.sel=nil
end), end}),
snap= newButton(760,80,170,80,C.white,35,function() newButton({name="snap", x=760,y=80,w=170,h=80,color="white",font=35,code=function()
sceneTemp.snap=sceneTemp.snap%6+1 sceneTemp.snap=sceneTemp.snap%6+1
end), end}),
option= newButton(520,180,170,80,C.white,40,function() newButton({name="option", x=520,y=180,w=170,h=80,color="white",font=40,code=function()
SCN.goto("setting_touchSwitch") SCN.goto("setting_touchSwitch")
end), end}),
back= newButton(760,180,170,80,C.white,40,BACK), newButton({name="back", x=760,y=180,w=170,h=80,color="white",font=40,code=BACK}),
size= newSlider(450,265,460,14,40,nil,function() newSlider({name="size", x=450,y=265,w=460,unit=14,font=40,disp=function()
return VK_org[sceneTemp.sel].r/10-1 return VK_org[sceneTemp.sel].r/10-1
end,
function(v)
if sceneTemp.sel then
VK_org[sceneTemp.sel].r=10+v*10
end
end, end,
function()return not sceneTemp.sel end), code=function(v)
if sceneTemp.sel then
VK_org[sceneTemp.sel].r=10+v*10
end
end,
hide=function()
return not sceneTemp.sel
end}),
}, },
setting_touchSwitch={ setting_touchSwitch={
b1= newSwitch(280,80, 35,VKAdisp(1),VKAcode(1)), newSwitch({name="b1", x=280, y=80, font=35,disp=VKAdisp(1),code=VKAcode(1)}),
b2= newSwitch(280,140, 35,VKAdisp(2),VKAcode(2)), newSwitch({name="b2", x=280, y=140, font=35,disp=VKAdisp(2),code=VKAcode(2)}),
b3= newSwitch(280,200, 35,VKAdisp(3),VKAcode(3)), newSwitch({name="b3", x=280, y=200, font=35,disp=VKAdisp(3),code=VKAcode(3)}),
b4= newSwitch(280,260, 35,VKAdisp(4),VKAcode(4)), newSwitch({name="b4", x=280, y=260, font=35,disp=VKAdisp(4),code=VKAcode(4)}),
b5= newSwitch(280,320, 35,VKAdisp(5),VKAcode(5)), newSwitch({name="b5", x=280, y=320, font=35,disp=VKAdisp(5),code=VKAcode(5)}),
b6= newSwitch(280,380, 35,VKAdisp(6),VKAcode(6)), newSwitch({name="b6", x=280, y=380, font=35,disp=VKAdisp(6),code=VKAcode(6)}),
b7= newSwitch(280,440, 35,VKAdisp(7),VKAcode(7)), newSwitch({name="b7", x=280, y=440, font=35,disp=VKAdisp(7),code=VKAcode(7)}),
b8= newSwitch(280,500, 35,VKAdisp(8),VKAcode(8)), newSwitch({name="b8", x=280, y=500, font=35,disp=VKAdisp(8),code=VKAcode(8)}),
b9= newSwitch(280,560, 35,VKAdisp(9),VKAcode(9)), newSwitch({name="b9", x=280, y=560, font=35,disp=VKAdisp(9),code=VKAcode(9)}),
b10= newSwitch(280,620, 35,VKAdisp(10),VKAcode(10)), newSwitch({name="b10", x=280, y=620, font=35,disp=VKAdisp(10),code=VKAcode(10)}),
b11= newSwitch(620,80, 35,VKAdisp(11),VKAcode(11)), newSwitch({name="b11", x=620, y=80, font=35,disp=VKAdisp(11),code=VKAcode(11)}),
b12= newSwitch(620,140, 35,VKAdisp(12),VKAcode(12)), newSwitch({name="b12", x=620, y=140, font=35,disp=VKAdisp(12),code=VKAcode(12)}),
b13= newSwitch(620,200, 35,VKAdisp(13),VKAcode(13)), newSwitch({name="b13", x=620, y=200, font=35,disp=VKAdisp(13),code=VKAcode(13)}),
b14= newSwitch(620,260, 35,VKAdisp(14),VKAcode(14)), newSwitch({name="b14", x=620, y=260, font=35,disp=VKAdisp(14),code=VKAcode(14)}),
b15= newSwitch(620,320, 35,VKAdisp(15),VKAcode(15)), newSwitch({name="b15", x=620, y=320, font=35,disp=VKAdisp(15),code=VKAcode(15)}),
b16= newSwitch(620,380, 35,VKAdisp(16),VKAcode(16)), newSwitch({name="b16", x=620, y=380, font=35,disp=VKAdisp(16),code=VKAcode(16)}),
b17= newSwitch(620,440, 35,VKAdisp(17),VKAcode(17)), newSwitch({name="b17", x=620, y=440, font=35,disp=VKAdisp(17),code=VKAcode(17)}),
b18= newSwitch(620,500, 35,VKAdisp(18),VKAcode(18)), newSwitch({name="b18", x=620, y=500, font=35,disp=VKAdisp(18),code=VKAcode(18)}),
b19= newSwitch(620,560, 35,VKAdisp(19),VKAcode(19)), newSwitch({name="b19", x=620, y=560, font=35,disp=VKAdisp(19),code=VKAcode(19)}),
b20= newSwitch(620,620, 35,VKAdisp(20),VKAcode(20)), newSwitch({name="b20", x=620, y=620, font=35,disp=VKAdisp(20),code=VKAcode(20)}),
norm= newButton(840,100, 240,80,C.white,35,function()for i=1,20 do VK_org[i].ava=i<11 end end), newButton({name="norm", x=840, y=100, w=240,h=80,color="white",font=35,code=function()for i=1,20 do VK_org[i].ava=i<11 end end}),
pro= newButton(1120,100, 240,80,C.white,35,function()for i=1,20 do VK_org[i].ava=true end end), newButton({name="pro", x=1120, y=100, w=240,h=80,color="white",font=35,code=function()for i=1,20 do VK_org[i].ava=true end end}),
hide= newSwitch(1170,200, 40,SETval("VKSwitch"),SETrev("VKSwitch")), newSwitch({name="hide", x=1170, y=200, font=40,disp=SETval("VKSwitch"),code=SETrev("VKSwitch")}),
track= newSwitch(1170,300, 35,SETval("VKTrack"),SETrev("VKTrack")), newSwitch({name="track", x=1170, y=300, font=35,disp=SETval("VKTrack"),code=SETrev("VKTrack")}),
sfx= newSlider(800,380,180,4,40,function()SFX.play("virtualKey",setting.VKSFX*.25)end,SETval("VKSFX"),SETsto("VKSFX")), newSlider({name="sfx", x=800, y=380, w=180,unit=4,font=40,change=function()SFX.play("virtualKey",setting.VKSFX*.25)end,disp=SETval("VKSFX"),code=SETsto("VKSFX")}),
vib= newSlider(800,460,180,2,40,function()VIB(setting.VKVIB)end,SETval("VKVIB"),SETsto("VKVIB")), newSlider({name="vib", x=800, y=460, w=180,unit=2,font=40,change=function()VIB(setting.VKVIB)end,disp=SETval("VKVIB"),code=SETsto("VKVIB")}),
icon= newSwitch(850,300, 40,SETval("VKIcon"),SETrev("VKIcon")), newSwitch({name="icon", x=850, y=300, font=40,disp=SETval("VKIcon"),code=SETrev("VKIcon")}),
tkset= newButton(1120,420,240,80,C.white,32,function() newButton({name="tkset", x=1120, y=420, w=240,h=80,color="white",font=32,code=function()
SCN.goto("setting_trackSetting") SCN.goto("setting_trackSetting")
end,function()return not setting.VKTrack end), end,hide=function()return not setting.VKTrack end}),
alpha= newSlider(840,540,400,10,40,nil,SETval("VKAlpha"),SETsto("VKAlpha")), newSlider({name="alpha", x=840, y=540, w=400,unit=10,font=40,disp=SETval("VKAlpha"),code=SETsto("VKAlpha")}),
back= newButton(1120,620,200,80,C.white,45,BACK), newButton({name="back", x=1120, y=620, w=200,h=80,color="white",font=45,code=BACK}),
}, },
setting_trackSetting={ setting_trackSetting={
VKDodge=newSwitch(400,200, 35,SETval("VKDodge"),SETrev("VKDodge")), newSwitch({name="VKDodge", x=400, y=200, font=35,SETval("VKDodge"),SETrev("VKDodge")}),
VKTchW= newSlider(140,310,1000,10,35,nil,SETval("VKTchW"),function(i)setting.VKTchW=i;setting.VKCurW=math.max(setting.VKCurW,i)end), newSlider({name="VKTchW", x=140, y=310, w=1000, unit=10,font=35,disp=SETval("VKTchW"),code=function(i)setting.VKTchW=i;setting.VKCurW=math.max(setting.VKCurW,i)end}),
VKCurW= newSlider(140,370,1000,10,35,nil,SETval("VKCurW"),function(i)setting.VKCurW=i;setting.VKTchW=math.min(setting.VKTchW,i)end), newSlider({name="VKCurW", x=140, y=370, w=1000, unit=10,font=35,disp=SETval("VKCurW"),code=function(i)setting.VKCurW=i;setting.VKTchW=math.min(setting.VKTchW,i)end}),
back= newButton(1080,600,240,80,C.white,45,BACK), newButton({name="back", x=1080, y=600, w=240, h=80,color="white",font=45,code=BACK}),
}, },
setting_lang={ setting_lang={
chi= newButton(160,100,200,120,C.white,45,setLang(1),nil,"chi2"), newButton({name="chi", x=160, y=100,w=200,h=120,color="white",font=45,code=setLang(1)}),
chi2= newButton(380,100,200,120,C.white,45,setLang(2),nil,"eng"), newButton({name="chi2", x=380, y=100,w=200,h=120,color="white",font=45,code=setLang(2)}),
eng= newButton(600,100,200,120,C.white,45,setLang(3),nil,"str"), newButton({name="eng", x=600, y=100,w=200,h=120,color="white",font=45,code=setLang(3)}),
str= newButton(820,100,200,120,C.white,45,setLang(4),nil,"back"), newButton({name="str", x=820, y=100,w=200,h=120,color="white",font=45,code=setLang(4)}),
back= newButton(640,600,200,80,C.white,40,BACK,nil,"chi"), newButton({name="back", x=640, y=600,w=200,h=80,color="white",font=40,code=BACK}),
}, },
help={ help={
staff= newButton(980,500,150,80,C.white,32,function()SCN.goto("staff")end,nil,"his"), newButton({name="staff", x=980, y=500,w=150,h=80,color="white",font=32,code=function()SCN.goto("staff")end}),
his= newButton(1160,500,150,80,C.white,32,function()SCN.goto("history")end,nil,"qq"), newButton({name="his", x=1160, y=500,w=150,h=80,color="white",font=32,code=function()SCN.goto("history")end}),
qq= newButton(1070,600,200,80,C.white,32,function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,mobileHide,"back"), newButton({name="qq", x=1070, y=600,w=200,h=80,color="white",font=32,code=function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,hide=mobileHide}),
back= newButton(640,600,200,80,C.white,40,BACK,nil,"staff"), newButton({name="back", x=640, y=600,w=200,h=80,color="white",font=40,code=BACK}),
}, },
staff={ staff={
back= newButton(1160,630,150,80,C.white,40,BACK), newButton({name="back", x=1160, y=630,w=150,h=80,color="white",font=40,code=BACK}),
}, },
history={ history={
prev= newButton(1155,170,180,180,C.white,65,pressKey("up"),function()return sceneTemp[2]==1 end), newButton({name="prev", x=1155, y=170,w=180,h=180,color="white",font=65,code=pressKey("up"),hide=function()return sceneTemp[2]==1 end}),
next= newButton(1155,400,180,180,C.white,65,pressKey("down"),function()return sceneTemp[2]==#sceneTemp[1]end), newButton({name="next", x=1155, y=400,w=180,h=180,color="white",font=65,code=pressKey("down"),hide=function()return sceneTemp[2]==#sceneTemp[1]end}),
back= newButton(1155,600,180,90,C.white,40,BACK), newButton({name="back", x=1155, y=600,w=180,h=90,color="white",font=40,code=BACK}),
}, },
stat={ stat={
path= newButton(980,620,250,80,C.white,25,function()love.system.openURL(love.filesystem.getSaveDirectory())end,mobileHide,"back"), newButton({name="path", x=980, y=620,w=250,h=80,color="white",font=25,code=function()love.system.openURL(love.filesystem.getSaveDirectory())end,hide=mobileHide}),
back= newButton(640,620,200,80,C.white,40,BACK,nil,"path"), newButton({name="back", x=640, y=620,w=200,h=80,color="white",font=40,code=BACK}),
}, },
debug={ debug={
killWTM=newButton(340,200,260,100,C.white,35,function() newButton({name="killWTM", x=340, y=200,w=260,h=100,color="white",font=35,code=function()
marking=nil marking=nil
TEXT.show("\68\69\86\58\87\97\116\101\114\109\97\114\107\32\82\101\109\111\118\101\100",640,360,60,"stretch",.6) TEXT.show("\68\69\86\58\87\97\116\101\114\109\97\114\107\32\82\101\109\111\118\101\100",640,360,60,"stretch",.6)
SFX.play("clear") SFX.play("clear")
end), end}),
unlock= newButton(640,200,260,100,C.white,40,function() newButton({name="unlock", x=640,y=200,w=260,h=100,color="white",font=40,code=function()
for name,M in next,Modes do for name,M in next,Modes do
if not modeRanks[name]then if not modeRanks[name]then
modeRanks[name]=M.score and 0 or 6 modeRanks[name]=M.score and 0 or 6
@@ -445,8 +455,8 @@ local Widgets={
FILE.saveUnlock() FILE.saveUnlock()
TEXT.show("\68\69\86\58\85\78\76\79\67\75\65\76\76",640,360,60,"stretch",.6) TEXT.show("\68\69\86\58\85\78\76\79\67\75\65\76\76",640,360,60,"stretch",.6)
SFX.play("clear_2") SFX.play("clear_2")
end), end}),
reset= newButton(940,200,260,100,C.white,40,function() newButton({name="reset", x=940,y=200,w=260,h=100,color="white",font=40,code=function()
sceneTemp.ct=sceneTemp.ct+1 sceneTemp.ct=sceneTemp.ct+1
if sceneTemp.ct==1 then if sceneTemp.ct==1 then
TEXT.show("RESET ALL DATA?",640,360,50,"appear",.5) TEXT.show("RESET ALL DATA?",640,360,50,"appear",.5)
@@ -465,20 +475,14 @@ local Widgets={
TEXT.show("ALL SAVING FILE DELETED",640,360,60,"stretch",.4) TEXT.show("ALL SAVING FILE DELETED",640,360,60,"stretch",.4)
SCN.back() SCN.back()
end end
end), end}),
back= newButton(640,620,200,80,C.white,40,BACK), newButton({name="back", x=640,y=620,w=200,h=80,color="white",font=40,code=BACK}),
}, },
} }
--Remove temp vars
mobileHide,SETval,SETsto,SETrev=nil mobileHide,SETval,SETsto,SETrev=nil
pressKey,setPen,prevSkin,nextSkin=nil pressKey,setPen,prevSkin,nextSkin=nil
nextDir,VKAdisp,VKAcode,setLang=nil nextDir,VKAdisp,VKAcode,setLang=nil
newButton,newSwitch,newSlider=nil newText,newImage,newButton,newSwitch,newSlider=nil
for _,L in next,Widgets do
for _,W in next,L do
if W.next then
W.next,L[W.next].prev=L[W.next],W
end
end
end
return Widgets return Widgets

View File

@@ -86,6 +86,16 @@ if fs.getInfo("virtualkey.dat")then FILE.loadVK()end
--update data file --update data file
S=stat S=stat
while #modeRanks>73 do
table.remove(modeRanks)
end
if modeRanks[73]==6 then modeRanks[73]=0 end
if modeRanks[1]then--rename key of modeRanks
local L=modeRanks
for i=1,#L do
L[Modes[i].name],L[i]=L[i]
end
end
if S.version=="Alpha V0.9.1"then if S.version=="Alpha V0.9.1"then
setting.spawn=0 setting.spawn=0
end end

View File

@@ -7,12 +7,12 @@ if setting.lang==1 or setting.lang==2 then
"tetr.io 也很好玩!", "tetr.io 也很好玩!",
"Techminohaowan", "Techminohaowan",
"Techmino 好玩!", "Techmino 好玩!",
"S T S D 必 ", "STSD必",
"REGRET!!", "REGRET!!",
"osu好玩!", "osu好玩!",
"O spin Triple!", "O spin Triple!",
"nullpomino 也很好玩!", "nullpomino 也很好玩!",
"Naki 可爱!", "Naki 可爱",
"Miya:喵!", "Miya:喵!",
"Miya 可爱!", "Miya 可爱!",
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF", "LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
@@ -59,6 +59,7 @@ if setting.lang==1 or setting.lang==2 then
"戴上耳机以获得最佳体验", "戴上耳机以获得最佳体验",
"大满贯10连击消四全清!", "大满贯10连击消四全清!",
"车车人在此", "车车人在此",
"茶娘可爱",
"草(日本语)", "草(日本语)",
"不要在上课时玩游戏!", "不要在上课时玩游戏!",
"不要盯着bug不放", "不要盯着bug不放",
@@ -67,6 +68,8 @@ if setting.lang==1 or setting.lang==2 then
"本游戏难度上限很高, 做好心理准备", "本游戏难度上限很高, 做好心理准备",
"本游戏可不是休闲游戏", "本游戏可不是休闲游戏",
"啊这,不会吧不会吧", "啊这,不会吧不会吧",
"626r/s",
"40行世界纪录:15.654s",
"3.1415926535897932384", "3.1415926535897932384",
"26连T2来一个?", "26连T2来一个?",
"20G本质是一套全新的游戏规则", "20G本质是一套全新的游戏规则",
@@ -77,8 +80,8 @@ if setting.lang==1 or setting.lang==2 then
"11renPC!", "11renPC!",
"<方块研究所>有一个Nspire-CX版本!", "<方块研究所>有一个Nspire-CX版本!",
"↑↑↓↓←→←→BABA", "↑↑↓↓←→←→BABA",
'"免费吃鸡方块"',
"(RUR'U')R'FR2U'R'U'(RUR'F')", "(RUR'U')R'FR2U'R'U'(RUR'F')",
'"免费吃鸡方块"',
} }
elseif setting.lang==3 then elseif setting.lang==3 then
L={ L={
@@ -110,7 +113,6 @@ elseif setting.lang==3 then
"O spin triple!", "O spin triple!",
"Nothing will happen when some special day come", "Nothing will happen when some special day come",
"Not animation,real loading!", "Not animation,real loading!",
"Naki so cute!",
"Miya:Nya!", "Miya:Nya!",
"Miya so cute!", "Miya so cute!",
"Minesweeper is fun!", "Minesweeper is fun!",
@@ -146,6 +148,7 @@ elseif setting.lang==3 then
"Also try jstris!", "Also try jstris!",
"ALLSPIN!", "ALLSPIN!",
"少女祈禱中", "少女祈禱中",
"40L WR: 15.654s",
"3.1415926535897932384", "3.1415926535897932384",
"225238922 Bilibili cheers!", "225238922 Bilibili cheers!",
"20G actually is a brand new game rule", "20G actually is a brand new game rule",

View File

@@ -1360,7 +1360,7 @@ function player.hold(P,ifpre)
P.pieceCount=P.pieceCount+1 P.pieceCount=P.pieceCount+1
if P.AI_mode=="CC"then if P.AI_mode=="CC"then
local next=P.next[P.AIdata.next] local next=P.next[P.AIdata.next]
if id then if next then
BOT.addNext(P.AI_bot,CCblockID[next.id]) BOT.addNext(P.AI_bot,CCblockID[next.id])
end end
end end
@@ -1398,7 +1398,7 @@ function player.popNext(P)--pop next queue to hand
P.pieceCount=P.pieceCount+1 P.pieceCount=P.pieceCount+1
if P.AI_mode=="CC"then if P.AI_mode=="CC"then
local next=P.next[P.AIdata.next] local next=P.next[P.AIdata.next]
if id then if next then
BOT.addNext(P.AI_bot,CCblockID[next.id]) BOT.addNext(P.AI_bot,CCblockID[next.id])
end end
end end

View File

@@ -73,6 +73,8 @@ Future outlook:
new: new:
debug page debug page
independent spawning volume setting independent spawning volume setting
select widgets with arrow keys
display last played mode on title screen
change: change:
three little better backgrounds instead of stupid rainbow three little better backgrounds instead of stupid rainbow
kick list of i-piece little changed kick list of i-piece little changed