Compare commits

...

24 Commits

Author SHA1 Message Date
MrZ626
ecf037f27d 0.10.6:CC更新 2020-08-26 00:22:54 +08:00
MrZ626
cf5844a2af O卡住的时候旋转不刷新锁定延迟 2020-08-26 00:22:04 +08:00
MrZ626
b2f8abb884 修改中文的tips 2020-08-26 00:21:24 +08:00
MrZ626
128ab01cf0 cc适配代码调整 2020-08-26 00:21:19 +08:00
MrZ626
a62945a71d cc库文件夹添加进gitignore 2020-08-25 02:24:27 +08:00
MrZ626
9ff8cd3aaa 修改UVRY的踢墙表 2020-08-25 02:21:37 +08:00
MrZ626
b1306ac220 隐形-瞬隐模式强制关闭瞬落/锁定特效 2020-08-25 02:21:32 +08:00
MrZ626
57a89c3859 代码/注释整理 2020-08-25 02:21:26 +08:00
MrZ626
610d953803 修复没开软件锁报错 2020-08-25 02:21:12 +08:00
MrZ626
b788f26f50 修复cc不能用的问题 2020-08-25 02:14:24 +08:00
MrZ626
e5f489fbab 代码整理,修复一个读取问题 2020-08-23 00:16:59 +08:00
MrZ626
4786ab59b0 代码整理 2020-08-23 00:16:30 +08:00
MrZ626
8c7e2da69a 软件锁加新功能和彩蛋 2020-08-23 00:16:04 +08:00
MrZ626
f511aa2f6f 软件锁也可显示tip 2020-08-23 00:15:29 +08:00
MrZ_26
46b119601b Merge pull request #22 from Gompyn/AndroidCC
CC for Android(and Linux)
2020-08-22 15:58:37 +08:00
MrZ_26
d4238da156 Merge pull request #21 from Gompyn/resolve-conflict-with-MrZ626/master
adapt cold-clear 45d5276 and update field when block placement is wrong
2020-08-22 15:55:44 +08:00
MrZ_26
f9cf35f746 输入重置码也可解锁游戏 2020-08-22 02:19:14 +08:00
Gompyn
097129bd08 Merge branch 'master' into resolve-conflict-with-MrZ626/master 2020-08-21 20:36:22 +08:00
Gompyn
c72dedf7cf try load CCloaders one by one
it will try all available CCloaders in game.love and go back to 9S
if all CCloaders are not available
2020-08-15 02:37:16 +08:00
Gompyn
5342d4f6d6 make CC update field *after* locking 2020-07-31 17:19:36 +08:00
Gompyn
6641d402c0 Fix variable scope 2020-07-30 14:30:17 +08:00
Gompyn
86ffc4a207 add CC on android (and Linux btw) 2020-07-29 16:04:35 +08:00
Gompyn
71130bbced make cc update field when block placement is wrong 2020-07-29 15:01:38 +08:00
Gompyn
17d670a1ba adapt cold-clear 45d5276 2020-07-29 14:47:49 +08:00
19 changed files with 203 additions and 118 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
lib

View File

@@ -170,9 +170,9 @@ function keyDown.calculator(k)
end
S.sym="="
S.reg=false
if S.val==626 then
if S.val==600+20+6 then
S.pass=true
elseif S.val==196022 then
elseif S.val==196000+022 then
S.pass=true
marking=nil
TEXT.show("\68\69\86\58\87\97\116\101\114\109\97\114\107\32\82\101\109\111\118\101\100",640,360,60,"stretch",.6)
@@ -187,14 +187,27 @@ function keyDown.calculator(k)
FILE.saveUnlock()
TEXT.show("\68\69\86\58\85\78\76\79\67\75\65\76\76",640,360,60,"stretch",.6)
SFX.play("clear_2")
elseif S.val==137926261379 then
elseif S.val==1379e8+2626e4+1379 then
S.pass=true
SCN.go("debug")
elseif S.val==34494 then
error("This is an error testing message.")
elseif S.val==114 then
S.val=514
elseif S.val==114514 then
S.reg=1919810
S.val=114514
elseif S.val==123456789 then
S.reg=123456789
S.val=987654321
end
end
elseif k=="space"then
if S.pass then
SCN.swapTo("intro")
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.swapTo("intro")
end
end

View File

@@ -101,8 +101,9 @@ function Pnt.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
setFont(50)
if S.sym then gc.print(S.sym,126,150)end
if S.sym then setFont(50)gc.print(S.sym,126,150)end
if S.pass then setFont(40)mStr(S.tip,640,10)end
end
function Pnt.load()
local S=sceneTemp

View File

@@ -13,14 +13,15 @@ function sceneInit.calculator()
val=0,
sym=false,
pass=false,
tip=require("parts/getTip"),
}
end
function sceneInit.load()
sceneTemp={
phase=1,--Loading stage
cur=1,--Counter
tar=#VOC.name,--Loading bar lenth(current)
tip=require("parts/getTip"),
tar=#VOC.name,--Loading bar length(current)
tip=setting.appLock or require("parts/getTip"),
list={
#VOC.name,
#BGM.list,

View File

@@ -1,4 +1,4 @@
gameVersion="Alpha V0.10.5"
gameVersion="Alpha V0.10.6"
function love.conf(t)
t.identity="Techmino"--Saving folder
t.version="11.1"

View File

@@ -116,34 +116,34 @@ if fs.getInfo("tech_ultimate.dat")then fs.remove("tech_ultimate.dat")end
if fs.getInfo("tech_ultimate+.dat")then fs.remove("tech_ultimate+.dat")end
--Update modeRanks
R=modeRanks
for k,v in next,R do
if type(k)=="number"then
local save=v
if not R[Modes[k].name]then
R[Modes[k].name]=v
do
local R=modeRanks
for k,v in next,R do
if type(k)=="number"then
if Modes[k]and not R[Modes[k].name]then
R[Modes[k].name]=v
end
R[k]=nil
end
R[k]=nil
end
end
if R.master_adavnce then
R.master_advance,R.master_adavnce=R.master_adavnce
end
if not text.modes[stat.lastPlay]then
stat.lastPlay="sprint_10"
end
if R.master_adavnce then
R.master_advance,R.master_adavnce=R.master_adavnce
end
if not text.modes[stat.lastPlay]then
stat.lastPlay="sprint_10"
end
--Update data file
S=stat
if type(setting.spawn)~="number"then
setting.spawn=0
end
if S.version~=gameVersion then
S.version=gameVersion
newVersionLaunch=true
--Update data file
local S=stat
if type(setting.spawn)~="number"then
setting.spawn=0
end
if S.version~=gameVersion then
S.version=gameVersion
newVersionLaunch=true
fs.remove("sprintPenta.dat")
fs.remove("master_adavnce.dat")
fs.remove("master_beginner.dat")
end
R,S=nil
fs.remove("sprintPenta.dat")
fs.remove("master_adavnce.dat")
fs.remove("master_beginner.dat")
end
end

View File

@@ -6,6 +6,7 @@ return{
drop=15,lock=45,
fall=10,
center=false,
dropFX=0,lockFX=0,
visible="none",
dropPiece=PLY.reach_winCheck,
freshLimit=15,

View File

@@ -33,7 +33,7 @@ return{
}
PLY.newPlayer(1,340,15)
local L={}for i=1,49 do L[i]=true end
local t=system~="Windows"and 0 or 2
local t=CCloader_filename[system] and 2 or 0
while t>0 do
local r=rnd(2,49)
if L[r]then L[r],t=false,t-1 end
@@ -43,7 +43,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5)))
else
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000))
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(3,5),2,true,10000))
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(2,5)))
else
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000))
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(3,5),2,true,10000))
end
n=n+1
end end

View File

