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)
t.identity="Techmino"--Save directory name
t.version="11.1"

View File

@@ -38,26 +38,26 @@ local function gameOver()
end
end
end
end
local D=M.score(P)
local L=M.records
local p=#L--排名数-1
if p>0 then
::L::
if M.comp(D,L[p])then--是否靠前
p=p-1
if p>0 then
goto L
local D=M.score(P)
local L=M.records
local p=#L--排名数-1
if p>0 then
::L::
if M.comp(D,L[p])then--是否靠前
p=p-1
if p>0 then
goto L
end
end
end
end
if p<10 then
if p==0 then
P:showText(text.newRecord,0,-100,100,"beat",.5)
if p<10 then
if p==0 then
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
ins(L,p+1,D)
if L[11]then L[11]=nil end
saveRecord(M.saveFileName,L)
end
end
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则减半
B2B:增加1~2(techrash)/1~3(spin)攻击
B3B:满B2B效果+1额外抵挡
PC:将其它的伤害之和开根号后向上取整,再+6~10(本局内递增)+2额外抵挡
连击:0,0,1,1,2,2,3,3,4,4,3……
普通消除:
1/2/3/4攻击0.25/1.25/2.25/4
特殊消除:
spin1/2/3攻击2/4/6,若mini则减半
B2B:加1(techrash/spin1/spin2)或2(spin3)攻击
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攻击生效较慢,高连击生效最慢
@@ -27,13 +34,12 @@ spin判定:
没有用上的额外抵挡会被丢弃,最后剩下的攻击力会发送给对手
back to back(B2B)点数说明:
B2B点数的范围在0~1200
在40及以上特殊消除时B2B,在1000以上特殊消除时B3B,1200封顶
消四+100
空spin加20,不超过1000
spin1~3+50/100/180 (mini*.5)
B2B点数的范围在0~1200,在点数>=40时进行特殊消除为B2B,>1000时特殊消除为B3B
普通消除-250
1000以上空放一块-40(不减到低于1000)
spin1/2/3:+50/100/180(mini减半)
消四:+100
空spin:+20,此法得到的点数不能超过1000
当点数在1000以上时空放一块-40(不减到低于1000)
混战模式说明:
许多玩家同时进行一局游戏对手都是AI,不是真人).随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加.淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力.

View File

@@ -54,7 +54,7 @@ return{
bgm="背景音乐:",
},
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,""},
wait=nil,
fall=nil,
@@ -171,7 +171,7 @@ return{
]],
support="支持作者",
group="官方QQ群",
warning=" 止 私 自 传 播",
warning="止直接传播游戏本体",
WidgetText={
main={
lang="言/A",

View File

@@ -39,7 +39,7 @@ return{
custom="自定义游戏",
customOption={
drop="下落延迟:",
drop="下落速度:",
lock="锁定延迟:",
wait="放块延迟:",
fall="消行延迟:",
@@ -54,7 +54,7 @@ return{
bgm="背景音乐:",
},
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,""},
wait=nil,
fall=nil,
@@ -171,7 +171,7 @@ return{
]],
support="支持作者",
group="官方QQ群",
warning=" 止 私 自 传 播",
warning="止直接传播游戏本体",
WidgetText={
main={
lang="言/A",

View File

@@ -52,7 +52,7 @@ return{
bgm="BGM:",
},
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,""},
wait=nil,
fall=nil,
@@ -170,7 +170,7 @@ Lib used:
]],
support="Support Author",
group="Official QQ Group",
warning="DO NOT DISTRIBUTE",
warning="DO NOT SHARE APP",
WidgetText={
main={
lang="言/A",

View File

@@ -160,7 +160,7 @@ customID={
"bg","bgm",
}
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},
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},

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 rem=table.remove
package.path="?.lua"
NULL=function()end
package.path="?.lua"--boost
function NULL()end
--Libs
-------------------------------------------------------------
system=sys.getOS()
@@ -51,7 +51,7 @@ kb.setTextInput(false)
ms.setVisible(false)
--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}
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
@@ -798,9 +798,9 @@ end
local lastX,lastY--last clickDown pos
function love.mousepressed(x,y,k,t,num)
mouseShow=true
if devMode>0 then print(x,y)end
if t or scene.swapping then return end
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
mouseDown[scene.cur](mx,my,k)
elseif k==2 then
@@ -816,8 +816,8 @@ function love.mousepressed(x,y,k,t,num)
end
function love.mousemoved(x,y,dx,dy,t)
mouseShow=true
if t or scene.swapping then return end
mx,my=xOy:inverseTransformPoint(x,y)
if t or scene.swapping then return end
dx,dy=dx/scr.k,dy/scr.k
if mouseMove[scene.cur]then
mouseMove[scene.cur](mx,my,dx,dy)
@@ -835,8 +835,8 @@ function love.mousemoved(x,y,dx,dy,t)
end
end
function love.mousereleased(x,y,k,t,num)
if t or scene.swapping then return end
mx,my=xOy:inverseTransformPoint(x,y)
if t or scene.swapping then return end
if mouseUp[scene.cur]then
mouseUp[scene.cur](mx,my,k)
end

