Compare commits

...

1 Commits

Author SHA1 Message Date
MrZ_26
c1b334963b 0.8.3α 2020-02-04 19:41:15 +08:00
25 changed files with 238 additions and 214 deletions

Binary file not shown.

Binary file not shown.

BIN
VOICE/nya_happy_4.ogg Normal file

Binary file not shown.

BIN
VOICE/nya_sad_1.ogg Normal file

Binary file not shown.

View File

@@ -53,37 +53,29 @@ end
function button:draw() function button:draw()
local x,y,w,h=self.x,self.y,self.w,self.h local x,y,w,h=self.x,self.y,self.w,self.h
local r,g,b=unpack(self.color) local r,g,b=unpack(self.color)
gc.setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7)
local sd=shader_glow
sd:send("X",x)sd:send("Y",y)sd:send("W",w)sd:send("H",h)
gc.setShader(sd)
gc.rectangle("fill",x,y,w,h)
gc.setShader()
if self==widget_sel then if self==widget_sel then
gc.setColor(r*.7,g*.7,b*.7) gc.setLineWidth(4)
gc.rectangle("fill",x,y,w,h) gc.setColor(1,1,1,.8)
x,y,w,h=x+w,y+h,-w,-h gc.rectangle("line",x+2,y+2,w-4,h-4)
else
gc.setColor(r*.9,g*.9,b*.9)
gc.rectangle("fill",x,y,w,h)
end
gc.setLineWidth(3)
gc.setColor(.4+r*.6,.4+g*.6,.4+b*.6)
gc.line(x,y+h,x,y,x+w,y)
gc.setColor(r*.6,g*.6,b*.6)
gc.line(x,y+h,x+w,y+h,x+w,y)
if self==widget_sel then
x,y,w,h=x+w,y+h,-w,-h
end end
local t=self.text local t=self.text
if t then if t then
if type(t)=="function"then t=t()end if type(t)=="function"then t=t()end
setFont(self.font) setFont(self.font)
local y0=y+h*.5-self.font*.7 local y0=y+h*.5-self.font*.7
gc.setColor(1,1,1,.5) gc.setColor(1,1,1,.3)
if self==widget_sel then gc.printf(t,x-2,y0-2,w,"center")
gc.printf(t,x+2,y0+1,w,"center") gc.printf(t,x-2,y0+2,w,"center")
gc.setColor(r*.5,g*.5,b*.5) gc.printf(t,x+2,y0-2,w,"center")
gc.printf(t,x,y0,w,"center") gc.printf(t,x+2,y0+2,w,"center")
else gc.setColor(r*.5,g*.5,b*.5)
gc.printf(t,x,y0-1,w,"center") gc.printf(t,x,y0,w,"center")
gc.setColor(r*.6,g*.6,b*.6)
gc.printf(t,x-2,y0-2,w,"center")
end
end end
end end
function button:getInfo() function button:getInfo()
@@ -116,17 +108,11 @@ 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--checked end--checked
if self==widget_sel then gc.setColor(1,1,1,self==widget_sel and .6 or .3)
gc.setColor(1,1,1,.4)
else
gc.setColor(1,1,1,.2)
end
gc.rectangle("fill",x,y,50,50) gc.rectangle("fill",x,y,50,50)
gc.setLineWidth(3) gc.setLineWidth(4)
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.line(x,y+50,x,y,x+50,y) gc.rectangle("line",x,y,50,50)
gc.setColor(1,1,1,.7)
gc.line(x,y+50,x+50,y+50,x+50,y)
--frame --frame
local t=self.text local t=self.text
if t then if t then
@@ -161,7 +147,7 @@ function slider:FX(pos)
end end
function slider:draw() function slider:draw()
local x,y=self.x,self.y local x,y=self.x,self.y
gc.setColor(1,1,1,self==widget_sel and 1 or .5) gc.setColor(1,1,1,self==widget_sel and .7 or .5)
gc.setLineWidth(2) gc.setLineWidth(2)
local x1,x2=x,x+self.w local x1,x2=x,x+self.w
for p=0,self.unit do for p=0,self.unit do
@@ -169,7 +155,7 @@ function slider:draw()
gc.line(x,y+7,x,y-7) gc.line(x,y+7,x,y-7)
end end
--units --units
gc.setLineWidth(5) gc.setLineWidth(4)
gc.line(x1,y,x2,y) gc.line(x1,y,x2,y)
--axis --axis
local t=self.text local t=self.text
@@ -179,14 +165,14 @@ function slider:draw()
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 --text
local x,y=x1+(x2-x1)*self.disp()/self.unit-8,y-15 local x,y=x1+(x2-x1)*self.disp()/self.unit-9,y-16
gc.setColor(.8,.8,.8) gc.setColor(.8,.8,.8)
gc.rectangle("fill",x,y,17,30) gc.rectangle("fill",x,y,19,32)
gc.setLineWidth(2) if self==widget_sel then
gc.setColor(.5,.5,.5) gc.setLineWidth(2)
gc.line(x,y+30,x+17,y+30,x+17,y) gc.setColor(1,1,1)
gc.setColor(1,1,1) gc.rectangle("line",x+1,y+1,18,30)
gc.line(x,y+30,x,y,x+17,y) end
--block --block
end end
function slider:getInfo() function slider:getInfo()

View File

