Compare commits

...

2 Commits

Author SHA1 Message Date
MrZ_26
fd5fac4e8a 0.7.32α 2020-02-04 19:37:53 +08:00
MrZ_26
1641440886 0.7.31+α 2020-02-04 19:37:41 +08:00
30 changed files with 635 additions and 558 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -108,7 +108,6 @@ function switch:draw()
--frame --frame
local t=self.text local t=self.text
if t then if t then
if type(t)=="function"then t=t()end
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(self.font) setFont(self.font)
gc.printf(t,x-412,y+20-self.font*.7,400,"right") gc.printf(t,x-412,y+20-self.font*.7,400,"right")

View File

@@ -1,5 +1,5 @@
math.randomseed(os.time()) math.randomseed(os.time())
gameVersion="Alpha V0.7.30" gameVersion="Alpha V0.7.32"
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"
@@ -23,7 +23,7 @@ function love.conf(t)
W.resizable=1 W.resizable=1
W.fullscreentype="desktop"--"exclusive" W.fullscreentype="desktop"--"exclusive"
W.fullscreen=X W.fullscreen=X
W.vsync=X--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--The number of bits per sample in the stencil buffer

File diff suppressed because it is too large Load Diff

View File

@@ -19,8 +19,9 @@ setting={
skin=1, skin=1,
--graphic --graphic
sfx=8,bgm=6, sfx=10,bgm=7,
vib=3,voc=0, vib=3,voc=0,
stereo=6,
--sound --sound
keyMap={ keyMap={
@@ -33,6 +34,7 @@ setting={
}, },
VKSwitch=true, VKSwitch=true,
VKTrack=true,--If tracked VKTrack=true,--If tracked
VKDodge=false,--If repel
VKTchW=3,--Touch Weight VKTchW=3,--Touch Weight
VKCurW=4,--CurPos Weight VKCurW=4,--CurPos Weight
VKIcon=true, VKIcon=true,

BIN
font.ttf

Binary file not shown.

View File

@@ -192,7 +192,7 @@ return{
warning="禁 止 私 自 传 播", warning="禁 止 私 自 传 播",
WidgetText={ WidgetText={
main={ main={
lang="", lang="-Lang",
qplay="快速开始", qplay="快速开始",
play="开始", play="开始",
setting="设置", setting="设置",
@@ -256,6 +256,7 @@ return{
pause={ pause={
resume= "继续", resume= "继续",
restart="重新开始", restart="重新开始",
setting="设置",
quit= "退出", quit= "退出",
}, },
setting_game={ setting_game={
@@ -324,6 +325,7 @@ return{
back=BK, back=BK,
}, },
setting_trackSetting={ setting_trackSetting={
VKDodge="自动避让",
back=BK, back=BK,
}, },
help={ help={

View File

@@ -192,7 +192,7 @@ return{
warning="禁 止 私 自 传 播", warning="禁 止 私 自 传 播",
WidgetText={ WidgetText={
main={ main={
lang="全中", lang="-Lang",
qplay="快速开始", qplay="快速开始",
play="开始", play="开始",
setting="设置", setting="设置",
@@ -256,6 +256,7 @@ return{
pause={ pause={
resume= "继续", resume= "继续",
restart="重新开始", restart="重新开始",
setting="设置",
quit= "退出", quit= "退出",
}, },
@@ -325,6 +326,7 @@ return{
back=BK, back=BK,
}, },
setting_trackSetting={ setting_trackSetting={
VKDodge="自动避让",
back=BK, back=BK,
}, },
help={ help={
@@ -342,4 +344,4 @@ return{
back=BK, back=BK,
}, },
}, },
}--部分译文 }

View File

@@ -191,7 +191,7 @@ Lib used:
warning="DO NOT DISTRIBUTE", warning="DO NOT DISTRIBUTE",
WidgetText={ WidgetText={
main={ main={
lang="English", lang="文-Lang",
qplay="Qplay", qplay="Qplay",
play="Play", play="Play",
setting="Settings", setting="Settings",
@@ -255,6 +255,7 @@ Lib used:
pause={ pause={
resume="Resume", resume="Resume",
restart="Restart", restart="Restart",
setting="Setting",
quit="Quit", quit="Quit",
}, },
setting_game={ setting_game={
@@ -323,6 +324,7 @@ Lib used:
back=BK, back=BK,
}, },
setting_trackSetting={ setting_trackSetting={
VKDodge="Auto Dodge",
back=BK, back=BK,
}, },
help={ help={

View File

@@ -57,17 +57,20 @@ blockColor={
} }
sfx={ sfx={
"welcome", "welcome",
"error","error_long",
--Stereo sfxs
"button","swipe", "button","swipe",
"ready","start","win","fail","collect", "ready","start","win","fail","collect",
"move","rotate","rotatekick","hold", "move","rotate","rotatekick","hold",
"prerotate","prehold", "prerotate","prehold",
"lock","drop","fall", "lock","drop","fall",
"error","error_long","reach", "reach",
"ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11","ren_mega", "ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11","ren_mega",
"clear_1","clear_2","clear_3","clear_4", "clear_1","clear_2","clear_3","clear_4",
"spin_0","spin_1","spin_2","spin_3", "spin_0","spin_1","spin_2","spin_3",
"emit","blip_1","blip_2", "emit","blip_1","blip_2",
"perfectclear", "perfectclear",
--mono sfxs
} }
bgm={ bgm={
"blank", "blank",
@@ -163,7 +166,7 @@ customRange={
RCPB={10,33,200,33,105,5,105,60} RCPB={10,33,200,33,105,5,105,60}
snapLevelValue={1,10,20,40,60,80} snapLevelValue={1,10,20,40,60,80}
up0to4={[0]="000%UP","025%UP","050%UP","075%UP","100%UP",} up0to4={[0]="000%UP","025%UP","050%UP","075%UP","100%UP",}
sectionName={"M7","M8","M9","M","MK","MV","MO","MM","GM"}
modeID={ modeID={
[0]="custom", [0]="custom",
"sprint","marathon","master","classic","zen","infinite","solo","round","tsd","blind", "sprint","marathon","master","classic","zen","infinite","solo","round","tsd","blind",
@@ -330,7 +333,7 @@ Widget={
back= newButton(640, 630,230,90, color.white, 45,scene.back), back= newButton(640, 630,230,90, color.white, 45,scene.back),
}, },
music={ music={
bgm= newSlider(760, 80,400,8,40,nil,function()return setting.bgm end,function(i)setting.bgm=i;BGM(bgmPlaying)end), bgm= newSlider(760, 80,400,10,40,nil,function()return setting.bgm end,function(i)setting.bgm=i;BGM(bgmPlaying)end),
up= newButton(1100, 200,120,120,color.white,60,function()love.keypressed("up")end), up= newButton(1100, 200,120,120,color.white,60,function()love.keypressed("up")end),
play= newButton(1100, 340,120,120,color.white,40,function()love.keypressed("space")end,function()return setting.bgm==0 end), play= newButton(1100, 340,120,120,color.white,40,function()love.keypressed("space")end,function()return setting.bgm==0 end),
down= newButton(1100, 480,120,120,color.white,60,function()love.keypressed("down")end), down= newButton(1100, 480,120,120,color.white,60,function()love.keypressed("down")end),
@@ -380,6 +383,10 @@ Widget={
resetGameData() resetGameData()
scene.swapTo("play","none") scene.swapTo("play","none")
end), end),
setting=newButton(1150,80,200,100,color.yellow,45,function()
scene.push()
scene.swapTo("setting_sound")
end),
quit= newButton(640,600,240,100,color.white,50,scene.back), quit= newButton(640,600,240,100,color.white,50,scene.back),
}, },
setting_game={ setting_game={
@@ -445,10 +452,10 @@ Widget={
setting_sound={ setting_sound={
game= newButton(200,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_game")end, nil,"graphic"), game= newButton(200,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_game")end, nil,"graphic"),
graphic=newButton(1080,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_graphic")end, nil,"sfx"), graphic=newButton(1080,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_graphic")end, nil,"sfx"),
sfx=newSlider(180,250,400,8,40,function()SFX("blip_1")end, function()return setting.sfx end,function(i)setting.sfx=i end,nil,"bgm"), sfx=newSlider(180,250,400,10,40,function()SFX("blip_1")end, function()return setting.sfx end,function(i)setting.sfx=i end,nil,"bgm"),
bgm=newSlider(750,250,400,8,40,function()BGM(bgmPlaying or"blank")end, function()return setting.bgm end,function(i)setting.bgm=i end,nil,"vib"), bgm=newSlider(750,250,400,10,40,function()BGM(bgmPlaying or"blank")end, function()return setting.bgm end,function(i)setting.bgm=i end,nil,"vib"),
vib=newSlider(180,440,400,5,40,function()VIB(1)end, function()return setting.vib end,function(i)setting.vib=i end,nil,"voc"), vib=newSlider(180,440,400,5,40,function()VIB(1)end, function()return setting.vib end,function(i)setting.vib=i end,nil,"voc"),
voc=newSlider(750,440,400,8,40,function()VOICE("nya")end, function()return setting.voc end,function(i)setting.voc=i end,nil,"back"), voc=newSlider(750,440,400,10,40,function()VOICE("nya")end, function()return setting.voc end,function(i)setting.voc=i end,nil,"back"),
back=newButton(1160,600,160,160,color.white,55,scene.back,nil,"game"), back=newButton(1160,600,160,160,color.white,55,scene.back,nil,"game"),
}, },
setting_key={ setting_key={
@@ -527,6 +534,7 @@ Widget={
back= newButton(1080,600,240,80,color.white,50,scene.back), back= newButton(1080,600,240,80,color.white,50,scene.back),
}, },
setting_trackSetting={ setting_trackSetting={
VKDodge= newSwitch(400,200, 40,function()return setting.VKDodge end,function()setting.VKDodge=not setting.VKDodge end),
VKTchW= newSlider(140,310,1000,10,40,nil,function()return setting.VKTchW end,function(i)setting.VKTchW=i;setting.VKCurW=math.max(setting.VKCurW,i)end), VKTchW= newSlider(140,310,1000,10,40,nil,function()return setting.VKTchW end,function(i)setting.VKTchW=i;setting.VKCurW=math.max(setting.VKCurW,i)end),
VKCurW= newSlider(140,370,1000,10,40,nil,function()return setting.VKCurW end,function(i)setting.VKCurW=i;setting.VKTchW=math.min(setting.VKTchW,i)end), VKCurW= newSlider(140,370,1000,10,40,nil,function()return setting.VKCurW end,function(i)setting.VKCurW=i;setting.VKTchW=math.min(setting.VKTchW,i)end),
back= newButton(1080,600,240,80,color.white,50,scene.back), back= newButton(1080,600,240,80,color.white,50,scene.back),

View File

@@ -121,13 +121,15 @@ local function getNewBlock()
return t return t
end end
local function onVirtualkey(x,y) local function onVirtualkey(x,y)
local d1,nearest,distance local dist,nearest=1e15
for K=1,#virtualkey do for K=1,#virtualkey do
local b=virtualkey[K] local b=virtualkey[K]
d1=(x-b.x)^2+(y-b.y)^2 if b.ava then
if d1<b.r^2 then local d1=(x-b.x)^2+(y-b.y)^2
if not nearest or d1<distance then if d1<b.r^2 then
nearest,distance=K,d1 if d1<dist then
nearest,dist=K,d1
end
end end
end end
end end
@@ -497,15 +499,17 @@ function touchDown.play(id,x,y)
players[1]:pressKey(t) players[1]:pressKey(t)
if setting.VKTrack then if setting.VKTrack then
local B=virtualkey[t] local B=virtualkey[t]
for i=1,#virtualkey do --按钮软碰撞(做不来hhh随便做一个,效果还行!)
local b=virtualkey[i] if setting.VKDodge then
local d=B.r+b.r-((B.x-b.x)^2+(B.y-b.y)^2)^.5--碰撞深度(负数=间隔距离) for i=1,#virtualkey do
if d>0 then local b=virtualkey[i]
b.x=b.x+(b.x-B.x)*d*b.r*.00005 local d=B.r+b.r-((B.x-b.x)^2+(B.y-b.y)^2)^.5--碰撞深度(负数=间隔距离)
b.y=b.y+(b.y-B.y)*d*b.r*.00005 if d>0 then
b.x=b.x+(b.x-B.x)*d*b.r*.00005
b.y=b.y+(b.y-B.y)*d*b.r*.00005
end
end end
end end
--按钮软碰撞(做不来hhh随便做一个,效果还行!)
local O=VK_org[t] local O=VK_org[t]
local _FW,_CW=setting.VKTchW*.1,1-setting.VKCurW*.1 local _FW,_CW=setting.VKTchW*.1,1-setting.VKCurW*.1
local _OW=1-_FW-_CW local _OW=1-_FW-_CW
@@ -930,7 +934,7 @@ function love.update(dt)
end end
end end
Q[1]=L[n] Q[1]=L[n]
Q[1]:setVolume(setting.voc*.125) Q[1]:setVolume(setting.voc*.1)
Q[1]:play() Q[1]:play()
--load voice with string --load voice with string
end end

View File

@@ -11,6 +11,7 @@ local scr=scr--screen camera
local gameEnv0={ local gameEnv0={
das=10,arr=2, das=10,arr=2,
sddas=2,sdarr=2, sddas=2,sdarr=2,
quickR=true,swap=true,
ghost=true,center=true, ghost=true,center=true,
grid=false,swap=true, grid=false,swap=true,
_20G=false,bone=false, _20G=false,bone=false,
@@ -286,9 +287,8 @@ local mesDisp={
classic=function(P) classic=function(P)
setFont(80) setFont(80)
local r=P.gameEnv.target*.1 local r=P.gameEnv.target*.1
mStr(r<11 and 19+r or r==11 and"00"or r==12 and"0a"or format("%x",r*10-110),-82,210) mStr(r<11 and 18 or r<22 and r+8 or r==22 and"00"or r==23 and"0a"or format("%x",r*10-220),-82,210)
setFont(20) mDraw(drawableText.speedLV,-82,290)
mStr("speed level",-82,290)
setFont(50) setFont(50)
mStr(P.stat.row,-82,320) mStr(P.stat.row,-82,320)
mStr(P.gameEnv.target,-82,370) mStr(P.gameEnv.target,-82,370)
@@ -302,24 +302,21 @@ local mesDisp={
setFont(50) setFont(50)
mStr(P.stat.atk,-82,310) mStr(P.stat.atk,-82,310)
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420) mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
setFont(20) mDraw(drawableText.atk,-82,363)
mStr("Attack",-82,363) mDraw(drawableText.eff,-82,475)
mStr("Efficiency",-82,475)
end, end,
tsd=function(P) tsd=function(P)
setFont(35)
mStr("TSD",-82,407)
setFont(80) setFont(80)
mStr(P.modeData.event,-82,330) mStr(P.modeData.event,-82,330)
mDraw(drawableText.tsd,-82,407)
end, end,
blind=function(P) blind=function(P)
setFont(25) mDraw(drawableText.line,-82,300)
mStr("Lines",-82,300) mDraw(drawableText.techrash,-82,420)
mStr("Techrash",-82,420)
if curMode.lv==6 then if curMode.lv==6 then
mStr("Point",-82,170) mDraw(drawableText.grade,-82,170)
setFont(60) setFont(60)
mStr(P.modeData.point*.1,-82,110) mStr(P.modeData.event,-82,110)
end end
setFont(80) setFont(80)
mStr(P.stat.row,-82,220) mStr(P.stat.row,-82,220)
@@ -328,57 +325,51 @@ local mesDisp={
dig=function(P) dig=function(P)
setFont(70) setFont(70)
mStr(P.modeData.event,-82,310) mStr(P.modeData.event,-82,310)
setFont(30) mDraw(drawableText.wave,-82,375)
mStr("Wave",-82,375)
end, end,
survivor=function(P) survivor=function(P)
setFont(70) setFont(70)
mStr(P.modeData.event,-82,310) mStr(P.modeData.event,-82,310)
setFont(30) mDraw(drawableText.wave,-82,375)
mStr("Wave",-82,375)
end, end,
defender=function(P) defender=function(P)
setFont(60) setFont(60)
mStr(P.modeData.point,-82,315) mStr(P.modeData.point,-82,315)
setFont(30) mDraw(drawableText.rpm,-82,375)
mStr("RPM",-82,375)
end, end,
attacker=function(P) attacker=function(P)
setFont(60) setFont(60)
mStr(P.modeData.point,-82,315) mStr(P.modeData.point,-82,315)
setFont(30) mDraw(drawableText.rpm,-82,375)
mStr("RPM",-82,375)
end, end,
tech=function(P) tech=function(P)
setFont(50) setFont(50)
mStr(P.stat.atk,-82,310) mStr(P.stat.atk,-82,310)
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420) mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
setFont(20) mDraw(drawableText.atk,-82,363)
mStr("Attack",-82,363) mDraw(drawableText.eff,-82,475)
mStr("Efficiency",-82,475)
end, end,
c4wtrain=function(P) c4wtrain=function(P)
setFont(50) setFont(50)
mStr(max(100-P.stat.row,0),-82,220) mStr(max(100-P.stat.row,0),-82,220)
mStr(P.combo,-82,310) mStr(P.combo,-82,310)
mStr(P.modeData.point,-82,400) mStr(P.modeData.point,-82,400)
setFont(20) mDraw(drawableText.combo,-82,358)
mStr("combo",-82,358) mDraw(drawableText.mxcmb,-82,450)
mStr("max combo",-82,450)
end, end,
pctrain=function(P) pctrain=function(P)
setFont(22)
mStr("Perfect Clear",-82,412)
setFont(80) setFont(80)
mStr(P.stat.pc,-82,330) mStr(P.stat.pc,-82,330)
mDraw(drawableText.pc,-82,412)
end, end,
pcchallenge=function(P) pcchallenge=function(P)
setFont(22)
mStr("Perfect Clear",-82,432)
setFont(80)
mStr(P.stat.pc,-82,350)
setFont(50) setFont(50)
mStr(max(100-P.stat.row,0),-82,250) mStr(max(100-P.stat.row,0),-82,250)
setFont(80)
mStr(P.stat.pc,-82,350)
mDraw(drawableText.pc,-82,432)
gc.setColor(.5,.5,.5) gc.setColor(.5,.5,.5)
if frame>179 then if frame>179 then
local y=72*(7-(P.stat.piece+(P.hd.id>0 and 2 or 1))%7)-36 local y=72*(7-(P.stat.piece+(P.hd.id>0 and 2 or 1))%7)-36
@@ -389,8 +380,8 @@ local mesDisp={
setFont(40) setFont(40)
mStr(#players.alive.."/49",-82,175) mStr(#players.alive.."/49",-82,175)
mStr(P.ko,-70,215) mStr(P.ko,-70,215)
gc.draw(drawableText.ko,-127,225)
setFont(25) setFont(25)
gc.print("KO",-127,225)
gc.setColor(1,.5,0,.6) gc.setColor(1,.5,0,.6)
gc.print(P.badge,-47,227) gc.print(P.badge,-47,227)
gc.setColor(1,1,1) gc.setColor(1,1,1)
@@ -404,8 +395,8 @@ local mesDisp={
setFont(40) setFont(40)
mStr(#players.alive.."/99",-82,175) mStr(#players.alive.."/99",-82,175)
mStr(P.ko,-70,215) mStr(P.ko,-70,215)
gc.draw(drawableText.ko,-127,225)
setFont(25) setFont(25)
gc.print("KO",-127,225)
gc.setColor(1,.5,0,.6) gc.setColor(1,.5,0,.6)
gc.print(P.badge,-47,227) gc.print(P.badge,-47,227)
gc.setColor(1,1,1) gc.setColor(1,1,1)
@@ -421,10 +412,9 @@ local mesDisp={
end, end,
custom=function(P) custom=function(P)
if P.gameEnv.puzzle or P.gameEnv.target>1e10 then if P.gameEnv.puzzle or P.gameEnv.target>1e10 then
setFont(25)
mStr("Lines",-82,290)
setFont(60) setFont(60)
mStr(P.stat.row,-82,225) mStr(P.stat.row,-82,225)
mDraw(drawableText.line,-82,290)
else else
setFont(60) setFont(60)
mStr(max(P.gameEnv.target-P.stat.row,0),-82,240) mStr(max(P.gameEnv.target-P.stat.row,0),-82,240)
@@ -554,7 +544,7 @@ function newDemoPlayer(id,x,y,size)
P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
P.moving,P.downing=0,0 P.moving,P.downing=0,0
P.waiting,P.falling=-1,-1 P.waiting,P.falling=-1,-1
P.clearing={} P.clearing,P.cleared={},{}
P.combo,P.b2b=0,0 P.combo,P.b2b=0,0
P.fieldBeneath=0 P.fieldBeneath=0
P.shade={} P.shade={}
@@ -703,7 +693,7 @@ function newPlayer(id,x,y,size,AIdata)
P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
P.moving,P.downing=0,0 P.moving,P.downing=0,0
P.waiting,P.falling=-1,-1 P.waiting,P.falling=-1,-1
P.clearing={} P.clearing,P.cleared={},{}
P.combo,P.b2b=0,0 P.combo,P.b2b=0,0
P.fieldBeneath=0 P.fieldBeneath=0
@@ -804,9 +794,7 @@ function player.update(P,dt)
else else
local L=#P.clearing local L=#P.clearing
if P.human and P.gameEnv.fall>0 and #P.field+L>P.clearing[L]then SFX("fall")end if P.human and P.gameEnv.fall>0 and #P.field+L>P.clearing[L]then SFX("fall")end
for i=1,L do P.clearing,P.cleared={},{}
P.clearing[i]=nil
end
end end
end end
if not P.control then goto stop end if not P.control then goto stop end
@@ -865,9 +853,7 @@ function player.update(P,dt)
else else
local L=#P.clearing local L=#P.clearing
if P.human and P.gameEnv.fall>0 and #P.field+L>P.clearing[L]then SFX("fall")end if P.human and P.gameEnv.fall>0 and #P.field+L>P.clearing[L]then SFX("fall")end
for i=1,L do P.clearing,P.cleared={},{}
P.clearing[i]=nil
end
end end
end::stop:: end::stop::
if P.endCounter<40 then if P.endCounter<40 then
@@ -1383,6 +1369,7 @@ local function checkrow(P,start,height)--(cy,r)
for i=1,height do for i=1,height do
if ckfull(P,h)then if ckfull(P,h)then
ins(P.clearing,h) ins(P.clearing,h)
ins(P.cleared,h+c)
removeRow(P.field,h) removeRow(P.field,h)
removeRow(P.visTime,h) removeRow(P.visTime,h)
c=c+1 c=c+1
@@ -1410,6 +1397,9 @@ local function solid(P,x,y)
if y>#P.field then return false end if y>#P.field then return false end
return P.field[y][x]>0 return P.field[y][x]>0
end end
local function getBlockDirection(P)
return(P.curX+P.sc[2]-6.5)*.15
end
function player:fineError(rate) function player:fineError(rate)
self.stat.extraPiece=self.stat.extraPiece+1 self.stat.extraPiece=self.stat.extraPiece+1
@@ -1697,7 +1687,7 @@ function player:spin(d,ifpre)
self.spinLast=2 self.spinLast=2
self.stat.rotate=self.stat.rotate+1 self.stat.rotate=self.stat.rotate+1
self:freshgho() self:freshgho()
SFX("rotatekick") SFX("rotatekick",nil,getBlockDirection(self))
return return
end end
else else
@@ -1705,7 +1695,7 @@ function player:spin(d,ifpre)
end end
end end
if self.human then if self.human then
SFX(ifpre and"prerotate"or"rotate") SFX(ifpre and"prerotate"or"rotate",nil,getBlockDirection(self))
end end
return return
end end
@@ -1736,9 +1726,8 @@ function player:spin(d,ifpre)
if not ifpre then self:freshgho()end if not ifpre then self:freshgho()end
if self.gameEnv.easyFresh or y0>self.curY then self:freshLockDelay()end if self.gameEnv.easyFresh or y0>self.curY then self:freshLockDelay()end
if self.human then if self.human then
SFX(ifpre and"prerotate"or ifoverlap(self,self.cur.bk,self.curX,self.curY+1)and ifoverlap(self,self.cur.bk,self.curX-1,self.curY)and ifoverlap(self,self.cur.bk,self.curX+1,self.curY)and"rotatekick"or"rotate") SFX(ifpre and"prerotate"or ifoverlap(self,self.cur.bk,self.curX,self.curY+1)and ifoverlap(self,self.cur.bk,self.curX-1,self.curY)and ifoverlap(self,self.cur.bk,self.curX+1,self.curY)and"rotatekick"or"rotate",nil,getBlockDirection(self))
end end
self.ctrlCount=self.ctrlCount+(d==2 and 2 or 1)
self.stat.rotate=self.stat.rotate+1 self.stat.rotate=self.stat.rotate+1
end end
function player:hold(ifpre) function player:hold(ifpre)
@@ -1810,7 +1799,7 @@ function player:resetblock()
self:freshgho() self:freshgho()
if self.keyPressing[6]then self.act.hardDrop(self)self.keyPressing[6]=false end if self.keyPressing[6]then self.act.hardDrop(self)self.keyPressing[6]=false end
end end
function player:drop()--(Place piece) function player:drop()--Place piece
self.dropTime[11]=ins(self.dropTime,1,frame)--update speed dial self.dropTime[11]=ins(self.dropTime,1,frame)--update speed dial
self.waiting=self.gameEnv.wait self.waiting=self.gameEnv.wait
local dospin=0 local dospin=0
@@ -2086,7 +2075,7 @@ function player:drop()--(Place piece)
self:garbageSend(T,send,sendTime,1,self.cur.color,self.lastClear,dospin,mini,self.combo) self:garbageSend(T,send,sendTime,1,self.cur.color,self.lastClear,dospin,mini,self.combo)
end end
self.stat.send=self.stat.send+send self.stat.send=self.stat.send+send
if self.human and send>3 then SFX("emit",min(send,8)*.125)end if self.human and send>3 then SFX("emit",min(send,8)*.1)end
end end
end end
else else
@@ -2111,7 +2100,7 @@ function player:drop()--(Place piece)
self.stat.score=self.stat.score+cscore self.stat.score=self.stat.score+cscore
self.stat.piece,self.stat.row=self.stat.piece+1,self.stat.row+cc self.stat.piece,self.stat.row=self.stat.piece+1,self.stat.row+cc
Event[self.gameEnv.dropPiece](self) Event[self.gameEnv.dropPiece](self)
if self.human then SFX("lock")end if self.human then SFX("lock",nil,getBlockDirection(self))end
end end
function player:pressKey(i) function player:pressKey(i)
self.keyPressing[i]=true self.keyPressing[i]=true
@@ -2136,8 +2125,11 @@ end
-------------------------<Controls>------------------------- -------------------------<Controls>-------------------------
player.act={} player.act={}
function player.act.moveLeft(P,auto) function player.act.moveLeft(P,auto)
if not auto then
P.ctrlCount=P.ctrlCount+1
end
if P.keyPressing[9]then if P.keyPressing[9]then
if setting.swap then if P.gameEnv.swap then
P:changeAtkMode(1) P:changeAtkMode(1)
end end
elseif P.control and P.waiting==-1 then elseif P.control and P.waiting==-1 then
@@ -2150,7 +2142,6 @@ function player.act.moveLeft(P,auto)
P.spinLast=false P.spinLast=false
if not auto then if not auto then
P.moving=-1 P.moving=-1
P.ctrlCount=P.ctrlCount+1
end end
else else
P.moving=-P.gameEnv.das-1 P.moving=-P.gameEnv.das-1
@@ -2160,8 +2151,11 @@ function player.act.moveLeft(P,auto)
end end
end end
function player.act.moveRight(P,auto) function player.act.moveRight(P,auto)
if not auto then
P.ctrlCount=P.ctrlCount+1
end
if P.keyPressing[9]then if P.keyPressing[9]then
if setting.swap then if P.gameEnv.swap then
P:changeAtkMode(2) P:changeAtkMode(2)
end end
elseif P.control and P.waiting==-1 then elseif P.control and P.waiting==-1 then
@@ -2174,7 +2168,6 @@ function player.act.moveRight(P,auto)
P.spinLast=false P.spinLast=false
if not auto then if not auto then
P.moving=1 P.moving=1
P.ctrlCount=P.ctrlCount+1
end end
else else
P.moving=P.gameEnv.das+1 P.moving=P.gameEnv.das+1
@@ -2185,25 +2178,28 @@ function player.act.moveRight(P,auto)
end end
function player.act.rotRight(P) function player.act.rotRight(P)
if P.control and P.waiting==-1 then if P.control and P.waiting==-1 then
P.ctrlCount=P.ctrlCount+1
P:spin(1) P:spin(1)
P.keyPressing[3]=false P.keyPressing[3]=false
end end
end end
function player.act.rotLeft(P) function player.act.rotLeft(P)
if P.control and P.waiting==-1 then if P.control and P.waiting==-1 then
P.ctrlCount=P.ctrlCount+1
P:spin(3) P:spin(3)
P.keyPressing[4]=false P.keyPressing[4]=false
end end
end end
function player.act.rotFlip(P) function player.act.rotFlip(P)
if P.control and P.waiting==-1 then if P.control and P.waiting==-1 then
P.ctrlCount=P.ctrlCount+2
P:spin(2) P:spin(2)
P.keyPressing[5]=false P.keyPressing[5]=false
end end
end end
function player.act.hardDrop(P) function player.act.hardDrop(P)
if P.keyPressing[9]then if P.keyPressing[9]then
if setting.swap then if P.gameEnv.swap then
P:changeAtkMode(3) P:changeAtkMode(3)
end end
P.keyPressing[6]=false P.keyPressing[6]=false
@@ -2220,7 +2216,7 @@ function player.act.hardDrop(P)
P.curY=P.y_img P.curY=P.y_img
P.spinLast=false P.spinLast=false
if P.human then if P.human then
SFX("drop") SFX("drop",nil,getBlockDirection(P))
VIB(1) VIB(1)
end end
end end
@@ -2231,7 +2227,7 @@ function player.act.hardDrop(P)
end end
function player.act.softDrop(P) function player.act.softDrop(P)
if P.keyPressing[9]then if P.keyPressing[9]then
if setting.swap then if P.gameEnv.swap then
P:changeAtkMode(4) P:changeAtkMode(4)
end end
else else
@@ -2253,7 +2249,7 @@ function player.act.func(P)
P.gameEnv.Fkey(P) P.gameEnv.Fkey(P)
end end
function player.act.restart(P) function player.act.restart(P)
if setting.quickR or frame<180 then if P.gameEnv.quickR or frame<180 then
clearTask("play") clearTask("play")
resetPartGameData() resetPartGameData()
end end
@@ -2359,5 +2355,4 @@ function player.act.addRight(P)
P.act.insLeft(P) P.act.insLeft(P)
P.act.hardDrop(P) P.act.hardDrop(P)
end end
-------------------------</Controls>------------------------- -------------------------</Controls>-------------------------

View File

@@ -66,13 +66,23 @@ local sceneInit={
if needResetGameData then if needResetGameData then
resetGameData() resetGameData()
needResetGameData=nil needResetGameData=nil
else
BGM(modeEnv.bgm)
end end
curBG=modeEnv.bg
end, end,
pause=function() pause=function()
curBG=modeEnv.bg
end, end,
setting_game=function() setting_game=function()
curBG="none" curBG="none"
end, end,
setting_graphic=function()
curBG="none"
end,
setting_sound=function()
curBG="none"
end,
setting_key=function() setting_key=function()
curBoard=1 curBoard=1
keyboardSet=1 keyboardSet=1
@@ -170,6 +180,9 @@ function scene.push(tar,style)
scene.seq[m+2]=style or"fade" scene.seq[m+2]=style or"fade"
end end
end end
function scene.pop()
scene.seq={}
end
function scene.swapTo(tar,style) function scene.swapTo(tar,style)
local S=scene.swap local S=scene.swap
if not scene.swapping and tar~=scene.cur then if not scene.swapping and tar~=scene.cur then

View File

@@ -64,6 +64,19 @@ payCode=N("/image/mess/paycode.png")
drawableText={ drawableText={
question=T(100,"?"), question=T(100,"?"),
bpm=T(15,"BPM"),kpm=T(15,"KPM"), bpm=T(15,"BPM"),kpm=T(15,"KPM"),
speedLV=T(20,"speed level"),
atk=T(20,"Attack"),
eff=T(20,"Efficiency"),
tsd=T(35,"TSD"),
line=T(25,"Lines"),
techrash=T(25,"Techrash"),
grade=T(25,"Grade"),
wave=T(30,"Wave"),
rpm=T(35,"RPM"),
combo=T(20,"Combo"),
mxcmb=T(20,"Max Combo"),
pc=T(22,"Perfect Clear"),
ko=T(25,"KO"),
modeName=T(30),levelName=T(30), modeName=T(30),levelName=T(30),
next=T(40),hold=T(40), next=T(40),hold=T(40),

View File

@@ -129,19 +129,29 @@ function VIB(t)
love.system.vibrate(vibrateLevel[setting.vib+t]) love.system.vibrate(vibrateLevel[setting.vib+t])
end end
end end
function SFX(s,v) function SFX(s,v,pos)
if setting.sfx>0 then if setting.sfx>0 then
local S=sfx[s]--AU_Queue
local n=1 local n=1
while sfx[s][n]:isPlaying()do while S[n]:isPlaying()do
n=n+1 n=n+1
if not sfx[s][n]then if not S[n]then
sfx[s][n]=sfx[s][n-1]:clone() S[n]=S[n-1]:clone()
sfx[s][n]:seek(0) S[n]:seek(0)
break break
end end
end end
sfx[s][n]:setVolume((v or 1)*setting.sfx*.125) S=S[n]--AU_SRC
sfx[s][n]:play() if S:getChannelCount()==1 then
if pos then
pos=pos*setting.stereo*.1
S:setPosition(pos,1-pos^2,0)
else
S:setPosition(0,0,0)
end
end
S:setVolume((v or 1)*setting.sfx*.1)
S:play()
end end
end end
function getFreeVoiceChannel() function getFreeVoiceChannel()
@@ -182,7 +192,7 @@ function BGM(s)
bgmPlaying=s bgmPlaying=s
else else
if bgmPlaying then if bgmPlaying then
local v=setting.bgm*.125 local v=setting.bgm*.1
bgm[bgmPlaying]:setVolume(v) bgm[bgmPlaying]:setVolume(v)
if v>0 then if v>0 then
bgm[bgmPlaying]:play() bgm[bgmPlaying]:play()
@@ -330,7 +340,7 @@ function resetGameData()
pauseTime=0--Time paused pauseTime=0--Time paused
pauseCount=0--Times paused pauseCount=0--Times paused
destroyPlayers() destroyPlayers()
local E=defaultModeEnv[curMode.id] local E=defModeEnv[curMode.id]
modeEnv=E[curMode.lv]or E[1] modeEnv=E[curMode.lv]or E[1]
loadmode[curMode.id]()--bg/bgm need redefine in custom,so up here loadmode[curMode.id]()--bg/bgm need redefine in custom,so up here
if modeEnv.task then if modeEnv.task then
@@ -436,23 +446,27 @@ function loadSetting()
local p=find(t[i],"=") local p=find(t[i],"=")
if p then if p then
local t,v=sub(t[i],1,p-1),sub(t[i],p+1) local t,v=sub(t[i],1,p-1),sub(t[i],p+1)
if t=="sfx"or t=="bgm"or t=="voc"then if
setting[t]=toN(v:match("[012345678]"))or setting[t] --声音
t=="sfx"or t=="bgm"or t=="voc"or t=="stereo"or
--三个触摸设置项
t=="VKTchW"or t=="VKCurW"or t=="VKAlpha"
then
v=toN(v)
if v==int(v)and v>=0 and v<=10 then
setting[t]=v
end
elseif t=="vib"then elseif t=="vib"then
setting.vib=toN(v:match("[012345]"))or 0 setting.vib=toN(v:match("[012345]"))or 0
elseif t=="fullscreen"then elseif t=="fullscreen"then
setting.fullscreen=v=="true" setting.fullscreen=v=="true"
love.window.setFullscreen(setting.fullscreen) love.window.setFullscreen(setting.fullscreen)
elseif
--三个触摸设置项
t=="VKTchW"or t=="VKCurW"or t=="VKAlpha"
then
setting.VKTchW=min(int(abs(toN(v))),10)
elseif elseif
--开关设置们 --开关设置们
t=="bg"or
t=="ghost"or t=="center"or t=="grid"or t=="swap"or t=="ghost"or t=="center"or t=="grid"or t=="swap"or
t=="quickR"or t=="fine"or t=="bgblock"or t=="smo"or t=="quickR"or t=="fine"or t=="bgblock"or t=="smo"or
t=="VKSwitch"or t=="VKTrack"or t=="VKIcon" t=="VKSwitch"or t=="VKTrack"or t=="VKDodge"or t=="VKIcon"
then then
setting[t]=v=="true" setting[t]=v=="true"
elseif t=="frameMul"then elseif t=="frameMul"then
@@ -511,9 +525,11 @@ local saveOpt={
"sfx","bgm", "sfx","bgm",
"vib","voc", "vib","voc",
"stereo",
"VKSwitch", "VKSwitch",
"VKTrack", "VKTrack",
"VKDodge",
"VKIcon", "VKIcon",
"VKAlpha", "VKAlpha",
} }

View File

@@ -4,7 +4,6 @@ Patron(rmb10+):
[D*a]? [D*a]?
Future outlook: Future outlook:
Normal Things: Normal Things:
in-game setting(scene-sequence system)
powerinfo switch powerinfo switch
splashing block splashing block
ajustable next count ajustable next count
@@ -24,7 +23,17 @@ Future outlook:
infinite 1v1 infinite 1v1
square mode square mode
more FXs & 3d features & animations more FXs & 3d features & animations
0.7.29: 0.7.32:
Blind-GM now show section directly
easier&more standard classic mode
can switch Virtualkey's auto dodging
in-game setting
code optimized
bug fixed
0.7.31:
stereo system
fixed a problem in finesse calculating
0.7.30:
auto-tracking virtual key,adjustable parameters! auto-tracking virtual key,adjustable parameters!
can switch on/off virtuakeys can switch on/off virtuakeys
add 7 more key add 7 more key