Compare commits

...

4 Commits

Author SHA1 Message Date
MrZ_26
ee99943ed9 0.9.1:next音效 2020-07-20 00:06:31 +08:00
MrZ_26
60cbc83313 新tips,修复手机旋屏bug,各种调平,统计数据简化 2020-07-19 21:33:03 +08:00
MrZ_26
74bc1a2544 bug修复,水印修改,20G上级调平 2020-07-18 01:05:10 +08:00
MrZ_26
7b35d69be1 允许用键盘编辑序列 2020-07-17 17:37:48 +08:00
37 changed files with 303 additions and 233 deletions

BIN
SFX/spawn_1.ogg Normal file

Binary file not shown.

BIN
SFX/spawn_2.ogg Normal file

Binary file not shown.

BIN
SFX/spawn_3.ogg Normal file

Binary file not shown.

BIN
SFX/spawn_4.ogg Normal file

Binary file not shown.

BIN
SFX/spawn_5.ogg Normal file

Binary file not shown.

BIN
SFX/spawn_6.ogg Normal file

Binary file not shown.

BIN
SFX/spawn_7.ogg Normal file

Binary file not shown.

View File

@@ -24,7 +24,7 @@ local gc,sys=love.graphics,love.system
local Timer=love.timer.getTime local Timer=love.timer.getTime
local int,rnd,max,min=math.floor,math.random,math.max,math.min local int,rnd,max,min=math.floor,math.random,math.max,math.min
local abs=math.abs local abs=math.abs
local rem=table.remove local ins,rem=table.insert,table.remove
local scr=scr local scr=scr
local xOy=love.math.newTransform() local xOy=love.math.newTransform()
@@ -314,6 +314,8 @@ function keyDown.custom(key)
elseif sel==13 then elseif sel==13 then
BGM.play(customRange.bgm[customSel[sel]]) BGM.play(customRange.bgm[customSel[sel]])
end end
elseif key=="q"then
SCN.goto("sequence")
elseif #key==1 then elseif #key==1 then
local T=tonumber(key) local T=tonumber(key)
if T and T>=1 and T<=5 then if T and T>=1 and T<=5 then
@@ -328,25 +330,50 @@ function keyDown.custom(key)
end end
end end
local minoKey={
["1"]=1,["2"]=2,["3"]=3,["4"]=4,["5"]=5,["6"]=6,["7"]=7,
z=1,s=2,j=3,l=4,t=5,o=6,i=7,
p=10,q=11,f=12,e=13,u=15,
v=16,w=17,x=18,r=21,y=22,n=23,h=24,
}
local minoKey2={
["1"]=8,["2"]=9,["3"]=19,["4"]=20,["5"]=14,["7"]=25,
z=8,s=9,t=14,j=19,l=20,i=25
}
function keyDown.sequence(key) function keyDown.sequence(key)
local s=sceneTemp local s=sceneTemp
if key=="left"then if type(key)=="number"then
if s.cur>0 then s.cur=s.cur-1 end local C=s.cur+1
elseif key=="right"then ins(preBag,C,key)
if s.cur<#preBag then s.cur=s.cur+1 end s.cur=C
elseif key=="backspace"then elseif #key==1 then
local C=s.cur local i=(kb.isDown("lctrl","lshift","lalt","rctrl","rshift","ralt")and minoKey2 or minoKey)[key]
if C>0 then if i then
rem(preBag,C) local C=s.cur+1
s.cur=C-1 ins(preBag,C,i)
s.cur=C
end end
elseif key=="delete"then else
if sceneTemp.sure>20 then if key=="left"then
preBag={1,2,3,4,5,6,7} if s.cur>0 then s.cur=s.cur-1 end
sceneTemp.cur=7 elseif key=="right"then
sceneTemp.sure=0 if s.cur<#preBag then s.cur=s.cur+1 end
else elseif key=="backspace"then
sceneTemp.sure=50 local C=s.cur
if C>0 then
rem(preBag,C)
s.cur=C-1
end
elseif key=="escape"then
SCN.back()
elseif key=="delete"then
if sceneTemp.sure>20 then
preBag={}
sceneTemp.cur=0
sceneTemp.sure=0
else
sceneTemp.sure=50
end
end end
end end
end end
@@ -428,21 +455,13 @@ function keyDown.draw(key)
end end
function mouseDown.setting_sound(x,y,k) function mouseDown.setting_sound(x,y,k)
if x>780 and x<980 and y>470 and sceneTemp.jump==0 then local s=sceneTemp
sceneTemp.jump=10 if x>780 and x<980 and y>470 and s.jump==0 then
local t=Timer()-sceneTemp.last s.jump=10
local t=Timer()-s.last
if t>1 then if t>1 then
VOC.play((t<1.5 or t>15)and"doubt"or rnd()<.8 and"happy"or"egg") VOC.play((t<1.5 or t>15)and"doubt"or rnd()<.8 and"happy"or"egg")
sceneTemp.last=Timer() s.last=Timer()
if rnd()<.0626 then
for name,M in next,Modes do
if not modeRanks[name]then
modeRanks[name]=M.score and 0 or 6
end
end
FILE.saveUnlock()
TEXT.show("DEVModes:UNLOCKALL",640,360,50,"stretch",.6)
end
end end
end end
end end
@@ -701,14 +720,16 @@ function keyDown.staff(key,RESET)
if key=="escape"then if key=="escape"then
SCN.back() SCN.back()
elseif key=="\122"then elseif key=="\122"then
if kb.isDown("\109")and kb.isDown("\114")or RESET then if RESET or kb.isDown("\109")and kb.isDown("\114")then
sceneTemp.ct=sceneTemp.ct+1 sceneTemp.ct=sceneTemp.ct+1
if sceneTemp.ct==5 then if sceneTemp.ct==5 then
TEXT.show("What are you up to?",640,200,40,"appear",.5) TEXT.show("What are you up to?",640,200,40,"appear",.5)
elseif sceneTemp.ct==10 then elseif sceneTemp.ct==10 then
TEXT.show("Stop what you are doing.",640,200,40,"flicker",.5) TEXT.show("Stop what you are doing.",640,200,40,"flicker",.5)
elseif sceneTemp.ct==20 then elseif sceneTemp.ct==16 then
TEXT.show("RESET ALL DATA?",640,200,40,"appear",.3,.2) TEXT.show("RESET ALL DATA?",640,200,40,"appear",.3,.2)
elseif sceneTemp.ct==20 then
TEXT.show("SURE?????",640,200,40,"beat",.3,.2)
elseif sceneTemp.ct==26 then elseif sceneTemp.ct==26 then
local L=love.filesystem.getDirectoryItems("") local L=love.filesystem.getDirectoryItems("")
for i=1,#L do for i=1,#L do
@@ -735,6 +756,26 @@ function touchDown.staff(id,x,y)
end end
end end
function keyDown.stat(key)
if key=="u"and kb.isDown("lshift","rshift")then
touchDown.stat()
end
end
function touchDown.stat(id,x,y)
local s=sceneTemp
s.count=s.count+1
if rnd()<.0626 and s.count>26 then
for name,M in next,Modes do
if not modeRanks[name]then
modeRanks[name]=M.score and 0 or 6
end
end
FILE.saveUnlock()
TEXT.show("DEV:\85\78\76\79\67\75\65\76\76",640,360,60,"stretch",.6)
SFX.play("clear_4")
end
end
function wheelMoved.history(x,y) function wheelMoved.history(x,y)
wheelScroll(y) wheelScroll(y)
end end
@@ -980,7 +1021,11 @@ function love.resize(w,h)
SHADER.warning:send("h",h*scr.dpi) SHADER.warning:send("h",h*scr.dpi)
end end
function love.focus(f) function love.focus(f)
if SCN.cur=="play"and not f and setting.autoPause then pauseGame()end if f then
TASK.new(TICK.autoResize,{0})
elseif SCN.cur=="play"and setting.autoPause then
pauseGame()
end
end end
local scs={1,2,1,2,1,2,1,2,1,2,1.5,1.5,.5,2.5} local scs={1,2,1,2,1,2,1,2,1,2,1.5,1.5,.5,2.5}
local devColor={ local devColor={

View File

@@ -1,8 +1,8 @@
local langList={ local langList={
{ {
anykey="按任意键继续", anykey="按任意键继续",
newVersion="检测到更新!存档格式可能更新,设置已重置", newVersion="检测到更新!存档格式已修改",
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何视频内声明无效", marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何转述声明无效",
lang="中文", lang="中文",
atkModeName={"随机","徽章","击杀","反击"}, atkModeName={"随机","徽章","击杀","反击"},
royale_remain=function(n)return"剩余 "..n.." 名玩家"end, royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
@@ -210,7 +210,7 @@ local langList={
set3="无尽(3)", set3="无尽(3)",
set4="隐形(4)", set4="隐形(4)",
set5="极限(5)", set5="极限(5)",
seq="高级设置", seq="高级设置(q)",
draw="初始场地编辑", draw="初始场地编辑",
back="返回", back="返回",
}, },
@@ -256,6 +256,7 @@ local langList={
quickR="快速重新开始", quickR="快速重新开始",
swap="组合键切换攻击模式", swap="组合键切换攻击模式",
fine="极简操作提示音", fine="极简操作提示音",
spawn="方块生成音",
back="返回", back="返回",
}, },
setting_video={ setting_video={
@@ -442,8 +443,8 @@ local langList={
}, },
{ {
anykey="按任意键继续", anykey="按任意键继续",
newVersion="检测到更新!存档格式可能更新,设置已重置", newVersion="检测到更新!存档格式已修改",
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何视频内声明无效", marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何转述声明无效",
lang="全中文", lang="全中文",
atkModeName={"随机","徽章","击杀","反击"}, atkModeName={"随机","徽章","击杀","反击"},
royale_remain=function(n)return"剩余 "..n.." 名玩家"end, royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
@@ -648,7 +649,7 @@ local langList={
set3="无尽(3)", set3="无尽(3)",
set4="隐形(4)", set4="隐形(4)",
set5="极限(5)", set5="极限(5)",
seq="高级设置", seq="高级设置(q)",
draw="初始场地编辑", draw="初始场地编辑",
back="返回", back="返回",
}, },
@@ -694,6 +695,7 @@ local langList={
quickR="快速重新开始", quickR="快速重新开始",
swap="组合键切换攻击模式", swap="组合键切换攻击模式",
fine="极简操作提示音", fine="极简操作提示音",
spawn="方块生成音",
back="返回", back="返回",
}, },
setting_video={ setting_video={
@@ -880,8 +882,8 @@ local langList={
}, },
{ {
anykey="Press any button", anykey="Press any button",
newVersion="Updating detected! Save format may have been updated, settings reseted", newVersion="Updating detected! Saving format updated",
marking="Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid", marking="Game Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid",
lang="English", lang="English",
atkModeName={"Random","Badges","K.O.s","Attackers"}, atkModeName={"Random","Badges","K.O.s","Attackers"},
royale_remain=function(n)return n.." Players Remaining"end, royale_remain=function(n)return n.." Players Remaining"end,
@@ -1075,7 +1077,7 @@ local langList={
set3="Inf. (3)", set3="Inf. (3)",
set4="Blind (4)", set4="Blind (4)",
set5="Master (5)", set5="Master (5)",
seq="Advanced", seq="Advanced(q)",
draw="Field Edit", draw="Field Edit",
back="Back", back="Back",
}, },
@@ -1121,6 +1123,7 @@ local langList={
quickR="Quick Retry", quickR="Quick Retry",
swap="Key Combination (Change Atk. Mode)", swap="Key Combination (Change Atk. Mode)",
fine="Finesse Error Sound", fine="Finesse Error Sound",
spawn="Piece Spawning Sound",
back="Back", back="Back",
}, },
setting_video={ setting_video={
@@ -1307,8 +1310,8 @@ local langList={
}, },
{ {
anykey="↓□↓", anykey="↓□↓",
newVersion="&!!! ___/_?_ R", newVersion="&!!! ___!",
marking="Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid", marking="Game Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid",
lang="?????", lang="?????",
atkModeName={"?","( )","!","←→"}, atkModeName={"?","( )","!","←→"},
royale_remain=function(n)return n.."~"end, royale_remain=function(n)return n.."~"end,
@@ -1502,7 +1505,7 @@ local langList={
set3="Inf. (3)", set3="Inf. (3)",
set4="Blind (4)", set4="Blind (4)",
set5="Master (5)", set5="Master (5)",
seq="Advanced", seq="Advanced(q)",
draw="Field Edit", draw="Field Edit",
back="X", back="X",
}, },

View File

@@ -404,12 +404,9 @@ end
function Pnt.play() function Pnt.play()
if marking then if marking then
setFont(26) setFont(26)
local x=Timer()*46%1680-200 local t=Timer()
gc.setColor(1,1,1,abs(.26*(1-x/640))) gc.setColor(1,1,1,.2+.1*(sin(3*t)+sin(2.6*t)))
mStr(text.marking,x,260+62*sin(Timer())) mStr(text.marking,190,60+26*sin(t))
-- gc.setColor(1,1,1,.0626)
-- mStr(text.marking,260,62+26*sin(Timer()))
-- mStr(text.marking,1100,460+62*sin(Timer()*1.2))
end end
for p=1,#players do for p=1,#players do
players[p]:draw() players[p]:draw()

View File

@@ -118,8 +118,8 @@ function sceneInit.pause(org)
format("%d(%d) %.2fLPM",S.row,S.dig,S.row/S.time*60), format("%d(%d) %.2fLPM",S.row,S.dig,S.row/S.time*60),
format("%d(%d)",S.atk,S.digatk), format("%d(%d)",S.atk,S.digatk),
format("%d(%d-%d)",S.pend,S.recv,S.recv-S.pend), format("%d(%d-%d)",S.pend,S.recv,S.recv-S.pend),
format("%d/%d/%d/%d",S.clear_S[1],S.clear_S[2],S.clear_S[3],S.clear_S[4]), format("%d/%d/%d/%d",S.clears[1],S.clears[2],S.clears[3],S.clears[4]),
format("(%d)/%d/%d/%d",S.spin_S[1],S.spin_S[2],S.spin_S[3],S.spin_S[4]), format("(%d)/%d/%d/%d",S.spins[1],S.spins[2],S.spins[3],S.spins[4]),
format("%d(+%d)/%d(%d)",S.b2b,S.b3b,S.pc,S.hpc), format("%d(+%d)/%d(%d)",S.b2b,S.b3b,S.pc,S.hpc),
format("%d[%.2f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)), format("%d[%.2f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)),
}, },
@@ -223,11 +223,22 @@ function sceneInit.staff()
end end
function sceneInit.stat() function sceneInit.stat()
local S=stat local S=stat
local X1,X2,Y1,Y2={0,0,0,0},{0,0,0,0},{},{}
for i=1,7 do
local S,C=S.spin[i],S.clear[i]
Y1[i]=S[1]+S[2]+S[3]+S[4]
Y2[i]=C[1]+C[2]+C[3]+C[4]
for j=1,4 do
X1[j]=X1[j]+S[j]
X2[j]=X2[j]+C[j]
end
end
sceneTemp={ sceneTemp={
count=0,
chart={ chart={
A1=S.spin,A2=S.clear, A1=S.spin,A2=S.clear,
X1=S.spin_S,X2=S.clear_S, X1=X1,X2=X2,
Y1=S.spin_B,Y2=S.clear_B, Y1=Y1,Y2=Y2,
}, },
item={ item={
S.run, S.run,
@@ -241,7 +252,7 @@ function sceneInit.stat()
format("%d/%.3f%%",S.extraPiece,100*max(1-S.extraRate/S.piece,0)), format("%d/%.3f%%",S.extraPiece,100*max(1-S.extraRate/S.piece,0)),
S.b2b.." "..S.b3b, S.b2b.." "..S.b3b,
S.pc.." "..S.hpc, S.pc.." "..S.hpc,
} },
} }
for i=1,11 do for i=1,11 do
sceneTemp.item[i]=text.stat[i].."\t"..sceneTemp.item[i] sceneTemp.item[i]=text.stat[i].."\t"..sceneTemp.item[i]

View File

@@ -10,6 +10,7 @@ SFX.list={
"virtualKey", "virtualKey",
"button","swipe", "button","swipe",
"ready","start","win","fail","collect", "ready","start","win","fail","collect",
"spawn_1","spawn_2","spawn_3","spawn_4","spawn_5","spawn_6","spawn_7",
"move","rotate","rotatekick","hold", "move","rotate","rotatekick","hold",
"prerotate","prehold", "prerotate","prehold",
"lock","drop","fall", "lock","drop","fall",
@@ -38,6 +39,7 @@ end
function SFX.play(s,v,pos) function SFX.play(s,v,pos)
if setting.sfx==0 then return end if setting.sfx==0 then return end
local S=SFX.list[s]--source list local S=SFX.list[s]--source list
if not S then return end
local n=1 local n=1
while S[n]:isPlaying()do while S[n]:isPlaying()do
n=n+1 n=n+1

View File

@@ -20,7 +20,7 @@ function Tmr.load()
elseif S.phase==5 then elseif S.phase==5 then
local m=Modes[S.cur]--mode template local m=Modes[S.cur]--mode template
local M=require("modes/"..m.name)--mode file local M=require("modes/"..m.name)--mode file
Modes[m.name]=M Modes[m.name],Modes[S.cur]=M
for k,v in next,m do for k,v in next,m do
M[k]=v M[k]=v
end end

View File

@@ -86,7 +86,6 @@ local function nextDir(n) return function()SKIN.rotate(n) end end
local function VKAdisp(n) return function()return VK_org[n].ava end end local function VKAdisp(n) return function()return VK_org[n].ava end end
local function VKAcode(n) return function()VK_org[n].ava=not VK_org[n].ava end end local function VKAcode(n) return function()VK_org[n].ava=not VK_org[n].ava end end
local function setLang(n) return function()LANG.set(n)setting.lang=n end end local function setLang(n) return function()LANG.set(n)setting.lang=n end end
local function SEQpush(n) return function()local C=sceneTemp.cur+1 ins(preBag,C,n)sceneTemp.cur=C end end
local newButton,newSwitch,newSlider=WIDGET.new.button,WIDGET.new.switch,WIDGET.new.slider local newButton,newSwitch,newSlider=WIDGET.new.button,WIDGET.new.switch,WIDGET.new.slider
@@ -127,37 +126,37 @@ local Widgets={
set4= newButton(940, 560,260,70, C.lightYellow, 32,pressKey("4")), set4= newButton(940, 560,260,70, C.lightYellow, 32,pressKey("4")),
set5= newButton(940, 640,260,70, C.lightYellow, 32,pressKey("5")), set5= newButton(940, 640,260,70, C.lightYellow, 32,pressKey("5")),
seq= newButton(665, 415,162,40, C.lightGreen, 32,function()SCN.goto("sequence")end), seq= newButton(665, 415,200,40, C.lightGreen, 30,function()SCN.goto("sequence")end),
draw= newButton(150, 80, 220,80, C.white, 35,function()SCN.swapTo("draw")end), draw= newButton(150, 80, 220,80, C.white, 35,function()SCN.swapTo("draw")end),
back= newButton(1200, 640,120,120,C.white, 35,BACK), back= newButton(1200, 640,120,120,C.white, 35,BACK),
}, },
sequence={ sequence={
Z= newButton(150, 440,90, 90,C.white, 50,SEQpush(1)), Z= newButton(150, 440,90, 90,C.white, 50,pressKey(1)),
S= newButton(250, 440,90, 90,C.white, 50,SEQpush(2)), S= newButton(250, 440,90, 90,C.white, 50,pressKey(2)),
J= newButton(350, 440,90, 90,C.white, 50,SEQpush(3)), J= newButton(350, 440,90, 90,C.white, 50,pressKey(3)),
L= newButton(450, 440,90, 90,C.white, 50,SEQpush(4)), L= newButton(450, 440,90, 90,C.white, 50,pressKey(4)),
T= newButton(550, 440,90, 90,C.white, 50,SEQpush(5)), T= newButton(550, 440,90, 90,C.white, 50,pressKey(5)),
O= newButton(650, 440,90, 90,C.white, 50,SEQpush(6)), O= newButton(650, 440,90, 90,C.white, 50,pressKey(6)),
I= newButton(750, 440,90, 90,C.white, 50,SEQpush(7)), I= newButton(750, 440,90, 90,C.white, 50,pressKey(7)),
Z5= newButton(150, 540,90, 90,C.white, 50,SEQpush(8)), Z5= newButton(150, 540,90, 90,C.white, 50,pressKey(8)),
S5= newButton(250, 540,90, 90,C.white, 50,SEQpush(9)), S5= newButton(250, 540,90, 90,C.white, 50,pressKey(9)),
P= newButton(350, 540,90, 90,C.white, 50,SEQpush(10)), P= newButton(350, 540,90, 90,C.white, 50,pressKey(10)),
Q= newButton(450, 540,90, 90,C.white, 50,SEQpush(11)), Q= newButton(450, 540,90, 90,C.white, 50,pressKey(11)),
F= newButton(550, 540,90, 90,C.white, 50,SEQpush(12)), F= newButton(550, 540,90, 90,C.white, 50,pressKey(12)),
E= newButton(650, 540,90, 90,C.white, 50,SEQpush(13)), E= newButton(650, 540,90, 90,C.white, 50,pressKey(13)),
T5= newButton(750, 540,90, 90,C.white, 50,SEQpush(14)), T5= newButton(750, 540,90, 90,C.white, 50,pressKey(14)),
U= newButton(850, 540,90, 90,C.white, 50,SEQpush(15)), U= newButton(850, 540,90, 90,C.white, 50,pressKey(15)),
V= newButton(950, 540,90, 90,C.white, 50,SEQpush(16)), V= newButton(950, 540,90, 90,C.white, 50,pressKey(16)),
W= newButton(150, 640,90, 90,C.white, 50,SEQpush(17)), W= newButton(150, 640,90, 90,C.white, 50,pressKey(17)),
X= newButton(250, 640,90, 90,C.white, 50,SEQpush(18)), X= newButton(250, 640,90, 90,C.white, 50,pressKey(18)),
J5= newButton(350, 640,90, 90,C.white, 50,SEQpush(19)), J5= newButton(350, 640,90, 90,C.white, 50,pressKey(19)),
L5= newButton(450, 640,90, 90,C.white, 50,SEQpush(20)), L5= newButton(450, 640,90, 90,C.white, 50,pressKey(20)),
R= newButton(550, 640,90, 90,C.white, 50,SEQpush(21)), R= newButton(550, 640,90, 90,C.white, 50,pressKey(21)),
Y= newButton(650, 640,90, 90,C.white, 50,SEQpush(22)), Y= newButton(650, 640,90, 90,C.white, 50,pressKey(22)),
N= newButton(750, 640,90, 90,C.white, 50,SEQpush(23)), N= newButton(750, 640,90, 90,C.white, 50,pressKey(23)),
H= newButton(850, 640,90, 90,C.white, 50,SEQpush(24)), H= newButton(850, 640,90, 90,C.white, 50,pressKey(24)),
I5= newButton(950, 640,90, 90,C.white, 50,SEQpush(25)), I5= newButton(950, 640,90, 90,C.white, 50,pressKey(25)),
left= newButton(850, 440,90, 90,C.lightGreen, 55,pressKey("left")), left= newButton(850, 440,90, 90,C.lightGreen, 55,pressKey("left")),
right= newButton(950, 440,90, 90,C.lightGreen, 55,pressKey("right")), right= newButton(950, 440,90, 90,C.lightGreen, 55,pressKey("right")),
@@ -189,8 +188,8 @@ local Widgets={
space= newButton(730, 360,120,120,C.grey, 65,setPen(-1)), space= newButton(730, 360,120,120,C.grey, 65,setPen(-1)),
clear= newButton(1200, 500,120,120,C.white, 40,pressKey("delete")), clear= newButton(1200, 500,120,120,C.white, 40,pressKey("delete")),
demo= newSwitch(755, 640,30,function()return sceneTemp.demo end,function()sceneTemp.demo=not sceneTemp.demo end), demo= newSwitch(755, 640,30,function()return sceneTemp.demo end,function()sceneTemp.demo=not sceneTemp.demo end),
copy= newButton(920, 640,120,120,C.lightRed, 35,copyBoard), copy= newButton(920, 640,120,120,C.lightRed, 35,function()copyBoard()end),
paste= newButton(1060, 640,120,120,C.lightBlue, 35,pasteBoard), paste= newButton(1060, 640,120,120,C.lightBlue, 35,function()pasteBoard()end),
custom= newButton(110, 80, 140,80, C.white, 35,function()SCN.goto("custom")end), custom= newButton(110, 80, 140,80, C.white, 35,function()SCN.goto("custom")end),
back= newButton(1200, 640,120,120,C.white, 35,BACK), back= newButton(1200, 640,120,120,C.white, 35,BACK),
}, },
@@ -211,20 +210,21 @@ local Widgets={
quit= newButton(640,600,240,100,C.white,35,BACK), quit= newButton(640,600,240,100,C.white,35,BACK),
}, },
setting_game={ setting_game={
graphic=newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_video")end, nil,"sound"), graphic=newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_video")end, nil,"sound"),
sound= newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_sound")end, nil,"ctrl"), sound= newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_sound")end, nil,"ctrl"),
ctrl= newButton(290,220,320,80,C.lightYellow,35,function()SCN.goto("setting_control")end, nil,"key"), ctrl= newButton(290,220,320,80,C.lightYellow,35,function()SCN.goto("setting_control")end, nil,"key"),
key= newButton(640,220,320,80,C.lightGreen,35,function()SCN.goto("setting_key")end, nil,"touch"), key= newButton(640,220,320,80,C.lightGreen,35,function()SCN.goto("setting_key")end, nil,"touch"),
touch= newButton(990,220,320,80,C.lightBlue,35,function()SCN.goto("setting_touch")end, nil,"reTime"), touch= newButton(990,220,320,80,C.lightBlue,35,function()SCN.goto("setting_touch")end, nil,"reTime"),
reTime= newSlider(350,340,300,10,30,nil, SETval("reTime"), SETsto("reTime"), nil,"maxNext"), reTime= newSlider(350,340,300,10,30,nil, SETval("reTime"), SETsto("reTime"), nil,"maxNext"),
maxNext=newSlider(350,440,300,6,30,nil, SETval("maxNext"), SETsto("maxNext"), nil,"autoPause"), maxNext=newSlider(350,440,300,6,30,nil, SETval("maxNext"), SETsto("maxNext"), nil,"autoPause"),
autoPause=newSwitch(350,540,20, SETval("autoPause"), SETrev("autoPause"), nil,"layout"), autoPause=newSwitch(350,540,20, SETval("autoPause"), SETrev("autoPause"), nil,"layout"),
layout= newButton(590,540,140,70,C.white,35,function() layout= newButton(590,540,140,70,C.white,35,function()
SCN.goto("setting_skin") SCN.goto("setting_skin")
end,nil,"quickR"), end,nil,"quickR"),
quickR= newSwitch(1050,340,35, SETval("quickR"), SETrev("quickR"), nil,"swap"), quickR= newSwitch(1050,320,35, SETval("quickR"), SETrev("quickR"), nil,"swap"),
swap= newSwitch(1050,440,19, SETval("swap"), SETrev("swap"), nil,"fine"), swap= newSwitch(1050,400,20, SETval("swap"), SETrev("swap"), nil,"fine"),
fine= newSwitch(1050,540,20, SETval("fine"), SETrev("fine"), nil,"back"), fine= newSwitch(1050,480,20, SETval("fine"), SETrev("fine"), nil,"spawn"),
spawn= newSwitch(1050,560,20, SETval("spawn"), SETrev("spawn"), nil,"back"),
back= newButton(1140,650,200,80,C.white,40,BACK, nil,"graphic"), back= newButton(1140,650,200,80,C.white,40,BACK, nil,"graphic"),
}, },
setting_video={ setting_video={
@@ -261,10 +261,10 @@ local Widgets={
setting_sound={ setting_sound={
game= newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_game")end, nil,"graphic"), game= newButton(200,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_game")end, nil,"graphic"),
graphic=newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_video")end, nil,"sfx"), graphic=newButton(1080,80,240,80,C.lightCyan,35,function()SCN.swapTo("setting_video")end, nil,"sfx"),
sfx= newSlider(180,250,400,10,35,function()SFX.play("blip_1")end, SETval("sfx"), SETsto("sfx"), nil,"bgm"), sfx= newSlider(180,250,400,10,35,function()SFX.play("blip_1")end, SETval("sfx"), SETsto("sfx"), nil,"bgm"),
bgm= newSlider(750,250,400,10,35,function()BGM.freshVolume()end, SETval("bgm"), SETsto("bgm"), nil,"vib"), bgm= newSlider(750,250,400,10,35,function()BGM.freshVolume()end, SETval("bgm"), SETsto("bgm"), nil,"vib"),
vib= newSlider(180,440,400,5 ,28,function()VIB(2)end, SETval("vib"), SETsto("vib"), nil,"voc"), vib= newSlider(180,440,400,5 ,28,function()VIB(2)end, SETval("vib"), SETsto("vib"), nil,"voc"),
voc= newSlider(750,440,400,10,32,function()VOC.play("nya")end, SETval("voc"), SETsto("voc"), nil,"stereo"), voc= newSlider(750,440,400,10,32,function()VOC.play("nya")end, SETval("voc"), SETsto("voc"), nil,"stereo"),
stereo= newSlider(180,630,400,10,35,function()SFX.play("move",1,-1)SFX.play("lock",1,1)end, SETval("stereo"), SETsto("stereo"),function()return setting.sfx==0 end,"back"), stereo= newSlider(180,630,400,10,35,function()SFX.play("move",1,-1)SFX.play("lock",1,1)end, SETval("stereo"), SETsto("stereo"),function()return setting.sfx==0 end,"back"),
back= newButton(1140,650,200,80,C.white,40,BACK,nil,"game"), back= newButton(1140,650,200,80,C.white,40,BACK,nil,"game"),
}, },

View File

@@ -1,4 +1,4 @@
gameVersion="Alpha V0.9.0" gameVersion="Alpha V0.9.1"
function love.conf(t) function love.conf(t)
t.identity="Techmino"--saving folder t.identity="Techmino"--saving folder
t.version="11.1" t.version="11.1"

BIN
font.ttf

Binary file not shown.

BIN
image/skin/WTF.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 B

View File

@@ -29,7 +29,7 @@ scr={x=0,y=0,w=0,h=0,rad=0,k=1}--wid,hei,radius,scale K
customSel={1,22,1,1,7,3,1,1,8,4,1,1,1} customSel={1,22,1,1,7,3,1,1,8,4,1,1,1}
preField={h=20}for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end preField={h=20}for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
preBag={1,2,3,4,5,6,7} preBag={}
players={alive={},human=0} players={alive={},human=0}
--blockSkin,blockSkinMini={},{}--redefined in SKIN.change --blockSkin,blockSkinMini={},{}--redefined in SKIN.change
@@ -81,51 +81,8 @@ if fs.getInfo("virtualkey.dat")then FILE.loadVK()end
--update data file --update data file
S=stat S=stat
if not S.version or S.version=="Alpha V0.8.15"then S.clear_B,S.clear_S=nil
S.clear_S={S.clear_1,S.clear_2,S.clear_3,S.clear_4} if not S.clear[1][5]then
S.clear={{},{},{},{},{},{},{}}
local A,B,C,D=int(S.clear_1/7),int(S.clear_2/7),int(S.clear_3/7),S.clear_4
for i=1,7 do
S.clear[i][1]=A
S.clear[i][2]=B
S.clear[i][3]=C
S.clear[i][4]=0
end
S.clear[7][4]=D
for i=1,S.clear_1%7 do S.clear[i][1]=S.clear[i][1]+1 end
for i=1,S.clear_2%7 do S.clear[i][2]=S.clear[i][2]+1 end
for i=1,S.clear_3%7 do S.clear[i][3]=S.clear[i][3]+1 end
S.clear_B={}
for i=1,7 do
S.clear_B[i]=S.clear[i][1]+S.clear[i][2]+S.clear[i][3]+S.clear[i][4]
end
S.spin_S={S.spin_0,S.spin_1,S.spin_2,S.spin_3}
S.spin={{},{},{},{},{},{},{}}
A,B,C,D=int(S.spin_0/7),int(S.spin_1/7),int(S.spin_2/7),int(S.spin_3/7)
for i=1,7 do
S.spin[i][1]=A
S.spin[i][2]=B
S.spin[i][3]=C
S.spin[i][4]=D
end
for i=1,S.spin_0%7 do S.spin[i][1]=S.spin[i][1]+1 end
for i=1,S.spin_1%7 do S.spin[i][2]=S.spin[i][2]+1 end
for i=1,S.spin_2%7 do S.spin[i][3]=S.spin[i][3]+1 end
for i=1,S.spin_3%7 do S.spin[i][4]=S.spin[i][4]+1 end
S.spin_B={}
for i=1,7 do
S.spin_B[i]=S.spin[i][1]+S.spin[i][2]+S.spin[i][3]+S.spin[i][4]
end
S.hpc=S.c
elseif S.version=="Alpha V0.8.16"then
for i=1,6 do
S.clear[7][4]=S.clear[7][4]+S.clear[i][4]
S.clear[i][4]=0
end
end
if not S.clear_B[8]then
for i=1,7 do for i=1,7 do
S.clear[i][5]=0 S.clear[i][5]=0
S.spin[i][5]=0 S.spin[i][5]=0
@@ -133,21 +90,17 @@ if not S.clear_B[8]then
for i=8,25 do for i=8,25 do
S.clear[i]={0,0,0,0,0} S.clear[i]={0,0,0,0,0}
S.spin[i]={0,0,0,0,0} S.spin[i]={0,0,0,0,0}
S.spin_B[i]=0
S.clear_B[i]=0
end end
S.spin_S[5]=0
S.clear_S[5]=0
end end
if S.version=="Alpha V0.8.18"or S.version=="Alpha V0.8.19"then if not S.off then
S.clear[3],S.clear[4]=S.clear[4],S.clear[3]
S.spin[3],S.spin[4]=S.spin[4],S.spin[3]
S.clear_B[3],S.clear_B[4]=S.clear_B[4],S.clear_B[3]
S.spin_B[3],S.spin_B[4]=S.spin_B[4],S.spin_B[3]
end
if S.version=="Alpha V0.8.22"then
S.off=S.recv-S.pend S.off=S.recv-S.pend
end end
if S.clear[1][4]>0 then
for i=1,6 do
S.clear[7][4]=S.clear[7][4]+S.clear[i][4]
S.clear[i][4]=0
end
end
while #modeRanks>73 do while #modeRanks>73 do
table.remove(modeRanks) table.remove(modeRanks)
end end
@@ -162,6 +115,9 @@ if setting.skin[10]==5 then
setting.skin[10],setting.skin[11]=1,5 setting.skin[10],setting.skin[11]=1,5
end end
if S.version~=gameVersion then if S.version~=gameVersion then
if S.version then
setting.spawn=true
end
S.version=gameVersion S.version=gameVersion
TEXT.show(text.newVersion,640,200,30,"fly",.3) TEXT.show(text.newVersion,640,200,30,"fly",.3)
end end

View File

@@ -45,7 +45,7 @@ return{
mStr(P.modeData.event,-81,110) mStr(P.modeData.event,-81,110)
setFont(75) setFont(75)
mStr(P.stat.row,-81,220) mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340) mStr(P.stat.clears[4],-81,340)
end, end,
score=function(P)return{P.modeData.point,P.stat.score}end, score=function(P)return{P.modeData.point,P.stat.score}end,
scoreDisp=function(D)return sectionName[int(D[1]*.1)+1].." "..D[2]end, scoreDisp=function(D)return sectionName[int(D[1]*.1)+1].." "..D[2]end,

View File

@@ -18,7 +18,7 @@ return{
mText(drawableText.techrash,-81,420) mText(drawableText.techrash,-81,420)
setFont(75) setFont(75)
mStr(P.stat.row,-81,220) mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340) mStr(P.stat.clears[4],-81,340)
end, end,
score=function(P)return{min(P.stat.row or 200),P.stat.time}end, score=function(P)return{min(P.stat.row or 200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,

View File

@@ -21,7 +21,7 @@ return{
mText(drawableText.techrash,-81,420) mText(drawableText.techrash,-81,420)
setFont(75) setFont(75)
mStr(P.stat.row,-81,220) mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340) mStr(P.stat.clears[4],-81,340)
gc.setColor(1,1,1,.2) gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6) gc.draw(IMG.electric,-26,120,0,2.6)
end, end,

View File

@@ -22,7 +22,7 @@ return{
mText(drawableText.techrash,-81,420) mText(drawableText.techrash,-81,420)
setFont(75) setFont(75)
mStr(P.stat.row,-81,220) mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340) mStr(P.stat.clears[4],-81,340)
gc.setColor(1,1,1,.2) gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6) gc.draw(IMG.electric,-26,120,0,2.6)
end, end,

View File

@@ -20,7 +20,7 @@ return{
mText(drawableText.techrash,-81,420) mText(drawableText.techrash,-81,420)
setFont(75) setFont(75)
mStr(P.stat.row,-81,220) mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340) mStr(P.stat.clears[4],-81,340)
gc.setColor(1,1,1,.2) gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6) gc.draw(IMG.electric,-26,120,0,2.6)
end, end,

View File

@@ -23,7 +23,7 @@ return{
mText(drawableText.techrash,-81,420) mText(drawableText.techrash,-81,420)
setFont(75) setFont(75)
mStr(P.stat.row,-81,220) mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340) mStr(P.stat.clears[4],-81,340)
gc.setColor(1,1,1,.2) gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6) gc.draw(IMG.electric,-26,120,0,2.6)
end, end,

View File

@@ -12,7 +12,7 @@ return{
end end
modeEnv._20G=modeEnv.drop==0 modeEnv._20G=modeEnv.drop==0
modeEnv.oncehold=customSel[6]==1 modeEnv.oncehold=customSel[6]==1
modeEnv.bag=preBag if preBag[1]then modeEnv.bag=preBag end
PLY.newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local L=modeEnv.opponent local L=modeEnv.opponent
if L~=0 then if L~=0 then

View File

@@ -31,7 +31,7 @@ return{
end end
modeEnv._20G=modeEnv.drop==0 modeEnv._20G=modeEnv.drop==0
modeEnv.oncehold=customSel[6]==1 modeEnv.oncehold=customSel[6]==1
modeEnv.bag=preBag if preBag[1]then modeEnv.bag=preBag end
modeEnv.target=0 modeEnv.target=0
PLY.newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local L=modeEnv.opponent local L=modeEnv.opponent

View File

@@ -10,13 +10,19 @@ return{
if not P.next[1] then if not P.next[1] then
local height=freeRow.get(0) local height=freeRow.get(0)
local max=#P.field local max=#P.field
for x=1,10 do if max>0 then
local h=max for x=1,10 do
while P.field[h][x]==0 and h>1 do local h=max
h=h-1 while P.field[h][x]==0 and h>1 do
h=h-1
end
height[x]=h
end--get heights
else
for x=1,10 do
height[x]=0
end end
height[x]=h end
end--get heights
height[11]=999 height[11]=999
local res={1,1,2,2,3,4} local res={1,1,2,2,3,4}
@@ -27,9 +33,11 @@ return{
end end
if d<40 or P.stat.row>2*42 then if d<40 or P.stat.row>2*42 then
A=#res+1 A=#res+1
for i=A,A+5 do for i=1,4 do
res[i]=1 res[A]=1
res[i+6]=2 res[A+1]=2
res[A+2]=6
A=A+3
end end
goto END goto END
end end

View File

@@ -63,16 +63,16 @@ return{
getRank=function(P) getRank=function(P)
local S=P.modeData.point local S=P.modeData.point
if S==500 then if S==500 then
local L=P.stat.clear_S[4] local T=P.stat.time
return return
L>=30 and 5 or T<=118 and 5 or
L>=25 and 4 or T<=148 and 4 or
3 T<=183 and 3 or
2
else else
return return
S>=426 and 3 or S>=300 and 2 or
S>=326 and 2 or S>=100 and 1 or
S>=226 and 1 or
S>=50 and 0 S>=50 and 0
end end
end, end,

View File

@@ -67,7 +67,7 @@ return{
getRank=function(P) getRank=function(P)
local S=P.modeData.point local S=P.modeData.point
if S==500 then if S==500 then
local L=P.stat.clear_S[4] local L=P.stat.clears[4]
return return
L>=30 and 5 or L>=30 and 5 or
L>=25 and 4 or L>=25 and 4 or

View File

@@ -30,10 +30,10 @@ return{
local T=P.stat.time local T=P.stat.time
return return
T<=626 and 5 or T<=626 and 5 or
T<=1000 and 4 or T<=888 and 4 or
T<=1400 and 3 or T<=1140 and 3 or
T<=2060 and 2 or T<=1406 and 2 or
T<=2600 and 1 or T<=1626 and 1 or
0 0
end, end,
} }

View File

@@ -5,10 +5,11 @@ local s={
ihs=true,irs=true,ims=true, ihs=true,irs=true,ims=true,
reTime=4, reTime=4,
maxNext=6, maxNext=6,
autoPause=true,
quickR=true, quickR=true,
swap=true, swap=true,
fine=false, fine=false,
autoPause=true, spawn=false,
lang=1, lang=1,
skinSet=1, skinSet=1,
skin={1,5,8,2,10,3,7,1,5,1,5,8,2,10,3,7,10,7,8,2,8,2,1,5,3}, skin={1,5,8,2,10,3,7,1,5,1,5,8,2,10,3,7,10,7,8,2,8,2,1,5,3},
@@ -32,9 +33,11 @@ local s={
powerInfo=false, powerInfo=false,
--sound --sound
sfx=10,bgm=7, sfx=10,
vib=0,voc=0, bgm=7,
stereo=6, stereo=6,
vib=0,
voc=0,
--virtualkey --virtualkey
VKSFX=3,--SFX volume VKSFX=3,--SFX volume
@@ -60,14 +63,11 @@ s={
piece=0,row=0,dig=0, piece=0,row=0,dig=0,
atk=0,digatk=0, atk=0,digatk=0,
send=0,recv=0,pend=0,off=0, send=0,recv=0,pend=0,off=0,
clear={},clear_B={},clear_S={0,0,0,0,0}, clear={},spin={},
spin={},spin_B={},spin_S={0,0,0,0,0},
pc=0,hpc=0,b2b=0,b3b=0,score=0, pc=0,hpc=0,b2b=0,b3b=0,score=0,
lastPlay="sprint_10",--last played mode ID lastPlay="sprint_10",--last played mode ID
} }
for i=1,25 do for i=1,25 do
s.clear_B[i]=0
s.spin_B[i]=0
s.clear[i]={0,0,0,0,0} s.clear[i]={0,0,0,0,0}
s.spin[i]={0,0,0,0,0} s.spin[i]={0,0,0,0,0}
end end

View File

@@ -109,9 +109,13 @@ end
function mergeStat(stat,delta) function mergeStat(stat,delta)
for k,v in next,delta do for k,v in next,delta do
if type(v)=="table"then if type(v)=="table"then
mergeStat(stat[k],v) if type(stat[k])=="table"then
mergeStat(stat[k],v)
end
else else
stat[k]=stat[k]+v if stat[k]then
stat[k]=stat[k]+v
end
end end
end end
end end

View File

@@ -2,6 +2,7 @@ local L
if setting.lang==1 or setting.lang==2 then if setting.lang==1 or setting.lang==2 then
L={ L={
"ZS JL T O I", "ZS JL T O I",
"uid:225238922",
"tetr.js 也很好玩!", "tetr.js 也很好玩!",
"tetr.io 也很好玩!", "tetr.io 也很好玩!",
"Techminohaowan", "Techminohaowan",
@@ -11,7 +12,9 @@ if setting.lang==1 or setting.lang==2 then
"osu好玩!", "osu好玩!",
"O spin Triple!", "O spin Triple!",
"nullpomino 也很好玩!", "nullpomino 也很好玩!",
"Naki 可爱!",
"Miya:喵!", "Miya:喵!",
"Miya 可爱!",
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF", "LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
"Let-The-Bass-Kick!", "Let-The-Bass-Kick!",
"l-=-1", "l-=-1",
@@ -31,6 +34,7 @@ if setting.lang==1 or setting.lang==2 then
"有建议的话可以把信息反馈给作者~", "有建议的话可以把信息反馈给作者~",
"学会使用两个旋转键, 三个更好", "学会使用两个旋转键, 三个更好",
"享受特色旋转系统!", "享受特色旋转系统!",
"无聊翻翻设置是好习惯",
"我的世界好玩!", "我的世界好玩!",
"提前旋转等设置可以用来救命", "提前旋转等设置可以用来救命",
"泰拉瑞亚好玩!", "泰拉瑞亚好玩!",
@@ -38,20 +42,23 @@ if setting.lang==1 or setting.lang==2 then
"使用love2d引擎制作", "使用love2d引擎制作",
"少女祈祷中", "少女祈祷中",
"扫雷好玩!", "扫雷好玩!",
"哦,我的上帝",
"你可以从统计页面打开游戏存档目录", "你可以从统计页面打开游戏存档目录",
"你好 世界!", "你好 世界!",
"魔方好玩!", "魔方好玩!",
"秘密数字:626", "秘密数字:626",
"每个虚拟按键都可以隐藏/显示", "每个虚拟按键都可以隐藏/显示",
"每个块的出现方向可以自定义",
"联网还没做呢, 别急", "联网还没做呢, 别急",
"键位是可以自定义的", "键位是可以自定义的",
"合群了就会消失, 但是消失不代表没有意义", "合群了就会消失, 但是消失不代表没有意义",
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)", "更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
"俄罗斯方块环游记也不错", "俄罗斯方块环游记也不错!",
"调到特殊的日期也不会发生什么的", "调到特殊的日期也不会发生什么的",
"低帧率会降低游戏体验", "低帧率会降低游戏体验",
"戴上耳机以获得最佳体验", "戴上耳机以获得最佳体验",
"大满贯10连击消四全清!", "大满贯10连击消四全清!",
"车车人在此",
"草(日本语)", "草(日本语)",
"不要在上课时玩游戏!", "不要在上课时玩游戏!",
"不要盯着bug不放", "不要盯着bug不放",
@@ -59,9 +66,9 @@ if setting.lang==1 or setting.lang==2 then
"不是动画,真的在加载!", "不是动画,真的在加载!",
"本游戏难度上限很高, 做好心理准备", "本游戏难度上限很高, 做好心理准备",
"本游戏可不是休闲游戏", "本游戏可不是休闲游戏",
"啊这,不会吧不会吧",
"3.1415926535897932384", "3.1415926535897932384",
"26连T2来一个?", "26连T2来一个?",
"225238922 哔哩哔哩 干杯~",
"20G本质是一套全新的游戏规则", "20G本质是一套全新的游戏规则",
"20连PC来一个?", "20连PC来一个?",
"2+2=Miya", "2+2=Miya",
@@ -70,13 +77,15 @@ if setting.lang==1 or setting.lang==2 then
"11renPC!", "11renPC!",
"<方块研究所>有一个Nspire-CX版本!", "<方块研究所>有一个Nspire-CX版本!",
"↑↑↓↓←→←→BABA", "↑↑↓↓←→←→BABA",
"\"免费吃鸡方块\"", '"免费吃鸡方块"',
"(RUR'U')R'FR2U'R'U'(RUR'F')", "(RUR'U')R'FR2U'R'U'(RUR'F')",
} }
elseif setting.lang==3 then elseif setting.lang==3 then
L={ L={
"ZS JL T O I", "ZS JL T O I",
"You can set orientation for each block",
"You can open saving directory from stat. page", "You can open saving directory from stat. page",
"You are Grand Master",
"wwwwww", "wwwwww",
"Who is diao", "Who is diao",
"What about 26 TSDs?", "What about 26 TSDs?",
@@ -101,7 +110,9 @@ elseif setting.lang==3 then
"O spin triple!", "O spin triple!",
"Nothing will happen when some special day come", "Nothing will happen when some special day come",
"Not animation,real loading!", "Not animation,real loading!",
"Naki so cute!",
"Miya:Nya!", "Miya:Nya!",
"Miya so cute!",
"Minesweeper is fun!", "Minesweeper is fun!",
"Minecraft is fun!", "Minecraft is fun!",
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF", "LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
@@ -121,7 +132,6 @@ elseif setting.lang==3 then
"DO NOT PRESS F10", "DO NOT PRESS F10",
"Do not play game in class!", "Do not play game in class!",
"Disappearing doesn't mean useless", "Disappearing doesn't mean useless",
"diaoyoumei so bully",
"diao so bully", "diao so bully",
"COOL!!", "COOL!!",
"CLASSIC SEXY RUSSIAN BLOCKS", "CLASSIC SEXY RUSSIAN BLOCKS",
@@ -145,7 +155,10 @@ elseif setting.lang==3 then
"11renPC!", "11renPC!",
"↑↑↓↓←→←→BABA", "↑↑↓↓←→←→BABA",
"\"Free block game with royale mode\"", "\"Free block game with royale mode\"",
"/osk/",
"/jezevec/",
"(RUR'U')R'FR2U'R'U'(RUR'F')", "(RUR'U')R'FR2U'R'U'(RUR'F')",
":pog:",
} }
elseif setting.lang==4 then elseif setting.lang==4 then
L={'!','@','#','$','%','^','&','*','(',')','-','=','_','+','[',']','{','}','\\','|',';',':','\'','"',',','<','.','>','/','?'} L={'!','@','#','$','%','^','&','*','(',')','-','=','_','+','[',']','{','}','\\','|',';',':','\'','"',',','<','.','>','/','?'}

View File

@@ -309,7 +309,7 @@ local function Pupdate_alive(P,dt)
if P.keyPressing[2]then if P.keyPressing[2]then
if arr>0 then if arr>0 then
if mov==das+arr or mov==das then if mov==das+arr or mov==das then
if P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then if not P.cur or P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then
mov=das+arr-1 mov=das+arr-1
else else
P.act.moveRight(P,true) P.act.moveRight(P,true)
@@ -334,7 +334,7 @@ local function Pupdate_alive(P,dt)
if P.keyPressing[1]then if P.keyPressing[1]then
if arr>0 then if arr>0 then
if mov==das+arr or mov==das then if mov==das+arr or mov==das then
if P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then if not P.cur or P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then
mov=das+arr-1 mov=das+arr-1
else else
P.act.moveLeft(P,true) P.act.moveLeft(P,true)
@@ -728,7 +728,7 @@ local function Pdraw_norm(P)
if P.gameEnv.bagLine then if P.gameEnv.bagLine then
local L=P.gameEnv.bagLen local L=P.gameEnv.bagLen
local C=-P.pieceCount%L--phase local C=-P.pieceCount%L--phase
gc.setColor(.5,.5,.5) gc.setColor(.8,.5,.5)
for i=C,N-1,L do for i=C,N-1,L do
local y=72*i+36 local y=72*i+36
gc.line(321+P.fieldOff.x,y,441,y) gc.line(321+P.fieldOff.x,y,441,y)
@@ -1018,15 +1018,14 @@ local function getNewStatTable()
piece=0,row=0,dig=0, piece=0,row=0,dig=0,
atk=0,digatk=0, atk=0,digatk=0,
send=0,recv=0,pend=0,off=0, send=0,recv=0,pend=0,off=0,
clear={},clear_B={},clear_S={0,0,0,0,0}, clear={},clears={},spin={},spins={},
spin={},spin_B={},spin_S={0,0,0,0,0},
pc=0,hpc=0,b2b=0,b3b=0, pc=0,hpc=0,b2b=0,b3b=0,
} }
for i=1,25 do for i=1,25 do
T.clear[i]={0,0,0,0,0} T.clear[i]={0,0,0,0,0}
T.spin[i]={0,0,0,0,0} T.spin[i]={0,0,0,0,0}
T.clear_B[i]=0 T.clears[i]=0
T.spin_B[i]=0 T.spins[i]=0
end end
return T return T
end end
@@ -1349,6 +1348,9 @@ function player.hold(P,ifpre)
P:freshgho() P:freshgho()
P.dropDelay,P.lockDelay,P.freshTime=P.gameEnv.drop,P.gameEnv.lock,max(P.freshTime-5,0) P.dropDelay,P.lockDelay,P.freshTime=P.gameEnv.drop,P.gameEnv.lock,max(P.freshTime-5,0)
if P:ifoverlap(P.cur.bk,P.curX,P.curY)then P:lock()P:lose()end if P:ifoverlap(P.cur.bk,P.curX,P.curY)then P:lock()P:lose()end
if P.human and setting.spawn then
SFX.play("spawn_"..C.id)
end
end end
if P.human then if P.human then
@@ -1404,6 +1406,9 @@ function player.popNext(P)--pop next queue to hand
end end
if _[6]then P.act.hardDrop(P)_[6]=false end--IHdS if _[6]then P.act.hardDrop(P)_[6]=false end--IHdS
if P.human and setting.spawn then
SFX.play("spawn_"..P.cur.id)
end
end end
end end
function player.drop(P)--Place piece function player.drop(P)--Place piece
@@ -1811,12 +1816,10 @@ function player.drop(P)--Place piece
local n=P.cur.name local n=P.cur.name
if dospin then if dospin then
_=STAT.spin[n] _[cc+1]=_[cc+1]+1--spin[1~25][0~4] _=STAT.spin[n] _[cc+1]=_[cc+1]+1--spin[1~25][0~4]
_=STAT.spin_S _[cc+1]=_[cc+1]+1--spin[0~4] _=STAT.spins _[cc+1]=_[cc+1]+1--spin[0~4]
_=STAT.spin_B _[n]=_[n]+1--spin[1~25]
elseif cc>0 then elseif cc>0 then
_=STAT.clear[n] _[cc]=_[cc]+1--clear[1~25][1~5] _=STAT.clear[n] _[cc]=_[cc]+1--clear[1~25][1~5]
_=STAT.clear_S _[cc]=_[cc]+1--clear[1~5] _=STAT.clears _[cc]=_[cc]+1--clear[1~5]
_=STAT.clear_B _[n]=_[n]+1--clear[1~25]
end end
--Update stat --Update stat
@@ -1935,6 +1938,9 @@ function player.win(P,result)
if P.human then if P.human then
gameOver() gameOver()
TASK.new(TICK.autoPause,{0}) TASK.new(TICK.autoPause,{0})
if marking then
P:showTextF(text.marking,0,-226,22,"appear",.4,.0626)
end
end end
P:newTask(TICK.finish) P:newTask(TICK.finish)
end end
@@ -2015,6 +2021,9 @@ function player.lose(P)
gameOver() gameOver()
P:newTask(#players>1 and TICK.lose or TICK.finish) P:newTask(#players>1 and TICK.lose or TICK.finish)
TASK.new(TICK.autoPause,{0}) TASK.new(TICK.autoPause,{0})
if marking then
P:showTextF(text.marking,0,-226,22,"appear",.4,.0626)
end
else else
P:newTask(TICK.lose) P:newTask(TICK.lose)
end end

View File

@@ -21,6 +21,7 @@ local list={
"text_bone(mrz)", "text_bone(mrz)",
"colored_bone(mrz)", "colored_bone(mrz)",
"white_bone(mrz)", "white_bone(mrz)",
"WTF",
} }
local SKIN={} local SKIN={}
SKIN.lib={} SKIN.lib={}

View File

@@ -1,3 +1,4 @@
local gc=love.graphics
local Tick={} local Tick={}
function Tick.finish(P) function Tick.finish(P)
P.endCounter=P.endCounter+1 P.endCounter=P.endCounter+1
@@ -69,4 +70,14 @@ function Tick.autoPause(data)
return true return true
end end
end end
function Tick.autoResize(data)
data[1]=data[1]+1
if data[1]==62 then
local w,h=gc.getWidth(),gc.getHeight()
if w<h then
love.resize(w,h)
end
return true
end
end
return Tick return Tick

View File

@@ -1,23 +1,22 @@
local S=[=[ local S=[=[
"Patron"(time ordered,may not accurate): "Patron"(time ordered,may not accurate):
[rmb100+]: [rmb100+]:
那没事了(T6300) 加油啊,钉钉动了的大哥哥(T3228) 那没事了(T6300) 加油啊,钉钉动了的大哥哥(T3228)
弥佑瑶 Alan 弥佑瑶 Alan 幽灵3383
幽灵3383 靏鸖龘龘 靏鸖龘龘 込余 saki
込余 saki
[rmb10+]: [rmb10+]:
八零哥 蕴空之灵 gggf127 dtg 八零哥 蕴空之灵 gggf127 dtg
ThTsOd Fireboos 金巧 10元 ThTsOd Fireboos 金巧 10元
立斐 Deep_Sea 时雪 yyangdid 立斐 Deep_Sea 时雪 yyangdid
sfqr 心痕 Sasoric 夏小亚 sfqr 心痕 Sasoric 夏小亚 仁参
仁参 乐↗乐↘ 喜欢c4w的ztcjoin 面包 乐↗乐↘ 喜欢c4w的ztcjoin 面包 蠢熏
蠢熏 潘一栗 Lied 星街书婉 潘一栗 Lied 星街书婉 祝西 829
祝西 829 e m*12 我永远爱白银诺艾尔(鹏 e m*12 我永远爱白银诺艾尔(鹏 PCX
PCX kagura77 呆喂 GlowingEmbers kagura77 呆喂 GlowingEmbers 轩辕辚
轩辕辚 HimuroAki TCV100 tech有养成系统了@7065 HimuroAki TCV100 tech有养成系统了@7065
HAGE KANOBU 闪电和拐棍 葡萄味的曼妥思 世界沃德 HAGE KANOBU 闪电和拐棍 葡萄味的曼妥思
蓝绿 天生的魔法师 琳雨空 T8779.易缄 吃水榴莲 世界沃德 蓝绿 天生的魔法师 琳雨空
T8779.易缄 吃水榴莲 诗情画意 星姐阿夸双推Man暗炎
Thanks!!! Thanks!!!
Future outlook: Future outlook:
@@ -56,25 +55,30 @@ Future outlook:
2048 (with next (with deadly mode)) 2048 (with next (with deadly mode))
mine sweeper mine sweeper
tank battle tank battle
time-based-rank for master advanced mode(1:58/228/303/300P/100P)
简易防沉迷系统 简易防沉迷系统
full-key control full-key control
dragging control touch-drag control
"next" SFX cool backgrounds
new layout of player (rectangle so stupid) 'Encrypt'(compile to byte code)
better drop FX better drop FX
60+ fps supporting 60+ fps supporting
in-game document in-game document
lang setting page
game recording game recording
new widgets (joystick etc.) new widgets (joystick etc.)
splashing block splashing block
cool backgrounds
more graphic FXs & 3D features & animations more graphic FXs & 3D features & animations
Encrypt source code (compile to byte code)
network game network game
new AI: task-Z new AI: task-Z
0.9.1: next piece SFX
new:
next piece spawn SFX
code:
render background to canvas first, not redering each frame
fixed:
error when moving [nothing] when arr>0
error when complete master-advanced
0.9.0: Custom Sequence Update 0.9.0: Custom Sequence Update
new: new:
custom sequence custom sequence
@@ -82,20 +86,26 @@ Future outlook:
many new tips many new tips
more powerful watermark more powerful watermark
die animation in non-royale mode die animation in non-royale mode
better in-game layout
changed: changed:
mode name shown at the top of screen mode name shown at the top of screen
faster & harder attacker-ultimate faster & harder attacker-ultimate
time-based-rank for master-advanced
little easier to get S in PC challenge (easy mode) little easier to get S in PC challenge (easy mode)
easier to get S in infinite mode, c4w, PC easier to get S in infinite mode, c4w, PC
harder to unlock sprint 400/1000 harder to unlock sprint-400/1000
harder to get high rank of sprint-1000
harder drought-lunatic
code: code:
file sorted file sorted
task system rewrited, now perfect (maybe) task system rewrited, now perfect (maybe)
remove scissors/blendMode setting in drawing players remove scissors/blendMode setting in drawing players
fixed: fixed:
screen orientation sometimes error after wake up the phone
hard move won't deactive "spin" hard move won't deactive "spin"
do not clear dead enemies' field do not clear dead enemies' field
show ghost's center when ghost is off show ghost's center when ghost is off
error when get a PC in drought-lunatic
0.8.24: Bug Fixed 0.8.24: Bug Fixed
new: new: