Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5526872718 | ||
|
|
d0ec54ab78 | ||
|
|
f1411171a5 | ||
|
|
1930687eff | ||
|
|
6a6ce31451 | ||
|
|
a780ff48f5 | ||
|
|
d99afa5637 | ||
|
|
595c8246b6 | ||
|
|
be9d8fc283 | ||
|
|
6dcb818847 | ||
|
|
42ccdd15ed | ||
|
|
4d4ed8ea6b | ||
|
|
17bc226e98 | ||
|
|
ee27f4ad77 | ||
|
|
b9a886facf | ||
|
|
47fda8e374 | ||
|
|
b2354cac1e | ||
|
|
67a54869c7 | ||
|
|
285af92d88 | ||
|
|
e89a4c682d | ||
|
|
92c80e075d | ||
|
|
ef5ebd15a4 | ||
|
|
bb46f889f0 | ||
|
|
652c8995fc | ||
|
|
4ac98ca3e3 | ||
|
|
b407a0d0bb | ||
|
|
475b3b768c | ||
|
|
a25f3be6db | ||
|
|
d3fcde7507 | ||
|
|
d5c657701b | ||
|
|
e3a28893b4 | ||
|
|
52fe6d5934 |
@@ -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()
|
||||
|
||||
@@ -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 _
|
||||
|
||||
@@ -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"]= {"竞速", "纯净", "听说你反应很快?"},
|
||||
},
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
--
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
2
conf.lua
2
conf.lua
@@ -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
|
||||
|
||||
@@ -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",
|
||||
"群友,vup,CN块圈发展重要人物",
|
||||
"【研究群】「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",
|
||||
"群友,vup,miya的哥哥(方块教练)",
|
||||
"【研究群】「T616」\nvup,miya的哥哥(方块教练)",
|
||||
"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",
|
||||
"群友,vup,T99国内一流战术型玩家",
|
||||
"【研究群】「T1934」\nvup,T99国内一流战术型玩家",
|
||||
"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",
|
||||
},
|
||||
{"星街彗星",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
61
modes/marathon_ultimate.lua
Normal file
61
modes/marathon_ultimate.lua
Normal 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,
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
37
modes/sprintFix.lua
Normal 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
36
modes/sprintLock.lua
Normal 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,
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
109
parts/getTip.lua
109
parts/getTip.lua
@@ -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",
|
||||
}
|
||||
|
||||
175
parts/modes.lua
175
parts/modes.lua
@@ -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", },
|
||||
}
|
||||
172
parts/player.lua
172
parts/player.lua
@@ -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)
|
||||
|
||||
191
parts/scenes.lua
191
parts/scenes.lua
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
新内容:
|
||||
增加极简连击系统并且极简点数计算系统大改
|
||||
|
||||
Reference in New Issue
Block a user