Compare commits

...

1 Commits

Author SHA1 Message Date
MrZ_26
4da080c6f5 0.8.7 2020-02-14 19:26:57 +08:00
76 changed files with 314 additions and 195 deletions

View File

@@ -1,4 +1,4 @@
gameVersion="Alpha V0.8.6" gameVersion="Alpha V0.8.7"
function love.conf(t) function love.conf(t)
t.identity="Techmino"--Save directory name t.identity="Techmino"--Save directory name
t.version="11.1" t.version="11.1"

View File

@@ -38,26 +38,26 @@ local function gameOver()
end end
end end
end end
end local D=M.score(P)
local D=M.score(P) local L=M.records
local L=M.records local p=#L--排名数-1
local p=#L--排名数-1 if p>0 then
if p>0 then ::L::
::L:: if M.comp(D,L[p])then--是否靠前
if M.comp(D,L[p])then--是否靠前 p=p-1
p=p-1 if p>0 then
if p>0 then goto L
goto L end
end end
end end
end if p<10 then
if p<10 then if p==0 then
if p==0 then P:showText(text.newRecord,0,-100,100,"beat",.5)
P:showText(text.newRecord,0,-100,100,"beat",.5) end
ins(L,p+1,D)
if L[11]then L[11]=nil end
saveRecord(M.saveFileName,L)
end end
ins(L,p+1,D)
if L[11]then L[11]=nil end
saveRecord(M.saveFileName,L)
end end
end end
end--Save record end--Save record

View File

@@ -11,12 +11,19 @@ spin判定:
细节不赘述 细节不赘述
攻击系统: 攻击系统:
消1/2/3/4攻击0/1/2/4 普通消除:
spin1/2/3攻击2/4/6,若mini则减半 1/2/3/4攻击0.25/1.25/2.25/4
B2B:增加1~2(techrash)/1~3(spin)攻击 特殊消除:
B3B:满B2B效果+1额外抵挡 spin1/2/3攻击2/4/6,若mini则减半
PC:将其它的伤害之和开根号后向上取整,再+6~10(本局内递增)+2额外抵挡 B2B:加1(techrash/spin1/spin2)或2(spin3)攻击
连击:0,0,1,1,2,2,3,3,4,4,3…… B3B:在B2B效果之上再+1攻击和+1额外抵挡
连击:0,0,1,1,2,2,3,3,4,4,3……
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
PC:将上述伤害之和开根号,再+6~10(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
根据上述规则计算后,向下取整,攻击打出
分数系统:
玩得越牛逼得分越高嗷(
攻击延迟: 攻击延迟:
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢 消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢
@@ -27,13 +34,12 @@ spin判定:
没有用上的额外抵挡会被丢弃,最后剩下的攻击力会发送给对手 没有用上的额外抵挡会被丢弃,最后剩下的攻击力会发送给对手
back to back(B2B)点数说明: back to back(B2B)点数说明:
B2B点数的范围在0~1200 B2B点数的范围在0~1200,在点数>=40时进行特殊消除为B2B,>1000时特殊消除为B3B
在40及以上特殊消除时B2B,在1000以上特殊消除时B3B,1200封顶
消四+100
空spin加20,不超过1000
spin1~3+50/100/180 (mini*.5)
普通消除-250 普通消除-250
1000以上空放一块-40(不减到低于1000) spin1/2/3:+50/100/180(mini减半)
消四:+100
空spin:+20,此法得到的点数不能超过1000
当点数在1000以上时空放一块-40(不减到低于1000)
混战模式说明: 混战模式说明:
许多玩家同时进行一局游戏对手都是AI,不是真人).随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加.淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力. 许多玩家同时进行一局游戏对手都是AI,不是真人).随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加.淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力.

View File

