Compare commits

...

2 Commits

Author SHA1 Message Date
MrZ_26
4da080c6f5 0.8.7 2020-02-14 19:26:57 +08:00
MrZ_26
5f62127f28 0.8.6 2020-02-14 00:22:15 +08:00
79 changed files with 454 additions and 310 deletions

BIN
SFX/enter.ogg Normal file

Binary file not shown.

View File

@@ -1,4 +1,4 @@
gameVersion="Alpha V0.8.5-" 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

@@ -23,29 +23,10 @@ end
-------------------------<Events>------------------------- -------------------------<Events>-------------------------
local function gameOver() local function gameOver()
local M=curMode local M=curMode
if M.score then local R=M.getRank
if R then
local P=players[1] local P=players[1]
local D=M.score(P) R=R(P)--new rank
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
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
local R=M.getRank(P)--new rank
if R then if R then
local r=modeRanks[M.id]--old rank local r=modeRanks[M.id]--old rank
if R>r then if R>r then
@@ -57,10 +38,30 @@ local function gameOver()
end end
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
end
end
end
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
end end
end end
end--Save record end--Save record
local function die(P) local function die(P)--Same thing when win/lose,not really die!
P.alive=false P.alive=false
P.control=false P.control=false
P.timing=false P.timing=false
@@ -76,7 +77,7 @@ local function die(P)
P.visTime[i][j]=min(P.visTime[i][j],20) P.visTime[i][j]=min(P.visTime[i][j],20)
end end
end end
end--Same thing when win/lose/finish end
Event={} Event={}
function Event.reach_winCheck(P) function Event.reach_winCheck(P)
if P.stat.row>=P.gameEnv.target then if P.stat.row>=P.gameEnv.target then

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,不是真人).随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加.淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力.

BIN
font.ttf

Binary file not shown.

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