@@ -33,7 +33,7 @@ return{
}
PLY.newPlayer(1,340,15)
local L={}for i=1,49 do L[i]=true end
local t=system~="Windows"and 0 or 4
local t=CCloader_filename[system] and 4 or 0
while t>0 do
local r=rnd(2,49)
if L[r]then L[r],t=false,t-1 end
@@ -43,7 +43,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,7)))
else
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000))
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(6,8),3,true,20000))
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(4,7)-1,3,true,20000))
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(6,8),3,true,20000))
end
n=n+1
end end

View File

@@ -33,7 +33,7 @@ return{
}
PLY.newPlayer(1,340,15)
local L={}for i=1,49 do L[i]=true end
local t=system~="Windows"and 0 or 6
local t=CCloader_filename[system] and 6 or 0
while t>0 do
local r=rnd(2,49)
if L[r]then L[r],t=false,t-1 end
@@ -43,7 +43,7 @@ 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)-1,4,true,30000))
PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(9,10),4,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(8,10)))
else
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000))
PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(9,10),4,true,30000))
end
n=n+1
end end

View File

@@ -33,7 +33,7 @@ return{
}
PLY.newPlayer(1,340,15)
local L={}for i=1,100 do L[i]=true end
local t=system~="Windows"and 0 or 4
local t=CCloader_filename[system] and 4 or 0
while t>0 do
local r=rnd(2,99)
if L[r]then L[r],t=false,t-1 end
@@ -43,7 +43,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5)))
else
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000))
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(3,5),2,true,10000))
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(2,5)))
else
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000))
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(3,5),2,true,10000))
end
n=n+1
end end

View File

@@ -33,7 +33,7 @@ return{
}
PLY.newPlayer(1,340,15)
local L={}for i=1,100 do L[i]=true end
local t=system~="Windows"and 0 or 4
local t=CCloader_filename[system] and 4 or 0
while t>0 do
local r=rnd(2,99)
if L[r]then L[r],t=false,t-1 end
@@ -43,7 +43,7 @@ return{
if L[n]then
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,7)))
else
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000))
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(6,8),3,true,20000))
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(4,7)-1,3,true,20000))
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(6,8),3,true,20000))
end
n=n+1
end end

View File

@@ -33,7 +33,7 @@ return{
}
PLY.newPlayer(1,340,15)
local L={}for i=1,100 do L[i]=true end
local t=system~="Windows"and 0 or 4
local t=CCloader_filename[system] and 4 or 0
while t>0 do
local r=rnd(2,99)
if L[r]then L[r],t=false,t-1 end
@@ -43,7 +43,7 @@ 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)-1,4,true,30000))
PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(9,10),4,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(8,10)))
else
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000))
PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(9,10),4,true,30000))
end
n=n+1
end end

View File