@@ -54,7 +54,7 @@ return{
bgm="背景音乐:", bgm="背景音乐:",
}, },
customVal={ customVal={
drop={"[20G]",1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""}, drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""}, lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil, wait=nil,
fall=nil, fall=nil,
@@ -171,7 +171,7 @@ return{
]], ]],
support="支持作者", support="支持作者",
group="官方QQ群", group="官方QQ群",
warning=" 止 私 自 传 播", warning="止直接传播游戏本体",
WidgetText={ WidgetText={
main={ main={
lang="言/A", lang="言/A",

View File

@@ -39,7 +39,7 @@ return{
custom="自定义游戏", custom="自定义游戏",
customOption={ customOption={
drop="下落延迟:", drop="下落速度:",
lock="锁定延迟:", lock="锁定延迟:",
wait="放块延迟:", wait="放块延迟:",
fall="消行延迟:", fall="消行延迟:",
@@ -54,7 +54,7 @@ return{
bgm="背景音乐:", bgm="背景音乐:",
}, },
customVal={ customVal={
drop={"[20G]",1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""}, drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""}, lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil, wait=nil,
fall=nil, fall=nil,
@@ -171,7 +171,7 @@ return{
]], ]],
support="支持作者", support="支持作者",
group="官方QQ群", group="官方QQ群",
warning=" 止 私 自 传 播", warning="止直接传播游戏本体",
WidgetText={ WidgetText={
main={ main={
lang="言/A", lang="言/A",

View File

@@ -52,7 +52,7 @@ return{
bgm="BGM:", bgm="BGM:",
}, },
customVal={ customVal={
drop={"[20G]",1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""}, drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""}, lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil, wait=nil,
fall=nil, fall=nil,
@@ -170,7 +170,7 @@ Lib used:
]], ]],
support="Support Author", support="Support Author",
group="Official QQ Group", group="Official QQ Group",
warning="DO NOT DISTRIBUTE", warning="DO NOT SHARE APP",
WidgetText={ WidgetText={
main={ main={
lang="言/A", lang="言/A",

View File

@@ -160,7 +160,7 @@ customID={
"bg","bgm", "bg","bgm",
} }
customRange={ customRange={
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99}, drop={1e99,180,60,40,30,25,20,18,16,14,12,10,9,8,7,6,5,4,3,2,1,.5,.25,.125,0},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99}, lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
wait={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, wait={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60},

View File

@@ -9,8 +9,8 @@ local Timer=love.timer.getTime
local int,rnd,max,min=math.floor,math.random,math.max,math.min local int,rnd,max,min=math.floor,math.random,math.max,math.min
local rem=table.remove local rem=table.remove
package.path="?.lua" package.path="?.lua"--boost
NULL=function()end function NULL()end
--Libs --Libs
------------------------------------------------------------- -------------------------------------------------------------
system=sys.getOS() system=sys.getOS()
@@ -51,7 +51,7 @@ kb.setTextInput(false)
ms.setVisible(false) ms.setVisible(false)
--Application Vars --Application Vars
------------------------------------------------------------- -------------------------------------------------------------
customSel={22,22,1,1,7,3,1,1,8,4,1,1,1} customSel={1,22,1,1,7,3,1,1,8,4,1,1,1}
preField={h=20} preField={h=20}
for i=1,10 do preField[i]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}end 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 for i=11,20 do preField[i]={0,0,0,0,0,0,0,0,0,0}end
@@ -798,9 +798,9 @@ end
local lastX,lastY--last clickDown pos local lastX,lastY--last clickDown pos
function love.mousepressed(x,y,k,t,num) function love.mousepressed(x,y,k,t,num)
mouseShow=true mouseShow=true
if devMode>0 then print(x,y)end
if t or scene.swapping then return end
mx,my=xOy:inverseTransformPoint(x,y) mx,my=xOy:inverseTransformPoint(x,y)
if devMode>0 then print(mx,my)end
if t or scene.swapping then return end
if mouseDown[scene.cur]then if mouseDown[scene.cur]then
mouseDown[scene.cur](mx,my,k) mouseDown[scene.cur](mx,my,k)
elseif k==2 then elseif k==2 then
@@ -816,8 +816,8 @@ function love.mousepressed(x,y,k,t,num)
end end
function love.mousemoved(x,y,dx,dy,t) function love.mousemoved(x,y,dx,dy,t)
mouseShow=true mouseShow=true
if t or scene.swapping then return end
mx,my=xOy:inverseTransformPoint(x,y) mx,my=xOy:inverseTransformPoint(x,y)
if t or scene.swapping then return end
dx,dy=dx/scr.k,dy/scr.k dx,dy=dx/scr.k,dy/scr.k
if mouseMove[scene.cur]then if mouseMove[scene.cur]then
mouseMove[scene.cur](mx,my,dx,dy) mouseMove[scene.cur](mx,my,dx,dy)
@@ -835,8 +835,8 @@ function love.mousemoved(x,y,dx,dy,t)
end end
end end
function love.mousereleased(x,y,k,t,num) function love.mousereleased(x,y,k,t,num)
if t or scene.swapping then return end
mx,my=xOy:inverseTransformPoint(x,y) mx,my=xOy:inverseTransformPoint(x,y)
if t or scene.swapping then return end
if mouseUp[scene.cur]then if mouseUp[scene.cur]then
mouseUp[scene.cur](mx,my,k) mouseUp[scene.cur](mx,my,k)
end end

View File

@@ -42,7 +42,7 @@ return{
Event.win(P,"finish") Event.win(P,"finish")
end end
end, end,
arr=1, minarr=1,
bg="game3",bgm="shining terminal", bg="game3",bgm="shining terminal",
}, },
load=function() load=function()
@@ -63,6 +63,6 @@ return{
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[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) getRank=function(P)
local P=P.modeData.point local P=P.modeData.point
return P==80 and 5 or P>=70 and 4 or P>=60 and 3 or P>=40 and 2 or P>=20 and 1 return P==80 and 5 or P>=70 and 4 or P>=60 and 3 or P>=40 and 2 or P>=20 and 1 or P>=5 and 0
end, end,
} }

View File

@@ -67,6 +67,6 @@ return{
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local W=P.modedata.event local W=P.modedata.event
return W>100 and 4 or W>=80 and 3 or W>=50 and 2 or W>=20 and 1 return W>100 and 4 or W>=80 and 3 or W>=50 and 2 or W>=20 and 1 or W>=5 and 0
end, end,
} }

View File

@@ -80,6 +80,6 @@ return{
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local W=P.modedata.event local W=P.modedata.event
return W>40 and 4 or W>=30 and 3 or W>=20 and 2 or W>=10 and 1 return W>40 and 4 or W>=30 and 3 or W>=20 and 2 or W>=10 and 1 or W>=5 and 0
end, end,
} }

View File

@@ -48,7 +48,8 @@ return{
return return
L>=150 and 3 or L>=150 and 3 or
L>=100 and 2 or L>=100 and 2 or
L>=40 and 1 L>=40 and 1 or
L>=1 and 0
end end
end, end,
} }

View File

@@ -50,7 +50,8 @@ return{
return return
L>=150 and 3 or L>=150 and 3 or
L>=90 and 2 or L>=90 and 2 or
L>=40 and 1 L>=40 and 1 or
L>=1 and 0
end end
end, end,
} }

View File

@@ -50,7 +50,8 @@ return{
return return
L>=150 and 3 or L>=150 and 3 or
L>=100 and 2 or L>=100 and 2 or
L>=40 and 1 L>=40 and 1 or
L>=1 and 0
end end
end, end,
} }

