Merge branch 'main' into main

This commit is contained in:
user670
2021-04-22 15:39:42 +08:00
committed by GitHub
157 changed files with 1241 additions and 1084 deletions

View File

@@ -2,14 +2,11 @@ local data=love.data
local gc=love.graphics
local gc_setColor,gc_setLineWidth,gc_setShader=gc.setColor,gc.setLineWidth,gc.setShader
local gc_push,gc_pop,gc_origin=gc.push,gc.pop,gc.origin
local gc_push,gc_pop,gc_origin,gc_translate=gc.push,gc.pop,gc.origin,gc.translate
local gc_draw,gc_rectangle,gc_circle=gc.draw,gc.rectangle,gc.circle
local max,int,rnd=math.max,math.floor,math.random
local sin=math.sin
local sub=string.sub
local int,rnd=math.floor,math.random
local char,byte=string.char,string.byte
local ins,rem=table.insert,table.remove
local YIELD=YIELD
@@ -257,14 +254,17 @@ function copyQuestArgs()
ENV.sequence
return str
end
function pasteQuestArgs(str)
if #str<4 then return end
local ENV=CUSTOMENV
ENV.holdCount= byte(str,1)-48
ENV.ospin= byte(str,2)~=90
ENV.missionKill= byte(str,3)~=90
ENV.sequence= sub(str,4)
return true
do--function pasteQuestArgs(str)
local sub=string.sub
function pasteQuestArgs(str)
if #str<4 then return end
local ENV=CUSTOMENV
ENV.holdCount= byte(str,1)-48
ENV.ospin= byte(str,2)~=90
ENV.missionKill= byte(str,3)~=90
ENV.sequence= sub(str,4)
return true
end
end
@@ -467,7 +467,6 @@ end
--Game
function generateLine(hole)
-- return 2^10-1-2^(hole-1)
return 1023-2^(hole-1)
end
function freshDate(mode)
@@ -500,16 +499,6 @@ function legalGameTime()--Check if today's playtime is legal
end
return true
end
function legalEmail(e)
e=SPLITSTR(e,"@")
if #e~=2 then return false end
if e[1]:sub(-1)=="."or e[2]:sub(-1)=="."then return false end
local e1,e2=SPLITSTR(e[1],"."),SPLITSTR(e[2],".")
if #e1*#e2==0 then return false end
for _,v in next,e1 do if #v==0 then return false end end
for _,v in next,e2 do if #v==0 then return false end end
return true
end
function mergeStat(stat,delta)--Merge delta stat. to global stat.
for k,v in next,delta do
@@ -690,6 +679,7 @@ do--function dumpBasicConfig()
end
end
do--function resetGameData(args)
local YIELD=YIELD
local function tick_showMods()
local time=0
while true do
@@ -790,36 +780,39 @@ do--function resetGameData(args)
collectgarbage()
end
end
function checkWarning()
local P1=PLAYERS[1]
if P1.alive then
if P1.frameRun%26==0 then
local F=P1.field
local height=0--Max height of row 4~7
for x=4,7 do
for y=#F,1,-1 do
if F[y][x]>0 then
if y>height then
height=y
do--function checkWarning()
local max=math.max
function checkWarning()
local P1=PLAYERS[1]
if P1.alive then
if P1.frameRun%26==0 then
local F=P1.field
local height=0--Max height of row 4~7
for x=4,7 do
for y=#F,1,-1 do
if F[y][x]>0 then
if y>height then
height=y
end
break
end
break
end
end
GAME.warnLVL0=math.log(height-(P1.gameEnv.fieldH-5)+P1.atkBuffer.sum*.8)
end
GAME.warnLVL0=math.log(height-(P1.gameEnv.fieldH-5)+P1.atkBuffer.sum*.8)
local _=GAME.warnLVL
if _<GAME.warnLVL0 then
_=_*.95+GAME.warnLVL0*.05
elseif _>0 then
_=max(_-.026,0)
end
GAME.warnLVL=_
elseif GAME.warnLVL>0 then
GAME.warnLVL=max(GAME.warnLVL-.026,0)
end
local _=GAME.warnLVL
if _<GAME.warnLVL0 then
_=_*.95+GAME.warnLVL0*.05
elseif _>0 then
_=max(_-.026,0)
if GAME.warnLVL>1.126 and P1.frameRun%30==0 then
SFX.fplay("warning",SETTING.sfx_warn)
end
GAME.warnLVL=_
elseif GAME.warnLVL>0 then
GAME.warnLVL=max(GAME.warnLVL-.026,0)
end
if GAME.warnLVL>1.126 and P1.frameRun%30==0 then
SFX.fplay("warning",SETTING.sfx_warn)
end
end
@@ -933,7 +926,7 @@ do--function saveRecording()
--Filtering modes that cannot be saved
for _,v in next,noRecList do
if GAME.curModeName:find(v)then
LOG.print("Cannot save recording of this mode now!",COLOR.sky)
LOG.print("Cannot save recording of this mode now!",COLOR.N)
return
end
end
@@ -987,6 +980,7 @@ do--function drawFWM()
--等Techmino发展到一定程度之后会解除这个限制
--最后,别把藏在这里的东西截图/复制出去哦~
--感谢您对Techmino的支持!!!
local sin=math.sin
local setFont,TIME,mStr=setFont,TIME,mStr
function drawFWM()
local t=TIME()
@@ -995,6 +989,22 @@ do--function drawFWM()
mStr(m[_G["\83\69\84\84\73\78\71"]["\108\97\110\103"]or m[1]],240,60+26*sin(t))
end
end
do--function drawSelfProfile()
function drawSelfProfile()
local selfAvatar=USERS.getAvatar(USER.uid)
gc_push("transform")
gc_translate(1280,0)
--Draw avatar
gc_setLineWidth(2)
gc_setColor(.3,.3,.3,.8)gc_rectangle("fill",-260,0,260,80)
gc_setColor(1,1,1)gc_rectangle("line",-260,0,260,80)
gc_rectangle("line",-73,7,66,66,2)
gc_draw(selfAvatar,-72,8,nil,.5)
gc_pop()
end
end
function drawWarning()
if SETTING.warn and GAME.warnLVL>0 then
gc_push("transform")

View File