@@ -1,13 +1,12 @@
math.randomseed(os.time()) gameVersion="Alpha V0.8.3"
gameVersion="Alpha V0.8.2+"
function love.conf(t) function love.conf(t)
t.identity="Techmino"--Save directory name t.identity="Techmino"--Save directory name
t.version="11.1" t.version="11.1"
t.console=X t.console=X
t.gammacorrect=X t.gammacorrect=X
t.appendidentity=X--If search files in source before save directory t.appendidentity=X--Search files in source before save directory
t.accelerometerjoystick=X--If exposing accelerometer on iOS and Android as a Joystick t.accelerometerjoystick=false--ios/android加速度计=摇杆
t.audio.mixwithsystem=true--Switch on to keep sysBGM t.audio.mixwithsystem=true
local W=t.window local W=t.window
W.title="Techmino "..gameVersion W.title="Techmino "..gameVersion
@@ -21,7 +20,7 @@ function love.conf(t)
W.vsync=0--0→∞fps W.vsync=0--0→∞fps
W.msaa=X--The number of samples to use with multi-sampled antialiasing (number) W.msaa=X--The number of samples to use with multi-sampled antialiasing (number)
W.depth=X--Bits per sample in the depth buffer W.depth=X--Bits per sample in the depth buffer
W.stencil=1--The number of bits per sample in the stencil buffer W.stencil=1--Bits per sample in the stencil buffer
W.display=1--Monitor ID W.display=1--Monitor ID
W.highdpi=X--Enable high-dpi mode for the window on a Retina display (boolean) W.highdpi=X--Enable high-dpi mode for the window on a Retina display (boolean)
W.x,W.y=nil W.x,W.y=nil

BIN
font.ttf

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View File

@@ -308,8 +308,8 @@ return{
}, },
setting_touch={ setting_touch={
default="默认组合", default="默认组合",
snap=function()return text.snapLevelName[snapLevel]end, snap=function()return text.snapLevelName[sceneTemp.snap]end,
more="更多", option="选项",
back=BK, back=BK,
size="大小", size="大小",
}, },

View File

@@ -309,8 +309,8 @@ return{
}, },
setting_touch={ setting_touch={
default="默认组合", default="默认组合",
snap=function()return text.snapLevelName[snapLevel]end, snap=function()return text.snapLevelName[sceneTemp.snap]end,
more="更多", option="选项",
back=BK, back=BK,
size="大小", size="大小",
}, },

View File

@@ -307,8 +307,8 @@ Lib used:
}, },
setting_touch={ setting_touch={
default="Defaults", default="Defaults",
snap=function()return text.snapLevelName[snapLevel]end, snap=function()return text.snapLevelName[sceneTemp.snap]end,
more="More", option="Option",
back=BK, back=BK,
size="Size", size="Size",
}, },

View File