View File

@@ -49,7 +49,8 @@ return{
return return
L>=150 and 3 or L>=150 and 3 or
L>=100 and 2 or L>=100 and 2 or
L>=40 and 1 L>=40 and 1 or
L>=1 and 0
end end
end, end,
} }

View File

@@ -46,6 +46,7 @@ return{
L>=100 and 4 or L>=100 and 4 or
L>=50 and 3 or L>=50 and 3 or
L>=26 and 2 or L>=26 and 2 or
L>=10 and 1 L>=10 and 1 or
L>=1 and 0
end, end,
} }

View File

@@ -80,7 +80,8 @@ return{
return return
L>=70 and 3 or L>=70 and 3 or
L>=40 and 2 or L>=40 and 2 or
L>=20 and 1 L>=20 and 1 or
L>=5 and 0
end end
end, end,
} }

View File

@@ -78,7 +78,8 @@ return{
else else
return return
L>=60 and 2 or L>=60 and 2 or
L>=30 and 1 L>=30 and 1 or
L>=10 and 0
end end
end, end,
} }

View File

@@ -63,6 +63,7 @@ return{
L>=191 and 4 or L>=191 and 4 or
L>=110 and 3 or L>=110 and 3 or
L>=50 and 2 or L>=50 and 2 or
L>=2 and 1 L>=5 and 1 or
L>=1 and 0
end, end,
} }

View File

@@ -73,6 +73,7 @@ return{
W>=80 and 4 or W>=80 and 4 or
W>=55 and 3 or W>=55 and 3 or
W>=30 and 2 or W>=30 and 2 or
W>=20 and 1 W>=20 and 1 or
L>=5 and 0
end, end,
} }

View File

@@ -73,6 +73,7 @@ return{
W>=100 and 4 or W>=100 and 4 or
W>=70 and 3 or W>=70 and 3 or
W>=40 and 2 or W>=40 and 2 or
W>=10 and 1 W>=10 and 1 or
L>=3 and 0
end, end,
} }

View File

@@ -49,6 +49,7 @@ return{
W>=110 and 4 or W>=110 and 4 or
W>=80 and 3 or W>=80 and 3 or
W>=50 and 2 or W>=50 and 2 or
W>=20 and 1 W>=20 and 1 or
L>=5 and 0
end, end,
} }

View File

@@ -48,6 +48,7 @@ return{
W>=100 and 4 or W>=100 and 4 or
W>=80 and 3 or W>=80 and 3 or
W>=50 and 2 or W>=50 and 2 or
W>=20 and 1 W>=20 and 1 or
L>=5 and 0
end, end,
} }

View File

@@ -35,13 +35,19 @@ return{
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
if P.stat.row<100 then return end local L=P.stat.row
local T=P.stat.time if L>=100 then
return local T=P.stat.time
T<=70 and 5 or return
T<=110 and 4 or T<=70 and 5 or
T<=160 and 3 or T<=110 and 4 or
T<=240 and 2 or T<=160 and 3 or
1 T<=240 and 2 or
1
else
return
L>=50 and 1 or
L>=10 and 0
end
end, end,
} }

View File

@@ -35,13 +35,19 @@ return{
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
if P.stat.row<100 then return end local L=P.stat.row
local T=P.stat.time if L>=100 then
return local T=P.stat.time
T<=65 and 5 or return
T<=100 and 4 or T<=65 and 5 or
T<=145 and 3 or T<=100 and 4 or
T<=220 and 2 or T<=145 and 3 or
1 T<=220 and 2 or
1
else
return
L>=50 and 1 or
L>=10 and 0
end
end, end,
} }

View File

@@ -41,6 +41,7 @@ return{
L>=1500 and 4 or L>=1500 and 4 or
L>=1000 and 3 or L>=1000 and 3 or
L>=500 and 2 or L>=500 and 2 or
L>=100 and 1 L>=100 and 1 or
L>=20 and 0
end, end,
} }

View File

@@ -58,6 +58,7 @@ return{
L>=400 and 4 or L>=400 and 4 or
L>=200 and 3 or L>=200 and 3 or
L>=100 and 2 or L>=100 and 2 or
L>=10 and 1 L>=40 and 1 or
L>=5 and 0
end, end,
} }

View File

@@ -1,7 +1,16 @@
local gc=love.graphics local gc=love.graphics
local function check(P) local function check(P)
if P.stat.row>=200 then if P.stat.row>=P.gameEnv.target then
Event.win(P,"finish") local T=P.gameEnv.target
if T==50 then
P.gameEnv.drop=.25
P.gameEnv.target=100
elseif T==100 then
P.gameEnv._20G=true
P.gameEnv.target=200
else
Event.win(P,"finish")
end
end end
end end
@@ -23,8 +32,9 @@ return{
}, },
color=color.magenta, color=color.magenta,
env={ env={
_20G=true,fall=15, drop=.5,fall=30,
dropPiece=check, target=50,dropPiece=check,
mindas=7,minarr=1,
bg="strap",bgm="race", bg="strap",bgm="race",
}, },
load=function() load=function()
@@ -33,7 +43,7 @@ return{
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)
mStr(P.stat.row,-82,320) mStr(P.stat.row,-82,320)
mStr(200,-82,370) mStr(P.gameEnv.target,-82,370)
gc.rectangle("fill",-125,375,90,4) gc.rectangle("fill",-125,375,90,4)
end, end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end, score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
@@ -45,12 +55,13 @@ return{
local T=P.stat.time local T=P.stat.time
return return
T<=200 and 5 or T<=200 and 5 or
T<=260 and 4 or T<=270 and 4 or
3 3
else else
return return
L>=100 and 2 or L>=100 and 2 or
L>=50 and 1 L>=50 and 1 or
L>=10 and 0
end end
end, end,
} }

