Compare commits

...

32 Commits

Author SHA1 Message Date
MrZ626
5526872718 0.11.4:网络库更新 2020-10-14 16:22:04 +08:00
MrZ626
d0ec54ab78 把一个误全局的变量local 2020-10-14 16:21:52 +08:00
MrZ626
f1411171a5 自定义模式可调出回声序列 2020-10-14 16:17:19 +08:00
MrZ626
1930687eff 手机支持新网络库 2020-10-14 16:15:51 +08:00
MrZ626
6a6ce31451 英文tips排序 2020-10-14 16:15:47 +08:00
MrZ_26
a780ff48f5 Merge pull request #33 from user670/master
Update getTip.lua
2020-10-14 16:00:19 +08:00
MrZ626
d99afa5637 加载序列模式代码调整,新增回声序列模式 2020-10-14 15:56:50 +08:00
user670
595c8246b6 Update getTip.lua
Made English make more sense (?)
2020-10-14 15:51:55 +08:00
MrZ626
be9d8fc283 删除不必要的英文tips,等待英语使用者重新添加 2020-10-14 14:53:17 +08:00
MrZ626
6dcb818847 音频文件缺失消息停留时间缩短 2020-10-14 14:11:30 +08:00
MrZ626
42ccdd15ed 极简等第文本区分语言 2020-10-14 01:15:06 +08:00
MrZ626
4d4ed8ea6b 极简率计算更严格 2020-10-14 01:05:00 +08:00
MrZ626
17bc226e98 新增debug键输出系统信息 2020-10-14 01:04:36 +08:00
MrZ626
ee27f4ad77 词典不再需要手动确认查询 2020-10-14 00:32:51 +08:00
MrZ626
b9a886facf 软件锁在加载资源前启动 2020-10-13 21:09:22 +08:00
MrZ626
47fda8e374 增加公告/最新版本文字显示时长,删除之前错误代码 2020-10-13 21:09:20 +08:00
MrZ626
b2354cac1e tips大更新 2020-10-13 21:00:37 +08:00
MrZ626
67a54869c7 修复ios打不开词典部分定式词条 2020-10-13 20:59:27 +08:00
MrZ626
285af92d88 修复计算器e键非法输入报错 2020-10-13 10:42:16 +08:00
MrZ626
e89a4c682d 修复粘贴错误任务代码崩溃 2020-10-13 00:16:40 +08:00
MrZ626
92c80e075d 网路库加载失败不会报错 2020-10-13 00:16:36 +08:00
MrZ626
ef5ebd15a4 极简评级要求改为通关且至少放了5个方块 2020-10-13 00:16:29 +08:00
MrZ626
bb46f889f0 CC强过头了,再减速一下 2020-10-12 22:36:33 +08:00
MrZ626
652c8995fc 词典控件排版微调,键盘透明度降低 2020-10-12 21:45:14 +08:00
MrZ626
4ac98ca3e3 新模式:无旋转/无移动 2020-10-12 21:44:45 +08:00
MrZ626
b407a0d0bb 按键禁用加入模式环境变量 2020-10-12 12:14:11 +08:00
MrZ626
475b3b768c 新模式:纯单消马拉松 2020-10-12 11:32:23 +08:00
MrZ626
a25f3be6db CC移动速度加强,ai模式调平 2020-10-12 10:01:17 +08:00
MrZ626
d3fcde7507 demo玩家不再有极简错误音效 2020-10-12 09:00:23 +08:00
MrZ626
d5c657701b 使用aegistudio的新网络库获取公告 2020-10-12 08:04:17 +08:00
MrZ626
e3a28893b4 重置设置按钮字号缩小 2020-10-12 01:22:48 +08:00
MrZ626
52fe6d5934 规范加载外部库代码 2020-10-12 01:16:53 +08:00
35 changed files with 691 additions and 453 deletions

View File

@@ -55,7 +55,7 @@ function BGM.loadOne(N)
BGM.list[N]:setLooping(true)
BGM.list[N]:setVolume(0)
else
LOG.print("No BGM file: "..N,"warn")
LOG.print("No BGM file: "..N,5,color.orange)
end
end
function BGM.loadAll()

View File