@@ -58,7 +58,7 @@ blockColor={
} }
sfx={ sfx={
"welcome", "welcome",
"click", "click","enter",
"error","error_long", "error","error_long",
--Stereo sfxs(cannot set position) --Stereo sfxs(cannot set position)
"button","swipe", "button","swipe",
@@ -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
@@ -253,13 +253,19 @@ function mouseClick.mode(x,y,k)
local _=cam.sel local _=cam.sel
if not cam.sel or x<920 then if not cam.sel or x<920 then
local __=onMode(x,y) local __=onMode(x,y)
if __ and _~=__ then if _~=__ then
SFX("click") if __ then
cam.moving=true SFX("click")
_=modes[__] cam.moving=true
cam.x,cam.y=_.x*cam.k+180,_.y*cam.k _=modes[__]
cam.x=_.x*cam.k+180
cam.y=_.y*cam.k
cam.sel=__
else
cam.sel=nil
cam.x=cam.x-180
end
end end
cam.sel=__
end end
cam.keyCtrl=false cam.keyCtrl=false
end end
@@ -470,9 +476,11 @@ function keyDown.setting_key(key)
for y=1,20 do for y=1,20 do
if setting.keyMap[l][y]==key then if setting.keyMap[l][y]==key then
setting.keyMap[l][y]="" setting.keyMap[l][y]=""
goto L
end end
end end
end end
::L::
setting.keyMap[s.board][s.kb]=key setting.keyMap[s.board][s.kb]=key
SFX("reach",.5) SFX("reach",.5)
s.kS=false s.kS=false
@@ -515,31 +523,33 @@ function gamepadDown.setting_key(key)
for y=1,20 do for y=1,20 do
if setting.keyMap[l][y]==key then if setting.keyMap[l][y]==key then
setting.keyMap[l][y]="" setting.keyMap[l][y]=""
goto L
end end
end end
end end
::L::
setting.keyMap[8+s.board][s.js]=key setting.keyMap[8+s.board][s.js]=key
SFX("reach",.5) SFX("reach",.5)
s.jS=false s.jS=false
elseif key=="start"then elseif key=="start"then
s.jS=true s.jS=true
SFX("lock",.5) SFX("lock",.5)
elseif key=="up"then elseif key=="dpup"then
if s.js>1 then if s.js>1 then
s.js=s.js-1 s.js=s.js-1
SFX("move",.5) SFX("move",.5)
end end
elseif key=="down"then elseif key=="dpdown"then
if s.js<20 then if s.js<20 then
s.js=s.js+1 s.js=s.js+1
SFX("move",.5) SFX("move",.5)
end end
elseif key=="left"then elseif key=="dpleft"then
if s.board>1 then if s.board>1 then
s.board=s.board-1 s.board=s.board-1
SFX("rotate",.5) SFX("rotate",.5)
end end
elseif key=="right"then elseif key=="dpright"then
if s.board<8 then if s.board<8 then
s.board=s.board+1 s.board=s.board+1
SFX("rotate",.5) SFX("rotate",.5)
@@ -647,7 +657,7 @@ function touchMove.play(id,x,y,dx,dy)
end end
end end
function keyDown.play(key) function keyDown.play(key)
if key=="escape"and not scene.swapping then if key=="escape"then
(frame<180 and back or pauseGame)() (frame<180 and back or pauseGame)()
return return
end end
@@ -745,7 +755,7 @@ local function widgetControl_key(i)
widget_sel=select(2,next(Widget[scene.cur])) widget_sel=select(2,next(Widget[scene.cur]))
end end
elseif i=="space"or i=="return"then elseif i=="space"or i=="return"then
if not scene.swapping and widget_sel then if widget_sel then
widgetPress(widget_sel) widgetPress(widget_sel)
end end
elseif i=="left"or i=="right"then elseif i=="left"or i=="right"then
@@ -769,10 +779,8 @@ local function widgetControl_gamepad(i)
widget_sel=select(2,next(Widget[scene.cur])) widget_sel=select(2,next(Widget[scene.cur]))
end end
elseif i=="start"then elseif i=="start"then
if not scene.swapping and widget_sel then if widget_sel then
if not scene.swapping and widget_sel then widgetPress(widget_sel)
widgetPress(widget_sel)
end
end end
elseif i=="dpleft"or i=="dpright"then elseif i=="dpleft"or i=="dpright"then
if widget_sel then if widget_sel then
@@ -789,26 +797,27 @@ local function widgetControl_gamepad(i)
end 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)
if devMode>0 then print(x,y)end mouseShow=true
if t 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
scene.back() scene.back()
end end
if k==1 then if k==1 then
if widget_sel and not scene.swapping then if widget_sel then
widgetPress(widget_sel,mx,my) widgetPress(widget_sel,mx,my)
end end
end end
lastX=mx lastX=mx
lastY=my lastY=my
mouseShow=true
end end
function love.mousemoved(x,y,dx,dy,t) function love.mousemoved(x,y,dx,dy,t)
if t then return end mouseShow=true
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)
@@ -824,11 +833,10 @@ function love.mousemoved(x,y,dx,dy,t)
end end
end end
end end
mouseShow=true
end end
function love.mousereleased(x,y,k,t,num) function love.mousereleased(x,y,k,t,num)
if t 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
@@ -837,11 +845,13 @@ function love.mousereleased(x,y,k,t,num)
end end
end end
function love.wheelmoved(x,y) function love.wheelmoved(x,y)
if scene.swapping then return end
if wheelMoved[scene.cur]then wheelMoved[scene.cur](x,y)end if wheelMoved[scene.cur]then wheelMoved[scene.cur](x,y)end
end end
function love.touchpressed(id,x,y) function love.touchpressed(id,x,y)
mouseShow=false mouseShow=false
if scene.swapping then return end
if not touching then if not touching then
touching=id touching=id
love.touchmoved(id,x,y,0,0) love.touchmoved(id,x,y,0,0)
@@ -853,6 +863,7 @@ function love.touchpressed(id,x,y)
end end
end end
function love.touchmoved(id,x,y,dx,dy) function love.touchmoved(id,x,y,dx,dy)
if scene.swapping then return end
x,y=xOy:inverseTransformPoint(x,y) x,y=xOy:inverseTransformPoint(x,y)
if touchMove[scene.cur]then if touchMove[scene.cur]then
touchMove[scene.cur](id,x,y,dx/scr.k,dy/scr.k) touchMove[scene.cur](id,x,y,dx/scr.k,dy/scr.k)
@@ -873,10 +884,11 @@ function love.touchmoved(id,x,y,dx,dy)
end end
end end
function love.touchreleased(id,x,y) function love.touchreleased(id,x,y)
if scene.swapping then return end
x,y=xOy:inverseTransformPoint(x,y) x,y=xOy:inverseTransformPoint(x,y)
if id==touching then if id==touching then
touching=nil touching=nil
if widget_sel and not scene.swapping then if widget_sel then
widgetPress(widget_sel,x,y) widgetPress(widget_sel,x,y)
end end
widget_sel=nil widget_sel=nil
@@ -890,6 +902,7 @@ function love.touchreleased(id,x,y)
end end
function love.keypressed(i) function love.keypressed(i)
mouseShow=false mouseShow=false
if scene.swapping then return end
if i=="f8"then devMode=0 if i=="f8"then devMode=0
elseif i=="f9"then devMode=1 elseif i=="f9"then devMode=1
elseif i=="f10"then devMode=2 elseif i=="f10"then devMode=2
@@ -926,6 +939,7 @@ function love.keypressed(i)
end end
end end
function love.keyreleased(i) function love.keyreleased(i)
if scene.swapping then return end
if keyUp[scene.cur]then keyUp[scene.cur](i)end if keyUp[scene.cur]then keyUp[scene.cur](i)end
end end
@@ -939,6 +953,7 @@ local keyMirror={
} }
function love.gamepadpressed(joystick,i) function love.gamepadpressed(joystick,i)
mouseShow=false mouseShow=false
if scene.swapping then return end
if gamepadDown[scene.cur]then gamepadDown[scene.cur](i) if gamepadDown[scene.cur]then gamepadDown[scene.cur](i)
elseif keyDown[scene.cur]then keyDown[scene.cur](keyMirror[i]or i) elseif keyDown[scene.cur]then keyDown[scene.cur](keyMirror[i]or i)
elseif i=="back"then scene.back() elseif i=="back"then scene.back()
@@ -946,6 +961,7 @@ function love.gamepadpressed(joystick,i)
end end
end end
function love.gamepadreleased(joystick,i) function love.gamepadreleased(joystick,i)
if scene.swapping then return end
if gamepadUp[scene.cur]then gamepadUp[scene.cur](i) if gamepadUp[scene.cur]then gamepadUp[scene.cur](i)
end end
end end
@@ -1170,8 +1186,6 @@ function love.run()
for N,a,b,c,d,e in POLL()do for N,a,b,c,d,e in POLL()do
if N=="quit"then if N=="quit"then
destroyPlayers() destroyPlayers()
saveStat()
saveSetting()
goto END goto END
elseif love[N]then elseif love[N]then
love[N](a,b,c,d,e) love[N](a,b,c,d,e)
@@ -1206,7 +1220,7 @@ local F=love.filesystem
if F.getInfo("data")then if F.getInfo("data")then
F.write("data.dat",F.read("data")) F.write("data.dat",F.read("data"))
F.remove("data") F.remove("data")
end end
if F.getInfo("userdata")then if F.getInfo("userdata")then
F.write("data.dat",F.read("userdata")) F.write("data.dat",F.read("userdata"))
F.remove("userdata") F.remove("userdata")
@@ -1223,7 +1237,6 @@ end
FILE={ FILE={
data=F.newFile("data.dat"), data=F.newFile("data.dat"),
setting=F.newFile("setting.dat"), setting=F.newFile("setting.dat"),
vk=F.newFile("vk"),
} }
if F.getInfo("data.dat")then loadStat()end if F.getInfo("data.dat")then loadStat()end
if F.getInfo("setting.dat")then if F.getInfo("setting.dat")then
@@ -1234,5 +1247,5 @@ else
setting.VKSwitch=false setting.VKSwitch=false
end end
math.randomseed(os.time()*626) math.randomseed(os.time()*626)
swapLanguage(setting.lang) changeLanguage(setting.lang)
changeBlockSkin(setting.skin) changeBlockSkin(setting.skin)

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