View File

@@ -1,15 +1,14 @@
local gc=love.graphics local gc=love.graphics
local marathon_drop={[0]=60,48,40,30,24,18,15,12,10,8,7,6,5,4,3,2,1,1,0,0} local dropSpeed={[0]=60,50,40,30,25,20,15,12,9,7,5,4,3,2,1,1,.5,.5,.25,.25}
local function check_LVup(P) local function check_LVup(P)
local T=P.modeData.point+10 local T=P.modeData.point+10
if P.stat.row>=T then if P.stat.row>=T then
if T==200 then if T==200 then
Event.win(P,"finish") Event.win(P,"finish")
else else
P.gameEnv.drop=marathon_drop[T/10] P.gameEnv.drop=dropSpeed[T/10]
if T==180 then P.gameEnv._20G=true end
SFX("reach")
P.modeData.point=T P.modeData.point=T
SFX("reach")
end end
end end
end end
@@ -32,8 +31,9 @@ return{
}, },
color=color.green, color=color.green,
env={ env={
drop=60,fall=20, fall=30,
target=10,dropPiece=check_LVup, target=10,dropPiece=check_LVup,
mindas=7,minarr=1,
bg="strap",bgm="way", bg="strap",bgm="way",
}, },
load=function() load=function()
@@ -53,13 +53,14 @@ return{
if L>=200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=180 and 5 or T<=185 and 5 or
T<=240 and 4 or T<=250 and 4 or
3 3
else else
return return
L>=150 and 2 or L>=150 and 2 or
L>=100 and 1 L>=100 and 1 or
L>=20 and 0
end end
end, end,
} }

View File

@@ -55,7 +55,7 @@ return{
wait=death_wait[1], wait=death_wait[1],
fall=death_fall[1], fall=death_fall[1],
dropPiece=score, dropPiece=score,
das=6,arr=1, mindas=6,minarr=1,
freshLimit=15, freshLimit=15,
bg="game2",bgm="secret7th", bg="game2",bgm="secret7th",
}, },
@@ -85,7 +85,8 @@ return{
return return
S>=426 and 3 or S>=426 and 3 or
S>=326 and 2 or S>=326 and 2 or
S>=226 and 1 S>=226 and 1 or
S>=50 and 0
end end
end, end,
} }

View File

@@ -89,7 +89,8 @@ return{
return return
S>=420 and 3 or S>=420 and 3 or
S>=250 and 2 or S>=250 and 2 or
S>=120 and 1 S>=120 and 1 or
L>=30 and 0
end end
end, end,
} }

View File

@@ -54,7 +54,7 @@ return{
_20G=true,lock=12, _20G=true,lock=12,
wait=10,fall=10, wait=10,fall=10,
dropPiece=score, dropPiece=score,
das=5,arr=1, mindas=5,minarr=1,
freshLimit=15, freshLimit=15,
easyFresh=false,bone=true, easyFresh=false,bone=true,
bg="none",bgm="shining terminal", bg="none",bgm="shining terminal",
@@ -79,6 +79,7 @@ return{
S>=800 and 4 or S>=800 and 4 or
S>=600 and 3 or S>=600 and 3 or
S>=400 and 2 or S>=400 and 2 or
S>=200 and 1 S>=200 and 1 or
L>=50 and 0
end, end,
} }

View File

@@ -52,6 +52,7 @@ return{
L>=13 and 4 or L>=13 and 4 or
L>=10 and 3 or L>=10 and 3 or
L>=7 and 2 or L>=7 and 2 or
L>=4 and 1 L>=4 and 1 or
L>=1 and 0
end, end,
} }

View File

@@ -52,6 +52,7 @@ return{
L>=12 and 4 or L>=12 and 4 or
L>=9 and 3 or L>=9 and 3 or
L>=6 and 2 or L>=6 and 2 or
L>=3 and 1 L>=3 and 1 or
L>=1 and 0
end, end,
} }

View File

@@ -51,6 +51,7 @@ return{
L>=20 and 4 or L>=20 and 4 or
L>=16 and 3 or L>=16 and 3 or
L>=13 and 2 or L>=13 and 2 or
L>=10 and 1 L>=10 and 1 or
L>=1 and 0
end, end,
} }

View File

@@ -109,6 +109,7 @@ return{
L>=40 and 4 or L>=40 and 4 or
L>=30 and 3 or L>=30 and 3 or
L>=20 and 2 or L>=20 and 2 or
L>=10 and 1 L>=10 and 1 or
L>=1 and 0
end, end,
} }

View File

@@ -92,6 +92,7 @@ return{
L>=60 and 4 or L>=60 and 4 or
L>=40 and 3 or L>=40 and 3 or
L>=25 and 2 or L>=25 and 2 or
L>=15 and 1 L>=15 and 1 or
L>=1 and 0
end, end,
} }

View File