@@ -4,94 +4,94 @@ local function disableKey(P,key)
end
MODOPT={--Mod options
{no=0,id="NX",name="next",
key="q",x=80,y=230,color="orange",
key="q",x=80,y=230,color="O",
list={0,1,2,3,4,5,6},
func=function(P,O)P.gameEnv.nextCount=O end,
},
{no=1,id="HL",name="hold",
key="w",x=200,y=230,color="orange",
key="w",x=200,y=230,color="O",
list={0,1,2,3,4,5,6},
func=function(P,O)P.gameEnv.holdCount=O end,
unranked=true,
},
{no=2,id="FL",name="hideNext",
key="e",x=320,y=230,color="aqua",
key="e",x=320,y=230,color="A",
list={1,2,3,4,5},
func=function(P,O)P.gameEnv.nextStartPos=O +1 end,
},
{no=3,id="IH",name="infHold",
key="r",x=440,y=230,color="aqua",
key="r",x=440,y=230,color="A",
func=function(P)P.gameEnv.infHold=true end,
unranked=true,
},
{no=4,id="HB",name="hideBlock",
key="y",x=680,y=230,color="purple",
key="y",x=680,y=230,color="V",
func=function(P)P.gameEnv.block=false end,
},
{no=5,id="HG",name="hideGhost",
key="u",x=800,y=230,color="purple",
key="u",x=800,y=230,color="V",
func=function(P)P.gameEnv.ghost=false end,
},
{no=6,id="HD",name="hidden",
key="i",x=920,y=230,color="grape",
key="i",x=920,y=230,color="P",
list={"easy","slow","medium","fast","none"},
func=function(P,O)P.gameEnv.visible=O end,
unranked=true,
},
{no=7,id="HB",name="hideBoard",
key="o",x=1040,y=230,color="grape",
key="o",x=1040,y=230,color="P",
list={"down","up","all"},
func=function(P,O)P.gameEnv.hideBoard=O end,
},
{no=8,id="FB",name="flipBoard",
key="p",x=1160,y=230,color="grass",
key="p",x=1160,y=230,color="J",
list={"U-D","L-R","180"},
func=function(P,O)P.gameEnv.flipBoard=O end,
},
{no=9,id="DT",name="dropDelay",
key="a",x=140,y=350,color="red",
key="a",x=140,y=350,color="R",
list={0,.125,.25,.5,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
func=function(P,O)P.gameEnv.drop=O end,
unranked=true,
},
{no=10,id="LT",name="lockDelay",
key="s",x=260,y=350,color="red",
key="s",x=260,y=350,color="R",
list={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
func=function(P,O)P.gameEnv.lock=O end,
unranked=true,
},
{no=11,id="ST",name="waitDelay",
key="d",x=380,y=350,color="red",
key="d",x=380,y=350,color="R",
list={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
func=function(P,O)P.gameEnv.wait=O end,
unranked=true,
},
{no=12,id="CT",name="fallDelay",
key="f",x=500,y=350,color="red",
key="f",x=500,y=350,color="R",
list={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
func=function(P,O)P.gameEnv.fall=O end,
unranked=true,
},
{no=13,id="LF",name="life",
key="j",x=860,y=350,color="yellow",
key="j",x=860,y=350,color="Y",
list={0,1,2,3,5,10,15,26,42,87,500},
func=function(P,O)P.gameEnv.life=O end,
unranked=true,
},
{no=14,id="FB",name="forceB2B",
key="k",x=980,y=350,color="yellow",
key="k",x=980,y=350,color="Y",
func=function(P)P.gameEnv.b2bKill=true end,
unranked=true,
},
{no=15,id="PF",name="forceFinesse",
key="l",x=1100,y=350,color="yellow",
key="l",x=1100,y=350,color="Y",
func=function(P)P.gameEnv.fineKill=true end,
unranked=true,
},
{no=16,id="TL",name="tele",
key="z",x=200,y=470,color="lGray",
key="z",x=200,y=470,color="lH",
func=function(P)
P.gameEnv.das,P.gameEnv.arr=0,0
P.gameEnv.sddas,P.gameEnv.sdarr=0,0
@@ -99,7 +99,7 @@ MODOPT={--Mod options
unranked=true,
},
{no=17,id="FX",name="noRotation",
key="x",x=320,y=470,color="lGray",
key="x",x=320,y=470,color="lH",
func=function(P)
disableKey(P,3)
disableKey(P,4)
@@ -108,7 +108,7 @@ MODOPT={--Mod options
unranked=true,
},
{no=18,id="GL",name="noMove",
key="c",x=440,y=470,color="lGray",
key="c",x=440,y=470,color="lH",
func=function(P)
disableKey(P,1)disableKey(P,2)
disableKey(P,11)disableKey(P,12)
@@ -118,19 +118,19 @@ MODOPT={--Mod options
unranked=true,
},
{no=19,id="CS",name="customSeq",
key="b",x=680,y=470,color="blue",
key="b",x=680,y=470,color="B",
list={"bag","his4","c2","rnd","mess","reverb"},
func=function(P,O)P.gameEnv.sequence=O end,
unranked=true,
},
{no=20,id="PS",name="pushSpeed",
key="n",x=800,y=470,color="blue",
key="n",x=800,y=470,color="B",
list={.5,1,2,3,5,15,1e99},
func=function(P,O)P.gameEnv.pushSpeed=O end,
unranked=true,
},
{no=21,id="BN",name="boneBlock",
key="m",x=920,y=470,color="blue",
key="m",x=920,y=470,color="B",
list={"on","off"},
func=function(P,O)P.gameEnv.bone=O=="on"end,
},
@@ -148,44 +148,6 @@ PLY_NET={}
FIELD={}--Field(s) for custom game
BAG={}--Sequence for custom game
MISSION={}--Clearing mission for custom game
CUSTOMENV={--gameEnv for cutsom game
--Basic
drop=60,
lock=60,
wait=0,
fall=0,
--Control
nextCount=6,
holdCount=1,
infHold=false,
phyHold=false,
--Visual
bone=false,
--Rule
sequence="bag",
fieldH=20,
ospin=true,
fineKill=false,
b2bKill=false,
easyFresh=true,
deepDrop=false,
visible="show",
freshLimit=1e99,
opponent="X",
life=0,
pushSpeed=3,
missionKill=false,
--Else
bg="none",
bgm="race",
}
GAME={--Global game data
init=false, --If need initializing game when enter scene-play
net=false, --If play net game
@@ -227,6 +189,47 @@ USER=FILE.load("conf/user")or{--User infomation
--Local data
xp=0,lv=1,
}
CUSTOMENV=FILE.load("conf/customEnv")
if not CUSTOMENV or CUSTOMENV.version~=VERSION.code then CUSTOMENV={--gameEnv for cutsom game
version=VERSION.code,
--Basic
drop=1e99,
lock=1e99,
wait=0,
fall=0,
--Control
nextCount=6,
holdCount=1,
infHold=true,
phyHold=false,
--Visual
bone=false,
--Rule
sequence="bag",
fieldH=20,
ospin=true,
fineKill=false,
b2bKill=false,
easyFresh=true,
deepDrop=false,
visible="show",
freshLimit=1e99,
opponent="X",
life=0,
pushSpeed=3,
missionKill=false,
--Else
bg="none",
bgm="infinite",
}end
SETTING={--Settings
--Tuning
das=10,arr=2,dascut=0,
@@ -331,26 +334,26 @@ keyMap=FILE.load("conf/key")or{--Key setting
},
}
VK_org=FILE.load("conf/virtualkey")or{--Virtualkey layout, refresh all VKs' position with this before each game
{ava=true, x=80, y=720-200, r=80,color=COLOR.lime},--moveLeft
{ava=true, x=320, y=720-200, r=80,color=COLOR.lime},--moveRight
{ava=true, x=1280-80, y=720-200, r=80,color=COLOR.red},--rotRight
{ava=true, x=1280-200, y=720-80, r=80,color=COLOR.orange},--rotLeft
{ava=true, x=1280-200, y=720-320, r=80,color=COLOR.magenta},--rot180
{ava=true, x=200, y=720-320, r=80,color=COLOR.cyan},--hardDrop
{ava=true, x=200, y=720-80, r=80,color=COLOR.sea},--softDrop
{ava=true, x=1280-320, y=720-200, r=80,color=COLOR.yellow},--hold
{ava=true, x=1280-80, y=280, r=80,color=COLOR.lRed},--func1
{ava=true, x=80, y=280, r=80,color=COLOR.lMagenta},--func2
{ava=false, x=100, y=50, r=80,color=COLOR.aqua},--insLeft
{ava=false, x=200, y=50, r=80,color=COLOR.aqua},--insRight
{ava=true, x=80, y=720-200, r=80,color=COLOR.L},--moveLeft
{ava=true, x=320, y=720-200, r=80,color=COLOR.L},--moveRight
{ava=true, x=1280-80, y=720-200, r=80,color=COLOR.R},--rotRight
{ava=true, x=1280-200, y=720-80, r=80,color=COLOR.O},--rotLeft
{ava=true, x=1280-200, y=720-320, r=80,color=COLOR.M},--rot180
{ava=true, x=200, y=720-320, r=80,color=COLOR.C},--hardDrop
{ava=true, x=200, y=720-80, r=80,color=COLOR.S},--softDrop
{ava=true, x=1280-320, y=720-200, r=80,color=COLOR.Y},--hold
{ava=true, x=1280-80, y=280, r=80,color=COLOR.lR},--func1
{ava=true, x=80, y=280, r=80,color=COLOR.lM},--func2
{ava=false, x=100, y=50, r=80,color=COLOR.A},--insLeft
{ava=false, x=200, y=50, r=80,color=COLOR.A},--insRight
{ava=false, x=300, y=50, r=80,color={COLOR.rainbow(3.5)}},--insDown
{ava=false, x=400, y=50, r=80,color={COLOR.rainbow(3.3)}},--down1
{ava=false, x=500, y=50, r=80,color={COLOR.rainbow(3.1)}},--down4
{ava=false, x=600, y=50, r=80,color={COLOR.rainbow(2.9)}},--down10
{ava=false, x=700, y=50, r=80,color=COLOR.lLime},--dropLeft
{ava=false, x=800, y=50, r=80,color=COLOR.lLime},--dropRight
{ava=false, x=900, y=50, r=80,color=COLOR.laqua},--addToLeft
{ava=false, x=1000, y=50, r=80,color=COLOR.laqua},--addToRight
{ava=false, x=700, y=50, r=80,color=COLOR.lL},--dropLeft
{ava=false, x=800, y=50, r=80,color=COLOR.lL},--dropRight
{ava=false, x=900, y=50, r=80,color=COLOR.lA},--addToLeft
{ava=false, x=1000, y=50, r=80,color=COLOR.lA},--addToRight
}
virtualkey={}for i=1,#VK_org do virtualkey[i]={}end--In-game virtualkey layout
REPLAY=FILE.load("conf/replay")or{}

View File

@@ -47,19 +47,19 @@ return{
"ttt tetris trainer tres bien",
"game",
"*Web-based, no mobile support | Single player*\nTetris Trainer Tres-Bien. A hands-on tutorial of advanced techniques in modern Tetris.\nRecommended for players that can complete a 40-line Sprint with all Tetris line clears and no hold.\nCovered topics include T-Spin, finesse, SRS, and some battle setups.\nLinked is translated to Simplified Chinese; original in Japanese.",
"http://121.4.147.128/ttt",
"http://teatube.ltd/ttt",
},
{"TTPC",
"ttpc tetris perfect clear challenge",
"game",
"*Web-based, no mobile support | Single player*\nTetris Perfect Clear Challenge. The PC opener tutorial for SRS+bag7.\nRecommended for players that have completed TTT. You need to know SRS to play this.\nIncludes only the basic PC opener.\nLinked is translated to Simplified Chinese; original in Japanese.",
"http://121.4.147.128/ttpc",
"http://teatube.ltd/ttpc",
},
{"NAZO",
"nazo",
"game",
"*Web-based, no mobile support | Single player*\nAll sorts of SRS puzzles. Recommended for players that have completed TTT.\nHas T-Spin and all spin puzzles of all difficulties.\nLinked is translated to Simplified Chinese; original in Japanese.",
"http://121.4.147.128/nazo",
"http://teatube.ltd/nazo",
},
{"King of Stackers",
@@ -228,9 +228,9 @@ return{
"Dig/Defend per minute\n\tSometimes can reflect how well a player can survive garbage.",
},
{"ADPM",
"adpm attackdigperminute",
"adpm attackdigperminute vs",
"term",
"Attack&Dig per minute\n\tUsed to compare skill differences between the two players within one match; slightly more accurate than APM.",
"Attack&Dig per minute\n\tUsed to compare skill differences between the two players within one match; slightly more accurate than APM.\n\"vs\" in TETR.IO is Atk+Dig per 100s",
},
{"APL",
"apl attackperline efficiency",
@@ -772,7 +772,7 @@ return{
"tetrisonline servers",
"other",
"Google \"Tetris Online Poland\" for the Poland server.\nClick \"Open URL\" for information about the Tetris Online Study server.",
"http://121.4.147.128/tos",
"http://teatube.ltd/tos",
},
{"Github Repository",
"githubrepository sourcecode",

View File

@@ -42,19 +42,19 @@ return{
"教程 ttt",
"game",
"现代方块特殊操作手把手教程(推荐使用电脑,移动设备需要外接键盘)\n\t推荐能无hold纯消四完成40行挑战的人学习\n\t内含T-spin、极简、SRS、部分对战定式介绍等教程\n\t完全吃透了话就可以成为教练啦!\n注:提供的链接是翻译后挂在茶服的版本",
"http://121.4.147.128/ttt",
"http://teatube.ltd/ttt",
},
{"TTPC",
"pc教程 ttpc",
"game",
"SRS+bag7方块游戏开局PC教程(推荐使用电脑,移动设备需要外接键盘)\n\t推荐完成了ttt的人学习(必须先学会SRS)\n\t(不包括六巧板等其它PC定式)\n\n注:提供的链接是翻译后挂在茶服的版本",
"http://121.4.147.128/ttpc",
"http://teatube.ltd/ttpc",
},
{"NAZO",
"题库 nazo",
"game",
"各类SRS试题(手机触屏玩不了)\n\t推荐能通过ttt的玩家尝试。\n\t内含各种t-spin/all-spin题目简单到极难题目都有。\n\n注:提供的链接是翻译后挂在茶服的版本",
"http://121.4.147.128/nazo",
"http://teatube.ltd/nazo",
},
--游戏(网页)
@@ -106,7 +106,7 @@ return{
"俄罗斯方块大师 tgm tetrisgrandmaster",
"game",
"一个街机平台方块系列S13/GM等称号出自该系列可以在win平台运行\n\n其中TGM3目前玩得最普遍部分模式说明:\nMaster:大师模式,有段位评价,拿到更高段位点的要求:非消一的连击和消四字幕战中消除和通关每100的前70小于【标准时间上一个0~70秒数+2】中小的一个每100总用时不能超过限定值(不然取消上一个方法的加分并反扣点数);到500若没有进标准时间会强制结束游戏(称为铁门);字幕战有两个难度,半隐和全隐,后者必须拿到几乎全部的段位点才能进,消除奖励的段位点也更多。\nShirase:死亡模式类似于techmino中的20G-极限开局就是高速20G500和1000有铁门500开始底下开始涨垃圾行1000开始出现骨块1300通关进入大方块字幕战;段位结算:每通100加1段从S1到S13如果通关了字幕战就会有金色的S13\n\n更多内容详见链接",
"http://121.4.147.128/TGMGUIDE/",
"http://teatube.ltd/TGMGUIDE/",
},
{"DTET",
"dtet",
@@ -228,9 +228,9 @@ return{
"Dig/Defend per Minute\n挖掘每分,即玩家每分钟向下挖掘的垃圾行数。\n某些时候可以体现玩家生存能力\n\n或:防御(抵消+挖掘)每分",
},
{"ADPM",
"adpm attack defend",
"adpm attack defend vs",
"term",
"Atk+Dig per Minute\n攻击+挖掘每分用于在同一局游戏内对比玩家间水平差距比apm更准确一些。\n在TETR.IO中有一个叫vs的数据就是ADPM(调整比例)",--TODO
"Atk+Dig per Minute\n攻击+挖掘每分用于在同一局游戏内对比玩家间水平差距比apm更准确一些。\n在TETR.IO中叫vs的数据就是ADPM(调整比例具体是Atk+Dig per 100s)",
},
{"APL",
"apl xiaolv",
@@ -262,7 +262,7 @@ return{
{"Tetris",
"tetris xiaosi",
"term",
"商标Tetris游戏名同时也是别的方块游戏里消四行的名字。\n含义是Tetra(古希腊语 四)+Tennis(游戏原作者喜欢的运动)。",
"商标Tetris游戏名同时也是别的方块游戏里消四行的名字。\n含义是Tetra(古希腊语 四)+Tennis(游戏原作者喜欢的运动)。\n现在版权在TTC(The Tetris Company)手上任天堂和世嘉开发游戏是TTC授权的本身并没有版权。",
},
{"PC",
"pc perfectclear ac allclear quanxiao quanqing",
@@ -523,12 +523,12 @@ return{
{"DAS & ARR",
"灵敏度 das arr",
"term",
"DAS(Delay-auto-shift延迟自动移动)系统。\n\nDAS自动移动延迟,指从<按下移动键时动了一格>到<开始自动移动>之间的时间\nARR(Auto-repeat-rate),自动重复速率,指<每次自动移动>之间的时间\n\n单位都是f(帧1帧=1/60秒)\n新人不会调的话推荐用das=8~10arr=1~2\n对自己能力比较自信或者是已经有一定水平想提速推荐用das=4~6arr=0\n(如果是别的游戏单位是ms(毫秒)那么乘16.7就可算出对应的数值)\n\n最佳调整方法:das越小越好小到玩家依然能准区分单点/长按为止;arr能0就0游戏不允许的话就能拉多小拉多小\n\n这套系统也被叫作DAS系统",
"DAS(Delay-auto-shift自动加速延迟)系统。\n\nDAS具体指从<按下移动键时动了一格>到<开始自动移动>之间的时间\nARR(Auto-repeat-rate),自动重复速率,指<每次自动移动>之间的时间\n\n单位都是f(帧1帧=1/60秒)\n新人不会调的话推荐用das=8~10arr=1~2\n对自己能力比较自信或者是已经有一定水平想提速推荐用das=4~6arr=0\n(如果是别的游戏单位是ms(毫秒)那么乘16.7就可算出对应的数值)\n\n最佳调整方法:das越小越好小到依然能准区分单点/长按为止;arr能0就0游戏不允许的话就能拉多小拉多小\n\n这套系统也被叫作DAS系统",
},
{"DAS通俗",
"das arr",
"term",
"打字时按住o你会看到:Ooooooooooo\n在时间轴上:O-----------o-o-o-o-o-o-o-o-o-o\n-----------就是das长度-就是arr长度",
"打字时按住o你会看到:ooooooooooo\n在时间轴上:o-----------o-o-o-o-o-o-o-o-o-o\n-----------就是das长度-就是arr长度",
},
{"DAS打断",
"dascut",
@@ -781,7 +781,7 @@ return{
"茶服 chafu study",
"other",
"TO-S的添加方法、说明等关于茶服的一切",
"http://121.4.147.128/tos",
"http://teatube.ltd/tos",
},
{"Github仓库",
"源代码 github sourcecode yuandaima",

View File

@@ -1,4 +1,4 @@
local c=COLOR
local C=COLOR
return{
back="Back",
anykey="Press a key!",
@@ -219,7 +219,6 @@ return{
music="Music & SE",
about="About",
dict="Zictionary",
lang="言/A",
manual="Manual",
quit="Exit",
},
@@ -852,30 +851,30 @@ return{
"You can perform a spin with 28 of the 29 minoes in this game; the exception being O1.",
"You can set the spawning orientation for each tetromino.",
"ZS JL T O I",
{c.C,"Also try 15puzzle!"},
{c.C,"Also try Minecraft!"},
{c.C,"Also try Minesweeper!"},
{c.C,"Also try osu!"},
{c.C,"Also try Phigros!"},
{c.C,"Also try Rubic's cube!"},
{c.C,"Also try Terraria!"},
{c.C,"Also try VVVVVV!"},
{c.fire,"Also try Cultris II!"},
{c.fire,"Also try Jstris"},
{c.fire,"Also try NullpoMino!"},
{c.fire,"Also try TETR.IO!"},
{c.fire,"Also try Tetr.js!"},
{c.fire,"Also try Tetra Legends!"},
{c.grape,"T-spin!"},
{c.gray,"REGRET!!"},
{c.lR,"Z ",c.lG,"S ",c.lSea,"J ",c.lOrange,"L ",c.lGrape,"T ",c.lY,"O ",c.lC,"I"},
{c.lY,"COOL!!"},
{c.R,"\"DMCA abusing\""},
{c.R,"\"Intellectual property law\""},
{c.R,"DT",c.W," Cannon=",c.grape,"TS",c.R,"D",c.W,"+",c.grape,"TS",c.R,"T",c.W," Cannon"},
{c.R,"LrL ",c.G,"RlR ",c.B,"LLr ",c.orange,"RRl ",c.grape,"RRR ",c.grape,"LLL ",c.C,"FFF ",c.Y,"RfR ",c.Y,"RRf ",c.Y,"rFF"},
{c.sky,"Lua",c.W," No.1"},
{c.W,"What is an ",c.lC,"X-Spin"?},
{c.Y,"O-Spin Triple!"},
{C.C,"Also try 15puzzle!"},
{C.C,"Also try Minecraft!"},
{C.C,"Also try Minesweeper!"},
{C.C,"Also try osu!"},
{C.C,"Also try Phigros!"},
{C.C,"Also try Rubic's cube!"},
{C.C,"Also try Terraria!"},
{C.C,"Also try VVVVVV!"},
{C.fire,"Also try Cultris II!"},
{C.fire,"Also try Jstris"},
{C.fire,"Also try NullpoMino!"},
{C.fire,"Also try TETR.IO!"},
{C.fire,"Also try Tetr.js!"},
{C.fire,"Also try Tetra Legends!"},
{C.purple,"T-spin!"},
{C.H,"REGRET!!"},
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
{C.lY,"COOL!!"},
{C.R,"\"DMCA abusing\""},
{C.R,"\"Intellectual property law\""},
{C.R,"DT",C.Z," Cannon=",C.purple,"TS",C.R,"D",C.Z,"+",C.purple,"TS",C.R,"T",C.Z," Cannon"},
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.orange,"RRl ",C.purple,"RRR ",C.purple,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
{C.navy,"Lua",C.Z," No.1"},
{C.Z,"What is an ",c.lC,"X-Spin"?},
{C.Y,"O-Spin Triple!"},
}
}

View File

@@ -196,7 +196,6 @@ return{
-- music="Music & SE",
-- about="About",
dict="Zictionary",
lang="言/A",
manual="Manuel",
quit="Quitter",
},

View File

@@ -1,3 +1,4 @@
local C=COLOR
return{
fallback=4,
back="Voltar",
@@ -219,7 +220,6 @@ return{
-- music="Music & SE",
-- about="About",
dict="Zictionary",
lang="言/A",
manual="Manual",
quit="Saída",
},
@@ -609,7 +609,7 @@ return{
},
app_15p={
reset="Embaralhar",
color="Cor",
C="Cor",
blind="Cego",
slide="Deslizar",
pathVis="Mostrar caminho",
@@ -843,37 +843,37 @@ return{
"Você pode abrir o diretório de save na pagina de Stats.",
"Você pode escolher uma orientação pra cada blococan.",
"ZS JL T O I",
{COLOR.cyan,"Tente também 15puzzle"},
{COLOR.cyan,"Tente também Minecraft"},
{COLOR.cyan,"Tente também Minesweeper"},
{COLOR.cyan,"Tente também osu!"},
{COLOR.cyan,"Tente também Phigros"},
{COLOR.cyan,"Tente também Rubic's cube"},
{COLOR.cyan,"Tente também Terraria"},
{COLOR.cyan,"Tente também VVVVVV"},
{COLOR.fire,"Tente também Cultris II"},
{COLOR.fire,"Tente também Jstris"},
{COLOR.fire,"Tente também Nullpomino"},
{COLOR.fire,"Tente também Tetr.io"},
{COLOR.fire,"Tente também Tetr.js"},
{COLOR.fire,"Tente também Tetralegends"},
{COLOR.grape,"T-spin!"},
{COLOR.gray,"暫定段位:9"},
{COLOR.gray,"REGRET!!"},
{COLOR.lR,"Z ",COLOR.lG,"S ",COLOR.lSea,"J ",COLOR.lOrange,"L ",COLOR.lGrape,"T ",COLOR.lY,"O ",COLOR.lC,"I"},
{COLOR.lY,"LEGAL!!"},
{COLOR.R,"\"DMCA abusing\""},
{COLOR.R,"\"Intellectual property law\""},
{COLOR.R,"DT",COLOR.W," Cannon=",COLOR.grape,"TS",COLOR.R,"D",COLOR.W,"+",COLOR.grape,"TS",COLOR.R,"T",COLOR.W," Cannon"},
{COLOR.R,"LrL ",COLOR.G,"RlR ",COLOR.B,"LLr ",COLOR.orange,"RRl ",COLOR.grape,"RRR ",COLOR.grape,"LLL ",COLOR.C,"FFF ",COLOR.Y,"RfR ",COLOR.Y,"RRf ",COLOR.Y,"rFF"},
{COLOR.sky,"Lua",COLOR.W," No.1"},
{COLOR.W,"What is ",COLOR.lC,"Xspin"},
{COLOR.Y,"暫定段位:GM"},
{COLOR.Y,"暫定段位:M"},
{COLOR.Y,"暫定段位:MK"},
{COLOR.Y,"暫定段位:MM"},
{COLOR.Y,"暫定段位:MO"},
{COLOR.Y,"暫定段位:MV"},
{COLOR.Y,"O-spin Triple!"},
{C.C,"Tente também 15puzzle"},
{C.C,"Tente também Minecraft"},
{C.C,"Tente também Minesweeper"},
{C.C,"Tente também osu!"},
{C.C,"Tente também Phigros"},
{C.C,"Tente também Rubic's cube"},
{C.C,"Tente também Terraria"},
{C.C,"Tente também VVVVVV"},
{C.F,"Tente também Cultris II"},
{C.F,"Tente também Jstris"},
{C.F,"Tente também Nullpomino"},
{C.F,"Tente também Tetr.io"},
{C.F,"Tente também Tetr.js"},
{C.F,"Tente também Tetralegends"},
{C.H,"暫定段位:9"},
{C.H,"REGRET!!"},
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
{C.lY,"LEGAL!!"},
{C.N,"Lua",C.Z," No.1"},
{C.P,"T-spin!"},
{C.R,"\"DMCA abusing\""},
{C.R,"\"Intellectual property law\""},
{C.R,"DT",C.Z," Cannon=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"T",C.Z," Cannon"},
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
{C.Z,"What is ",C.lC,"Xspin"},
{C.Y,"暫定段位:GM"},
{C.Y,"暫定段位:M"},
{C.Y,"暫定段位:MK"},
{C.Y,"暫定段位:MM"},
{C.Y,"暫定段位:MO"},
{C.Y,"暫定段位:MV"},
{C.Y,"O-spin Triple!"},
}
}

View File

@@ -197,7 +197,6 @@ return{
music="Música y SFX",
about="Acerca del Juego",
dict="Zictionary",
lang="言/A",
manual="Manual",
quit="Salir",
},

View File

@@ -101,7 +101,6 @@ return{
music="~~~ & =><=",
about="?",
dict="z",
lang="言/A",
manual="???",
quit="X",
},

View File

@@ -1,4 +1,4 @@
local c=COLOR
local C=COLOR
return{
back="返回",
anykey="按任意键继续",
@@ -219,7 +219,6 @@ return{
music="音乐&音效",
about="关于",
dict="小Z词典",
lang="言/A",
manual="说明书",
quit="退出",
},
@@ -1013,91 +1012,91 @@ return{
"Z酱累了,Z酱不想更新",
"Z酱只是个写代码的,懂什么方块",
"Z块等身抱枕来一个(x",
{c.aqua,"AQUA"},
{c.B,"BLUE"},
{c.C,"<PURE ",c.grape,"MEMORY>"},
{c.C,"15puzzle好玩!"},
{c.C,"魔方好玩!"},
{c.C,"扫雷好玩!"},
{c.C,"泰拉瑞亚好玩!"},
{c.C,"我的世界好玩!"},
{c.C,"CYAN"},
{c.C,"Orzmic好玩!"},
{c.C,"Osu!好玩!"},
{c.C,"Phigros好玩!"},
{c.C,"VVVVVV好玩!"},
{c.fire,"Cultris II也很好玩!"},
{c.fire,"FIRE"},
{c.fire,"Jstris也很好玩!"},
{c.fire,"Nullpomino也很好玩!"},
{c.fire,"Tetr.io也很好玩!"},
{c.fire,"Tetr.js也很好玩!"},
{c.fire,"Tetralegends也很好玩!"},
{c.G,"快捷键: Alt+F4=关闭当前窗口"},
{c.G,"快捷键: Alt+Tab=切换窗口"},
{c.G,"快捷键: backspace=返回上一个文件目录"},
{c.G,"快捷键: Ctrl+鼠标滚轮=缩放"},
{c.G,"快捷键: Ctrl+A=全选"},
{c.G,"快捷键: Ctrl+Alt+Z=查看所有qq消息"},
{c.G,"快捷键: Ctrl+D=复制一份"},
{c.G,"快捷键: Ctrl+F=查找"},
{c.G,"快捷键: Ctrl+Tab=切换标签页"},
{c.G,"快捷键: Ctrl+W=关闭当前标签页"},
{c.G,"快捷键: shift+del=永久删除文件 (技术人员别杠)"},
{c.G,"GREEN"},
{c.grape,"GRAPE"},
{c.grape,"T-spin!"},
{c.grass,"GRASS"},
{c.gray,"感谢Phigros提供部分tip模板("},
{c.gray,"暂定段位:9"},
{c.gray,"REGRET!!"},
{c.lime,"LIME"},
{c.lC,"26连T2来一个?"},
{c.lC,"Xspin",c.W,"是啥"},
{c.lGrape,"Naki",c.W," 可爱!"},
{c.lGray,"腱鞘炎警告"},
{c.lGray,"看起来是个计算器,其实…"},
{c.lGray,"没学过编曲,音乐都是自己瞎写的,觉得不好听就去设置关了吧"},
{c.lGray,"秘密数字:626"},
{c.lGray,"你有一个好"},
{c.lGray,"STSD必死"},
{c.lGray,"Techmino没有抽卡没有氪金,太良心了"},
{c.lR,"Z ",c.lG,"S ",c.lSea,"J ",c.lOrange,"L ",c.lGrape,"T ",c.lY,"O ",c.lC,"I"},
{c.lSea,"茶娘",c.W," 可爱!"},
{c.lY,"COOL!!"},
{c.magenta,"MAGENTA"},
{c.orange,"ORANGE"},
{c.pink,"PINK"},
{c.pink,"uid:225238922"},
{c.purple,"PURPLE"},
{c.R,"滥用DMCA"},
{c.R,"《知识产权法》"},
{c.R,"本游戏难度上限很高,做好心理准备。"},
{c.R,"不要向不感兴趣的路人推荐!!!!!!!!"},
{c.R,"不要在上课时玩游戏!"},
{c.R,"光敏性癫痫警告"},
{c.R,"请在有一定游戏基础之后再学Tspin!不然副作用非常大!"},
{c.R,"新人请千万记住,打好基础,不要太早学那些花里胡哨的。"},
{c.R,"长时间游戏状态会越来越差!玩久了记得放松一下~"},
{c.R,"DD",c.W,"炮=",c.grape,"TS",c.R,"D",c.W,"+",c.grape,"TS",c.R,"D",c.W,""},
{c.R,"DT",c.W,"炮=",c.grape,"TS",c.R,"D",c.W,"+",c.grape,"TS",c.R,"T",c.W,""},
{c.R,"LrL ",c.G,"RlR ",c.B,"LLr ",c.orange,"RRl ",c.grape,"RRR LLL ",c.C,"FFF ",c.Y,"RfR RRf rFF"},
{c.R,"RED"},
{c.sea,"SEA"},
{c.sky,"Lua",c.W,"天下第一"},
{c.sky,"SKY"},
{c.W,"1, 2, ",c.C,"",c.W,"!!!!!"},
{c.W,"效率药水",c.gray," 效率提升 (8:00)"},
{c.W,"协调药水",c.gray," MD减少 II(1:30)"},
{c.Y,"暂定段位:GM"},
{c.Y,"暂定段位:M"},
{c.Y,"暂定段位:MK"},
{c.Y,"暂定段位:MM"},
{c.Y,"暂定段位:MO"},
{c.Y,"暂定段位:MV"},
{c.Y,"Miya",c.W," 可爱!"},
{c.Y,"O-spin Triple!"},
{c.Y,"YELLOW"},
{C.A,"AQUA"},
{C.B,"BLUE"},
{C.C,"<PURE ",C.purple,"MEMORY>"},
{C.C,"15puzzle好玩!"},
{C.C,"魔方好玩!"},
{C.C,"扫雷好玩!"},
{C.C,"泰拉瑞亚好玩!"},
{C.C,"我的世界好玩!"},
{C.C,"CYAN"},
{C.C,"Orzmic好玩!"},
{C.C,"Osu!好玩!"},
{C.C,"Phigros好玩!"},
{C.C,"VVVVVV好玩!"},
{C.F,"Cultris II也很好玩!"},
{C.F,"FIRE"},
{C.F,"Jstris也很好玩!"},
{C.F,"Nullpomino也很好玩!"},
{C.F,"Tetr.io也很好玩!"},
{C.F,"Tetr.js也很好玩!"},
{C.F,"Tetralegends也很好玩!"},
{C.G,"快捷键: Alt+F4=关闭当前窗口"},
{C.G,"快捷键: Alt+Tab=切换窗口"},
{C.G,"快捷键: backspace=返回上一个文件目录"},
{C.G,"快捷键: Ctrl+鼠标滚轮=缩放"},
{C.G,"快捷键: Ctrl+A=全选"},
{C.G,"快捷键: Ctrl+Alt+Z=查看所有qq消息"},
{C.G,"快捷键: Ctrl+D=复制一份"},
{C.G,"快捷键: Ctrl+F=查找"},
{C.G,"快捷键: Ctrl+Tab=切换标签页"},
{C.G,"快捷键: Ctrl+W=关闭当前标签页"},
{C.G,"快捷键: shift+del=永久删除文件 (技术人员别杠)"},
{C.G,"GREEN"},
{C.H,"感谢Phigros提供部分tip模板("},
{C.H,"暂定段位:9"},
{C.H,"REGRET!!"},
{C.jade,"JADE"},
{C.lC,"26连T2来一个?"},
{C.lC,"Xspin",C.Z,"是啥"},
{C.lH,"腱鞘炎警告"},
{C.lH,"看起来是个计算器,其实…"},
{C.lH,"没学过编曲,音乐都是自己瞎写的,觉得不好听就去设置关了吧"},
{C.lH,"秘密数字:626"},
{C.lH,"你有一个好"},
{C.lH,"STSD必死"},
{C.lH,"Techmino没有抽卡没有氪金,太良心了"},
{C.L,"LIME"},
{C.lP,"Naki",C.Z," 可爱!"},
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
{C.lS,"茶娘",C.Z," 可爱!"},
{C.lY,"COOL!!"},
{C.M,"MAGENTA"},
{C.N,"Lua",C.Z,"天下第一"},
{C.N,"NAVY"},
{C.O,"ORANGE"},
{C.P,"PURPLE"},
{C.P,"T-spin!"},
{C.R,"《滥用DMCA》"},
{C.R,"知识产权法"},
{C.R,"本游戏难度上限很高,做好心理准备。"},
{C.R,"不要向不感兴趣的路人推荐!!!!!!!!"},
{C.R,"不要在上课时玩游戏!"},
{C.R,"光敏性癫痫警告"},
{C.R,"请在有一定游戏基础之后再学Tspin!不然副作用非常大!"},
{C.R,"新人请千万记住,打好基础,不要太早学那些花里胡哨的。"},
{C.R,"长时间游戏状态会越来越差!玩久了记得放松一下~"},
{C.R,"DD",C.Z,"炮=",C.purple,"TS",C.R,"D",C.Z,"+",C.purple,"TS",C.R,"D",C.Z,""},
{C.R,"DT",C.Z,"炮=",C.purple,"TS",C.R,"D",C.Z,"+",C.purple,"TS",C.R,"T",C.Z,""},
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.orange,"RRl ",C.purple,"RRR LLL ",C.C,"FFF ",C.Y,"RfR RRf rFF"},
{C.R,"RED"},
{C.S,"SEA"},
{C.V,"VIOLET"},
{C.W,"uid:225238922"},
{C.W,"WINE"},
{C.Y,"暂定段位:GM"},
{C.Y,"暂定段位:M"},
{C.Y,"暂定段位:MK"},
{C.Y,"暂定段位:MM"},
{C.Y,"暂定段位:MO"},
{C.Y,"暂定段位:MV"},
{C.Y,"Miya",C.Z," 可爱!"},
{C.Y,"O-spin Triple!"},
{C.Y,"YELLOW"},
{C.Z,"1, 2, ",C.C,"",C.Z,"!!!!!"},
{C.Z,"效率药水",C.H," 效率提升 (8:00)"},
{C.Z,"协调药水",C.H," MD减少 II(1:30)"},
-- "Z酱 可爱!",
}
}

View File

@@ -1,4 +1,4 @@
return SPLITSTR([=[
return STRING.split([=[
Gameplay:
The system will provide you with tetrominoes (4-block pieces),
with a total of 7 types, and the player needs to control them

View File

@@ -1,4 +1,4 @@
return SPLITSTR([=[
return STRING.split([=[
游戏方法:
系统会提供的一个个四连骨牌("方块",总共7种)
玩家需要控制(左右移动和旋转90,180,270度)这些骨牌直到下落到场地底部,锁定

View File

@@ -302,7 +302,7 @@ rankColor={
}
minoColor={
COLOR.red, COLOR.fire, COLOR.orange, COLOR.yellow, COLOR.lime, COLOR.grass, COLOR.green, COLOR.aqua,
COLOR.cyan, COLOR.sky, COLOR.sea, COLOR.blue, COLOR.purple, COLOR.grape, COLOR.magenta, COLOR.pink,
COLOR.dGray,COLOR.black,COLOR.lYellow, COLOR.gray, COLOR.lGray, COLOR.dPurple, COLOR.dRed, COLOR.dGreen,
COLOR.R,COLOR.F,COLOR.O,COLOR.Y,COLOR.L,COLOR.J,COLOR.G,COLOR.A,
COLOR.C,COLOR.N,COLOR.S,COLOR.B,COLOR.V,COLOR.P,COLOR.M,COLOR.W,
COLOR.dH,COLOR.D,COLOR.lY,COLOR.H,COLOR.lH,COLOR.dV,COLOR.dR,COLOR.dG,
}

View File

@@ -49,7 +49,7 @@ return{
mText(drawableText.nextWave,69,380)
end,
score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Waves "..STRING.time(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 W=P.modeData.wave

View File

@@ -56,7 +56,7 @@ return{
mText(drawableText.nextWave,69,380)
end,
score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Waves "..STRING.time(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 W=P.modeData.wave

View File

@@ -23,7 +23,7 @@ return{
mText(drawableText.atk,69,380)
end,
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -23,7 +23,7 @@ return{
mText(drawableText.atk,69,380)
end,
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -22,7 +22,7 @@ return{
mText(drawableText.atk,69,380)
end,
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -23,7 +23,7 @@ return{
mText(drawableText.atk,69,380)
end,
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -1,6 +1,6 @@
local format=string.format
return{
color=COLOR.lGray,
color=COLOR.lH,
env={
drop=1e99,lock=1e99,
holdCount=0,

View File

@@ -20,7 +20,7 @@ return{
mStr(P.stat.clears[4],69,340)
end,
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -26,7 +26,7 @@ return{
gc.draw(IMG.electric,124,106,0,2.6)
end,
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -27,7 +27,7 @@ return{
gc.draw(IMG.electric,124,106,0,2.6)
end,
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -23,7 +23,7 @@ return{
gc.draw(IMG.electric,124,106,0,2.6)
end,
score=function(P)return{min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -26,7 +26,7 @@ return{
gc.draw(IMG.electric,124,106,0,2.6)
end,
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -16,7 +16,7 @@ return{
load=function()
PLY.newPlayer(1)
if SETTING.sfx_spawn==0 then
LOG.print(text.switchSpawnSFX,COLOR.yellow)
LOG.print(text.switchSpawnSFX,COLOR.Y)
end
end,
mesDisp=function(P)
@@ -55,7 +55,7 @@ return{
mStr(P.stat.clears[4],69,340)
end,
score=function(P)return{min(P.stat.row,40),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -61,7 +61,7 @@ return{
mText(drawableText.maxcmb,69,450)
end,
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Combo "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Combo "..STRING.time(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 L=P.modeData.maxCombo

View File

@@ -59,7 +59,7 @@ return{
mText(drawableText.maxcmb,69,450)
end,
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Combo "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Combo "..STRING.time(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 L=P.stat.row

View File

@@ -54,7 +54,7 @@ return{
mText(drawableText.rpm,69,380)
end,
score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Waves "..STRING.time(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 W=P.modeData.wave

View File

@@ -54,7 +54,7 @@ return{
mText(drawableText.rpm,69,380)
end,
score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Waves "..STRING.time(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 W=P.modeData.wave

View File

@@ -27,7 +27,7 @@ return{
mStr(100-P.stat.dig,69,265)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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.dig<100 then return end

View File

@@ -24,7 +24,7 @@ return{
mStr(10-P.stat.dig,69,265)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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.dig<10 then return end

View File

@@ -27,7 +27,7 @@ return{
mStr(400-P.stat.dig,69,265)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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.dig<400 then return end

View File

@@ -27,7 +27,7 @@ return{
mStr(40-P.stat.dig,69,265)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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.dig<40 then return end

View File

@@ -91,7 +91,7 @@ return{
mStr(R>=0 and R or 0,69,265)
end,
score=function(P)return{math.min(P.stat.row,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -21,7 +21,7 @@ return{
mStr(R>=0 and R or 0,69,265)
end,
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -36,7 +36,7 @@ return{
gc.rectangle("fill",25,375,90,4)
end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -33,7 +33,7 @@ return{
gc.rectangle("fill",25,375,90,4)
end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -66,7 +66,7 @@ return{
gc.rectangle("fill",25,375,90,4)
end,
score=function(P)return{P.modeData.pt,P.stat.time}end,
scoreDisp=function(D)return D[1].."P "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end,
comp=function(a,b)
return a[1]>b[1]or(a[1]==b[1]and a[2]<b[2])
end,

View File

@@ -68,7 +68,7 @@ return{
gc.rectangle("fill",25,375,90,4)
end,
score=function(P)return{P.modeData.pt,P.stat.time}end,
scoreDisp=function(D)return D[1].."P "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end,
comp=function(a,b)
return a[1]>b[1]or(a[1]==b[1]and a[2]<b[2])
end,

View File

@@ -40,7 +40,7 @@ local function score(P)
end
return{
color=COLOR.lGray,
color=COLOR.lH,
env={
noTele=true,
das=5,arr=1,
@@ -66,7 +66,7 @@ return{
gc.rectangle("fill",25,375,90,4)
end,
score=function(P)return{P.modeData.pt,P.stat.time}end,
scoreDisp=function(D)return D[1].."P "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].."P "..STRING.time(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 S=P.modeData.pt

View File

@@ -155,7 +155,7 @@ return{
gc.rectangle("fill",25,375,90,4)
end,
score=function(P)return{P.result=="WIN"and 260 or P.modeData.pt,P.stat.time}end,
scoreDisp=function(D)return D[1].."P "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].."P "..STRING.time(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 p=P.modeData.pt

View File

@@ -6,7 +6,7 @@ return{
pushSpeed=5,
garbageSpeed=2,
noMod=true,
bgm={"race","push","secret8th","secret7th","waterfall","oxygen","shining terminal","storm","rockblock","magicblock","cruelty"},
bgm={"race","battle","push","secret8th","secret7th","waterfall","oxygen","shining terminal","storm","rockblock","magicblock","cruelty"},
},
load=function()
PLY.newPlayer(1)

View File

@@ -22,7 +22,7 @@ return{
mText(drawableText.pc,69,432)
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." PCs "..STRING.time(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 L=P.stat.pc

View File

@@ -22,7 +22,7 @@ return{
mText(drawableText.pc,69,432)
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." PCs "..STRING.time(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 L=P.stat.pc

View File

@@ -20,7 +20,7 @@ return{
mText(drawableText.pc,69,432)
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." PCs "..STRING.time(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 L=P.stat.pc

View File

@@ -68,7 +68,7 @@ return{
mText(drawableText.pc,69,412)
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." PCs "..STRING.time(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 L=P.stat.pc

View File

@@ -59,7 +59,7 @@ return{
mText(drawableText.pc,69,412)
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." PCs "..STRING.time(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 L=P.stat.pc

View File

@@ -66,7 +66,7 @@ return{
gc.circle("line",69,200,30+45*beat)
end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -66,7 +66,7 @@ return{
gc.circle("line",69,200,30+45*beat)
end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -72,7 +72,7 @@ return{
gc.circle("line",69,200,30+45*beat)
end,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(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 L=P.stat.row

View File

@@ -25,7 +25,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,1,true,10000))
end,
score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(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.result=="WIN"then

View File

@@ -25,7 +25,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,2,true,16000))
end,
score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(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.result=="WIN"then

View File

@@ -25,7 +25,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,3,true,26000))
end,
score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(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.result=="WIN"then

View File

@@ -25,7 +25,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,1,true,13000))
end,
score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(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.result=="WIN"then

View File

@@ -25,7 +25,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,3,true,40000))
end,
score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(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.result=="WIN"then

View File

@@ -12,7 +12,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("9S",4))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return TIMESTR(D[1])end,
scoreDisp=function(D)return STRING.time(D[1])end,
comp=function(a,b)return a[1]<b[1]end,
getRank=function(P)
if P.result=="WIN"then

View File

@@ -12,7 +12,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("9S",6))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return TIMESTR(D[1])end,
scoreDisp=function(D)return STRING.time(D[1])end,
comp=function(a,b)return a[1]<b[1]end,
getRank=function(P)
if P.result=="WIN"then

View File

@@ -4,7 +4,7 @@ return{
life=2,
drop=60,lock=60,
freshLimit=15,
bg="bg2",bgm="race",
bg="bg2",bgm="battle",
},
pauseLimit=true,
load=function()
@@ -12,7 +12,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",6,2,true,30000))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return TIMESTR(D[1])end,
scoreDisp=function(D)return STRING.time(D[1])end,
comp=function(a,b)return a[1]<b[1]end,
getRank=function(P)
if P.result=="WIN"then

View File

@@ -12,7 +12,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("9S",5))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return TIMESTR(D[1])end,
scoreDisp=function(D)return STRING.time(D[1])end,
comp=function(a,b)return a[1]<b[1]end,
getRank=function(P)
if P.result=="WIN"then

View File

@@ -4,7 +4,7 @@ return{
life=2,
drop=60,lock=60,
freshLimit=15,
bg="bg2",bgm="race",
bg="bg2",bgm="battle",
},
pauseLimit=true,
load=function()
@@ -12,7 +12,7 @@ return{
PLY.newAIPlayer(2,AIBUILDER("CC",7,3,true,50000))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return TIMESTR(D[1])end,
scoreDisp=function(D)return STRING.time(D[1])end,
comp=function(a,b)return a[1]<b[1]end,
getRank=function(P)
if P.result=="WIN"then

View File

@@ -18,7 +18,7 @@ return{
PLY.draw.drawTargetLine(P,r)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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<40 then return end

View File

@@ -17,7 +17,7 @@ return{
PLY.draw.drawTargetLine(P,r)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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<40 then return end

View File

@@ -1,5 +1,5 @@
return{
color=COLOR.lGray,
color=COLOR.lH,
env={
drop=60,lock=60,
dropPiece=function(P)if P.stat.row>=1000 then P:win("finish")end end, bg="rainbow",bgm="push",
@@ -15,7 +15,7 @@ return{
PLY.draw.drawTargetLine(P,r)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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<1000 then return end

View File

@@ -15,7 +15,7 @@ return{
PLY.draw.drawTargetLine(P,r)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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

View File

@@ -16,7 +16,7 @@ return{
PLY.draw.drawTargetLine(P,r)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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<10 then return end

View File

@@ -16,7 +16,7 @@ return{
PLY.draw.drawTargetLine(P,r)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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<20 then return end

View File

@@ -15,7 +15,7 @@ return{
PLY.draw.drawTargetLine(P,r)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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<400 then return end

View File

@@ -16,7 +16,7 @@ return{
PLY.draw.drawTargetLine(P,r)
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return TIMESTR(D[1]).." "..D[2].." Pieces"end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"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<40 then return end

View File

@@ -32,7 +32,7 @@ return{
mText(drawableText.wave,69,375)
end,
score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Waves "..STRING.time(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 W=P.modeData.wave

View File

@@ -38,7 +38,7 @@ return{
mText(drawableText.wave,69,375)
end,
score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Waves "..STRING.time(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 W=P.modeData.wave

View File

@@ -33,7 +33,7 @@ return{
mText(drawableText.wave,69,375)
end,
score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Waves "..STRING.time(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 W=P.modeData.wave

View File

@@ -37,7 +37,7 @@ return{
mText(drawableText.wave,69,375)
end,
score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Waves "..STRING.time(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 W=P.modeData.wave

View File

@@ -39,7 +39,7 @@ return{
mText(drawableText.wave,69,375)
end,
score=function(P)return{P.modeData.wave,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Waves "..STRING.time(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 W=P.modeData.wave

View File

@@ -22,7 +22,7 @@ return{
mText(drawableText.eff,69,363)
end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -34,7 +34,7 @@ return{
mText(drawableText.eff,69,363)
end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -20,7 +20,7 @@ return{
mText(drawableText.eff,69,363)
end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -31,7 +31,7 @@ return{
mText(drawableText.eff,69,363)
end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -20,7 +20,7 @@ return{
mText(drawableText.eff,69,363)
end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -31,7 +31,7 @@ return{
mText(drawableText.eff,69,363)
end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -20,7 +20,7 @@ return{
mText(drawableText.eff,69,363)
end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -31,7 +31,7 @@ return{
mText(drawableText.eff,69,363)
end,
score=function(P)return{P.stat.atk<=200 and math.floor(P.stat.atk)or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(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 L=P.stat.atk

View File

@@ -27,7 +27,7 @@ return{
mText(drawableText.tsd,69,315)
end,
score=function(P)return{P.modeData.tsd,P.stat.time}end,
scoreDisp=function(D)return D[1].."TSD "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].."TSD "..STRING.time(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.tsd

View File

@@ -28,7 +28,7 @@ return{
mText(drawableText.tsd,69,315)
end,
score=function(P)return{P.modeData.tsd,P.stat.time}end,
scoreDisp=function(D)return D[1].."TSD "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].."TSD "..STRING.time(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.tsd

View File

@@ -28,7 +28,7 @@ return{
mText(drawableText.tsd,69,315)
end,
score=function(P)return{P.modeData.tsd,P.stat.time}end,
scoreDisp=function(D)return D[1].."TSD "..TIMESTR(D[2])end,
scoreDisp=function(D)return D[1].."TSD "..STRING.time(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.tsd

View File

@@ -1,7 +1,7 @@
local gc=love.graphics
local warnTime={60,90,105,115,116,117,118,119,120}
return{
color=COLOR.lGray,
color=COLOR.lH,
env={
noTele=true,
minarr=1,minsdarr=1,

View File

@@ -1,5 +1,5 @@
return{
color=COLOR.lGray,
color=COLOR.lH,
env={
drop=120,lock=120,
infHold=true,

View File

@@ -218,11 +218,9 @@ end
--WS tick funcs
function NET.updateWS_app()
local retryTime=3
while true do
YIELD()
local status=WS.status("app")
if status=="running"then
if WS.status("app")=="running"then
local message,op=WS.read("app")
if message then
if op=="ping"then
@@ -243,15 +241,15 @@ function NET.updateWS_app()
end
end
if VERSION.code<res.newestCode then
LOG.print(text.oldVersion:gsub("$1",res.newestName),180,COLOR.sky)
LOG.print(text.oldVersion:gsub("$1",res.newestName),180,COLOR.N)
end
LOG.print(res.notice,300,COLOR.sky)
LOG.print(res.notice,300,COLOR.N)
elseif res.action==0 then--Get new version info
--?
elseif res.action==1 then--Get notice
--?
elseif res.action==2 then--Register
LOG.print(res.data.message,300,COLOR.sky)
LOG.print(res.data.message,300,COLOR.N)
if SCN.cur=="register"then SCN.back()end
NET.unlock("register")
end
@@ -260,11 +258,6 @@ function NET.updateWS_app()
end
end
end
elseif status=="dead"then
retryTime=retryTime-1
if retryTime==0 then return end
for _=1,180 do YIELD()end
WS.connect("app","/app")
end
end
end

View File

@@ -106,410 +106,415 @@ return{
font=65,
color=C.rainbow_dark,
},
{
name="Notypey",
font=65,
color=C.rainbow_dark,
},
{
name="八零哥",
font=25,
color=C.gray,
color=C.H,
},
{
name="蕴空之灵",
font=25,
color=C.gray,
color=C.H,
},
{
name="gggf127",
font=25,
color=C.gray,
color=C.H,
},
{
name="solainu",
font=25,
color=C.gray,
color=C.H,
},
{
name="ThTsOd",
font=25,
color=C.gray,
color=C.H,
},
{
name="Fireboos",
font=25,
color=C.gray,
color=C.H,
},
{
name="星月千雪",
font=25,
color=C.gray,
color=C.H,
},
{
name="10元",
font=25,
color=C.gray,
color=C.H,
},
{
name="立斐",
font=25,
color=C.gray,
color=C.H,
},
{
name="Deep_Sea",
font=25,
color=C.gray,
color=C.H,
},
{
name="时雪",
font=25,
color=C.gray,
color=C.H,
},
{
name="yyangdid",
font=25,
color=C.gray,
color=C.H,
},
{
name="sfqr",
font=25,
color=C.gray,
color=C.H,
},
{
name="心痕",
font=25,
color=C.gray,
color=C.H,
},
{
name="Sasoric",
font=25,
color=C.gray,
color=C.H,
},
{
name="夏小亚",
font=25,
color=C.gray,
color=C.H,
},
{
name="仁参",
font=25,
color=C.gray,
color=C.H,
},
{
name="乐↗乐↘",
font=25,
color=C.gray,
color=C.H,
},
{
name="喜欢c4w的ztcjoin",
font=25,
color=C.gray,
color=C.H,
},
{
name="面包",
font=25,
color=C.gray,
color=C.H,
},
{
name="蠢熏",
font=25,
color=C.gray,
color=C.H,
},
{
name="潘一栗",
font=25,
color=C.gray,
color=C.H,
},
{
name="Lied",
font=25,
color=C.gray,
color=C.H,
},
{
name="星街书婉",
font=25,
color=C.gray,
color=C.H,
},
{
name="祝西",
font=25,
color=C.gray,
color=C.H,
},
{
name="829",
font=25,
color=C.gray,
color=C.H,
},
{
name="e m*12",
font=25,
color=C.gray,
color=C.H,
},
{
name="我永远爱白银诺艾尔(鹏",
font=25,
color=C.gray,
color=C.H,
},
{
name="PCX",
font=25,
color=C.gray,
color=C.H,
},
{
name="kagura77",
font=25,
color=C.gray,
color=C.H,
},
{
name="呆喂",
font=25,
color=C.gray,
color=C.H,
},
{
name="GlowingEmbers",
font=25,
color=C.gray,
color=C.H,
},
{
name="轩辕辚",
font=25,
color=C.gray,
color=C.H,
},
{
name="HimuroAki",
font=25,
color=C.gray,
color=C.H,
},
{
name="TCV100",
font=25,
color=C.gray,
color=C.H,
},
{
name="tech有养成系统了@7065",
font=25,
color=C.gray,
color=C.H,
},
{
name="HAGE KANOBU",
font=25,
color=C.gray,
color=C.H,
},
{
name="闪电和拐棍",
font=25,
color=C.gray,
color=C.H,
},
{
name="葡萄味的曼妥思",
font=25,
color=C.gray,
color=C.H,
},
{
name="蓝绿",
font=25,
color=C.gray,
color=C.H,
},
{
name="天生的魔法师",
font=25,
color=C.gray,
color=C.H,
},
{
name="琳雨空",
font=25,
color=C.gray,
color=C.H,
},
{
name="T8779.易缄",
font=25,
color=C.gray,
color=C.H,
},
{
name="诗情画意",
font=25,
color=C.gray,
color=C.H,
},
{
name="星姐阿夸双推Man暗炎",
font=25,
color=C.gray,
color=C.H,
},
{
name="[*炎]",
font=25,
color=C.gray,
color=C.H,
},
{
name="[*Y]",
font=25,
color=C.gray,
color=C.H,
},
{
name="aaa222",
font=25,
color=C.gray,
color=C.H,
},
{
name="[**城]",
font=25,
color=C.gray,
color=C.H,
},
{
name="cnDD",
font=25,
color=C.gray,
color=C.H,
},
{
name="红桃老给",
font=25,
color=C.gray,
color=C.H,
},
{
name="昭庭玲秋",
font=25,
color=C.gray,
color=C.H,
},
{
name="旋树墩",
font=25,
color=C.gray,
color=C.H,
},
{
name="火花工作室",
font=25,
color=C.gray,
color=C.H,
},
{
name="Cosine",
font=25,
color=C.gray,
color=C.H,
},
{
name="沁音的芝麻王",
font=25,
color=C.gray,
color=C.H,
},
{
name="SuperJH",
font=25,
color=C.gray,
color=C.H,
},
{
name="天上_飞",
font=25,
color=C.gray,
color=C.H,
},
{
name="uiro",
font=25,
color=C.gray,
color=C.H,
},
{
name="宇酱",
font=25,
color=C.gray,
color=C.H,
},
{
name="[W*N]",
font=25,
color=C.gray,
color=C.H,
},
{
name="[Z*.]",
font=25,
color=C.gray,
color=C.H,
},
{
name="[*之]",
font=25,
color=C.gray,
color=C.H,
},
{
name="白衣",
font=25,
color=C.gray,
color=C.H,
},
{
name="给虫",
font=25,
color=C.gray,
color=C.H,
},
{
name="我永远喜欢樱花小姐",
font=25,
color=C.gray,
color=C.H,
},
{
name="xb",
font=25,
color=C.gray,
color=C.H,
},
{
name="flaribbit",
font=25,
color=C.dY,
color=C.dYellow,
},
{
name="工口发动机",
font=25,
color=C.gray,
color=C.H,
},
{
name="金海星",
font=25,
color=C.gray,
color=C.H,
},
{
name="tatianyi",
font=25,
color=C.gray,
color=C.H,
},
{
name="[*瞳]",
font=25,
color=C.gray,
color=C.H,
},
{
name="彼方云城",
font=25,
color=C.gray,
color=C.H,
},
{
name="pm250",
font=25,
color=C.gray,
color=C.H,
},
{
name="nanaya",
font=25,
color=C.gray,
color=C.H,
},
{
name="黑红蓝白",
font=25,
color=C.gray,
color=C.H,
},
{
name="细胞",
font=25,
color=C.gray,
color=C.H,
},
{
name="流光梦",
font=25,
color=C.dSky,
color=C.dNavy,
},
{
name="George2003",
font=25,
color=C.gray,
color=C.H,
},
{
name="竹月可安",
font=25,
color=C.gray,
color=C.H,
},
{
name="T7887库德里尔",
font=25,
color=C.gray,
color=C.H,
},
}

View File

@@ -13,11 +13,11 @@ local setFont,mStr=setFont,mStr
local TIME=TIME
local frameColorList={
[0]=COLOR.white,
COLOR.lGreen,
COLOR.lBlue,
COLOR.lPurple,
COLOR.lOrange,
[0]=COLOR.Z,
COLOR.lG,
COLOR.lB,
COLOR.lV,
COLOR.lO,
}
--local function drawCell(y,x,id)gc_draw(SKIN.curText[id],30*x-30,-30*y)end
local function stencilBoard()gc_rectangle("fill",0,-10,300,610)end
@@ -218,11 +218,11 @@ local function drawBoarders(P)
gc_rectangle("line",-16,-3,15,604)--B2b bar boarder
end
local attackColor={
{COLOR.dGray,COLOR.white},
{COLOR.gray,COLOR.white},
{COLOR.lPurple,COLOR.white},
{COLOR.lRed,COLOR.white},
{COLOR.dGreen,COLOR.cyan},
{COLOR.dH,COLOR.Z},
{COLOR.H,COLOR.Z},
{COLOR.lV,COLOR.Z},
{COLOR.lR,COLOR.Z},
{COLOR.dG,COLOR.C},
}
local function drawBuffer(P)
local h=0
@@ -261,7 +261,7 @@ local function drawB2Bbar(P)
local a,b=P.b2b,P.b2b1 if a>b then a,b=b,a end
gc_setColor(.8,1,.2)
gc_rectangle("fill",-14,599,11,-b*.6)
gc_setColor(P.b2b<40 and COLOR.white or P.b2b<=800 and COLOR.lRed or COLOR.lBlue)
gc_setColor(P.b2b<40 and COLOR.Z or P.b2b<=800 and COLOR.lR or COLOR.lB)
gc_rectangle("fill",-14,599,11,-a*.6)
if TIME()%.5<.3 then
gc_setColor(1,1,1)
@@ -684,8 +684,8 @@ function draw.norm(P)
gc_setColor(0,0,0,.3)
gc_print(P.score1,18,509)
gc_print(tm,18,539)
gc_setColor(COLOR.lYellow)gc_print(P.score1,20,510)
gc_setColor(COLOR.sky)gc_print(tm,20,540)
gc_setColor(COLOR.lY)gc_print(P.score1,20,510)
gc_setColor(COLOR.N)gc_print(tm,20,540)
drawFinesseCombo_norm(P)
drawLife(P.life)
@@ -825,8 +825,8 @@ function draw.norm_remote(P)
gc_setColor(0,0,0,.3)
gc_print(P.score1,18,509)
gc_print(tm,18,539)
gc_setColor(COLOR.lYellow)gc_print(P.score1,20,510)
gc_setColor(COLOR.sky)gc_print(tm,20,540)
gc_setColor(COLOR.lY)gc_print(P.score1,20,510)
gc_setColor(COLOR.N)gc_print(tm,20,540)
drawFinesseCombo_remote(P)
drawLife(P.life)

View File

@@ -117,16 +117,16 @@ local function tapBoard(x,y,key)
if checkBoard(b)then
state=2
time=TIME()-startTime
if time<1 then LOG.print("不是人",COLOR.lBlue)
elseif time<2 then LOG.print("还是人",COLOR.lBlue)
elseif time<3 then LOG.print("神仙",COLOR.lBlue)
elseif time<5 then LOG.print("太强了",COLOR.lBlue)
elseif time<7.5 then LOG.print("很强",COLOR.lBlue)
elseif time<10 then LOG.print("可以的",COLOR.lBlue)
elseif time<20 then LOG.print("马上入门了",COLOR.lBlue)
elseif time<30 then LOG.print("入门不远了",COLOR.lBlue)
elseif time<60 then LOG.print("多加练习",COLOR.lBlue)
else LOG.print("第一次玩?加油",COLOR.lBlue)
if time<1 then LOG.print("不是人",COLOR.lB)
elseif time<2 then LOG.print("还是人",COLOR.lB)
elseif time<3 then LOG.print("神仙",COLOR.lB)
elseif time<5 then LOG.print("太强了",COLOR.lB)
elseif time<7.5 then LOG.print("很强",COLOR.lB)
elseif time<10 then LOG.print("可以的",COLOR.lB)
elseif time<20 then LOG.print("马上入门了",COLOR.lB)
elseif time<30 then LOG.print("入门不远了",COLOR.lB)
elseif time<60 then LOG.print("多加练习",COLOR.lB)
else LOG.print("第一次玩?加油",COLOR.lB)
end
SFX.play("win")
return
@@ -201,66 +201,66 @@ end
local frontColor={
[0]={
COLOR.lRed,COLOR.lRed,COLOR.lRed,COLOR.lRed,
COLOR.lGreen,COLOR.lBlue,COLOR.lBlue,COLOR.lBlue,
COLOR.lGreen,COLOR.lYellow,COLOR.lPurple,COLOR.lPurple,
COLOR.lGreen,COLOR.lYellow,COLOR.lPurple,COLOR.lPurple,
COLOR.lR,COLOR.lR,COLOR.lR,COLOR.lR,
COLOR.lG,COLOR.lB,COLOR.lB,COLOR.lB,
COLOR.lG,COLOR.lY,COLOR.lV,COLOR.lV,
COLOR.lG,COLOR.lY,COLOR.lV,COLOR.lV,
},--Colored(rank)
{
COLOR.lRed,COLOR.lRed,COLOR.lRed,COLOR.lRed,
COLOR.lOrange,COLOR.lYellow,COLOR.lYellow,COLOR.lYellow,
COLOR.lOrange,COLOR.lGreen,COLOR.lBlue,COLOR.lBlue,
COLOR.lOrange,COLOR.lGreen,COLOR.lBlue,COLOR.lBlue,
COLOR.lR,COLOR.lR,COLOR.lR,COLOR.lR,
COLOR.lO,COLOR.lY,COLOR.lY,COLOR.lY,
COLOR.lO,COLOR.lG,COLOR.lB,COLOR.lB,
COLOR.lO,COLOR.lG,COLOR.lB,COLOR.lB,
},--Rainbow(rank)
{
COLOR.lRed,COLOR.lRed,COLOR.lRed,COLOR.lRed,
COLOR.lBlue,COLOR.lBlue,COLOR.lBlue,COLOR.lBlue,
COLOR.lGreen,COLOR.lYellow,COLOR.lPurple,COLOR.lPurple,
COLOR.lGreen,COLOR.lYellow,COLOR.lPurple,COLOR.lPurple,
COLOR.lR,COLOR.lR,COLOR.lR,COLOR.lR,
COLOR.lB,COLOR.lB,COLOR.lB,COLOR.lB,
COLOR.lG,COLOR.lY,COLOR.lV,COLOR.lV,
COLOR.lG,COLOR.lY,COLOR.lV,COLOR.lV,
},--Colored(row)
{
COLOR.white,COLOR.white,COLOR.white,COLOR.white,
COLOR.white,COLOR.white,COLOR.white,COLOR.white,
COLOR.white,COLOR.white,COLOR.white,COLOR.white,
COLOR.white,COLOR.white,COLOR.white,COLOR.white,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
},--Gray
{
COLOR.white,COLOR.white,COLOR.white,COLOR.white,
COLOR.white,COLOR.white,COLOR.white,COLOR.white,
COLOR.white,COLOR.white,COLOR.white,COLOR.white,
COLOR.white,COLOR.white,COLOR.white,COLOR.white,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
COLOR.Z,COLOR.Z,COLOR.Z,COLOR.Z,
},--Black
}
local backColor={
[0]={
COLOR.dRed,COLOR.dRed,COLOR.dRed,COLOR.dRed,
COLOR.dGreen,COLOR.dBlue,COLOR.dBlue,COLOR.dBlue,
COLOR.dGreen,COLOR.dYellow,COLOR.dPurple,COLOR.dPurple,
COLOR.dGreen,COLOR.dYellow,COLOR.dPurple,COLOR.dPurple,
COLOR.dR,COLOR.dR,COLOR.dR,COLOR.dR,
COLOR.dG,COLOR.dB,COLOR.dB,COLOR.dB,
COLOR.dG,COLOR.dY,COLOR.dV,COLOR.dV,
COLOR.dG,COLOR.dY,COLOR.dV,COLOR.dV,
},--Colored(rank)
{
COLOR.dRed,COLOR.dRed,COLOR.dRed,COLOR.dRed,
COLOR.dOrange,COLOR.dYellow,COLOR.dYellow,COLOR.dYellow,
COLOR.dOrange,COLOR.dGreen,COLOR.dBlue,COLOR.dBlue,
COLOR.dOrange,COLOR.dGreen,COLOR.dBlue,COLOR.dBlue,
COLOR.dR,COLOR.dR,COLOR.dR,COLOR.dR,
COLOR.dO,COLOR.dY,COLOR.dY,COLOR.dY,
COLOR.dO,COLOR.dG,COLOR.dB,COLOR.dB,
COLOR.dO,COLOR.dG,COLOR.dB,COLOR.dB,
},--Rainbow(rank)
{
COLOR.dRed,COLOR.dRed,COLOR.dRed,COLOR.dRed,
COLOR.dBlue,COLOR.dBlue,COLOR.dBlue,COLOR.dBlue,
COLOR.dGreen,COLOR.dYellow,COLOR.dPurple,COLOR.dPurple,
COLOR.dGreen,COLOR.dYellow,COLOR.dPurple,COLOR.dPurple,
COLOR.dR,COLOR.dR,COLOR.dR,COLOR.dR,
COLOR.dB,COLOR.dB,COLOR.dB,COLOR.dB,
COLOR.dG,COLOR.dY,COLOR.dV,COLOR.dV,
COLOR.dG,COLOR.dY,COLOR.dV,COLOR.dV,
},--Colored(row)
{
COLOR.dGray,COLOR.dGray,COLOR.dGray,COLOR.dGray,
COLOR.dGray,COLOR.dGray,COLOR.dGray,COLOR.dGray,
COLOR.dGray,COLOR.dGray,COLOR.dGray,COLOR.dGray,
COLOR.dGray,COLOR.dGray,COLOR.dGray,COLOR.dGray,
COLOR.dH,COLOR.dH,COLOR.dH,COLOR.dH,
COLOR.dH,COLOR.dH,COLOR.dH,COLOR.dH,
COLOR.dH,COLOR.dH,COLOR.dH,COLOR.dH,
COLOR.dH,COLOR.dH,COLOR.dH,COLOR.dH,
},--Gray
{
COLOR.black,COLOR.black,COLOR.black,COLOR.black,
COLOR.black,COLOR.black,COLOR.black,COLOR.black,
COLOR.black,COLOR.black,COLOR.black,COLOR.black,
COLOR.black,COLOR.black,COLOR.black,COLOR.black,
COLOR.D,COLOR.D,COLOR.D,COLOR.D,
COLOR.D,COLOR.D,COLOR.D,COLOR.D,
COLOR.D,COLOR.D,COLOR.D,COLOR.D,
COLOR.D,COLOR.D,COLOR.D,COLOR.D,
},--Black
}
function scene.draw()
@@ -316,7 +316,7 @@ end
local function Gaming()return state==1 end
scene.widgetList={
WIDGET.newButton{name="reset", x=160,y=100,w=180,h=100,color="lGreen",font=40,code=pressKey"space"},
WIDGET.newButton{name="reset", x=160,y=100,w=180,h=100,color="lG", font=40,code=pressKey"space"},
WIDGET.newSlider{name="color", x=110,y=250,w=170,unit=4,show=false,font=30,disp=function()return color end, code=function(v)if state~=1 then color=v end end,hide=Gaming},
WIDGET.newSwitch{name="blind", x=240,y=330,w=60, font=40,disp=function()return blind end, code=pressKey"w", hide=Gaming},
WIDGET.newSwitch{name="slide", x=240,y=420,w=60, font=40,disp=function()return slide end, code=pressKey"e", hide=Gaming},

View File

@@ -38,7 +38,7 @@ local score
1/2/3/...: 2/4/8/... tile
]]
local tileColor={
[-1]=COLOR.black,
[-1]=COLOR.D,
[0]={.5,.3,.3},
{.93,.89,.85},
{.93,.88,.78},
@@ -370,8 +370,8 @@ function scene.draw()
"Y"
)or(
repeater.seq[i]==repeater.last[i]and
"gray"or
"white"
"H"or
"Z"
)
])
rectangle("line",990,305+60*i,220,50)
@@ -405,16 +405,16 @@ function scene.draw()
local N=board[i]
if i~=prevPos or prevSpawnTime==1 then
if not blind or i==prevPos then
setColor(tileColor[N]or COLOR.black)
setColor(tileColor[N]or COLOR.D)
rectangle("fill",x*160+163,y*160-117,154,154,15)
if N>=0 then
setColor(N<3 and COLOR.black or COLOR.W)
setColor(N<3 and COLOR.D or COLOR.Z)
local fontSize=tileFont[N]
setFont(fontSize)
mStr(tileName[N],320+(x-.5)*160,40+(y-.5)*160-fontSize*.7)
end
else
setColor(COLOR.gray)
setColor(COLOR.H)
rectangle("fill",x*160+163,y*160-117,154,154,15)
end
else
@@ -480,19 +480,19 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name="reset", x=155,y=100,w=180,h=100,color="lGreen",font=40,code=pressKey"r"},
WIDGET.newButton{name="reset", x=155,y=100,w=180,h=100,color="lG",font=40,code=pressKey"r"},
WIDGET.newSwitch{name="blind", x=240,y=300,w=60, font=40,disp=function()return blind end, code=pressKey"q",hide=function()return state==1 end},
WIDGET.newSwitch{name="tapControl", x=240,y=370,w=60, font=40,disp=function()return tapControl end, code=pressKey"w",hide=function()return state==1 end},
WIDGET.newKey{name="up", x=155,y=460,w=100,fText="",font=50,color="yellow",code=pressKey"up",hide=function()return tapControl end},
WIDGET.newKey{name="down", x=155,y=660,w=100,fText="",font=50,color="yellow",code=pressKey"down",hide=function()return tapControl end},
WIDGET.newKey{name="left", x=55,y=560,w=100,fText="",font=50,color="yellow",code=pressKey"left",hide=function()return tapControl end},
WIDGET.newKey{name="right", x=255,y=560,w=100,fText="",font=50,color="yellow",code=pressKey"right",hide=function()return tapControl end},
WIDGET.newKey{name="skip", x=155,y=400,w=100,font=20,color="yellow",code=pressKey"space",hide=function()return state~=1 or not skipper.cd or skipper.cd>0 end},
WIDGET.newKey{name="record1", x=1100,y=390,w=220,h=50,fText="",color="gray",code=pressKey"1",hide=function()return state==2 end},
WIDGET.newKey{name="record2", x=1100,y=450,w=220,h=50,fText="",color="gray",code=pressKey"2",hide=function()return state==2 end},
WIDGET.newKey{name="replay1", x=1245,y=390,w=50,fText="!",color="green",code=pressKey"c1",hide=function()return state==2 or #repeater.seq[1]==0 end},
WIDGET.newKey{name="replay2", x=1245,y=450,w=50,fText="!",color="green",code=pressKey"c2",hide=function()return state==2 or #repeater.seq[2]==0 end},
WIDGET.newKey{name="up", x=155,y=460,w=100,fText="",font=50,color="Y",code=pressKey"up",hide=function()return tapControl end},
WIDGET.newKey{name="down", x=155,y=660,w=100,fText="",font=50,color="Y",code=pressKey"down",hide=function()return tapControl end},
WIDGET.newKey{name="left", x=55,y=560,w=100,fText="",font=50,color="Y",code=pressKey"left",hide=function()return tapControl end},
WIDGET.newKey{name="right", x=255,y=560,w=100,fText="",font=50,color="Y",code=pressKey"right",hide=function()return tapControl end},
WIDGET.newKey{name="skip", x=155,y=400,w=100,font=20,color="Y",code=pressKey"space",hide=function()return state~=1 or not skipper.cd or skipper.cd>0 end},
WIDGET.newKey{name="record1", x=1100,y=390,w=220,h=50,fText="",color="H",code=pressKey"1",hide=function()return state==2 end},
WIDGET.newKey{name="record2", x=1100,y=450,w=220,h=50,fText="",color="H",code=pressKey"2",hide=function()return state==2 end},
WIDGET.newKey{name="replay1", x=1245,y=390,w=50,fText="!",color="G",code=pressKey"c1",hide=function()return state==2 or #repeater.seq[1]==0 end},
WIDGET.newKey{name="replay2", x=1245,y=450,w=50,fText="!",color="G",code=pressKey"c2",hide=function()return state==2 or #repeater.seq[2]==0 end},
WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,font=40,code=backScene},
}

View File

@@ -118,7 +118,7 @@ end
scene.widgetList={
WIDGET.newSelector{name="level", x=640,y=640,w=200,list={"A_Z","Z_A","Tech1","Tech2","KeyTest1","KeyTest2","Hello","Roll1","Roll2","Roll3","ZZZ","ZXZX","ZMZM","Stair","Stair2","Stair3","BPW"},disp=function()return levelName end,code=function(i)levelName=i;targetString=levels[i]end,hide=function()return state>0 end},
WIDGET.newButton{name="reset", x=160,y=100,w=180,h=100,color="lGreen",font=40,code=pressKey"space"},
WIDGET.newButton{name="reset", x=160,y=100,w=180,h=100,color="lG",font=40,code=pressKey"space"},
WIDGET.newButton{name="keyboard", x=160,y=210,w=180,h=100,code=function()love.keyboard.setTextInput(true,0,select(2,SCR.xOy:transformPoint(0,500)),1,1)end,hide=not MOBILE},
WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,font=40,code=backScene},
}

View File

@@ -235,7 +235,7 @@ function scene.mouseDown(x,y)
end
scene.widgetList={
WIDGET.newButton{name="reset",x=1140,y=540,w=170,h=80,font=40,color="lGreen",code=restart},
WIDGET.newButton{name="reset",x=1140,y=540,w=170,h=80,font=40,color="lG",code=restart},
WIDGET.newButton{name="back",x=1140,y=640,w=170,h=80,font=40,code=backScene},
}

View File

@@ -83,15 +83,15 @@ end
local scoreColor={
"white",--0
"aqua",--20
"sky",--40
"navy",--40
"blue",--60
"grape",--80
"pink",--100
"purple",--80
"wine",--100
"red","fire","orange","yellow","lAqua",--200
"lSky","lBlue","lGrape","lPink","lRed",--300
"lFire","lOrange","lYellow","dAqua","dSky",--400
"dBlue","dGrape","dPink","dRed","dFire",--500
"dYellow","lGray","gray","dGray",--before 600, black after
"lNavy","lBlue","lPurple","lWine","lRed",--300
"lFire","lOrange","lYellow","dAqua","dNavy",--400
"dBlue","dPurple","dWine","dRed","dFire",--500
"dYellow","lH","H","dH",--before 600, black after
}
function scene.draw()
--Spawn area

View File

@@ -6,9 +6,9 @@ local C=COLOR
local inputBox=WIDGET.newInputBox{name="input",x=40,y=650,w=1200,h=50}
local outputBox=WIDGET.newTextBox{name="output",x=40,y=30,w=1200,h=600,font=25,lineH=25,fix=true}
local function log(str)outputBox:push(str)end
log{C.lGrape,"Techmino Console"}
log{C.lBlue,"©2020 26F Studio some rights reserved"}
log{C.dRed,"DO NOT RUN ANY CODE YOU DON'T UNDERSTAND"}
log{C.lP,"Techmino Console"}
log{C.lB,"©2020 26F Studio some rights reserved"}
log{C.dR,"DO NOT RUN ANY CODE YOU DON'T UNDERSTAND"}
local history,hisPtr={"?"}
local the_secret=(14^2*10)..(2*11)
@@ -196,7 +196,7 @@ do--commands.help(arg)
details={
"Set background.",
"",
"Usage: setbg <classic|xmas|sprfes|zday1/2/3>",
"Usage: setbg [bgName]",
},
},
theme={
@@ -272,10 +272,10 @@ do--commands.help(arg)
log"Use help [page] to view more commands,"
log"or help [command_name] for details of a command."
log""
log{C.lPink,"Page ",C.lG,page,C.lPink," of ",C.lG,maxPage}
log{C.lW,"Page ",C.lG,page,C.lW," of ",C.lG,maxPage}
for i=pageSize*(page-1)+1,math.min(pageSize*page,#command_help_list)do
local cmd=command_help_list[i]
log{C.W,cmd,C.gray," "..command_help_messages[cmd].description}
log{C.Z,cmd,C.H," "..command_help_messages[cmd].description}
end
else
log{C.R,"Invalid page number. Must be between 1 and "..maxPage.." (inclusive)."}
@@ -313,7 +313,7 @@ function commands.url(url)
if url~=""then
local res,err=pcall(love.system.openURL,url)
if not res then
log{C.R,"[ERR] ",C.W,err}
log{C.R,"[ERR] ",C.Z,err}
end
else
log{C.aqua,"Usage: url [url]"}
@@ -631,14 +631,14 @@ function scene.keyDown(k)
setfenv(code,userG)
code,err=pcall(code)
if not code then
log{C.R,"[ERR] ",C.W,err}
log{C.R,"[ERR] ",C.Z,err}
end
else
log{C.R,"[SYNTAX ERR] ",C.W,err}
log{C.R,"[SYNTAX ERR] ",C.Z,err}
end
else
--Execute builtin command
log{C.lSea,"> "..input}
log{C.lS,"> "..input}
local p=input:find(" ")
local cmd,arg
if p then
@@ -689,7 +689,7 @@ function scene.keyDown(k)
log(">Commands start with '"..str.."' :")
table.sort(res)
for i=1,#res do
log{COLOR.lGray,res[i]}
log{COLOR.lH,res[i]}
end
elseif #res==1 then
inputBox.value=res[1]

View File

@@ -174,12 +174,12 @@ setmetatable(backColor,backColor)
function scene.draw()
--Background
local lv,height=int(camY/700),camY%700
gc.setColor(backColor[lv+1]or COLOR.black)
gc.setColor(backColor[lv+1]or COLOR.D)
gc.rectangle("fill",0,720,1280,height-700)
gc.setColor(backColor[lv+2]or COLOR.black)
gc.setColor(backColor[lv+2]or COLOR.D)
gc.rectangle("fill",0,height+20,1280,-height-20)
if height-680>0 then
gc.setColor(backColor[lv+3]or COLOR.black)
gc.setColor(backColor[lv+3]or COLOR.D)
gc.rectangle("fill",0,height-680,1280,680-height)
end

View File

@@ -277,7 +277,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name="reset", x=155,y=100,w=180,h=100,color="lGreen",font=40,code=pressKey"r"},
WIDGET.newButton{name="reset", x=155,y=100,w=180,h=100,color="lG",font=40,code=pressKey"r"},
WIDGET.newButton{name="mode", x=155,y=220,w=180,h=100,font=40,code=pressKey"q",hide=function()return state~=0 end},
WIDGET.newSwitch{name="arcade", x=230,y=330,font=40,disp=function()return arcade end,code=pressKey"w",hide=function()return state~=0 end},
WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,font=40,code=backScene},

View File

@@ -165,7 +165,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newKey{name="back",x=1140,y=60,w=170,h=80,color="black",font=40,code=pressKey"escape"},
WIDGET.newKey{name="back",x=1140,y=60,w=170,h=80,color="D",font=40,code=pressKey"escape"},
}
return scene

View File

@@ -168,7 +168,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name="reset", x=160,y=100,w=180,h=100,color="lGreen",font=40,code=pressKey"space",hide=function()return state==0 end},
WIDGET.newButton{name="reset", x=160,y=100,w=180,h=100,color="lG",font=40,code=pressKey"space",hide=function()return state==0 end},
WIDGET.newSlider{name="rank", x=130,y=250,w=150,unit=3,show=false,font=40,disp=function()return rank-3 end,code=function(v)rank=v+3 end,hide=function()return state>0 end},
WIDGET.newSwitch{name="blind", x=240,y=330,w=60, font=40,disp=function()return blind end, code=pressKey"q",hide=function()return state==1 end},
WIDGET.newSwitch{name="disappear", x=240,y=420,w=60, font=40,disp=function()return disappear end,code=pressKey"w",hide=function()return state==1 end},

Some files were not shown because too many files have changed in this diff Show More