@@ -1,12 +1,10 @@
--[[
HighestBlock
HorizontalTransitions
VerticalTransitions
BlockedCells
Wells
FilledLines
4deepShape
BlockedWells;
BlockedWells
]]
local int,ceil,min,abs,rnd=math.floor,math.ceil,math.min,math.abs,math.random
local ins,rem=table.insert,table.remove
@@ -18,9 +16,32 @@ 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
local CCblockID={4,3,6,5,1,2,0}
if system=="Windows"then
require("CCloader")
local CCblockID={6,5,4,3,2,1,0}
CCloader_filename={
Windows={"CCloader.dll",{"x86_64","x86"}},
Android={"libCCloader.so",{"arm64-v8a","armeabi-v7a"}},
Linux={"libCCloader.so",{"x86_64"}},
}
local function loadCC()
if not CCloader_filename[system]then return end
local f
for i=1,#CCloader_filename[system][2]do
function f()
local CCloader_f,size=love.filesystem.read("data",table.concat({"lib",system,CCloader_filename[system][2][i],CCloader_filename[system][1]},"/"))
if not CCloader_f then return end
local success,message=love.filesystem.write(CCloader_filename[system][1],CCloader_f,size)
if not success then return end
local success,message=package.loadlib(table.concat({love.filesystem.getSaveDirectory(),CCloader_filename[system][1]},"/"),"luaopen_CCloader")
return success,message
end
f=f()
if f then break end
end
if not f then
CCloader_filename[system]=nil
return
end
f()
BOT={
getConf= cc.get_default_config ,--()options,weights
--setConf= cc.set_options ,--(options,hold,20g,bag7)
@@ -29,12 +50,12 @@ if system=="Windows"then
addNext= cc.add_next_piece_async ,--(bot,piece)
update= cc.reset_async ,--(bot,field,b2b,combo)
think= cc.request_next_move ,--(bot)
getMove= cc.poll_next_move ,--(bot)success,hold,move
ifDead= cc.is_dead_async ,--(bot)dead
getMove= cc.poll_next_move ,--(bot)success,dest,hold,move
destroy= cc.destroy_async ,--(bot)
setHold= cc.set_hold ,--(opt,bool)
set20G= cc.set_20g ,--(opt,bool)
setPCLoop= cc.set_pcloop ,--(opt,bool)
setBag= cc.set_bag7 ,--(opt,bool)
setNode= cc.set_max_nodes ,--(opt,bool)
free= cc.free ,--(opt/wei)
@@ -66,7 +87,8 @@ if system=="Windows"then
BOT.addNext(P.AI_bot,CCblockID[P.next[i].id])
end
CC_updateField(P)
P.hd={bk={{}},id=0,color=0,name=0}P.holded=false
P.hd=nil
P.holded=false
P.cur=rem(P.next,1)
P.sc,P.dir=scs[P.cur.id],0
P.r,P.c=#P.cur.bk,#P.cur.bk[1]
@@ -80,6 +102,7 @@ if system=="Windows"then
collectgarbage()
end
end
loadCC()
-------------------------------------------------9 Stack setup
local dirCount={1,1,3,3,3,0,1}
local spinOffset={
@@ -218,7 +241,7 @@ return{
end
if not bn then goto CTN end
for dir=0,dirCount[bn] do--Each dir
for dir=0,dirCount[bn]do--Each dir
local cb=blocks[bn][dir]
for cx=1,11-#cb[1]do--Each pos
local cy=#Tfield+1
@@ -282,9 +305,17 @@ return{
return 2
end,
function(P,ctrl)--Poll keys
if BOT.ifDead(P.AI_bot)then ins(ctrl,6)return 3 end
local success,hold,move=BOT.getMove(P.AI_bot)
if success then
local success,dest,hold,move=BOT.getMove(P.AI_bot)
if success==2 then
ins(ctrl,6)
return 3
elseif success==0 then
for i=1,#dest do
for j=1,#dest[i]do
dest[i][j]=dest[i][j]+1
end
end
P.AI_dest=dest
if hold then ctrl[1]=8 end--Hold
while move[1]do
local m=rem(move,1)

View File

@@ -1,6 +1,6 @@
local freeRow={}
local L={}--Storage
local _=0--Lenth
local _=0--Length
function freeRow.reset(num)
if num<_ then
for i=_,num+1,-1 do

View File

@@ -27,11 +27,21 @@ if setting.lang==1 or setting.lang==2 then
"e^(pi*i)=-1",
"DT炮=TSD+TST炮",
"Cultris II也很好玩!",
"Ctrl+W=关闭当前标签页",
"Ctrl+Tab=切换标签页",
"Ctrl+F=查找",
"Ctrl+D=复制一份",
"Ctrl+Alt+Z=查看所有qq消息",
"Ctrl+A=全选",
"Ctrl+鼠标滚轮=缩放",
"COOL!!",
"BT炮=beta炮",
"backspace=返回上一个文件目录",
"B2B2B2B存在吗?",
"B2B2B???",
"Am G F G",
"Alt+Tab=切换窗口",
"Alt+F4=关闭当前窗口",
"ALLSPIN!",
"注意到\"旋转\"到底对方块做了些什么吗?",
"有疑问? 先看设置有没有你想要的",
@@ -47,24 +57,22 @@ if setting.lang==1 or setting.lang==2 then
"使用love2d引擎制作",
"少女祈祷中",
"扫雷好玩!",
"哦,我的上帝",
"你可以长按R键重新开始游戏(也不是很长)",
"你可以从统计页面打开游戏存档目录",
"你好 世界!",
"魔方好玩!",
"喵!",
"免费吃鸡方块",
"秘密数字:626",
"每个虚拟按键都可以隐藏/显示",
"每个虚拟按键都可以隐藏/显示,尺寸也可调",
"每个块的出现方向可以自定义",
"没专业美术,程序员审美警告",
"专业美术的人,程序员审美警告",
"没学过编曲,音乐都是自己凭感觉写的,觉得不好听就设置里关了吧",
"联网还没做呢, 别急",
"键位是可以自定义的",
"健康小贴士:上厕所太用力容易脑出血(尤其是老年人!)",
"健康小贴士:不要熬夜,真的容易猝死",
"健康小贴士:玩游戏多眨眼,不然会干眼病",
"健康小贴士:不要熬夜,真的猝死",
"合群了就会消失, 但是消失不代表没有意义",
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
"更小的DAS和ARR拥有更高的操作上限(前提是你能控制得了)",
"俄罗斯方块环游记也不错!",
"调到特殊的日期也不会发生什么的",
"低帧率会降低游戏体验",
@@ -75,7 +83,6 @@ if setting.lang==1 or setting.lang==2 then
"草(日本语)",
"不要在上课时玩游戏!",
"不要盯着bug不放",
"不要按F10",
"不是动画,真的在加载!",
"别问游戏名怎么取的,问就是随便想的",
"本游戏难度上限很高, 做好心理准备",
@@ -109,6 +116,7 @@ elseif setting.lang==3 then
"Who is diao",
"What about 26 TSDs?",
"What about 20 PCs?",
"What about 23 PCs in 100 lines?",
"Warning: Programmer Art",
"Try to use two rotate button,three better",
"This in not a casual game",

View File

@@ -119,7 +119,10 @@ local TRS={
if y==P.imgY and((P:solid(x-1,y)or P:solid(x-1,y+1)))and(P:solid(x+2,y)or P:solid(x+2,y+1))then
local D=P.spinSeq%100*10+d
P.spinSeq=D
if D<100 then return end
if D<100 then
P:freshBlock(true,true)
return
end
for i=1,#OspinList do
local L=OspinList[i]
if D==L[1]then
@@ -144,8 +147,8 @@ local TRS={
end
else
P.spinSeq=0
P:freshBlock(true,true)
end
P:freshBlock(true,true)
end,--O
{
[01]={{ 0, 1},{ 1, 0},{-2, 0},{-2,-1},{ 1, 2}},
@@ -213,10 +216,10 @@ local TRS={
[31]={{-1, 0},{ 1, 1},{ 2, 0}},
},--T5
{
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-2},{-1,-3}},
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2},{ 1, 3}},
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 1,-3}},
[30]={{-1, 0},{-1,-1},{ 0,-2},{-1, 2},{-1, 3}},
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-2}},
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2}},
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2}},
[30]={{-1, 0},{-1,-1},{ 0,-2},{-1, 2}},
[12]={{ 1, 0},{ 1,-1},{ 1, 1}},
[21]={{-1,-1},{-1, 1},{-1,-1}},
[32]={{-1, 0},{-1,-1},{-1, 1}},
@@ -230,7 +233,7 @@ local TRS={
[01]={{ 0, 1},{-1, 0},{ 0,-2},{-1,-2}},
[10]={{ 0, 1},{ 1, 0},{ 0,-2},{ 1,-2}},
[03]={{ 0,-1},{ 0, 1},{ 0, 2}},
[30]={{ 0,-1},{ 0,-1},{ 0,-2}},
[30]={{ 0,-1},{ 0, 1},{ 0,-2}},
[12]={{ 0,-1},{ 0, 1}},
[21]={{ 0,-1},{ 0,-2}},
[32]={{ 1, 0},{-1, 0}},
@@ -285,14 +288,14 @@ local TRS={
},--J5
{},--L5
{
[01]={{-1, 0},{-1, 1},{ 1, 0},{-1, 2},{-1,-1},{ 0,-3},{ 0, 1}},
[10]={{-1, 0},{ 1,-1},{ 1, 0},{ 1,-2},{ 1, 1},{ 0, 3},{ 0, 1}},
[03]={{ 0,-1},{ 1,-1},{-1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 0,-3},{ 1,-3},{-1, 1}},
[30]={{ 0, 1},{-1, 1},{ 1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0, 3},{-1, 3},{ 1,-1}},
[01]={{-1, 0},{-1, 0},{-1, 1},{ 1, 0},{-1, 2},{-1,-1},{ 0,-3},{ 0, 1}},
[10]={{-1, 0},{ 1, 0},{ 1,-1},{ 1, 0},{ 1,-2},{ 1, 1},{ 0, 3},{ 0, 1}},
[03]={{ 0,-1},{ 1, 0},{ 1,-1},{-1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 0,-3},{ 1,-3},{-1, 1}},
[30]={{ 0, 1},{-1, 0},{-1, 1},{ 1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0, 3},{-1, 3},{ 1,-1}},
[12]={{ 1, 0},{ 1,-1},{ 0,-1},{ 1,-2},{ 0,-2},{ 1, 1},{-1, 0},{ 0, 2},{ 1, 2}},
[21]={{-1, 0},{-1, 1},{ 0, 1},{-1, 2},{ 0, 2},{-1,-1},{ 1, 0},{ 0,-2},{-1,-2}},
[32]={{-1, 0},{ 0,-1},{-1, 1},{-1,-1},{ 1, 0},{ 0, 2},{-1, 2},{ 0,-2}},
[23]={{ 1, 0},{ 0, 1},{ 1,-1},{ 1, 1},{-1, 0},{ 0,-2},{ 1,-2},{ 0, 2}},
[32]={{ 0,-1},{-1, 0},{-1, 1},{-1,-1},{ 1, 0},{ 0, 2},{-1, 2},{ 0,-2}},
[23]={{ 0, 1},{ 1, 0},{ 1,-1},{ 1, 1},{-1, 0},{ 0,-2},{ 1,-2},{ 0, 2}},
[02]={{ 0,-1},{ 1,-1},{-1, 0},{ 2,-1},{ 0, 1}},
[20]={{ 0, 1},{-1, 1},{ 1, 0},{-2, 1},{ 0,-1}},
[13]={{-1, 0},{-1,-1},{ 0, 1},{-1,-2}},

View File

@@ -87,7 +87,7 @@ local finesseList={
finesseList[1][3],finesseList[1][4],finesseList[7][3],finesseList[7][4]=finesseList[1][1],finesseList[1][2],finesseList[7][1],finesseList[7][2]--"2-phase" SZI
finesseList[2]=finesseList[1]--S=Z
finesseList[4],finesseList[5]=finesseList[3],finesseList[3]--J=L=T
local CCblockID={4,3,6,5,1,2,0}
local CCblockID={6,5,4,3,2,1,0}
local freshPrepare={
none=NULL,
bag=function(P)
@@ -1427,6 +1427,8 @@ function player.freshBlock(P,keepGhost,control,system)
end
end
function player.lock(P)
local dest=P.AI_dest
local has_dest=dest~=nil
for i=1,P.r do
local y=P.curY+i-1
if not P.field[y]then P.field[y],P.visTime[y]=freeRow.get(0),freeRow.get(0)end
@@ -1434,9 +1436,25 @@ function player.lock(P)
if P.cur.bk[i][j]then
P.field[y][P.curX+j-1]=P.cur.color
P.visTime[y][P.curX+j-1]=P.showTime
local x=P.curX+j-1
if dest then
local original_length=#dest
for k=1,original_length do
if x==dest[k][1]and y==dest[k][2]then
rem(dest, k)
break
end
end
if #dest~=original_length-1 then
dest=nil
end
end
end
end
end
if has_dest and not dest then
CC_updateField(P)
end
end
function player.spin(P,d,ifpre)
local iki=P.RS[P.cur.id]
@@ -2566,14 +2584,16 @@ function player.act.zangiRight(P)
P.act.hardDrop(P)
end
--Give operations a num name
A=player.act
T={
A.moveLeft ,A.moveRight, A.rotRight, A.rotLeft,
A.rot180 ,A.hardDrop, A.softDrop, A.hold,
A.func ,A.restart, A.insLeft, A.insRight,
A.insDown ,A.down1, A.down4, A.down10,
A.dropLeft ,A.dropRight, A.zangiLeft,A.zangiRight
}for i=1,20 do A[i]=T[i]end;A,T=nil
do
local A=player.act
local T={
A.moveLeft ,A.moveRight, A.rotRight, A.rotLeft,
A.rot180 ,A.hardDrop, A.softDrop, A.hold,
A.func ,A.restart, A.insLeft, A.insRight,
A.insDown ,A.down1, A.down4, A.down10,
A.dropLeft ,A.dropRight, A.zangiLeft,A.zangiRight
}for i=1,20 do A[i]=T[i]end
end
--------------------------</Control>--------------------------
--------------------------<Generator>--------------------------

View File

@@ -24,25 +24,22 @@ local S=[=[
Future outlook:
New modes:
PUYO
dig practice
dig zen
infinite PC challenge
reverb (often repeat a piece many times)
game tutorial
finesse tutorial/exam(3next, 1pt/mino, drop to score)
finesse tutorial/exam (3next, 1pt/mino, drop to score)
easy finesse (only revert current)
game Abbr. test
combo
backfire
round-based dig
bigbang
rhythm
KPP-locked
combo
square
field shifting(left/right)
task survival
dig practice
dig zen
symmetry
hidden: sound only
reverb (often repeat a piece many times)
game Abbr. test
parkour
Other:
mod system with:
@@ -57,10 +54,9 @@ Future outlook:
tank battle
new AI: task-Z
'Encrypt'(compile to byte code)
better drop FX
60+ fps supporting
in-game document
game recording
save recordings
full-key control
drag control for mobile device
new widgets (joystick etc.)
@@ -68,6 +64,15 @@ Future outlook:
more graphic FXs & 3D features & animations
network game
0.10.6: CC更新 Cold Clear update
新内容:
全平台支持新版CC(也许)
改动:
修改UVRY的踢墙表
修复:
O卡住的时候旋转不刷新锁定延迟
CC在发现重力过大后hold即报错
0.10.5: 特效更新 FX update
新内容:
瞬移特效独立为瞬降和移动(旋转)特效,增加移动特效滑条,各特效范围均为0~5
@@ -80,18 +85,19 @@ Future outlook:
增加无尽挖掘连挖提示,挖完后下一波立即升起
new English translation by @MattMayuga#8789
修改100/400/1000L的评级要求
支持加载部分老版本存档
软件锁界面出现时机调整,按钮位置调整
调整混战模式倍率影响边框颜色的范围
软件锁也可显示tip
代码:
重命名大多数背景
重构createXxxFX函数
重构create___FX函数
修复:
几个设置大标题样式统一
加载部分老版本存档报错
几个设置大标题样式不统一
有消行延迟+出块等待时连续硬降出现神秘现象
垃圾行上涨不刷新ghost
粘贴序列bug
可以用键盘复制粘贴序列
粘贴序列后光标位置错误
不能用键盘复制粘贴序列
每次启动游戏ai是一样的块序
0.10.4: 漏洞修复 Bug Fix