@@ -34,11 +34,11 @@ return{
mStr(P.stat.clear_4,-82,340) mStr(P.stat.clear_4,-82,340)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
if L==200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=140 and 5 or T<=140 and 5 or
@@ -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

@@ -36,11 +36,11 @@ return{
mStr(P.stat.clear_4,-82,340) mStr(P.stat.clear_4,-82,340)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
if L==200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=150 and 5 or T<=150 and 5 or
@@ -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

@@ -36,11 +36,11 @@ return{
mStr(P.stat.clear_4,-82,340) mStr(P.stat.clear_4,-82,340)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
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<=180 and 5 or
@@ -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

@@ -35,11 +35,11 @@ return{
mStr(P.stat.clear_4,-82,340) mStr(P.stat.clear_4,-82,340)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
if L==200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=150 and 5 or T<=150 and 5 or
@@ -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

@@ -37,15 +37,16 @@ return{
mStr(P.stat.clear_4,-82,340) mStr(P.stat.clear_4,-82,340)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
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

@@ -54,7 +54,7 @@ return{
gc.rectangle("fill",-125,375,90,4) gc.rectangle("fill",-125,375,90,4)
end, end,
score=function(P)return{P.stat.row,P.stat.score}end, score=function(P)return{P.stat.row,P.stat.score}end,
scoreDisp=function(D)return D[1].." Rows "..D[2]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, 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 L=P.stat.row local L=P.stat.row
@@ -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

@@ -40,7 +40,7 @@ return{
mDraw(drawableText.wave,-82,375) mDraw(drawableText.wave,-82,375)
end, end,
score=function(P)return{P.modeData.event,P.stat.row}end, score=function(P)return{P.modeData.event,P.stat.row}end,
scoreDisp=function(D)return D[1].." Waves "..D[2].." Rows"end, scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"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 W=P.modeData.event local W=P.modeData.event
@@ -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

@@ -39,7 +39,7 @@ return{
mDraw(drawableText.wave,-82,375) mDraw(drawableText.wave,-82,375)
end, end,
score=function(P)return{P.modeData.event,P.stat.row}end, score=function(P)return{P.modeData.event,P.stat.row}end,
scoreDisp=function(D)return D[1].." Waves "..D[2].." Rows"end, scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"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 W=P.modeData.event local W=P.modeData.event
@@ -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

@@ -32,16 +32,22 @@ return{
mStr(R>=0 and R or 0,-82,280) mStr(R>=0 and R or 0,-82,280)
end, end,
score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}end, score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..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

@@ -32,16 +32,22 @@ return{
mStr(R>=0 and R or 0,-82,280) mStr(R>=0 and R or 0,-82,280)
end, end,
score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}end, score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}end,
scoreDisp=function(D)return D[1].." Rows "..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

@@ -49,7 +49,7 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
end, end,
score=function(P)return{P.modeData.point}end, score=function(P)return{P.modeData.point}end,
scoreDisp=function(D)return D[1].." Rows"end, scoreDisp=function(D)return D[1].." Lines"end,
comp=function(a,b)return a[1]>b[1]end, comp=function(a,b)return a[1]>b[1]end,
getRank=function(P) getRank=function(P)
local L=P.modeData.point local L=P.modeData.point
@@ -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,24 +43,25 @@ 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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
if L==200 then if L>=200 then
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()
@@ -46,20 +46,21 @@ return{
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
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<=100 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

@@ -19,7 +19,6 @@ return{
env={ env={
drop=30,lock=45, drop=30,lock=45,
freshLimit=10, freshLimit=10,
visible="time",
task=function(P) task=function(P)
if not P.control then return end if not P.control then return end
P.modeData.counter=P.modeData.counter+1 P.modeData.counter=P.modeData.counter+1
@@ -54,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

@@ -19,7 +19,6 @@ return{
env={ env={
drop=30,lock=45, drop=30,lock=45,
freshLimit=10, freshLimit=10,
visible="time",
task=function(P) task=function(P)
if not P.control then return end if not P.control then return end
P.modeData.counter=P.modeData.counter+1 P.modeData.counter=P.modeData.counter+1
@@ -59,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

@@ -19,7 +19,6 @@ return{
env={ env={
drop=30,lock=45, drop=30,lock=45,
freshLimit=10, freshLimit=10,
visible="time",
task=function(P) task=function(P)
if not P.control then return end if not P.control then return end
P.modeData.counter=P.modeData.counter+1 P.modeData.counter=P.modeData.counter+1
@@ -55,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

@@ -19,7 +19,6 @@ return{
env={ env={
drop=30,lock=45, drop=30,lock=45,
freshLimit=10, freshLimit=10,
visible="time",
task=function(P) task=function(P)
if not P.control then return end if not P.control then return end
P.modeData.counter=P.modeData.counter+1 P.modeData.counter=P.modeData.counter+1
@@ -59,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

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_ultimate(P) local function tech_check_ultimate(P)
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,16 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
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

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_easy(P) local function tech_check_easy(P)
if #P.cleared>0 and P.b2b<40 then if #P.cleared>0 and P.b2b<40 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,16 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
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

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_ultimate(P) local function tech_check_ultimate(P)
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,16 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
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

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_hard(P) local function tech_check_hard(P)
if #P.cleared>0 and P.lastClear<10 then if #P.cleared>0 and P.lastClear<10 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,16 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
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

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_ultimate(P) local function tech_check_ultimate(P)
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,16 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
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

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_easy(P) local function tech_check_easy(P)
if #P.cleared>0 and P.b2b<40 then if #P.cleared>0 and P.b2b<40 then
Event.lose(P) Event.lose(P)
@@ -39,15 +40,16 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
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

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_ultimate(P) local function tech_check_ultimate(P)
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
Event.lose(P) Event.lose(P)
@@ -40,15 +41,16 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
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

@@ -1,3 +1,4 @@
local format=string.format
local function tech_check_hard(P) local function tech_check_hard(P)
if #P.cleared>0 and P.lastClear<10 then if #P.cleared>0 and P.lastClear<10 then
Event.lose(P) Event.lose(P)
@@ -40,15 +41,16 @@ return{
mDraw(drawableText.eff,-82,475) mDraw(drawableText.eff,-82,475)
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,
scoreDisp=function(D)return D[1].." Rows "..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)
local L=P.stat.row local L=P.stat.row
return return
L==200 and 5 or L>=200 and 5 or
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

@@ -213,7 +213,7 @@ function Pnt.mode()
local M=MM[_] local M=MM[_]
if R[_]then if R[_]then
gc.setLineWidth(8) gc.setLineWidth(8)
gc.setColor(1,1,1,.15) gc.setColor(1,1,1,.2)
for _=1,#M.unlock do for _=1,#M.unlock do
local m=M.unlock[_] local m=M.unlock[_]
if R[m]then if R[m]then
@@ -223,8 +223,8 @@ function Pnt.mode()
end end
local S=M.size local S=M.size
local d=((M.x-(cam.x1-180)/cam.k1)^2+(M.y-cam.y1/cam.k1)^2)^.5 local d=((M.x-(cam.x1+(cam.sel and -180 or 0))/cam.k1)^2+(M.y-cam.y1/cam.k1)^2)^.55
if d<600 then S=S*(1.3-d*0.0005) end if d<500 then S=S*(1.25-d*0.0005) end
gc.setColor(modeRankColor[modeRanks[M.id]]) gc.setColor(modeRankColor[modeRanks[M.id]])
if M.shape==1 then--Rectangle if M.shape==1 then--Rectangle
gc.rectangle("fill",M.x-S,M.y-S,2*S,2*S) gc.rectangle("fill",M.x-S,M.y-S,2*S,2*S)

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

@@ -47,10 +47,16 @@ local sceneInit={
end end
end, end,
mode=function() mode=function()
curBG="none" 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
@@ -236,7 +242,8 @@ function scene.push(tar,style)
end end
end end
function scene.pop() function scene.pop()
scene.seq={} local _=scene.seq
_[#_-1]=nil
end end
function scene.swapTo(tar,style) function scene.swapTo(tar,style)
local S=scene.swap local S=scene.swap
@@ -253,15 +260,13 @@ function scene.swapTo(tar,style)
end end
end end
function scene.back() function scene.back()
if not scene.swapping then if backFunc[scene.cur] then backFunc[scene.cur]()end
if backFunc[scene.cur] then backFunc[scene.cur]()end --func when scene end
--func when scene end local m=#scene.seq
local m=#scene.seq if m>0 then
if m>0 then scene.swapTo(scene.seq[m-1],scene.seq[m])
scene.swapTo(scene.seq[m-1],scene.seq[m]) scene.seq[m],scene.seq[m-1]=nil
scene.seq[m],scene.seq[m-1]=nil --Poll&Back to preScene
--Poll&Back to preScene
end
end end
end end
return scene return scene

View File

@@ -20,12 +20,12 @@ end
function toTime(s) function toTime(s)
if s<60 then if s<60 then
return format("%.2fs",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)
@@ -95,7 +95,7 @@ local drawableTextLoad={
"noScore", "noScore",
"highScore", "highScore",
} }
function swapLanguage(l) function changeLanguage(l)
text=require("language/"..langID[l]) text=require("language/"..langID[l])
for S,L in next,Widget do for S,L in next,Widget do
for N,W in next,L do for N,W in next,L do
@@ -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
@@ -305,6 +317,7 @@ function loadGame(M)
drawableText.levelName:set(M.level[lang]) drawableText.levelName:set(M.level[lang])
needResetGameData=true needResetGameData=true
scene.swapTo("play","fade_togame") scene.swapTo("play","fade_togame")
SFX("enter")
end end
function resetPartGameData() function resetPartGameData()
gameResult=false gameResult=false
@@ -614,8 +627,8 @@ function saveSetting()
F:flush() F:flush()
F:close() F:close()
if _ then if _ then
TEXT(text.settingSaved,640,360,80,"appear") TEXT(text.settingSaved,370,330,30,"appear")
else else
TEXT(text.settingSavingError..mes,640,360,40,"appear",.4) TEXT(text.settingSavingError.."123",370,350,20,"appear",.3)
end end
end end

View File

@@ -1,6 +1,3 @@
--[[
big bang未完成
]]
local S=[=[ local S=[=[
Patron(rmb10+): Patron(rmb10+):
Fireboos Fireboos
@@ -34,13 +31,27 @@ 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
add SFX when enter game
map GUI little adjusted
event system little changed(no ctrl when scene swapping)
bugs fixed(rank system,some mode error when enter)
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
every mode has rank calculating method(may some mistakes/inappropriate number) every mode has rank calculating method(may some mistakes/inappropriate number)
save 10 best recoreds for each mode save 10 best recoreds for each mode
can save/share custom map now can save/share custom map now
new mode:Big Bang new mode:Big Bang
button appearance changed
better widget performence better widget performence
many bug fixed many bug fixed
0.8.4: 0.8.4:

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
@@ -142,7 +142,7 @@ local Widget={
stat= newButton(370,460,200,160,C.lightCyan, 43,function()scene.push()scene.swapTo("stat")end, nil,"lang"), stat= newButton(370,460,200,160,C.lightCyan, 43,function()scene.push()scene.swapTo("stat")end, nil,"lang"),
lang= newButton(150,610,160,100,C.lightGreen, 45,function() lang= newButton(150,610,160,100,C.lightGreen, 45,function()
setting.lang=setting.lang%#langName+1 setting.lang=setting.lang%#langName+1
swapLanguage(setting.lang) changeLanguage(setting.lang)
TEXT(text.lang,370,610,50,"appear",1.6) TEXT(text.lang,370,610,50,"appear",1.6)
end,nil,"quit"), end,nil,"quit"),
quit= newButton(590,460,200,160,C.lightGrey, 55,function()VOICE("bye")scene.swapTo("quit","slowFade")end,nil,"play"), quit= newButton(590,460,200,160,C.lightGrey, 55,function()VOICE("bye")scene.swapTo("quit","slowFade")end,nil,"play"),