Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15df07ae3f | ||
|
|
57857ceb67 | ||
|
|
527352ce15 |
BIN
BGM/distortion.ogg
Normal file
22
ai.lua
@@ -72,7 +72,7 @@ function CC_switch20G(P)
|
||||
P.r,P.c=#P.cur.bk,#P.cur.bk[1]
|
||||
P.curX,P.curY=blockPos[P.cur.id],21+ceil(P.fieldBeneath/30)-P.r+min(int(#P.field*.2),2)
|
||||
|
||||
P:freshNext()
|
||||
P:newNext()
|
||||
BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])
|
||||
collectgarbage()
|
||||
end
|
||||
@@ -120,11 +120,12 @@ local function ifoverlapAI(f,bk,x,y)
|
||||
end end
|
||||
end
|
||||
local function resetField(f0,f,start)
|
||||
while f[start]do
|
||||
removeRow(f,start)
|
||||
for _=#f,start,-1 do
|
||||
freeRow.discard(f[_])
|
||||
f[_]=nil
|
||||
end
|
||||
for i=start,#f0 do
|
||||
f[i]=getNewRow(0)
|
||||
f[i]=freeRow.get(0)
|
||||
for j=1,10 do
|
||||
f[i][j]=f0[i][j]
|
||||
end
|
||||
@@ -133,7 +134,7 @@ end
|
||||
local function getScore(field,cb,cy)
|
||||
local score=0
|
||||
local highest=0
|
||||
local height=getNewRow(0)
|
||||
local height=freeRow.get(0)
|
||||
local clear=0
|
||||
local hole=0
|
||||
|
||||
@@ -141,7 +142,7 @@ local function getScore(field,cb,cy)
|
||||
for j=1,10 do
|
||||
if field[i][j]==0 then goto L end
|
||||
end
|
||||
removeRow(field,i)
|
||||
freeRow.discard(rem(field,i))
|
||||
clear=clear+1
|
||||
::L::
|
||||
end
|
||||
@@ -174,8 +175,7 @@ local function getScore(field,cb,cy)
|
||||
end
|
||||
sdh=sdh+min(dh^1.6,20)
|
||||
end
|
||||
freeRow[#freeRow+1]=height
|
||||
freeRow.L=freeRow.L+1
|
||||
freeRow.discard(height)
|
||||
score=
|
||||
-#field*30
|
||||
-#cb*15
|
||||
@@ -201,7 +201,7 @@ AI_think={
|
||||
local Tfield={}--test field
|
||||
local field_org=P.field
|
||||
for i=1,#field_org do
|
||||
Tfield[i]=getNewRow(0)
|
||||
Tfield[i]=freeRow.get(0)
|
||||
for j=1,10 do
|
||||
Tfield[i][j]=field_org[i][j]
|
||||
end
|
||||
@@ -218,7 +218,7 @@ AI_think={
|
||||
end--move to bottom
|
||||
for i=1,#cb do
|
||||
local y=cy+i-1
|
||||
if not Tfield[y]then Tfield[y]=getNewRow(0)end
|
||||
if not Tfield[y]then Tfield[y]=freeRow.get(0)end
|
||||
for j=1,#cb[1]do
|
||||
if cb[i][j]then
|
||||
Tfield[y][cx+j-1]=1
|
||||
@@ -236,7 +236,7 @@ AI_think={
|
||||
|
||||
::L::
|
||||
if #Tfield>0 then
|
||||
removeRow(Tfield,1)
|
||||
freeRow.discard(rem(Tfield,1))
|
||||
goto L
|
||||
end--Release cache
|
||||
local p=#ctrl+1
|
||||
|
||||
2
conf.lua
@@ -1,4 +1,4 @@
|
||||
gameVersion="Alpha V0.8.9"
|
||||
gameVersion="Alpha V0.8.12"
|
||||
function love.conf(t)
|
||||
t.identity="Techmino"--SaveDir name
|
||||
t.version="11.1"
|
||||
|
||||
@@ -6,6 +6,8 @@ setting={
|
||||
quickR=true,
|
||||
swap=true,
|
||||
fine=false,
|
||||
autoPause=true,
|
||||
face={0,0,0,0,0,0,0},
|
||||
--game
|
||||
|
||||
ghost=true,center=true,
|
||||
@@ -19,7 +21,8 @@ setting={
|
||||
bg=true,
|
||||
bgspace=true,
|
||||
lang=1,
|
||||
skin=1,
|
||||
skinSet=1,
|
||||
skin={1,5,2,8,10,3,7},
|
||||
--graphic
|
||||
|
||||
sfx=10,bgm=7,
|
||||
@@ -27,14 +30,6 @@ setting={
|
||||
stereo=6,
|
||||
--sound
|
||||
|
||||
keyMap={
|
||||
{"left","right","x","z","c","up","down","space","tab","r"},
|
||||
{},{},{},{},{},{},{},
|
||||
--keyboard
|
||||
{"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","x","leftshoulder"},
|
||||
{},{},{},{},{},{},{},
|
||||
--joystick
|
||||
},
|
||||
VKSwitch=false,--if disp
|
||||
VKTrack=false,--if tracked
|
||||
VKDodge=false,--if dodge
|
||||
@@ -44,14 +39,6 @@ setting={
|
||||
VKAlpha=3,
|
||||
--control
|
||||
}
|
||||
local L=setting.keyMap
|
||||
for i=1,#L do
|
||||
for j=1,20 do
|
||||
if not L[i][j]then
|
||||
L[i][j]=""
|
||||
end
|
||||
end
|
||||
end
|
||||
stat={
|
||||
run=0,game=0,time=0,
|
||||
extraPiece=0,extraRate=0,
|
||||
@@ -60,32 +47,40 @@ stat={
|
||||
clear_1=0,clear_2=0,clear_3=0,clear_4=0,
|
||||
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
|
||||
b2b=0,b3b=0,pc=0,score=0,
|
||||
lastPlay=1,--last played mode ID
|
||||
}
|
||||
keyMap={
|
||||
{"left","right","x","z","c","up","down","space","tab","r"},
|
||||
{},{},{},{},{},{},{},
|
||||
--keyboard
|
||||
{"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","x","leftshoulder"},
|
||||
{},{},{},{},{},{},{},
|
||||
--joystick
|
||||
}
|
||||
for i=1,#keyMap do for j=1,20 do
|
||||
if not keyMap[i][j]then keyMap[i][j]=""end
|
||||
end end
|
||||
--Things related to virtualkey
|
||||
local O,_=true,false
|
||||
VK_org={--Original set,for restore VK' position
|
||||
{ava=O,x=80, y=720-200, r=80},--moveLeft
|
||||
{ava=O,x=320, y=720-200, r=80},--moveRight
|
||||
{ava=O,x=1280-80, y=720-200, r=80},--rotRight
|
||||
{ava=O,x=1280-200, y=720-80, r=80},--rotLeft
|
||||
{ava=O,x=1280-200, y=720-320, r=80},--rotFlip
|
||||
{ava=O,x=200, y=720-320, r=80},--hardDrop
|
||||
{ava=O,x=200, y=720-80, r=80},--softDrop
|
||||
{ava=O,x=1280-320, y=720-200, r=80},--hold
|
||||
{ava=O,x=1280-80, y=280, r=80},--func
|
||||
{ava=O,x=80, y=280, r=80},--restart
|
||||
{ava=_,x=100, y=50, r=80},--insLeft
|
||||
{ava=_,x=200, y=50, r=80},--insRight
|
||||
{ava=_,x=300, y=50, r=80},--insDown
|
||||
{ava=_,x=400, y=50, r=80},--down1
|
||||
{ava=_,x=500, y=50, r=80},--down4
|
||||
{ava=_,x=600, y=50, r=80},--down10
|
||||
{ava=_,x=700, y=50, r=80},--dropLeft
|
||||
{ava=_,x=800, y=50, r=80},--dropRight
|
||||
{ava=_,x=900, y=50, r=80},--addToLeft
|
||||
{ava=_,x=1000, y=50, r=80},--addToRight
|
||||
{ava=true, x=80, y=720-200, r=80},--moveLeft
|
||||
{ava=true, x=320, y=720-200, r=80},--moveRight
|
||||
{ava=true, x=1280-80, y=720-200, r=80},--rotRight
|
||||
{ava=true, x=1280-200, y=720-80, r=80},--rotLeft
|
||||
{ava=true, x=1280-200, y=720-320, r=80},--rot180
|
||||
{ava=true, x=200, y=720-320, r=80},--hardDrop
|
||||
{ava=true, x=200, y=720-80, r=80},--softDrop
|
||||
{ava=true, x=1280-320, y=720-200, r=80},--hold
|
||||
{ava=true, x=1280-80, y=280, r=80},--func
|
||||
{ava=true, x=80, y=280, r=80},--restart
|
||||
{ava=false, x=100, y=50, r=80},--insLeft
|
||||
{ava=false, x=200, y=50, r=80},--insRight
|
||||
{ava=false, x=300, y=50, r=80},--insDown
|
||||
{ava=false, x=400, y=50, r=80},--down1
|
||||
{ava=false, x=500, y=50, r=80},--down4
|
||||
{ava=false, x=600, y=50, r=80},--down10
|
||||
{ava=false, x=700, y=50, r=80},--dropLeft
|
||||
{ava=false, x=800, y=50, r=80},--dropRight
|
||||
{ava=false, x=900, y=50, r=80},--addToLeft
|
||||
{ava=false, x=1000, y=50, r=80},--addToRight
|
||||
}
|
||||
virtualkey={}
|
||||
for i=1,#VK_org do
|
||||
virtualkey[i]={}
|
||||
end
|
||||
virtualkey={}for i=1,#VK_org do virtualkey[i]={}end
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
旋转系统:
|
||||
使用Techmino专属旋转系统
|
||||
细节不赘述
|
||||
细节懒得写(?)
|
||||
|
||||
spin判定:
|
||||
结合了不可移动判定和三角判定,是否为mini也与判定过程数据有关
|
||||
细节不赘述
|
||||
细节也懒得写(?)
|
||||
|
||||
攻击系统:
|
||||
普通消除:
|
||||
@@ -23,7 +23,7 @@ spin判定:
|
||||
根据上述规则计算后,向下取整,攻击打出
|
||||
|
||||
分数系统:
|
||||
玩得越牛逼得分越高嗷(
|
||||
操作越牛逼得分越高嗷(
|
||||
|
||||
攻击延迟:
|
||||
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢
|
||||
|
||||
386
file.lua
@@ -3,7 +3,13 @@ local int,max,min=math.floor,math.max,math.min
|
||||
local sub,find=string.sub,string.find
|
||||
local toN,toS=tonumber,tostring
|
||||
local concat=table.concat
|
||||
|
||||
local FILE={
|
||||
data= fs.newFile("data.dat"),
|
||||
setting=fs.newFile("setting.dat"),
|
||||
VK= fs.newFile("virtualkey.dat"),
|
||||
keyMap= fs.newFile("key.dat"),
|
||||
unlock= fs.newFile("unlock.dat"),
|
||||
}
|
||||
local function splitS(s,sep)
|
||||
local t,n={},1
|
||||
repeat
|
||||
@@ -15,261 +21,201 @@ local function splitS(s,sep)
|
||||
return t
|
||||
end
|
||||
|
||||
local tabs={
|
||||
[0]="",
|
||||
"\t",
|
||||
"\t\t",
|
||||
"\t\t\t",
|
||||
"\t\t\t\t",
|
||||
"\t\t\t\t\t",
|
||||
}
|
||||
local function dumpTable(L,t)
|
||||
local s
|
||||
if t then
|
||||
s="{\n"
|
||||
else
|
||||
s="return{\n"
|
||||
t=1
|
||||
end
|
||||
local count=1
|
||||
for k,v in next,L do
|
||||
local T=type(k)
|
||||
if T=="number"then
|
||||
if k==count then
|
||||
k="";count=count+1
|
||||
else
|
||||
k="["..k.."]="
|
||||
end
|
||||
elseif T=="string"then k=k.."="
|
||||
elseif T=="boolean"then k="["..k.."]="
|
||||
else error("Error key type!")
|
||||
end
|
||||
T=type(v)
|
||||
if T=="number"then v=tostring(v)
|
||||
elseif T=="string"then v="\""..v.."\""
|
||||
elseif T=="table"then v=dumpTable(v,t+1)
|
||||
elseif T=="boolean"then v=tostring(v)
|
||||
else error("Error data type!")
|
||||
end
|
||||
s=s..tabs[t]..k..v..",\n"
|
||||
end
|
||||
return s..tabs[t-1].."}"
|
||||
end
|
||||
local function addToTable(G,base)--push all values to base
|
||||
for k,v in next,G do
|
||||
if type(v)=="table"and type(base[k])=="table"then
|
||||
addToTable(v,base[k])
|
||||
else
|
||||
base[k]=v
|
||||
end
|
||||
end
|
||||
end
|
||||
function loadRecord(N)
|
||||
local F=fs.newFile(N..".dat")
|
||||
if F:open("r")then
|
||||
local s=loadstring(F:read())
|
||||
local T={}
|
||||
setfenv(s,T)
|
||||
T[1]=s()
|
||||
return T[1]
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
return s()
|
||||
else
|
||||
return{}
|
||||
end
|
||||
end
|
||||
end
|
||||
local function dumpTable(L)
|
||||
local s="{\n"
|
||||
for k,v in next,L do
|
||||
local T
|
||||
T=type(k)
|
||||
if T=="number"then k="["..k.."]="
|
||||
elseif T=="string"then k=k.."="
|
||||
else error("Error data type!")
|
||||
end
|
||||
T=type(v)
|
||||
if T=="number"then v=tostring(v)
|
||||
elseif T=="string"then v="\""..v.."\""
|
||||
elseif T=="table"then v=dumpTable(v)
|
||||
else error("Error data type!")
|
||||
end
|
||||
s=s..k..v..",\n"
|
||||
end
|
||||
return s.."}"
|
||||
end
|
||||
function saveRecord(N,L)
|
||||
local F=fs.newFile(N..".dat")
|
||||
F:open("w")
|
||||
local _=F:write("return"..dumpTable(L))
|
||||
F:flush()
|
||||
F:close()
|
||||
local _,mes=F:write(dumpTable(L))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
TEXT(text.recSavingError..mes,640,480,40,"appear",.4)
|
||||
TEXT(text.recSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
function delRecord(N)
|
||||
fs.remove(N..".dat")
|
||||
end
|
||||
|
||||
function saveUnlock()
|
||||
local t={}
|
||||
local RR=modeRanks
|
||||
for i=1,#RR do
|
||||
t[i]=RR[i]or"X"
|
||||
end
|
||||
t=concat(t,",")
|
||||
local F=FILE.unlock
|
||||
F:open("w")
|
||||
local _=F:write(t)
|
||||
F:flush()
|
||||
F:close()
|
||||
if not _ then
|
||||
TEXT(text.unlockSavingError..mes,640,480,40,"appear",.4)
|
||||
end
|
||||
end
|
||||
function loadUnlock()
|
||||
local F=FILE.unlock
|
||||
F:open("r")
|
||||
local t=F:read()
|
||||
F:close()
|
||||
t=splitS(t,",")
|
||||
for i=1,#modeRanks do
|
||||
local v=toN(t[i])
|
||||
if not v or v<0 or v>6 or v~=int(v)then v=false end
|
||||
modeRanks[i]=v
|
||||
end
|
||||
end
|
||||
|
||||
local statOpy={
|
||||
"run","game","time",
|
||||
"extraPiece","extraRate",
|
||||
"key","rotate","hold","piece","row",
|
||||
"atk","send","recv","pend",
|
||||
"clear_1","clear_2","clear_3","clear_4",
|
||||
"spin_0","spin_1","spin_2","spin_3",
|
||||
"b2b","b3b","pc","score",
|
||||
}
|
||||
function loadStat()
|
||||
local F=FILE.data
|
||||
F:open("r")
|
||||
local t=F:read()
|
||||
F:close()
|
||||
t=splitS(t,"\r\n")
|
||||
for i=1,#t do
|
||||
local p=find(t[i],"=")
|
||||
if p then
|
||||
local t,v=sub(t[i],1,p-1),sub(t[i],p+1)
|
||||
for i=1,#statOpy do
|
||||
if t==statOpy[i]then
|
||||
v=toN(v)if not v or v<0 then v=0 end
|
||||
stat[t]=v
|
||||
break
|
||||
end
|
||||
end
|
||||
if F:open("r")then
|
||||
local s=F:read()
|
||||
if s:sub(1,6)~="return"then s="return{"..s.."}"end
|
||||
s=loadstring(s)
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
modeRanks=s()
|
||||
end
|
||||
end
|
||||
end
|
||||
function saveStat()
|
||||
local t={}
|
||||
for i=1,#statOpy do
|
||||
t[i]=statOpy[i].."="..toS(stat[statOpy[i]])
|
||||
function saveUnlock()
|
||||
local F=FILE.unlock
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(modeRanks))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
TEXT(text.unlockSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
t=concat(t,"\r\n")
|
||||
function loadData()
|
||||
local F=FILE.data
|
||||
if F:open("r")then
|
||||
local s=F:read()
|
||||
if s:sub(1,6)~="return"then
|
||||
s="return{"..s:gsub("\n",",").."}"
|
||||
end
|
||||
s=loadstring(s)
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),stat)
|
||||
end
|
||||
end
|
||||
end
|
||||
function saveData()
|
||||
local F=FILE.data
|
||||
F:open("w")
|
||||
local _=F:write(t)
|
||||
F:flush()
|
||||
F:close()
|
||||
local _,mes=F:write(dumpTable(stat))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
TEXT(text.statSavingError..mes,640,480,40,"appear",.4)
|
||||
TEXT(text.statSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
function loadSetting()
|
||||
local F=FILE.setting
|
||||
F:open("r")
|
||||
local t=F:read()
|
||||
F:close()
|
||||
t=splitS(t,"\r\n")
|
||||
for i=1,#t do
|
||||
local p=find(t[i],"=")
|
||||
if p then
|
||||
local t,v=sub(t[i],1,p-1),sub(t[i],p+1)
|
||||
if--10档的设置
|
||||
--声音
|
||||
t=="sfx"or t=="bgm"or t=="voc"or t=="stereo"or
|
||||
--三个触摸设置项
|
||||
t=="VKTchW"or t=="VKCurW"or t=="VKAlpha"or
|
||||
--重开时间
|
||||
t=="reTime"
|
||||
then
|
||||
v=toN(v)
|
||||
if v and v==int(v)and v>=0 and v<=10 then
|
||||
setting[t]=v
|
||||
end
|
||||
elseif t=="vib"then
|
||||
setting.vib=toN(v:match("[012345]"))or 0
|
||||
elseif t=="fullscreen"then
|
||||
setting.fullscreen=v=="true"
|
||||
love.window.setFullscreen(setting.fullscreen)
|
||||
elseif
|
||||
--开关设置们
|
||||
t=="bg"or
|
||||
t=="ghost"or t=="center"or t=="grid"or t=="swap"or
|
||||
t=="quickR"or t=="fine"or t=="bgspace"or t=="smo"or
|
||||
t=="VKSwitch"or t=="VKTrack"or t=="VKDodge"or t=="VKIcon"
|
||||
then
|
||||
setting[t]=v=="true"
|
||||
elseif t=="frameMul"then
|
||||
setting.frameMul=min(max(toN(v)or 100,0),100)
|
||||
elseif t=="das"or t=="arr"or t=="sddas"or t=="sdarr"then
|
||||
v=toN(v)if not v or v<0 then v=0 end
|
||||
setting[t]=int(v)
|
||||
elseif t=="dropFX"or t=="shakeFX"or t=="atkFX"then
|
||||
setting[t]=toN(v:match("[012345]"))or 0
|
||||
elseif t=="lang"then
|
||||
setting[t]=toN(v:match("[123]"))or 1
|
||||
elseif t=="skin"then
|
||||
setting[t]=toN(v:match("[12345678]"))or 1
|
||||
elseif t=="keymap"then
|
||||
v=splitS(v,"/")
|
||||
for i=1,16 do
|
||||
local v1=splitS(v[i],",")
|
||||
for j=1,#v1 do
|
||||
setting.keyMap[i][j]=v1[j]
|
||||
end
|
||||
end
|
||||
elseif t=="VK"then
|
||||
v=splitS(v,"/")
|
||||
local SK
|
||||
for i=1,#v do
|
||||
if v[i]then
|
||||
SK=splitS(v[i],",")
|
||||
local K=VK_org[i]
|
||||
K.ava=SK[1]=="T"
|
||||
K.x,K.y,K.r=toN(SK[2]),toN(SK[3]),toN(SK[4])
|
||||
end
|
||||
end
|
||||
elseif t=="lastPlay"then
|
||||
v=toN(v)
|
||||
mapCam.lastPlay=v and modeRanks[v]and v or 1
|
||||
end
|
||||
if F:open("r")then
|
||||
local s=F:read()
|
||||
if s:sub(1,6)~="return"then s="return{"..s.."}"end
|
||||
s=loadstring(s)
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),setting)
|
||||
end
|
||||
end
|
||||
end
|
||||
local saveOpt={
|
||||
"das","arr",
|
||||
"sddas","sdarr",
|
||||
"reTime",
|
||||
"quickR",
|
||||
"swap",
|
||||
"fine",
|
||||
|
||||
"ghost","center",
|
||||
"smo","grid",
|
||||
"dropFX",
|
||||
"shakeFX",
|
||||
"atkFX",
|
||||
"frameMul",
|
||||
|
||||
"fullscreen",
|
||||
"bg",
|
||||
"bgspace",
|
||||
"lang",
|
||||
"skin",
|
||||
|
||||
"sfx","bgm",
|
||||
"vib","voc",
|
||||
"stereo",
|
||||
|
||||
"VKSwitch",
|
||||
"VKTrack",
|
||||
"VKDodge",
|
||||
"VKTchW",
|
||||
"VKCurW",
|
||||
"VKIcon",
|
||||
"VKAlpha",
|
||||
}
|
||||
function saveSetting()
|
||||
local vk={}--virtualkey table
|
||||
for i=1,#VK_org do
|
||||
local V=VK_org[i]
|
||||
vk[i]=concat({
|
||||
V.ava and"T"or"F",
|
||||
int(V.x+.5),
|
||||
int(V.y+.5),
|
||||
V.r,
|
||||
},",")
|
||||
end--pre-pack virtualkey setting
|
||||
local map={}
|
||||
for i=1,16 do
|
||||
map[i]=concat(setting.keyMap[i],",")
|
||||
end
|
||||
local t={
|
||||
"keymap="..toS(concat(map,"/")),
|
||||
"VK="..toS(concat(vk,"/")),
|
||||
"lastPlay="..mapCam.lastPlay,
|
||||
}
|
||||
for i=1,#saveOpt do
|
||||
t[#t+1]=saveOpt[i].."="..toS(setting[saveOpt[i]])
|
||||
end
|
||||
t=concat(t,"\r\n")
|
||||
local F=FILE.setting
|
||||
F:open("w")
|
||||
local _,mes=F:write(t)
|
||||
F:flush()
|
||||
F:close()
|
||||
if _ then
|
||||
TEXT(text.settingSaved,370,330,30,"appear")
|
||||
else
|
||||
TEXT(text.settingSavingError.."123",370,350,20,"appear",.3)
|
||||
local _,mes=F:write(dumpTable(setting))
|
||||
F:flush()F:close()
|
||||
if _ then TEXT(text.settingSaved,1140,650,40,"sudden",.5)
|
||||
else TEXT(text.settingSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
function loadKeyMap()
|
||||
local F=FILE.keyMap
|
||||
if F:open("r")then
|
||||
local s=loadstring(F:read())
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),keyMap)
|
||||
end
|
||||
end
|
||||
end
|
||||
function saveKeyMap()
|
||||
local F=FILE.keyMap
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(keyMap))
|
||||
F:flush()F:close()
|
||||
if _ then TEXT(text.keyMapSaved,1140,650,26,"sudden",.5)
|
||||
else TEXT(text.keyMapSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
function loadVK()
|
||||
local F=FILE.VK
|
||||
if F:open("r")then
|
||||
local s=loadstring(F:read())
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),VK_org)
|
||||
end
|
||||
end
|
||||
end
|
||||
function saveVK()
|
||||
local F=FILE.VK
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(VK_org))
|
||||
F:flush()F:close()
|
||||
if _ then TEXT(text.VKSaved,1140,650,26,"sudden",.5)
|
||||
else TEXT(text.VKSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
if fs.getInfo("unlock.dat")then loadUnlock()end
|
||||
if fs.getInfo("data.dat")then loadData()end
|
||||
if fs.getInfo("key.dat")then loadKeyMap()end
|
||||
if fs.getInfo("virtualkey.dat")then loadVK()end
|
||||
if fs.getInfo("setting.dat")then loadSetting()
|
||||
elseif system=="Android"or system=="iOS" then
|
||||
setting.VKSwitch=true
|
||||
setting.swap=false
|
||||
setting.vib=2
|
||||
end
|
||||
BIN
image/block.png
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 767 B |
|
Before Width: | Height: | Size: 1023 B |
|
Before Width: | Height: | Size: 915 B |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
BIN
image/skin/ball(shaw).png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
image/skin/colored_bone(mrz).png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
image/skin/contrast(mrz).png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
image/skin/glow(mrz).png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
image/skin/jelly(miya).png
Normal file
|
After Width: | Height: | Size: 9.5 KiB |
BIN
image/skin/normal(mrz).png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
image/skin/plastic(mrz).png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
image/skin/pure(mrz).png
Normal file
|
After Width: | Height: | Size: 578 B |
BIN
image/skin/smooth(mrz).png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
image/skin/steel(kulumi).png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
image/skin/text_bone(mrz).png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
image/skin/white_bone(mrz).png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
136
language/chi.lua
@@ -69,19 +69,26 @@ return{
|
||||
softdropdas="软降DAS:",
|
||||
softdroparr="软降ARR:",
|
||||
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
|
||||
keyboard="键盘",joystick="手柄",
|
||||
space="空格",enter="回车",
|
||||
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
|
||||
setting_game="游戏设置",
|
||||
setting_graphic="画面设置",
|
||||
setting_sound="声音设置",
|
||||
keyboard="键盘",joystick="手柄",
|
||||
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
|
||||
blockLayout="外观设置",
|
||||
musicRoom="音乐室",
|
||||
nowPlaying="正在播放:",
|
||||
unlockSavingError="解锁保存失败:",
|
||||
recSavingError="纪录保存失败:",
|
||||
statSavingError="数据保存失败:",
|
||||
|
||||
settingSaved="设置已保存",
|
||||
settingSavingError="设置保存失败:",
|
||||
keyMapSaved="键位设置已保存",
|
||||
keyMapSavingError="键位保存失败:",
|
||||
VKSaved="虚拟按键设置已保存",
|
||||
VKSavingError="虚拟按键保存失败:",
|
||||
statSavingError="统计保存失败:",
|
||||
unlockSavingError="解锁保存失败:",
|
||||
recSavingError="纪录保存失败:",
|
||||
|
||||
needRestart="重新开始以生效",
|
||||
copySuccess="已复制到剪切板",
|
||||
dataCorrupted="数据损坏",
|
||||
VKTchW="触摸点权重",
|
||||
@@ -90,47 +97,26 @@ return{
|
||||
noScore="暂无成绩",
|
||||
highScore="最佳成绩",
|
||||
newRecord="打破纪录",
|
||||
invalidGame="成绩无效",
|
||||
errorMsg="Techmino遇到了问题,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
|
||||
|
||||
actName=actName,
|
||||
|
||||
load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载模式ing","加载乱七八糟的东西ing"},
|
||||
tips={
|
||||
"不是动画,真的在加载!",
|
||||
"大满贯10连击消四全清!",
|
||||
"<方块研究所>有一个Nspire-CX版本!",
|
||||
"B2B2B???",
|
||||
"B2B2B2B存在吗?",
|
||||
"MEGACMB!",
|
||||
"ALLSPIN!",
|
||||
"O spin triple!",
|
||||
"Miya:喵!",
|
||||
"225238922 哔哩哔哩 干杯~",
|
||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||
"合群了就会消失,但是消失不代表没有意义",
|
||||
"学会使用两个旋转键,三个更好",
|
||||
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
|
||||
"注意到\"旋转\"到底对方块做了些什么吗?",
|
||||
"20G本质是一套全新的游戏规则",
|
||||
"不要在上课时玩游戏!",
|
||||
"本游戏难度上限很高,做好心理准备",
|
||||
"本游戏可不是休闲游戏",
|
||||
"调到特殊的日期也不会发生什么的",
|
||||
"3.1415926535897932384",
|
||||
"2.7182818284590452353",
|
||||
"Let-The-Bass-Kick!",
|
||||
"使用love2d引擎制作",
|
||||
"有疑问?先看设置有没有你想要的",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"不要按F8",
|
||||
"秘密数字:626",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"少女祈祷中",
|
||||
"少女折寿中",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
"(第一次才准)今日幸运数字:"..math.random(100,626),
|
||||
pauseStat={
|
||||
"时间:",
|
||||
"按键/旋转/暂存:",
|
||||
"使用方块:",
|
||||
"消行数:",
|
||||
"攻击数:",
|
||||
"发送数:",
|
||||
"接收数:",
|
||||
"直接消除数:",
|
||||
"旋转消除数:",
|
||||
"满贯数:",
|
||||
"全清数:",
|
||||
"效率:",
|
||||
"多余操作方块:",
|
||||
"最简操作率:",
|
||||
},
|
||||
stat={
|
||||
"游戏运行次数:",
|
||||
@@ -138,32 +124,33 @@ return{
|
||||
"游戏时间:",
|
||||
"按键数:",
|
||||
"旋转数:",
|
||||
"Hold次数:",
|
||||
"方块使用数:",
|
||||
"暂存数:",
|
||||
"方块使用:",
|
||||
"消行数:",
|
||||
"攻击数:",
|
||||
"发送数:",
|
||||
"攻击(发送)数:",
|
||||
"接收数:",
|
||||
"上涨数:",
|
||||
"消除数:",
|
||||
"Spin数:",
|
||||
"B2B数:",
|
||||
"PC数:",
|
||||
"直接消除数:",
|
||||
"旋转消除数:",
|
||||
"满贯数:",
|
||||
"全清数:",
|
||||
"效率:",
|
||||
"多余操作:",
|
||||
"最简操作率:",
|
||||
},
|
||||
help={
|
||||
"好像也没啥好帮助的吧?就当是关于了",
|
||||
"这只是一个普通的方块游戏,请勿称此游戏为某某某方块",
|
||||
"不过就当成TOP/C2/KOS/TGM3/JS玩好了",
|
||||
"游戏还在测试阶段,请 勿 外 传",
|
||||
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
|
||||
"",
|
||||
"使用LOVE2D引擎",
|
||||
"作者:MrZ 邮箱:1046101471@qq.com",
|
||||
"程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:Miya",
|
||||
"特别感谢:Farter,Flyz,196,Teatube,T830,[所有测试人员]和 你!",
|
||||
"错误或者建议请附带相关信息发送到作者邮箱~",
|
||||
"特别感谢:Flyz,Farter,196,Teatube,T830,[所有内测人员]和 你!",
|
||||
"",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"游戏现在仅通过内测群1057456078进行免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/植入病毒的风险,程序只申请了震动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
},
|
||||
used=[[
|
||||
使用工具:
|
||||
@@ -176,7 +163,6 @@ return{
|
||||
]],
|
||||
support="支持作者",
|
||||
group="官方QQ群",
|
||||
warning="禁止直接传播游戏本体",
|
||||
WidgetText={
|
||||
main={
|
||||
play="开始",
|
||||
@@ -190,7 +176,7 @@ return{
|
||||
},
|
||||
mode={
|
||||
draw="画图(Q)",
|
||||
setting="参数(E)",
|
||||
custom="参数(E)",
|
||||
start="开始",
|
||||
back=BK,
|
||||
},
|
||||
@@ -229,7 +215,7 @@ return{
|
||||
gb5="■",
|
||||
space="×",
|
||||
clear="清除",
|
||||
demo="演示模式",
|
||||
demo="不显示×",
|
||||
copy="复制",
|
||||
paste="粘贴",
|
||||
back=BK,
|
||||
@@ -238,26 +224,29 @@ return{
|
||||
pause="暂停",
|
||||
},
|
||||
pause={
|
||||
resume= "继续",
|
||||
restart="重新开始",
|
||||
sfx="音效",
|
||||
bgm="音乐",
|
||||
quit= "退出",
|
||||
resume= "继续(空格)",
|
||||
restart="重新开始(R)",
|
||||
setting="设置(S)",
|
||||
quit= "退出(esc)",
|
||||
},
|
||||
setting_game={
|
||||
graphic="←画面设置",
|
||||
sound="声音设置→",
|
||||
reset="重置DAS/ARR",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
reTime="开局等待时间",
|
||||
maxNext="最大预览数量",
|
||||
quickR="快速重新开始",
|
||||
swap="组合键切换攻击模式",
|
||||
fine="极简操作提示音",
|
||||
autoPause="自动暂停",
|
||||
layout="外观",
|
||||
ctrl="键位设置",
|
||||
touch="触屏设置",
|
||||
quickR="快速重新开始",
|
||||
autoPause="自动暂停",
|
||||
swap="组合键切换攻击模式",
|
||||
fine="极简操作提示音",
|
||||
back=BK,
|
||||
},
|
||||
setting_graphic={
|
||||
@@ -266,7 +255,6 @@ return{
|
||||
ghost="阴影",
|
||||
grid="网格",
|
||||
center="旋转中心",
|
||||
skin="皮肤",
|
||||
bg="背景",
|
||||
bgspace="星空背景",
|
||||
smo="平滑下落",
|
||||
@@ -290,6 +278,18 @@ return{
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
setting_skin={
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="R",
|
||||
prev2="↑",next2="↓",spin2="R",
|
||||
prev3="↑",next3="↓",spin3="R",
|
||||
prev4="↑",next4="↓",spin4="R",
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
reset="重置方向",
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
default="默认组合",
|
||||
snap=function()return text.snapLevelName[sceneTemp.snap]end,
|
||||
|
||||
@@ -69,19 +69,26 @@ return{
|
||||
softdropdas="软降DAS:",
|
||||
softdroparr="软降ARR:",
|
||||
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
|
||||
keyboard="键盘",joystick="手柄",
|
||||
space="空格",enter="回车",
|
||||
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
|
||||
setting_game="游戏设置",
|
||||
setting_graphic="画面设置",
|
||||
setting_sound="声音设置",
|
||||
keyboard="键盘",joystick="手柄",
|
||||
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
|
||||
blockLayout="外观设置",
|
||||
musicRoom="音乐室",
|
||||
nowPlaying="正在播放:",
|
||||
unlockSavingError="解锁保存失败:",
|
||||
recSavingError="纪录保存失败:",
|
||||
statSavingError="数据保存失败:",
|
||||
|
||||
settingSaved="设置已保存",
|
||||
settingSavingError="设置保存失败:",
|
||||
keyMapSaved="键位设置已保存",
|
||||
keyMapSavingError="键位保存失败:",
|
||||
VKSaved="虚拟按键设置已保存",
|
||||
VKSavingError="虚拟按键保存失败:",
|
||||
statSavingError="统计保存失败:",
|
||||
unlockSavingError="解锁保存失败:",
|
||||
recSavingError="纪录保存失败:",
|
||||
|
||||
needRestart="重新开始以生效",
|
||||
copySuccess="已复制到剪切板",
|
||||
dataCorrupted="数据损坏",
|
||||
VKTchW="触摸点权重",
|
||||
@@ -90,47 +97,26 @@ return{
|
||||
noScore="暂无成绩",
|
||||
highScore="最佳成绩",
|
||||
newRecord="打破纪录",
|
||||
invalidGame="成绩无效",
|
||||
errorMsg="Techmino遇到了问题,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
|
||||
|
||||
actName=actName,
|
||||
|
||||
load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载模式ing","加载乱七八糟的东西ing"},
|
||||
tips={
|
||||
"不是动画,真的在加载!",
|
||||
"大满贯10连击消四全清!",
|
||||
"<方块研究所>有一个Nspire-CX版本!",
|
||||
"B2B2B???",
|
||||
"B2B2B2B存在吗?",
|
||||
"MEGACMB!",
|
||||
"ALLSPIN!",
|
||||
"O型回旋三清!",
|
||||
"Miya:喵!",
|
||||
"225238922 哔哩哔哩 干杯~",
|
||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||
"合群了就会消失,但是消失不代表没有意义",
|
||||
"学会使用两个旋转键,三个更好",
|
||||
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
|
||||
"注意到\"旋转\"到底对方块做了些什么吗?",
|
||||
"20G本质是一套全新的游戏规则",
|
||||
"不要在上课时玩游戏!",
|
||||
"本游戏难度上限很高,做好心理准备",
|
||||
"本游戏可不是休闲游戏",
|
||||
"调到特殊的日期也不会发生什么的",
|
||||
"3.1415926535897932384",
|
||||
"2.7182818284590452353",
|
||||
"Let-The-Bass-Kick!",
|
||||
"使用love2d引擎制作",
|
||||
"有疑问?先看设置有没有你想要的",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"不要按F8",
|
||||
"秘密数字:626",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"少女祈祷中",
|
||||
"少女折寿中",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
"(第一次才准)今日幸运数字:"..math.random(100,626),
|
||||
pauseStat={
|
||||
"时间:",
|
||||
"按键/旋转/暂存:",
|
||||
"使用方块:",
|
||||
"消行数:",
|
||||
"攻击数:",
|
||||
"发送数:",
|
||||
"接收数:",
|
||||
"直接消除数:",
|
||||
"旋转消除数:",
|
||||
"满贯数:",
|
||||
"全清数:",
|
||||
"效率:",
|
||||
"多余操作方块:",
|
||||
"最简操作率:",
|
||||
},
|
||||
stat={
|
||||
"游戏运行次数:",
|
||||
@@ -138,32 +124,33 @@ return{
|
||||
"游戏时间:",
|
||||
"按键数:",
|
||||
"旋转数:",
|
||||
"暂存次数:",
|
||||
"暂存数:",
|
||||
"方块使用:",
|
||||
"消行数:",
|
||||
"攻击行数:",
|
||||
"发送数:",
|
||||
"攻击(发送)数:",
|
||||
"接收数:",
|
||||
"上涨数:",
|
||||
"消除数:",
|
||||
"旋转消行数:",
|
||||
"直接消除数:",
|
||||
"旋转消除数:",
|
||||
"满贯数:",
|
||||
"全清数:",
|
||||
"效率:",
|
||||
"多余操作:",
|
||||
"最简操作率:",
|
||||
},
|
||||
help={
|
||||
"好像也没啥好帮助的吧?就当是关于了",
|
||||
"这只是一个普通的方块游戏,请勿称此游戏为某某某方块",
|
||||
"不过就当成TOP/C2/KOS/TGM3/JS玩好了",
|
||||
"游戏还在测试阶段,请 勿 外 传",
|
||||
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
|
||||
"",
|
||||
"使用LOVE2D引擎",
|
||||
"作者:MrZ 邮箱:1046101471@qq.com",
|
||||
"程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:Miya",
|
||||
"特别感谢:Farter,Flyz,196,Teatube,T830,[所有测试人员]和 你!",
|
||||
"错误或者建议请附带相关信息发送到作者邮箱~",
|
||||
"特别感谢:Flyz,Farter,196,Teatube,T830,[所有内测人员]和 你!",
|
||||
"",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"游戏现在仅通过内测群1057456078进行免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/植入病毒的风险,程序只申请了震动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
},
|
||||
used=[[
|
||||
使用工具:
|
||||
@@ -176,7 +163,6 @@ return{
|
||||
]],
|
||||
support="支持作者",
|
||||
group="官方QQ群",
|
||||
warning="禁止直接传播游戏本体",
|
||||
WidgetText={
|
||||
main={
|
||||
play="开始",
|
||||
@@ -190,7 +176,7 @@ return{
|
||||
},
|
||||
mode={
|
||||
draw="画图(Q)",
|
||||
setting="参数(E)",
|
||||
custon="参数(E)",
|
||||
start="开始",
|
||||
back=BK,
|
||||
},
|
||||
@@ -229,7 +215,7 @@ return{
|
||||
gb5="■",
|
||||
space="×",
|
||||
clear="清除",
|
||||
demo="演示模式",
|
||||
demo="不显示×",
|
||||
copy="复制",
|
||||
paste="粘贴",
|
||||
back=BK,
|
||||
@@ -238,27 +224,28 @@ return{
|
||||
pause="暂停",
|
||||
},
|
||||
pause={
|
||||
resume= "继续",
|
||||
restart="重新开始",
|
||||
sfx="音效",
|
||||
bgm="音乐",
|
||||
quit= "退出",
|
||||
resume= "继续(空格)",
|
||||
restart="重新开始(R)",
|
||||
setting="设置(S)",
|
||||
quit= "退出(esc)",
|
||||
},
|
||||
|
||||
setting_game={
|
||||
graphic="←画面设置",
|
||||
sound="声音设置→",
|
||||
reset="重置DAS/ARR",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
reTime="开局等待时间",
|
||||
maxNext="最大预览数量",
|
||||
autoPause="自动暂停",
|
||||
layout="外观",
|
||||
ctrl="键位设置",
|
||||
touch="触屏设置",
|
||||
quickR="快速重新开始",
|
||||
swap="组合键切换攻击模式",
|
||||
fine="极简操作提示音",
|
||||
ctrl="键位设置",
|
||||
touch="触屏设置",
|
||||
back=BK,
|
||||
},
|
||||
setting_graphic={
|
||||
@@ -267,7 +254,6 @@ return{
|
||||
ghost="阴影",
|
||||
grid="网格",
|
||||
center="旋转中心",
|
||||
skin="皮肤",
|
||||
bg="背景",
|
||||
bgspace="星空背景",
|
||||
smo="平滑下落",
|
||||
@@ -291,6 +277,18 @@ return{
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
setting_skin={
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="转",
|
||||
prev2="↑",next2="↓",spin2="转",
|
||||
prev3="↑",next3="↓",spin3="转",
|
||||
prev4="↑",next4="↓",spin4="转",
|
||||
prev5="↑",next5="↓",spin5="转",
|
||||
prev6="↑",next6="↓",spin6="转",
|
||||
prev7="↑",next7="↓",spin7="转",
|
||||
reset="重置方向",
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
default="默认组合",
|
||||
snap=function()return text.snapLevelName[sceneTemp.snap]end,
|
||||
|
||||
133
language/eng.lua
@@ -1,7 +1,7 @@
|
||||
local BK="Back"
|
||||
local actName={
|
||||
"Move Left:","Move Right:",
|
||||
"Rotate Right:","Rotate Left:","Rotate Flip:",
|
||||
"Rotate Right:","Rotate Left:","Rotate 180°:",
|
||||
"Hard Drop:","Soft Drop:","Hold:","Function:","Restart:",
|
||||
"Instant Left:","Instant Right:","Ins Down:","Down 1:","Down 4:","Down 10:",
|
||||
"Left Drop:","Right Drop:","Left INS:","Right INS:",
|
||||
@@ -67,19 +67,26 @@ return{
|
||||
softdropdas="Down DAS:",
|
||||
softdroparr="Down ARR:",
|
||||
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
|
||||
keyboard="Keyboard",joystick="Joystick",
|
||||
space="Space",enter="Enter",
|
||||
ctrlSetHelp="Arrowkey to select/change slot,Enter to change,Esc back",
|
||||
setting_game="Game setting",
|
||||
setting_graphic="Graphic setting",
|
||||
setting_sound="Sound setting",
|
||||
keyboard="Keyboard",joystick="Joystick",
|
||||
blockLayout="Layout Setting",
|
||||
ctrlSetHelp="Arrowkey to select/change slot,Enter to change,Esc back",
|
||||
musicRoom="Music Room",
|
||||
nowPlaying="Now Playing:",
|
||||
unlockSavingError="Failed to save unlock:",
|
||||
recSavingError="Failed to save record:",
|
||||
statSavingError="Failed to save stat:",
|
||||
|
||||
settingSaved="Setting Saved",
|
||||
settingSavingError="Failed to save setting:",
|
||||
keyMapSaved="Key setting saved",
|
||||
keyMapSavingError="Failed to save key setting:",
|
||||
VKSaved="virtual key saved",
|
||||
VKSavingError="Failed to save virtual key:",
|
||||
statSavingError="Failed to save stat:",
|
||||
unlockSavingError="Failed to save unlock:",
|
||||
recSavingError="Failed to save record:",
|
||||
|
||||
needRestart="Effective after restart",
|
||||
copySuccess="Copy Success",
|
||||
dataCorrupted="Data Corrupted",
|
||||
VKTchW="Touch weight",
|
||||
@@ -88,48 +95,26 @@ return{
|
||||
noScore="No Score Yet",
|
||||
highScore="Highscore",
|
||||
newRecord="New Rocord",
|
||||
invalidGame="Invalid Game",
|
||||
errorMsg="Techmino ran into a problem and needs to restart.\nWe collected some error info,and you can send them to author.",
|
||||
|
||||
actName=actName,
|
||||
|
||||
load={[0]="Finished","Loading VOICE","Loading BGM","Loading SFX","Loading modes","Loading other things"},
|
||||
tips={
|
||||
"Not animation,real loading!",
|
||||
"Back to Back 10 combo Techrash PC!",
|
||||
"Techmino has a Nspire-CX edition!",
|
||||
"B2B2B???",
|
||||
"Is B2B2B2B possible?",
|
||||
"MEGACMB!",
|
||||
"ALLSPIN!",
|
||||
"O spin triple!",
|
||||
"Miya:Nya!",
|
||||
"225238922 Bilibili cheers!",
|
||||
"Playing too much = taking drugs",
|
||||
"Disappearing doesn't mean useless",
|
||||
"Try to use two rotate button,three better",
|
||||
"Small DAS&ARR can make you faster,if you can control block correctly",
|
||||
"Have you noticed what does \"rotating\" do to block?",
|
||||
"20G actually is a brand new game rule",
|
||||
"Do not play game in class!",
|
||||
"This game can be very hard,be mentally perpared",
|
||||
"This in not a casual game",
|
||||
"Nothing will happen when some special day come",
|
||||
"3.1415926535897932384",
|
||||
"2.7182818284590452353",
|
||||
"Let-The-Bass-Kick!",
|
||||
"Powered by love2d",
|
||||
"Find out what's in the setting!",
|
||||
"Any suggestions to author!",
|
||||
"DO NOT PRESS F8",
|
||||
"Secret num:626",
|
||||
"Techmino=Technique+Tetromino",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"Headphones for better experience",
|
||||
"少女祈禱中",
|
||||
"少女折壽中",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
"(first effective)Your luck number today:"..math.random(100,626),
|
||||
pauseStat={
|
||||
"Time:",
|
||||
"Key/Rot./Hold:",
|
||||
"Block used:",
|
||||
"Lines:",
|
||||
"Attack:",
|
||||
"Send:",
|
||||
"Receive:",
|
||||
"Clear:",
|
||||
"Spin:",
|
||||
"B2B:",
|
||||
"PC:",
|
||||
"Efficiency:",
|
||||
"Finesse err:",
|
||||
"Finesse rate:",
|
||||
},
|
||||
stat={
|
||||
"Games run:",
|
||||
@@ -140,29 +125,30 @@ return{
|
||||
"Hold:",
|
||||
"Block used:",
|
||||
"Lines cleared:",
|
||||
"Attack:",
|
||||
"Sent:",
|
||||
"Attack(Sent):",
|
||||
"Receive:",
|
||||
"Pend:",
|
||||
"Clear:",
|
||||
"Spin:",
|
||||
"B2B:",
|
||||
"PC:",
|
||||
"Efficiency:",
|
||||
"Finesse error:",
|
||||
"Finesse rate:",
|
||||
},
|
||||
help={
|
||||
"I don't think you need \"help\".",
|
||||
"THIS IS ONLY A BLOCK GAME,not T****s",
|
||||
"But just play like playing TOP/C2/KOS/TGM3",
|
||||
"Game is not public now,so DO NOT DISTIRBUTE",
|
||||
"But just play like playing TO/C2/KOS/TGM3",
|
||||
"",
|
||||
"Powered by LOVE2D",
|
||||
"Author:MrZ E-mail:1046101471@qq.com",
|
||||
"Program:MrZ Art:MrZ Music:MrZ SFX:MrZ VOICE:Miya",
|
||||
"Special thanks:Farter,Flyz,196,Teatube,T830,[all test staff] and YOU!",
|
||||
"Any bugs/suggestions to my E-mail.",
|
||||
"Special thanks:Flyz,Farter,196,Teatube,T830,[all test staff] and YOU!",
|
||||
"",
|
||||
"Any bugs/suggestions to my E-mail.(may with screenshot)",
|
||||
"Newest game only released in alpha-test group FREE",
|
||||
"Game downloaded from other way may implanted with virous",
|
||||
"Only network/vibrating permission applied",
|
||||
"Author is not responsible for any loss by eddited game",
|
||||
},
|
||||
used=[[
|
||||
Tool used:
|
||||
@@ -175,7 +161,6 @@ Lib used:
|
||||
]],
|
||||
support="Support Author",
|
||||
group="Official QQ Group",
|
||||
warning="DO NOT SHARE APP",
|
||||
WidgetText={
|
||||
main={
|
||||
play="Play",
|
||||
@@ -189,7 +174,7 @@ Lib used:
|
||||
},
|
||||
mode={
|
||||
draw="Draw(Q)",
|
||||
setting="Setting(E)",
|
||||
custom="Setting(E)",
|
||||
start="Start",
|
||||
back=BK,
|
||||
},
|
||||
@@ -213,7 +198,7 @@ Lib used:
|
||||
back=BK,
|
||||
},
|
||||
draw={
|
||||
any="ANY",
|
||||
any="Erase",
|
||||
block1="Z",
|
||||
block2="S",
|
||||
block3="L",
|
||||
@@ -228,7 +213,7 @@ Lib used:
|
||||
gb5="■",
|
||||
space="×",
|
||||
clear="Clear",
|
||||
demo="Demo",
|
||||
demo="Don't show ×",
|
||||
copy="Copy",
|
||||
paste="Paste",
|
||||
back=BK,
|
||||
@@ -237,26 +222,29 @@ Lib used:
|
||||
pause="Pause",
|
||||
},
|
||||
pause={
|
||||
resume="Resume",
|
||||
restart="Restart",
|
||||
sfx="SFX",
|
||||
bgm="BGM",
|
||||
quit="Quit",
|
||||
resume="Resume(space)",
|
||||
restart="Restart(R)",
|
||||
setting="Setting(S)",
|
||||
quit="Quit(esc)",
|
||||
},
|
||||
setting_game={
|
||||
graphic="←Graphic",
|
||||
sound="Sound→",
|
||||
reset="Reset DAS/ARR",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
reTime="Delay before game",
|
||||
maxNext="Max next count",
|
||||
quickR="Quick restart",
|
||||
swap="Combo key to change ATK mode",
|
||||
fine="Finesse error SFX",
|
||||
autoPause="Auto pause",
|
||||
layout="Layout",
|
||||
ctrl="Key Setting",
|
||||
touch="Touch Setting",
|
||||
quickR="Quick restart",
|
||||
autoPause="Auto pause",
|
||||
swap="Combo key to change ATK mode",
|
||||
fine="Finesse error SFX",
|
||||
back=BK,
|
||||
},
|
||||
setting_graphic={
|
||||
@@ -265,7 +253,6 @@ Lib used:
|
||||
ghost="Ghost",
|
||||
grid="Grid",
|
||||
center="Center",
|
||||
skin="Skin",
|
||||
bg="Background",
|
||||
bgspace="BG space",
|
||||
smo="Smoooth drop",
|
||||
@@ -281,14 +268,26 @@ Lib used:
|
||||
graphic="Graphic→",
|
||||
sfx="SFX",
|
||||
bgm="BGM",
|
||||
vib="VIB",
|
||||
voc="VOC",
|
||||
vib="Vibration",
|
||||
voc="Vocal",
|
||||
stereo="Stereo",
|
||||
back=BK,
|
||||
},
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
setting_skin={
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="R",
|
||||
prev2="↑",next2="↓",spin2="R",
|
||||
prev3="↑",next3="↓",spin3="R",
|
||||
prev4="↑",next4="↓",spin4="R",
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
reset="reset Dir",
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
default="Defaults",
|
||||
snap=function()return text.snapLevelName[sceneTemp.snap]end,
|
||||
|
||||
317
main.lua
@@ -10,10 +10,8 @@ local Timer=love.timer.getTime
|
||||
local int,rnd,max,min=math.floor,math.random,math.max,math.min
|
||||
local abs=math.abs
|
||||
local rem=table.remove
|
||||
|
||||
package.path="?.lua"--boost
|
||||
function NULL()end
|
||||
--Libs
|
||||
--LIBs
|
||||
-------------------------------------------------------------
|
||||
system=sys.getOS()
|
||||
local xOy=love.math.newTransform()
|
||||
@@ -28,7 +26,6 @@ scr={x=0,y=0,w=0,h=0,rad=0,k=1}--x,y,wid,hei,radius,scale K
|
||||
local scr=scr
|
||||
mapCam={
|
||||
sel=nil,--selected mode ID
|
||||
lastPlay=1,--last played mode ID
|
||||
|
||||
x=0,y=0,k=1,--camera pos/k
|
||||
x1=0,y1=0,k1=1,--camera pos/k shown
|
||||
@@ -40,8 +37,8 @@ mapCam={
|
||||
zoomK=nil,
|
||||
--for auto zooming when enter/leave scene
|
||||
}
|
||||
blockColor={}
|
||||
curBG="none"
|
||||
bgmPlaying=nil
|
||||
voiceQueue={free=0}
|
||||
texts={}
|
||||
widget_sel=nil--selected widget object
|
||||
@@ -58,14 +55,24 @@ ms.setVisible(false)
|
||||
-------------------------------------------------------------
|
||||
customSel={1,22,1,1,7,3,1,1,8,4,1,1,1}
|
||||
preField={h=20}
|
||||
for i=1,10 do preField[i]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}end
|
||||
for i=11,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
|
||||
freeRow={L=40}for i=1,40 do freeRow[i]={0,0,0,0,0,0,0,0,0,0}end
|
||||
for i=1,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
|
||||
blockSkin,blockSkinMini={},{}
|
||||
--Game system Vars
|
||||
-------------------------------------------------------------
|
||||
require("parts/list")
|
||||
space=require("parts/space")local space=space
|
||||
setFont=require("parts/font")
|
||||
setFont=require("parts/setfont")
|
||||
freeRow=require("parts/freeRow")
|
||||
blocks=require("parts/mino")
|
||||
VIB=require("parts/vib")
|
||||
SFX=require("parts/sfx")
|
||||
BGM=require("parts/bgm")
|
||||
require("parts/voice")
|
||||
|
||||
Event_task=require("parts/task")
|
||||
AITemplate=require("parts/AITemplate")
|
||||
require("parts/modes")
|
||||
skin=require("parts/skin")
|
||||
-- require("parts/light")
|
||||
-- require("parts/shader")
|
||||
scene=require("scene")
|
||||
@@ -74,12 +81,9 @@ require("class")
|
||||
require("ai")
|
||||
require("toolfunc")
|
||||
require("file")
|
||||
require("sound")
|
||||
require("text")
|
||||
require("list")
|
||||
require("player")
|
||||
Widget=require("widgetList")
|
||||
require("dataList")
|
||||
require("texture")
|
||||
local Tmr=require("timer")
|
||||
local Pnt=require("paint")
|
||||
@@ -251,7 +255,7 @@ function mouseClick.mode(x,y,k)
|
||||
local __=onMode(x,y)
|
||||
if _~=__ then
|
||||
if __ then
|
||||
SFX("click")
|
||||
SFX.play("click")
|
||||
cam.moving=true
|
||||
_=modes[__]
|
||||
cam.x=_.x*cam.k+180
|
||||
@@ -320,10 +324,11 @@ function keyDown.music(key)
|
||||
elseif key=="up"then
|
||||
sceneTemp=(sceneTemp-2)%#musicID+1
|
||||
elseif key=="return"or key=="space"then
|
||||
if bgmPlaying~=musicID[sceneTemp]then
|
||||
BGM(musicID[sceneTemp])
|
||||
if BGM.nowPlay~=musicID[sceneTemp]then
|
||||
SFX.play("click")
|
||||
BGM.play(musicID[sceneTemp])
|
||||
else
|
||||
BGM()
|
||||
BGM.stop()
|
||||
end
|
||||
elseif key=="escape"then
|
||||
scene.back()
|
||||
@@ -337,14 +342,14 @@ function keyDown.custom(key)
|
||||
if sel==12 then
|
||||
curBG=customRange.bg[customSel[12]]
|
||||
elseif sel==13 then
|
||||
BGM(customRange.bgm[customSel[13]])
|
||||
BGM.play(customRange.bgm[customSel[13]])
|
||||
end
|
||||
elseif key=="right"then
|
||||
customSel[sel]=customSel[sel]%#customRange[customID[sel]]+1
|
||||
if sel==12 then
|
||||
curBG=customRange.bg[customSel[sel]]
|
||||
elseif sel==13 then
|
||||
BGM(customRange.bgm[customSel[sel]])
|
||||
BGM.play(customRange.bgm[customSel[sel]])
|
||||
end
|
||||
elseif key=="down"then
|
||||
sceneTemp=sel%#customID+1
|
||||
@@ -451,12 +456,14 @@ function mouseDown.setting_sound(x,y,k)
|
||||
if t>1 then
|
||||
VOICE((t<1.5 or t>15)and"doubt"or rnd()<.8 and"happy"or"egg")
|
||||
sceneTemp.last=Timer()
|
||||
if rnd()<.26 then
|
||||
if rnd()<.0626 then
|
||||
for i=1,#modes do
|
||||
local M=modes[i]
|
||||
for i=1,#M.unlock do
|
||||
local m=M.unlock[i]
|
||||
modeRanks[m]=modes[m].score and(modeRanks[m]and max(modeRanks[m],0)or 0)or 6
|
||||
if not modeRanks[m]then
|
||||
modeRanks[m]=modes[m].score and 0 or 6
|
||||
end
|
||||
end
|
||||
end
|
||||
saveUnlock()
|
||||
@@ -474,45 +481,45 @@ function keyDown.setting_key(key)
|
||||
if key=="escape"then
|
||||
if s.kS then
|
||||
s.kS=false
|
||||
SFX("finesseError",.5)
|
||||
SFX.play("finesseError",.5)
|
||||
else
|
||||
scene.back()
|
||||
end
|
||||
elseif s.kS then
|
||||
for l=1,8 do
|
||||
for y=1,20 do
|
||||
if setting.keyMap[l][y]==key then
|
||||
setting.keyMap[l][y]=""
|
||||
if keyMap[l][y]==key then
|
||||
keyMap[l][y]=""
|
||||
goto L
|
||||
end
|
||||
end
|
||||
end
|
||||
::L::
|
||||
setting.keyMap[s.board][s.kb]=key
|
||||
SFX("reach",.5)
|
||||
keyMap[s.board][s.kb]=key
|
||||
SFX.play("reach",.5)
|
||||
s.kS=false
|
||||
elseif key=="return"then
|
||||
s.kS=true
|
||||
SFX("lock",.5)
|
||||
SFX.play("lock",.5)
|
||||
elseif key=="up"then
|
||||
if s.kb>1 then
|
||||
s.kb=s.kb-1
|
||||
SFX("move",.5)
|
||||
SFX.play("move",.5)
|
||||
end
|
||||
elseif key=="down"then
|
||||
if s.kb<20 then
|
||||
s.kb=s.kb+1
|
||||
SFX("move",.5)
|
||||
SFX.play("move",.5)
|
||||
end
|
||||
elseif key=="left"then
|
||||
if s.board>1 then
|
||||
s.board=s.board-1
|
||||
SFX("rotate",.5)
|
||||
SFX.play("rotate",.5)
|
||||
end
|
||||
elseif key=="right"then
|
||||
if s.board<8 then
|
||||
s.board=s.board+1
|
||||
SFX("rotate",.5)
|
||||
SFX.play("rotate",.5)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -521,45 +528,45 @@ function gamepadDown.setting_key(key)
|
||||
if key=="back"then
|
||||
if s.jS then
|
||||
s.jS=false
|
||||
SFX("finesseError",.5)
|
||||
SFX.play("finesseError",.5)
|
||||
else
|
||||
scene.back()
|
||||
end
|
||||
elseif s.jS then
|
||||
for l=9,16 do
|
||||
for y=1,20 do
|
||||
if setting.keyMap[l][y]==key then
|
||||
setting.keyMap[l][y]=""
|
||||
if keyMap[l][y]==key then
|
||||
keyMap[l][y]=""
|
||||
goto L
|
||||
end
|
||||
end
|
||||
end
|
||||
::L::
|
||||
setting.keyMap[8+s.board][s.js]=key
|
||||
SFX("reach",.5)
|
||||
keyMap[8+s.board][s.js]=key
|
||||
SFX.play("reach",.5)
|
||||
s.jS=false
|
||||
elseif key=="start"then
|
||||
s.jS=true
|
||||
SFX("lock",.5)
|
||||
SFX.play("lock",.5)
|
||||
elseif key=="dpup"then
|
||||
if s.js>1 then
|
||||
s.js=s.js-1
|
||||
SFX("move",.5)
|
||||
SFX.play("move",.5)
|
||||
end
|
||||
elseif key=="dpdown"then
|
||||
if s.js<20 then
|
||||
s.js=s.js+1
|
||||
SFX("move",.5)
|
||||
SFX.play("move",.5)
|
||||
end
|
||||
elseif key=="dpleft"then
|
||||
if s.board>1 then
|
||||
s.board=s.board-1
|
||||
SFX("rotate",.5)
|
||||
SFX.play("rotate",.5)
|
||||
end
|
||||
elseif key=="dpright"then
|
||||
if s.board<8 then
|
||||
s.board=s.board+1
|
||||
SFX("rotate",.5)
|
||||
SFX.play("rotate",.5)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -601,14 +608,17 @@ end
|
||||
function keyDown.pause(key)
|
||||
if key=="escape"then
|
||||
scene.back()
|
||||
elseif key=="return"or key=="space"then
|
||||
elseif key=="space"then
|
||||
resumeGame()
|
||||
elseif key=="r"and kb.isDown("lctrl","rctrl")then
|
||||
elseif key=="s"then
|
||||
scene.push()
|
||||
scene.swapTo("setting_sound")
|
||||
elseif key=="r"then
|
||||
clearTask("play")
|
||||
updateStat()
|
||||
resetGameData()
|
||||
scene.swapTo("play","none")
|
||||
end--Ctrl+R重开
|
||||
end
|
||||
end
|
||||
|
||||
function touchDown.play(id,x,y)
|
||||
@@ -616,6 +626,8 @@ function touchDown.play(id,x,y)
|
||||
local t=onVirtualkey(x,y)
|
||||
if t then
|
||||
players[1]:pressKey(t)
|
||||
virtualkeyDown[t]=true
|
||||
virtualkeyPressTime[t]=10
|
||||
if setting.VKTrack then
|
||||
local B=virtualkey[t]
|
||||
--按钮软碰撞(做不来hhh随便做一个,效果还行!)
|
||||
@@ -668,18 +680,22 @@ function keyDown.play(key)
|
||||
(frame<180 and back or pauseGame)()
|
||||
return
|
||||
end
|
||||
local m=setting.keyMap
|
||||
local m=keyMap
|
||||
for p=1,players.human do
|
||||
for k=1,20 do
|
||||
if key==m[2*p-1][k]or key==m[2*p][k]then
|
||||
players[p]:pressKey(k)
|
||||
if p==1 then
|
||||
virtualkeyDown[k]=true
|
||||
virtualkeyPressTime[k]=10
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function keyUp.play(key)
|
||||
local m=setting.keyMap
|
||||
local m=keyMap
|
||||
for p=1,players.human do
|
||||
for k=1,20 do
|
||||
if key==m[2*p-1][k]or key==m[2*p][k]then
|
||||
@@ -691,18 +707,22 @@ function keyUp.play(key)
|
||||
end
|
||||
function gamepadDown.play(key)
|
||||
if key=="back"then scene.back()return end
|
||||
local m=setting.keyMap
|
||||
local m=keyMap
|
||||
for p=1,players.human do
|
||||
for k=1,20 do
|
||||
if key==m[2*p+7][k]or key==m[2*p+8][k]then
|
||||
players[p]:pressKey(k)
|
||||
if p==1 then
|
||||
virtualkeyDown[k]=true
|
||||
virtualkeyPressTime[k]=10
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function gamepadUp.play(key)
|
||||
local m=setting.keyMap
|
||||
local m=keyMap
|
||||
for p=1,players.human do
|
||||
for k=1,20 do
|
||||
if key==m[2*p+7][k]or key==m[2*p+8][k]then
|
||||
@@ -730,11 +750,11 @@ local function widgetPress(W,x,y)
|
||||
if W.type=="button"then
|
||||
W.code()
|
||||
W:FX()
|
||||
SFX("button")
|
||||
SFX.play("button")
|
||||
VOICE("nya")
|
||||
elseif W.type=="switch"then
|
||||
W.code()
|
||||
SFX("move",.6)
|
||||
SFX.play("move",.6)
|
||||
elseif W.type=="slider"then
|
||||
if not x then return end
|
||||
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)
|
||||
@@ -921,8 +941,10 @@ function love.keypressed(i)
|
||||
if i=="k"then
|
||||
for i=1,8 do
|
||||
local P=players.alive[rnd(#players.alive)]
|
||||
P.lastRecv=players[1]
|
||||
Event.lose(P)
|
||||
if P~=players[1]then
|
||||
P.lastRecv=players[1]
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
--Test code here
|
||||
elseif i=="q"then
|
||||
@@ -930,6 +952,10 @@ function love.keypressed(i)
|
||||
if W then W:getInfo()end
|
||||
elseif i=="f3"then
|
||||
error("Techmino:挂了")
|
||||
elseif i=="e"then
|
||||
for k,v in next,_G do
|
||||
print(k,v)
|
||||
end
|
||||
elseif widget_sel then
|
||||
local W=widget_sel
|
||||
if i=="left"then W.x=W.x-10
|
||||
@@ -1031,9 +1057,9 @@ function love.resize(w,h)
|
||||
if setting.bgspace then space.new()end
|
||||
end
|
||||
function love.focus(f)
|
||||
if system~="Android" and not f and scene.cur=="play"then pauseGame()end
|
||||
if scene.cur=="play"and not f and setting.autoPause then pauseGame()end
|
||||
end
|
||||
function love.update(dt)
|
||||
local function love_update(dt)
|
||||
if setting.bgspace then space.update()end
|
||||
for i=#sysFX,1,-1 do
|
||||
local S=sysFX[i]
|
||||
@@ -1122,75 +1148,9 @@ function love.update(dt)
|
||||
W:update()
|
||||
end--更新控件
|
||||
end
|
||||
function love.errorhandler(msg)
|
||||
local PUMP,POLL=love.event.pump,love.event.poll
|
||||
love.mouse.setVisible(true)
|
||||
love.audio.stop()
|
||||
local err={"Error:"..msg}
|
||||
local trace=debug.traceback("",2)
|
||||
local c=2
|
||||
for l in string.gmatch(trace,"(.-)\n")do
|
||||
if c>2 then
|
||||
if not string.find(l,"boot")then
|
||||
err[c]=string.gsub(l,"^\t*","")
|
||||
c=c+1
|
||||
end
|
||||
else
|
||||
err[2]="Traceback"
|
||||
c=3
|
||||
end
|
||||
end
|
||||
print(table.concat(err,"\n"),1,c-2)
|
||||
-- err=err:gsub("%[string \"(.-)\"%]","%1")
|
||||
local CAP
|
||||
local function _(_)CAP=gc.newImage(_)end
|
||||
gc.captureScreenshot(_)
|
||||
local T=true
|
||||
return function()
|
||||
PUMP()
|
||||
for e,a,b in POLL()do
|
||||
if e=="quit"or a=="escape"then
|
||||
destroyPlayers()
|
||||
return 1
|
||||
elseif a=="return"or a=="start"then
|
||||
destroyPlayers()
|
||||
return"restart"
|
||||
elseif e=="resize"then
|
||||
love.resize(a,b)
|
||||
end
|
||||
end
|
||||
if T then
|
||||
if sfx.error then
|
||||
SFX("error",.8)
|
||||
end
|
||||
T=false
|
||||
else
|
||||
gc.discard()
|
||||
gc.clear(.3,.5,.9)
|
||||
gc.setColor(1,1,1)
|
||||
gc.push("transform")
|
||||
gc.replaceTransform(xOy)
|
||||
gc.draw(CAP,100,365,nil,512/CAP:getWidth(),288/CAP:getHeight())
|
||||
setFont(120)
|
||||
gc.print(":(",100,40)
|
||||
setFont(38)
|
||||
gc.printf(text.errorMsg,100,200,1280-100)
|
||||
setFont(20)
|
||||
gc.print(err[1],626,360)
|
||||
gc.print("TRACEBACK",626,410)
|
||||
for i=4,#err-2 do
|
||||
gc.print(err[i],626,355+20*i)
|
||||
end
|
||||
gc.pop()
|
||||
end
|
||||
gc.present()
|
||||
love.timer.sleep(.1)
|
||||
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
|
||||
function love.draw()
|
||||
local function love_draw()
|
||||
gc.discard()--SPEED UPUPUP!
|
||||
Pnt.BG[setting.bg and curBG or"grey"]()
|
||||
if setting.bgspace then
|
||||
@@ -1206,9 +1166,10 @@ function love.draw()
|
||||
end--Draw widgets
|
||||
if mouseShow then
|
||||
local r=Timer()*.5
|
||||
gc.setColor(1,1,1,min(1-math.abs(1-r%1*2),.3))
|
||||
r=int(r)%7+1
|
||||
gc.draw(miniBlock[r],mx,my,Timer()%3.1416*4,20,20,scs[2*r]-.5,#blocks[r][0]-scs[2*r-1]+.5)
|
||||
local R=int(r)%7+1
|
||||
local _=blockColor[R]
|
||||
gc.setColor(_[1],_[2],_[3],min(1-abs(1-r%1*2),.3))
|
||||
gc.draw(miniBlock[R],mx,my,Timer()%3.1416*4,20,20,scs[2*R]-.5,#blocks[R][0]-scs[2*R-1]+.5)
|
||||
gc.setColor(1,1,1,.5)gc.circle("fill",mx,my,5)
|
||||
gc.setColor(1,1,1)gc.circle("fill",mx,my,3)
|
||||
end--Awesome mouse!
|
||||
@@ -1249,12 +1210,14 @@ function love.draw()
|
||||
if devMode>0 then
|
||||
gc.setColor(1,1,devMode==2 and .6 or 1)
|
||||
gc.print("Cache used:"..gcinfo(),5,_-20)
|
||||
gc.print("Free Row:"..#freeRow.."/"..freeRow.L,5,_-40)
|
||||
gc.print("Free Row:"..freeRow.getCount(),5,_-40)
|
||||
gc.print("Mouse:"..mx.." "..my,5,_-60)
|
||||
gc.print("Voices:"..#voiceQueue,5,_-80)
|
||||
gc.print("Tasks:"..#Task,5,_-100)
|
||||
end--DEV info
|
||||
end
|
||||
love.draw,love.update=NULL,NULL
|
||||
|
||||
function love.run()
|
||||
local T=love.timer
|
||||
local sleep=T.sleep
|
||||
@@ -1276,19 +1239,19 @@ function love.run()
|
||||
end
|
||||
end
|
||||
T.step()
|
||||
love.update(T.getDelta())
|
||||
love_update(T.getDelta())
|
||||
if not mini()then
|
||||
readyDrawFrame=readyDrawFrame+setting.frameMul
|
||||
if readyDrawFrame>=100 then
|
||||
readyDrawFrame=readyDrawFrame-100
|
||||
love.draw()
|
||||
love_draw()
|
||||
gc.present()
|
||||
end
|
||||
end
|
||||
if Timer()-lastFrame<.058 then
|
||||
sleep(.01)
|
||||
end
|
||||
while Timer()-lastFrame<.0158 do
|
||||
while Timer()-lastFrame<.0159 do
|
||||
sleep(.001)
|
||||
end--try easily control 60FPS
|
||||
lastFrame=Timer()
|
||||
@@ -1298,38 +1261,74 @@ function love.run()
|
||||
end
|
||||
end
|
||||
end
|
||||
-------------------------------------------------------------
|
||||
local F=love.filesystem
|
||||
if F.getInfo("data")then
|
||||
F.write("data.dat",F.read("data"))
|
||||
F.remove("data")
|
||||
end
|
||||
if F.getInfo("userdata")then
|
||||
F.write("data.dat",F.read("userdata"))
|
||||
F.remove("userdata")
|
||||
function love.errorhandler(msg)
|
||||
local PUMP,POLL=love.event.pump,love.event.poll
|
||||
love.mouse.setVisible(true)
|
||||
love.audio.stop()
|
||||
local err={"Error:"..msg}
|
||||
local trace=debug.traceback("",2)
|
||||
local c=2
|
||||
for l in string.gmatch(trace,"(.-)\n")do
|
||||
if c>2 then
|
||||
if not string.find(l,"boot")then
|
||||
err[c]=string.gsub(l,"^\t*","")
|
||||
c=c+1
|
||||
end
|
||||
else
|
||||
err[2]="Traceback"
|
||||
c=3
|
||||
end
|
||||
end
|
||||
print(table.concat(err,"\n"),1,c-2)
|
||||
gc.reset()
|
||||
local CAP
|
||||
local function _(_)CAP=gc.newImage(_)end
|
||||
gc.captureScreenshot(_)
|
||||
gc.present()
|
||||
if SFX.list.error then SFX.play("error",.8)end
|
||||
local BGcolor=rnd()>.026 and{.3,.5,.9},{.62,.3,.926}
|
||||
local needDraw=true
|
||||
return function()
|
||||
PUMP()
|
||||
for E,a,b,c,d,e in POLL()do
|
||||
if E=="quit"or a=="escape"then
|
||||
destroyPlayers()
|
||||
return 1
|
||||
elseif E=="resize"then
|
||||
love.resize(a,b)
|
||||
needDraw=true
|
||||
elseif E=="focus"then
|
||||
needDraw=true
|
||||
end
|
||||
end
|
||||
if needDraw then
|
||||
gc.discard()
|
||||
gc.clear(BGcolor)
|
||||
gc.setColor(1,1,1)
|
||||
gc.push("transform")
|
||||
gc.replaceTransform(xOy)
|
||||
gc.draw(CAP,100,365,nil,512/CAP:getWidth(),288/CAP:getHeight())
|
||||
setFont(120)gc.print(":(",100,40)
|
||||
setFont(38)gc.printf(text.errorMsg,100,200,1280-100)
|
||||
setFont(20)
|
||||
gc.print(system.."-"..gameVersion,100,660)
|
||||
gc.printf(err[1],626,360,1260-626)
|
||||
gc.print("TRACEBACK",626,426)
|
||||
for i=4,#err-2 do
|
||||
gc.print(err[i],626,370+20*i)
|
||||
end
|
||||
gc.pop()
|
||||
gc.present()
|
||||
needDraw=false
|
||||
end
|
||||
love.timer.sleep(.2)
|
||||
end
|
||||
end
|
||||
if F.getInfo("setting")then
|
||||
F.write("setting.dat",F.read("setting"))
|
||||
F.remove("setting")
|
||||
-------------------------------------------------------------Reset data relied on setting
|
||||
for _=1,7 do
|
||||
blockColor[_]=skin.libColor[setting.skin[_]]
|
||||
end
|
||||
if F.getInfo("usersetting")then
|
||||
F.write("setting.dat",F.read("usersetting"))
|
||||
F.remove("usersetting")
|
||||
for _=8,17 do
|
||||
blockColor[_]=skin.libColor[_]
|
||||
end
|
||||
--NEW FILENAME!!!
|
||||
FILE={
|
||||
data=F.newFile("data.dat"),
|
||||
setting=F.newFile("setting.dat"),
|
||||
unlock=F.newFile("unlock.dat"),
|
||||
}
|
||||
if F.getInfo("unlock.dat")then loadUnlock()end
|
||||
if F.getInfo("data.dat")then loadStat()end
|
||||
if F.getInfo("setting.dat")then
|
||||
loadSetting()
|
||||
elseif system=="Android"or system=="iOS" then
|
||||
setting.swap=false
|
||||
setting.VKSwitch=true
|
||||
setting.vib=3
|
||||
end
|
||||
changeLanguage(setting.lang)
|
||||
changeBlockSkin(setting.skin)
|
||||
changeLanguage(setting.lang)
|
||||
21
modes/GM.lua
@@ -3,7 +3,7 @@ local sectionName={"M7","M8","M9","M","MK","MV","MO","MM","GM"}
|
||||
local function score(P)
|
||||
local F=false
|
||||
if P.modeData.point<70 then--if Less then MM
|
||||
local R=#P.cleared
|
||||
local R=#P.clearedRow
|
||||
if R==0 then return end
|
||||
if R==4 then R=10 end
|
||||
P.modeData.point=P.modeData.point+R
|
||||
@@ -29,9 +29,11 @@ return{
|
||||
},
|
||||
color=color.lightBlue,
|
||||
env={
|
||||
noFly=true,
|
||||
minarr=1,
|
||||
_20G=true,
|
||||
drop=0,lock=15,
|
||||
wait=10,fall=15,
|
||||
wait=15,fall=6,
|
||||
next=3,
|
||||
visible="fast",
|
||||
freshLimit=15,
|
||||
@@ -40,10 +42,9 @@ return{
|
||||
if P.stat.time>=53.5 then
|
||||
P.modeData.point=min(P.modeData.point+16,80)
|
||||
P.modeData.event=sectionName[int(P.modeData.point*.1)+1]
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
end,
|
||||
minarr=1,
|
||||
bg="game3",bgm="shining terminal",
|
||||
},
|
||||
slowMark=true,
|
||||
@@ -52,14 +53,14 @@ return{
|
||||
players[1].modeData.event="M7"
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.grade,-82,170)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
mDraw(drawableText.grade,-81,170)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,-82,110)
|
||||
mStr(P.modeData.event,-81,110)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
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,
|
||||
|
||||
@@ -22,7 +22,7 @@ return{
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
if P.atkBuffer.sum==0 then
|
||||
local p=#P.atkBuffer+1
|
||||
local B,D=P.atkBuffer,P.modeData
|
||||
@@ -58,10 +58,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,-82,200)
|
||||
mStr("24",-82,320)
|
||||
mDraw(drawableText.wave,-82,260)
|
||||
mDraw(drawableText.nextWave,-82,380)
|
||||
mStr(P.modeData.event,-81,200)
|
||||
mStr("24",-81,320)
|
||||
mDraw(drawableText.wave,-81,260)
|
||||
mDraw(drawableText.nextWave,-81,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -21,7 +21,7 @@ return{
|
||||
fall=8,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
if P.atkBuffer.sum<2 then
|
||||
local p=#P.atkBuffer+1
|
||||
local B,D=P.atkBuffer,P.modeData
|
||||
@@ -67,14 +67,14 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,-82,200)
|
||||
mStr(P.modeData.event,-81,200)
|
||||
mStr(
|
||||
P.modeData.event<10 and 22
|
||||
or P.modeData.event<20 and 25
|
||||
or 28
|
||||
,-82,320)
|
||||
mDraw(drawableText.wave,-82,260)
|
||||
mDraw(drawableText.nextWave,-82,380)
|
||||
,-81,320)
|
||||
mDraw(drawableText.wave,-81,260)
|
||||
mDraw(drawableText.nextWave,-81,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -18,15 +18,15 @@ return{
|
||||
"EASY",
|
||||
},
|
||||
info={
|
||||
"All-spin 入门教程",
|
||||
"All-spin 入门教程",
|
||||
"All-spin Tutorial!",
|
||||
"All-spin 入门教程\n未制作完成,下块即通",
|
||||
"All-spin 入门教程\n未制作完成,下块即通",
|
||||
"All-spin Tutorial!\nUNFINISHED,drop to win",
|
||||
},
|
||||
color=color.lightGrey,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
hold=false,
|
||||
dropPiece=Event.lose,
|
||||
dropPiece=player.lose,
|
||||
task=nil,
|
||||
bg="game1",bgm="newera",
|
||||
},
|
||||
@@ -35,11 +35,6 @@ return{
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(50)
|
||||
for i=1,10 do
|
||||
mStr("UNFINISHED",-126+35*i,60*i-110)
|
||||
mStr("UNFINISHED",626-60*i,60*i-90)
|
||||
end
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.extraRate}end,
|
||||
scoreDisp=function(D)return D[1].."Stage "..format("%.2f",D[2]).."%"end,
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
env={
|
||||
drop=30,lock=45,
|
||||
visible="time",
|
||||
dropPiece=Event.reach_winCheck,
|
||||
dropPiece=player.reach_winCheck,
|
||||
freshLimit=10,
|
||||
target=200,
|
||||
bg="glow",bgm="newera",
|
||||
@@ -29,11 +29,11 @@ return{
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
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,
|
||||
|
||||
@@ -21,7 +21,7 @@ return{
|
||||
fall=10,lock=60,
|
||||
center=false,
|
||||
visible="none",
|
||||
dropPiece=Event.reach_winCheck,
|
||||
dropPiece=player.reach_winCheck,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
bg="rgb",bgm="secret7th",
|
||||
@@ -31,11 +31,11 @@ return{
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
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,
|
||||
|
||||
@@ -21,7 +21,7 @@ return{
|
||||
fall=5,
|
||||
center=false,ghost=false,
|
||||
visible="none",
|
||||
dropPiece=Event.reach_winCheck,
|
||||
dropPiece=player.reach_winCheck,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
bg="rgb",bgm="secret8th",
|
||||
@@ -31,11 +31,11 @@ return{
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
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,
|
||||
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
drop=15,lock=45,
|
||||
freshLimit=10,
|
||||
visible="fast",
|
||||
dropPiece=Event.reach_winCheck,
|
||||
dropPiece=player.reach_winCheck,
|
||||
freshLimit=10,
|
||||
target=200,
|
||||
bg="glow",bgm="reason",
|
||||
@@ -30,11 +30,11 @@ return{
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
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,
|
||||
|
||||
@@ -22,7 +22,7 @@ return{
|
||||
block=false,
|
||||
center=false,ghost=false,
|
||||
visible="none",
|
||||
dropPiece=Event.reach_winCheck,
|
||||
dropPiece=player.reach_winCheck,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
bg="rgb",bgm="secret7th",
|
||||
@@ -32,11 +32,11 @@ return{
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
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,
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
local rnd,min=math.random,math.min
|
||||
local function check_c4w(P)
|
||||
for i=1,#P.cleared do
|
||||
P.field[#P.field+1]=getNewRow(10)
|
||||
P.visTime[#P.visTime+1]=getNewRow(20)
|
||||
for i=1,#P.clearedRow do
|
||||
P.field[#P.field+1]=freeRow.get(10)
|
||||
P.visTime[#P.visTime+1]=freeRow.get(20)
|
||||
for i=4,7 do P.field[#P.field][i]=0 end
|
||||
end
|
||||
if #P.cleared==0 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow==0 then
|
||||
P:lose()
|
||||
else
|
||||
if P.combo>P.modeData.point then
|
||||
P.modeData.point=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -21,7 +21,7 @@ return{
|
||||
name={
|
||||
"C4W练习",
|
||||
"中四宽练习",
|
||||
"C4W Train",
|
||||
"C4W Training",
|
||||
},
|
||||
level={
|
||||
"疯狂",
|
||||
@@ -38,7 +38,7 @@ return{
|
||||
drop=5,lock=30,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg="rgb",bgm="chlorine",
|
||||
bg="rgb",bgm="oxygen",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
@@ -46,8 +46,8 @@ return{
|
||||
local P=players[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
F[i]=getNewRow(10)
|
||||
P.visTime[i]=getNewRow(20)
|
||||
F[i]=freeRow.get(10)
|
||||
P.visTime[i]=freeRow.get(20)
|
||||
for x=4,7 do F[i][x]=0 end
|
||||
end
|
||||
local r=rnd(6)
|
||||
@@ -61,12 +61,12 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.combo,-82,310)
|
||||
mStr(P.modeData.point,-82,400)
|
||||
mDraw(drawableText.combo,-82,358)
|
||||
mDraw(drawableText.mxcmb,-82,450)
|
||||
mStr(P.combo,-81,310)
|
||||
mStr(P.modeData.point,-81,400)
|
||||
mDraw(drawableText.combo,-81,358)
|
||||
mDraw(drawableText.mxcmb,-81,450)
|
||||
end,
|
||||
score=function(P)return{min(P.combo,100),P.stat.time}end,
|
||||
score=function(P)return{min(P.modeData.point,100),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Combo "..toTime(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
local rnd,min=math.random,math.min
|
||||
local function check_c4w(P)
|
||||
for i=1,#P.cleared do
|
||||
P.field[#P.field+1]=getNewRow(10)
|
||||
P.visTime[#P.visTime+1]=getNewRow(20)
|
||||
for i=1,#P.clearedRow do
|
||||
P.field[#P.field+1]=freeRow.get(10)
|
||||
P.visTime[#P.visTime+1]=freeRow.get(20)
|
||||
for i=4,7 do P.field[#P.field][i]=0 end
|
||||
end
|
||||
if #P.cleared>0 then
|
||||
if #P.clearedRow>0 then
|
||||
if P.combo>P.modeData.point then
|
||||
P.modeData.point=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
name={
|
||||
"C4W练习",
|
||||
"中四宽练习",
|
||||
"C4W Train",
|
||||
"C4W Training",
|
||||
},
|
||||
level={
|
||||
"普通",
|
||||
@@ -36,7 +36,7 @@ return{
|
||||
drop=30,lock=60,oncehold=false,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg="rgb",bgm="chlorine",
|
||||
bg="rgb",bgm="oxygen",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
@@ -44,8 +44,8 @@ return{
|
||||
local P=players[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
F[i]=getNewRow(10)
|
||||
P.visTime[i]=getNewRow(20)
|
||||
F[i]=freeRow.get(10)
|
||||
P.visTime[i]=freeRow.get(20)
|
||||
for x=4,7 do F[i][x]=0 end
|
||||
end
|
||||
local r=rnd(6)
|
||||
@@ -59,10 +59,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.combo,-82,310)
|
||||
mStr(P.modeData.point,-82,400)
|
||||
mDraw(drawableText.combo,-82,358)
|
||||
mDraw(drawableText.mxcmb,-82,450)
|
||||
mStr(P.combo,-81,310)
|
||||
mStr(P.modeData.point,-81,400)
|
||||
mDraw(drawableText.combo,-81,358)
|
||||
mDraw(drawableText.mxcmb,-81,450)
|
||||
end,
|
||||
score=function(P)return{min(P.modeData.point,100),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Combo "..toTime(D[2])end,
|
||||
|
||||
@@ -8,7 +8,7 @@ local function check_LVup(P)
|
||||
P.gameEnv.drop,P.gameEnv.lock=1,1
|
||||
end
|
||||
if P.gameEnv.target>100 then
|
||||
SFX("reach")
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -31,6 +31,7 @@ return{
|
||||
},
|
||||
color=color.lightBlue,
|
||||
env={
|
||||
noFly=true,
|
||||
das=16,arr=6,sddas=2,sdarr=2,
|
||||
ghost=false,center=false,
|
||||
drop=3,lock=3,wait=10,fall=25,
|
||||
@@ -40,7 +41,6 @@ return{
|
||||
target=10,dropPiece=check_LVup,
|
||||
bg="rgb",bgm="rockblock",
|
||||
},
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
@@ -48,16 +48,16 @@ return{
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(75)
|
||||
local r=P.gameEnv.target*.1
|
||||
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)
|
||||
mDraw(drawableText.speedLV,-82,290)
|
||||
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),-81,210)
|
||||
mDraw(drawableText.speedLV,-81,290)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,-82,320)
|
||||
mStr(P.gameEnv.target,-82,370)
|
||||
mStr(P.stat.row,-81,320)
|
||||
mStr(P.gameEnv.target,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.stat.row,P.stat.score}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..D[2]end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]end,
|
||||
score=function(P)return{P.stat.score,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." "..D[2].." Lines"end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
|
||||
@@ -18,7 +18,7 @@ return{
|
||||
},
|
||||
color=color.white,
|
||||
env={
|
||||
dropPiece=Event.reach_winCheck,
|
||||
dropPiece=player.reach_winCheck,
|
||||
},
|
||||
load=function()
|
||||
for i=1,#customID do
|
||||
@@ -50,8 +50,8 @@ return{
|
||||
for _,P in next,players.alive do
|
||||
local t=P.showTime*3
|
||||
for y=1,preField.h do
|
||||
P.field[y]=getNewRow(0)
|
||||
P.visTime[y]=getNewRow(t)
|
||||
P.field[y]=freeRow.get(0)
|
||||
P.visTime[y]=freeRow.get(t)
|
||||
for x=1,10 do P.field[y][x]=preField[y][x]end
|
||||
end
|
||||
end
|
||||
@@ -61,11 +61,11 @@ return{
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
if P.gameEnv.puzzle or P.gameEnv.target>1e10 then
|
||||
mStr(P.stat.row,-82,225)
|
||||
mDraw(drawableText.line,-82,290)
|
||||
mStr(P.stat.row,-81,225)
|
||||
mDraw(drawableText.line,-81,290)
|
||||
else
|
||||
local R=P.gameEnv.target-P.stat.row
|
||||
mStr(R>=0 and R or 0,-82,240)
|
||||
mStr(R>=0 and R or 0,-81,240)
|
||||
end
|
||||
if P.gameEnv.puzzle and P.modeData.event==0 then
|
||||
local m=puzzleMark
|
||||
|
||||
@@ -14,7 +14,7 @@ local function puzzleCheck(P)
|
||||
end
|
||||
end
|
||||
P.modeData.event=1
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
|
||||
return{
|
||||
@@ -73,8 +73,8 @@ return{
|
||||
mesDisp=function(P)
|
||||
local dx,dy=P.fieldOff.x,P.fieldOff.y
|
||||
setFont(55)
|
||||
mStr(P.stat.row,-82,225)
|
||||
mDraw(drawableText.line,-82,290)
|
||||
mStr(P.stat.row,-81,225)
|
||||
mDraw(drawableText.line,-81,290)
|
||||
if P.gameEnv.puzzle and P.modeData.event==0 then
|
||||
local m=puzzleMark
|
||||
for y=1,preField.h do for x=1,10 do
|
||||
|
||||
@@ -22,7 +22,7 @@ return{
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
local t=240-2*P.modeData.event
|
||||
if P.modeData.counter>=t then
|
||||
@@ -59,10 +59,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,-82,200)
|
||||
mStr(P.modeData.point,-82,320)
|
||||
mDraw(drawableText.wave,-82,260)
|
||||
mDraw(drawableText.rpm,-82,380)
|
||||
mStr(P.modeData.event,-81,200)
|
||||
mStr(P.modeData.point,-81,320)
|
||||
mDraw(drawableText.wave,-81,260)
|
||||
mDraw(drawableText.rpm,-81,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
@@ -75,6 +75,6 @@ return{
|
||||
W>=55 and 3 or
|
||||
W>=30 and 2 or
|
||||
W>=20 and 1 or
|
||||
L>=5 and 0
|
||||
W>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -22,7 +22,7 @@ return{
|
||||
freshLimit=15,
|
||||
pushSpeed=1,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
local t=360-P.modeData.event*2
|
||||
if P.modeData.counter>=t then
|
||||
@@ -59,10 +59,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,-82,200)
|
||||
mStr(P.modeData.point,-82,320)
|
||||
mDraw(drawableText.wave,-82,260)
|
||||
mDraw(drawableText.rpm,-82,380)
|
||||
mStr(P.modeData.event,-81,200)
|
||||
mStr(P.modeData.point,-81,320)
|
||||
mDraw(drawableText.wave,-81,260)
|
||||
mDraw(drawableText.rpm,-81,380)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
@@ -75,6 +75,6 @@ return{
|
||||
W>=70 and 3 or
|
||||
W>=40 and 2 or
|
||||
W>=10 and 1 or
|
||||
L>=3 and 0
|
||||
W>=3 and 0
|
||||
end,
|
||||
}
|
||||
@@ -21,12 +21,13 @@ return{
|
||||
fall=20,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(90,180-P.modeData.event)then
|
||||
P.modeData.counter=0
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
local D=P.modeData
|
||||
D.counter=D.counter+1
|
||||
if D.counter>=max(90,180-D.event)then
|
||||
P:garbageRise(10,1,rnd(10))
|
||||
P.modeData.event=P.modeData.event+1
|
||||
D.counter=0
|
||||
D.event=D.event+1
|
||||
end
|
||||
end,
|
||||
bg="game2",bgm="push",
|
||||
@@ -37,8 +38,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-82,310)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
|
||||
|
||||
@@ -20,12 +20,13 @@ return{
|
||||
drop=10,lock=30,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(45,80-.3*P.modeData.event)then
|
||||
P.modeData.counter=0
|
||||
P:garbageRise(11+P.modeData.event%3,1,rnd(10))
|
||||
P.modeData.event=P.modeData.event+1
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
local D=P.modeData
|
||||
D.counter=D.counter+1
|
||||
if D.counter>=max(30,80-.3*D.event)then
|
||||
P:garbageRise(11+D.event%3,1,rnd(10))
|
||||
D.counter=0
|
||||
D.event=D.event+1
|
||||
end
|
||||
end,
|
||||
bg="game2",bgm="secret7th",
|
||||
@@ -36,8 +37,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-82,310)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.row}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
|
||||
@@ -45,8 +46,8 @@ return{
|
||||
getRank=function(P)
|
||||
local W=P.modeData.event
|
||||
return
|
||||
W>=120 and 5 or
|
||||
W>=100 and 4 or
|
||||
W>=150 and 5 or
|
||||
W>=110 and 4 or
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1 or
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
sequence="drought2",
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
ospin=false,
|
||||
freshLimit=15,
|
||||
bg="glow",bgm="reason",
|
||||
@@ -31,7 +31,7 @@ return{
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(70)
|
||||
local R=100-P.stat.row
|
||||
mStr(R>=0 and R or 0,-82,280)
|
||||
mStr(R>=0 and R or 0,-81,280)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
sequence="drought1",
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
ospin=false,
|
||||
freshLimit=15,
|
||||
bg="glow",bgm="reason",
|
||||
@@ -31,7 +31,7 @@ return{
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(70)
|
||||
local R=100-P.stat.row
|
||||
mStr(R>=0 and R or 0,-82,280)
|
||||
mStr(R>=0 and R or 0,-81,280)
|
||||
end,
|
||||
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -6,9 +6,9 @@ return{
|
||||
"Infinite",
|
||||
},
|
||||
level={
|
||||
"时间杀手 II",
|
||||
"时间杀手 II",
|
||||
"Time Killer II",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
},
|
||||
info={
|
||||
"沙盒",
|
||||
@@ -26,10 +26,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,370)
|
||||
mDraw(drawableText.atk,-82,313)
|
||||
mDraw(drawableText.eff,-82,425)
|
||||
mStr(P.stat.atk,-81,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,370)
|
||||
mDraw(drawableText.atk,-81,313)
|
||||
mDraw(drawableText.eff,-81,425)
|
||||
end,
|
||||
score=function(P)return{P.stat.score}end,
|
||||
scoreDisp=function(D)return tostring(D[1])end,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local format,rnd=string.format,math.random
|
||||
local function check_rise(P)
|
||||
local L=P.cleared
|
||||
local L=P.clearedRow
|
||||
for i=1,#L do
|
||||
if L[i]<6 then
|
||||
P:garbageRise(10,1,rnd(10))
|
||||
@@ -16,9 +16,9 @@ return{
|
||||
"Infinite:dig",
|
||||
},
|
||||
level={
|
||||
"时间杀手 III",
|
||||
"时间杀手 III",
|
||||
"Time Killer III",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
},
|
||||
info={
|
||||
"挖呀挖呀挖",
|
||||
@@ -41,12 +41,12 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.modeData.point,-82,190)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.line,-82,243)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.modeData.point,-81,190)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.line,-81,243)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point}end,
|
||||
scoreDisp=function(D)return D[1].." Lines"end,
|
||||
|
||||
@@ -9,7 +9,7 @@ local function check(P)
|
||||
P.gameEnv._20G=true
|
||||
P.gameEnv.target=200
|
||||
else
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -26,15 +26,16 @@ return{
|
||||
"HARD",
|
||||
},
|
||||
info={
|
||||
"200行20G马拉松",
|
||||
"200行20G马拉松",
|
||||
"200L marathon in 20G",
|
||||
"200行高速马拉松",
|
||||
"200行高速马拉松",
|
||||
"200L marathon in high speed",
|
||||
},
|
||||
color=color.magenta,
|
||||
env={
|
||||
noFly=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
drop=.5,fall=30,
|
||||
target=50,dropPiece=check,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
bg="strap",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
@@ -44,8 +45,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,-82,320)
|
||||
mStr(P.gameEnv.target,-82,370)
|
||||
mStr(P.stat.row,-81,320)
|
||||
mStr(P.gameEnv.target,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
|
||||
@@ -4,11 +4,11 @@ local function check_LVup(P)
|
||||
local T=P.modeData.point+10
|
||||
if P.stat.row>=T then
|
||||
if T==200 then
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
else
|
||||
P.gameEnv.drop=dropSpeed[T/10]
|
||||
P.modeData.point=T
|
||||
SFX("reach")
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -25,16 +25,17 @@ return{
|
||||
"NORMAL",
|
||||
},
|
||||
info={
|
||||
"200行变速马拉松",
|
||||
"200行变速马拉松",
|
||||
"200行加速马拉松",
|
||||
"200行加速马拉松",
|
||||
"200L marathon with acceleration",
|
||||
},
|
||||
color=color.green,
|
||||
env={
|
||||
noFly=true,
|
||||
minsdarr=1,
|
||||
fall=30,
|
||||
target=10,dropPiece=check_LVup,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
minsdarr=1,
|
||||
bg="strap",bgm="way",
|
||||
},
|
||||
pauseLimit=true,
|
||||
@@ -44,8 +45,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,-82,320)
|
||||
mStr(P.modeData.point+10,-82,370)
|
||||
mStr(P.stat.row,-81,320)
|
||||
mStr(P.modeData.point+10,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
|
||||
@@ -4,7 +4,7 @@ local death_lock={12,11,10,9,8}
|
||||
local death_wait={10,9,8,7,6}
|
||||
local death_fall={10,9,8,7,6}
|
||||
local function score(P)
|
||||
local c=#P.cleared
|
||||
local c=#P.clearedRow
|
||||
if c==0 and P.modeData.point%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
@@ -12,7 +12,7 @@ local function score(P)
|
||||
end
|
||||
P.modeData.point=P.modeData.point+s
|
||||
if P.modeData.point%100==99 then
|
||||
SFX("blip_1")
|
||||
SFX.play("blip_1")
|
||||
elseif P.modeData.point>=100*(P.modeData.event+1)then
|
||||
local s=P.modeData.event+1;P.modeData.event=s--level up!
|
||||
local E=P.gameEnv
|
||||
@@ -24,11 +24,11 @@ local function score(P)
|
||||
if s==3 then P.gameEnv.bone=true end
|
||||
if s==5 then
|
||||
P.modeData.point,P.modeData.event=500,4
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
else
|
||||
P:showText(text.stage(s),0,-120,80,"fly")
|
||||
end
|
||||
SFX("reach")
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -44,18 +44,19 @@ return{
|
||||
"ULTIMATE",
|
||||
},
|
||||
info={
|
||||
"进阶20G",
|
||||
"进阶20G",
|
||||
"Advanced 20G",
|
||||
"20G:上级者的挑战",
|
||||
"20G:上级者的挑战",
|
||||
"20G:For Pro",
|
||||
},
|
||||
color=color.red,
|
||||
env={
|
||||
noFly=true,
|
||||
mindas=6,minarr=1,
|
||||
_20G=true,
|
||||
lock=death_lock[1],
|
||||
wait=death_wait[1],
|
||||
fall=death_fall[1],
|
||||
dropPiece=score,
|
||||
mindas=6,minarr=1,
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="secret7th",
|
||||
},
|
||||
@@ -65,8 +66,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.modeData.point,-82,320)
|
||||
mStr((P.modeData.event+1)*100,-82,370)
|
||||
mStr(P.modeData.point,-81,320)
|
||||
mStr((P.modeData.event+1)*100,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point,P.stat.row,P.stat.time}end,
|
||||
@@ -75,9 +76,9 @@ return{
|
||||
return a[1]>b[1]or(a[1]==b[1]and(a[2]<b[2]or a[2]==b[2]and a[3]<b[3]))
|
||||
end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.techrash
|
||||
local S=P.modeData.point
|
||||
if S==500 then
|
||||
local L=P.stat.clear_4
|
||||
return
|
||||
L>=30 and 5 or
|
||||
L>=25 and 4 or
|
||||
|
||||
@@ -3,7 +3,7 @@ local rush_lock={20,18,16,15,14}
|
||||
local rush_wait={12,10,9,8,7}
|
||||
local rush_fall={18,16,14,13,12}
|
||||
local function score(P)
|
||||
local c=#P.cleared
|
||||
local c=#P.clearedRow
|
||||
if c==0 and P.modeData.point%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
@@ -11,7 +11,7 @@ local function score(P)
|
||||
end
|
||||
P.modeData.point=P.modeData.point+s
|
||||
if P.modeData.point%100==99 then
|
||||
SFX("blip_1")
|
||||
SFX.play("blip_1")
|
||||
elseif P.modeData.point>=100*(P.modeData.event+1)then
|
||||
local s=P.modeData.event+1;P.modeData.event=s--level up!
|
||||
local E=P.gameEnv
|
||||
@@ -28,11 +28,11 @@ local function score(P)
|
||||
|
||||
if s==5 then
|
||||
P.modeData.point,P.modeData.event=500,4
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
else
|
||||
P:showText(text.stage(s),0,-120,80,"fly")
|
||||
end
|
||||
SFX("reach")
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -48,18 +48,19 @@ return{
|
||||
"LUNATIC",
|
||||
},
|
||||
info={
|
||||
"初心20G",
|
||||
"初心20G",
|
||||
"Beginner 20G",
|
||||
"20G:初心者适用",
|
||||
"20G:初心者适用",
|
||||
"20G:Back to beginner",
|
||||
},
|
||||
color=color.red,
|
||||
env={
|
||||
noFly=true,
|
||||
das=9,arr=3,
|
||||
_20G=true,
|
||||
lock=rush_lock[1],
|
||||
wait=rush_wait[1],
|
||||
fall=rush_fall[1],
|
||||
dropPiece=score,
|
||||
das=9,arr=3,
|
||||
freshLimit=15,
|
||||
bg="strap",bgm="secret8th",
|
||||
},
|
||||
@@ -69,8 +70,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.modeData.point,-82,320)
|
||||
mStr((P.modeData.event+1)*100,-82,370)
|
||||
mStr(P.modeData.point,-81,320)
|
||||
mStr((P.modeData.event+1)*100,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point,P.stat.row,P.stat.time}end,
|
||||
@@ -79,9 +80,9 @@ return{
|
||||
return a[1]>b[1]or(a[1]==b[1]and(a[2]<b[2]or a[2]==b[2]and a[3]<b[3]))
|
||||
end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.techrash
|
||||
local S=P.modeData.point
|
||||
if S==500 then
|
||||
local L=P.stat.clear_4
|
||||
return
|
||||
L>=30 and 5 or
|
||||
L>=25 and 4 or
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local gc=love.graphics
|
||||
local int=math.floor
|
||||
local function score(P)
|
||||
local c=#P.cleared
|
||||
local c=#P.clearedRow
|
||||
if c==0 and P.modeData.point%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
@@ -9,7 +9,7 @@ local function score(P)
|
||||
end
|
||||
local MD=P.modeData
|
||||
MD.point=MD.point+s
|
||||
if MD.point%100==99 then SFX("blip_1")end
|
||||
if MD.point%100==99 then SFX.play("blip_1")end
|
||||
if int(MD.point*.01)>MD.event then
|
||||
local s=MD.event+1;MD.event=s--level up!
|
||||
P:showText(text.stage(s),0,-120,80,"fly")
|
||||
@@ -27,9 +27,9 @@ local function score(P)
|
||||
end
|
||||
else
|
||||
MD.point,MD.event=1000,9
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
SFX("reach")
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -45,19 +45,20 @@ return{
|
||||
"FINAL",
|
||||
},
|
||||
info={
|
||||
"究极20G:无法到达的终点",
|
||||
"究极20G:无法到达的终点",
|
||||
"究极20G:无法触及的终点",
|
||||
"究极20G:无法触及的终点",
|
||||
"Extreme 20G:Unreachable destination",
|
||||
},
|
||||
color=color.lightGrey,
|
||||
env={
|
||||
noFly=true,
|
||||
mindas=5,minarr=1,
|
||||
_20G=true,lock=12,
|
||||
wait=10,fall=10,
|
||||
dropPiece=score,
|
||||
mindas=5,minarr=1,
|
||||
freshLimit=15,
|
||||
easyFresh=false,bone=true,
|
||||
bg="none",bgm="shining terminal",
|
||||
bg="none",bgm="distortion",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
@@ -66,8 +67,8 @@ return{
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
local MD=P.modeData
|
||||
mStr(MD.point,-82,320)
|
||||
mStr((MD.event+1)*100,-82,370)
|
||||
mStr(MD.point,-81,320)
|
||||
mStr((MD.event+1)*100,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point,P.stat.time}end,
|
||||
@@ -81,6 +82,6 @@ return{
|
||||
S>=600 and 3 or
|
||||
S>=400 and 2 or
|
||||
S>=200 and 1 or
|
||||
L>=50 and 0
|
||||
S>=50 and 0
|
||||
end,
|
||||
}
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
env={
|
||||
drop=60,lock=120,
|
||||
fall=10,
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
freshLimit=15,
|
||||
ospin=false,
|
||||
bg="rgb",bgm="infinite",
|
||||
@@ -31,11 +31,11 @@ return{
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
local R=100-P.stat.row
|
||||
mStr(R>=0 and R or 0,-82,250)
|
||||
mStr(R>=0 and R or 0,-81,250)
|
||||
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,-82,350)
|
||||
mDraw(drawableText.pc,-82,432)
|
||||
mStr(P.stat.pc,-81,350)
|
||||
mDraw(drawableText.pc,-81,432)
|
||||
|
||||
gc.setColor(.5,.5,.5)
|
||||
if frame>179 then
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
fall=20,
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
freshLimit=15,
|
||||
ospin=false,
|
||||
bg="rgb",bgm="infinite",
|
||||
@@ -31,11 +31,11 @@ return{
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
local R=100-P.stat.row
|
||||
mStr(R>=0 and R or 0,-82,250)
|
||||
mStr(R>=0 and R or 0,-81,250)
|
||||
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,-82,350)
|
||||
mDraw(drawableText.pc,-82,432)
|
||||
mStr(P.stat.pc,-81,350)
|
||||
mDraw(drawableText.pc,-81,432)
|
||||
|
||||
gc.setColor(.5,.5,.5)
|
||||
if frame>179 then
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
env={
|
||||
oncehold=false,
|
||||
drop=300,lock=1e99,
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
ospin=false,
|
||||
bg="rgb",bgm="newera",
|
||||
},
|
||||
@@ -30,11 +30,11 @@ return{
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
local R=100-P.stat.row
|
||||
mStr(R>=0 and R or 0,-82,250)
|
||||
mStr(R>=0 and R or 0,-81,250)
|
||||
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,-82,350)
|
||||
mDraw(drawableText.pc,-82,432)
|
||||
mStr(P.stat.pc,-81,350)
|
||||
mDraw(drawableText.pc,-81,432)
|
||||
|
||||
gc.setColor(.5,.5,.5)
|
||||
if frame>179 then
|
||||
|
||||
@@ -10,12 +10,12 @@ local function task_PC(P)
|
||||
if P.modeData.counter==21 then
|
||||
local t=P.stat.pc%2
|
||||
for i=1,4 do
|
||||
local r=getNewRow(0)
|
||||
local r=freeRow.get(0)
|
||||
for j=1,10 do
|
||||
r[j]=PCbase[4*t+i][j]
|
||||
end
|
||||
ins(P.field,1,r)
|
||||
ins(P.visTime,1,getNewRow(20))
|
||||
ins(P.visTime,1,freeRow.get(20))
|
||||
end
|
||||
P.fieldBeneath=P.fieldBeneath+120
|
||||
P.curY=P.curY+4
|
||||
@@ -30,7 +30,7 @@ local function newPC(P)
|
||||
local c=0
|
||||
for i=1,10 do if r[i]>0 then c=c+1 end end
|
||||
if c<5 then
|
||||
Event.lose(P)
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
if P.stat.piece%4==0 and #P.field==0 then
|
||||
@@ -66,7 +66,7 @@ return{
|
||||
name={
|
||||
"全清训练",
|
||||
"全清训练",
|
||||
"PC Train",
|
||||
"PC Training",
|
||||
},
|
||||
level={
|
||||
"疯狂",
|
||||
@@ -88,7 +88,7 @@ return{
|
||||
freshLimit=15,
|
||||
dropPiece=newPC,
|
||||
ospin=false,
|
||||
bg="rgb",bgm="chlorine",
|
||||
bg="rgb",bgm="oxygen",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
@@ -97,8 +97,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,-82,330)
|
||||
mDraw(drawableText.pc,-82,412)
|
||||
mStr(P.stat.pc,-81,330)
|
||||
mDraw(drawableText.pc,-81,412)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
|
||||
|
||||
@@ -7,12 +7,12 @@ local function task_PC(P)
|
||||
if P.modeData.counter==21 then
|
||||
local t=P.stat.pc%2
|
||||
for i=1,4 do
|
||||
local r=getNewRow(0)
|
||||
local r=freeRow.get(0)
|
||||
for j=1,10 do
|
||||
r[j]=PCbase[4*t+i][j]
|
||||
end
|
||||
ins(P.field,1,r)
|
||||
ins(P.visTime,1,getNewRow(20))
|
||||
ins(P.visTime,1,freeRow.get(20))
|
||||
end
|
||||
P.fieldBeneath=P.fieldBeneath+120
|
||||
P.curY=P.curY+4
|
||||
@@ -26,7 +26,7 @@ local function newPC(P)
|
||||
local c=0
|
||||
for i=1,10 do if r[i]>0 then c=c+1 end end
|
||||
if c<5 then
|
||||
Event.lose(P)
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
if P.stat.piece%4==0 and #P.field==0 then
|
||||
@@ -50,7 +50,7 @@ return{
|
||||
name={
|
||||
"全清训练",
|
||||
"全清训练",
|
||||
"PC Train",
|
||||
"PC Training",
|
||||
},
|
||||
level={
|
||||
"普通",
|
||||
@@ -71,7 +71,7 @@ return{
|
||||
sequence="none",
|
||||
dropPiece=newPC,
|
||||
ospin=false,
|
||||
bg="rgb",bgm="chlorine",
|
||||
bg="rgb",bgm="oxygen",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
@@ -80,8 +80,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,-82,330)
|
||||
mDraw(drawableText.pc,-82,412)
|
||||
mStr(P.stat.pc,-81,330)
|
||||
mDraw(drawableText.pc,-81,412)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
name={
|
||||
"回合制",
|
||||
"回合制",
|
||||
"Turn-Base",
|
||||
"Turn-Based",
|
||||
},
|
||||
level={
|
||||
"简单",
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
name={
|
||||
"回合制",
|
||||
"回合制",
|
||||
"Turn-Base",
|
||||
"Turn-Based",
|
||||
},
|
||||
level={
|
||||
"普通",
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
name={
|
||||
"回合制",
|
||||
"回合制",
|
||||
"Turn-Base",
|
||||
"Turn-Based",
|
||||
},
|
||||
level={
|
||||
"困难",
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
name={
|
||||
"回合制",
|
||||
"回合制",
|
||||
"Turn-Base",
|
||||
"Turn-Based",
|
||||
},
|
||||
level={
|
||||
"疯狂",
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
name={
|
||||
"回合制",
|
||||
"回合制",
|
||||
"Turn-Base",
|
||||
"Turn-Based",
|
||||
},
|
||||
level={
|
||||
"极限",
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.cyan,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=10,dropPiece=Event.reach_winCheck,
|
||||
target=10,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=10-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.orange,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
@@ -44,7 +44,7 @@ return{
|
||||
if P.stat.row<100 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=60 and 5 or
|
||||
T<=62 and 5 or
|
||||
T<=90 and 4 or
|
||||
T<=130 and 3 or
|
||||
T<=200 and 2 or
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.lightGrey,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=1000,dropPiece=Event.reach_winCheck,
|
||||
target=1000,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=1000-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.lightBlue,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=20,dropPiece=Event.reach_winCheck,
|
||||
target=20,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=20-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.green,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=40,dropPiece=Event.reach_winCheck,
|
||||
target=40,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=40-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.red,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=400,dropPiece=Event.reach_winCheck,
|
||||
target=400,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=400-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
drop=30,lock=45,
|
||||
freshLimit=10,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(60,150-2*P.modeData.event)and P.atkBuffer.sum<4 then
|
||||
P.atkBuffer[#P.atkBuffer+1]={pos=rnd(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1}
|
||||
@@ -39,8 +39,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-82,310)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
drop=30,lock=45,
|
||||
freshLimit=10,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(60,180-2*P.modeData.event)and P.atkBuffer.sum<15 then
|
||||
P.atkBuffer[#P.atkBuffer+1]=
|
||||
@@ -44,8 +44,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-82,310)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
drop=30,lock=45,
|
||||
freshLimit=10,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(60,150-P.modeData.event)and P.atkBuffer.sum<20 then
|
||||
local t=max(60,90-P.modeData.event)
|
||||
@@ -40,8 +40,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-82,310)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
drop=30,lock=45,
|
||||
freshLimit=10,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(90,180-2*P.modeData.event)and P.atkBuffer.sum<8 then
|
||||
local d=P.modeData.event+1
|
||||
@@ -44,8 +44,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-82,310)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -22,7 +22,7 @@ return{
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(300,600-10*P.modeData.event)and P.atkBuffer.sum<20 then
|
||||
local t=max(300,480-12*P.modeData.event)
|
||||
@@ -33,8 +33,8 @@ return{
|
||||
P.atkBuffer[p+3]={pos=rnd(10),amount=6,countdown=1.5*t,cd0=1.5*t,time=0,sent=false,lv=5}
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+20
|
||||
P.stat.recv=P.stat.recv+20
|
||||
P.modeData.counter=0
|
||||
if P.modeData.event==31 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
P.modeData.counter=0
|
||||
P.modeData.event=P.modeData.event+1
|
||||
end
|
||||
end,
|
||||
@@ -46,8 +46,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-82,310)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_ultimate(P)
|
||||
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,7 +26,7 @@ return{
|
||||
drop=30,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
dropPiece=tech_reach_ultimate,
|
||||
dropPiece=tech_check_ultimate,
|
||||
bg="matrix",bgm="secret8th",
|
||||
},
|
||||
load=function()
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_easy(P)
|
||||
if #P.cleared>0 and P.b2b<40 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.b2b<40 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,7 +26,7 @@ return{
|
||||
drop=20,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
dropPiece=tech_reach_easy,
|
||||
dropPiece=tech_check_easy,
|
||||
bg="matrix",bgm="secret8th",
|
||||
},
|
||||
load=function()
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_ultimate(P)
|
||||
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,7 +26,7 @@ return{
|
||||
_20G=true,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
dropPiece=tech_reach_ultimate,
|
||||
dropPiece=tech_check_ultimate,
|
||||
bg="matrix",bgm="secret7th",
|
||||
},
|
||||
load=function()
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_hard(P)
|
||||
if #P.cleared>0 and P.lastClear<10 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -17,16 +17,16 @@ return{
|
||||
"LUNATIC",
|
||||
},
|
||||
info={
|
||||
"禁止断B2B",
|
||||
"禁止断满贯",
|
||||
"Keep B2B",
|
||||
"禁止普通消除",
|
||||
"禁止普通消除",
|
||||
"No normal clear",
|
||||
},
|
||||
color=color.red,
|
||||
env={
|
||||
_20G=true,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
dropPiece=tech_reach_hard,
|
||||
dropPiece=tech_check_hard,
|
||||
bg="matrix",bgm="secret7th",
|
||||
},
|
||||
load=function()
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_ultimate(P)
|
||||
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,7 +26,7 @@ return{
|
||||
oncehold=false,
|
||||
drop=1e99,lock=1e99,
|
||||
target=200,
|
||||
dropPiece=tech_reach_ultimate,
|
||||
dropPiece=tech_check_ultimate,
|
||||
bg="matrix",bgm="newera",
|
||||
},
|
||||
load=function()
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_easy(P)
|
||||
if #P.cleared>0 and P.b2b<40 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.b2b<40 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_ultimate(P)
|
||||
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -17,28 +17,30 @@ return{
|
||||
"ULTIMATE+",
|
||||
},
|
||||
info={
|
||||
"禁止普通消除,强制最简操作",
|
||||
"禁止普通消除,强制最简操作",
|
||||
"Don't do normal clear,no finesse error",
|
||||
"仅允许spin与PC,强制最简操作",
|
||||
"仅允许spin与全清,强制最简操作",
|
||||
"Spin&PC only,no finesse error",
|
||||
},
|
||||
color=color.grey,
|
||||
env={
|
||||
arr=0,
|
||||
drop=1e99,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
fineKill=true,
|
||||
dropPiece=tech_reach_ultimate,
|
||||
dropPiece=tech_check_ultimate,
|
||||
bg="flink",bgm="infinite",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_hard(P)
|
||||
if #P.cleared>0 and P.lastClear<10 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -17,28 +17,30 @@ return{
|
||||
"ULTIMATE",
|
||||
},
|
||||
info={
|
||||
"仅允许spin与PC,强制最简操作",
|
||||
"仅允许spin与全清,强制最简操作",
|
||||
"Don't do normal clear,no finesse error",
|
||||
"禁止普通消除,强制最简操作",
|
||||
"禁止普通消除,强制最简操作",
|
||||
"No normal clear,no finesse error",
|
||||
},
|
||||
color=color.lightYellow,
|
||||
env={
|
||||
arr=0,
|
||||
drop=1e99,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
fineKill=true,
|
||||
dropPiece=tech_reach_hard,
|
||||
dropPiece=tech_check_hard,
|
||||
bg="flink",bgm="infinite",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
|
||||
@@ -73,7 +73,7 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(35)
|
||||
mStr(#players.alive.."/49",-82,175)
|
||||
mStr(#players.alive.."/49",-81,175)
|
||||
mStr(P.modeData.point,-70,215)
|
||||
gc.draw(drawableText.ko,-127,225)
|
||||
setFont(20)
|
||||
|
||||
@@ -73,7 +73,7 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(35)
|
||||
mStr(#players.alive.."/49",-82,175)
|
||||
mStr(#players.alive.."/49",-81,175)
|
||||
mStr(P.modeData.point,-70,215)
|
||||
gc.draw(drawableText.ko,-127,225)
|
||||
setFont(20)
|
||||
|
||||
@@ -73,7 +73,7 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(35)
|
||||
mStr(#players.alive.."/49",-82,175)
|
||||
mStr(#players.alive.."/49",-81,175)
|
||||
mStr(P.modeData.point,-70,215)
|
||||
gc.draw(drawableText.ko,-127,225)
|
||||
setFont(20)
|
||||
|
||||
@@ -73,7 +73,7 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(35)
|
||||
mStr(#players.alive.."/99",-82,175)
|
||||
mStr(#players.alive.."/99",-81,175)
|
||||
mStr(P.modeData.point,-70,215)
|
||||
gc.draw(drawableText.ko,-127,225)
|
||||
setFont(20)
|
||||
|
||||
@@ -73,7 +73,7 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(35)
|
||||
mStr(#players.alive.."/99",-82,175)
|
||||
mStr(#players.alive.."/99",-81,175)
|
||||
mStr(P.modeData.point,-70,215)
|
||||
gc.draw(drawableText.ko,-127,225)
|
||||
setFont(20)
|
||||
|
||||
@@ -73,7 +73,7 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(35)
|
||||
mStr(#players.alive.."/99",-82,175)
|
||||
mStr(#players.alive.."/99",-81,175)
|
||||
mStr(P.modeData.point,-70,215)
|
||||
gc.draw(drawableText.ko,-127,225)
|
||||
setFont(20)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
local function check_tsd(P)
|
||||
if #P.cleared>0 then
|
||||
if #P.clearedRow>0 then
|
||||
if P.lastClear~=52 then
|
||||
Event.lose(P)
|
||||
elseif #P.cleared>0 then
|
||||
P:lose()
|
||||
elseif #P.clearedRow>0 then
|
||||
P.modeData.event=P.modeData.event+1
|
||||
end
|
||||
end
|
||||
@@ -32,14 +32,13 @@ return{
|
||||
ospin=false,
|
||||
bg="matrix",bgm="reason",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(75)
|
||||
mStr(P.modeData.event,-82,330)
|
||||
mDraw(drawableText.tsd,-82,407)
|
||||
mStr(P.modeData.event,-81,330)
|
||||
mDraw(drawableText.tsd,-81,407)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].."TSD "..toTime(D[2])end,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
local function check_tsd(P)
|
||||
if #P.cleared>0 then
|
||||
if #P.clearedRow>0 then
|
||||
if P.lastClear~=52 then
|
||||
Event.lose(P)
|
||||
elseif #P.cleared>0 then
|
||||
P:lose()
|
||||
elseif #P.clearedRow>0 then
|
||||
P.modeData.event=P.modeData.event+1
|
||||
end
|
||||
end
|
||||
@@ -38,8 +38,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(75)
|
||||
mStr(P.modeData.event,-82,330)
|
||||
mDraw(drawableText.tsd,-82,407)
|
||||
mStr(P.modeData.event,-81,330)
|
||||
mDraw(drawableText.tsd,-81,407)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].."TSD "..toTime(D[2])end,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
local function check_tsd(P)
|
||||
if #P.cleared>0 then
|
||||
if #P.clearedRow>0 then
|
||||
if P.lastClear~=52 then
|
||||
Event.lose(P)
|
||||
elseif #P.cleared>0 then
|
||||
P:lose()
|
||||
elseif #P.clearedRow>0 then
|
||||
P.modeData.event=P.modeData.event+1
|
||||
end
|
||||
end
|
||||
@@ -38,8 +38,8 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(75)
|
||||
mStr(P.modeData.event,-82,330)
|
||||
mDraw(drawableText.tsd,-82,407)
|
||||
mStr(P.modeData.event,-81,330)
|
||||
mDraw(drawableText.tsd,-81,407)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].."TSD "..toTime(D[2])end,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
local gc=love.graphics
|
||||
local warnTime={60,90,105,115,116,117,118,119,120}
|
||||
return{
|
||||
name={
|
||||
"限时打分",
|
||||
@@ -15,30 +16,49 @@ return{
|
||||
"在两分钟内尽可能拿到最多的分数",
|
||||
"Score attack in 120s",
|
||||
},
|
||||
color=color.grey,
|
||||
color=color.lightGrey,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
noFly=true,
|
||||
minarr=1,minsdarr=1,
|
||||
drop=60,lock=60,
|
||||
fall=20,
|
||||
task=function(P)
|
||||
if P.stat.time>=120 then
|
||||
Event.win(P,"finish")
|
||||
local _=P.modeData.counter+1
|
||||
if P.stat.time>=warnTime[_]then
|
||||
if _<9 then
|
||||
P.modeData.counter=_
|
||||
SFX.play("ready",.7+_*.03)
|
||||
else
|
||||
SFX.play("start")
|
||||
P:win("finish")
|
||||
return true
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="matrix",bgm="infinite",
|
||||
},
|
||||
slowMark=true,
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
gc.circle("line",-30,100,40)
|
||||
gc.setColor(1,0,0)
|
||||
gc.arc("fill",-40,100,50,0,1)
|
||||
gc.setLineWidth(2)
|
||||
gc.rectangle("line",-95,112,32,402)
|
||||
local T=P.stat.time/120
|
||||
gc.setColor(2*T,2-2*T,.2)
|
||||
gc.rectangle("fill",-94,513,30,(T-1)*400)
|
||||
end,
|
||||
score=function(P)return{P.score}end,
|
||||
score=function(P)return{P.stat.score}end,
|
||||
scoreDisp=function(D)return tostring(D[1])end,
|
||||
comp=function(a,b)return a[1]>b[1]end,
|
||||
getRank=function(P)
|
||||
local T=P.stat.score
|
||||
return 1
|
||||
return
|
||||
T>=62000 and 5 or
|
||||
T>=50000 and 4 or
|
||||
T>=26000 and 3 or
|
||||
T>=10000 and 2 or
|
||||
T>=6200 and 1
|
||||
end,
|
||||
}
|
||||