@@ -96,7 +96,10 @@ voiceName={
"mini","b2b","b3b","pc", "mini","b2b","b3b","pc",
"win","lose", "win","lose",
"bye", "bye",
"nya","voc_nya", "nya",
"happy",
"doubt",
"sad",
"egg", "egg",
} }
voiceList={ voiceList={
@@ -121,7 +124,9 @@ voiceList={
lose={"lose_1","lose_2","lose_3"}, lose={"lose_1","lose_2","lose_3"},
bye={"bye_1","bye_2"}, bye={"bye_1","bye_2"},
nya={"nya_1","nya_2","nya_3","nya_4"}, nya={"nya_1","nya_2","nya_3","nya_4"},
voc_nya={"nya_11","nya_12","nya_13","nya_21","nya_22"}, happy={"nya_happy_1","nya_happy_2","nya_happy_3","nya_happy_4"},
doubt={"nya_doubt_1","nya_doubt_2"},
sad={"nya_sad_1"},
egg={"egg_1","egg_2"}, egg={"egg_1","egg_2"},
} }
@@ -239,26 +244,26 @@ local virtualkeySet={
{10,80, 320, 80},--restart {10,80, 320, 80},--restart
},--Keyboard set },--Keyboard set
{ {
{10,70, 50,27},--restart {10,70, 50,30},--restart
{9, 130, 50,27},--func {9, 130, 50,30},--func
{4, 190, 50,27},--rotLeft {4, 190, 50,30},--rotLeft
{3, 250, 50,27},--rotRight {3, 250, 50,30},--rotRight
{5, 310, 50,27},--rotFlip {5, 310, 50,30},--rotFlip
{1, 370, 50,27},--moveLeft {1, 370, 50,30},--moveLeft
{2, 430, 50,27},--moveRight {2, 430, 50,30},--moveRight
{8, 490, 50,27},--hold {8, 490, 50,30},--hold
{7, 550, 50,27},--softDrop1 {7, 550, 50,30},--softDrop1
{6, 610, 50,27},--hardDrop {6, 610, 50,30},--hardDrop
{11,670, 50,27},--insLeft {11,670, 50,30},--insLeft
{12,730, 50,27},--insRight {12,730, 50,30},--insRight
{13,790, 50,27},--insDown {13,790, 50,30},--insDown
{14,850, 50,27},--down1 {14,850, 50,30},--down1
{15,910, 50,27},--down4 {15,910, 50,30},--down4
{16,970, 50,27},--down10 {16,970, 50,30},--down10
{17,1030, 50,27},--dropLeft {17,1030, 50,30},--dropLeft
{18,1090, 50,27},--dropRight {18,1090, 50,30},--dropRight
{19,1150, 50,27},--addLeft {19,1150, 50,30},--addLeft
{20,1210, 50,27},--addRight {20,1210, 50,30},--addRight
},--PC key feedback(top&in a row) },--PC key feedback(top&in a row)
} }
local customSet={ local customSet={
@@ -297,7 +302,7 @@ local function pressKey(k)
end end
local function setPen(i) local function setPen(i)
return function() return function()
pen=i sceneTemp.pen=i
end end
end end
local function VKAdisp(n) local function VKAdisp(n)
@@ -357,8 +362,8 @@ Widget={
back= newButton(640, 630,230,90, C.white,40,scene.back), back= newButton(640, 630,230,90, C.white,40,scene.back),
}, },
custom={ custom={
up= newButton(1000, 220,100,100,C.white, 45,function()sel=(sel-2)%#customID+1 end), up= newButton(1000, 220,100,100,C.white, 45,function()sceneTemp=(sceneTemp-2)%#customID+1 end),
down= newButton(1000, 460,100,100,C.white, 45,function()sel=sel%#customID+1 end), down= newButton(1000, 460,100,100,C.white, 45,function()sceneTemp=sceneTemp%#customID+1 end),
left= newButton(880, 340,100,100,C.white, 45,pressKey("left")), left= newButton(880, 340,100,100,C.white, 45,pressKey("left")),
right= newButton(1120, 340,100,100,C.white, 45,pressKey("right")), right= newButton(1120, 340,100,100,C.white, 45,pressKey("right")),
start1= newButton(880, 580,220,70, C.lightGreen, 35,function()scene.push()loadGame(0,1)end), start1= newButton(880, 580,220,70, C.lightGreen, 35,function()scene.push()loadGame(0,1)end),
@@ -495,37 +500,38 @@ Widget={
}, },
setting_touch={ setting_touch={
default=newButton(520,80,170,80,C.white,35,function() default=newButton(520,80,170,80,C.white,35,function()
local D=virtualkeySet[defaultSel] 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
end
for n=1,#D do
local T=D[n]
if T[1]then
local B=VK_org[n]
B.ava=true
B.x,B.y,B.r=T[2],T[3],T[4]
end end
for n=1,#D do end--Replace keys
local T=D[n] sceneTemp.default=sceneTemp.default%5+1
if T[1]then sceneTemp.sel=nil
local B=VK_org[n]
B.ava=true
B.x,B.y,B.r=T[2],T[3],T[4]
end
end--Replace keys
defaultSel=defaultSel%5+1
end), end),
snap= newButton(760,80,170,80,C.white,35,function() snap= newButton(760,80,170,80,C.white,35,function()
snapLevel=snapLevel%6+1 sceneTemp.snap=sceneTemp.snap%6+1
end), end),
more= newButton(520,180,170,80,C.white,40,function() option= newButton(520,180,170,80,C.white,40,function()
scene.push() scene.push()
scene.swapTo("setting_touchSwitch") scene.swapTo("setting_touchSwitch")
end), end),
back= newButton(760,180,170,80,C.white,40,scene.back), back= newButton(760,180,170,80,C.white,40,scene.back),
size= newSlider(360,120,560,14,40,nil,function() size= newSlider(450,265,460,14,40,nil,function()
return VK_org[sel].r/10-1 return VK_org[sceneTemp.sel].r/10-1
end, end,
function(v) function(v)
if sel then if sceneTemp.sel then
VK_org[sel].r=10+v*10 VK_org[sceneTemp.sel].r=10+v*10
end end
end, end,
function()return not sel end), function()return not sceneTemp.sel end),
}, },
setting_touchSwitch={ setting_touchSwitch={
b1= newSwitch(280,80, 35,VKAdisp(1),VKAcode(1)), b1= newSwitch(280,80, 35,VKAdisp(1),VKAcode(1)),
@@ -572,8 +578,8 @@ Widget={
back= newButton(640, 600,180,60,C.white,35,scene.back,nil,"qq"), back= newButton(640, 600,180,60,C.white,35,scene.back,nil,"qq"),
}, },
history={ history={
prev= newButton(1155,170,180,180,C.white,65,pressKey("up"),function()return sel==1 end), prev= newButton(1155,170,180,180,C.white,65,pressKey("up"),function()return sceneTemp==1 end),
next= newButton(1155,400,180,180,C.white,65,pressKey("down"),function()return sel==#updateLog-22 end), next= newButton(1155,400,180,180,C.white,65,pressKey("down"),function()return sceneTemp==#updateLog-22 end),
back= newButton(1155,600,180,90,C.white,35,scene.back), back= newButton(1155,600,180,90,C.white,35,scene.back),
}, },
stat={ stat={

148
main.lua
View File

@@ -1,7 +1,6 @@
--[[ --[[
第一次搞这么大的工程~参考价值不是很大 第一次搞这么大的工程,参考价值不是很大
如果你有时间并且也热爱俄罗斯方块的话来看代码或者帮助优化的话当然欢迎 如果你有时间并且也热爱俄罗斯方块的话,来看代码或者帮助优化的话欢迎!
(顺便,无授权直接盗代码的先死个妈)
]] ]]
local love=love local love=love
local ms,kb,tc=love.mouse,love.keyboard,love.touch local ms,kb,tc=love.mouse,love.keyboard,love.touch
@@ -71,6 +70,7 @@ require("light")
local Tmr=require("timer") local Tmr=require("timer")
local Pnt=require("paint") local Pnt=require("paint")
require("player") require("player")
require("shader")
--Modules --Modules
------------------------------------------------------------- -------------------------------------------------------------
local powerInfoCanvas,updatePowerInfo local powerInfoCanvas,updatePowerInfo
@@ -246,12 +246,12 @@ function wheelmoved.music(x,y)
end end
function keyDown.music(key) function keyDown.music(key)
if key=="down"then if key=="down"then
sel=sel%#musicID+1 sceneTemp=sceneTemp%#musicID+1
elseif key=="up"then elseif key=="up"then
sel=(sel-2)%#musicID+1 sceneTemp=(sceneTemp-2)%#musicID+1
elseif key=="return"or key=="space"then elseif key=="return"or key=="space"then
if bgmPlaying~=musicID[sel]then if bgmPlaying~=musicID[sceneTemp]then
BGM(musicID[sel]) BGM(musicID[sceneTemp])
else else
BGM() BGM()
end end
@@ -261,6 +261,7 @@ function keyDown.music(key)
end end
function keyDown.custom(key) function keyDown.custom(key)
local sel=sceneTemp
if key=="left"then if key=="left"then
customSel[sel]=(customSel[sel]-2)%#customRange[customID[sel]]+1 customSel[sel]=(customSel[sel]-2)%#customRange[customID[sel]]+1
if sel==12 then if sel==12 then
@@ -276,9 +277,9 @@ function keyDown.custom(key)
BGM(customRange.bgm[customSel[sel]]) BGM(customRange.bgm[customSel[sel]])
end end
elseif key=="down"then elseif key=="down"then
sel=sel%#customID+1 sceneTemp=sel%#customID+1
elseif key=="up"then elseif key=="up"then
sel=(sel-2)%#customID+1 sceneTemp=(sel-2)%#customID+1
elseif key=="d"then elseif key=="d"then
scene.push() scene.push()
scene.swapTo("draw") scene.swapTo("draw")
@@ -305,14 +306,16 @@ function mouseDown.draw(x,y,k)
mouseMove.draw(x,y) mouseMove.draw(x,y)
end end
function mouseMove.draw(x,y,dx,dy) function mouseMove.draw(x,y,dx,dy)
sx,sy=int((x-200)/30)+1,20-int((y-60)/30) local sx,sy=int((x-200)/30)+1,20-int((y-60)/30)
if sx<1 or sx>10 then sx=nil end if sx<1 or sx>10 then sx=nil end
if sy<1 or sy>20 then sy=nil end if sy<1 or sy>20 then sy=nil end
sceneTemp.x,sceneTemp.y=sx,sy
if sx and sy and ms.isDown(1,2,3)then if sx and sy and ms.isDown(1,2,3)then
preField[sy][sx]=ms.isDown(1)and pen or ms.isDown(2)and -1 or 0 preField[sy][sx]=ms.isDown(1)and sceneTemp.pen or ms.isDown(2)and -1 or 0
end end
end end
function wheelmoved.draw(x,y) function wheelmoved.draw(x,y)
local pen=sceneTemp.pen
if y<0 then if y<0 then
pen=pen+1 pen=pen+1
if pen==8 then pen=9 elseif pen==14 then pen=0 end if pen==8 then pen=9 elseif pen==14 then pen=0 end
@@ -320,16 +323,18 @@ function wheelmoved.draw(x,y)
pen=pen-1 pen=pen-1
if pen==8 then pen=7 elseif pen==-1 then pen=13 end if pen==8 then pen=7 elseif pen==-1 then pen=13 end
end end
sceneTemp.pen=pen
end end
function touchDown.draw(id,x,y) function touchDown.draw(id,x,y)
mouseMove.draw(x,y) mouseMove.draw(x,y)
end end
function touchMove.draw(id,x,y,dx,dy) function touchMove.draw(id,x,y,dx,dy)
sx,sy=int((x-200)/30)+1,20-int((y-60)/30) local sx,sy=int((x-200)/30)+1,20-int((y-60)/30)
if sx<1 or sx>10 then sx=nil end if sx<1 or sx>10 then sx=nil end
if sy<1 or sy>20 then sy=nil end if sy<1 or sy>20 then sy=nil end
sceneTemp.x,sceneTemp.y=sx,sy
if sx and sy then if sx and sy then
preField[sy][sx]=pen preField[sy][sx]=sceneTemp.pen
end end
end end
local penKey={ local penKey={
@@ -341,12 +346,13 @@ local penKey={
lshift=-1, lalt=-1, lshift=-1, lalt=-1,
} }
function keyDown.draw(key) function keyDown.draw(key)
local sx,sy,pen=sceneTemp.x,sceneTemp.y,sceneTemp.pen
if key=="delete"then if key=="delete"then
if clearSureTime>15 then if sceneTemp.sure>15 then
for y=1,20 do for x=1,10 do preField[y][x]=0 end end for y=1,20 do for x=1,10 do preField[y][x]=0 end end
clearSureTime=0 sceneTemp.sure=0
else else
clearSureTime=50 sceneTemp.sure=50
end end
elseif key=="up"or key=="down"or key=="left"or key=="right"then elseif key=="up"or key=="down"or key=="left"or key=="right"then
if not sx then sx=1 end if not sx then sx=1 end
@@ -368,30 +374,33 @@ function keyDown.draw(key)
else else
pen=penKey[key]or pen pen=penKey[key]or pen
end end
sceneTemp.x,sceneTemp.y,sceneTemp.pen=sx,sy,pen
end end
function mouseDown.setting_sound(x,y,k) function mouseDown.setting_sound(x,y,k)
if Timer()-sel>5 and x>780 and x<980 and y>470 then if x>780 and x<980 and y>470 and sceneTemp.jump==0 then
VOICE("egg") sceneTemp.jump=10
sel=Timer() local t=Timer()-sceneTemp.last
if t>1 then
VOICE((t<1.5 or t>15)and"doubt"or rnd()<.8 and"happy"or"egg")
sceneTemp.last=Timer()
end
end end
end end
function touchDown.setting_sound(id,x,y) function touchDown.setting_sound(id,x,y)
if Timer()-sel>5 and x>780 and x<980 and y>470 then mouseDown.setting_sound(x,y)
VOICE("egg")
sel=Timer()
end
end end
function keyDown.setting_key(key) function keyDown.setting_key(key)
local s=sceneTemp
if key=="escape"then if key=="escape"then
if keyboardSetting then if s.kS then
keyboardSetting=false s.kS=false
SFX("error",.5) SFX("error",.5)
else else
scene.back() scene.back()
end end
elseif keyboardSetting then elseif s.kS then
for l=1,8 do for l=1,8 do
for y=1,20 do for y=1,20 do
if setting.keyMap[l][y]==key then if setting.keyMap[l][y]==key then
@@ -399,43 +408,44 @@ function keyDown.setting_key(key)
end end
end end
end end
setting.keyMap[curBoard][keyboardSet]=key setting.keyMap[s.board][s.kb]=key
SFX("reach",.5) SFX("reach",.5)
keyboardSetting=false s.kS=false
elseif key=="return"then elseif key=="return"then
keyboardSetting=true s.kS=true
SFX("lock",.5) SFX("lock",.5)
elseif key=="up"then elseif key=="up"then
if keyboardSet>1 then if s.kb>1 then
keyboardSet=keyboardSet-1 s.kb=s.kb-1
SFX("move",.5) SFX("move",.5)
end end
elseif key=="down"then elseif key=="down"then
if keyboardSet<20 then if s.kb<20 then
keyboardSet=keyboardSet+1 s.kb=s.kb+1
SFX("move",.5) SFX("move",.5)
end end
elseif key=="left"then elseif key=="left"then
if curBoard>1 then if s.board>1 then
curBoard=curBoard-1 s.board=s.board-1
SFX("rotate",.5) SFX("rotate",.5)
end end
elseif key=="right"then elseif key=="right"then
if curBoard<8 then if s.board<8 then
curBoard=curBoard+1 s.board=s.board+1
SFX("rotate",.5) SFX("rotate",.5)
end end
end end
end end
function gamepadDown.setting_key(key) function gamepadDown.setting_key(key)
local s=sceneTemp
if key=="back"then if key=="back"then
if joystickSetting then if s.jS then
joystickSetting=false s.jS=false
SFX("error",.5) SFX("error",.5)
else else
scene.back() scene.back()
end end
elseif joystickSetting then elseif s.jS then
for l=9,16 do for l=9,16 do
for y=1,20 do for y=1,20 do
if setting.keyMap[l][y]==key then if setting.keyMap[l][y]==key then
@@ -443,30 +453,30 @@ function gamepadDown.setting_key(key)
end end
end end
end end
setting.keyMap[8+curBoard][joystickSet]=key setting.keyMap[8+s.board][s.js]=key
SFX("reach",.5) SFX("reach",.5)
joystickSetting=false s.jS=false
elseif key=="start"then elseif key=="start"then
joystickSetting=true s.jS=true
SFX("lock",.5) SFX("lock",.5)
elseif key=="up"then elseif key=="up"then
if joystickSet>1 then if s.js>1 then
joystickSet=joystickSet-1 s.js=s.js-1
SFX("move",.5) SFX("move",.5)
end end
elseif key=="down"then elseif key=="down"then
if joystickSet<20 then if s.js<20 then
joystickSet=joystickSet+1 s.js=s.js+1
SFX("move",.5) SFX("move",.5)
end end
elseif key=="left"then elseif key=="left"then
if curBoard>1 then if s.board>1 then
curBoard=curBoard-1 s.board=s.board-1
SFX("rotate",.5) SFX("rotate",.5)
end end
elseif key=="right"then elseif key=="right"then
if curBoard<8 then if s.board<8 then
curBoard=curBoard+1 s.board=s.board+1
SFX("rotate",.5) SFX("rotate",.5)
end end
end end
@@ -474,37 +484,34 @@ end
function mouseDown.setting_touch(x,y,k) function mouseDown.setting_touch(x,y,k)
if k==2 then scene.back()end if k==2 then scene.back()end
sel=onVK_org(x,y)or sel sceneTemp.sel=onVK_org(x,y)or sceneTemp.sel
end end
function mouseMove.setting_touch(x,y,dx,dy) function mouseMove.setting_touch(x,y,dx,dy)
if sel and ms.isDown(1)and not widget_sel then if sceneTemp.sel and ms.isDown(1)and not widget_sel then
local B=VK_org[sel] local B=VK_org[sceneTemp.sel]
B.x,B.y=B.x+dx,B.y+dy B.x,B.y=B.x+dx,B.y+dy
end end
end end
function mouseUp.setting_touch(x,y,k) function mouseUp.setting_touch(x,y,k)
if sel then if sceneTemp.sel then
local B=VK_org[sel] local B=VK_org[sceneTemp.sel]
local k=snapLevelValue[snapLevel] local k=snapLevelValue[sceneTemp.snap]
B.x,B.y=int(B.x/k+.5)*k,int(B.y/k+.5)*k B.x,B.y=int(B.x/k+.5)*k,int(B.y/k+.5)*k
end end
end end
function touchDown.setting_touch(id,x,y) function touchDown.setting_touch(id,x,y)
sel=onVK_org(x,y)or sel sceneTemp.sel=onVK_org(x,y)or sceneTemp.sel
end end
function touchUp.setting_touch(id,x,y) function touchUp.setting_touch(id,x,y)
if sel then if sceneTemp.sel then
x,y=xOy:inverseTransformPoint(x,y) local B=VK_org[sceneTemp.sel]
if sel then local k=snapLevelValue[sceneTemp.snap]
local B=VK_org[sel] B.x,B.y=int(B.x/k+.5)*k,int(B.y/k+.5)*k
local k=snapLevelValue[snapLevel]
B.x,B.y=int(B.x/k+.5)*k,int(B.y/k+.5)*k
end
end end
end end
function touchMove.setting_touch(id,x,y,dx,dy) function touchMove.setting_touch(id,x,y,dx,dy)
if sel and not widget_sel then if sceneTemp.sel and not widget_sel then
local B=VK_org[sel] local B=VK_org[sceneTemp.sel]
B.x,B.y=B.x+dx,B.y+dy B.x,B.y=B.x+dx,B.y+dy
end end
end end
@@ -628,9 +635,9 @@ function wheelmoved.history(x,y)
end end
function keyDown.history(key) function keyDown.history(key)
if key=="up"then if key=="up"then
sel=max(sel-5,1) sceneTemp=max(sceneTemp-10,1)
elseif key=="down"then elseif key=="down"then
sel=min(sel+5,#updateLog-22) sceneTemp=min(sceneTemp+10,#updateLog-22)
elseif key=="escape"then elseif key=="escape"then
scene.back() scene.back()
end end
@@ -1100,6 +1107,9 @@ function love.run()
gc.present() gc.present()
end end
end end
if Timer()-lastFrame<.058 then
T.sleep(.01)
end
while Timer()-lastFrame<.0158 do while Timer()-lastFrame<.0158 do
T.sleep(.001) T.sleep(.001)
end end

View File

@@ -115,7 +115,7 @@ local function VirtualkeyPreview()
for i=1,#VK_org do for i=1,#VK_org do
local B=VK_org[i] local B=VK_org[i]
if B.ava then if B.ava then
local c=sel==i and .6 or 1 local c=sceneTemp.sel==i and .6 or 1
gc.setColor(c,1,c,setting.VKAlpha*.1) gc.setColor(c,1,c,setting.VKAlpha*.1)
gc.setLineWidth(B.r*.07) gc.setLineWidth(B.r*.07)
gc.circle("line",B.x,B.y,B.r) gc.circle("line",B.x,B.y,B.r)
@@ -245,7 +245,7 @@ end
function Pnt.intro() function Pnt.intro()
gc.stencil(stencil_miniTitle,"replace",1) gc.stencil(stencil_miniTitle,"replace",1)
gc.setStencilTest("equal",1) gc.setStencilTest("equal",1)
gc.setColor(1,1,1,min(count,80)*.005) gc.setColor(1,1,1,min(sceneTemp,80)*.005)
gc.push("transform") gc.push("transform")
gc.translate(250,150) gc.translate(250,150)
gc.scale(30) gc.scale(30)
@@ -254,7 +254,7 @@ function Pnt.intro()
gc.setColor(1,1,1,.06) gc.setColor(1,1,1,.06)
for i=41,5,-2 do for i=41,5,-2 do
gc.setLineWidth(i) gc.setLineWidth(i)
gc.line(200+(count-80)*25,130,(count-80)*25,590) gc.line(200+(sceneTemp-80)*25,130,(sceneTemp-80)*25,590)
end end
gc.setStencilTest() gc.setStencilTest()
end end
@@ -295,7 +295,7 @@ function Pnt.mode()
end end
function Pnt.music() function Pnt.music()
gc.setColor(1,1,1,.3+sin(Timer()*5)*.2) gc.setColor(1,1,1,.3+sin(Timer()*5)*.2)
gc.rectangle("fill",45,98+30*sel,250,30) gc.rectangle("fill",45,98+30*sceneTemp,250,30)
gc.setColor(.8,.8,.8) gc.setColor(.8,.8,.8)
gc.draw(drawableText.musicRoom,20,20) gc.draw(drawableText.musicRoom,20,20)
gc.setColor(1,1,1) gc.setColor(1,1,1)
@@ -319,7 +319,7 @@ function Pnt.music()
end end
function Pnt.custom() function Pnt.custom()
gc.setColor(1,1,1,.3+sin(Timer()*8)*.2) gc.setColor(1,1,1,.3+sin(Timer()*8)*.2)
gc.rectangle("fill",25,95+40*sel,480,40) gc.rectangle("fill",25,95+40*sceneTemp,480,40)
gc.setColor(.8,.8,.8)gc.draw(drawableText.custom,20,20) gc.setColor(.8,.8,.8)gc.draw(drawableText.custom,20,20)
gc.setColor(1,1,1)gc.draw(drawableText.custom,22,23) gc.setColor(1,1,1)gc.draw(drawableText.custom,22,23)
setFont(35) setFont(35)
@@ -335,6 +335,7 @@ function Pnt.custom()
end end
end end
function Pnt.draw() function Pnt.draw()
local sx,sy=sceneTemp.x,sceneTemp.y
gc.translate(200,60) gc.translate(200,60)
gc.setColor(1,1,1,.2) gc.setColor(1,1,1,.2)
gc.setLineWidth(1) gc.setLineWidth(1)
@@ -358,10 +359,11 @@ function Pnt.draw()
gc.rectangle("line",30*sx-30,600-30*sy,30,30) gc.rectangle("line",30*sx-30,600-30*sy,30,30)
end end
gc.translate(-200,-60) gc.translate(-200,-60)
if clearSureTime>0 then if sceneTemp.sure>0 then
gc.setColor(1,1,1,clearSureTime*.02) gc.setColor(1,1,1,sceneTemp.sure*.02)
gc.draw(drawableText.question,660,11) gc.draw(drawableText.question,660,11)
end end
local pen=sceneTemp.pen
if pen>0 then if pen>0 then
gc.setLineWidth(13) gc.setLineWidth(13)
gc.setColor(blockColor[pen]) gc.setColor(blockColor[pen])
@@ -480,7 +482,8 @@ function Pnt.setting_sound()
gc.setColor(1,1,1,.8) gc.setColor(1,1,1,.8)
mDraw(drawableText.setting_sound,640,15) mDraw(drawableText.setting_sound,640,15)
local t=Timer() local t=Timer()
local x,y=790,370+10*sin(t*.4) local _=sceneTemp.jump
local x,y=800,340+10*sin(t*.5)+(_-10)*_*.3
gc.translate(x,y) gc.translate(x,y)
gc.draw(miya_ch,0,0) gc.draw(miya_ch,0,0)
gc.setColor(1,1,1,.7) gc.setColor(1,1,1,.7)
@@ -491,17 +494,18 @@ function Pnt.setting_sound()
gc.translate(-x,-y) gc.translate(-x,-y)
end end
function Pnt.setting_key() function Pnt.setting_key()
local s=sceneTemp
local a=.3+sin(Timer()*15)*.1 local a=.3+sin(Timer()*15)*.1
if keyboardSetting then gc.setColor(1,.3,.3,a)else gc.setColor(1,.7,.7,a)end if s.kS then gc.setColor(1,.3,.3,a)else gc.setColor(1,.7,.7,a)end
gc.rectangle("fill", gc.rectangle("fill",
keyboardSet<11 and 240 or 840, s.kb<11 and 240 or 840,
45*keyboardSet+20-450*int(keyboardSet/11), 45*s.kb+20-450*int(s.kb/11),
200,45 200,45
) )
if joystickSetting then gc.setColor(.3,.3,.1,a)else gc.setColor(.7,.7,1,a)end if s.jS then gc.setColor(.3,.3,.1,a)else gc.setColor(.7,.7,1,a)end
gc.rectangle("fill", gc.rectangle("fill",
joystickSet<11 and 440 or 1040, s.js<11 and 440 or 1040,
45*joystickSet+20-450*int(joystickSet/11), 45*s.js+20-450*int(s.js/11),
200,45 200,45
) )
--Selection rect --Selection rect
@@ -515,15 +519,16 @@ function Pnt.setting_key()
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(26) setFont(26)
local board=s.board
for N=1,20 do for N=1,20 do
if N<11 then if N<11 then
gc.printf(text.actName[N],47,45*N+22,180,"right") gc.printf(text.actName[N],47,45*N+22,180,"right")
mStr(setting.keyMap[curBoard][N],340,45*N+22) mStr(setting.keyMap[board][N],340,45*N+22)
mStr(setting.keyMap[curBoard+8][N],540,45*N+22) mStr(setting.keyMap[board+8][N],540,45*N+22)
else else
gc.printf(text.actName[N],647,45*N-428,180,"right") gc.printf(text.actName[N],647,45*N-428,180,"right")
mStr(setting.keyMap[curBoard][N],940,45*N-428) mStr(setting.keyMap[board][N],940,45*N-428)
mStr(setting.keyMap[curBoard+8][N],1040,45*N-428) mStr(setting.keyMap[board+8][N],1040,45*N-428)
end end
end end
gc.setLineWidth(2) gc.setLineWidth(2)
@@ -535,8 +540,8 @@ function Pnt.setting_key()
end end
setFont(35) setFont(35)
gc.print("Player:",170,590) gc.print("Player:",170,590)
gc.print(int(curBoard*.5+.5),300,590) gc.print(int(board*.5+.5),300,590)
gc.print(curBoard.."/8",580,590) gc.print(board.."/8",580,590)
gc.draw(drawableText.ctrlSetHelp,50,650) gc.draw(drawableText.ctrlSetHelp,50,650)
end end
function Pnt.setting_touch() function Pnt.setting_touch()
@@ -544,7 +549,7 @@ function Pnt.setting_touch()
gc.setLineWidth(7)gc.rectangle("line",340,15,600,690) gc.setLineWidth(7)gc.rectangle("line",340,15,600,690)
gc.setLineWidth(3)gc.rectangle("line",490,85,300,600) gc.setLineWidth(3)gc.rectangle("line",490,85,300,600)
VirtualkeyPreview() VirtualkeyPreview()
local d=snapLevelValue[snapLevel] local d=snapLevelValue[sceneTemp.snap]
if d>=10 then if d>=10 then
gc.setLineWidth(3) gc.setLineWidth(3)
gc.setColor(1,1,1,sin(Timer()*4)*.1+.1) gc.setColor(1,1,1,sin(Timer()*4)*.1+.1)
@@ -598,8 +603,8 @@ function Pnt.history()
gc.setLineWidth(4) gc.setLineWidth(4)
gc.rectangle("line",30,45,1000,632) gc.rectangle("line",30,45,1000,632)
setFont(20) setFont(20)
for i=0,min(22,#updateLog-sel)do for i=0,min(22,#updateLog-sceneTemp)do
gc.print(updateLog[sel+i],40,50+27*(i)) gc.print(updateLog[sceneTemp+i],40,50+27*(i))
end end
end end
return Pnt return Pnt

View File

@@ -21,7 +21,7 @@ local sceneInit={
} }
end, end,
intro=function() intro=function()
count=0 sceneTemp=0--animation timer
BGM("blank") BGM("blank")
end, end,
main=function() main=function()
@@ -37,12 +37,12 @@ local sceneInit={
if bgmPlaying then if bgmPlaying then
for i=1,#musicID do for i=1,#musicID do
if musicID[i]==bgmPlaying then if musicID[i]==bgmPlaying then
sel=i sceneTemp=i--music select
return return
end end
end end
else else
sel=1 sceneTemp=1
end end
end, end,
mode=function() mode=function()
@@ -51,15 +51,14 @@ local sceneInit={
destroyPlayers() destroyPlayers()
end, end,
custom=function() custom=function()
sel=sel or 1 sceneTemp=1--option select
destroyPlayers() destroyPlayers()
curBG=customRange.bg[customSel[12]] curBG=customRange.bg[customSel[12]]
BGM(customRange.bgm[customSel[13]]) BGM(customRange.bgm[customSel[13]])
end, end,
draw=function() draw=function()
curBG="none" curBG="none"
clearSureTime=0 sceneTemp={sure=0,pen=1,x=1,y=1}
pen,sx,sy=1,1,1
end, end,
play=function() play=function()
love.keyboard.setKeyRepeat(false) love.keyboard.setKeyRepeat(false)
@@ -82,21 +81,23 @@ local sceneInit={
curBG="none" curBG="none"
end, end,
setting_sound=function() setting_sound=function()
sel=0--last sound time sceneTemp={last=0,jump=0}--last sound time,animation count(10→0)
curBG="none" curBG="none"
end, end,
setting_key=function() setting_key=function()
curBoard=1 sceneTemp={
keyboardSet=1 board=1,
joystickSet=1 kb=1,js=1,
keyboardSetting=false kS=false,jS=false,
joystickSetting=false }
end, end,
setting_touch=function() setting_touch=function()
curBG="game2" curBG="game2"
defaultSel=1 sceneTemp={
sel=nil default=1,
snapLevel=1 snap=1,
sel=nil,
}
end, end,
setting_touchSwitch=function() setting_touchSwitch=function()
curBG="matrix" curBG="matrix"
@@ -107,7 +108,7 @@ local sceneInit={
history=function() history=function()
updateLog=require"updateLog" updateLog=require"updateLog"
curBG="lightGrey" curBG="lightGrey"
sel=1 sceneTemp=1--scroll pos
end, end,
quit=function() quit=function()
love.timer.sleep(.3) love.timer.sleep(.3)

2
shader.lua Normal file
View File

@@ -0,0 +1,2 @@
gc=love.graphics
shader_glow=gc.newShader("shader/glow.cs")

5
shader/glow.cs Normal file
View File

@@ -0,0 +1,5 @@
extern float X;extern float Y;extern float W;extern float H;
vec4 effect(vec4 C,Image Tx,vec2 Tcd,vec2 Pcd){
C[3]=min((Pcd.x-X)/W*.3+(Pcd.y-Y)/H*.1,.3)+.5;
return C;
}

View File

@@ -12,5 +12,5 @@ vec4 effect(vec4 color,Image texture,vec2 texture_coords,vec2 screen_coords){
vec4 data=Texel(texture,(vec2(-r*sin(theta),-r*cos(theta))*.5+.5));//vec2()..是遮光物采样的coord vec4 data=Texel(texture,(vec2(-r*sin(theta),-r*cos(theta))*.5+.5));//vec2()..是遮光物采样的coord
if(data.a>.1)return vec4(vec3(y/yresolution),1.);//碰撞检测,像素透明度>.1即透光 if(data.a>.1)return vec4(vec3(y/yresolution),1.);//碰撞检测,像素透明度>.1即透光
} }
return vec4(vec3(1),1.);//返回最远距离1 return vec4(1,1,1,1);//返回最远距离1
} }

View File

@@ -47,14 +47,14 @@ function Tmr.load()
end end
end end
function Tmr.intro() function Tmr.intro()
count=count+1 sceneTemp=sceneTemp+1
if count==200 then count=80 end if sceneTemp==200 then sceneTemp=80 end
end end
function Tmr.main(dt) function Tmr.main(dt)
players[1]:update(dt) players[1]:update(dt)
end end
function Tmr.draw() function Tmr.draw()
if clearSureTime>0 then clearSureTime=clearSureTime-1 end if sceneTemp.sure>0 then sceneTemp.sure=sceneTemp.sure-1 end
end end
function Tmr.play(dt) function Tmr.play(dt)
frame=frame+1 frame=frame+1
@@ -140,4 +140,10 @@ function Tmr.pause(dt)
pauseTimer=pauseTimer+1 pauseTimer=pauseTimer+1
end end
end end
function Tmr.setting_sound()
local t=sceneTemp.jump
if t>0 then
sceneTemp.jump=t-1
end
end
return Tmr return Tmr

View File

@@ -9,11 +9,12 @@ Patron(rmb10+):
?[D*a] ?[D*a]
Future outlook: Future outlook:
Normal: Normal:
timing mode
powerinfo switch powerinfo switch
splashing block splashing block
ajustable next count ajustable next count
new mode system
custom block color/direction custom block color/direction
new mode system
combo mode combo mode
bigbang mode bigbang mode
TTT mode TTT mode
@@ -27,9 +28,12 @@ Future outlook:
infinite 1v1 infinite 1v1
square mode square mode
more FXs & 3d features & animations more FXs & 3d features & animations
0.8.3:
new widget appearence
cuter miya
0.8.2+: 0.8.2+:
GUI adjusted GUI adjusted
added a cute cat miya figure added
0.8.2: 0.8.2:
new widget appearence new widget appearence
GUI adjusted GUI adjusted