@@ -28,7 +28,7 @@ return{
}, },
color=color.cyan, color=color.cyan,
env={ env={
drop=60,lock=60, drop=1e99,lock=1e99,
oncehold=false, oncehold=false,
dropPiece=update_round, dropPiece=update_round,
bg="game2",bgm="push", bg="game2",bgm="push",

View File

@@ -28,7 +28,7 @@ return{
}, },
color=color.green, color=color.green,
env={ env={
drop=60,lock=60, drop=1e99,lock=1e99,
oncehold=false, oncehold=false,
dropPiece=update_round, dropPiece=update_round,
bg="game2",bgm="push", bg="game2",bgm="push",

View File

@@ -28,7 +28,7 @@ return{
}, },
color=color.magenta, color=color.magenta,
env={ env={
drop=60,lock=60, drop=1e99,lock=1e99,
oncehold=false, oncehold=false,
dropPiece=update_round, dropPiece=update_round,
bg="game2",bgm="push", bg="game2",bgm="push",

View File

@@ -28,7 +28,7 @@ return{
}, },
color=color.red, color=color.red,
env={ env={
drop=60,lock=60, drop=1e99,lock=1e99,
oncehold=false, oncehold=false,
dropPiece=update_round, dropPiece=update_round,
bg="game2",bgm="push", bg="game2",bgm="push",

View File

@@ -28,7 +28,7 @@ return{
}, },
color=color.lightYellow, color=color.lightYellow,
env={ env={
drop=60,lock=60, drop=1e99,lock=1e99,
oncehold=false, oncehold=false,
dropPiece=update_round, dropPiece=update_round,
bg="game2",bgm="push", bg="game2",bgm="push",

View File

@@ -48,6 +48,7 @@ return{
T<=10 and 4 or T<=10 and 4 or
T<=25 and 3 or T<=25 and 3 or
T<=40 and 2 or T<=40 and 2 or
T<=60 and 1 T<=60 and 1 or
0
end, end,
} }

View File

@@ -48,6 +48,7 @@ return{
T<=90 and 4 or T<=90 and 4 or
T<=130 and 3 or T<=130 and 3 or
T<=200 and 2 or T<=200 and 2 or
T<=270 and 1 T<=270 and 1 or
0
end, end,
} }

View File

@@ -48,6 +48,7 @@ return{
T<=1000 and 4 or T<=1000 and 4 or
T<=1400 and 3 or T<=1400 and 3 or
T<=2200 and 2 or T<=2200 and 2 or
T<=3000 and 1 T<=3000 and 1 or
0
end, end,
} }

View File

@@ -48,6 +48,7 @@ return{
T<=18 and 4 or T<=18 and 4 or
T<=45 and 3 or T<=45 and 3 or
T<=70 and 2 or T<=70 and 2 or
T<=100 and 1 T<=100 and 1 or
0
end, end,
} }

View File

@@ -47,7 +47,8 @@ return{
T<=25 and 5 or T<=25 and 5 or
T<=32 and 4 or T<=32 and 4 or
T<=40 and 3 or T<=40 and 3 or
T<=60 and 2 or T<=62 and 2 or
T<=120 and 1 T<=126 and 1 or
0
end, end,
} }

View File

@@ -48,6 +48,7 @@ return{
T<=330 and 4 or T<=330 and 4 or
T<=420 and 3 or T<=420 and 3 or
T<=626 and 2 or T<=626 and 2 or
T<=1000 and 1 T<=1000 and 1 or
0
end, end,
} }

View File

@@ -53,6 +53,7 @@ return{
W>=60 and 4 or W>=60 and 4 or
W>=45 and 3 or W>=45 and 3 or
W>=30 and 2 or W>=30 and 2 or
W>=15 and 1 W>=15 and 1 or
W>=5 and 0
end, end,
} }

View File

@@ -58,6 +58,7 @@ return{
W>=60 and 4 or W>=60 and 4 or
W>=45 and 3 or W>=45 and 3 or
W>=30 and 2 or W>=30 and 2 or
W>=15 and 1 W>=15 and 1 or
W>=5 and 0
end, end,
} }

View File

@@ -54,6 +54,7 @@ return{
W>=80 and 4 or W>=80 and 4 or
W>=55 and 3 or W>=55 and 3 or
W>=30 and 2 or W>=30 and 2 or
W>=15 and 1 W>=15 and 1 or
W>=5 and 0
end, end,
} }

View File

@@ -58,6 +58,7 @@ return{
W>=55 and 4 or W>=55 and 4 or
W>=45 and 3 or W>=45 and 3 or
W>=30 and 2 or W>=30 and 2 or
W>=15 and 1 W>=15 and 1 or
W>=5 and 0
end, end,
} }

View File

@@ -58,6 +58,7 @@ return{
W>=26 and 4 or W>=26 and 4 or
W>=20 and 3 or W>=20 and 3 or
W>=10 and 2 or W>=10 and 2 or
W>=5 and 1 W>=5 and 1 or
W>=1 and 0
end, end,
} }

View File

@@ -49,6 +49,7 @@ return{
L>=126 and 4 or L>=126 and 4 or
L>=90 and 3 or L>=90 and 3 or
L>=60 and 2 or L>=60 and 2 or
L>=30 and 1 L>=30 and 1 or
L>=5 and 0
end, end,
} }

View File

@@ -49,6 +49,7 @@ return{
L>=126 and 4 or L>=126 and 4 or
L>=90 and 3 or L>=90 and 3 or
L>=60 and 2 or L>=60 and 2 or
L>=30 and 1 L>=30 and 1 or
L>=5 and 0
end, end,
} }

View File

@@ -49,6 +49,7 @@ return{
L>=140 and 4 or L>=140 and 4 or
L>=90 and 3 or L>=90 and 3 or
L>=60 and 2 or L>=60 and 2 or
L>=30 and 1 L>=30 and 1 or
L>=5 and 0
end, end,
} }

View File

@@ -49,6 +49,7 @@ return{
L>=140 and 4 or L>=140 and 4 or
L>=90 and 3 or L>=90 and 3 or
L>=60 and 2 or L>=60 and 2 or
L>=30 and 1 L>=30 and 1 or
L>=5 and 0
end, end,
} }