View File

@@ -42,7 +42,7 @@ return{
Event.win(P,"finish")
end
end,
arr=1,
minarr=1,
bg="game3",bgm="shining terminal",
},
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,
getRank=function(P)
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,
}

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,
getRank=function(P)
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,
}

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,
getRank=function(P)
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,
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -41,7 +41,7 @@ return{
mDraw(drawableText.tsd,-82,407)
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,
getRank=function(P)
local T=P.modeData.event
@@ -50,6 +50,7 @@ return{
T>=20 and 4 or
T>=15 and 3 or
T>=10 and 2 or
T>=6 and 1
T>=6 and 1 or
T>=1 and 0
end,
}

View File

@@ -41,7 +41,7 @@ return{
mDraw(drawableText.tsd,-82,407)
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,
getRank=function(P)
local T=P.modeData.event
@@ -50,6 +50,7 @@ return{
T>=19 and 4 or
T>=16 and 3 or
T>=13 and 2 or
T>=10 and 1
T>=10 and 1 or
T>=1 and 0
end,
}

View File

@@ -41,7 +41,7 @@ return{
mDraw(drawableText.tsd,-82,407)
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,
getRank=function(P)
local T=P.modeData.event
@@ -50,6 +50,7 @@ return{
T>=18 and 4 or
T>=16 and 3 or
T>=14 and 2 or
T>=12 and 1
T>=12 and 1 or
T>=1 and 0
end,
}

View File

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

View File

@@ -27,6 +27,7 @@ local gameEnv0={
freshLimit=1e99,easyFresh=true,
fine=false,fineKill=false,
target=1e99,dropPiece=NULL,
mindas=0,minarr=0,
bg="none",bgm="race"
}
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
{300,1000,2200},--O
{300,1000,1800},--I
}--MUL:1.2,2.0
--Techrash:1K;MUL:1.3,1.8
--Mini*=.5
}
--B2BMUL:1.2/2.0
--Techrash:1K;MUL:1.3/1.8
--Mini*=.6
local visible_opt={show=1e99,time=300,fast=20,none=5}
local reAtk={0,0,1,1,1,2,2,3,3}
local reDef={0,1,1,2,3,3,4,4,5}
@@ -724,11 +726,23 @@ function player.update(P,dt)
goto stop
end
if P.curY~=P.y_img then
if P.dropDelay>=0 then
P.dropDelay=P.dropDelay-1
if P.dropDelay>0 then goto stop end
local D=P.dropDelay
if D>1 then
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
P.curY=P.curY-1
P.spinLast=false
if P.y_img~=P.curY then
P.dropDelay=P.gameEnv.drop
@@ -1507,7 +1521,7 @@ function player.drop(P)--Place piece
P:showText(text.mini,0,-80,35,"appear")
send=send*.5
sendTime=sendTime+60
cscore=cscore*.5
cscore=cscore*.6
P.b2b=P.b2b+b2bPoint[cc]*.5
if P.human then
VOICE("mini",CHN)
@@ -1524,7 +1538,7 @@ function player.drop(P)--Place piece
elseif #P.field>0 then
P.b2b=max(P.b2b-250,0)
P:showText(text.clear[cc],0,-30,27+cc*3,"appear",(8-cc)*.3)
send=cc-1
send=cc-.75
sendTime=20+send*20
cscore=cscore+clearSCR[cc]
P.lastClear=cc
@@ -1542,7 +1556,7 @@ function player.drop(P)--Place piece
end
if #P.field==0 then
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
sendTime=sendTime+60
if P.stat.row>4 then
@@ -2100,6 +2114,9 @@ function newPlayer(id,x,y,size,AIdata)
P.gameEnv[k]=v
end
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.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

View File

@@ -50,7 +50,13 @@ local sceneInit={
curBG="glow"
BGM("blank")
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,
custom=function()
sceneTemp=1--option select

View File

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

View File

@@ -1,6 +1,3 @@
--[[
big bang未完成
]]
local S=[=[
Patron(rmb10+):
Fireboos
@@ -34,12 +31,19 @@ Future outlook:
auto GUI position in any screen size
more FXs & 3d features & animations
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:
gamepad can adjust key
add SFX when enter game
map GUI little adjusted
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-:
mode map!Brandly new GUI for mode selecting
mode unlock system,not that scary for noob

View File

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