Compare commits

...

2 Commits

Author SHA1 Message Date
MrZ_26
2768fa748b 0.8.18:Details Update II 2020-05-01 02:33:36 +08:00
MrZ_26
00026bc46b 0.8.17:Details Update 2020-04-30 01:23:11 +08:00
110 changed files with 3546 additions and 4160 deletions

BIN
SFX/virtualKey.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
SFX/welcome_sfx.ogg Normal file

Binary file not shown.

BIN
VOICE/welcome_voc.ogg Normal file

Binary file not shown.

1231
callback.lua Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
gameVersion="Alpha V0.8.16"
gameVersion="Alpha V0.8.18"
function love.conf(t)
t.identity="Techmino"--SaveDir name
t.version="11.1"

View File

@@ -2,7 +2,7 @@ setting={
das=10,arr=2,
sddas=0,sdarr=2,
ihs=true,irs=true,ims=true,
reTime=10,
reTime=4,
maxNext=6,
quickR=true,
swap=true,
@@ -17,6 +17,7 @@ setting={
ghost=true,center=true,
smooth=true,grid=false,
bagLine=false,
lockFX=2,
dropFX=3,
shakeFX=2,
@@ -33,6 +34,8 @@ setting={
stereo=6,
--sound
VKSFX=3,--SFX volume
VKVIB=0,--VIB
VKSwitch=false,--if disp
VKTrack=false,--if tracked
VKDodge=false,--if dodge

View File

@@ -3,12 +3,10 @@
活到最后或者完成目标即胜利.
旋转系统:
使用Techmino专属旋转系统
细节懒得写(?)
使用Techmino专属旋转系统,细节懒得写(
spin判定:
结合了不可移动判定和三角判定,是否为mini也与判定过程数据有关
细节也懒得写(?)
结合了不可移动判定和三角判定,是否为mini也与判定过程数据有关,细节也懒得写(
攻击系统:
普通消除:
@@ -20,7 +18,7 @@ spin判定:
连击:0,0,1,1,2,2,3,3,4,4,3,2,3,2,3,2,3…(后面都是2)
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+2,额外抵挡+2
全消:将上述伤害之和开根号,再+6~10(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
全消:将上述伤害之和开根号,再+6~12(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
根据上述规则计算后,向下取整,攻击打出
分数系统:
@@ -37,7 +35,7 @@ spin判定:
back to back(B2B)点数说明:
B2B点数的范围在0~1200,在点数>=40时进行特殊消除为B2B,>1000时特殊消除为B3B
普通消除-250
spin1/2/3:+50/100/180(mini减半)
spin1/2/3:+50/100/180(mini变为原来40%)
消四:+100
空spin:+20,此法得到的点数不能超过1000
当点数在1000以上时空放一块-40(不减到低于1000)
@@ -48,11 +46,11 @@ back to back(B2B)点数说明:
1.随机:每次攻击后10%随机挑选一个玩家锁定
2.最多徽章:攻击后或者锁定玩家死亡时锁定徽章最多的玩家
3.最高:攻击后或者锁定玩家死亡时锁定场地最高的玩家(每秒刷新)
4.反击:攻击所有锁定自己的玩家攻击AOE,若未被任何人锁定则击随机玩家
4.反击:攻击所有锁定自己的玩家攻击AOE,若未被任何人锁定则击随机玩家(不锁定)
坚持到最后的玩家就是胜利者.
自定义模式说明:
玩家可以自由调整大多数参数(不包括上述各种游戏模式的特殊效果),也可以画一个场地去消除或者是作为提示模板来进行拼图模式.
在拼图模式下,按功能键切换是否展示提示.其中打"X"的格子不允许有方块,空的格子可以是任何状态,普通的七种彩色方块必须颜色对应,垃圾行方块的为止只要有方块就可以,但是不能是空气,玩家拼出自己画的图后就会判定胜利.
附录:
ZXC的Ospin地图:XY0BCgAwCAIR7v9vHtUSt8AS0xKqgpnNGyXkrmFNePf6qi3BbQPrHT2Owxe6D66NeKi86dwB
ZXC的Ospin地图:XY0BCgAwCAIR7v9vHtUSt8AS0xKqgpnNGyXkrmFNePf6qi3BbQPrHT2Owxe6D66NeKi86dwB

BIN
font.ttf

Binary file not shown.

View File

@@ -1,326 +0,0 @@
local BK="返回"
local actName={
"左移:","右移:",
"顺时针旋转:","逆时针旋转:","180°旋转:",
"硬降:","软降:",
"暂存:","功能键:",
"重新开始:",
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
"落在最左:","落在最右:","列在最左:","列在最右:",
}
return{
anykey="按任意键继续",
newVersion="检测到更新!可能有部分数据被重新处理",
lang="中文",
atkModeName={"随机","徽章","击杀","反击"},
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
techrash="Techrash",techrashB2B="B2B Techrash",techrashB3B="B2B2B Techrash",
spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"},
block={"Z","S","L","J","T","O","I"},
clear={" single"," double"," triple"},
mini="Mini",b2b="B2B ",b3b="B2B2B ",
PC="Perfect Clear",HPC="Half Clear",
hold="暂存",next="下一个",
stage=function(n)return"关卡 "..n end,
great="Great!",
awesome="Awesome.",
continue="Continue.",
maxspeed="最高速度",
speedup="速度加快",
win="胜利",
finish="结束",
lose="失败",
pause="暂停",
pauseCount="暂停统计",
atk="ATK",
spd="SPD",
recv="RECV",
eff="EFF",
custom="自定义游戏",
customOption={
drop="下落速度:",
lock="锁定延迟:",
wait="放块延迟:",
fall="消行延迟:",
next="序列数量:",
hold="暂存:",
sequence="序列:",
visible="可见性:",
target="目标行数:",
freshLimit="锁延刷新次数:",
opponent="对手速度等级:",
bg="背景:",
bgm="背景音乐:",
},
customVal={
drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil,
fall=nil,
next=nil,
hold={"","","无限"},
sequence={"bag7","his4","随机"},
visible={"可见","半隐","全隐","瞬隐"},
target={10,20,40,100,200,500,1000,""},
freshLimit={0,8,15,""},
opponent={"无电脑","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
},
softdropdas="软降DAS:",
softdroparr="软降ARR:",
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
setting_game="游戏设置",
setting_graphic="画面设置",
setting_sound="声音设置",
setting_control="控制设置",
setting_skin="外观设置",
preview="预览",
keyboard="键盘",joystick="手柄",
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
musicRoom="音乐室",
nowPlaying="正在播放:",
settingSaved="设置已保存",
settingSavingError="设置保存失败:",
keyMapSaved="键位设置已保存",
keyMapSavingError="键位保存失败:",
VKSaved="虚拟按键设置已保存",
VKSavingError="虚拟按键保存失败:",
statSavingError="统计保存失败:",
unlockSavingError="解锁保存失败:",
recSavingError="纪录保存失败:",
needRestart="重新开始以生效",
copySuccess="已复制到剪切板",
dataCorrupted="数据损坏",
VKTchW="触摸点权重",
VKOrgW="原始点权重",
VKCurW="当前点权重",
noScore="暂无成绩",
highScore="最佳成绩",
newRecord="打破纪录",
errorMsg="Techmino遇到了问题,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
actName=actName,
load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载图片ing","加载模式ing","加载乱七八糟的东西ing"},
pauseStat={
"时间:",
"按键/旋转/暂存:",
"下块:",
"消行/挖掘:",
"攻击/挖掘攻击:",
"上涨/接收/抵消:",
"B2B/B3B/PC/HPC:",
"Finesse:",
},
stat={
spin="spin0~3",
clear="clear1~4",
"游戏运行次数:",
"游戏局数:",
"游戏时间:",
"按键/旋转/暂存:",
"方块/消行/攻击:",
"接收/抵消/上涨:",
"挖掘/挖掘攻击:",
"效率/挖掘效率:",
"多余操作/极简率:",
"满贯/大满贯:",
"全/半清:",
},
help={
"好像也没啥好帮助的吧?就当是关于了",
"这只是一个普通的方块游戏,请勿称此游戏为某某某方块",
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
"",
"使用LOVE2D引擎",
"作者:MrZ 邮箱:1046101471@qq.com",
"程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:MrZ/Miya",
"特别感谢:Flyz,Farter,196,Teatube,T830,[所有内测人员]和 你!",
"",
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
"仅通过唯一内测群1057456078进行免费下载/更新",
"其他渠道获得游戏皆有被修改/植入病毒的风险,程序只申请了震动&联网权限!",
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
},
used=[[
使用工具:
Beepbox
GFIE
Goldwave
使用库:
Cold_Clear[MinusKelvin]
simple-love-lights[dylhunn]
]],
support="支持作者",
group="官方QQ群(如果没有被暗改的话就是这个):822023725",
WidgetText={
main={
play="开始",
setting="设置",
music="音乐室",
stat="统计信息",
help="帮助",
qplay="快速开始",
lang="言/A",
quit="退出",
},
mode={
draw="画图(Q)",
custom="参数(E)",
start="开始",
back=BK,
},
music={
bgm="BGM",
up="",
play="播放",
down="",
back=BK,
},
custom={
up="",
down="",
left="",
right="",
set1="40行(1)",
set2="1v1(2)",
set3="无尽(3)",
set4="隐形(4)",
set5="极限(5)",
back=BK,
},
draw={
any="不定",
space="×",
clear="清除",
demo="不显示×",
copy="复制",
paste="粘贴",
back=BK,
},
play={
pause="暂停",
},
pause={
resume= "继续(空格)",
restart="重新开始(R)",
setting="设置(S)",
quit= "退出(esc)",
},
setting_game={
graphic="←画面设置",
sound="声音设置→",
ctrl="控制设置",
reTime="开局等待时间",
maxNext="最大预览数量",
autoPause="自动暂停",
layout="外观",
key="键位设置",
touch="触屏设置",
quickR="快速重新开始",
autoPause="自动暂停",
swap="组合键切换攻击模式",
fine="极简操作提示音",
back=BK,
},
setting_graphic={
sound="←声音设置",
game="游戏设置→",
ghost="阴影",
grid="网格",
center="旋转中心",
bg="背景",
smooth="平滑下落",
lockFX="锁定特效等级",
dropFX="下落特效等级",
shakeFX="晃动特效等级",
atkFX="攻击特效等级",
text="消行文本",
fullscreen="全屏",
frame="绘制帧率",
back=BK,
},
setting_sound={
game="←游戏设置",
graphic="画面设置→",
sfx="音效",
bgm="音乐",
vib="震动",
voc="语音",
stereo="立体声",
back=BK,
},
setting_control={
das="DAS",arr="ARR",
sddas="软降DAS",sdarr="软降ARR",
ihs="提前Hold",
irs="提前旋转",
ims="提前移动",
reset="重置",
back=BK,
},
setting_key={
back=BK,
},
setting_skin={
prev="",next="",
prev1="",next1="",spin1="R",
prev2="",next2="",spin2="R",
prev3="",next3="",spin3="R",
prev4="",next4="",spin4="R",
prev5="",next5="",spin5="R",
prev6="",next6="",spin6="R",
prev7="",next7="",spin7="R",
skinR="重置配色",
faceR="重置方向",
back=BK,
},
setting_touch={
default="默认组合",
snap=function()return text.snapLevelName[sceneTemp.snap]end,
option="选项",
back=BK,
size="大小",
},
setting_touchSwitch={
b1= actName[1],b2=actName[2],b3=actName[3],b4=actName[4],
b5= actName[5],b6=actName[6],b7=actName[7],b8=actName[8],
b9= actName[9],b10=actName[10],b11=actName[11],b12=actName[12],
b13=actName[13],b14=actName[14],b15=actName[15],b16=actName[16],
b17=actName[17],b18=actName[18],b19=actName[19],b20=actName[20],
norm="标准",
pro="专业",
hide="显示虚拟按键",
track="按键自动跟踪",
icon="图标",
tkset="跟踪设置",
alpha="透明度",
back=BK,
},
setting_trackSetting={
VKDodge="自动避让",
back=BK,
},
help={
his="历史",
qq="作者QQ",
back=BK,
},
history={
prev="",
next="",
back=BK,
},
stat={
path="打开存储目录",
back=BK,
},
},
}--文

View File

@@ -1,323 +0,0 @@
local BK="返回"
local actName={
"左移:","右移:",
"顺时针旋转:","逆时针旋转:","180°旋转:",
"硬降:","软降:",
"暂存:","功能键:",
"重新开始:",
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
"落在最左:","落在最右:","列在最左:","列在最右:",
}
return{
anykey="按任意键继续",
newVersion="检测到更新!可能有部分数据被重新处理",
lang="全中文",
atkModeName={"随机","徽章","击杀","反击"},
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
techrash="四清",techrashB2B="满贯 四清",techrashB3B="大满贯 四清",
spin={"Z型回旋","S型回旋","L型回旋","J型回旋","T型回旋","O型回旋","I型回旋"},
block={"Z","S","L","J","T","O","I"},
clear={"单清","双清","三清"},
mini="迷你",b2b="满贯",b3b="大满贯",
PC="场地全清",HPC="场地半清",
hold="暂存",next="下一个",
stage=function(n)return"关卡 "..n end,
great="不错!",
awesome="精彩。",
continue="继续。",
maxspeed="最高速度",
speedup="速度加快",
win="胜利",
finish="结束",
lose="失败",
pause="暂停",
pauseCount="暂停统计",
atk="",
spd="",
recv="",
eff="",
custom="自定义游戏",
customOption={
drop="下落速度:",
lock="锁定延迟:",
wait="放块延迟:",
fall="消行延迟:",
next="序列数量:",
hold="暂存:",
sequence="序列:",
visible="可见性:",
target="目标行数:",
freshLimit="锁延刷新次数:",
opponent="对手速度等级:",
bg="背景:",
bgm="背景音乐:",
},
customVal={
drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil,
fall=nil,
next=nil,
hold={"","","无限"},
sequence={"bag7","his4","随机"},
visible={"可见","半隐","全隐","瞬隐"},
target={10,20,40,100,200,500,1000,""},
freshLimit={0,8,15,""},
opponent={"无电脑","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
},
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
setting_game="游戏设置",
setting_graphic="画面设置",
setting_sound="声音设置",
setting_control="控制设置",
setting_skin="外观设置",
preview="预览",
keyboard="键盘",joystick="手柄",
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
musicRoom="音乐室",
nowPlaying="正在播放:",
settingSaved="设置已保存",
settingSavingError="设置保存失败:",
keyMapSaved="键位设置已保存",
keyMapSavingError="键位保存失败:",
VKSaved="虚拟按键设置已保存",
VKSavingError="虚拟按键保存失败:",
statSavingError="统计保存失败:",
unlockSavingError="解锁保存失败:",
recSavingError="纪录保存失败:",
needRestart="重新开始以生效",
copySuccess="已复制到剪切板",
dataCorrupted="数据损坏",
VKTchW="触摸点权重",
VKOrgW="原始点权重",
VKCurW="当前点权重",
noScore="暂无成绩",
highScore="最佳成绩",
newRecord="打破纪录",
errorMsg="Techmino遇到了问题,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
actName=actName,
load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载图片ing","加载模式ing","加载乱七八糟的东西ing"},
pauseStat={
"时间:",
"按键/旋转/暂存:",
"下块:",
"消行/挖掘:",
"攻击/挖掘攻击:",
"上涨/接收/抵消:",
"(大)满贯/全(半)清:",
"非极简操作:",
},
stat={
spin="回旋0~3",
clear="消除1~4",
"游戏运行次数:",
"游戏局数:",
"游戏时间:",
"按键/旋转/暂存:",
"方块/消行/攻击:",
"接收/抵消/上涨:",
"挖掘/挖掘攻击:",
"效率/挖掘效率:",
"多余操作/极简率:",
"满贯/大满贯:",
"全/半清:",
},
help={
"好像也没啥好帮助的吧?就当是关于了",
"这只是一个普通的方块游戏,请勿称此游戏为某某某方块",
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
"",
"使用LOVE2D引擎",
"作者:MrZ 邮箱:1046101471@qq.com",
"程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:MrZ/Miya",
"特别感谢:Flyz,Farter,196,Teatube,T830,[所有内测人员]和 你!",
"",
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
"仅通过唯一内测群1057456078进行免费下载/更新",
"其他渠道获得游戏皆有被修改/植入病毒的风险,程序只申请了震动&联网权限!",
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
},
used=[[
使用工具:
Beepbox
GFIE
Goldwave
使用库:
Cold_Clear[MinusKelvin]
simple-love-lights[dylhunn]
]],
support="支持作者",
group="官方QQ群(如果没有被暗改的话就是这个):822023725",
WidgetText={
main={
play="开始",
setting="设置",
music="音乐室",
stat="统计信息",
help="帮助",
qplay="快速开始",
lang="言/A",
quit="退出",
},
mode={
draw="画图(Q)",
custom="参数(E)",
start="开始",
back=BK,
},
music={
bgm="BGM",
up="",
play="播放",
down="",
back=BK,
},
custom={
up="",
down="",
left="",
right="",
set1="40行(1)",
set2="1v1(2)",
set3="无尽(3)",
set4="隐形(4)",
set5="极限(5)",
back=BK,
},
draw={
any="不定",
space="×",
clear="清除",
demo="不显示×",
copy="复制",
paste="粘贴",
back=BK,
},
play={
pause="暂停",
},
pause={
resume= "继续(空格)",
restart="重新开始(R)",
setting="设置(S)",
quit= "退出(esc)",
},
setting_game={
graphic="←画面设置",
sound="声音设置→",
ctrl="控制设置",
reTime="开局等待时间",
maxNext="最大预览数量",
autoPause="自动暂停",
layout="外观",
key="键位设置",
touch="触屏设置",
quickR="快速重新开始",
swap="组合键切换攻击模式",
fine="极简操作提示音",
back=BK,
},
setting_graphic={
sound="←声音设置",
game="游戏设置→",
ghost="阴影",
grid="网格",
center="旋转中心",
bg="背景",
smooth="平滑下落",
lockFX="锁定特效等级",
dropFX="下落特效等级",
shakeFX="晃动特效等级",
atkFX="攻击特效等级",
text="消行文本",
fullscreen="全屏",
frame="绘制帧率",
back=BK,
},
setting_sound={
game="←游戏设置",
graphic="画面设置→",
sfx="音效",
bgm="音乐",
vib="震动",
voc="语音",
stereo="立体声",
back=BK,
},
setting_control={
das="首次移动延迟",arr="移动重复延迟",
sddas="首次软降延迟",sdarr="软降重复延迟",
ihs="提前暂存",
irs="提前旋转",
ims="提前移动",
reset="重置",
back=BK,
},
setting_key={
back=BK,
},
setting_skin={
prev="",next="",
prev1="",next1="",spin1="",
prev2="",next2="",spin2="",
prev3="",next3="",spin3="",
prev4="",next4="",spin4="",
prev5="",next5="",spin5="",
prev6="",next6="",spin6="",
prev7="",next7="",spin7="",
skinR="重置配色",
faceR="重置方向",
back=BK,
},
setting_touch={
default="默认组合",
snap=function()return text.snapLevelName[sceneTemp.snap]end,
option="选项",
back=BK,
size="大小",
},
setting_touchSwitch={
b1= actName[1],b2=actName[2],b3=actName[3],b4=actName[4],
b5= actName[5],b6=actName[6],b7=actName[7],b8=actName[8],
b9= actName[9],b10=actName[10],b11=actName[11],b12=actName[12],
b13=actName[13],b14=actName[14],b15=actName[15],b16=actName[16],
b17=actName[17],b18=actName[18],b19=actName[19],b20=actName[20],
norm="标准",
pro="专业",
hide="显示虚拟按键",
track="按键自动跟踪",
icon="图标",
tkset="跟踪设置",
alpha="透明度",
back=BK,
},
setting_trackSetting={
VKDodge="自动避让",
back=BK,
},
help={
his="历史",
qq="作者QQ",
back=BK,
},
history={
prev="",
next="",
back=BK,
},
stat={
path="打开存储目录",
back=BK,
},
},
}

View File

@@ -1,321 +0,0 @@
local BK="Back"
local actName={
"Move Left:","Move Right:",
"Rotate Right:","Rotate Left:","Rotate 180°:",
"Hard Drop:","Soft Drop:","Hold:","Function:","Restart:",
"Instant Left:","Instant Right:","Ins Down:","Down 1:","Down 4:","Down 10:",
"Left Drop:","Right Drop:","Left INS:","Right INS:",
}
return{
anykey="Any Key to Continue",
newVersion="Updating detected!Maybe some data is recalculated",
lang="English",
atkModeName={"Random","Badges","K.O.s","Counters"},
royale_remain=function(n)return n.." Players Remain"end,
cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
techrash="Techrash",techrashB2B="B2B Techrash",techrashB3B="B2B2B Techrash",
spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"},
block={"Z","S","L","J","T","O","I"},
clear={" single"," double"," triple"},
mini="Mini",b2b="B2B ",b3b="B2B2B ",
PC="Perfect Clear",HPC="Clear",
hold="Hold",next="Next",
stage=function(n)return"STAGE "..n end,
great="Great!",
awesome="Awesome.",
continue="Continue.",
maxspeed="Max speed",
speedup="Speed up",
win="WIN",
finish="FINISH",
lose="LOSE",
pause="PAUSE",
pauseCount="Pause Count",
atk="ATK",
spd="SPD",
recv="RECV",
eff="EFF",
custom="Custom Game",
customOption={
drop="Drop speed:",
lock="Lock delay:",
wait="Next piece delay:",
fall="Clear row delay:",
next="Next count:",
hold="Hold:",
sequence="Sequence:",
visible="Visible:",
target="Line limit:",
freshLimit="Lock fresh limit:",
opponent="Opponent speed:",
bg="Background:",
bgm="BGM:",
},
customVal={
drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil,
fall=nil,
next=nil,
hold={"ON","OFF","FREE"},
sequence={"bag7","his4","random"},
visible={"normal","time","invisible","sudden"},
target={10,20,40,100,200,500,1000,""},
freshLimit={0,8,15,""},
opponent={"No CPU","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
},
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
setting_game="Game setting",
setting_graphic="Graphic setting",
setting_sound="Sound setting",
setting_control="Control Setting",
setting_skin="Layout Setting",
preview="Preview",
keyboard="Keyboard",joystick="Joystick",
ctrlSetHelp="Arrowkey to select/change slot,Enter to change,Esc back",
musicRoom="Music Room",
nowPlaying="Now Playing:",
settingSaved="Setting Saved",
settingSavingError="Failed to save setting:",
keyMapSaved="Key setting saved",
keyMapSavingError="Failed to save key setting:",
VKSaved="virtual key saved",
VKSavingError="Failed to save virtual key:",
statSavingError="Failed to save stat:",
unlockSavingError="Failed to save unlock:",
recSavingError="Failed to save record:",
needRestart="Effective after restart",
copySuccess="Copy Success",
dataCorrupted="Data Corrupted",
VKTchW="Touch weight",
VKOrgW="Origion weight",
VKCurW="CurPos weight",
noScore="No Score Yet",
highScore="Highscore",
newRecord="New Rocord",
errorMsg="Techmino ran into a problem and needs to restart.\nWe collected some error info, and you can send them to the author.",
actName=actName,
load={[0]="Finished","Loading VOICE","Loading BGM","Loading SFX","Loading images","Loading modes","Loading other things"},
pauseStat={
"Time:",
"Key/Rotate/Hold:",
"Piece:",
"Row/Dig:",
"Attack/DigAtk:",
"Receive:",
"B2B/B3B/PC/HPC:",
"Finesse:",
},
stat={
spin="spin0~3",
clear="clear1~4",
"Game Runned:",
"Game Played:",
"Game Time:",
"Key/Rotate/Hold:",
"Block/Row/Atk.:",
"Recv./Res./Asc.:",
"Dig/Dig Atk.:",
"Eff./Dig Eff.:",
"Finesse Err./Rate:",
"B2B/B3B:",
"PC/HPC:",
},
help={
"I don't think you need \"help\".",
"THIS IS ONLY A BLOCK GAME,not T****s",
"But just play like playing TO/C2/KOS/TGM3",
"",
"Powered by LOVE2D",
"Author:MrZ E-mail:1046101471@qq.com",
"Program:MrZ Art:MrZ Music:MrZ SFX:MrZ VOICE:MrZ/Miya",
"Special thanks:Flyz,Farter,196,Teatube,T830,[all test staff] and YOU!",
"",
"Any bugs/suggestions to my E-mail.(may with screenshot)",
"Only released in test group for FREE",
"Game downloaded from other way may implanted with virous",
"Only network/vibrating permission applied",
"Author is not responsible for any loss by edited game",
},
used=[[
Tool used:
Beepbox
GFIE
Goldwave
Lib used:
Cold_Clear[MinusKelvin]
simple-love-lights[dylhunn]
]],
support="Support Author",
group="Official QQ Group(if not hacked):822023725",
WidgetText={
main={
play="Play",
setting="Settings",
music="Music room",
stat="Statistics",
help="Help",
qplay="qPlay",
lang="言/A",
quit="Quit",
},
mode={
draw="Draw(Q)",
custom="Setting(E)",
start="Start",
back=BK,
},
music={
bgm="BGM",
up="",
play="Play",
down="",
back=BK,
},
custom={
up="",
down="",
left="",
right="",
set1="40L(1)",
set2="1v1(2)",
set3="infinite(3)",
set4="blind(4)",
set5="master(5)",
back=BK,
},
draw={
any="Erase",
space="×",
clear="Clear",
demo="Don't show ×",
copy="Copy",
paste="Paste",
back=BK,
},
play={
pause="Pause",
},
pause={
resume="Resume(space)",
restart="Restart(R)",
setting="Setting(S)",
quit="Quit(esc)",
},
setting_game={
graphic="←Graphic",
sound="Sound→",
ctrl="Control setting",
reTime="Delay before game",
maxNext="Max next count",
autoPause="Auto pause",
layout="Layout",
key="Key Setting",
touch="Touch Setting",
quickR="Quick restart",
autoPause="Auto pause",
swap="Combo key to change ATK mode",
fine="Finesse error SFX",
back=BK,
},
setting_graphic={
sound="←Sound",
game="Game→",
ghost="Ghost",
grid="Grid",
center="Center",
bg="Background",
smooth="Smooth drop",
lockFX="Lock FX level",
dropFX="Drop FX level",
shakeFX="Shake FX level",
atkFX="ATK FX level",
text="Line-clear text",
fullscreen="Fullscreen",
frame="draw FPS",
back=BK,
},
setting_sound={
game="←Game",
graphic="Graphic→",
sfx="SFX",
bgm="BGM",
vib="Vibration",
voc="Vocal",
stereo="Stereo",
back=BK,
},
setting_control={
das="DAS",arr="ARR",
sddas="softdrop DAS",sdarr="softdrop ARR",
ihs="Initial Hold",
irs="Initial Rotate",
ims="Initial Move",
reset="Reset",
back=BK,
},
setting_key={
back=BK,
},
setting_skin={
prev="",next="",
prev1="",next1="",spin1="R",
prev2="",next2="",spin2="R",
prev3="",next3="",spin3="R",
prev4="",next4="",spin4="R",
prev5="",next5="",spin5="R",
prev6="",next6="",spin6="R",
prev7="",next7="",spin7="R",
skinR="Reset Color",
faceR="Reset Dir.",
back=BK,
},
setting_touch={
default="Defaults",
snap=function()return text.snapLevelName[sceneTemp.snap]end,
option="Option",
back=BK,
size="Size",
},
setting_touchSwitch={
b1= actName[1],b2=actName[2],b3=actName[3],b4=actName[4],
b5= actName[5],b6=actName[6],b7=actName[7],b8=actName[8],
b9= actName[9],b10=actName[10],b11=actName[11],b12=actName[12],
b13=actName[13],b14=actName[14],b15=actName[15],b16=actName[16],
b17=actName[17],b18=actName[18],b19=actName[19],b20=actName[20],
norm="Normal",
pro="Professioanl",
hide="Show Virtual Key",
track="Auto track",
icon="Icon",
tkset="Track setting",
alpha="Alpha",
back=BK,
},
setting_trackSetting={
VKDodge="Auto Dodge",
back=BK,
},
help={
his="History",
qq="Author's qq",
back=BK,
},
history={
prev="",
next="",
back=BK,
},
stat={
path="Open Data Folder",
back=BK,
},
}
}

1299
main.lua

File diff suppressed because it is too large Load Diff

View File

@@ -12,21 +12,6 @@ local function score(P)
end
return{
name={
"宗师",
"宗师",
"GrandMaster",
},
level={
"GM",
"GM",
"GM",
},
info={
"成为方块大师",
"成为方块大师",
"To be Grand Master",
},
color=color.lightBlue,
env={
noFly=true,

View File

@@ -1,20 +1,5 @@
local int,rnd=math.floor,math.random
return{
name={
"进攻",
"进攻",
"Attacker",
},
level={
"困难",
"困难",
"HARD",
},
info={
"进攻练习",
"进攻练习",
"Attacking better then defending",
},
color=color.magenta,
env={
drop=30,lock=60,

View File

@@ -1,20 +1,5 @@
local int,rnd=math.floor,math.random
return{
name={
"进攻",
"进攻",
"Attacker",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"进攻练习",
"进攻练习",
"Attacking better then defending",
},
color=color.lightYellow,
env={
drop=5,lock=60,

View File

@@ -7,21 +7,6 @@ local function newField(P)
end
return{
name={
"大爆炸",
"大爆炸",
"Big Bang",
},
level={
"简单",
"简单",
"EASY",
},
info={
"All-spin 入门教程\n未制作完成,下块即通",
"All-spin 入门教程\n未制作完成,下块即通",
"All-spin Tutorial!\nUNFINISHED,drop to win",
},
color=color.lightGrey,
env={
drop=1e99,lock=1e99,

View File

@@ -1,20 +1,5 @@
local min=math.min
return{
name={
"隐形",
"隐形",
"Blind",
},
level={
"半隐",
"半隐",
"HALF",
},
info={
"最强大脑",
"最强大脑",
"Invisible board",
},
color=color.cyan,
env={
drop=30,lock=45,

View File

@@ -1,20 +1,5 @@
local min=math.min
return{
name={
"隐形",
"隐形",
"Blind",
},
level={
"瞬隐",
"瞬隐",
"SUDDEN",
},
info={
"最强大脑",
"最强大脑",
"Invisible board",
},
color=color.magenta,
env={
drop=15,lock=45,

View File

@@ -1,25 +1,11 @@
local min=math.min
return{
name={
"隐形",
"隐形",
"Blind",
},
level={
"瞬隐+",
"瞬隐+",
"SUDDEN+",
},
info={
"最强大脑",
"最强大脑",
"Invisible board",
},
color=color.red,
env={
drop=10,lock=60,
fall=5,
center=false,ghost=false,
dropFX=0,lockFX=0,
visible="none",
dropPiece=player.reach_winCheck,
freshLimit=15,

View File

@@ -1,20 +1,5 @@
local min=math.min
return{
name={
"隐形",
"隐形",
"Blind",
},
level={
"全隐",
"全隐",
"ALL",
},
info={
"最强大脑",
"最强大脑",
"Invisible board",
},
color=color.green,
env={
drop=15,lock=45,

View File

@@ -1,26 +1,12 @@
local min=math.min
return{
name={
"隐形",
"隐形",
"Blind",
},
level={
"啥都不剩隐",
"啥都不剩隐",
"NOTHING",
},
info={
"最强大脑",
"最强大脑",
"Invisible board",
},
color=color.red,
env={
drop=30,lock=60,
fall=5,
block=false,
center=false,ghost=false,
dropFX=0,lockFX=0,
visible="none",
dropPiece=player.reach_winCheck,
freshLimit=15,

View File

@@ -18,21 +18,6 @@ local function check_c4w(P)
end
return{
name={
"C4W练习",
"中四宽练习",
"C4W Training",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"无 限 连 击",
"无 限 连 击",
"Infinite combo",
},
color=color.red,
env={
drop=5,lock=30,

View File

@@ -16,21 +16,6 @@ local function check_c4w(P)
end
return{
name={
"C4W练习",
"中四宽练习",
"C4W Training",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"无 限 连 击",
"无 限 连 击",
"Infinite combo",
},
color=color.green,
env={
drop=30,lock=60,oncehold=false,

View File

@@ -14,21 +14,6 @@ local function check_LVup(P)
end
return{
name={
"高速经典",
"高速经典",
"Classic",
},
level={
"CTWC",
"锦标赛",
"CTWC",
},
info={
"高速经典",
"高速经典",
"Vintage car drag racing",
},
color=color.lightBlue,
env={
noFly=true,

View File

@@ -1,21 +1,6 @@
local gc=love.graphics
local int=math.floor
return{
name={
"自定义",
"自定义",
"Custom",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"画点什么然后把它消除!",
"画点什么然后把它消除!",
"Draw something then clear it!",
},
color=color.white,
env={
dropPiece=player.reach_winCheck,
@@ -32,9 +17,9 @@ return{
if L~=0 then
modeEnv.target=nil
if L<10 then
newPlayer(2,965,360,.5,AITemplate("9S",2*L))
newAIPlayer(2,965,360,.5,AITemplate("9S",2*L))
else
newPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10)))
newAIPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10)))
end
end
preField.h=20

View File

@@ -18,21 +18,6 @@ local function puzzleCheck(P)
end
return{
name={
"自定义",
"自定义",
"Custom",
},
level={
"拼图",
"拼图",
"PUZZLE",
},
info={
"画点什么然后把它拼出来吧!",
"画点什么然后把它拼出来吧!",
"Draw something then stack it!",
},
color=color.white,
env={
puzzle=true,
@@ -52,9 +37,9 @@ return{
if L~=0 then
modeEnv.target=nil
if L<10 then
newPlayer(2,965,360,.5,AITemplate("9S",2*L))
newAIPlayer(2,965,360,.5,AITemplate("9S",2*L))
else
newPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10)))
newAIPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10)))
end
end
preField.h=20

View File

@@ -1,20 +1,5 @@
local int,rnd=math.floor,math.random
return{
name={
"防守",
"防守",
"Defender",
},
level={
"疯狂",
"疯狂",
"Lunatic",
},
info={
"防守练习",
"防守练习",
"Hand them!",
},
color=color.red,
env={
drop=5,lock=60,

View File

@@ -1,20 +1,5 @@
local int,rnd=math.floor,math.random
return{
name={
"防守",
"防守",
"Defender",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"防守练习",
"防守练习",
"Hand them!",
},
color=color.green,
env={
drop=30,lock=60,

View File

@@ -1,20 +1,5 @@
local max,rnd=math.max,math.random
return{
name={
"挖掘",
"挖掘",
"Dig",
},
level={
"困难",
"困难",
"HARD",
},
info={
"挖掘练习",
"挖掘练习",
"Downstack!",
},
color=color.magenta,
env={
drop=60,lock=120,

View File

@@ -1,20 +1,5 @@
local max,rnd=math.max,math.random
return{
name={
"挖掘",
"挖掘",
"Dig",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"挖掘练习",
"挖掘练习",
"Downstack!",
},
color=color.lightYellow,
env={
drop=10,lock=30,

View File

@@ -1,25 +1,89 @@
local min=math.min
local rnd,min,rem=math.random,math.min,table.remove
return{
name={
"干旱",
"干旱",
"Drought",
},
level={
"100L",
"100行",
"100L",
},
info={
"后 妈 发 牌",
"后 妈 发 牌",
"ERRSEQ flood attack",
},
color=color.red,
env={
drop=20,lock=60,
sequence="drought2",
sequence=function(P)
for i=1,3 do P:getNext(7)end
end,
freshMethod=function(P)
if not P.next[1] then
local height=freeRow.get(0)
local max=#P.field
for x=1,10 do
local h=max
while P.field[h][x]==0 and h>1 do
h=h-1
end
height[x]=h
end--get heights
height[11]=999
local res={1,1,2,2,3,4}
local d=0
local A
for i=1,10 do
d=d+height[i]
end
if d<40 or P.stat.row>2*42 then
A=#res+1
for i=A,A+5 do
res[i]=1
res[i+6]=2
end
goto END
end
--give I when no hole
d=-999--height difference
--A=hole mark
for x=2,11 do
local _=height[x]-height[x-1]
if d<-2 and _>2 then
A=true
end
d=_
end
if not A then
A=#res+1
res[A]=7
res[A+1]=7
res[A+2]=7
end
--give O when no Δ=0/give T when no Δ=1
d=0--Δ=0
A=0--Δ=1
for x=2,10 do
local _=height[x]-height[x-1]
if _==0 then
d=d+1
elseif _==1 or _==-1 then
A=A+1
end
end
if d<3 then
A=#res+1
res[A]=6
res[A+1]=6
res[A+2]=6
end
if A<3 then
A=#res+1
res[A]=5
res[A+1]=5
res[A+2]=5
res[A+3]=5
res[A+4]=5
end
::END::
freeRow.discard(height)
P:getNext(res[rnd(#res)])
end
end,
target=100,dropPiece=player.reach_winCheck,
next=1,hold=false,
ospin=false,
freshLimit=15,
bg="glow",bgm="reason",

View File

@@ -1,25 +1,12 @@
local min=math.min
return{
name={
"干旱",
"干旱",
"Drought",
},
level={
"100L",
"100行",
"100L",
},
info={
"你I没了",
"你I没了",
"B a g 6",
},
color=color.green,
env={
drop=20,lock=60,
sequence="drought1",
sequence="bag",
bag={1,1,2,2,3,3,4,4,5,5,6,6},
target=100,dropPiece=player.reach_winCheck,
next=3,
ospin=false,
freshLimit=15,
bg="glow",bgm="reason",

View File

@@ -1,19 +1,4 @@
return{
name={
"本地多人",
"本地多人",
"Multiplayer",
},
level={
"2P",
"2P",
"2P",
},
info={
"不是联网也不是局域网",
"不是联网也不是局域网",
"No network\nlocal game only",
},
color=color.white,
env={
drop=60,lock=60,

View File

@@ -1,19 +1,4 @@
return{
name={
"本地多人",
"本地多人",
"Multiplayer",
},
level={
"3P",
"3P",
"3P",
},
info={
"不是联网也不是局域网",
"不是联网也不是局域网",
"No network\nlocal game only",
},
color=color.white,
env={
drop=60,lock=60,

View File

@@ -1,19 +1,4 @@
return{
name={
"本地多人",
"本地多人",
"Multiplayer",
},
level={
"4P",
"4P",
"4P",
},
info={
"不是联网也不是局域网",
"不是联网也不是局域网",
"No network\nlocal game only",
},
color=color.white,
env={
drop=60,lock=60,

View File

@@ -1,20 +1,5 @@
local format=string.format
return{
name={
"无尽",
"无尽",
"Infinite",
},
level={
"",
"",
"",
},
info={
"沙盒",
"沙盒",
"Sandbox",
},
color=color.lightGrey,
env={
drop=1e99,lock=1e99,

View File

@@ -1,27 +1,13 @@
local format,rnd=string.format,math.random
local function check_rise(P)
while P.garbageBeneath<6 do
P:garbageRise(10,1,rnd(10))
P.modeData.point=P.modeData.point+1
if #P.clearedRow==0 then
for i=1,8-P.garbageBeneath do
P:garbageRise(13,1,rnd(10))
end
end
end
return{
name={
"无尽:挖掘",
"无尽:挖掘",
"Infinite:dig",
},
level={
"",
"",
"",
},
info={
"挖呀挖呀挖",
"挖呀挖呀挖",
"Dig to Nether?",
},
color=color.white,
env={
drop=1e99,lock=1e99,
@@ -32,24 +18,24 @@ return{
},
load=function()
newPlayer(1,340,15)
for _=1,5 do
players[1]:garbageRise(10,1,rnd(10))
for _=1,8 do
players[1]:garbageRise(13,1,rnd(10))
end
end,
mesDisp=function(P,dx,dy)
setFont(45)
mStr(P.modeData.point,-81,190)
mStr(P.stat.dig,-81,190)
mStr(P.stat.atk,-81,310)
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
mText(drawableText.line,-81,243)
mText(drawableText.atk,-81,363)
mText(drawableText.eff,-81,475)
end,
score=function(P)return{P.modeData.point}end,
score=function(P)return{P.stat.dig}end,
scoreDisp=function(D)return D[1].." Lines"end,
comp=function(a,b)return a[1]>b[1]end,
getRank=function(P)
local L=P.modeData.point
local L=P.stat.dig
return
L>=626 and 5 or
L>=400 and 4 or

View File

@@ -15,28 +15,13 @@ local function check(P)
end
return{
name={
"马拉松",
"马拉松",
"Marathon",
},
level={
"困难",
"困难",
"HARD",
},
info={
"200行高速马拉松",
"200行高速马拉松",
"200L marathon in high speed",
},
color=color.magenta,
env={
noFly=true,
mindas=7,minarr=1,minsdarr=1,
drop=.5,wait=8,fall=20,
target=50,dropPiece=check,
bg="strap",bgm="race",
bg="strap",bgm="push",
},
pauseLimit=true,
slowMark=true,

View File

@@ -14,21 +14,6 @@ local function check_LVup(P)
end
return{
name={
"马拉松",
"马拉松",
"Marathon",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"200行加速马拉松",
"200行加速马拉松",
"200L marathon with acceleration",
},
color=color.green,
env={
noFly=true,
@@ -36,7 +21,7 @@ return{
wait=8,fall=20,
target=10,dropPiece=check_LVup,
mindas=7,minarr=1,minsdarr=1,
bg="strap",bgm="way",
bg="strap",bgm="push",
},
pauseLimit=true,
slowMark=true,

View File

@@ -33,21 +33,6 @@ local function score(P)
end
return{
name={
"大师",
"大师",
"Master",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"20G:上级者的挑战",
"20G:上级者的挑战",
"20G:For Pro",
},
color=color.red,
env={
noFly=true,

View File

@@ -37,21 +37,6 @@ local function score(P)
end
return{
name={
"大师",
"大师",
"Master",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"20G:初心者适用",
"20G:初心者适用",
"20G:Back to beginner",
},
color=color.red,
env={
noFly=true,

View File

@@ -34,21 +34,6 @@ local function score(P)
end
return{
name={
"大师",
"大师",
"Master",
},
level={
"终点",
"终点",
"FINAL",
},
info={
"究极20G:无法触及的终点",
"究极20G:无法触及的终点",
"Extreme 20G:Unreachable destination",
},
color=color.lightGrey,
env={
noFly=true,

View File

@@ -1,20 +1,5 @@
local gc=love.graphics
return{
name={
"全清挑战",
"全清挑战",
"PC Challenge",
},
level={
"困难",
"困难",
"HARD",
},
info={
"100行内刷PC",
"100行内刷全清",
"More PCs in 100L",
},
color=color.magenta,
env={
drop=60,lock=120,
@@ -36,12 +21,6 @@ return{
setFont(75)
mStr(P.stat.pc,-81,350)
mText(drawableText.pc,-81,432)
gc.setColor(.5,.5,.5)
if frame>179 then
local y=72*(7-(P.stat.piece+(P.hd.id>0 and 2 or 1))%7)-36
gc.line(320,y,442,y)
end
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,

View File

@@ -1,20 +1,5 @@
local gc=love.graphics
return{
name={
"全清挑战",
"全清挑战",
"PC Challenge",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"100行内刷PC",
"100行内刷全清",
"More PCs in 100L",
},
color=color.red,
env={
drop=20,lock=60,
@@ -36,12 +21,6 @@ return{
setFont(75)
mStr(P.stat.pc,-81,350)
mText(drawableText.pc,-81,432)
gc.setColor(.5,.5,.5)
if frame>179 then
local y=72*(7-(P.stat.piece+(P.hd.id>0 and 2 or 1))%7)-36
gc.line(320,y,442,y)
end
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,

View File

@@ -1,20 +1,5 @@
local gc=love.graphics
return{
name={
"全清挑战",
"全清挑战",
"PC Challenge",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"100行内刷PC",
"100行内刷全清",
"More PCs in 100L",
},
color=color.green,
env={
oncehold=false,
@@ -35,12 +20,6 @@ return{
setFont(75)
mStr(P.stat.pc,-81,350)
mText(drawableText.pc,-81,432)
gc.setColor(.5,.5,.5)
if frame>179 then
local y=72*(7-(P.stat.piece+(P.hd.id>0 and 2 or 1))%7)-36
gc.line(320,y,442,y)
end
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,

View File

@@ -66,21 +66,6 @@ local function newPC(P)
end
return{
name={
"全清训练",
"全清训练",
"PC Training",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"简易PC题库,熟悉全清定式的组合",
"简易全清题库,熟悉全清定式的组合",
"Let's learn some PCs",
},
color=color.red,
env={
next=4,

View File

@@ -50,21 +50,6 @@ local function newPC(P)
end
end
return{
name={
"全清训练",
"全清训练",
"PC Training",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"简易PC题库,熟悉全清定式的组合",
"简易全清题库,熟悉全清定式的组合",
"Let's learn some PCs",
},
color=color.green,
env={
next=4,

View File

@@ -11,21 +11,6 @@ local function update_round(P)
end
return{
name={
"回合制",
"回合制",
"Turn-Based",
},
level={
"简单",
"简单",
"EASY",
},
info={
"下棋模式",
"下棋模式",
"Chess?",
},
color=color.cyan,
env={
drop=1e99,lock=1e99,
@@ -35,7 +20,8 @@ return{
},
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",10))
newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,5000))
garbageSpeed=1e99
end,
mesDisp=function(P,dx,dy)
end,

View File

@@ -11,21 +11,6 @@ local function update_round(P)
end
return{
name={
"回合制",
"回合制",
"Turn-Based",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"下棋模式",
"下棋模式",
"Chess?",
},
color=color.green,
env={
drop=1e99,lock=1e99,
@@ -35,7 +20,8 @@ return{
},
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",10))
newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,10000))
garbageSpeed=1e99
end,
mesDisp=function(P,dx,dy)
end,
@@ -46,10 +32,10 @@ return{
if P.result=="WIN"then
local T=P.stat.piece
return
T<=30 and 5 or
T<=40 and 4 or
T<=55 and 3 or
T<=70 and 2 or
T<=23 and 5 or
T<=26 and 4 or
T<=40 and 3 or
T<=60 and 2 or
1
end
end,

View File

@@ -11,21 +11,6 @@ local function update_round(P)
end
return{
name={
"回合制",
"回合制",
"Turn-Based",
},
level={
"困难",
"困难",
"HARD",
},
info={
"下棋模式",
"下棋模式",
"Chess?",
},
color=color.magenta,
env={
drop=1e99,lock=1e99,
@@ -35,7 +20,8 @@ return{
},
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",10))
newAIPlayer(2,965,360,.5,AITemplate("CC",10,2,true,12600))
garbageSpeed=1e99
end,
mesDisp=function(P,dx,dy)
end,
@@ -46,10 +32,10 @@ return{
if P.result=="WIN"then
local T=P.stat.piece
return
T<=35 and 5 or
T<=45 and 4 or
T<=65 and 3 or
T<=85 and 2 or
T<=30 and 5 or
T<=40 and 4 or
T<=55 and 3 or
T<=75 and 2 or
1
end
end,

View File

@@ -11,21 +11,6 @@ local function update_round(P)
end
return{
name={
"回合制",
"回合制",
"Turn-Based",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"下棋模式",
"下棋模式",
"Chess?",
},
color=color.red,
env={
drop=1e99,lock=1e99,
@@ -35,7 +20,8 @@ return{
},
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",10))
newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,16260))
garbageSpeed=1e99
end,
mesDisp=function(P,dx,dy)
end,
@@ -46,10 +32,10 @@ return{
if P.result=="WIN"then
local T=P.stat.piece
return
T<=40 and 5 or
T<=50 and 4 or
T<=75 and 3 or
T<=100 and 2 or
T<=30 and 5 or
T<=40 and 4 or
T<=55 and 3 or
T<=75 and 2 or
1
end
end,

View File

@@ -11,21 +11,6 @@ local function update_round(P)
end
return{
name={
"回合制",
"回合制",
"Turn-Based",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"下棋模式",
"下棋模式",
"Chess?",
},
color=color.lightYellow,
env={
drop=1e99,lock=1e99,
@@ -35,7 +20,8 @@ return{
},
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",10))
newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,26000))
garbageSpeed=1e99
end,
mesDisp=function(P,dx,dy)
end,
@@ -46,10 +32,10 @@ return{
if P.result=="WIN"then
local T=P.stat.piece
return
T<=50 and 5 or
T<=60 and 4 or
T<=80 and 3 or
T<=100 and 2 or
T<=30 and 5 or
T<=40 and 4 or
T<=55 and 3 or
T<=75 and 2 or
1
end
end,

View File

@@ -1,19 +1,4 @@
return{
name={
"单挑",
"单挑",
"Battle",
},
level={
"简单",
"简单",
"EASY",
},
info={
"打败AI",
"打败电脑",
"Beat AI",
},
color=color.cyan,
env={
drop=60,lock=60,
@@ -23,7 +8,7 @@ return{
pauseLimit=true,
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",3))
newAIPlayer(2,965,360,.5,AITemplate("9S",3))
end,
mesDisp=function(P,dx,dy)
end,
@@ -34,10 +19,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=15 and 5 or
T<=20 and 5 or
T<=25 and 4 or
T<=40 and 3 or
T<=80 and 2 or
T<=35 and 3 or
T<=60 and 2 or
1
end
end,

View File

@@ -1,19 +1,4 @@
return{
name={
"单挑",
"单挑",
"Battle",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"打败AI",
"打败AI",
"Beat AI",
},
color=color.green,
env={
drop=60,lock=60,
@@ -23,7 +8,7 @@ return{
pauseLimit=true,
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",5))
newAIPlayer(2,965,360,.5,AITemplate("9S",5))
end,
mesDisp=function(P,dx,dy)
end,
@@ -34,10 +19,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=16 and 5 or
T<=28 and 4 or
T<=45 and 3 or
T<=90 and 2 or
T<=20 and 5 or
T<=25 and 4 or
T<=40 and 3 or
T<=62 and 2 or
1
end
end,

View File

@@ -1,19 +1,4 @@
return{
name={
"单挑",
"单挑",
"Battle",
},
level={
"困难",
"困难",
"HARD",
},
info={
"打败AI",
"打败AI",
"Beat AI",
},
color=color.magenta,
env={
drop=60,lock=60,
@@ -23,7 +8,7 @@ return{
pauseLimit=true,
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",7))
newAIPlayer(2,965,360,.5,AITemplate("9S",7))
end,
mesDisp=function(P,dx,dy)
end,
@@ -34,9 +19,9 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=17 and 5 or
T<=26 and 4 or
T<=45 and 3 or
T<=20 and 5 or
T<=25 and 4 or
T<=35 and 3 or
T<=60 and 2 or
1
end

View File

@@ -1,19 +1,4 @@
return{
name={
"单挑",
"单挑",
"Battle",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"打败AI",
"打败AI",
"Beat AI",
},
color=color.red,
env={
drop=60,lock=60,
@@ -23,7 +8,7 @@ return{
pauseLimit=true,
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",8))
newAIPlayer(2,965,360,.5,AITemplate("CC",9,2,true,26000))
end,
mesDisp=function(P,dx,dy)
end,
@@ -34,10 +19,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=18 and 5 or
T<=30 and 4 or
T<=50 and 3 or
T<=70 and 2 or
T<=20 and 5 or
T<=25 and 4 or
T<=35 and 3 or
T<=60 and 2 or
1
end
end,

View File

@@ -1,19 +1,4 @@
return{
name={
"单挑",
"单挑",
"Battle",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"打败AI",
"打败AI",
"Beat AI",
},
color=color.lightYellow,
env={
drop=60,lock=60,
@@ -23,7 +8,7 @@ return{
pauseLimit=true,
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",9))
newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,50000))
end,
mesDisp=function(P,dx,dy)
end,
@@ -35,8 +20,8 @@ return{
local T=P.stat.time
return
T<=20 and 5 or
T<=30 and 4 or
T<=45 and 3 or
T<=25 and 4 or
T<=35 and 3 or
T<=60 and 2 or
1
end

View File

@@ -1,21 +1,6 @@
local gc=love.graphics
local rnd=math.random
return{
name={
"竞速",
"竞速",
"Sprint",
},
level={
"10L",
"10行",
"10L",
},
info={
"消除10行",
"消除10行",
"Clear 10 lines",
},
color=color.cyan,
env={
drop=60,lock=60,

View File

@@ -1,21 +1,6 @@
local gc=love.graphics
local rnd=math.random
return{
name={
"竞速",
"竞速",
"Sprint",
},
level={
"100L",
"100行",
"100L",
},
info={
"消除100行",
"消除100行",
"Clear 100 lines",
},
color=color.orange,
env={
drop=60,lock=60,
@@ -48,7 +33,7 @@ return{
T<=90 and 4 or
T<=130 and 3 or
T<=200 and 2 or
T<=270 and 1 or
T<=360 and 1 or
0
end,
}

View File

@@ -1,21 +1,6 @@
local gc=love.graphics
local rnd=math.random
return{
name={
"竞速",
"竞速",
"Sprint",
},
level={
"1000L",
"1000行",
"1000L",
},
info={
"消除1000行",
"消除1000行",
"Clear 1000 lines",
},
color=color.lightGrey,
env={
drop=60,lock=60,
@@ -47,8 +32,8 @@ return{
T<=626 and 5 or
T<=1000 and 4 or
T<=1400 and 3 or
T<=2200 and 2 or
T<=3000 and 1 or
T<=2260 and 2 or
T<=3260 and 1 or
0
end,
}

View File

@@ -1,21 +1,6 @@
local gc=love.graphics
local rnd=math.random
return{
name={
"竞速",
"竞速",
"Sprint",
},
level={
"20L",
"20行",
"20L",
},
info={
"消除20行",
"消除20行",
"Clear 20 lines",
},
color=color.lightBlue,
env={
drop=60,lock=60,
@@ -46,8 +31,8 @@ return{
return
T<=13 and 5 or
T<=18 and 4 or
T<=45 and 3 or
T<=80 and 2 or
T<=32.6 and 3 or
T<=62.6 and 2 or
T<=126 and 1 or
0
end,

View File

@@ -1,21 +1,6 @@
local gc=love.graphics
local rnd=math.random
return{
name={
"竞速",
"竞速",
"Sprint",
},
level={
"40L",
"40行",
"40L",
},
info={
"消除40行",
"消除40行",
"Clear 40 lines",
},
color=color.green,
env={
drop=60,lock=60,
@@ -46,8 +31,8 @@ return{
return
T<=26 and 5 or
T<=32.6 and 4 or
T<=40 and 3 or
T<=62 and 2 or
T<=52.6 and 3 or
T<=92.9 and 2 or
T<=183 and 1 or
0
end,

View File

@@ -1,21 +1,6 @@
local gc=love.graphics
local rnd=math.random
return{
name={
"竞速",
"竞速",
"Sprint",
},
level={
"400L",
"400行",
"400L",
},
info={
"消除400行",
"消除400行",
"Clear 400 lines",
},
color=color.red,
env={
drop=60,lock=60,
@@ -44,11 +29,11 @@ return{
if P.stat.row<400 then return end
local T=P.stat.time
return
T<=255 and 5 or
T<=330 and 4 or
T<=420 and 3 or
T<=626 and 2 or
T<=1000 and 1 or
T<=62,255 and 5 or
T<=90,326 and 4 or
T<=130,462 and 3 or
T<=200,626 and 2 or
T<=360,1260 and 1 or
0
end,
}

View File

@@ -1,20 +1,5 @@
local max,rnd=math.max,math.random
return{
name={
"生存",
"生存",
"Survivor",
},
level={
"简单",
"简单",
"EASY",
},
info={
"你能存活多久?",
"你能存活多久?",
"Survive Longer!",
},
color=color.cyan,
env={
drop=30,lock=45,

View File

@@ -1,20 +1,5 @@
local max,rnd=math.max,math.random
return{
name={
"生存",
"生存",
"Survivor",
},
level={
"困难",
"困难",
"HARD",
},
info={
"你能存活多久?",
"你能存活多久?",
"Survive Longer!",
},
color=color.magenta,
env={
drop=30,lock=45,

View File

@@ -1,20 +1,5 @@
local max,rnd=math.max,math.random
return{
name={
"生存",
"生存",
"Survivor",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"你能存活多久?",
"你能存活多久?",
"Survive Longer!",
},
color=color.red,
env={
drop=30,lock=45,

View File

@@ -1,20 +1,5 @@
local max,rnd=math.max,math.random
return{
name={
"生存",
"生存",
"Survivor",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"你能存活多久?",
"你能存活多久?",
"Survive Longer!",
},
color=color.green,
env={
drop=30,lock=45,

View File

@@ -1,20 +1,5 @@
local max,rnd=math.max,math.random
return{
name={
"生存",
"生存",
"Survivor",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"你能存活多久?",
"你能存活多久?",
"Survive Longer!",
},
color=color.lightYellow,
env={
drop=5,lock=60,

View File

@@ -6,21 +6,6 @@ local function tech_check_ultimate(P)
end
return{
name={
"科研",
"科研",
"Tech",
},
level={
"困难+",
"困难+",
"HARD+",
},
info={
"仅允许spin与PC",
"仅允许spin与全清",
"Spin&PC only",
},
color=color.darkMagenta,
env={
drop=30,lock=60,

View File

@@ -6,21 +6,6 @@ local function tech_check_easy(P)
end
return{
name={
"科研",
"科研",
"Tech",
},
level={
"困难",
"困难",
"HARD",
},
info={
"禁止断B2B",
"禁止断满贯",
"Keep B2B",
},
color=color.magenta,
env={
drop=20,lock=60,

View File

@@ -6,21 +6,6 @@ local function tech_check_ultimate(P)
end
return{
name={
"科研",
"科研",
"Tech",
},
level={
"疯狂+",
"疯狂+",
"LUNATIC+",
},
info={
"仅允许spin与PC",
"仅允许spin与全清",
"Spin&PC only",
},
color=color.darkRed,
env={
_20G=true,lock=60,

View File

@@ -6,21 +6,6 @@ local function tech_check_hard(P)
end
return{
name={
"科研",
"科研",
"Tech",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"禁止普通消除",
"禁止普通消除",
"No normal clear",
},
color=color.red,
env={
_20G=true,lock=60,

View File

@@ -6,21 +6,6 @@ local function tech_check_ultimate(P)
end
return{
name={
"科研",
"科研",
"Tech",
},
level={
"普通+",
"普通+",
"NORMAL+",
},
info={
"仅允许spin与PC",
"仅允许spin与全清",
"Spin&PC only",
},
color=color.darkGreen,
env={
oncehold=false,

View File

@@ -6,21 +6,6 @@ local function tech_check_easy(P)
end
return{
name={
"科研",
"科研",
"Tech",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"禁止断B2B",
"禁止断B2B",
"Keep B2B",
},
color=color.green,
env={
oncehold=false,

View File

@@ -6,21 +6,6 @@ local function tech_check_ultimate(P)
end
return{
name={
"科研",
"科研",
"Tech",
},
level={
"极限+",
"极限+",
"ULTIMATE+",
},
info={
"仅允许spin与PC,强制最简操作",
"仅允许spin与全清,强制最简操作",
"Spin&PC only,no finesse error",
},
color=color.grey,
env={
arr=0,

View File

@@ -6,21 +6,6 @@ local function tech_check_hard(P)
end
return{
name={
"科研",
"科研",
"Tech",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"禁止普通消除,强制最简操作",
"禁止普通消除,强制最简操作",
"No normal clear,no finesse error",
},
color=color.lightYellow,
env={
arr=0,

View File

@@ -16,21 +16,6 @@ local function selectTarget(P)
end
return{
name={
"49人混战",
"49人混战",
"Techmino49",
},
level={
"简单",
"简单",
"EASY",
},
info={
"49人混战,活到最后",
"49人混战,活到最后",
"49P melee fight",
},
color=color.cyan,
env={
drop=60,lock=60,
@@ -56,17 +41,17 @@ return{
local n=2
for i=1,4 do for j=1,6 do
if L[n]then
newPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5)))
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5)))
else
newPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000))
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000))
end
n=n+1
end end
for i=9,12 do for j=1,6 do
if L[n]then
newPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(2,5)))
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(2,5)))
else
newPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000))
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000))
end
n=n+1
end end

View File

@@ -16,21 +16,6 @@ local function selectTarget(P)
end
return{
name={
"49人混战",
"49人混战",
"Techmino49",
},
level={
"困难",
"困难",
"HARD",
},
info={
"49人混战,活到最后",
"49人混战,活到最后",
"49P melee fight",
},
color=color.magenta,
env={
drop=60,lock=60,
@@ -56,17 +41,17 @@ return{
local n=2
for i=1,4 do for j=1,6 do
if L[n]then
newPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,7)))
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,7)))
else
newPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000))
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000))
end
n=n+1
end end
for i=9,12 do for j=1,6 do
if L[n]then
newPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(4,7)))
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(4,7)))
else
newPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000))
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000))
end
n=n+1
end end

View File

@@ -16,21 +16,6 @@ local function selectTarget(P)
end
return{
name={
"49人混战",
"49人混战",
"Techmino49",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"49人混战,活到最后",
"49人混战,活到最后",
"49P melee fight",
},
color=color.lightYellow,
env={
drop=15,lock=60,
@@ -56,17 +41,17 @@ return{
local n=2
for i=1,4 do for j=1,6 do
if L[n]then
newPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(8,10)))
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(8,10)))
else
newPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000))
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000))
end
n=n+1
end end
for i=9,12 do for j=1,6 do
if L[n]then
newPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,10)))
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,10)))
else
newPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000))
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000))
end
n=n+1
end end

View File

@@ -16,21 +16,6 @@ local function selectTarget(P)
end
return{
name={
"99人混战",
"99人混战",
"Techmino99",
},
level={
"简单",
"简单",
"EASY",
},
info={
"99人混战,活到最后",
"99人混战,活到最后",
"99P melee fight",
},
color=color.cyan,
env={
drop=60,lock=60,
@@ -56,17 +41,17 @@ return{
local n=2
for i=1,7 do for j=1,7 do
if L[n]then
newPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5)))
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5)))
else
newPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000))
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000))
end
n=n+1
end end
for i=15,21 do for j=1,7 do
if L[n]then
newPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(2,5)))
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(2,5)))
else
newPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000))
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000))
end
n=n+1
end end

View File

@@ -16,21 +16,6 @@ local function selectTarget(P)
end
return{
name={
"99人混战",
"99人混战",
"Techmino99",
},
level={
"困难",
"困难",
"HARD",
},
info={
"99人混战,活到最后",
"99人混战,活到最后",
"99P melee fight",
},
color=color.magenta,
env={
drop=60,lock=60,
@@ -56,17 +41,17 @@ return{
local n=2
for i=1,7 do for j=1,7 do
if L[n]then
newPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,7)))
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,7)))
else
newPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000))
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000))
end
n=n+1
end end
for i=15,21 do for j=1,7 do
if L[n]then
newPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,7)))
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,7)))
else
newPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000))
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000))
end
n=n+1
end end

View File

@@ -16,21 +16,6 @@ local function selectTarget(P)
end
return{
name={
"99人混战",
"99人混战",
"Techmino99",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"99人混战,活到最后",
"99人混战,活到最后",
"99P melee fight",
},
color=color.lightYellow,
env={
drop=15,lock=60,
@@ -56,17 +41,17 @@ return{
local n=2
for i=1,7 do for j=1,7 do
if L[n]then
newPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(8,10)))
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(8,10)))
else
newPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000))
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000))
end
n=n+1
end end
for i=15,21 do for j=1,7 do
if L[n]then
newPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,10)))
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,10)))
else
newPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000))
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000))
end
n=n+1
end end

View File

@@ -4,26 +4,14 @@ local function check_tsd(P)
P:lose()
elseif #P.clearedRow>0 then
P.modeData.event=P.modeData.event+1
if P.modeData.event==20 then
P:win()
end
end
end
end
return{
name={
"TSD挑战",
"T旋双清挑战",
"TSD Challenge",
},
level={
"简单",
"简单",
"EASY",
},
info={
"你能连续做几个TSD?",
"你能连续做几个T旋双清?",
"T-spin-doubles only",
},
color=color.green,
env={
drop=1e99,lock=1e99,
@@ -46,11 +34,11 @@ return{
getRank=function(P)
local T=P.modeData.event
return
T>=23 and 5 or
T>=20 and 4 or
T>=20 and 5 or
T>=18 and 4 or
T>=15 and 3 or
T>=10 and 2 or
T>=6 and 1 or
T>=4 and 1 or
T>=1 and 0
end,
}

View File

@@ -9,21 +9,6 @@ local function check_tsd(P)
end
return{
name={
"TSD挑战",
"T旋双清挑战",
"TSD Challenge",
},
level={
"困难",
"困难",
"HARD",
},
info={
"你能连续做几个TSD?",
"你能连续做几个T旋双清?",
"T-spin-doubles only",
},
color=color.magenta,
env={
drop=60,lock=60,

View File

@@ -9,21 +9,6 @@ local function check_tsd(P)
end
return{
name={
"TSD挑战",
"T旋双清挑战",
"TSD Challenge",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"你能连续做几个TSD?",
"你能连续做几个T旋双清?",
"T-spin-doubles only",
},
color=color.lightYellow,
env={
drop=60,lock=60,

View File

@@ -1,21 +1,6 @@
local gc=love.graphics
local warnTime={60,90,105,115,116,117,118,119,120}
return{
name={
"限时打分",
"限时打分",
"Ultra",
},
level={
"挑战",
"挑战",
"EXTRA",
},
info={
"在两分钟内尽可能拿到最多的分数",
"在两分钟内尽可能拿到最多的分数",
"Score attack in 120s",
},
color=color.lightGrey,
env={
noFly=true,

View File

@@ -1,19 +1,4 @@
return{
name={
"",
"",
"Zen",
},
level={
"",
"",
"",
},
info={
"不限时200行",
"不限时200行",
"200 lines without any limits",
},
color=color.lightGrey,
env={
drop=120,lock=120,

109
paint.lua
View File

@@ -1,7 +1,7 @@
local gc=love.graphics
local setFont=setFont
local int,ceil,rnd,abs=math.floor,math.ceil,math.random,math.abs
local max,min,sin=math.max,math.min,math.sin
local max,min,sin,cos=math.max,math.min,math.sin,math.cos
local format=string.format
local Timer=love.timer.getTime
@@ -12,7 +12,7 @@ local modeRankColor={
color.bronze, --Rank1
color.lightGrey, --Rank2
color.lightYellow, --Rank3
color.lightMagenta, --Rank4
color.lightPurple, --Rank4
color.lightCyan, --Rank5
color.purple, --Special
}
@@ -154,6 +154,7 @@ function Pnt.mode()
gc.scale(cam.k1)
local MM=modes
local R=modeRanks
local sel=cam.sel
setFont(30)
for _=1,#MM do
local M=MM[_]
@@ -167,7 +168,7 @@ function Pnt.mode()
end
local S=M.size
local d=((M.x-(cam.x1+(cam.sel and -180 or 0))/cam.k1)^2+(M.y-cam.y1/cam.k1)^2)^.55
local d=((M.x-(cam.x1+(sel and -180 or 0))/cam.k1)^2+(M.y-cam.y1/cam.k1)^2)^.55
if d<500 then S=S*(1.25-d*0.0005) end
local c=modeRankColor[modeRanks[M.id]]
if c then
@@ -179,21 +180,21 @@ function Pnt.mode()
end
if M.shape==1 then--Rectangle
gc.rectangle("fill",M.x-S,M.y-S,2*S,2*S)
if cam.sel==_ then
if sel==_ then
gc.setColor(1,1,1)
gc.setLineWidth(10)
gc.rectangle("line",M.x-S+5,M.y-S+5,2*S-10,2*S-10)
end
elseif M.shape==2 then--diamond
gc.circle("fill",M.x,M.y,S+5,4)
if cam.sel==_ then
if sel==_ then
gc.setColor(1,1,1)
gc.setLineWidth(10)
gc.circle("line",M.x,M.y,S+5,4)
end
elseif M.shape==3 then--Octagon
gc.circle("fill",M.x,M.y,S,8)
if cam.sel==_ then
if sel==_ then
gc.setColor(1,1,1)
gc.setLineWidth(10)
gc.circle("line",M.x,M.y,S,8)
@@ -224,16 +225,16 @@ function Pnt.mode()
end
end
gc.pop()
if cam.sel then
local M=MM[cam.sel]
if sel then
local M=MM[sel]
local lang=setting.lang
gc.setColor(.7,.7,.7,.5)
gc.rectangle("fill",920,0,360,720)--Info board
gc.setColor(M.color)
setFont(40)mStr(M.name[lang],1100,5)
setFont(30)mStr(M.level[lang],1100,50)
setFont(40)mStr(text.modes[sel][1],1100,5)
setFont(30)mStr(text.modes[sel][2],1100,50)
gc.setColor(1,1,1)
setFont(28)gc.printf(M.info[lang],920,110,360,"center")
setFont(28)gc.printf(text.modes[sel][3],920,110,360,"center")
if M.slowMark then
gc.draw(IMG.ctrlSpeedLimit,1230,50,nil,.4)
end
@@ -337,7 +338,7 @@ function Pnt.draw()
local pen=sceneTemp.pen
if pen>0 then
gc.setLineWidth(13)
gc.setColor(skin.libColor[pen])
gc.setColor(SKIN.libColor[pen])
gc.rectangle("line",565,460,70,70)
elseif pen==-1 then
gc.setLineWidth(5)
@@ -353,7 +354,7 @@ function Pnt.draw()
local _
for i=1,7 do
_=setting.skin[i]
gc.setColor(skin.libColor[_])
gc.setColor(SKIN.libColor[_])
mStr(text.block[i],500+65*_,65)
end
end
@@ -423,14 +424,17 @@ function Pnt.play()
gc.pop()
end
end
local hexList={1,0,.5,1.732*.5,-.5,1.732*.5}for i=1,6 do hexList[i]=hexList[i]*150 end
local textPos={90,131,-90,131,-200,-25,-90,-181,90,-181,200,-25}
local dataPos={90,143,-90,143,-200,-13,-90,-169,90,-169,200,-13}
function Pnt.pause()
Pnt.play()
local S=sceneTemp
local T=S.timer*.02
if T<1 or gameResult then Pnt.play()end
--Dark BG
local _=T
if gameResult then _=_*.6 end
if gameResult then _=_*.7 end
gc.setColor(.15,.15,.15,_)
gc.push("transform")
gc.origin()
@@ -448,8 +452,8 @@ function Pnt.pause()
--Mode Info
_=drawableText.modeName
gc.draw(_,70,180)
gc.draw(drawableText.levelName,90+_:getWidth(),180)
gc.draw(_,40,180)
gc.draw(drawableText.levelName,60+_:getWidth(),180)
--Result Text
setFont(35)
@@ -459,8 +463,8 @@ function Pnt.pause()
if frame>180 then
_=S.list
setFont(26)
for i=1,8 do
gc.print(text.pauseStat[i],70,210+40*i)
for i=1,10 do
gc.print(text.pauseStat[i],40,210+40*i)
gc.printf(_[i],245,210+40*i,250,"right")
end
end
@@ -471,36 +475,39 @@ function Pnt.pause()
gc.setLineWidth(2)
gc.push("transform")
gc.translate(1026,400)
gc.scale((3-2*T)*T)
local C=S.color1;C[4]=T;gc.setColor(C)gc.polygon("fill",S.V1)
C=S.color2;C[4]=T;gc.setColor(C)gc.polygon("fill",S.V2)
gc.setColor(1,1,1,T*(.5+.5*sin(Timer()*12.626)))
gc.polygon("line",S.standard)
--axes
gc.setColor(1,1,1,T)
gc.line(S.V1)gc.line(S.V2)
for i=1,3 do
local x,y=hexList[2*i-1],hexList[2*i]
gc.line(-x,-y,x,y)
end
local C
_=Timer()%6.2832
if _>3.1416 then
gc.setColor(1,1,1,-T*sin(_))
setFont(35)
C,_=text.radar,textPos
else
gc.setColor(1,1,1,T*sin(_))
setFont(18)
C,_=S.radar,dataPos
end
for i=1,6 do
mStr(C[i],_[2*i-1],_[2*i])
end
gc.scale((3-2*T)*T)
gc.setColor(1,1,1,T*(.5+.3*sin(Timer()*6.26)))gc.polygon("line",S.standard)
_=S.color
gc.setColor(_[1],_[2],_[3],T)
_=S.val
for i=1,9,2 do
gc.polygon("fill",0,0,_[i],_[i+1],_[i+2],_[i+3])
end
gc.polygon("fill",0,0,_[11],_[12],_[1],_[2])
gc.setColor(1,1,1,T)gc.polygon("line",S.val)
gc.pop()
gc.line(1026,400-160,1026,400+160)
gc.line(1026-160,400,1026+160,400)
_=Timer()%6.2832
if _>3.1416 then
_=_-3.1416
setFont(35)
gc.setColor(1,1,1,T*sin(_))
mStr(text.atk,1026,420-230)
mStr(text.spd,1026+180,340)
mStr(text.recv,1026,420+140)
mStr(text.eff,1026-180,340)
else
gc.setColor(1,1,1,T*sin(_))
_=S.radar1
setFont(23)
mStr(_[1],1026,420-215)
mStr(_[2],1026+180,340)
mStr(_[3],1026,420+140)
mStr(_[4],1026-180,340)
end
end
end
function Pnt.setting_game()
@@ -594,11 +601,11 @@ function Pnt.setting_key()
local board=s.board
for N=1,20 do
if N<11 then
gc.printf(text.actName[N],47,45*N+22,180,"right")
gc.printf(text.acts[N],47,45*N+22,180,"right")
mStr(keyMap[board][N],340,45*N+22)
mStr(keyMap[board+8][N],540,45*N+22)
else
gc.printf(text.actName[N],647,45*N-428,180,"right")
gc.printf(text.acts[N],647,45*N-428,180,"right")
mStr(keyMap[board][N],940,45*N-428)
mStr(keyMap[board+8][N],1040,45*N-428)
end
@@ -682,7 +689,7 @@ end
function Pnt.stat()
local chart=sceneTemp.chart
setFont(24)
local _,__=skin.libColor,setting.skin
local _,__=SKIN.libColor,setting.skin
local A,B=chart.A1,chart.A2
for x=1,7 do
gc.setColor(_[__[x]])

View File

@@ -1,5 +1,5 @@
local int=math.floor
local AISpeed={60,50,45,35,25,15,9,6,4,2}
local AISpeed={60,50,45,35,25,15,9,6,4,3}
return function(type,speedLV,next,hold,node)
if type=="CC"then
return{

View File

@@ -19,64 +19,64 @@ local blockPos={4,4,4,4,4,5,4}
local scs={{1,2},{1,2},{1,2},{1,2},{1,2},{1.5,1.5},{0.5,2.5}}
-------------------------------------------------Cold clear
local CCblockID={4,3,5,6,1,2,0}
if system~="Windows"then goto SKIP end
require("CCloader")
BOT={
getConf= cc.get_default_config ,--()options,weights
--setConf= cc.set_options ,--(options,hold,20g,bag7)
if system=="Windows"then
require("CCloader")
BOT={
getConf= cc.get_default_config ,--()options,weights
--setConf= cc.set_options ,--(options,hold,20g,bag7)
new= cc.launch_async ,--(options,weights)bot
addNext= cc.add_next_piece_async ,--(bot,piece)
update= cc.reset_async ,--(bot,field,b2b,combo)
think= cc.request_next_move ,--(bot)
getMove= cc.poll_next_move ,--(bot)success,hold,move
ifDead= cc.is_dead_async ,--(bot)dead
destroy= cc.destroy_async ,--(bot)
new= cc.launch_async ,--(options,weights)bot
addNext= cc.add_next_piece_async ,--(bot,piece)
update= cc.reset_async ,--(bot,field,b2b,combo)
think= cc.request_next_move ,--(bot)
getMove= cc.poll_next_move ,--(bot)success,hold,move
ifDead= cc.is_dead_async ,--(bot)dead
destroy= cc.destroy_async ,--(bot)
setHold= cc.set_hold ,--(opt,bool)
set20G= cc.set_20g ,--(opt,bool)
setBag= cc.set_bag7 ,--(opt,bool)
setNode= cc.set_max_nodes ,--(opt,bool)
free= cc.free ,--(opt/wei)
}
function CC_updateField(P)
local F,i={},1
for y=1,#P.field do
for x=1,10 do
F[i],i=P.field[y][x]>0,i+1
setHold= cc.set_hold ,--(opt,bool)
set20G= cc.set_20g ,--(opt,bool)
setBag= cc.set_bag7 ,--(opt,bool)
setNode= cc.set_max_nodes ,--(opt,bool)
free= cc.free ,--(opt/wei)
}
function CC_updateField(P)
local F,i={},1
for y=1,#P.field do
for x=1,10 do
F[i],i=P.field[y][x]>0,i+1
end
end
while i<400 do
F[i],i=false,i+1
end
BOT.update(P.AI_bot,F,P.b2b>=100,P.combo)
end
while i<400 do
F[i],i=false,i+1
end
BOT.update(P.AI_bot,F,P.b2b>=100,P.combo)
end
function CC_switch20G(P)
P.AIdata._20G=true
P.AI_keys={}
BOT.destroy(P.AI_bot)
local opt,wei=BOT.getConf()
BOT.setHold(opt,P.AIdata.hold)
BOT.set20G(opt,P.AIdata._20G)
BOT.setBag(opt,P.AIdata.bag7)
BOT.setNode(opt,P.AIdata.node)
P.AI_bot=BOT.new(opt,wei)
BOT.free(opt)BOT.free(wei)
for i=1,P.AIdata.next do
BOT.addNext(P.AI_bot,CCblockID[P.next[i].id])
end
CC_updateField(P)
P.hd={bk={{}},id=0,color=0,name=0}P.holded=false
P.cur=rem(P.next,1)
P.sc,P.dir=scs[P.cur.id],0
P.r,P.c=#P.cur.bk,#P.cur.bk[1]
P.curX,P.curY=blockPos[P.cur.id],21+ceil(P.fieldBeneath/30)-P.r+min(int(#P.field*.2),2)
function CC_switch20G(P)
P.AIdata._20G=true
P.AI_keys={}
BOT.destroy(P.AI_bot)
local opt,wei=BOT.getConf()
BOT.setHold(opt,P.AIdata.hold)
BOT.set20G(opt,P.AIdata._20G)
BOT.setBag(opt,P.AIdata.bag7)
BOT.setNode(opt,P.AIdata.node)
P.AI_bot=BOT.new(opt,wei)
BOT.free(opt)BOT.free(wei)
for i=1,P.AIdata.next do
BOT.addNext(P.AI_bot,CCblockID[P.next[i].id])
end
CC_updateField(P)
P.hd={bk={{}},id=0,color=0,name=0}P.holded=false
P.cur=rem(P.next,1)
P.sc,P.dir=scs[P.cur.id],0
P.r,P.c=#P.cur.bk,#P.cur.bk[1]
P.curX,P.curY=blockPos[P.cur.id],21+ceil(P.fieldBeneath/30)-P.r+min(int(#P.field*.2),2)
P:newNext()
BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])
collectgarbage()
P:newNext()
BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])
collectgarbage()
end
end
::SKIP::
-------------------------------------------------⑨Stack setup
local dirCount={1,1,3,3,3,0,1}
local spinOffset={
@@ -231,10 +231,8 @@ AI_think={
end
end
::L::
if #Tfield>0 then
while #Tfield>0 do
freeRow.discard(rem(Tfield,1))
goto L
end--Release cache
local p=#ctrl+1
if best.hold then

View File

@@ -3,7 +3,6 @@ local int,ceil,rnd,abs=math.floor,math.ceil,math.random,math.abs
local max,min,sin,cos=math.max,math.min,math.sin,math.cos
local scr=scr
local BGinit,BGresize,BGupdate,BGdraw,BGdiscard={},{},{},{},{}
local BGvars={_G=_G}
@@ -50,10 +49,10 @@ end
function BGdraw.strap()
gc.setColor(.5,.5,.5)
local x=t%16*-64
::L::
gc.draw(img,x,0,nil,8,scr.h)
x=x+1024--image width*8
if x<scr.w then goto L end
repeat
gc.draw(img,x,0,nil,8,scr.h)
x=x+1024--image width*8
until x>=scr.w
end
function BGinit.flink()
@@ -115,10 +114,10 @@ end
function BGdraw.game4()
gc.setColor(.05,.4,.4)
local x=t%8*-128
::L::
gc.draw(img,x,0,nil,8,scr.h)
x=x+1024--image width*8
if x<scr.w then goto L end
repeat
gc.draw(img,x,0,nil,8,scr.h)
x=x+1024--image width*8
until x>=scr.w
end--Fast strap
function BGinit.game5()
@@ -136,7 +135,7 @@ end--Lightning
function BGinit.game6()
t=0
colorLib=_G.skin.libColor
colorLib=_G.SKIN.libColor
colorSet=_G.setting.skin
miniBlock=_G.miniBlock
end
@@ -180,34 +179,37 @@ end
function BGinit.space()
stars={}
for i=1,2600,5 do
local s=0.75*2^(rnd()*1.5)
local s=rnd(4)
stars[i]=s --size
stars[i+1]=rnd(W) --x
stars[i+2]=rnd(H) --y
stars[i+1]=rnd(W)-10 --x
stars[i+2]=rnd(H)-10 --y
stars[i+3]=(rnd()-.5)*.01*s --vx
stars[i+4]=(rnd()-.5)*.01*s --vy
end--800 var
end
function BGresize.space(w,h)
W,H=w+100,h+100
W,H=w+20,h+20
BGinit.space()
end
function BGupdate.space(dt)
local s=stars
for i=1,2600,5 do
stars[i+1]=(stars[i+1]+stars[i+3])%W
stars[i+2]=(stars[i+2]+stars[i+4])%H
s[i+1]=(s[i+1]+s[i+3])%W
s[i+2]=(s[i+2]+s[i+4])%H
end--star moving
end
function BGdraw.space()
gc.clear(.2,.2,.2)
if not stars[1]then return end
gc.translate(-50,-50)
gc.translate(-10,-10)
gc.setColor(.8,.8,.8)
for i=1,2600,5 do
local x,y=stars[i+1],stars[i+2]
gc.circle("fill",x,y,stars[i])
local s=stars
local x,y=s[i+1],s[i+2]
s=s[i]
gc.rectangle("fill",x,y,s,s)
end
gc.translate(50,50)
gc.translate(10,10)
end
function BGdiscard.space()
stars={}

View File

@@ -2,6 +2,7 @@ local rem=table.remove
local BGM={}
-- BGM.nowPlay=[str:playing ID]
-- BGM.suspend=[str:pausing ID]
-- BGM.playing=[src:playing SRC]
BGM.list={
"blank","way","newera","infinite","reason",
@@ -21,7 +22,13 @@ function BGM.loadAll()
end
end
function BGM.play(s)
if setting.bgm==0 or not s then return end
if setting.bgm==0 then
BGM.playing=BGM.list[s]
BGM.suspend,BGM.nowPlay=s
return
elseif not s then
return
end
if BGM.nowPlay~=s then
if BGM.nowPlay then TASK.new(tickEvent.bgmFadeOut,nil,BGM.nowPlay)end
TASK.changeCode(tickEvent.bgmFadeIn,tickEvent.bgmFadeOut)

38
parts/color.lua Normal file
View File

@@ -0,0 +1,38 @@
return{
red={1,0,0},
green={0,1,0},
blue={.2,.2,1},
yellow={1,1,0},
magenta={1,0,1},
cyan={0,1,1},
grey={.6,.6,.6},
lightRed={1,.5,.5},
lightGreen={.5,1,.5},
lightBlue={.6,.6,1},
lightYellow={1,1,.5},
lightMagenta={1,.5,1},
lightCyan={.5,1,1},
lightGrey={.8,.8,.8},
darkRed={.6,0,0},
darkGreen={0,.6,0},
darkBlue={0,0,.6},
darkYellow={.6,.6,0},
darkMagenta={.6,0,.6},
darkCyan={0,.6,.6},
darkGrey={.3,.3,.3},
black={0,0,0},
orange={1,.6,0},
pink={1,0,.6},
grass={.6,1,0},
water={0,1,.6},
bronze={.7,.4,0},
white={1,1,1},
lightOrange={1,.7,.3},
darkOrange={.6,.4,0},
purple={.5,0,1},
lightPurple={.8,.4,1},
darkPurple={.3,0,.6},
}

View File

@@ -138,19 +138,22 @@ function File.loadData()
local S=s()
if S.version~=gameVersion then
S.version=gameVersion
TEXT.show(text.newVersion,640,200,30,"fly",.3)
end
if not S.version or S.version=="Alpha V0.8.15"then
S.clear_S={S.clear_1,S.clear_2,S.clear_3,S.clear_4}
S.clear={{},{},{},{},{},{},{}}
local A,B,C,D=int(S.clear_1/7),int(S.clear_2/7),int(S.clear_3/7),int(S.clear_4/7)
local A,B,C,D=int(S.clear_1/7),int(S.clear_2/7),int(S.clear_3/7),S.clear_4
for i=1,7 do
S.clear[i][1]=A
S.clear[i][2]=B
S.clear[i][3]=C
S.clear[i][4]=D
S.clear[i][4]=0
end
S.clear[7][4]=D
for i=1,S.clear_1%7 do S.clear[i][1]=S.clear[i][1]+1 end
for i=1,S.clear_2%7 do S.clear[i][2]=S.clear[i][2]+1 end
for i=1,S.clear_3%7 do S.clear[i][3]=S.clear[i][3]+1 end
for i=1,S.clear_4%7 do S.clear[i][4]=S.clear[i][4]+1 end
S.clear_B={}
for i=1,7 do
S.clear_B[i]=S.clear[i][1]+S.clear[i][2]+S.clear[i][3]+S.clear[i][4]
@@ -175,7 +178,11 @@ function File.loadData()
end
S.hpc=S.c
TEXT.show(text.newVersion,640,200,30,"fly",.3)
elseif S.version=="Alpha V0.8.16"then
for i=1,6 do
S.clear[7][4]=S.clear[7][4]+S.clear[i][4]
S.clear[i][4]=0
end
end
addToTable(S,stat)
end

View File

@@ -33,7 +33,6 @@ if setting.lang==1 then
"CLASSIC SEXY RUSSIAN BLOCKS",
"戴上耳机以获得最佳体验",
"少女祈祷中",
"按键/点击以强制满速加载",
"LrL,RlR LLr,RRl RRR,LLL RfR,RRf,rFF FFF",--ZSLJTOI
"RUR'U'R'FR2U'R'U'RUR'F'",
"Am G F G",
@@ -74,7 +73,6 @@ elseif setting.lang==2 then
"CLASSIC SEXY RUSSIAN BLOCKS",
"戴上耳机以获得最佳体验",
"少女祈祷中",
"按键/点击以强制满速加载",
"LrL,RlR LLr,RRl RRR,LLL RfR,RRf,rFF FFF",--ZSLJTOI
"RUR'U'R'FR2U'R'U'RUR'F'",
"Am G F G",
@@ -116,7 +114,6 @@ elseif setting.lang==3 then
"CLASSIC SEXY RUSSIAN BLOCKS",
"Headphones for better experience",
"少女祈禱中",
"any-key/click to load at fastest speed",
"RUR'U'R'FR2U'R'U'RUR'F'",
"Am G F G",
"LrL,RlR LLr,RRl RRR,LLL RfR,RRf,rFF FFF",--ZSLJTOI

1277
parts/languages.lua Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,4 @@
do return end
--LIGHT MODULE(Optimized by MrZ,Original on github/love2d community/simple-love-lights)
--Heavily based on mattdesl's libGDX implementation:
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows

View File

@@ -7,85 +7,6 @@ actName={
"insLeft","insRight","insDown","down1","down4","down10",
"dropLeft","dropRight","addLeft","addRight",--Super contorl system
}
color={
red={1,0,0},
green={0,1,0},
blue={.2,.2,1},
yellow={1,1,0},
magenta={1,0,1},
cyan={0,1,1},
grey={.6,.6,.6},
lightRed={1,.5,.5},
lightGreen={.5,1,.5},
lightBlue={.6,.6,1},
lightYellow={1,1,.5},
lightMagenta={1,.5,1},
lightCyan={.5,1,1},
lightGrey={.8,.8,.8},
darkRed={.6,0,0},
darkGreen={0,.6,0},
darkBlue={0,0,.6},
darkYellow={.6,.6,0},
darkMagenta={.6,0,.6},
darkCyan={0,.6,.6},
darkGrey={.3,.3,.3},
black={0,0,0},
orange={1,.6,0},
pink={1,0,.6},
grass={.6,1,0},
water={0,1,.6},
bronze={.7,.4,0},
white={1,1,1},
lightOrange={1,.7,.3},
darkOrange={.6,.4,0},
purple={.5,0,1},
lightPurple={.8,.4,1},
darkPurple={.3,0,.6},
}
voiceBank={}--{{SRC1s},{SRC2s},...}
voiceName={
"zspin","sspin","lspin","jspin","tspin","ospin","ispin",
"single","double","triple","techrash",
"mini","b2b","b3b","pc",
"win","lose",
"bye",
"nya",
"happy",
"doubt",
"sad",
"egg",
}
voiceList={
zspin={"zspin_1","zspin_2","zspin_3"},
sspin={"sspin_1","sspin_2","sspin_3","sspin_4","sspin_5","sspin_6"},
lspin={"lspin_1","lspin_2"},
jspin={"jspin_1","jspin_2","jspin_3","jspin_4"},
tspin={"tspin_1","tspin_2","tspin_3","tspin_4","tspin_5","tspin_6"},
ospin={"ospin_1","ospin_2","ospin_3"},
ispin={"ispin_1","ispin_2","ispin_3"},
single={"single_1","single_2","single_3","single_4","single_5","single_6","single_7"},
double={"double_1","double_2","double_3","double_4","double_5"},
triple={"triple_1","triple_2","triple_3","triple_4","triple_5","triple_6","triple_7"},
techrash={"techrash_1","techrash_2","techrash_3","techrash_4"},
mini={"mini_1","mini_2","mini_3"},
b2b={"b2b_1","b2b_2","b2b_3"},
b3b={"b3b_1","b3b_2"},
pc={"clear_1","clear_2"},
win={"win_1","win_2","win_3","win_4","win_5","win_6","win_6","win_7"},
lose={"lose_1","lose_2","lose_3"},
bye={"bye_1","bye_2"},
nya={"nya_1","nya_2","nya_3","nya_4"},
happy={"nya_happy_1","nya_happy_2","nya_happy_3","nya_happy_4"},
doubt={"nya_doubt_1","nya_doubt_2"},
sad={"nya_sad_1"},
egg={"egg_1","egg_2"},
}
musicID={
"blank",
"way",
@@ -122,7 +43,7 @@ customRange={
fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
next={0,1,2,3,4,5,6},
hold={true,false,true},
sequence={"bag7","his4","rnd"},
sequence={"bag","his4","rnd"},
visible={"show","time","fast","none"},
target={10,20,40,100,200,500,1000,1e99},
freshLimit={0,8,15,1e99},
@@ -130,6 +51,5 @@ customRange={
bg={"none","game1","game2","game3","strap","rgb","glow","matrix"},
bgm={"blank","way","race","newera","push","reason","infinite","secret7th","secret8th","rockblock"},
}
RCPB={10,33,200,33,105,5,105,60}
snapLevelValue={1,10,20,40,60,80}

View File

@@ -2,11 +2,12 @@ local rem=table.remove
local SFX={}
SFX.list={
"welcome",
"welcome_sfx",
"click","enter",
"finesseError","finesseError_long",
--Stereo sfxs(cannot set position)
"virtualKey",
"button","swipe",
"ready","start","win","fail","collect",
"move","rotate","rotatekick","hold",

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