View File

@@ -49,6 +49,7 @@ return{
L>=126 and 4 or L>=126 and 4 or
L>=80 and 3 or L>=80 and 3 or
L>=50 and 2 or L>=50 and 2 or
L>=20 and 1 L>=20 and 1 or
L>=5 and 0
end, end,
} }

View File

@@ -49,6 +49,7 @@ return{
L>=126 and 4 or L>=126 and 4 or
L>=80 and 3 or L>=80 and 3 or
L>=50 and 2 or L>=50 and 2 or
L>=20 and 1 L>=20 and 1 or
L>=5 and 0
end, end,
} }

View File

@@ -50,6 +50,7 @@ return{
L>=150 and 4 or L>=150 and 4 or
L>=100 and 3 or L>=100 and 3 or
L>=70 and 2 or L>=70 and 2 or
L>=40 and 1 L>=40 and 1 or
L>=10 and 0
end, end,
} }

View File

@@ -50,6 +50,7 @@ return{
L>=150 and 4 or L>=150 and 4 or
L>=100 and 3 or L>=100 and 3 or
L>=70 and 2 or L>=70 and 2 or
L>=40 and 1 L>=40 and 1 or
L>=10 and 0
end, end,
} }

View File

@@ -96,6 +96,7 @@ return{
R<=3 and 4 or R<=3 and 4 or
R<=5 and 3 or R<=5 and 3 or
R<=10 and 2 or R<=10 and 2 or
R<=15 and 1 R<=15 and 1 or
R<=45 and 0
end, end,
} }

View File

@@ -96,6 +96,7 @@ return{
R==2 and 4 or R==2 and 4 or
R<=4 and 3 or R<=4 and 3 or
R<=6 and 2 or R<=6 and 2 or
R<=8 and 1 R<=8 and 1 or
R<=45 and 0
end, end,
} }

View File

@@ -96,6 +96,7 @@ return{
R==2 and 4 or R==2 and 4 or
R==3 and 3 or R==3 and 3 or
R==4 and 2 or R==4 and 2 or
R<=6 and 1 R<=6 and 1 or
R<=45 and 0
end, end,
} }

View File

@@ -96,6 +96,7 @@ return{
R<=3 and 4 or R<=3 and 4 or
R<=6 and 3 or R<=6 and 3 or
R<=10 and 2 or R<=10 and 2 or
R<=20 and 1 R<=20 and 1 or
R<=90 and 0
end, end,
} }

View File

@@ -96,6 +96,7 @@ return{
R<=3 and 4 or R<=3 and 4 or
R<=6 and 3 or R<=6 and 3 or
R<=8 and 2 or R<=8 and 2 or
R<=10 and 1 R<=10 and 1 or
R<=90 and 0
end, end,
} }

View File

@@ -96,6 +96,7 @@ return{
R==2 and 4 or R==2 and 4 or
R==3 and 3 or R==3 and 3 or
R<=5 and 2 or R<=5 and 2 or
R<=7 and 1 R<=7 and 1 or
R<=90 and 0
end, end,
} }

View File

@@ -41,7 +41,7 @@ return{
mDraw(drawableText.tsd,-82,407) mDraw(drawableText.tsd,-82,407)
end, end,
score=function(P)return{P.modeData.event,P.stat.time}end, score=function(P)return{P.modeData.event,P.stat.time}end,
scoreDisp=function(D)return"NO."..D[1]" KO:"..D[2]end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local T=P.modeData.event local T=P.modeData.event
@@ -50,6 +50,7 @@ return{
T>=20 and 4 or T>=20 and 4 or
T>=15 and 3 or T>=15 and 3 or
T>=10 and 2 or T>=10 and 2 or
T>=6 and 1 T>=6 and 1 or
T>=1 and 0
end, end,
} }

View File

@@ -41,7 +41,7 @@ return{
mDraw(drawableText.tsd,-82,407) mDraw(drawableText.tsd,-82,407)
end, end,
score=function(P)return{P.modeData.event,P.stat.time}end, score=function(P)return{P.modeData.event,P.stat.time}end,
scoreDisp=function(D)return"NO."..D[1]" KO:"..D[2]end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local T=P.modeData.event local T=P.modeData.event
@@ -50,6 +50,7 @@ return{
T>=19 and 4 or T>=19 and 4 or
T>=16 and 3 or T>=16 and 3 or
T>=13 and 2 or T>=13 and 2 or
T>=10 and 1 T>=10 and 1 or
T>=1 and 0
end, end,
} }

View File

@@ -41,7 +41,7 @@ return{
mDraw(drawableText.tsd,-82,407) mDraw(drawableText.tsd,-82,407)
end, end,
score=function(P)return{P.modeData.event,P.stat.time}end, score=function(P)return{P.modeData.event,P.stat.time}end,
scoreDisp=function(D)return"NO."..D[1]" KO:"..D[2]end, scoreDisp=function(D)return"NO."..D[1].." KO:"..D[2]end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[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) getRank=function(P)
local T=P.modeData.event local T=P.modeData.event
@@ -50,6 +50,7 @@ return{
T>=18 and 4 or T>=18 and 4 or
T>=16 and 3 or T>=16 and 3 or
T>=14 and 2 or T>=14 and 2 or
T>=12 and 1 T>=12 and 1 or
T>=1 and 0
end, end,
} }

View File

@@ -35,10 +35,10 @@ return{
getRank=function(P) getRank=function(P)
local T=P.stat.score local T=P.stat.score
return return
T>=1e5 and 5 or T>=12e4 and 5 or
T>=8e4 and 4 or T>=10e4 and 4 or
T>=5e4 and 3 or T>=6e4 and 3 or
T>=2e4 and 2 or T>=3e4 and 2 or
T>=1e4 and 1 T>=1e4 and 1
end, end,
} }

