Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3155bc48ef | ||
|
|
c1b334963b |
Binary file not shown.
BIN
VOICE/nya_31.ogg
BIN
VOICE/nya_31.ogg
Binary file not shown.
BIN
VOICE/nya_happy_4.ogg
Normal file
BIN
VOICE/nya_happy_4.ogg
Normal file
Binary file not shown.
BIN
VOICE/nya_sad_1.ogg
Normal file
BIN
VOICE/nya_sad_1.ogg
Normal file
Binary file not shown.
132
class.lua
132
class.lua
@@ -31,7 +31,10 @@ function clearTask(opt)
|
||||
end
|
||||
end
|
||||
|
||||
local button={type="button"}
|
||||
local button={
|
||||
type="button",
|
||||
ATV=0,--activating time(0~8)
|
||||
}
|
||||
function newButton(x,y,w,h,color,font,code,hide,N)
|
||||
local _={
|
||||
x=x-w*.5,y=y-h*.5,
|
||||
@@ -44,53 +47,55 @@ function newButton(x,y,w,h,color,font,code,hide,N)
|
||||
}for k,v in next,button do _[k]=v end return _
|
||||
end
|
||||
function button:isAbove(x,y)
|
||||
return x>self.x and x<self.x+self.w and y>self.y and y<self.y+self.h
|
||||
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
|
||||
function button:FX()
|
||||
sysFX[#sysFX+1]={0,0,10,self.x,self.y,self.w,self.h}
|
||||
--[0=ripple],timer,duration,x,y,w,h
|
||||
sysFX[#sysFX+1]={0,0,10,self.x-self.ATV,self.y-self.ATV,self.w+2*self.ATV,self.h+2*self.ATV}
|
||||
--0[ripple],timer,duration,x,y,w,h
|
||||
end
|
||||
function button:update()
|
||||
if widget_sel==self then
|
||||
if self.ATV<8 then self.ATV=self.ATV+1 end
|
||||
else
|
||||
if self.ATV>0 then self.ATV=self.ATV-1 end
|
||||
end
|
||||
end
|
||||
function button:draw()
|
||||
local x,y,w,h=self.x,self.y,self.w,self.h
|
||||
local r,g,b=unpack(self.color)
|
||||
if self==widget_sel then
|
||||
gc.setColor(r*.7,g*.7,b*.7)
|
||||
gc.rectangle("fill",x,y,w,h)
|
||||
x,y,w,h=x+w,y+h,-w,-h
|
||||
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
|
||||
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-self.ATV,y-self.ATV,w+2*self.ATV,h+2*self.ATV)
|
||||
gc.setShader()
|
||||
if self.ATV>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,1,1,self.ATV*.125)
|
||||
gc.rectangle("line",x-self.ATV+2,y-self.ATV+2,w+2*self.ATV-4,h+2*self.ATV-4)
|
||||
end
|
||||
local t=self.text
|
||||
if t then
|
||||
if type(t)=="function"then t=t()end
|
||||
setFont(self.font)
|
||||
local y0=y+h*.5-self.font*.7
|
||||
gc.setColor(1,1,1,.5)
|
||||
if self==widget_sel then
|
||||
gc.printf(t,x+2,y0+1,w,"center")
|
||||
gc.setColor(r*.5,g*.5,b*.5)
|
||||
gc.printf(t,x,y0,w,"center")
|
||||
else
|
||||
gc.printf(t,x,y0-1,w,"center")
|
||||
gc.setColor(r*.6,g*.6,b*.6)
|
||||
gc.printf(t,x-2,y0-2,w,"center")
|
||||
end
|
||||
gc.setColor(1,1,1,.3)
|
||||
gc.printf(t,x-2,y0-2,w,"center")
|
||||
gc.printf(t,x-2,y0+2,w,"center")
|
||||
gc.printf(t,x+2,y0-2,w,"center")
|
||||
gc.printf(t,x+2,y0+2,w,"center")
|
||||
gc.setColor(r*.5,g*.5,b*.5)
|
||||
gc.printf(t,x,y0,w,"center")
|
||||
end
|
||||
end
|
||||
function button:getInfo()
|
||||
print(format("x=%d,y=%d,w=%d,h=%d,font=%d",self.x+self.w*.5,self.y+self.h*.5,self.w,self.h,self.font))
|
||||
end
|
||||
|
||||
local switch={type="switch"}
|
||||
local switch={
|
||||
type="switch",
|
||||
ATV=0,--activating time(0~8)
|
||||
}
|
||||
function newSwitch(x,y,font,disp,code,hide,N)
|
||||
local _={
|
||||
x=x,y=y,font=font,
|
||||
@@ -103,30 +108,33 @@ end
|
||||
function switch:isAbove(x,y)
|
||||
return x>self.x and x<self.x+50 and y>self.y-25 and y<self.y+25
|
||||
end
|
||||
function switch:FX()
|
||||
sysFX[#sysFX+1]=self.disp()and
|
||||
{1,0,15,.4,1,.4,self.x,self.y-25,50,50,0}--Switched on
|
||||
or{1,0,15,1,.4,.4,self.x,self.y-25,50,50,0}--Switched off
|
||||
--[1=square fade],timer,duration,r,g,b,x,y,w,h
|
||||
function switch:update()
|
||||
if widget_sel==self then
|
||||
if self.ATV<8 then self.ATV=self.ATV+1 end
|
||||
else
|
||||
if self.ATV>0 then self.ATV=self.ATV-1 end
|
||||
end
|
||||
end
|
||||
function switch:draw()
|
||||
local x,y=self.x,self.y-25
|
||||
if self.disp()then
|
||||
if self.ATV>0 then
|
||||
gc.setColor(1,.3,.3,self.ATV*.06)
|
||||
gc.rectangle("fill",x,y,50,50)
|
||||
end
|
||||
gc.setColor(.9,1,.9)
|
||||
gc.setLineWidth(6)
|
||||
gc.line(x+5,y+25,x+18,y+38,x+45,y+11)
|
||||
end--checked
|
||||
if self==widget_sel then
|
||||
gc.setColor(1,1,1,.4)
|
||||
else
|
||||
gc.setColor(1,1,1,.2)
|
||||
if self.ATV>0 then
|
||||
gc.setColor(.3,1,.3,self.ATV*.06)
|
||||
gc.rectangle("fill",x,y,50,50)
|
||||
end
|
||||
end
|
||||
gc.rectangle("fill",x,y,50,50)
|
||||
gc.setLineWidth(3)
|
||||
--checked
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,1,1)
|
||||
gc.line(x,y+50,x,y,x+50,y)
|
||||
gc.setColor(1,1,1,.7)
|
||||
gc.line(x,y+50,x+50,y+50,x+50,y)
|
||||
gc.rectangle("line",x,y,50,50)
|
||||
--frame
|
||||
local t=self.text
|
||||
if t then
|
||||
@@ -139,7 +147,11 @@ function switch:getInfo()
|
||||
print(format("x=%d,y=%d,font=%d",self.x,self.y,self.font))
|
||||
end
|
||||
|
||||
local slider={type="slider"}
|
||||
local slider={
|
||||
type="slider",
|
||||
ATV=0,--activating time(0~8)
|
||||
pos=0,--position shown
|
||||
}
|
||||
function newSlider(x,y,w,unit,font,change,disp,code,hide,N)
|
||||
local _={
|
||||
x=x,y=y,
|
||||
@@ -155,13 +167,19 @@ end
|
||||
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
|
||||
end
|
||||
function slider:FX(pos)
|
||||
sysFX[#sysFX+1]={1,0,10,1,1,1,self.x+self.w*pos/self.unit-8,self.y-15,17,30}
|
||||
--[1=square fade],timer,duration,r,g,b,x,y,w,h
|
||||
function slider:update()
|
||||
if widget_sel==self then
|
||||
if self.ATV<6 then self.ATV=self.ATV+1 end
|
||||
else
|
||||
if self.ATV>0 then self.ATV=self.ATV-1 end
|
||||
end
|
||||
if not(self.hide and self.hide())then
|
||||
self.pos=self.pos*.8+self.disp()*.2
|
||||
end
|
||||
end
|
||||
function slider:draw()
|
||||
local x,y=self.x,self.y
|
||||
gc.setColor(1,1,1,self==widget_sel and 1 or .5)
|
||||
gc.setColor(1,1,1,.5+self.ATV*.06)
|
||||
gc.setLineWidth(2)
|
||||
local x1,x2=x,x+self.w
|
||||
for p=0,self.unit do
|
||||
@@ -169,7 +187,7 @@ function slider:draw()
|
||||
gc.line(x,y+7,x,y-7)
|
||||
end
|
||||
--units
|
||||
gc.setLineWidth(5)
|
||||
gc.setLineWidth(4)
|
||||
gc.line(x1,y,x2,y)
|
||||
--axis
|
||||
local t=self.text
|
||||
@@ -179,14 +197,14 @@ function slider:draw()
|
||||
gc.printf(t,x-312,y-self.font*.7,300,"right")
|
||||
end
|
||||
--text
|
||||
local x,y=x1+(x2-x1)*self.disp()/self.unit-8,y-15
|
||||
local x,y,w,h=x1+(x2-x1)*self.pos/self.unit-10-self.ATV,y-16-self.ATV,20+2*self.ATV,32+2*self.ATV
|
||||
gc.setColor(.8,.8,.8)
|
||||
gc.rectangle("fill",x,y,17,30)
|
||||
gc.setLineWidth(2)
|
||||
gc.setColor(.5,.5,.5)
|
||||
gc.line(x,y+30,x+17,y+30,x+17,y)
|
||||
gc.setColor(1,1,1)
|
||||
gc.line(x,y+30,x,y,x+17,y)
|
||||
gc.rectangle("fill",x,y,w,h)
|
||||
if self.ATV>0 then
|
||||
gc.setLineWidth(2)
|
||||
gc.setColor(1,1,1,self.ATV*.16)
|
||||
gc.rectangle("line",x+1,y+1,w-2,h-2)
|
||||
end
|
||||
--block
|
||||
end
|
||||
function slider:getInfo()
|
||||
|
||||
11
conf.lua
11
conf.lua
@@ -1,13 +1,12 @@
|
||||
math.randomseed(os.time())
|
||||
gameVersion="Alpha V0.8.2+"
|
||||
gameVersion="Alpha V0.8.4"
|
||||
function love.conf(t)
|
||||
t.identity="Techmino"--Save directory name
|
||||
t.version="11.1"
|
||||
t.console=X
|
||||
t.gammacorrect=X
|
||||
t.appendidentity=X--If search files in source before save directory
|
||||
t.accelerometerjoystick=X--If exposing accelerometer on iOS and Android as a Joystick
|
||||
t.audio.mixwithsystem=true--Switch on to keep sysBGM
|
||||
t.appendidentity=X--Search files in source before save directory
|
||||
t.accelerometerjoystick=false--ios/android加速度计=摇杆
|
||||
t.audio.mixwithsystem=true
|
||||
|
||||
local W=t.window
|
||||
W.title="Techmino "..gameVersion
|
||||
@@ -21,7 +20,7 @@ function love.conf(t)
|
||||
W.vsync=0--0→∞fps
|
||||
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.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.highdpi=X--Enable high-dpi mode for the window on a Retina display (boolean)
|
||||
W.x,W.y=nil
|
||||
|
||||
@@ -11,8 +11,8 @@ spin判定:
|
||||
攻击系统:
|
||||
消1/2/3/4攻击0/1/2/4
|
||||
spin1/2/3攻击2/4/6,若mini则减半
|
||||
b2b:增加1~2(tetris)/1~3(spin)攻击
|
||||
b3b:满b2b效果+1额外抵挡
|
||||
B2B:增加1~2(techrash)/1~3(spin)攻击
|
||||
B3B:满B2B效果+1额外抵挡
|
||||
PC:其它攻击与6~8(本局内递增)取高+2额外抵挡
|
||||
连击:0,0,1,1,2,2,3,3,4,4,3……
|
||||
|
||||
@@ -27,7 +27,7 @@ back to back(B2B)点数说明:
|
||||
|
||||
攻击延迟:
|
||||
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢
|
||||
b2b或者b3b增加攻击力的同时也会减缓一点生效速度,mini大幅减缓生效速度
|
||||
B2B或者B3B增加攻击力的同时也会减缓一点生效速度,mini大幅减缓生效速度
|
||||
|
||||
抵消逻辑:
|
||||
发动攻击时,若缓冲条有攻击则先用额外抵挡再用攻击力1:1抵消最先受到的攻击
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
@@ -195,7 +195,7 @@ return{
|
||||
warning="禁 止 私 自 传 播",
|
||||
WidgetText={
|
||||
main={
|
||||
lang="Lang",
|
||||
lang="言/A",
|
||||
qplay="快速开始",
|
||||
play="开始",
|
||||
setting="设置",
|
||||
@@ -259,7 +259,8 @@ return{
|
||||
pause={
|
||||
resume= "继续",
|
||||
restart="重新开始",
|
||||
setting="设置",
|
||||
sfx="音效",
|
||||
bgm="音乐",
|
||||
quit= "退出",
|
||||
},
|
||||
setting_game={
|
||||
@@ -308,8 +309,8 @@ return{
|
||||
},
|
||||
setting_touch={
|
||||
default="默认组合",
|
||||
snap=function()return text.snapLevelName[snapLevel]end,
|
||||
more="更多",
|
||||
snap=function()return text.snapLevelName[sceneTemp.snap]end,
|
||||
option="选项",
|
||||
back=BK,
|
||||
size="大小",
|
||||
},
|
||||
|
||||
@@ -195,7 +195,7 @@ return{
|
||||
warning="禁 止 私 自 传 播",
|
||||
WidgetText={
|
||||
main={
|
||||
lang="Lang",
|
||||
lang="言/A",
|
||||
qplay="快速开始",
|
||||
play="开始",
|
||||
setting="设置",
|
||||
@@ -259,7 +259,8 @@ return{
|
||||
pause={
|
||||
resume= "继续",
|
||||
restart="重新开始",
|
||||
setting="设置",
|
||||
sfx="音效",
|
||||
bgm="音乐",
|
||||
quit= "退出",
|
||||
},
|
||||
|
||||
@@ -309,8 +310,8 @@ return{
|
||||
},
|
||||
setting_touch={
|
||||
default="默认组合",
|
||||
snap=function()return text.snapLevelName[snapLevel]end,
|
||||
more="更多",
|
||||
snap=function()return text.snapLevelName[sceneTemp.snap]end,
|
||||
option="选项",
|
||||
back=BK,
|
||||
size="大小",
|
||||
},
|
||||
|
||||
@@ -194,7 +194,7 @@ Lib used:
|
||||
warning="DO NOT DISTRIBUTE",
|
||||
WidgetText={
|
||||
main={
|
||||
lang="Lang",
|
||||
lang="言/A",
|
||||
qplay="Qplay",
|
||||
play="Play",
|
||||
setting="Settings",
|
||||
@@ -258,7 +258,8 @@ Lib used:
|
||||
pause={
|
||||
resume="Resume",
|
||||
restart="Restart",
|
||||
setting="Setting",
|
||||
sfx="SFX",
|
||||
bgm="BGM",
|
||||
quit="Quit",
|
||||
},
|
||||
setting_game={
|
||||
@@ -307,8 +308,8 @@ Lib used:
|
||||
},
|
||||
setting_touch={
|
||||
default="Defaults",
|
||||
snap=function()return text.snapLevelName[snapLevel]end,
|
||||
more="More",
|
||||
snap=function()return text.snapLevelName[sceneTemp.snap]end,
|
||||
option="Option",
|
||||
back=BK,
|
||||
size="Size",
|
||||
},
|
||||
|
||||
106
list.lua
106
list.lua
@@ -96,7 +96,10 @@ voiceName={
|
||||
"mini","b2b","b3b","pc",
|
||||
"win","lose",
|
||||
"bye",
|
||||
"nya","voc_nya",
|
||||
"nya",
|
||||
"happy",
|
||||
"doubt",
|
||||
"sad",
|
||||
"egg",
|
||||
}
|
||||
voiceList={
|
||||
@@ -121,7 +124,9 @@ voiceList={
|
||||
lose={"lose_1","lose_2","lose_3"},
|
||||
bye={"bye_1","bye_2"},
|
||||
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"},
|
||||
}
|
||||
|
||||
@@ -239,26 +244,26 @@ local virtualkeySet={
|
||||
{10,80, 320, 80},--restart
|
||||
},--Keyboard set
|
||||
{
|
||||
{10,70, 50,27},--restart
|
||||
{9, 130, 50,27},--func
|
||||
{4, 190, 50,27},--rotLeft
|
||||
{3, 250, 50,27},--rotRight
|
||||
{5, 310, 50,27},--rotFlip
|
||||
{1, 370, 50,27},--moveLeft
|
||||
{2, 430, 50,27},--moveRight
|
||||
{8, 490, 50,27},--hold
|
||||
{7, 550, 50,27},--softDrop1
|
||||
{6, 610, 50,27},--hardDrop
|
||||
{11,670, 50,27},--insLeft
|
||||
{12,730, 50,27},--insRight
|
||||
{13,790, 50,27},--insDown
|
||||
{14,850, 50,27},--down1
|
||||
{15,910, 50,27},--down4
|
||||
{16,970, 50,27},--down10
|
||||
{17,1030, 50,27},--dropLeft
|
||||
{18,1090, 50,27},--dropRight
|
||||
{19,1150, 50,27},--addLeft
|
||||
{20,1210, 50,27},--addRight
|
||||
{10,70, 50,30},--restart
|
||||
{9, 130, 50,30},--func
|
||||
{4, 190, 50,30},--rotLeft
|
||||
{3, 250, 50,30},--rotRight
|
||||
{5, 310, 50,30},--rotFlip
|
||||
{1, 370, 50,30},--moveLeft
|
||||
{2, 430, 50,30},--moveRight
|
||||
{8, 490, 50,30},--hold
|
||||
{7, 550, 50,30},--softDrop1
|
||||
{6, 610, 50,30},--hardDrop
|
||||
{11,670, 50,30},--insLeft
|
||||
{12,730, 50,30},--insRight
|
||||
{13,790, 50,30},--insDown
|
||||
{14,850, 50,30},--down1
|
||||
{15,910, 50,30},--down4
|
||||
{16,970, 50,30},--down10
|
||||
{17,1030, 50,30},--dropLeft
|
||||
{18,1090, 50,30},--dropRight
|
||||
{19,1150, 50,30},--addLeft
|
||||
{20,1210, 50,30},--addRight
|
||||
},--PC key feedback(top&in a row)
|
||||
}
|
||||
local customSet={
|
||||
@@ -297,7 +302,7 @@ local function pressKey(k)
|
||||
end
|
||||
local function setPen(i)
|
||||
return function()
|
||||
pen=i
|
||||
sceneTemp.pen=i
|
||||
end
|
||||
end
|
||||
local function VKAdisp(n)
|
||||
@@ -357,8 +362,8 @@ Widget={
|
||||
back= newButton(640, 630,230,90, C.white,40,scene.back),
|
||||
},
|
||||
custom={
|
||||
up= newButton(1000, 220,100,100,C.white, 45,function()sel=(sel-2)%#customID+1 end),
|
||||
down= newButton(1000, 460,100,100,C.white, 45,function()sel=sel%#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()sceneTemp=sceneTemp%#customID+1 end),
|
||||
left= newButton(880, 340,100,100,C.white, 45,pressKey("left")),
|
||||
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),
|
||||
@@ -400,14 +405,12 @@ Widget={
|
||||
resetGameData()
|
||||
scene.swapTo("play","none")
|
||||
end),
|
||||
setting=newButton(1150,80,200,100,C.yellow,40,function()
|
||||
scene.push()
|
||||
scene.swapTo("setting_sound")
|
||||
end),
|
||||
sfx= newSlider(950,60,280,10,35,function()SFX("blip_1")end, SETdisp("sfx"),SETsto("sfx")),
|
||||
bgm= newSlider(950,120,280,10,35,function()BGM(bgmPlaying or"blank")end, SETdisp("bgm"),SETsto("bgm")),
|
||||
quit= newButton(640,600,240,100,C.white,45,scene.back),
|
||||
},
|
||||
setting_game={
|
||||
graphic=newButton(200,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_graphic")end, nil,"sound"),
|
||||
graphic=newButton(200,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_graphic")end,nil,"sound"),
|
||||
sound= newButton(1080,80,240,80,C.lightCyan,35,function()scene.swapTo("setting_sound")end, nil,"dasD"),
|
||||
dasD= newButton(180,230,50,50,C.white,40,function()
|
||||
setting.das=(setting.das-1)%31
|
||||
@@ -495,37 +498,38 @@ Widget={
|
||||
},
|
||||
setting_touch={
|
||||
default=newButton(520,80,170,80,C.white,35,function()
|
||||
local D=virtualkeySet[defaultSel]
|
||||
for i=1,#VK_org do
|
||||
VK_org[i].ava=false
|
||||
local D=virtualkeySet[sceneTemp.default]
|
||||
for i=1,#VK_org do
|
||||
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
|
||||
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--Replace keys
|
||||
defaultSel=defaultSel%5+1
|
||||
end--Replace keys
|
||||
sceneTemp.default=sceneTemp.default%5+1
|
||||
sceneTemp.sel=nil
|
||||
end),
|
||||
snap= newButton(760,80,170,80,C.white,35,function()
|
||||
snapLevel=snapLevel%6+1
|
||||
sceneTemp.snap=sceneTemp.snap%6+1
|
||||
end),
|
||||
more= newButton(520,180,170,80,C.white,40,function()
|
||||
option= newButton(520,180,170,80,C.white,40,function()
|
||||
scene.push()
|
||||
scene.swapTo("setting_touchSwitch")
|
||||
end),
|
||||
back= newButton(760,180,170,80,C.white,40,scene.back),
|
||||
size= newSlider(360,120,560,14,40,nil,function()
|
||||
return VK_org[sel].r/10-1
|
||||
size= newSlider(450,265,460,14,40,nil,function()
|
||||
return VK_org[sceneTemp.sel].r/10-1
|
||||
end,
|
||||
function(v)
|
||||
if sel then
|
||||
VK_org[sel].r=10+v*10
|
||||
if sceneTemp.sel then
|
||||
VK_org[sceneTemp.sel].r=10+v*10
|
||||
end
|
||||
end,
|
||||
function()return not sel end),
|
||||
function()return not sceneTemp.sel end),
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= newSwitch(280,80, 35,VKAdisp(1),VKAcode(1)),
|
||||
@@ -572,8 +576,8 @@ Widget={
|
||||
back= newButton(640, 600,180,60,C.white,35,scene.back,nil,"qq"),
|
||||
},
|
||||
history={
|
||||
prev= newButton(1155,170,180,180,C.white,65,pressKey("up"),function()return sel==1 end),
|
||||
next= newButton(1155,400,180,180,C.white,65,pressKey("down"),function()return sel==#updateLog-22 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 sceneTemp==#updateLog-22 end),
|
||||
back= newButton(1155,600,180,90,C.white,35,scene.back),
|
||||
},
|
||||
stat={
|
||||
|
||||
283
main.lua
283
main.lua
@@ -1,7 +1,6 @@
|
||||
--[[
|
||||
第一次搞这么大的工程~参考价值不是很大
|
||||
如果你有时间并且也热爱俄罗斯方块的话,来看代码或者帮助优化的话当然欢迎!
|
||||
(顺便,无授权直接盗代码的先死个妈)
|
||||
第一次搞这么大的工程,参考价值不是很大
|
||||
如果你有时间并且也热爱俄罗斯方块的话,来看代码或者帮助优化的话欢迎!
|
||||
]]
|
||||
local love=love
|
||||
local ms,kb,tc=love.mouse,love.keyboard,love.touch
|
||||
@@ -71,6 +70,7 @@ require("light")
|
||||
local Tmr=require("timer")
|
||||
local Pnt=require("paint")
|
||||
require("player")
|
||||
require("shader")
|
||||
--Modules
|
||||
-------------------------------------------------------------
|
||||
local powerInfoCanvas,updatePowerInfo
|
||||
@@ -246,12 +246,12 @@ function wheelmoved.music(x,y)
|
||||
end
|
||||
function keyDown.music(key)
|
||||
if key=="down"then
|
||||
sel=sel%#musicID+1
|
||||
sceneTemp=sceneTemp%#musicID+1
|
||||
elseif key=="up"then
|
||||
sel=(sel-2)%#musicID+1
|
||||
sceneTemp=(sceneTemp-2)%#musicID+1
|
||||
elseif key=="return"or key=="space"then
|
||||
if bgmPlaying~=musicID[sel]then
|
||||
BGM(musicID[sel])
|
||||
if bgmPlaying~=musicID[sceneTemp]then
|
||||
BGM(musicID[sceneTemp])
|
||||
else
|
||||
BGM()
|
||||
end
|
||||
@@ -261,6 +261,7 @@ function keyDown.music(key)
|
||||
end
|
||||
|
||||
function keyDown.custom(key)
|
||||
local sel=sceneTemp
|
||||
if key=="left"then
|
||||
customSel[sel]=(customSel[sel]-2)%#customRange[customID[sel]]+1
|
||||
if sel==12 then
|
||||
@@ -276,9 +277,9 @@ function keyDown.custom(key)
|
||||
BGM(customRange.bgm[customSel[sel]])
|
||||
end
|
||||
elseif key=="down"then
|
||||
sel=sel%#customID+1
|
||||
sceneTemp=sel%#customID+1
|
||||
elseif key=="up"then
|
||||
sel=(sel-2)%#customID+1
|
||||
sceneTemp=(sel-2)%#customID+1
|
||||
elseif key=="d"then
|
||||
scene.push()
|
||||
scene.swapTo("draw")
|
||||
@@ -305,14 +306,16 @@ function mouseDown.draw(x,y,k)
|
||||
mouseMove.draw(x,y)
|
||||
end
|
||||
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 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
|
||||
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
|
||||
function wheelmoved.draw(x,y)
|
||||
local pen=sceneTemp.pen
|
||||
if y<0 then
|
||||
pen=pen+1
|
||||
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
|
||||
if pen==8 then pen=7 elseif pen==-1 then pen=13 end
|
||||
end
|
||||
sceneTemp.pen=pen
|
||||
end
|
||||
function touchDown.draw(id,x,y)
|
||||
mouseMove.draw(x,y)
|
||||
end
|
||||
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 sy<1 or sy>20 then sy=nil end
|
||||
sceneTemp.x,sceneTemp.y=sx,sy
|
||||
if sx and sy then
|
||||
preField[sy][sx]=pen
|
||||
preField[sy][sx]=sceneTemp.pen
|
||||
end
|
||||
end
|
||||
local penKey={
|
||||
@@ -341,12 +346,13 @@ local penKey={
|
||||
lshift=-1, lalt=-1,
|
||||
}
|
||||
function keyDown.draw(key)
|
||||
local sx,sy,pen=sceneTemp.x,sceneTemp.y,sceneTemp.pen
|
||||
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
|
||||
clearSureTime=0
|
||||
sceneTemp.sure=0
|
||||
else
|
||||
clearSureTime=50
|
||||
sceneTemp.sure=50
|
||||
end
|
||||
elseif key=="up"or key=="down"or key=="left"or key=="right"then
|
||||
if not sx then sx=1 end
|
||||
@@ -368,30 +374,33 @@ function keyDown.draw(key)
|
||||
else
|
||||
pen=penKey[key]or pen
|
||||
end
|
||||
sceneTemp.x,sceneTemp.y,sceneTemp.pen=sx,sy,pen
|
||||
end
|
||||
|
||||
function mouseDown.setting_sound(x,y,k)
|
||||
if Timer()-sel>5 and x>780 and x<980 and y>470 then
|
||||
VOICE("egg")
|
||||
sel=Timer()
|
||||
if x>780 and x<980 and y>470 and sceneTemp.jump==0 then
|
||||
sceneTemp.jump=10
|
||||
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
|
||||
function touchDown.setting_sound(id,x,y)
|
||||
if Timer()-sel>5 and x>780 and x<980 and y>470 then
|
||||
VOICE("egg")
|
||||
sel=Timer()
|
||||
end
|
||||
mouseDown.setting_sound(x,y)
|
||||
end
|
||||
|
||||
function keyDown.setting_key(key)
|
||||
local s=sceneTemp
|
||||
if key=="escape"then
|
||||
if keyboardSetting then
|
||||
keyboardSetting=false
|
||||
if s.kS then
|
||||
s.kS=false
|
||||
SFX("error",.5)
|
||||
else
|
||||
scene.back()
|
||||
end
|
||||
elseif keyboardSetting then
|
||||
elseif s.kS then
|
||||
for l=1,8 do
|
||||
for y=1,20 do
|
||||
if setting.keyMap[l][y]==key then
|
||||
@@ -399,43 +408,44 @@ function keyDown.setting_key(key)
|
||||
end
|
||||
end
|
||||
end
|
||||
setting.keyMap[curBoard][keyboardSet]=key
|
||||
setting.keyMap[s.board][s.kb]=key
|
||||
SFX("reach",.5)
|
||||
keyboardSetting=false
|
||||
s.kS=false
|
||||
elseif key=="return"then
|
||||
keyboardSetting=true
|
||||
s.kS=true
|
||||
SFX("lock",.5)
|
||||
elseif key=="up"then
|
||||
if keyboardSet>1 then
|
||||
keyboardSet=keyboardSet-1
|
||||
if s.kb>1 then
|
||||
s.kb=s.kb-1
|
||||
SFX("move",.5)
|
||||
end
|
||||
elseif key=="down"then
|
||||
if keyboardSet<20 then
|
||||
keyboardSet=keyboardSet+1
|
||||
if s.kb<20 then
|
||||
s.kb=s.kb+1
|
||||
SFX("move",.5)
|
||||
end
|
||||
elseif key=="left"then
|
||||
if curBoard>1 then
|
||||
curBoard=curBoard-1
|
||||
if s.board>1 then
|
||||
s.board=s.board-1
|
||||
SFX("rotate",.5)
|
||||
end
|
||||
elseif key=="right"then
|
||||
if curBoard<8 then
|
||||
curBoard=curBoard+1
|
||||
if s.board<8 then
|
||||
s.board=s.board+1
|
||||
SFX("rotate",.5)
|
||||
end
|
||||
end
|
||||
end
|
||||
function gamepadDown.setting_key(key)
|
||||
local s=sceneTemp
|
||||
if key=="back"then
|
||||
if joystickSetting then
|
||||
joystickSetting=false
|
||||
if s.jS then
|
||||
s.jS=false
|
||||
SFX("error",.5)
|
||||
else
|
||||
scene.back()
|
||||
end
|
||||
elseif joystickSetting then
|
||||
elseif s.jS then
|
||||
for l=9,16 do
|
||||
for y=1,20 do
|
||||
if setting.keyMap[l][y]==key then
|
||||
@@ -443,30 +453,30 @@ function gamepadDown.setting_key(key)
|
||||
end
|
||||
end
|
||||
end
|
||||
setting.keyMap[8+curBoard][joystickSet]=key
|
||||
setting.keyMap[8+s.board][s.js]=key
|
||||
SFX("reach",.5)
|
||||
joystickSetting=false
|
||||
s.jS=false
|
||||
elseif key=="start"then
|
||||
joystickSetting=true
|
||||
s.jS=true
|
||||
SFX("lock",.5)
|
||||
elseif key=="up"then
|
||||
if joystickSet>1 then
|
||||
joystickSet=joystickSet-1
|
||||
if s.js>1 then
|
||||
s.js=s.js-1
|
||||
SFX("move",.5)
|
||||
end
|
||||
elseif key=="down"then
|
||||
if joystickSet<20 then
|
||||
joystickSet=joystickSet+1
|
||||
if s.js<20 then
|
||||
s.js=s.js+1
|
||||
SFX("move",.5)
|
||||
end
|
||||
elseif key=="left"then
|
||||
if curBoard>1 then
|
||||
curBoard=curBoard-1
|
||||
if s.board>1 then
|
||||
s.board=s.board-1
|
||||
SFX("rotate",.5)
|
||||
end
|
||||
elseif key=="right"then
|
||||
if curBoard<8 then
|
||||
curBoard=curBoard+1
|
||||
if s.board<8 then
|
||||
s.board=s.board+1
|
||||
SFX("rotate",.5)
|
||||
end
|
||||
end
|
||||
@@ -474,37 +484,34 @@ end
|
||||
|
||||
function mouseDown.setting_touch(x,y,k)
|
||||
if k==2 then scene.back()end
|
||||
sel=onVK_org(x,y)or sel
|
||||
sceneTemp.sel=onVK_org(x,y)or sceneTemp.sel
|
||||
end
|
||||
function mouseMove.setting_touch(x,y,dx,dy)
|
||||
if sel and ms.isDown(1)and not widget_sel then
|
||||
local B=VK_org[sel]
|
||||
if sceneTemp.sel and ms.isDown(1)and not widget_sel then
|
||||
local B=VK_org[sceneTemp.sel]
|
||||
B.x,B.y=B.x+dx,B.y+dy
|
||||
end
|
||||
end
|
||||
function mouseUp.setting_touch(x,y,k)
|
||||
if sel then
|
||||
local B=VK_org[sel]
|
||||
local k=snapLevelValue[snapLevel]
|
||||
if sceneTemp.sel then
|
||||
local B=VK_org[sceneTemp.sel]
|
||||
local k=snapLevelValue[sceneTemp.snap]
|
||||
B.x,B.y=int(B.x/k+.5)*k,int(B.y/k+.5)*k
|
||||
end
|
||||
end
|
||||
function touchDown.setting_touch(id,x,y)
|
||||
sel=onVK_org(x,y)or sel
|
||||
sceneTemp.sel=onVK_org(x,y)or sceneTemp.sel
|
||||
end
|
||||
function touchUp.setting_touch(id,x,y)
|
||||
if sel then
|
||||
x,y=xOy:inverseTransformPoint(x,y)
|
||||
if sel then
|
||||
local B=VK_org[sel]
|
||||
local k=snapLevelValue[snapLevel]
|
||||
B.x,B.y=int(B.x/k+.5)*k,int(B.y/k+.5)*k
|
||||
end
|
||||
if sceneTemp.sel then
|
||||
local B=VK_org[sceneTemp.sel]
|
||||
local k=snapLevelValue[sceneTemp.snap]
|
||||
B.x,B.y=int(B.x/k+.5)*k,int(B.y/k+.5)*k
|
||||
end
|
||||
end
|
||||
function touchMove.setting_touch(id,x,y,dx,dy)
|
||||
if sel and not widget_sel then
|
||||
local B=VK_org[sel]
|
||||
if sceneTemp.sel and not widget_sel then
|
||||
local B=VK_org[sceneTemp.sel]
|
||||
B.x,B.y=B.x+dx,B.y+dy
|
||||
end
|
||||
end
|
||||
@@ -576,7 +583,8 @@ function touchMove.play(id,x,y,dx,dy)
|
||||
end
|
||||
function keyDown.play(key)
|
||||
if key=="escape"and not scene.swapping then
|
||||
return(frame<180 and back or pauseGame)()
|
||||
(frame<180 and back or pauseGame)()
|
||||
return
|
||||
end
|
||||
local m=setting.keyMap
|
||||
for p=1,players.human do
|
||||
@@ -628,9 +636,9 @@ function wheelmoved.history(x,y)
|
||||
end
|
||||
function keyDown.history(key)
|
||||
if key=="up"then
|
||||
sel=max(sel-5,1)
|
||||
sceneTemp=max(sceneTemp-10,1)
|
||||
elseif key=="down"then
|
||||
sel=min(sel+5,#updateLog-22)
|
||||
sceneTemp=min(sceneTemp+10,#updateLog-22)
|
||||
elseif key=="escape"then
|
||||
scene.back()
|
||||
end
|
||||
@@ -644,24 +652,21 @@ local function widgetPress(W,x,y)
|
||||
VOICE("nya")
|
||||
elseif W.type=="switch"then
|
||||
W.code()
|
||||
W:FX()
|
||||
SFX("move",.6)
|
||||
elseif W.type=="slider"then
|
||||
if not x then return end
|
||||
local p=W.disp()
|
||||
W.code(x<W.x and 0 or x>W.x+W.w and W.unit or int((x-W.x)*W.unit/W.w+.5))
|
||||
if p==W.disp()then return end
|
||||
W:FX(p)
|
||||
local p,P=W.disp(),x<W.x and 0 or x>W.x+W.w and W.unit or int((x-W.x)*W.unit/W.w+.5)
|
||||
if p==P then return end
|
||||
W.code(P)
|
||||
if W.change then W.change()end
|
||||
end
|
||||
if W.hide and W.hide()then widget_sel=nil end
|
||||
end
|
||||
local function widgetDrag(W,x,y,dx,dy)
|
||||
if W.type=="slider"then
|
||||
local p=W.disp()
|
||||
W.code(x<W.x and 0 or x>W.x+W.w and W.unit or int((x-W.x)*W.unit/W.w+.5))
|
||||
if p==W.disp()then return end
|
||||
W:FX(p)
|
||||
local p,P=W.disp(),x<W.x and 0 or x>W.x+W.w and W.unit or int((x-W.x)*W.unit/W.w+.5)
|
||||
if p==P then return end
|
||||
W.code(P)
|
||||
if W.change then W.change()end
|
||||
elseif not W:isAbove(x,y)then
|
||||
widget_sel=nil
|
||||
@@ -678,18 +683,14 @@ local function widgetControl_key(i)
|
||||
if not scene.swapping and widget_sel then
|
||||
widgetPress(widget_sel)
|
||||
end
|
||||
else
|
||||
elseif i=="left"or i=="right"then
|
||||
if widget_sel then
|
||||
local W=widget_sel
|
||||
if W.type=="slider"then
|
||||
local p=W.disp()
|
||||
if i=="left"then
|
||||
if W.disp()>0 then W.code(W.disp()-1)end
|
||||
elseif i=="right"then
|
||||
if W.disp()<W.unit then W.code(W.disp()+1)end
|
||||
end
|
||||
if p==W.disp()then return end
|
||||
W:FX(p)
|
||||
local P=i=="left"and(p>0 and p-1)or p<W.unit and p+1
|
||||
if p==P or not P then return end
|
||||
W.code(P)
|
||||
if W.change then W.change()end
|
||||
end
|
||||
end
|
||||
@@ -704,18 +705,19 @@ local function widgetControl_gamepad(i)
|
||||
end
|
||||
elseif i=="start"then
|
||||
if not scene.swapping and widget_sel then
|
||||
if not scene.swapping and widget_sel then
|
||||
widgetPress(widget_sel)
|
||||
end
|
||||
end
|
||||
elseif i=="dpleft"or i=="dpright"then
|
||||
if widget_sel then
|
||||
local W=widget_sel
|
||||
if W.hide and W.hide()then widget_sel=nil end
|
||||
if W.type=="button"then
|
||||
W.code()
|
||||
W:FX()
|
||||
SFX("button")
|
||||
VOICE("nya")
|
||||
elseif W.type=="switch"then
|
||||
W.code()
|
||||
W:FX()
|
||||
SFX("move",.6)
|
||||
-- elseif W.type=="slider"then
|
||||
if W.type=="slider"then
|
||||
local p=W.disp()
|
||||
local P=i=="left"and(p>0 and p-1)or p<W.unit and p+1
|
||||
if p==P or not P then return end
|
||||
W.code(P)
|
||||
if W.change then W.change()end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -950,44 +952,68 @@ function love.update(dt)
|
||||
scene.swapping=false
|
||||
end
|
||||
end
|
||||
if Tmr[scene.cur]then
|
||||
Tmr[scene.cur](dt)
|
||||
end
|
||||
local i=Tmr[scene.cur]
|
||||
if i then i(dt)end
|
||||
for i=#Task,1,-1 do
|
||||
local T=Task[i]
|
||||
if T.code(T.P,T.data)then
|
||||
rem(Task,i)
|
||||
end
|
||||
for i=i,#Task do
|
||||
Task[i]=Task[i+1]
|
||||
end
|
||||
end
|
||||
end
|
||||
for i=1,#voiceQueue do
|
||||
for i=#voiceQueue,1,-1 do
|
||||
local Q=voiceQueue[i]
|
||||
if #Q>0 then
|
||||
if type(Q[1])=="userdata"then
|
||||
if not Q[1]:isPlaying()then
|
||||
for i=1,#Q do
|
||||
Q[i]=Q[i+1]
|
||||
end
|
||||
end--放完了,pop出下一个
|
||||
else
|
||||
local n=1
|
||||
local L=voiceBank[Q[1]]
|
||||
while L[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not L[n]then
|
||||
L[n]=L[n-1]:clone()
|
||||
L[n]:seek(0)
|
||||
break
|
||||
end
|
||||
if Q.s==0 then--闲置轨,自动删除多余
|
||||
if i>3 then
|
||||
local _=voiceQueue
|
||||
for i=i,#_ do
|
||||
_[i]=_[i+1]
|
||||
end
|
||||
Q[1]=L[n]
|
||||
Q[1]:setVolume(setting.voc*.1)
|
||||
Q[1]:play()
|
||||
--load voice with string
|
||||
end
|
||||
elseif Q.s==1 then--等待转换
|
||||
Q[1]=getVoice(Q[1])
|
||||
Q[1]:setVolume(setting.voc*.1)
|
||||
Q[1]:play()
|
||||
Q.s=Q[2]and 2 or 4
|
||||
elseif Q.s==2 then--播放1,等待2
|
||||
if Q[1]:getDuration()-Q[1]:tell()<.08 then
|
||||
Q[2]=getVoice(Q[2])
|
||||
Q[2]:setVolume(setting.voc*.1)
|
||||
Q[2]:play()
|
||||
Q.s=3
|
||||
end
|
||||
elseif Q.s==3 then--12同时播放
|
||||
if not Q[1]:isPlaying()then
|
||||
for i=1,#Q do
|
||||
Q[i]=Q[i+1]
|
||||
end
|
||||
Q.s=Q[2]and 2 or 4
|
||||
end
|
||||
elseif Q.s==4 then--最后播放
|
||||
if not Q[1]:isPlaying()then
|
||||
Q[1]=nil
|
||||
Q.s=0
|
||||
end
|
||||
end
|
||||
if #Q>0 then
|
||||
if Q[1]:isPlaying()then
|
||||
if Q[2]and type(Q[2])=="string"and Q[1]:getDuration()-Q[1]:tell()<.08 then
|
||||
Q[2]=getVoice(Q[2])
|
||||
end
|
||||
--快放完了,播放下一个
|
||||
else
|
||||
for i=1,#Q do
|
||||
Q[i]=Q[i+1]
|
||||
end
|
||||
--放完了,移除
|
||||
end
|
||||
else
|
||||
end
|
||||
end
|
||||
-- for k,W in next,Widget[scene.cur]do
|
||||
-- end--更新控件
|
||||
for k,W in next,Widget[scene.cur]do
|
||||
W:update()
|
||||
end--更新控件
|
||||
end
|
||||
local scs={1,2,1,2,1,2,1,2,1,2,1.5,1.5,.5,2.5}
|
||||
local FPS=love.timer.getFPS
|
||||
@@ -1100,6 +1126,9 @@ function love.run()
|
||||
gc.present()
|
||||
end
|
||||
end
|
||||
if Timer()-lastFrame<.058 then
|
||||
T.sleep(.01)
|
||||
end
|
||||
while Timer()-lastFrame<.0158 do
|
||||
T.sleep(.001)
|
||||
end
|
||||
|
||||
51
paint.lua
51
paint.lua
@@ -115,7 +115,7 @@ local function VirtualkeyPreview()
|
||||
for i=1,#VK_org do
|
||||
local B=VK_org[i]
|
||||
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.setLineWidth(B.r*.07)
|
||||
gc.circle("line",B.x,B.y,B.r)
|
||||
@@ -245,7 +245,7 @@ end
|
||||
function Pnt.intro()
|
||||
gc.stencil(stencil_miniTitle,"replace",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.translate(250,150)
|
||||
gc.scale(30)
|
||||
@@ -254,7 +254,7 @@ function Pnt.intro()
|
||||
gc.setColor(1,1,1,.06)
|
||||
for i=41,5,-2 do
|
||||
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
|
||||
gc.setStencilTest()
|
||||
end
|
||||
@@ -295,7 +295,7 @@ function Pnt.mode()
|
||||
end
|
||||
function Pnt.music()
|
||||
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.draw(drawableText.musicRoom,20,20)
|
||||
gc.setColor(1,1,1)
|
||||
@@ -319,7 +319,7 @@ function Pnt.music()
|
||||
end
|
||||
function Pnt.custom()
|
||||
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(1,1,1)gc.draw(drawableText.custom,22,23)
|
||||
setFont(35)
|
||||
@@ -335,6 +335,7 @@ function Pnt.custom()
|
||||
end
|
||||
end
|
||||
function Pnt.draw()
|
||||
local sx,sy=sceneTemp.x,sceneTemp.y
|
||||
gc.translate(200,60)
|
||||
gc.setColor(1,1,1,.2)
|
||||
gc.setLineWidth(1)
|
||||
@@ -358,10 +359,11 @@ function Pnt.draw()
|
||||
gc.rectangle("line",30*sx-30,600-30*sy,30,30)
|
||||
end
|
||||
gc.translate(-200,-60)
|
||||
if clearSureTime>0 then
|
||||
gc.setColor(1,1,1,clearSureTime*.02)
|
||||
if sceneTemp.sure>0 then
|
||||
gc.setColor(1,1,1,sceneTemp.sure*.02)
|
||||
gc.draw(drawableText.question,660,11)
|
||||
end
|
||||
local pen=sceneTemp.pen
|
||||
if pen>0 then
|
||||
gc.setLineWidth(13)
|
||||
gc.setColor(blockColor[pen])
|
||||
@@ -480,7 +482,8 @@ function Pnt.setting_sound()
|
||||
gc.setColor(1,1,1,.8)
|
||||
mDraw(drawableText.setting_sound,640,15)
|
||||
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.draw(miya_ch,0,0)
|
||||
gc.setColor(1,1,1,.7)
|
||||
@@ -491,17 +494,18 @@ function Pnt.setting_sound()
|
||||
gc.translate(-x,-y)
|
||||
end
|
||||
function Pnt.setting_key()
|
||||
local s=sceneTemp
|
||||
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",
|
||||
keyboardSet<11 and 240 or 840,
|
||||
45*keyboardSet+20-450*int(keyboardSet/11),
|
||||
s.kb<11 and 240 or 840,
|
||||
45*s.kb+20-450*int(s.kb/11),
|
||||
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",
|
||||
joystickSet<11 and 440 or 1040,
|
||||
45*joystickSet+20-450*int(joystickSet/11),
|
||||
s.js<11 and 440 or 1040,
|
||||
45*s.js+20-450*int(s.js/11),
|
||||
200,45
|
||||
)
|
||||
--Selection rect
|
||||
@@ -515,15 +519,16 @@ function Pnt.setting_key()
|
||||
|
||||
gc.setColor(1,1,1)
|
||||
setFont(26)
|
||||
local board=s.board
|
||||
for N=1,20 do
|
||||
if N<11 then
|
||||
gc.printf(text.actName[N],47,45*N+22,180,"right")
|
||||
mStr(setting.keyMap[curBoard][N],340,45*N+22)
|
||||
mStr(setting.keyMap[curBoard+8][N],540,45*N+22)
|
||||
mStr(setting.keyMap[board][N],340,45*N+22)
|
||||
mStr(setting.keyMap[board+8][N],540,45*N+22)
|
||||
else
|
||||
gc.printf(text.actName[N],647,45*N-428,180,"right")
|
||||
mStr(setting.keyMap[curBoard][N],940,45*N-428)
|
||||
mStr(setting.keyMap[curBoard+8][N],1040,45*N-428)
|
||||
mStr(setting.keyMap[board][N],940,45*N-428)
|
||||
mStr(setting.keyMap[board+8][N],1040,45*N-428)
|
||||
end
|
||||
end
|
||||
gc.setLineWidth(2)
|
||||
@@ -535,8 +540,8 @@ function Pnt.setting_key()
|
||||
end
|
||||
setFont(35)
|
||||
gc.print("Player:",170,590)
|
||||
gc.print(int(curBoard*.5+.5),300,590)
|
||||
gc.print(curBoard.."/8",580,590)
|
||||
gc.print(int(board*.5+.5),300,590)
|
||||
gc.print(board.."/8",580,590)
|
||||
gc.draw(drawableText.ctrlSetHelp,50,650)
|
||||
end
|
||||
function Pnt.setting_touch()
|
||||
@@ -544,7 +549,7 @@ function Pnt.setting_touch()
|
||||
gc.setLineWidth(7)gc.rectangle("line",340,15,600,690)
|
||||
gc.setLineWidth(3)gc.rectangle("line",490,85,300,600)
|
||||
VirtualkeyPreview()
|
||||
local d=snapLevelValue[snapLevel]
|
||||
local d=snapLevelValue[sceneTemp.snap]
|
||||
if d>=10 then
|
||||
gc.setLineWidth(3)
|
||||
gc.setColor(1,1,1,sin(Timer()*4)*.1+.1)
|
||||
@@ -598,8 +603,8 @@ function Pnt.history()
|
||||
gc.setLineWidth(4)
|
||||
gc.rectangle("line",30,45,1000,632)
|
||||
setFont(20)
|
||||
for i=0,min(22,#updateLog-sel)do
|
||||
gc.print(updateLog[sel+i],40,50+27*(i))
|
||||
for i=0,min(22,#updateLog-sceneTemp)do
|
||||
gc.print(updateLog[sceneTemp+i],40,50+27*(i))
|
||||
end
|
||||
end
|
||||
return Pnt
|
||||
@@ -1803,7 +1803,7 @@ function player.drop(P)--Place piece
|
||||
end
|
||||
send=send+(renATK[P.combo]or 3)
|
||||
if #P.field==0 then
|
||||
P:showText(text.PC,0,-80,60,"flicker")
|
||||
P:showText(text.PC,0,-80,50,"flicker")
|
||||
send=min(send,3)+min(6+P.stat.pc,10)
|
||||
exblock=exblock+2
|
||||
sendTime=sendTime+60
|
||||
|
||||
33
scene.lua
33
scene.lua
@@ -21,7 +21,7 @@ local sceneInit={
|
||||
}
|
||||
end,
|
||||
intro=function()
|
||||
count=0
|
||||
sceneTemp=0--animation timer
|
||||
BGM("blank")
|
||||
end,
|
||||
main=function()
|
||||
@@ -37,12 +37,12 @@ local sceneInit={
|
||||
if bgmPlaying then
|
||||
for i=1,#musicID do
|
||||
if musicID[i]==bgmPlaying then
|
||||
sel=i
|
||||
sceneTemp=i--music select
|
||||
return
|
||||
end
|
||||
end
|
||||
else
|
||||
sel=1
|
||||
sceneTemp=1
|
||||
end
|
||||
end,
|
||||
mode=function()
|
||||
@@ -51,15 +51,14 @@ local sceneInit={
|
||||
destroyPlayers()
|
||||
end,
|
||||
custom=function()
|
||||
sel=sel or 1
|
||||
sceneTemp=1--option select
|
||||
destroyPlayers()
|
||||
curBG=customRange.bg[customSel[12]]
|
||||
BGM(customRange.bgm[customSel[13]])
|
||||
end,
|
||||
draw=function()
|
||||
curBG="none"
|
||||
clearSureTime=0
|
||||
pen,sx,sy=1,1,1
|
||||
sceneTemp={sure=0,pen=1,x=1,y=1}
|
||||
end,
|
||||
play=function()
|
||||
love.keyboard.setKeyRepeat(false)
|
||||
@@ -82,21 +81,23 @@ local sceneInit={
|
||||
curBG="none"
|
||||
end,
|
||||
setting_sound=function()
|
||||
sel=0--last sound time
|
||||
sceneTemp={last=0,jump=0}--last sound time,animation count(10→0)
|
||||
curBG="none"
|
||||
end,
|
||||
setting_key=function()
|
||||
curBoard=1
|
||||
keyboardSet=1
|
||||
joystickSet=1
|
||||
keyboardSetting=false
|
||||
joystickSetting=false
|
||||
sceneTemp={
|
||||
board=1,
|
||||
kb=1,js=1,
|
||||
kS=false,jS=false,
|
||||
}
|
||||
end,
|
||||
setting_touch=function()
|
||||
curBG="game2"
|
||||
defaultSel=1
|
||||
sel=nil
|
||||
snapLevel=1
|
||||
sceneTemp={
|
||||
default=1,
|
||||
snap=1,
|
||||
sel=nil,
|
||||
}
|
||||
end,
|
||||
setting_touchSwitch=function()
|
||||
curBG="matrix"
|
||||
@@ -107,7 +108,7 @@ local sceneInit={
|
||||
history=function()
|
||||
updateLog=require"updateLog"
|
||||
curBG="lightGrey"
|
||||
sel=1
|
||||
sceneTemp=1--scroll pos
|
||||
end,
|
||||
quit=function()
|
||||
love.timer.sleep(.3)
|
||||
|
||||
2
shader.lua
Normal file
2
shader.lua
Normal file
@@ -0,0 +1,2 @@
|
||||
gc=love.graphics
|
||||
shader_glow=gc.newShader("shader/glow.cs")
|
||||
5
shader/glow.cs
Normal file
5
shader/glow.cs
Normal 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;
|
||||
}
|
||||
@@ -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
|
||||
if(data.a>.1)return vec4(vec3(y/yresolution),1.);//碰撞检测,像素透明度>.1即透光
|
||||
}
|
||||
return vec4(vec3(1),1.);//返回最远距离1
|
||||
return vec4(1,1,1,1);//返回最远距离1
|
||||
}
|
||||
27
sound.lua
27
sound.lua
@@ -31,22 +31,39 @@ function SFX(s,v,pos)
|
||||
S:play()
|
||||
end
|
||||
end
|
||||
function getVoice(str)
|
||||
local n=1
|
||||
local L=voiceBank[str]
|
||||
while L[n]:isPlaying()do
|
||||
n=n+1
|
||||
if not L[n]then
|
||||
L[n]=L[n-1]:clone()
|
||||
L[n]:seek(0)
|
||||
break
|
||||
end
|
||||
end
|
||||
return L[n]
|
||||
--load voice with string
|
||||
end
|
||||
function getFreeVoiceChannel()
|
||||
local i=#voiceQueue
|
||||
for i=1,i do
|
||||
if #voiceQueue[i]==0 then return i end
|
||||
end
|
||||
voiceQueue[i+1]={}
|
||||
voiceQueue[i+1]={s=0}
|
||||
return i+1
|
||||
end
|
||||
function VOICE(s,chn)
|
||||
if setting.voc>0 then
|
||||
if chn then
|
||||
voiceQueue[chn][#voiceQueue[chn]+1]=voiceList[s][rnd(#voiceList[s])]
|
||||
--添加到[chn]
|
||||
local L=voiceQueue[chn]
|
||||
local _=voiceList[s]
|
||||
L[#L+1]=_[rnd(#_)]
|
||||
L.s=1
|
||||
--添加到queue[chn]
|
||||
else
|
||||
voiceQueue[getFreeVoiceChannel()]={voiceList[s][rnd(#voiceList[s])]}
|
||||
--自动查找/创建空轨
|
||||
voiceQueue[getFreeVoiceChannel()]={s=1,voiceList[s][rnd(#voiceList[s])]}
|
||||
--自动创建空轨/播放
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
12
timer.lua
12
timer.lua
@@ -47,14 +47,14 @@ function Tmr.load()
|
||||
end
|
||||
end
|
||||
function Tmr.intro()
|
||||
count=count+1
|
||||
if count==200 then count=80 end
|
||||
sceneTemp=sceneTemp+1
|
||||
if sceneTemp==200 then sceneTemp=80 end
|
||||
end
|
||||
function Tmr.main(dt)
|
||||
players[1]:update(dt)
|
||||
end
|
||||
function Tmr.draw()
|
||||
if clearSureTime>0 then clearSureTime=clearSureTime-1 end
|
||||
if sceneTemp.sure>0 then sceneTemp.sure=sceneTemp.sure-1 end
|
||||
end
|
||||
function Tmr.play(dt)
|
||||
frame=frame+1
|
||||
@@ -140,4 +140,10 @@ function Tmr.pause(dt)
|
||||
pauseTimer=pauseTimer+1
|
||||
end
|
||||
end
|
||||
function Tmr.setting_sound()
|
||||
local t=sceneTemp.jump
|
||||
if t>0 then
|
||||
sceneTemp.jump=t-1
|
||||
end
|
||||
end
|
||||
return Tmr
|
||||
@@ -8,17 +8,19 @@ Patron(rmb10+):
|
||||
zxc
|
||||
?[D*a]
|
||||
Future outlook:
|
||||
New mode system with:
|
||||
ultra mode
|
||||
rythem mode
|
||||
combo mode
|
||||
bigbang mode
|
||||
TTT mode
|
||||
Normal:
|
||||
powerinfo switch
|
||||
splashing block
|
||||
ajustable next count
|
||||
new mode system
|
||||
custom block color/direction
|
||||
combo mode
|
||||
bigbang mode
|
||||
TTT mode
|
||||
custom block sequence
|
||||
CC smarter(think of gaebage buffer)
|
||||
CC smarter(think of garbage buffer)
|
||||
game recording
|
||||
new AI:task-Z
|
||||
auto GUI in any screen size
|
||||
@@ -27,9 +29,17 @@ Future outlook:
|
||||
infinite 1v1
|
||||
square mode
|
||||
more FXs & 3d features & animations
|
||||
0.8.4:
|
||||
better widget performence
|
||||
vocal more natural(important,may cause new bug)
|
||||
a bit better performence on mobile devices
|
||||
fatal bug fixed
|
||||
0.8.3:
|
||||
new widget appearence
|
||||
cuter miya
|
||||
0.8.2+:
|
||||
GUI adjusted
|
||||
added a cute cat
|
||||
miya figure added
|
||||
0.8.2:
|
||||
new widget appearence
|
||||
GUI adjusted
|
||||
|
||||
Reference in New Issue
Block a user