@@ -1,5 +1,7 @@
require("Zframework/toolfunc")
color= require("Zframework/color")
SCN= require("Zframework/scene")
LOG= require("Zframework/log")
require("Zframework/toolfunc")
SHADER= require("Zframework/shader")
VIB= require("Zframework/vib")
SFX= require("Zframework/sfx")
@@ -15,8 +17,6 @@ IMG= require("Zframework/img")
WIDGET= require("Zframework/widget")
Widgets=require("Zframework/widgetList")
LIGHT= require("Zframework/light")
SCN= require("Zframework/scene")
LOG= require("Zframework/log")
local ms=love.mouse
local gc=love.graphics
@@ -187,10 +187,17 @@ end
function love.keypressed(i)
mouseShow=false
if devMode then
if i=="f1"then love._setGammaCorrect(true)LOG.print("GammaCorrect: on","warn")
elseif i=="f2"then love._setGammaCorrect(false)LOG.print("GammaCorrect: off","warn")
if i=="f1"then
local r=rnd()<.5
love._setGammaCorrect(r)
LOG.print("GammaCorrect: "..(r and"on"or"off"),"warn")
elseif i=="f2"then
LOG.print("System:"..system.."["..jit.arch.."]")
LOG.print("luaVer:".._VERSION)
LOG.print("jitVer:"..jit.version)
LOG.print("jitVerNum:"..jit.version_num)
elseif i=="f3"then
for i=1,8 do
for _=1,8 do
local P=players.alive[rnd(#players.alive)]
if P~=players[1]then
P.lastRecv=players[1]
@@ -375,7 +382,7 @@ function love.errorhandler(msg)
needDraw=true
elseif E=="focus"then
needDraw=true
elseif E=="touchpressed"or E=="keypressed"or E=="mousepressed"then
elseif E=="touchpressed"or E=="mousepressed"or E=="keypressed"and a=="space"then
if count<3 then
count=count+1
SFX.play("ready")
@@ -439,7 +446,13 @@ function love.run()
local FCT=0--Framedraw counter
love.resize(gc.getWidth(),gc.getHeight())
SCN.init("load")--Scene Launch
--Scene Launch
if setting.appLock then
SCN.init("calculator")
else
SCN.init("load")
end
return function()
local _

View File

@@ -1,7 +1,8 @@
local langList={
{
anykey="按任意键继续",
newVersion="检测到更新!",
newVersion="感谢更新!更新内容如下",
httpTimeout="网络连接超时!",
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何转述声明无效",
holdR="长按以重新开始",
@@ -29,6 +30,8 @@ local langList={
gameover="游戏结束",
pause="暂停",
pauseCount="暂停统计",
finesse_ap="All Perfect",
finesse_fc="Full Combo",
custom="自定义游戏",basic="常规",rule="规则",field="自定义场地",mission="任务",
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
@@ -121,7 +124,7 @@ local langList={
"效率/挖掘效率:",
"满贯/大满贯:",
"全/半清:",
"多余操作/最大极简连锁/极简率:",
"多余操作/极简率:",
},
help={
"既然你能玩到这个游戏,应该也不需要什么帮助吧?",
@@ -484,6 +487,7 @@ local langList={
["drought_lunatic"]= {"干旱", "100L", "后 妈 发 牌"},
["marathon_normal"]= {"马拉松", "普通", "200行加速马拉松"},
["marathon_hard"]= {"马拉松", "困难", "200行高速马拉松"},
["marathon_ultimate"]= {"马拉松", "极限", "禁止0连击单消之外的任何操作"},
["solo_1"]= {"单挑", "简单", "打败AI"},
["solo_2"]= {"单挑", "普通", "打败AI"},
["solo_3"]= {"单挑", "困难", "打败AI"},
@@ -547,13 +551,16 @@ local langList={
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"},
["custom_clear"]= {"自定义", "普通", "画点什么然后把它消除!"},
["custom_puzzle"]= {"自定义", "拼图", "画点什么然后把它拼出来吧!"},
["sprintFix"]= {"竞速", "无移动", "这是可能的。"},
["sprintLock"]= {"竞速", "无旋转", "这不可能。"},
["sprintPenta"]= {"竞速", "五联块", "伤脑筋十八块"},
["sprintMPH"]= {"竞速", "MPH", "纯随机\n无预览\n无暂存"},
},
},
{
anykey="按任意键继续",
newVersion="检测到更新!",
newVersion="感谢更新!更新内容如下",
httpTimeout="网络连接超时!",
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何转述声明无效",
holdR="长按以重新开始",
@@ -581,6 +588,8 @@ local langList={
gameover="游戏结束",
pause="暂停",
pauseCount="暂停统计",
finesse_ap="完美极简",
finesse_fc="全连击",
custom="自定义游戏",basic="常规",rule="规则",field="自定义场地",mission="任务",
snapLevelName={"无吸附","10像素吸附","20像素吸附","40像素吸附","60像素吸附","80像素吸附"},
@@ -673,7 +682,7 @@ local langList={
"效率/挖掘效率:",
"满贯/大满贯:",
"全/半清:",
"多余操作/最大极简连锁/极简率:",
"多余操作/极简率:",
},
help={
"既然你能玩到这个游戏,应该也不需要什么帮助吧?",
@@ -1034,6 +1043,7 @@ local langList={
["drought_lunatic"]= {"干旱", "100行", "后 妈 发 牌"},
["marathon_normal"]= {"马拉松", "普通", "200行加速马拉松"},
["marathon_hard"]= {"马拉松", "困难", "200行高速马拉松"},
["marathon_ultimate"]= {"马拉松", "极限", "禁止0连击单消之外的任何操作"},
["solo_1"]= {"单挑", "简单", "打败机器人"},
["solo_2"]= {"单挑", "普通", "打败机器人"},
["solo_3"]= {"单挑", "困难", "打败机器人"},
@@ -1097,13 +1107,16 @@ local langList={
["infinite_dig"]= {"无尽:挖掘", "", "挖呀挖呀挖"},
["custom_clear"]= {"自定义", "普通", "画点什么然后把它消除!"},
["custom_puzzle"]= {"自定义", "拼图", "画点什么然后把它拼出来吧!"},
["sprintFix"]= {"竞速", "无移动", "这是可能的。"},
["sprintLock"]= {"竞速", "无旋转", "这不可能。"},
["sprintPenta"]= {"竞速", "五联块", "伤脑筋十八块"},
["sprintMPH"]= {"竞速", "纯净", "纯随机\n无预览\n无暂存"},
},
},
{
anykey="Press any button",
newVersion="Update detected!",
newVersion="Thanks for updating! New feature below",
httpTimeout="Network connection timed out!",
marking="Game Author: MrZ_26\nIllegal recording if you can see this\nAny explanation is invalid",
holdR="Hold to restart",
@@ -1131,6 +1144,8 @@ local langList={
gameover="Game Over",
pause="Pause",
pauseCount="Pauses",
finesse_ap="All Perfect",
finesse_fc="Full Combo",
custom="Custom Game",basic="Basic",rule="Rule",field="Custom Field",mission="Mission",
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
@@ -1220,7 +1235,7 @@ local langList={
"Eff./Dig Eff.:",
"B2B/B3B:",
"PC/HPC:",
"FnsErrs./maxFnsChain/FnsRate:",
"FnsErrs./FnsRate:",
},
help={
"Now you can play this, you are probabaly do not need \"help\"?",
@@ -1581,6 +1596,7 @@ local langList={
["drought_lunatic"]= {"Drought", "100L", "WTF"},
["marathon_normal"]= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
["marathon_hard"]= {"Marathon", "HARD", "200-line high-speed marathon."},
["marathon_ultimate"]= {"Marathon", "Ultimate", "Regular singles without combo only"},
["solo_1"]= {"Battle", "EASY", "Defeat the AI!"},
["solo_2"]= {"Battle", "NORMAL", "Defeat the AI!"},
["solo_3"]= {"Battle", "HARD", "Defeat the AI!"},
@@ -1644,13 +1660,16 @@ local langList={
["infinite_dig"]= {"Infinite: Dig", "", "Dig, dig, dig."},
["custom_clear"]= {"Custom", "NORMAL", "Draw something then clear it!!"},
["custom_puzzle"]= {"Custom", "PUZZLE", "Draw something then stack it!!"},
["sprintFix"]= {"Sprint", "No left/right","It's possible."},
["sprintLock"]= {"Sprint", "No rotation", "It's impossible."},
["sprintPenta"]= {"Sprint", "Pentomino", "Clear 40 lines with 18 pentominoes."},
["sprintMPH"]= {"Sprint", "MPH", "Memoriyless\nPreviewless\nHoldless"},
},
},
{
anykey="↓□↓",
newVersion="&!!!",
newVersion="&!!!???↓↓",
httpTimeout="e??????x",
marking="Game Author:MrZ_26\nIllegal recording if see this\nAny explanation invalid",
holdR="→→→→R",
@@ -1678,6 +1697,8 @@ local langList={
gameover="x",
pause="=",
pauseCount="==",
finesse_ap="AP",
finesse_fc="FC",
custom="!@#$%^&*",basic="!!",rule="##",field="!@#$%^&* [##]",mission="(!)",
snapLevelName={"~","10","20","40","60","80"},
@@ -1767,7 +1788,7 @@ local langList={
"^%/↓^%:",
"^/^^:",
"#<>#/<>:",
"!#!X/^#^/%:",
"!#!X/%:",
},
help={
"□□□□~~~, ?_?x ?",
@@ -2125,6 +2146,7 @@ local langList={
["drought_lunatic"]= {"Drought", "100L", "WTF"},
["marathon_normal"]= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
["marathon_hard"]= {"Marathon", "HARD", "200-line high-speed marathon."},
["marathon_ultimate"]= {"Marathon", "Ultimate", "Regular singles without combo only"},
["solo_1"]= {"Battle", "EASY", "Defeat the AI!"},
["solo_2"]= {"Battle", "NORMAL", "Defeat the AI!"},
["solo_3"]= {"Battle", "HARD", "Defeat the AI!"},
@@ -2188,13 +2210,16 @@ local langList={
["infinite_dig"]= {"Infinite: Dig", "", "Dig, dig, dig."},
["custom_clear"]= {"Custom", "NORMAL", "Draw something then clear it!!"},
["custom_puzzle"]= {"Custom", "PUZZLE", "Draw something then stack it!!"},
["sprintFix"]= {"Sprint", "No left/right","It's possible."},
["sprintLock"]= {"Sprint", "No rotation", "It's impossible."},
["sprintPenta"]= {"Sprint", "Pentomino", "Puzzle-18"},
["sprintMPH"]= {"Sprint", "MPH", "Memoriyless.\nPreviewless.\nHoldless."},
},
},
{
anykey="您开始了",
newVersion="感谢更新!",
newVersion="感谢更新,请看看更新了些啥",
httpTimeout="没网或者网不好?",
marking="游戏作者:MrZ_26\n任何视频/直播不得出现此水印\n任何转述声明无效",
holdR="长按重开",
@@ -2222,6 +2247,8 @@ local langList={
gameover="挂了",
pause="歇会",
pauseCount="歇多久了",
finesse_ap="",
finesse_fc="全连",
custom="自定义",basic="普通",rule="规则",field="自定义场地",mission="任务",
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
@@ -2314,7 +2341,7 @@ local langList={
"效率/挖掘效率:",
"牛逼/很牛逼:",
"消光/消半截:",
"多余操作/最大极简连击/极简率:",
"多余操作/极简率:",
},
help={
"既然你能玩到这个游戏,应该也不需要什么帮助吧?",
@@ -2674,6 +2701,7 @@ local langList={
["drought_lunatic"]= {"干旱", "100L", "有趣的要来了"},
["marathon_normal"]= {"马拉松", "普通", "休闲模式"},
["marathon_hard"]= {"马拉松", "困难", "休闲模式"},
["marathon_ultimate"]= {"马拉松", "极限", "你再秀?"},
["solo_1"]= {"单挑", "简单", "鲨AI"},
["solo_2"]= {"单挑", "普通", "鲨AI"},
["solo_3"]= {"单挑", "困难", "鲨AI"},
@@ -2737,6 +2765,8 @@ local langList={
["infinite_dig"]= {"无尽:挖掘", "", "闲得慌的话来挖"},
["custom_clear"]= {"自定义", "普通", "试验场"},
["custom_puzzle"]= {"自定义", "拼图", "宁就是方块艺术家"},
["sprintFix"]= {"竞速", "无移动", "这是可能的。"},
["sprintLock"]= {"竞速", "无旋转", "这不可能。"},
["sprintPenta"]= {"竞速", "五联块", "离谱"},
["sprintMPH"]= {"竞速", "纯净", "听说你反应很快?"},
},

View File

@@ -30,7 +30,7 @@ function SFX.loadOne(_)
if love.filesystem.getInfo(N)then
SFX.list[_]={love.audio.newSource(N,"static")}
else
LOG.print("No SFX file: "..N,"warn")
LOG.print("No SFX file: "..N,5,color.orange)
end
end
function SFX.loadAll()

View File

@@ -14,7 +14,7 @@ do--LOADLIB
Windows="client",
Linux="client",
Android="client.so",
libFunc="client",
libFunc="luaopen_client",
},
}
function LOADLIB(name)
@@ -23,6 +23,7 @@ do--LOADLIB
local success,message=require(libName[system])
if success then
LOG.print(name.." load successfully","warn",color.green)
return success
else
LOG.print("Cannot load "..name..": "..message,"warn",color.red)
end
@@ -54,7 +55,7 @@ do--LOADLIB
return
end
LOG.print(name.." load successfully","warn",color.green)
libFunc()
return libFunc()
else
LOG.print("No "..name.." for "..system,"warn",color.red)
return
@@ -149,36 +150,27 @@ do--dumpTable
return s..tabs[t-1].."}"
end
end
do--HTTPrequest
local http=require("socket.http")
function HTTPrequest(url,method)
local data={}
local res,code,response_headers,response_body=http.request{
url=url,
sink=ltn12.sink.table(data),
method=method or"GET",
}
if code~=200 then
LOG.print("NET ERROR: code="..(code or"nil"))
do--httpRequest
client=LOADLIB("NETlib")
if client then
function httpRequest(tick,url,method)
local task,err=client.httpraw{
url=url,
method=method or"GET",
-- header={},
-- body="",
}
if task then
TASK.new(tick,{task=task,time=0})
else
LOG.print("NETlib error: "..err,"warn")
end
end
return data[1]
end
--[[
LOADLIB("NETlib")
function HTTPrequest(url,method)
local task,err=client.httpraw{
url=url,
method=method,
-- header={},
-- body="",
}
if not err then
TASK.new(TICK.httpRequest,{code=task,time=0})
else
LOG.print("NET error: "..err,"error")
else
function httpRequest(tick,url,method)
LOG.print("[NO NETlib]",5,color.yellow)
end
end
]]
end
do--json
--

View File

@@ -34,7 +34,7 @@ function VOC.loadOne(_)
end
if i==1 then
if not loadVoiceFile(N,N)then
LOG.print("No VOICE file: "..N,"warn")
LOG.print("No VOICE file: "..N,5,color.orange)
end
end
if not VOC.list[N][1]then VOC.list[N]=nil end

View File

@@ -425,7 +425,7 @@ function keyboard:draw()
local x,y,w,h=self.x,self.y,self.w,self.h
gc.translate(x,y)
gc.setColor(0,0,0,.4)
gc.setColor(.2,.2,.2,.75)
gc.rectangle("fill",0,0,w,h)
gc.setColor(1,1,1)

View File

@@ -79,7 +79,7 @@ local CUSlist={
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
wait={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
sequence={"bag","his4","rnd","loop","fixed"},
sequence={"bag","his4","rnd","reverb","loop","fixed"},
target={10,20,40,100,200,500,1000,1e99},
visible={"show","time","fast","none"},
freshLimit={0,8,15,1e99},
@@ -621,10 +621,10 @@ local Widgets={
newButton({name="back", x=640, y=600,w=170,h=80,color="white",font=35,code=BACK}),
},
dict={
newKey({name="link", x=740,y=60,w=200,h=80,color="white",font=35,code=pressKey("link"),hide=function()return not sceneTemp.url end}),
newKey({name="keyboard", x=960,y=60,w=200,h=80,color="white",font=35,code=pressKey("kb"),hide=function()return not sceneTemp.select end}),
newKey({name="keyboard", x=960,y=60,w=200,h=80,color="white",font=35,code=pressKey("kb")}),
newKey({name="link", x=1140,y=650,w=200,h=80,color="white",font=35,code=pressKey("link"),hide=function()return not(sceneTemp.url and sceneTemp.hideKB)end}),
newButton({name="back", x=1165,y=60,w=170,h=80,color="white",font=40,code=BACK}),
newKeyboard({name="kb", x=310,y=325,w=940,h=370,hide=function()return sceneTemp.hideKB end}),
newKeyboard({name="kb", x=130,y=255,w=1120,h=440,hide=function()return sceneTemp.hideKB end}),
},
staff={
newButton({name="back", x=1140, y=640,w=170,h=80,color="white",font=40,code=BACK}),
@@ -651,7 +651,7 @@ local Widgets={
newButton({name="reset", x=640,y=380,w=240,h=100,color="orange", font=40,
code=function()sceneTemp.reset=true end,
hide=function()return sceneTemp.reset end}),
newButton({name="reset1", x=340,y=480,w=240,h=100,color="red", font=40,
newButton({name="reset1", x=340,y=480,w=240,h=100,color="red", font=35,
code=function()
love.filesystem.remove("unlock.dat")
SFX.play("finesseError_long")
@@ -660,7 +660,7 @@ local Widgets={
TEXT.show("play one game if you regret",640,390,40,"stretch",.4)
end,
hide=function()return not sceneTemp.reset end}),
newButton({name="reset2", x=640,y=480,w=260,h=100,color="red", font=40,
newButton({name="reset2", x=640,y=480,w=260,h=100,color="red", font=35,
code=function()
love.filesystem.remove("data.dat")
SFX.play("finesseError_long")
@@ -669,7 +669,7 @@ local Widgets={
TEXT.show("play one game if you regret",640,390,40,"stretch",.4)
end,
hide=function()return not sceneTemp.reset end}),
newButton({name="reset3", x=940,y=480,w=260,h=100,color="red", font=40,
newButton({name="reset3", x=940,y=480,w=260,h=100,color="red", font=35,
code=function()
local L=love.filesystem.getDirectoryItems("")
for i=1,#L do

View File

@@ -1,4 +1,4 @@
gameVersion="Alpha V0.11.3"
gameVersion="Alpha V0.11.4"
love.setDeprecationOutput(false)
function love.conf(t)
t.identity="Techmino"--Saving folder

View File

@@ -3,7 +3,7 @@ return{
{"新人须知",
"xinren new noob readme",
"help",
"致想深入玩下去的新人:\n\t两大根本原则:\n\t\t1.选手感好的版本(top/jstris/tetrjs/tech),别用编程练习渣版本\n\t\t2.踏实打好基础(next预判稳定消四)别只想着炫酷T旋\n\t两大主要技巧:\n\t\t1.熟悉初始位置以及到各个位置的初始操作\n\t\t2.提前计算好下一块能放哪\n(推荐阅读专栏)一位块圈dalao给新人的话\n\n[点击上面的 打开链接 按钮]",
"致想深入玩下去的新人:\n\t两大根本原则:\n\t\t1.选手感好的版本(top/jstris/tetrjs/tech),别用编程练习渣版本\n\t\t2.踏实打好基础(next预判稳定消四)别只想着炫酷T旋\n\t两大主要技巧:\n\t\t1.熟悉初始位置以及到各个位置的初始操作\n\t\t2.提前计算好下一块能放哪\n(推荐阅读专栏)一位块圈dalao给新人的话\n\n[点击右下角的按钮打开链接]",
"http://bilibili.com/read/cv2352939",
},
{"HardDrop wiki",
@@ -449,13 +449,13 @@ return{
"bt",
"term",
"β炮(Beta炮)\n详细请到HD wiki查询",
HDsearch.."bt cannon",
HDsearch.."bt_cannon",
},
{"BTPC",
"btpc",
"term",
"BT炮一个能接PC的分支\n详细请到HD wiki查询",
HDsearch.."bt cannon",
HDsearch.."bt_cannon",
},
{"DDPC",
"ddpc",
@@ -478,7 +478,7 @@ return{
"wolfmoon",
"term",
"狼月炮\n详细请到HD wiki查询",
HDsearch.."wolfmoon cannon",
HDsearch.."wolfmoon_cannon",
},
{"ASC",
"asc",
@@ -514,7 +514,7 @@ return{
"stmb",
"term",
"STMB cave\n在高空3宽坑架SZ捐一个T2的形状\n详细请到HD wiki查询",
HDsearch.."stmb cave",
HDsearch.."stmb_cave",
},
{"Cspin",
"cspin",
@@ -526,7 +526,7 @@ return{
"lst",
"term",
"一种不断b2b一直做T2的堆叠方法\n详细请到HD wiki查询",
HDsearch.."st stacking",
HDsearch.."st_stacking",
},
{"雨宫炮",
"yugong",
@@ -542,7 +542,7 @@ return{
"imperial cross huangjiashizi",
"term",
"在一个十字形洞口盖屋檐后可以做两个T2\n详细请到HD wiki查询",
HDsearch.."imperial cross",
HDsearch.."imperial_cross",
},
{"汉堡包",
"hamburger hanbaobao",
@@ -609,7 +609,7 @@ return{
{"Finesse",
"finesse jijiancaozuo zuijiancaozuo",
"term",
"极简操作\n用最少的按键数将方块移到想去的位置的技术节约时间和减少misdrop。练习可用jstris的极简错误重开或者techmino中打开极简错误提示多玩就可以。\n\n注意本游戏使用的极简判定系统不是说完全和理论最少操作数一样而是不需要软降就能达到的位置才会按照标准出块方向和你的按键次数执行极简检测故在此不像js存在软降后误杀。但是多了一些新的条件比如【手上和hold一样/已经按了超过3次按键后】再hold后按键次数不重置(让下一块极简失误)。\n极简率计算:没有超过标准极简法操作数的计100%超出一步计50%超出两步计25%,两步以上计0%。\n\n注:20G下极简系统和0G一样工作所以得到的数值不准确参考价值偏低",
"极简操作\n用最少的按键数将方块移到想去的位置的技术节约时间和减少misdrop。练习可用jstris的极简错误重开或者techmino中打开极简错误提示多玩就可以。\n\n注意本游戏使用的极简判定系统不是说完全和理论最少操作数一样而是不需要软降就能达到的位置才会按照标准出块方向和你的按键次数执行极简检测故在此不像js存在软降后误杀。但是多了一些新的条件比如【手上和hold一样/已经按了超过3次按键后】再hold后按键次数不重置(让下一块极简失误)。\n极简率计算:\n没有超过标准极简法操作数的为Perfect计100%,超出一步为Great计50%,超出两步为Bad计25%,两步以上为Miss计0%其中Bad和Miss会断连\n\n注:20G下极简系统和0G一样工作所以得到的数值不准确参考价值偏低",
},
{"科研",
"keyan",
@@ -704,7 +704,7 @@ return{
{"输入延迟",
"input delay",
"term",
"用任何设备玩任何游戏时,所有的操作(按键盘,点鼠标等)都会晚一点点(很短,几毫秒到几十毫秒)到才达游戏如果过长就会很影响游戏手感作用效果类似于你拿qq远程控制打fps游戏\ntop、te等游戏比较明显/n这个延迟一般由硬件性能,硬件状态影响,通常来说不可设置,开启性能模式(或者关闭节能模式)可能会好一点",
"用任何设备玩任何游戏时,所有的操作(按键盘,点鼠标等)都会晚一点点(很短,几毫秒到几十毫秒)到才达游戏如果过长就会很影响游戏手感作用效果类似于你拿qq远程控制打fps游戏\ntop、te等游戏比较明显\n这个延迟一般由硬件性能,硬件状态影响,通常来说不可设置,开启性能模式(或者关闭节能模式)可能会好一点",
},
{"Cold Clear",
"cc coldclear",
@@ -828,152 +828,152 @@ return{
},
{"小Z",
"z xiaoz 626",
"z xiaoz",
"name",
"这个百科的名字!曾经是群里的答疑机器人,此词典数据库也就是沿用了机器人问答库~",
},
{"MrZ",
"mrz zjiang ddd 026",
"mrz zjiang ddd 026 626",
"name",
"这个游戏的作者!40行27秒\n多练练你也可以sub30~",
"【研究群】「T026」\n这个游戏的作者!\n40行27秒 MPH40行57秒世界第8(jstris的排行) top数据约40L50A TGM3(W)shirase金1300通关",
"https://space.bilibili.com/225238922",
},
{"Farter",
"farteryhr pi TTT 000",
"name",
"群友,CN块圈元老之一屁块作者",
"【研究群】「TTTT」\nCN块圈元老之一屁块作者",
"https://space.bilibili.com/132966",
},
{"Sniraite",
"sniraite shege 11renpc 024",
"name",
"群友,国内一流方块玩家",
"【研究群】「T024」\n国内一流方块玩家,应该是大陆最速",
"https://space.bilibili.com/561589",
},
{"四方茶叶",
"ttb teatube chanaiye 022",
{"Teatube",
"teatube ttb chaguan chanaiye sifangchaye 022",
"name",
"群友vupCN块圈发展重要人物",
"【研究群】「T022」\n研究群管理,探索群群主,茶服服主,人形方块百科史书,现中文方块维基主催\n40行33秒 top数据高峰约50L70A\n自2011年正式加入CN方块社区以来以探索方块有趣的思想作为主动力茶茶今天也在茶馆里当着茶房管理员——\n\n其他名称:TTB永远旋转的炸弹茶乃叶四方茶叶\n明明茶管是蓝孩子却被群友叫茶娘…怎么想都很奇怪啊!嘛大家喜欢的话就随便啦——",
"https://space.bilibili.com/834903",
},
{"xb",
"xb 043",
"name",
"群友,研究群赛事主要主办人",
"【研究群】「T043」\n研究群赛事主要主办人",
},
{"Flyz",
"flyz fxg 114",
"name",
"群友,高技术力",
"【研究群】「T114」\n高技术力",
"https://space.bilibili.com/787096",
},
{"gggf",
"gggf kissne 127",
"name",
"群友,20G规则国内一流玩家拿到了TGM3几乎全部的最终成就(全世界都没几个)",
"【研究群】「T127」\n20G规则国内一流玩家拿到了TGM3几乎全部的最终成就(全世界都没几个)",
"https://space.bilibili.com/287769888",
},
{"蕴空之灵",
"ykzl yunkongzhiling niao bird 196",
"name",
"群友vup效率之光不能吃辣",
"【研究群】「T196」\nvup效率之光不能吃辣\n常用定式:信天翁 tki3 开局pc\ntop数据约50L90A",
"https://space.bilibili.com/9964553",
},
{"安樱奈莯",
"naki anyingnaimu youling gui 210",
"name",
"群友,vup喜欢打块的幽灵techmino配音之一",
"【研究群】「T210」\nvup喜欢打块的幽灵techmino配音之一",
"https://space.bilibili.com/33212649",
},
{"奏之章",
"zzz zouzhizhang 274",
"name",
"群友,zzzbot的作者CN块圈人工智能技术发展重要人物之一",
"【研究群】「T274」\nzzzbot的作者CN块圈人工智能技术发展重要人物之一",
"https://space.bilibili.com/311039",
},
{"吴淞昊",
"electric modian zhunbei 283",
"name",
"群友,国内一流高端隐形方块玩家,上过最强大脑",
"【研究群】「T283」\n国内一流高端隐形方块玩家,上过最强大脑",
"https://space.bilibili.com/17583394",
},
{"他天一",
"tty tatianyi 512",
"name",
"群友,zzz大爷的c2AI贡献者之一打块水平国内前列",
"【研究群】「T512」\nzzz大爷的c2AI贡献者之一打块水平国内前列",
"https://space.bilibili.com/3895759",
},
{"Mars608",
"mars huoxingge 608",
"name",
"群友,拿过ns ppt国区榜首",
"【研究群】「T608」\n拿过ns ppt国区榜首",
"https://space.bilibili.com/1471400",
},
{"Mifu",
"mifu swl nanmaomao 616",
"name",
"群友,vupmiya的哥哥(方块教练)",
"【研究群】「T616」\nvupmiya的哥哥(方块教练)",
"https://space.bilibili.com/109356367",
},
{"ZXC",
"zxc thtsod flag 655",
"name",
"群友,高技术力",
"【研究群】「T655」\n高技术力",
"https://space.bilibili.com/4610502",
},
{"Tinko",
"tinko 665",
"name",
"群友,高技术力",
"【研究群】「T665」\n高技术力",
"https://tinko.moe",
},
{"T722",
"722",
"name",
"群友,音乐人",
"【研究群】「T722」\n音乐人",
"https://space.bilibili.com/30452985",
},
{"Diao",
"diao mengxin 872",
"name",
"群友一流对战选手得过jscup亚军ttt冠军HDO XII冠军\n曾用名一大堆nmdtql/diao/nanami什么的还有一大堆高仿名\n天天自称萌新,小心他放海控效等速吊打你",
"【研究群】「T872」\n(但这人老故意空着群名片啥都不写)一流对战选手得过jscup亚军ttt冠军HDO XII冠军\n曾用名一大堆nmdtql/diao/nanami什么的还有一大堆高仿名\n天天自称萌新,小心他放海控效等速吊打你",
"https://space.bilibili.com/471341780",
},
{"思竣",
"sijun 942",
"name",
"群友,算力极强的思维型选手,目前唯一在全清挑战-疯狂达成25PC的人",
"【研究群】「T942」\n算力极强的思维型选手,目前唯一在全清挑战-疯狂达成25PC的人",
"https://space.bilibili.com/403250559",
},
{"子心",
"koishi zixin 1934",
"name",
"群友,vupT99国内一流战术型玩家",
"【研究群】「T1934」\nvupT99国内一流战术型玩家",
"https://space.bilibili.com/147529",
},
{"葵妹",
{"ditoly",
"ditoly icrem kuimei jk 3055",
"name",
"群友,被清华劝退现于北大的打块天才jk\n(好像也被北大劝退了?不知道)",
"【研究群】「T3055」\n被清华劝退现于北大的打块天才jk\n(好像也被北大劝退了?不知道)",
"https://space.bilibili.com/13014410",
},
{"蓝绿",
"lanlv gompyn 3182",
"name",
"群友,高技术力,喜欢催更",
"【研究群】「T3182」\n高技术力,喜欢催更",
},
{"喵田弥夜",
"miya miaotianmiye mao 7023",
"name",
"群友,vup喜欢打块的猫猫(Z酱单推)techmino配音之一",
"【研究群】「T7023」\nvup喜欢打块的猫猫(Z酱单推)techmino配音之一",
"https://space.bilibili.com/846180",
},
{"Windkey",
"wdk windkey fengyaoshi",
"name",
"曾经是群友,对战基本只开局c4w导致风评很差学c4w可以看他",
"曾经是群友,对战基本只开局c4w导致风评很差学c4w可以看他",
"https://space.bilibili.com/25576872",
},
{"星街彗星",

View File

@@ -26,7 +26,7 @@ return{
if L<6 then
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",2*L))
else
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",L,int(L*.5-1.5),modeEnv.hold,4000*L))
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",2*L-11,int(L*.5-1.5),modeEnv.hold,4000*L))
end
end
preField.h=20

View File

@@ -44,7 +44,7 @@ return{
if L<6 then
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",2*L))
else
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",L,int(L*.5-1.5),modeEnv.hold,4000*L))
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",2*L-11,int(L*.5-1.5),modeEnv.hold,4000*L))
end
end
preField.h=20

View File

@@ -0,0 +1,61 @@
local gc=love.graphics
local dropSpeed={[0]=60,50,40,30,25,20,15,12,9,7,5,4,3,2,1,1,.5,.5,.25,.25}
local function check_LVup(P)
if P.combo>1 or P.b2b>0 or P.lastClear.row>1 then
if P.combo>1 then P:showText("2x",0,-220,40,"flicker",.3)end
if P.b2b>0 then P:showText("spin",0,-160,40,"flicker",.3)end
if P.lastClear.row>1 then P:showText("1+",0,-100,40,"flicker",.3)end
P:lose()
return
end
local T=P.modeData.point+10
if P.stat.row>=T then
if T==200 then
P:win("finish")
else
P.gameEnv.drop=dropSpeed[T/10]
P.modeData.point=T
SFX.play("reach")
end
end
end
return{
color=color.yellow,
env={
noTele=true,
wait=8,fall=20,
target=10,dropPiece=check_LVup,
mindas=7,minarr=1,minsdarr=1,
bg="bg2",bgm="push",
},
pauseLimit=true,
slowMark=true,
load=function()
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P)
setFont(45)
mStr(P.stat.row,69,390)
mStr(P.modeData.point+10,69,440)
gc.rectangle("fill",25,445,90,4)
end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
if L>=200 then
local T=P.stat.time
return
T<=400 and 5 or
T<=600 and 4 or
3
else
return
L>=150 and 2 or
L>=80 and 1 or
L>=20 and 0
end
end,
}

View File

@@ -9,7 +9,7 @@ return{
pauseLimit=true,
load=function()
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",2))
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",4))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return toTime(D[1])end,

View File

@@ -9,7 +9,7 @@ return{
pauseLimit=true,
load=function()
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",4))
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",5))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return toTime(D[1])end,

View File

@@ -9,7 +9,7 @@ return{
pauseLimit=true,
load=function()
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",5))
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",6))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return toTime(D[1])end,

View File

@@ -9,7 +9,7 @@ return{
pauseLimit=true,
load=function()
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",7,2,true,30000))
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",5,2,true,30000))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return toTime(D[1])end,

View File

@@ -9,7 +9,7 @@ return{
pauseLimit=true,
load=function()
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",8,3,true,50000))
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",6,3,true,50000))
end,
score=function(P)return{P.stat.time}end,
scoreDisp=function(D)return toTime(D[1])end,

37
modes/sprintFix.lua Normal file
View File

@@ -0,0 +1,37 @@
return{
color=color.green,
env={
drop=60,lock=60,
noTele=true,
keyCancel={1,2},
target=40,dropPiece=PLY.check_lineReach,
bg="aura",bgm="waterfall",
},
load=function()
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P)
setFont(55)
local r=40-P.stat.row
if r<0 then r=0 end
mStr(r,69,335)
P:drawTargetLine(r)
end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
if L<40 then
return
L>25 and 2 or
L>10 and 1 or
L>5 and 0
end
local T=P.stat.time
return
T<=360 and 5 or
T<=600 and 4 or
3
end,
}

36
modes/sprintLock.lua Normal file
View File

@@ -0,0 +1,36 @@
return{
color=color.green,
env={
drop=60,lock=60,
keyCancel={3,4,5},
target=40,dropPiece=PLY.check_lineReach,
bg="aura",bgm="waterfall",
},
load=function()
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P)
setFont(55)
local r=40-P.stat.row
if r<0 then r=0 end
mStr(r,69,335)
P:drawTargetLine(r)
end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
if L<40 then
return
L>25 and 2 or
L>10 and 1 or
L>2 and 0
end
local T=P.stat.time
return
T<=420 and 5 or
T<=600 and 4 or
3
end,
}

View File

@@ -41,15 +41,15 @@ return{
local n=2
for i=1,4 do for j=1,6 do
if L[n]then
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5)))
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,6)))
else
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(3,5),2,true,20000))
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(2,4),2,true,20000))
end
n=n+1
end end
for i=9,12 do for j=1,6 do
if L[n]then
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(2,5)))
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(4,5)))
else
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(3,5),2,true,20000))
end

View File

@@ -41,9 +41,9 @@ return{
local n=2
for i=1,4 do for j=1,6 do
if L[n]then
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,7)))
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,8)))
else
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(6,8),3,true,30000))
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(3,6),3,true,30000))
end
n=n+1
end end
@@ -51,7 +51,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(4,7)))
else
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(6,8),3,true,30000))
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(4,6),3,true,30000))
end
n=n+1
end end

View File

@@ -43,15 +43,15 @@ return{
if L[n]then
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(8,10)))
else
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(8,10),3,true,40000))
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(4,7),3,true,40000))
end
n=n+1
end end
for i=9,12 do for j=1,6 do
if L[n]then
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,10)))
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,9)))
else
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(8,10),3,true,40000))
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(5,8),3,true,40000))
end
n=n+1
end end

View File

@@ -41,15 +41,15 @@ return{
local n=2
for i=1,7 do for j=1,7 do
if L[n]then
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5)))
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,6)))
else
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(3,5),2,true,20000))
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(2,4),2,true,20000))
end
n=n+1
end end
for i=15,21 do for j=1,7 do
if L[n]then
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(2,5)))
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,5)))
else
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(3,5),2,true,20000))
end