View File

@@ -27,6 +27,7 @@ local gameEnv0={
freshLimit=1e99,easyFresh=true, freshLimit=1e99,easyFresh=true,
fine=false,fineKill=false, fine=false,fineKill=false,
target=1e99,dropPiece=NULL, target=1e99,dropPiece=NULL,
mindas=0,minarr=0,
bg="none",bgm="race" bg="none",bgm="race"
} }
local renATK={[0]=0,0,0,1,1,2,2,3,3,4,4}--3 else local renATK={[0]=0,0,0,1,1,2,2,3,3,4,4}--3 else
@@ -41,9 +42,10 @@ local spinSCR={--[blockName][row]
{250,800,1500},--T {250,800,1500},--T
{300,1000,2200},--O {300,1000,2200},--O
{300,1000,1800},--I {300,1000,1800},--I
}--MUL:1.2,2.0 }
--Techrash:1K;MUL:1.3,1.8 --B2BMUL:1.2/2.0
--Mini*=.5 --Techrash:1K;MUL:1.3/1.8
--Mini*=.6
local visible_opt={show=1e99,time=300,fast=20,none=5} local visible_opt={show=1e99,time=300,fast=20,none=5}
local reAtk={0,0,1,1,1,2,2,3,3} local reAtk={0,0,1,1,1,2,2,3,3}
local reDef={0,1,1,2,3,3,4,4,5} local reDef={0,1,1,2,3,3,4,4,5}
@@ -724,11 +726,23 @@ function player.update(P,dt)
goto stop goto stop
end end
if P.curY~=P.y_img then if P.curY~=P.y_img then
if P.dropDelay>=0 then local D=P.dropDelay
P.dropDelay=P.dropDelay-1 if D>1 then
if P.dropDelay>0 then goto stop end P.dropDelay=D-1
goto stop
end
if D==1 then
P.curY=P.curY-1
else
local _=P.curY-P.y_img--max fall dist
D=1/D--fall dist
if D<_ then
P.curY=P.curY-D
assert(P.curY==int(P.curY),"y:"..P.curY.." fall:"..D.." D_env:"..P.gameEnv.drop)
else
P.curY=P.y_img
end
end end
P.curY=P.curY-1
P.spinLast=false P.spinLast=false
if P.y_img~=P.curY then if P.y_img~=P.curY then
P.dropDelay=P.gameEnv.drop P.dropDelay=P.gameEnv.drop
@@ -1507,7 +1521,7 @@ function player.drop(P)--Place piece
P:showText(text.mini,0,-80,35,"appear") P:showText(text.mini,0,-80,35,"appear")
send=send*.5 send=send*.5
sendTime=sendTime+60 sendTime=sendTime+60
cscore=cscore*.5 cscore=cscore*.6
P.b2b=P.b2b+b2bPoint[cc]*.5 P.b2b=P.b2b+b2bPoint[cc]*.5
if P.human then if P.human then
VOICE("mini",CHN) VOICE("mini",CHN)
@@ -1524,7 +1538,7 @@ function player.drop(P)--Place piece
elseif #P.field>0 then elseif #P.field>0 then
P.b2b=max(P.b2b-250,0) P.b2b=max(P.b2b-250,0)
P:showText(text.clear[cc],0,-30,27+cc*3,"appear",(8-cc)*.3) P:showText(text.clear[cc],0,-30,27+cc*3,"appear",(8-cc)*.3)
send=cc-1 send=cc-.75
sendTime=20+send*20 sendTime=20+send*20
cscore=cscore+clearSCR[cc] cscore=cscore+clearSCR[cc]
P.lastClear=cc P.lastClear=cc
@@ -1542,7 +1556,7 @@ function player.drop(P)--Place piece
end end
if #P.field==0 then if #P.field==0 then
P:showText(text.PC,0,-80,50,"flicker") P:showText(text.PC,0,-80,50,"flicker")
send=ceil(send^.5)+min(6+P.stat.pc,10) send=send^.5+min(6+P.stat.pc,10)
exblock=exblock+2 exblock=exblock+2
sendTime=sendTime+60 sendTime=sendTime+60
if P.stat.row>4 then if P.stat.row>4 then
@@ -2100,6 +2114,9 @@ function newPlayer(id,x,y,size,AIdata)
P.gameEnv[k]=v P.gameEnv[k]=v
end end
end--reset current game settings end--reset current game settings
P.gameEnv.das=max(P.gameEnv.das,P.gameEnv.mindas)
P.gameEnv.arr=max(P.gameEnv.arr,P.gameEnv.minarr)
P.cur={bk={{}},id=0,color=0,name=0}--shape,shapeID,colorID,nameID P.cur={bk={{}},id=0,color=0,name=0}--shape,shapeID,colorID,nameID
P.sc,P.dir,P.r,P.c={0,0},0,0,0--spinCenter,direction,row,col P.sc,P.dir,P.r,P.c={0,0},0,0,0--spinCenter,direction,row,col
P.curX,P.curY,P.y_img=0,0,0--x,y,ghostY P.curX,P.curY,P.y_img=0,0,0--x,y,ghostY

View File

@@ -50,7 +50,13 @@ local sceneInit={
curBG="glow" curBG="glow"
BGM("blank") BGM("blank")
destroyPlayers() destroyPlayers()
mapCam.zoomK=scene.swap.tar=="mode"and 5 or 1 local cam=mapCam
cam.zoomK=scene.swap.tar=="mode"and 5 or 1
if cam.sel then
local M=modes[cam.sel]
cam.x,cam.y=M.x*cam.k+180,M.y*cam.k
cam.x1,cam.y1=cam.x,cam.y
end
end, end,
custom=function() custom=function()
sceneTemp=1--option select sceneTemp=1--option select

View File

@@ -20,12 +20,12 @@ end
function toTime(s) function toTime(s)
if s<60 then if s<60 then
return format("%.3fs",s) return format("%.3f",s)
elseif s<3600 then elseif s<3600 then
return format("%dm%.2fs",int(s/60),s%60) return format("%d:%.2f",int(s/60),s%60)
else else
local h=int(s/3600) local h=int(s/3600)
return format("%dh%dm%.2fs",h,int(s-h/60),s%60) return format("%d:%d:%.2f",h,int(s-h/60),s%60)
end end
end end
function mStr(s,x,y) function mStr(s,x,y)
@@ -145,53 +145,65 @@ function restoreVirtualKey()
end end
function copyBoard() function copyBoard()
local str="" local str=""
for y=1,20 do local H=20
for y=20,1,-1 do
for x=1,10 do
if preField[y][x]~=0 then
H=y
goto L
end
end
end
::L::
for y=1,H do
local L="" local L=""
for x=1,10 do for x=1,10 do
local s=preField[y][x] local s=preField[y][x]
if s>7 then s=s-1 end if s>7 then s=s-1 end
L=L..char(66+s) L=L..char(66+s)
end end
str=str..L.."\n" -- str=str..L.."\n"
end end
love.system.setClipboardText("Techmino sketchpad:\n"..str) love.system.setClipboardText("Techmino sketchpad:"..str)
TEXT(text.copySuccess,350,360,40,"appear",.5) TEXT(text.copySuccess,350,360,40,"appear",.5)
end end
function pasteBoard() function pasteBoard()
local str=love.system.getClipboardText() local str=love.system.getClipboardText()
local len=#str local len=#str
local s,p,P,_=0,1,10--sum,pStr,pField local _
if sub(str,1,20)=="Techmino sketchpad:\n"then local p,P=1,10--sum,pStr,pField(r*10+(c-1))
p=21 p=find(str,":")
else if p then
p=find(str,":")
if p then
p=p+1
else
p=find(str,"[A-N]")
end
end
::L1::
_=byte(str,p)
if _<65 or _>78 then
p=p+1 p=p+1
goto L1 else
end p=find(str,"[A-N]")
::L2:: if not p then
if s==200 then return end
if p>len then
if s~=200 then
goto E goto E
end end
end end--int p*//head
_=byte(sub(str,p))-66 ::L::
_=byte(str,p)
if P==210 then
return
elseif not _ then
if P%10~=0 then
goto E
else
return
end
end--end check
_=_-66
if _<-1 or _>12 then
p=p+1
goto L
end--skip illegal char
if _>-2 and _<13 then if _>-2 and _<13 then
if _>7 then _=_+1 end if _>7 then _=_+1 end
preField[int(P/10)][P%10+1]=_ preField[int(P/10)][P%10+1]=_
s,P=s+1,P+1 P=P+1
end end
p=p+1 p=p+1
goto L2 goto L
::E:: ::E::
TEXT(text.dataCorrupted,350,360,35,"flicker",.5) TEXT(text.dataCorrupted,350,360,35,"flicker",.5)
end end

View File

@@ -1,6 +1,3 @@
--[[
big bang未完成
]]
local S=[=[ local S=[=[
Patron(rmb10+): Patron(rmb10+):
Fireboos Fireboos
@@ -34,12 +31,19 @@ Future outlook:
auto GUI position in any screen size auto GUI position in any screen size
more FXs & 3d features & animations more FXs & 3d features & animations
Encrypt source code(compile to byte code) Encrypt source code(compile to byte code)
0.8.7:
better user experience in mode selecting
support 2^n G falling speed
speed of marathon mode changed
shorter clipboard string(when air above)
attack system/score system little changed
bugs fixed(rank system,some mode error when enter)(again!)
0.8.6: 0.8.6:
gamepad can adjust key gamepad can adjust key
add SFX when enter game add SFX when enter game
map GUI little adjusted map GUI little adjusted
event system little changed(no ctrl when scene swapping) event system little changed(no ctrl when scene swapping)
bug fixed(rank system,some mode error when enter) bugs fixed(rank system,some mode error when enter)
0.8.5-: 0.8.5-:
mode map!Brandly new GUI for mode selecting mode map!Brandly new GUI for mode selecting
mode unlock system,not that scary for noob mode unlock system,not that scary for noob

View File

@@ -73,11 +73,11 @@ local virtualkeySet={
},--PC key feedback(top&in a row) },--PC key feedback(top&in a row)
} }
local customSet={ local customSet={
{20,20,1,1,7,1,1,1,3,4,1,2,3}, {3,20,1,1,7,1,1,1,3,4,1,2,3},
{18,20,1,1,7,1,1,1,8,3,8,3,3}, {5,20,1,1,7,1,1,1,8,3,8,3,3},
{22,22,1,1,7,3,1,1,8,4,1,7,7}, {1,22,1,1,7,3,1,1,8,4,1,7,7},
{20,20,1,1,7,1,1,3,8,3,1,7,8}, {3,20,1,1,7,1,1,3,8,3,1,7,8},
{1,11,8,11,4,1,2,1,8,3,1,4,9}, {25,11,8,11,4,1,2,1,8,3,1,4,9},
} }
local function useDefaultSet(n) local function useDefaultSet(n)
for i=1,#customSet[n]do for i=1,#customSet[n]do