View File

@@ -41,9 +41,9 @@ return{
local n=2
for i=1,7 do for j=1,7 do
if L[n]then
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,7)))
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,8)))
else
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(6,8),3,true,30000))
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(3,6),3,true,30000))
end
n=n+1
end end
@@ -51,7 +51,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,7)))
else
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(6,8),3,true,30000))
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(4,6),3,true,30000))
end
n=n+1
end end

View File

@@ -43,15 +43,15 @@ return{
if L[n]then
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(8,10)))
else
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(8,10),3,true,40000))
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,7),3,true,40000))
end
n=n+1
end end
for i=15,21 do for j=1,7 do
if L[n]then
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,10)))
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,9)))
else
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(8,10),3,true,40000))
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(5,8),3,true,40000))
end
n=n+1
end end

View File

@@ -1,4 +1,4 @@
local AISpeed={60,45,30,24,18,12,8,5,4,3}
local AISpeed={60,45,30,20,15,10,6,4,3,2}
return function(type,speedLV,next,hold,node)
if type=="CC"then
return{
@@ -11,7 +11,7 @@ return function(type,speedLV,next,hold,node)
elseif type=="9S"then
return{
type="9S",
delta=math.floor(AISpeed[speedLV]*.5),
delta=math.floor(AISpeed[speedLV]),
}
end
end

View File

@@ -16,7 +16,8 @@ local Timer=love.timer.getTime
local blockPos={4,4,4,4,4,5,4}
local scs={{0,1},{0,1},{0,1},{0,1},{0,1},{.5,.5},{-.5,1.5}}
-------------------------------------------------Cold clear
if LOADLIB("CC")then
cc=LOADLIB("CC")
if cc then
local CCblockID={6,5,4,3,2,1,0}
CC={
getConf= cc.get_default_config ,--()options,weights

View File

@@ -167,7 +167,7 @@ function copyBoard()
return data.encode("string","base64",data.compress("string","zlib",str))
end
function pasteBoard(str)
local _
local _,__
--Decode
_,str=pcall(data.decode,"string","base64",str)
@@ -264,8 +264,12 @@ function pasteMission(str)
end
else
if _>=34 and _<=114 then
ins(mission,reg)
reg=_-33
if missionEnum[reg]then
ins(mission,reg)
reg=_-33
else
return
end
elseif _>=115 and _<=126 then
for i=1,_-113 do
ins(mission,reg)

View File

@@ -3,8 +3,7 @@ if setting.lang==1 or setting.lang==2 then
L={
'注意到"旋转"到底对方块做了些什么吗?',
"(RUR'U')R'FR2U'R'U'(RUR'F')",
"\\196/",
"↑↑↓↓←→←→BABA",
"↑↑↓↓←→←→BA",
"1, 2, ⑨!!!!!",
"100行内23PC来一个?",
"11renPC!",
@@ -15,9 +14,9 @@ if setting.lang==1 or setting.lang==2 then
"20G本质是一套全新的游戏规则",
"26连T2来一个?",
"3.1415926535897932384",
"4+4+4+4+2+2+1=17",
"40行世界纪录:15.654s",
"626r/s",
"7宽三SZ架空捐了解一下",
"把手机调到特殊的日期也不会发生什么的(真的",
"报时机器人:新的一天开始了",
"本游戏可不是休闲游戏",
@@ -32,40 +31,55 @@ if setting.lang==1 or setting.lang==2 then
"茶娘 可爱!",
"触摸板打osu是什么体验",
"打好块没有捷径,多练。",
"大概还是有人会认真看tips的",
"大满贯10连击消四全清!",
"戴上耳机以获得最佳体验",
"音乐使用beepbox制作",
"单手也能玩!",
"低帧率会降低游戏体验",
"俄罗斯方块环游记也不错!",
"方块默认出现的方向都是重心在下哦",
"方块研究所 有一个Nspire-CX版本!",
"感觉自己明明按键了但是没反应?你真的按到了吗?",
"感觉自己速度到上限了?试着去调下控制设置(如果没认真调过的话)",
"感谢群友帮忙想了一大堆tips",
"感谢Phigros,让我抄了一堆tips(",
"给别人推荐本游戏的时候请记住我真的不叫铁壳米诺!!!",
"更小的DAS和ARR拥有更高的操作上限(前提是你能控制得了)",
"光敏性癫痫警告",
"还能写些什么tip呢",
"好好T旋,天天向上",
"合群了就会消失,但是消失不代表没有意义",
"很有精神!",
"健康小贴士:不要熬夜,真的会猝死",
"健康小贴士:玩游戏多眨眼,不然会干眼病",
"键位是可以自定义的",
"觉得移动速度太慢或太快,手感不好?快去设置调整DAS/ARR",
"快去打一把100%极简看看能拿什么评价",
"联网还没做呢,别急",
"卖弱禁言警告",
"没学过编曲,音乐都是自己凭感觉写的,觉得不好听就设置里关了吧",
"没有专业美术的人,程序员审美警告",
"每个块的出现方向可以自定义",
"每个虚拟按键都可以隐藏/显示,尺寸也可调",
"秘密数字:626",
"免费吃鸡方块",
"喵!",
"魔方好玩!",
"魔方也是方块(确信",
"你的双手是为了你的一生服务的,而不是Techmino",
"你今天的人品值是:0",
"你今天的人品值是:26",
"你今天的人品值是:62.6",
"你今天的人品值是:99.626",
"你可以从统计页面打开游戏存档目录",
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
"你准备好了吗?",
"请不要一直看主页机器人玩",
"请勿大力敲打设备!敲坏了就没有Techmino玩了",
"去玩别的方块的时候记得没有Ospin!",
"扫雷好玩!",
"少女祈祷中",
"使用love2d引擎制作",
"游戏使用love2d引擎制作",
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
"术语不认识?去帮助-词典里查查吧",
"泰拉瑞亚好玩!",
@@ -84,6 +98,8 @@ if setting.lang==1 or setting.lang==2 then
"新人请千万记住,打好基础,不要太早学那些花里胡哨的。",
"旋转不是变形!请尽量灵活利用顺逆时针两个旋转键!",
"学会使用两个旋转键,三个更好",
"音游方块是一家(暴论",
"应该没人会认真看tips吧?",
"游戏作者40行卡27秒好几个月了...",
"有建议的话可以把信息反馈给作者~",
"有疑问? 先看设置有没有你想要的",
@@ -111,6 +127,7 @@ if setting.lang==1 or setting.lang==2 then
"e^(pi*i)=-1",
"e^(pi*i/2)=i",
"fin neo iso 是满足tspin条件的特殊t2的名字",
"fqmzwmhxzypdgzfzagjycxys",
"Jstris也很好玩!",
"l-=-1",
"Let-The-Bass-Kick!",
@@ -125,6 +142,7 @@ if setting.lang==1 or setting.lang==2 then
"REGRET!!",
"STSD必死",
"Techmino好玩!",
"Techmino没有抽卡没有氪金,太好玩了",
"Techminohaowan",
"TechOS?那是什么",
"Tetr.io也很好玩!",
@@ -133,94 +151,79 @@ if setting.lang==1 or setting.lang==2 then
"uid:225238922",
"VVVVVV好玩!",
"Xspin是个啥玩意",
"Z酱不是应急食品!不!是!",
"Z酱累了,Z酱不想更新",
"Z酱只是个写代码的,懂什么方块",
"Z块等身抱枕来一个(x",
"ZS JL T O I",
-- "Z酱 可爱!",
}
elseif setting.lang==3 then
L={
'Free block game with Battle Royale mode!',
'Have you noticed what "rotating" does do to the block?',
":pog:",
"(RUR'U')R'FR2U'R'U'(RUR'F')",
'Free block game with royale mode"',
"\\jezevec/\\jezevec/\\jezevec/",
"\\osk/\\osk/\\osk/",
"↑↑↓↓←→←→BABA",
"↑↑↓↓←→←→BA",
"1, 2, ⑨!!!!!",
"11renPC!",
"2.7182818284590452353",
"2^2=Miya",
"20G actually is a brand new game rule",
"225238922 Bilibili cheers!",
"3.1415926535897932384",
"4+4+4+4+2+2+1=17",
"40L WR: 15.654s",
"少女祈禱中",
"ALLSPIN!",
"Also try 15puzzle",
"Also try Cultris II!",
"Also try Jstris!",
"Also try Minecraft",
"Also try Minesweeper",
"Also try Nullpomino!",
"Also try OSU",
"Also try Phigros",
"Also try Rubik's cube",
"Also try Terraria",
"Also try Osu!",
"Also try Phigros!",
"Also try Terraria!",
"Also try Tetr.io!",
"Also try Tetr.js!",
"Also try Tetralegends",
"Also try Tetra Legends!",
"Also try VVVVVV!",
"Am G F G",
"Any suggestions to author!",
"Any suggestions? Post them in our Discord!",
"B2B2B???",
"Back to Back 10 combo Techrash PC!",
"Change log in English can be found on Discord.",
"COOL!!",
"Decreasing DAS and ARR: faster, but harder to control.",
"Diao so bully",
"Disappearing doesn't mean useless",
"Do not play game in class!",
"Do not playing too long without having a break!",
"Don't let a small glitch ruin your entire day!",
"Don't look directly at the bugs!",
"DT cannon=TSD+TST",
"e^(pi*i)=-1",
"e^(pi*i/2)=i",
"Enjoy Tech. Rotation System!",
"Find out what's in the setting!",
'Have you noticed what does "rotating" do to block?',
"Headphones for better experience",
"Enjoy Techmino rotation system!",
"Find out what's in the settings!",
"Headphones recommended for better experience",
"Hello world!",
"Initial Rotation etc. can save your life",
"Increase frame rate for better experience.",
"Initial [insert action] system can save your life",
"Is B2B2B2B possible?",
"It's really loading! Not just a cutscene!",
"Join our discord!",
"l-=-1",
"Let-The-Bass-Kick!",
"Lower fps causes lower game experience",
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
"Lua No.1",
"Miya so cute!",
"Miya:Nya!",
"Not animation,real loading!",
"Nothing will happen when some special day come",
"O spin triple!",
"Music distracting? Feel free to turn it off.",
"No, there are no easter eggs based on your device time.",
"O-Spin Triple!",
"OHHHHHHHHHHHHHH",
"Only offline game now",
"Powered by love2d",
"Online mode planned, be patient",
"Powered by Love2D",
"REGRET!!",
"Secret num:626",
"Small DAS&ARR can make you faster,if you can control block correctly",
"Switch music off if make you awful",
"Secret number: 626",
"Sprint WR: 15.654s by VinceHD",
"Techmino = Technique + Tetromino",
"Techmino has a Nspire-CX edition!",
"Techmino is so fun!",
"Techmino=Technique+Tetromino",
"This game can be very hard,be mentally perpared",
"This in not a casual game",
"Try to use two rotate button,three better",
"TetroDictionary (Little Z) in English can be found on Discord.",
"Try to use two rotate buttons. Even better, all three.",
"Warning: Programmer Art",
"What about 20 PCs?",
"What about 23 PCs in 100 lines?",
"What about 26 TSDs?",
"Who is diao",
"wwwwww",
"You are Grand Master",
"You can open saving directory from stat. page",
"You are Grand Master.",
"You can open saving directory from Stats page",
"You can set orientation for each block",
"ZS JL T O I",
}

View File

@@ -1,89 +1,106 @@
return{
{name="sprint_10", x=0, y=0, size=35,shape=1,icon="sprint", unlock={"sprint_20","sprint_40"}},
{name="sprint_20", x=-200, y=0, size=45,shape=1,icon="sprint", },
{name="sprint_40", x=0, y=-400, size=35,shape=1,icon="sprint", unlock={"dig_10","sprint_100","marathon_normal","sprintPenta","sprintMPH"}},
{name="sprint_100", x=-200, y=-200, size=45,shape=1,icon="sprint", unlock={"sprint_400","drought_normal"}},
{name="drought_normal", x=-400, y=0, size=35,shape=1,icon="noI", unlock={"drought_lunatic"}},
{name="drought_lunatic", x=-600, y=0, size=35,shape=1,icon="mess", },
{name="sprint_400", x=-400, y=-200, size=35,shape=1,icon="sprint", unlock={"sprint_1000"}},
{name="sprint_1000", x=-600, y=-200, size=35,shape=1,icon="sprint", },
{name="dig_10", x=-200, y=-400, size=35,shape=1,icon="dig", unlock={"dig_40"}},
{name="dig_40", x=-400, y=-400, size=35,shape=1,icon="dig", unlock={"dig_100"}},
{name="dig_100", x=-600, y=-400, size=35,shape=1,icon="dig", unlock={"dig_400"}},
{name="dig_400", x=-800, y=-200, size=35,shape=1,icon="dig", },
{name="marathon_normal", x=0, y=-600, size=55,shape=1,icon="flag", unlock={"marathon_hard","solo_1","round_1","blind_easy","classic_fast","survivor_easy","bigbang","zen"}},
{name="marathon_hard", x=0, y=-800, size=45,shape=1,icon="flag", unlock={"master_beginner"}},
{name="solo_1", x=-300, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_2"}},
{name="solo_2", x=-500, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_3"}},
{name="solo_3", x=-700, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_4","techmino49_easy"}},
{name="solo_4", x=-900, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_5"}},
{name="solo_5", x=-1100, y=-1000, size=35,shape=1,icon="solo", },
{name="techmino49_easy", x=-900, y=-1200, size=35,shape=1,icon="royale", unlock={"techmino49_hard","techmino99_easy"}},
{name="techmino49_hard", x=-900, y=-1400, size=35,shape=1,icon="royale", unlock={"techmino49_ultimate"}},
{name="techmino49_ultimate", x=-900, y=-1600, size=35,shape=1,icon="royale", },
{name="techmino99_easy", x=-1100, y=-1400, size=35,shape=1,icon="royale", unlock={"techmino99_hard"}},
{name="techmino99_hard", x=-1100, y=-1600, size=35,shape=1,icon="royale", unlock={"techmino99_ultimate"}},
{name="techmino99_ultimate", x=-1100, y=-1800, size=35,shape=1,icon="royale", },
{name="round_1", x=-300, y=-800, size=35,shape=1,icon="round", unlock={"round_2"}},
{name="round_2", x=-500, y=-800, size=35,shape=1,icon="round", unlock={"round_3"}},
{name="round_3", x=-700, y=-800, size=35,shape=1,icon="round", unlock={"round_4"}},
{name="round_4", x=-900, y=-800, size=35,shape=1,icon="round", unlock={"round_5"}},
{name="round_5", x=-1100, y=-800, size=35,shape=1,icon="round", },
{name="sprint_10", x=0, y=0, size=35,shape=1,icon="sprint", unlock={"sprint_20","sprint_40"}},
{name="sprint_20", x=-200, y=0, size=45,shape=1,icon="sprint", },
{name="sprint_40", x=0, y=-300, size=35,shape=1,icon="sprint", unlock={"dig_10","sprint_100","marathon_normal","sprintFix","sprintLock","sprintPenta","sprintMPH"}},
{name="sprint_100", x=-200, y=-200, size=45,shape=1,icon="sprint", unlock={"sprint_400","drought_normal"}},
{name="sprint_400", x=-400, y=-200, size=35,shape=1,icon="sprint", unlock={"sprint_1000"}},
{name="sprint_1000", x=-600, y=-200, size=35,shape=1,icon="sprint", },
{name="master_beginner", x=0, y=-1000, size=35,shape=1,icon="master", unlock={"master_advance"}},
{name="master_advance", x=0, y=-1200, size=35,shape=1,icon="master", unlock={"master_final","GM"}},
{name="master_final", x=0, y=-1400, size=40,shape=2,icon="master", },
{name="GM", x=150, y=-1500, size=35,shape=1,icon="master", },
{name="sprintFix", x=180, y=-400, size=40,shape=2,icon="sprint_new", },
{name="sprintLock", x=240, y=-290, size=40,shape=2,icon="sprint_new", },
{name="sprintPenta", x=240, y=-180, size=40,shape=2,icon="sprint_new", },
{name="sprintMPH", x=180, y=-70, size=40,shape=2,icon="sprint_new", },
{name="blind_easy", x=150, y=-700, size=35,shape=1,icon="blind", unlock={"blind_normal"}},
{name="blind_normal", x=150, y=-800, size=35,shape=1,icon="blind", unlock={"blind_hard"}},
{name="blind_hard", x=150, y=-900, size=35,shape=1,icon="blind", unlock={"blind_lunatic"}},
{name="blind_lunatic", x=150, y=-1000, size=35,shape=1,icon="blind", unlock={"blind_ultimate"}},
{name="blind_ultimate", x=150, y=-1100, size=35,shape=2,icon="blind", unlock={"blind_wtf"}},
{name="blind_wtf", x=150, y=-1200, size=35,shape=2,icon="blind", },
{name="drought_normal", x=-400, y=0, size=35,shape=1,icon="noI", unlock={"drought_lunatic"}},
{name="drought_lunatic", x=-600, y=0, size=35,shape=1,icon="mess", },
{name="classic_fast", x=-300, y=-1200, size=40,shape=2,icon="classic", },
{name="dig_10", x=-200, y=-400, size=35,shape=1,icon="dig", unlock={"dig_40"}},
{name="dig_40", x=-400, y=-400, size=35,shape=1,icon="dig", unlock={"dig_100"}},
{name="dig_100", x=-600, y=-400, size=35,shape=1,icon="dig", unlock={"dig_400"}},
{name="dig_400", x=-800, y=-200, size=35,shape=1,icon="dig", },
{name="survivor_easy", x=300, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_normal"}},
{name="survivor_normal", x=500, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_hard","attacker_hard","defender_normal","dig_hard"}},
{name="survivor_hard", x=700, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_lunatic"}},
{name="survivor_lunatic", x=900, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_ultimate"}},
{name="survivor_ultimate", x=1100, y=-600, size=35,shape=1,icon="survivor", },
{name="attacker_hard", x=300, y=-800, size=35,shape=1,icon="attacker", unlock={"attacker_ultimate"}},
{name="attacker_ultimate", x=300, y=-1000, size=35,shape=1,icon="attacker", },
{name="defender_normal", x=500, y=-800, size=35,shape=1,icon="defender", unlock={"defender_lunatic"}},
{name="defender_lunatic", x=500, y=-1000, size=35,shape=1,icon="defender", },
{name="dig_hard", x=700, y=-800, size=35,shape=1,icon="dig", unlock={"dig_ultimate"}},
{name="dig_ultimate", x=700, y=-1000, size=35,shape=1,icon="dig", },
{name="marathon_normal", x=0, y=-600, size=55,shape=1,icon="flag", unlock={"marathon_hard","marathon_ultimate","solo_1","round_1","blind_easy","classic_fast","survivor_easy","bigbang","zen"}},
{name="marathon_hard", x=0, y=-800, size=45,shape=1,icon="flag", unlock={"master_beginner"}},
{name="marathon_ultimate", x=-300, y=-500, size=35,shape=2,icon="flag", },
{name="bigbang", x=400, y=-400, size=55,shape=1,icon="bigbang", unlock={"c4wtrain_normal","pctrain_normal","tech_normal"}},
{name="c4wtrain_normal", x=700, y=-400, size=35,shape=1,icon="c4wtrain", unlock={"c4wtrain_lunatic"}},
{name="c4wtrain_lunatic", x=900, y=-400, size=35,shape=1,icon="c4wtrain", },
{name="solo_1", x=-300, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_2"}},
{name="solo_2", x=-500, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_3"}},
{name="solo_3", x=-700, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_4","techmino49_easy"}},
{name="solo_4", x=-900, y=-1000, size=35,shape=1,icon="solo", unlock={"solo_5"}},
{name="solo_5", x=-1100, y=-1000, size=35,shape=1,icon="solo", },
{name="pctrain_normal", x=700, y=-200, size=35,shape=1,icon="pctrain", unlock={"pctrain_lunatic","pcchallenge_normal"}},
{name="pctrain_lunatic", x=900, y=-200, size=35,shape=1,icon="pctrain", },
{name="pcchallenge_normal", x=800, y=-100, size=35,shape=1,icon="pcchallenge", unlock={"pcchallenge_hard"}},
{name="pcchallenge_hard", x=1000, y=-100, size=35,shape=1,icon="pcchallenge", unlock={"pcchallenge_lunatic"}},
{name="pcchallenge_lunatic",x=1200, y=-100, size=35,shape=1,icon="pcchallenge", },
{name="tech_normal", x=400, y=-150, size=35,shape=1,icon="tech", unlock={"tech_normal2","tech_hard","tech_finesse"}},
{name="tech_finesse", x=800, y=50, size=35,shape=1,icon="tech", unlock={"tech_finesse2"}},
{name="tech_finesse2", x=1000, y=50, size=35,shape=1,icon="tech", },
{name="tech_normal2", x=650, y=150, size=35,shape=1,icon="tech", unlock={"tsd_easy"}},
{name="tsd_easy", x=800, y=250, size=35,shape=1,icon="tsd", unlock={"tsd_hard"}},
{name="tsd_hard", x=1000, y=250, size=35,shape=1,icon="tsd", unlock={"tsd_ultimate"}},
{name="tsd_ultimate", x=1200, y=250, size=35,shape=1,icon="tsd", },
{name="tech_hard", x=400, y=50, size=35,shape=1,icon="tech", unlock={"tech_hard2","tech_lunatic"}},
{name="tech_hard2", x=250, y=50, size=35,shape=1,icon="tech", },
{name="tech_lunatic", x=400, y=200, size=35,shape=1,icon="tech", unlock={"tech_lunatic2"}},
{name="tech_lunatic2", x=250, y=200, size=35,shape=1,icon="tech", },
{name="techmino49_easy", x=-900, y=-1200, size=35,shape=1,icon="royale", unlock={"techmino49_hard","techmino99_easy"}},
{name="techmino49_hard", x=-900, y=-1400, size=35,shape=1,icon="royale", unlock={"techmino49_ultimate"}},
{name="techmino49_ultimate", x=-900, y=-1600, size=35,shape=1,icon="royale", },
{name="techmino99_easy", x=-1100, y=-1400, size=35,shape=1,icon="royale", unlock={"techmino99_hard"}},
{name="techmino99_hard", x=-1100, y=-1600, size=35,shape=1,icon="royale", unlock={"techmino99_ultimate"}},
{name="techmino99_ultimate", x=-1100, y=-1800, size=35,shape=1,icon="royale", },
{name="zen", x=-800, y=-600, size=35,shape=1,icon="zen", unlock={"ultra","infinite","infinite_dig"}},
{name="ultra", x=-1000, y=-400, size=35,shape=1,icon="ultra", },
{name="infinite", x=-800, y=-400, size=35,shape=1,icon="infinite", },
{name="infinite_dig", x=-1000, y=-600, size=35,shape=1,icon="infinite_dig",},
{name="sprintPenta", x=200, y=-150, size=40,shape=2,icon="sprint", },
{name="sprintMPH", x=200, y=-300, size=40,shape=2,icon="sprint", },
{name="round_1", x=-300, y=-800, size=35,shape=1,icon="round", unlock={"round_2"}},
{name="round_2", x=-500, y=-800, size=35,shape=1,icon="round", unlock={"round_3"}},
{name="round_3", x=-700, y=-800, size=35,shape=1,icon="round", unlock={"round_4"}},
{name="round_4", x=-900, y=-800, size=35,shape=1,icon="round", unlock={"round_5"}},
{name="round_5", x=-1100, y=-800, size=35,shape=1,icon="round", },
{name="custom_clear", x=0, y=2600, size=45,shape=3,icon="custom", },
{name="custom_puzzle", x=0, y=2600, size=45,shape=3,icon="puzzle", },
{name="master_beginner", x=0, y=-1000, size=35,shape=1,icon="master", unlock={"master_advance"}},
{name="master_advance", x=0, y=-1200, size=35,shape=1,icon="master", unlock={"master_final","GM"}},
{name="master_final", x=0, y=-1400, size=40,shape=2,icon="master", },
{name="GM", x=150, y=-1500, size=35,shape=1,icon="master", },
{name="blind_easy", x=150, y=-700, size=35,shape=1,icon="blind", unlock={"blind_normal"}},
{name="blind_normal", x=150, y=-800, size=35,shape=1,icon="blind", unlock={"blind_hard"}},
{name="blind_hard", x=150, y=-900, size=35,shape=1,icon="blind", unlock={"blind_lunatic"}},
{name="blind_lunatic", x=150, y=-1000, size=35,shape=1,icon="blind", unlock={"blind_ultimate"}},
{name="blind_ultimate", x=150, y=-1100, size=35,shape=2,icon="blind", unlock={"blind_wtf"}},
{name="blind_wtf", x=150, y=-1200, size=35,shape=2,icon="blind", },
{name="classic_fast", x=-300, y=-1200, size=40,shape=2,icon="classic", },
{name="survivor_easy", x=300, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_normal"}},
{name="survivor_normal", x=500, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_hard","attacker_hard","defender_normal","dig_hard"}},
{name="survivor_hard", x=700, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_lunatic"}},
{name="survivor_lunatic", x=900, y=-600, size=35,shape=1,icon="survivor", unlock={"survivor_ultimate"}},
{name="survivor_ultimate", x=1100, y=-600, size=35,shape=1,icon="survivor", },
{name="attacker_hard", x=300, y=-800, size=35,shape=1,icon="attacker", unlock={"attacker_ultimate"}},
{name="attacker_ultimate", x=300, y=-1000, size=35,shape=1,icon="attacker", },
{name="defender_normal", x=500, y=-800, size=35,shape=1,icon="defender", unlock={"defender_lunatic"}},
{name="defender_lunatic", x=500, y=-1000, size=35,shape=1,icon="defender", },
{name="dig_hard", x=700, y=-800, size=35,shape=1,icon="dig", unlock={"dig_ultimate"}},
{name="dig_ultimate", x=700, y=-1000, size=35,shape=1,icon="dig", },
{name="bigbang", x=400, y=-400, size=55,shape=1,icon="bigbang", unlock={"c4wtrain_normal","pctrain_normal","tech_normal"}},
{name="c4wtrain_normal", x=700, y=-400, size=35,shape=1,icon="c4wtrain", unlock={"c4wtrain_lunatic"}},
{name="c4wtrain_lunatic", x=900, y=-400, size=35,shape=1,icon="c4wtrain", },
{name="pctrain_normal", x=700, y=-220, size=35,shape=1,icon="pctrain", unlock={"pctrain_lunatic","pcchallenge_normal"}},
{name="pctrain_lunatic", x=900, y=-220, size=35,shape=1,icon="pctrain", },
{name="pcchallenge_normal", x=800, y=-100, size=35,shape=1,icon="pcchallenge", unlock={"pcchallenge_hard"}},
{name="pcchallenge_hard", x=1000, y=-100, size=35,shape=1,icon="pcchallenge", unlock={"pcchallenge_lunatic"}},
{name="pcchallenge_lunatic", x=1200, y=-100, size=35,shape=1,icon="pcchallenge", },
{name="tech_normal", x=400, y=-150, size=35,shape=1,icon="tech", unlock={"tech_normal2","tech_hard","tech_finesse"}},
{name="tech_normal2", x=650, y=150, size=35,shape=1,icon="tech", unlock={"tsd_easy"}},
{name="tech_hard", x=400, y=60, size=35,shape=1,icon="tech", unlock={"tech_hard2","tech_lunatic"}},
{name="tech_hard2", x=200, y=90, size=35,shape=1,icon="tech", },
{name="tech_lunatic", x=400, y=200, size=35,shape=1,icon="tech", unlock={"tech_lunatic2"}},
{name="tech_lunatic2", x=200, y=230, size=35,shape=1,icon="tech", },
{name="tech_finesse", x=800, y=50, size=35,shape=1,icon="tech", unlock={"tech_finesse2"}},
{name="tech_finesse2", x=1000, y=50, size=35,shape=1,icon="tech", },
{name="tsd_easy", x=800, y=250, size=35,shape=1,icon="tsd", unlock={"tsd_hard"}},
{name="tsd_hard", x=1000, y=250, size=35,shape=1,icon="tsd", unlock={"tsd_ultimate"}},
{name="tsd_ultimate", x=1200, y=250, size=35,shape=1,icon="tsd", },
{name="zen", x=-800, y=-600, size=35,shape=1,icon="zen", unlock={"ultra","infinite","infinite_dig"}},
{name="ultra", x=-1000, y=-400, size=35,shape=1,icon="ultra", },
{name="infinite", x=-800, y=-400, size=35,shape=1,icon="infinite", },
{name="infinite_dig", x=-1000, y=-600, size=35,shape=1,icon="infinite_dig",},
{name="custom_puzzle", x=0, y=2600, size=45,shape=1,icon="puzzle", },
{name="custom_clear", x=0, y=2600, size=45,shape=1,icon="custom", },
}

View File

@@ -30,15 +30,15 @@ local gameEnv0={
drop=60,lock=60,
wait=0,fall=0,
_20G=false,bone=false,
bone=false,
next=6,
hold=true,oncehold=true,
ospin=true,
sequence="bag",
freshMethod=NULL,
bag={1,2,3,4,5,6,7},
mission=NULL,
face=NULL,skin=NULL,
mission=NULL,
life=0,
pushSpeed=3,
@@ -48,6 +48,7 @@ local gameEnv0={
freshLimit=1e99,easyFresh=true,
Fkey=NULL,
keyCancel={},
fine=false,fineKill=false,
missionKill=false,
target=1e99,dropPiece=NULL,
@@ -192,8 +193,12 @@ local function Pupdate_alive(P,dt)
P.AI_stage=AIfunc[P.AI_mode][P.AI_stage](P,C)
elseif P.AI_delay<=0 then
P:pressKey(C[1])P:releaseKey(C[1])
if P.AI_mode~="CC"or C[1]>3 then
P.AI_delay=P.AI_delay0*2
else
P.AI_delay=P.AI_delay0*.5
end
rem(C,1)
P.AI_delay=P.AI_delay0*2
end
end
@@ -1165,12 +1170,17 @@ local function applyGameEnv(P)--Finish gameEnv processing
P.keyAvailable={true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true}
if ENV.noTele then
local L={11,12,13,15,16,17,18,19,20}
for i=1,#L do
P.keyAvailable[L[i]]=false
virtualkey[L[i]].ava=false
for i=11,20 do
if i~=14 then
P.keyAvailable[i]=false
virtualkey[i].ava=false
end
end
end
for _,v in next,ENV.keyCancel do
P.keyAvailable[v]=false
virtualkey[v].ava=false
end
if type(ENV.mission)=="table"then
P.curMission=1
@@ -1200,52 +1210,16 @@ local function applyGameEnv(P)--Finish gameEnv processing
end
local prepareSequence do
local freshMethod
local freshPrepare={
none=NULL,
bag=function(P)
local bag=P.gameEnv.bag
local L
repeat
L={}for i=1,#bag do L[i]=i end
repeat P:getNext(bag[rem(L,P:RND(#L))])until not L[1]
until #P.next>5
end,
his4=function(P)
local bag=P.gameEnv.bag
local L=#bag
P.his={bag[P:RND(L)],bag[P:RND(L)],bag[P:RND(L)],bag[P:RND(L)]}
for _=1,6 do
local i
local j=0
repeat
i=bag[P:RND(L)]
j=j+1
until i~=P.his[1]and i~=P.his[2]and i~=P.his[3]and i~=P.his[4]or j==6
P:getNext(i)
rem(P.his,1)P.his[4]=i
end
end,
rnd=function(P)
local bag=P.gameEnv.bag
local L=#bag
P:getNext(bag[P:RND(L)])
for i=1,5 do
local count=0
local i
repeat
i=bag[P:RND(L)]
count=count+1
until i~=P.next[#P.next].id or count>=L
P:getNext(i)
end
P:getNext(bag[rnd(#bag)])
freshMethod.rnd(P)
end,
loop=function(P)
local bag=P.gameEnv.bag
repeat
for i=1,#bag do
P:getNext(bag[i])
end
until #P.next>5
his4=function(P)
P.his={}
freshMethod.his4(P)
end,
fixed=function(P)
local bag=P.gameEnv.bag
@@ -1254,17 +1228,17 @@ local prepareSequence do
end
end,
}
local freshMethod={
freshMethod={
none=NULL,
bag=function(P)
if #P.next<6 then
while #P.next<6 do
local bag0,bag=P.gameEnv.bag,{}
for i=1,#bag0 do bag[i]=bag0[i]end
repeat P:getNext(rem(bag,P:RND(#bag)))until not bag[1]
end
end,
his4=function(P)
if #P.next<6 then
while #P.next<6 do
local bag=P.gameEnv.bag
local L=#bag
for n=1,4 do
@@ -1279,12 +1253,11 @@ local prepareSequence do
end
end,
rnd=function(P)
if #P.next<6 then
while #P.next<6 do
local bag=P.gameEnv.bag
local L=#bag
for i=1,4 do
local count=0
local i
repeat
i=bag[P:RND(L)]
count=count+1
@@ -1293,10 +1266,26 @@ local prepareSequence do
end
end
end,
reverb=function(P)
while #P.next<6 do
local bag0,bag=P.gameEnv.bag,{}
for i=1,#bag0 do bag[i]=bag0[i]end
repeat
local r=rem(bag,P:RND(#bag))
local p=1
repeat
P:getNext(r)
p=p-.15-rnd()
until p<0
until not bag[1]
end
end,
loop=function(P)
local bag=P.gameEnv.bag
for i=1,#bag do
P:getNext(bag[i])
while #P.next<6 do
local bag=P.gameEnv.bag
for i=1,#bag do
P:getNext(bag[i])
end
end
end,
fixed=function(P)
@@ -1307,12 +1296,21 @@ local prepareSequence do
function prepareSequence(P)--Call freshPrepare and set newNext
local ENV=P.gameEnv
if type(ENV.sequence)=="string"then
freshPrepare[ENV.sequence](P)
P.newNext=freshMethod[ENV.sequence]
if freshPrepare[ENV.sequence]then
freshPrepare[ENV.sequence](P)
else
P:newNext()
end
else
assert(type(ENV.sequence)=="function"and type(ENV.freshMethod)=="function","wrong sequence generator code")
ENV.sequence(P)
P.newNext=ENV.freshMethod
if type(ENV.freshMethod)=="function"then
if ENV.sequence then ENV.sequence(P)end
P.newNext=ENV.freshMethod
else
LOG.print("Wrong sequence generator code","warn")
ENV.sequence="bag"
prepareSequence(P)
end
end
end
end
@@ -2279,26 +2277,26 @@ do--player.drop(P)--Place piece
if dospin then P.ctrlCount=P.ctrlCount-2 end--Allow 2 more step for roof-less spin
local id=CB.id
local d=P.ctrlCount-finesseList[id][P.dir+1][CX]
finePts=d<=0 and 4 or max(3-d,0)
finePts=d<=0 and 5 or max(3-d,0)
else
finePts=4
finePts=5
end
P.stat.finesseRate=P.stat.finesseRate+finePts
if finePts<4 then
if finePts<5 then
P.stat.extraPiece=P.stat.extraPiece+1
if P.gameEnv.fineKill then
if ENV.fineKill then
P:lose()
end
if P.sound then
if P.gameEnv.fineKill then
if ENV.fineKill then
SFX.play("finesseError_long",.6)
elseif setting.fine then
elseif ENV.fine then
SFX.play("finesseError",.8)
end
end
end
if finePts<2 then
if finePts<=1 then
P.finesseCombo=0
else
P.finesseCombo=P.finesseCombo+1
@@ -3113,20 +3111,11 @@ function PLY.newDemoPlayer(id,x,y,size)
P.draw=Pdraw_demo
P.control=true
P.gameEnv={
drop=1e99,lock=1e99,
wait=10,fall=20,
next=6,hold=true,
oncehold=true,
das=10,arr=2,
sddas=2,sdarr=2,
das=10,arr=2,sddas=2,sdarr=2,
swap=true,
--Visual
block=true,
ghost=setting.ghost,
center=setting.center,
bone=false,
smooth=setting.smooth,
grid=setting.grid,
text=setting.text,
@@ -3137,20 +3126,27 @@ function PLY.newDemoPlayer(id,x,y,size)
clearFX=setting.clearFX,
shakeFX=setting.shakeFX,
mindas=0,minarr=0,minsdarr=0,
sequence="bag",
drop=1e99,lock=1e99,
wait=10,fall=20,
bone=false,
next=6,
hold=true,oncehold=true,
ospin=true,
noTele=false,
easyFresh=true,
visible="show",
freshLimit=1e99,
life=1e99,
pushSpeed=3,
sequence="bag",
bag={1,2,3,4,5,6,7},
face={0,0,0,0,0,0,0},
skin=setting.skin,
mission=false,
life=1e99,
pushSpeed=3,
block=true,
noTele=false,
visible="show",
freshLimit=1e99,easyFresh=true,
keyCancel={},
mindas=0,minarr=0,minsdarr=0,
}
applyGameEnv(P)
prepareSequence(P)

View File

@@ -42,15 +42,10 @@ do--calculator
val="0",
sym=false,
pass=false,
tip=require("parts/getTip"),
}
end
mouseDown.calculator=NULL
local function EGG(str)
sceneTemp.reg=str
sceneTemp.sym="="
end
function keyDown.calculator(k)
local S=sceneTemp
if byte(k)>=48 and byte(k)<=57 then
@@ -68,6 +63,10 @@ do--calculator
end
elseif k=="."then
if not(find(S.val,".",nil,true)or find(S.val,"e"))then
if S.sym and not S.reg then
S.reg=S.val
S.val="0."
end
S.val=S.val.."."
end
elseif k=="e"then
@@ -75,7 +74,13 @@ do--calculator
S.val=S.val.."e"
end
elseif k=="backspace"then
S.val=sub(S.val,1,-2)
if S.sym=="="then
S.val=""
elseif S.sym then
S.sym=false
else
S.val=sub(S.val,1,-2)
end
if S.val==""then S.val="0"end
elseif k=="+"or k=="="and kb.isDown("lshift","rshift")then
S.sym="+"
@@ -90,44 +95,48 @@ do--calculator
S.sym="/"
S.reg=false
elseif k=="return"then
if S.val then
if S.sym and S.reg then
S.val=
S.sym=="+"and (tonumber(S.reg)or 0)+tonumber(S.val)or
S.sym=="-"and (tonumber(S.reg)or 0)-tonumber(S.val)or
S.sym=="*"and (tonumber(S.reg)or 0)*tonumber(S.val)or
S.sym=="/"and (tonumber(S.reg)or 0)/tonumber(S.val)or
-1
end
S.sym="="
S.reg=false
local v=tonumber(S.val)
if v==600+26 then S.pass=true
elseif v==190000+6022 then
S.pass,marking=true
LOG.print("\68\69\86\58\87\97\116\101\114\109\97\114\107\32\82\101\109\111\118\101\100","message")
SFX.play("clear")
elseif v==72943816 then
S.pass=true
for name,M in next,Modes do
if not modeRanks[name]then
modeRanks[name]=M.score and 0 or 6
end
if byte(S.val,-1)==101 then S.val=sub(S.val,1,-2)end
if S.sym and S.reg then
if byte(S.reg,-1)==101 then S.reg=sub(S.reg,1,-2)end
S.val=
S.sym=="+"and (tonumber(S.reg)or 0)+tonumber(S.val)or
S.sym=="-"and (tonumber(S.reg)or 0)-tonumber(S.val)or
S.sym=="*"and (tonumber(S.reg)or 0)*tonumber(S.val)or
S.sym=="/"and (tonumber(S.reg)or 0)/tonumber(S.val)or
-1
end
S.sym="="
S.reg=false
local v=tonumber(S.val)
if v==600+26 then S.pass=true
elseif v==190000+6022 then
S.pass,marking=true
LOG.print("\68\69\86\58\87\97\116\101\114\109\97\114\107\32\82\101\109\111\118\101\100","message")
SFX.play("clear")
elseif v==72943816 then
S.pass=true
for name,M in next,Modes do
if not modeRanks[name]then
modeRanks[name]=M.score and 0 or 6
end
FILE.saveUnlock()
LOG.print("\68\69\86\58\85\78\76\79\67\75\65\76\76","message")
SFX.play("clear_2")
elseif v==1379e8+2626e4+1379 then
S.pass=true
SCN.go("debug")
end
FILE.saveUnlock()
LOG.print("\68\69\86\58\85\78\76\79\67\75\65\76\76","message")
SFX.play("clear_2")
elseif v==1379e8+2626e4+1379 then
S.pass=true
SCN.go("debug")
end
elseif k=="escape"then
S.val,S.reg,S.sym="0"
elseif k=="delete"then
S.val="0"
elseif k=="space"and S.pass then
SCN.back()
if LOADED then
SCN.back()
else
SCN.swapTo("load","swipeD")
end
end
end
@@ -139,9 +148,7 @@ do--calculator
setFont(45)
if S.reg then gc.printf(S.reg,0,100,720,"right")end
if S.val then gc.printf(S.val,0,150,720,"right")end
if S.sym then setFont(50)gc.print(S.sym,126,150)end
if S.pass then setFont(30)mStr(S.tip,640,10)end
end
end
do--minigame
@@ -797,7 +804,7 @@ do--load
phase=1,--Loading stage
cur=1,--Counter
tar=#VOC.name,--Loading bar length(current)
tip=setting.appLock or require("parts/getTip"),
tip=require("parts/getTip"),
list={
#VOC.name,
#BGM.list,
@@ -864,21 +871,16 @@ do--load
--------------------------Loading other little things here
SKIN.load()
stat.run=stat.run+1
LOADED=true
--------------------------
if not setting.appLock then
SFX.play("welcome_sfx")
VOC.play("welcome_voc")
end
SFX.play("welcome_sfx")
VOC.play("welcome_voc")
httpRequest(TICK.httpREQ_launch,"http://47.103.200.40/api/game")
else
S.cur=S.cur+1
S.tar=S.cur
if S.cur>62.6 then
if setting.appLock then
SCN.push("intro","fade")
SCN.swapTo("calculator","none")
else
SCN.swapTo("intro","none")
end
SCN.swapTo("intro","none")
end
loadingFinished=true
return
@@ -903,15 +905,13 @@ do--load
gc.rectangle("fill",300,330,S.cur/S.tar*680,60,5)
gc.setColor(1,1,1)
gc.rectangle("line",300,330,680,60,5)
if not setting.appLock then
setFont(35)
gc.print(text.load[S.phase],340,335)
if S.phase~=0 then
gc.printf(S.cur.."/"..S.tar,795,335,150,"right")
end
setFont(25)
mStr(S.tip,640,400)
setFont(35)
gc.print(text.load[S.phase],340,335)
if S.phase~=0 then
gc.printf(S.cur.."/"..S.tar,795,335,150,"right")
end
setFont(25)
mStr(S.tip,640,400)
end
end
do--intro
@@ -926,20 +926,6 @@ do--intro
for i=1,8 do
sceneTemp.r[i]=rnd(5)
end
local notice=HTTPrequest("http://47.103.200.40/api/notice")
if notice then
LOG.print(notice,"message")
else
LOG.print(text.getNoticeFail,"warn")
end
local newVersion=HTTPrequest("http://47.103.200.40/api/version_check")
if not newVersion then
LOG.print(text.getVersionFail,"warn")
elseif newVersion~=gameVersion then
LOG.print(string.gsub(text.versionIsOld,"$1",newVersion),"warn")
else
LOG.print(text.versionIsNew,"message")
end
end
function mouseDown.intro(x,y,k)
@@ -2414,9 +2400,6 @@ do--play
end
end
do--pause
local ranks={
}
local rankColor={
Z=color.lYellow,
S=color.lGrey,
@@ -2449,7 +2432,7 @@ do--pause
format("%d/%d/%d/%d",S.clears[1],S.clears[2],S.clears[3],S.clears[4]),
format("(%d)/%d/%d/%d",S.spins[1],S.spins[2],S.spins[3],S.spins[4]),
format("%d/%d ; %d/%d",S.b2b,S.b3b,S.pc,S.hpc),
format("%d/%dx/%.2f%%",S.extraPiece,S.maxFinesseCombo,S.finesseRate*25/S.piece),
format("%d/%dx/%.2f%%",S.extraPiece,S.maxFinesseCombo,S.finesseRate*20/S.piece),
},
--From right-down, 60 degree each
radar={
@@ -2499,8 +2482,8 @@ do--pause
end
S.val=B
if P.result=="WIN"then
local acc=P.stat.finesseRate*.25/P.stat.piece
if P.result=="WIN"and P.stat.piece>4 then
local acc=P.stat.finesseRate*.2/P.stat.piece
S.rank=
acc==1. and"Z"or
acc>.97 and"S"or
@@ -2512,10 +2495,10 @@ do--pause
"F"
S.rankColor=rankColor[S.rank]
if acc==1 then
S.trophy="All Perfect"
S.trophy=text.finesse_ap
S.trophyColor=color.yellow
elseif P.stat.maxFinesseCombo==P.stat.piece then
S.trophy="Full Combo"
S.trophy=text.finesse_fc
S.trophyColor=color.lCyan
end
end
@@ -2607,7 +2590,7 @@ do--pause
if S.trophy then
setFont(40)
gc.setColor(S.trophyColor[1],S.trophyColor[2],S.trophyColor[3],T*2-1)
gc.print(S.trophy,160-120*(1-T^.5),650)
gc.printf(S.trophy,100-120*(1-T^.5),650,300,"right")
end
end
@@ -3190,6 +3173,8 @@ do--dict
input="",
result={},
url=nil,
waiting=0,
select=1,
scroll=0,
@@ -3222,9 +3207,11 @@ do--dict
ins(result,dict[i])
end
end
if not result[1]then
S.input=""
if result[1]then
SFX.play("reach")
end
S.url=(S.result[1]and S.result or S.dict)[S.select][5]
S.lastSearch=S.input
end
function keyDown.dict(key)
@@ -3232,6 +3219,7 @@ do--dict
if #key==1 then
if #S.input<15 then
S.input=S.input..key
S.waiting=.8
end
elseif key=="up"then
if S.select and S.select>1 then
@@ -3261,6 +3249,8 @@ do--dict
S.input=sub(S.input,1,-2)
if #S.input==0 then
clearResult()
else
S.waiting=.8
end
elseif key=="escape"then
if #S.input>0 then
@@ -3269,20 +3259,22 @@ do--dict
else
SCN.back()
end
elseif key=="return"then
if #S.input>0 and S.input~=S.lastSearch then
search()
if S.result[1]then
SFX.play("reach")
else
SFX.play("finesseError")
end
S.lastSearch=S.input
end
end
S.url=(S.result[1]and S.result or S.dict)[S.select][5]
end
function Tmr.dict(dt)
local S=sceneTemp
if S.waiting>0 then
S.waiting=S.waiting-dt
if S.waiting<=0 then
if #S.input>0 and S.input~=S.lastSearch then
search()
end
end
end
end
local typeColor={
help=color.lGrey,
other=color.lOrange,
@@ -3297,16 +3289,16 @@ do--dict
gc.draw(drawableText.dict,20,5)
gc.setLineWidth(4)
gc.rectangle("line",20,109,726,60)
gc.rectangle("line",20,110,726,60)
setFont(40)
gc.print(S.input,35,110)
local list=S.result[1]and S.result or S.dict
gc.setColor(1,1,1)
local text=list[S.select][4]
if #text>500 then
if #text>600 then
setFont(20)
elseif #text>300 then
elseif #text>400 then
setFont(24)
else
setFont(28)
@@ -3334,6 +3326,13 @@ do--dict
gc.setColor(1,1,1)
gc.rectangle("line",300,180,958,526)
gc.rectangle("line",20,180,280,526)
if S.waiting>0 then
gc.setLineWidth(3)
gc.circle("line",780,140,25)
gc.setColor(1,1,1,.6)
gc.arc("fill",780,140,25,S.waiting/.8*6.28-1.5708,4.7124)
end
end
end
do--staff
@@ -3399,7 +3398,7 @@ do--stat
format("%.2f %.2f",S.atk/S.row,S.digatk/S.dig),
S.b2b.." "..S.b3b,
S.pc.." "..S.hpc,
format("%d/%.2f%%",S.extraPiece,S.finesseRate*25/S.piece),
format("%d/%.2f%%",S.extraPiece,S.finesseRate*20/S.piece),
},
}
for i=1,11 do

View File

@@ -74,4 +74,29 @@ function Tick.autoPause(data)
return true
end
end
function Tick.httpREQ_launch(data)
local res,err=client.poll(data.task)
if res then
if res.code==200 then
res=json.decode(res.body)
LOG.print(res.notice,360,color.sky)
if gameVersion==res.version then
LOG.print(text.versionIsNew,360,color.sky)
else
LOG.print(string.gsub(text.versionIsOld,"$1",res.version),"warn")
end
else
LOG.print("Code error: "..res.code,"warn")
end
return true
elseif err then
LOG.print(text.getNoticeFail..":"..err,"warn")
return true
end
data.time=data.time+1
if data.time==180 then
LOG.print(text.httpTimeout,"message")
return true
end
end
return Tick

View File

@@ -1,10 +1,13 @@
local S=[=[
"Patron"(time ordered, may not accurate):
<<<<<<<<<<rmb1000+>>>>>>>>>>
★☆白羽☆★
<<<rmb100+>>>
那没事了(T6300) 加油啊,钉钉动了的大哥哥(T3228)
弥佑瑶 Alan 幽灵3383
靏鸖龘龘 込余 saki
模电 吃水榴莲 世界沃德
\那没事了(T6300)/ \加油啊,钉钉动了的大哥哥(T3228)/
\弥佑瑶/ \Alan/ \幽灵3383/
\靏鸖龘龘/ \込余/ \saki/
\模电/ \吃水榴莲/ \世界沃德/
\Petris/
<rmb10+>
八零哥 蕴空之灵 gggf127 dtg ThTsOd Fireboos 金巧 10元
立斐 Deep_Sea 时雪 yyangdid sfqr 心痕 Sasoric 夏小亚
@@ -20,7 +23,6 @@ local S=[=[
Future outlook:
New modes:
infinite PC challenge; easy finesse (only revert current)
reverb (often repeat a piece many times)
combo; backfire; bigbang; rhythm; square
task survival; symmetry; parkour; game tutorial
game Abbr. testl finesse tutorial/exam (3next, 1pt/mino, drop to score)
@@ -35,16 +37,38 @@ Future outlook:
扫雷; 坦克大战; 找不同
热更新; 联网游戏; 录像保存/导出; 按块回放录像
⑨S机器人调试模式; 健康游戏时间提醒;游戏内文档
物理hold; 多hold
多方块; 多语音包系统
物理hold; 多hold; 多方块; 多语音包系统
自定义游戏选择旋转系统(C2,DTET,ASC...)
自定义游戏按各种目的复制数据; 画图智能画笔
地图增加模式图标; split判定及效果
更多画面效果; 一些3D小玩意
方块散落动画; 超60帧
更多画面效果; 一些3D小玩意; 方块散落动画; 超60帧
"一键操作"; 手机滑动操作; 特殊控件(例如虚拟摇杆)
task-Z(新AI); 工程编译到字节码
0.11.4: 网络库更新 Network Update
新内容:
新块序:回声
新模式:无移动/无旋转40行
新模式:纯单消马拉松
改动:
使用aegistudio的新网络库获取公告,无连接/拉取超时不会卡死了
增加公告/最新版本文字显示时长
极简评级要求改为通关且至少放了5个方块
极简等第文本区分语言
demo玩家不触发极简错误音
CC操作速度加强
地图布局微调
词典控件排版微调,键盘透明度降低,不再需要手动确认查询
软件锁在加载资源前启动
代码:
按键禁用加入模式环境变量
modes.lua文件模式扁平化
规范加载外部库代码
修复:
粘贴错误任务代码崩溃
计算器e键非法输入报错
ios打不开词典部分定式词条
0.11.3: 新极简系统 New Finesse System
新内容:
增加极简连击系统并且极简点数计算系统大改