Compare commits

...

19 Commits

Author SHA1 Message Date
MrZ_26
f2cf2ce29b 纠正部分rank文件转换错误,转换老版本lastPlay 2020-08-09 22:02:14 +08:00
MrZ_26
397cdd3e75 文字小改 2020-08-09 18:32:45 +08:00
MrZ_26
5b7dd0cfdd 修改T,F,U,T5的踢墙表 2020-08-09 18:32:38 +08:00
MrZ_26
15b413040d 修复游戏结束后马上暂停并解除还会自动暂停 2020-08-09 14:40:01 +08:00
MrZ_26
e746cf7bb1 死亡预警在两个方向的宽度调整 2020-08-09 14:32:30 +08:00
MrZ_26
e4258dad42 方块生成音设置滑条改为连续 2020-08-09 02:33:34 +08:00
MrZ_26
156a1f92be 自定义序列的问号位置摆正,添加序列/场地重置音效 2020-08-09 02:25:02 +08:00
MrZ_26
77af980255 打错字 2020-08-09 02:21:25 +08:00
MrZ_26
d4cd90cfea 模式文件中改用玩家的随机而非系统随机,便于正确回放 2020-08-09 02:02:43 +08:00
MrZ_26
10c3157ad1 库名改为全大写 2020-08-09 01:31:54 +08:00
MrZ_26
0c3a91fc7c 修复刷新锁延时不刷新落延 2020-08-09 01:31:02 +08:00
MrZ_26
a3ecfeb59a 修复画图切换到custom可返回bug,二者之间切换样式更换 2020-08-09 01:30:53 +08:00
MrZ_26
243fa72f98 文字微调,退出游戏场景时保存数据文件 2020-08-09 01:30:45 +08:00
MrZ_26
67835a722b 0.10.2:锁延修复 2020-08-09 00:31:14 +08:00
MrZ_26
e07287223c 触屏特效修复 2020-08-09 00:08:23 +08:00
MrZ_26
94214abc01 锁延机制再修改(应该不能偷鸡了) 2020-08-09 00:03:34 +08:00
MrZ_26
38d8d73d82 进出debug模式问题 2020-08-08 23:57:28 +08:00
MrZ_26
fd6dfda9c4 更新字体 2020-08-08 23:57:21 +08:00
MrZ_26
7f3edeaacf 将失败换为游戏结束 2020-08-08 23:55:56 +08:00
33 changed files with 197 additions and 183 deletions

View File

@@ -79,8 +79,8 @@ local files={
unlock= fs.newFile("unlock.dat"),
}
local File={}
function File.loadRecord(N)
local FILE={}
function FILE.loadRecord(N)
local F=fs.newFile(N..".dat")
if F:open("r")then
local s=loadstring(F:read())
@@ -93,7 +93,7 @@ function File.loadRecord(N)
end
end
end
function File.saveRecord(N,L)
function FILE.saveRecord(N,L)
local F=fs.newFile(N..".dat")
F:open("w")
local _,mes=F:write(dumpTable(L))
@@ -102,11 +102,11 @@ function File.saveRecord(N,L)
TEXT.show(text.recSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
end
end
function File.delRecord(N)
function FILE.delRecord(N)
fs.remove(N..".dat")
end
function File.loadUnlock()
function FILE.loadUnlock()
local F=files.unlock
if F:open("r")then
local s=F:read()
@@ -119,7 +119,7 @@ function File.loadUnlock()
end
end
end
function File.saveUnlock()
function FILE.saveUnlock()
local F=files.unlock
F:open("w")
local _,mes=F:write(dumpTable(modeRanks))
@@ -129,7 +129,7 @@ function File.saveUnlock()
end
end
function File.loadData()
function FILE.loadData()
local F=files.data
if F:open("r")then
local s=F:read()
@@ -145,7 +145,7 @@ function File.loadData()
end
end
end
function File.saveData()
function FILE.saveData()
local F=files.data
F:open("w")
local _,mes=F:write(dumpTable(stat))
@@ -155,7 +155,7 @@ function File.saveData()
end
end
function File.loadSetting()
function FILE.loadSetting()
local F=files.setting
if F:open("r")then
local s=F:read()
@@ -170,7 +170,7 @@ function File.loadSetting()
end
end
end
function File.saveSetting()
function FILE.saveSetting()
local F=files.setting
F:open("w")
local _,mes=F:write(dumpTable(setting))
@@ -180,7 +180,7 @@ function File.saveSetting()
end
end
function File.loadKeyMap()
function FILE.loadKeyMap()
local F=files.keyMap
if F:open("r")then
local s=loadstring(F:read())
@@ -191,7 +191,7 @@ function File.loadKeyMap()
end
end
end
function File.saveKeyMap()
function FILE.saveKeyMap()
local F=files.keyMap
F:open("w")
local _,mes=F:write(dumpTable(keyMap))
@@ -201,7 +201,7 @@ function File.saveKeyMap()
end
end
function File.loadVK()
function FILE.loadVK()
local F=files.VK
if F:open("r")then
local s=loadstring(F:read())
@@ -212,7 +212,7 @@ function File.loadVK()
end
end
end
function File.saveVK()
function FILE.saveVK()
local F=files.VK
F:open("w")
local _,mes=F:write(dumpTable(VK_org))
@@ -221,4 +221,4 @@ function File.saveVK()
else TEXT.show(text.VKSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
end
end
return File
return FILE

View File

@@ -328,7 +328,7 @@ function keyDown.custom(key)
elseif key=="q"then
SCN.goto("sequence")
elseif key=="e"then
SCN.swapTo("draw")
SCN.swapTo("draw","swipe")
elseif #key==1 then
local T=tonumber(key)
if T and T>=1 and T<=5 then
@@ -384,6 +384,7 @@ function keyDown.sequence(key)
preBag={}
sceneTemp.cur=0
sceneTemp.sure=0
SFX.play("finesseError",.7)
else
sceneTemp.sure=50
end
@@ -460,6 +461,7 @@ function keyDown.draw(key)
if sceneTemp.sure>20 then
for y=1,20 do for x=1,10 do preField[y][x]=0 end end
sceneTemp.sure=0
SFX.play("finesseError",.7)
else
sceneTemp.sure=50
end
@@ -468,7 +470,7 @@ function keyDown.draw(key)
preField[sy][sx]=pen
end
elseif key=="e"then
SCN.swapTo("custom")
SCN.swapTo("custom","swipe")
elseif key=="escape"then
SCN.back()
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
@@ -871,7 +873,7 @@ function love.touchreleased(id,x,y)
if touchClick[SCN.cur]then
touchClick[SCN.cur](x,y,k)
end
sysFX.newRipple(.3,mx,my,30)
sysFX.newRipple(.3,x,y,30)
end
end
function love.keypressed(i)
@@ -919,6 +921,7 @@ function love.keypressed(i)
else
goto NORMAL
end
return
end
::NORMAL::
if i~="f8"then

View File

@@ -23,8 +23,8 @@ local langList={
speedup="速度加快",
win="胜利",
finish="结束",
lose="失败",
finish="完成",
gameover="游戏结束",
pause="暂停",
pauseCount="暂停统计",
@@ -167,12 +167,12 @@ local langList={
"美术:MrZ, (Gnyar)",
"音乐:MrZ, (T0722)",
"音效/语音: MrZ, Miya",
"演出: 模电, 吉备宏纯",
"官网: 渣渣120",
"演出: 模电, HBM",
"测试:思竣 官网: 渣渣120",
"",
"特别感谢:",
"Flyz, Farter, 蕴空之灵,",
"茶管, 思竣, [所有内测人员]",
"茶管, [所有内测人员]",
},
used=[[
使用工具:
@@ -486,8 +486,8 @@ local langList={
speedup="速度加快",
win="胜利",
finish="结束",
lose="失败",
finish="完成",
gameover="游戏结束",
pause="暂停",
pauseCount="暂停统计",
@@ -627,12 +627,12 @@ local langList={
"美术:MrZ, (T0722, Gnyar)",
"音乐:MrZ, (T0722)",
"音效/语音: MrZ, Miya",
"演出: 模电, 吉备宏纯",
"官网: 渣渣120",
"演出: 模电, HBM",
"测试:思竣 官网: 渣渣120",
"",
"特别感谢:",
"Flyz, Farter, 蕴空之灵,",
"茶管, 思竣, [所有内测人员]",
"茶管, [所有内测人员]",
},
used=[[
使用工具:
@@ -945,9 +945,9 @@ local langList={
maxspeed="Max speed!",
speedup="Speed up!",
win="WIN",
win="Win",
finish="Finish",
lose="LOSE",
gameover="Game Over",
pause="Pause",
pauseCount="Pauses:",
@@ -1084,12 +1084,12 @@ local langList={
"Art: MrZ, (Gnyar)",
"Music: MrZ, (T0722)",
"Voice/ Sound: MrZ, Miya",
"Performance: 模电 吉备宏纯",
"Web: 渣渣120",
"Performance: 模电 HBM",
"Test: 思竣 Web: 渣渣120",
"",
"Special Thanks:",
"Flyz, Farter, 蕴空之灵,",
"Teatube, 思竣, [All test staff]",
"Teatube, [All test staff]",
},
used="Tool used:\n\tBeepbox\n\tGFIE\n\tGoldwave\nLib used:\n\tCold_Clear[MinusKelvin]\n\tsimple-love-lights[dylhunn]",
support="Support author",
@@ -1396,7 +1396,7 @@ local langList={
win=": )",
finish="&",
lose="x",
gameover="x",
pause="=",
pauseCount="=:",
@@ -1529,12 +1529,12 @@ local langList={
"Art: MrZ, (Gnyar)",
"Music: MrZ, (T0722)",
"Voice/ Sound: MrZ, Miya",
"Performance: 模电 吉备宏纯",
"Web: 渣渣120",
"Performance: 模电 HBM",
"Test: 思竣 Web: 渣渣120",
"",
"Special Thanks:",
"Flyz, Farter, 蕴空之灵,",
"Teatube, 思竣, [All test staff]",
"Teatube, [All test staff]",
},
used="Tool used:\n\tBeepbox\n\tGFIE\n\tGoldwave\nLib used:\n\tCold_Clear[MinusKelvin]\n\tsimple-love-lights[dylhunn]",
support="Support author",
@@ -1841,7 +1841,7 @@ local langList={
win="成了",
finish="可以的",
lose="挂了",
gameover="挂了",
pause="歇会",
pauseCount="歇多久了",
@@ -1984,12 +1984,12 @@ local langList={
"美术:MrZ, (Gnyar)",
"音乐:MrZ, (T0722)",
"音效/语音: MrZ, Miya",
"演出: 模电, 吉备宏纯",
"官网: 渣渣120",
"演出: 模电, HBM",
"测试:思竣 官网: 渣渣120",
"",
"特别感谢:",
"Flyz, Farter, 蕴空之灵,",
"茶管, 思竣, [所有内测人员]",
"茶管, [所有内测人员]",
},
used=[[
使用工具:
@@ -2112,9 +2112,9 @@ local langList={
graphic="改画面→",
sfx="音效",
stereo="立体声",
spawn="方块生成",
bgm="",
vib="振动",
spawn="出块",
bgm="",
vib="嗡嗡",
voc="语音",
back="返回",
},
@@ -2151,8 +2151,8 @@ local langList={
size="大小",
},
setting_touchSwitch={
b1= "左移:", b2="右移:", b3="顺时针旋转:", b4="逆时针旋转:",
b5= "180°转:",b6="硬降:", b7="软降:", b8="暂存:",
b1= "左移:", b2="右移:", b3="转:", b4="转:",
b5= "180°转:", b6="硬降:", b7="软降:", b8="暂存:",
b9= "功能键:", b10="重新开始:",b11="左瞬移:", b12="右瞬移:",
b13="软降到底:",b14="软降一格:",b15="软降四格:", b16="软降十格:",
b17="落在最左:",b18="落在最右:",b19="列在最左:", b20="列在最右:",
@@ -2329,7 +2329,7 @@ local drawableTextLoad={
"anykey",
"replaying",
"next","hold",
"win","finish","lose","pause",
"win","finish","gameover","pause",
"custom","sequence",
"setting_game",
"setting_video",
@@ -2356,6 +2356,7 @@ function LANG.set(l)
end
end
for _,s in next,drawableTextLoad do
print(s)
drawableText[s]:set(text[s])
end
collectgarbage()

View File

@@ -378,7 +378,7 @@ function Pnt.sequence()
--Confirm reset
if s.sure>0 then
gc.setColor(1,1,1,s.sure*.02)
gc.draw(drawableText.question,1035,570)
gc.draw(drawableText.question,980,470)
end
end

View File

@@ -297,6 +297,7 @@ function sceneBack.pause()
if not game.replaying then
mergeStat(stat,players[1].stat)
end
FILE.saveData()
TASK.clear("play")
end
function sceneBack.setting_game()

View File

@@ -3,6 +3,6 @@ extern float level;
vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){
float dx=abs(scr_pos.x/w-0.5);
float dy=abs(scr_pos.y/h-0.5);
float a=(max(dx,dy)*2.-.626)*level;
float a=(max(dx*2.6,dy*1.8)-.626)*level;
return vec4(1.,0.,0.,a);
}

View File

@@ -203,7 +203,7 @@ local Widgets={
newSwitch({name="demo", x=755, y=640, font=30,disp=function()return sceneTemp.demo end,code=function()sceneTemp.demo=not sceneTemp.demo end}),
newButton({name="copy", x=920, y=640, w=120, h=120, color="lRed", font=35,code=pressKey("cC")}),
newButton({name="paste", x=1060, y=640, w=120, h=120, color="lBlue", font=35,code=pressKey("cV")}),
newButton({name="custom", x=110, y=80, w=140, h=80, color="white", font=35,code=function()SCN.goto("custom")end}),
newButton({name="custom", x=110, y=80, w=140, h=80, color="white", font=35,code=pressKey("e")}),
newButton({name="back", x=1200, y=640, w=120, h=120, color="white", font=35,code=BACK}),
},
play={
@@ -277,8 +277,8 @@ local Widgets={
newButton({name="game", x=200, y=80,w=240,h=80,color="lCyan",font=35,code=function()SCN.swapTo("setting_game","swipe")end}),
newButton({name="graphic", x=1080, y=80,w=240,h=80,color="lCyan",font=35,code=function()SCN.swapTo("setting_video","swipe")end}),
newSlider({name="sfx", x=180, y=200,w=400,unit=100,noUnit=true,font=35,change=function()SFX.play("blip_1")end, disp=SETval("sfx"), code=SETsto("sfx")}),
newSlider({name="stereo", x=180, y=500,w=400,unit=10,font=35,change=function()SFX.play("move",1,-1)SFX.play("lock",1,1)end, disp=SETval("stereo"), code=SETsto("stereo"),hide=function()return setting.sfx==0 end}),
newSlider({name="spawn", x=180, y=300,w=400,unit=10,font=30,change=function()SFX.fplay("spawn_1",setting.spawn)end, disp=SETval("spawn"), code=SETsto("spawn")}),
newSlider({name="stereo", x=180, y=500,w=400,unit=10, font=35,change=function()SFX.play("move",1,-1)SFX.play("lock",1,1)end, disp=SETval("stereo"), code=SETsto("stereo"),hide=function()return setting.sfx==0 end}),
newSlider({name="spawn", x=180, y=300,w=400,unit=100,noUnit=true,font=30,change=function()SFX.fplay("spawn_1",setting.spawn)end, disp=SETval("spawn"), code=SETsto("spawn")}),
newSlider({name="bgm", x=180, y=400,w=400,unit=100,noUnit=true,font=35,change=function()BGM.freshVolume()end, disp=SETval("bgm"), code=SETsto("bgm")}),
newSlider({name="vib", x=750, y=200,w=400,unit=5, font=28,change=function()VIB(2)end, disp=SETval("vib"), code=SETsto("vib")}),
newSlider({name="voc", x=750, y=300,w=400,unit=10,font=32,change=function()VOC.play("nya")end, disp=SETval("voc"), code=SETsto("voc")}),

View File

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

BIN
font.ttf

Binary file not shown.

View File

@@ -106,14 +106,18 @@ if fs.getInfo("tech_ultimate+.dat")then fs.remove("tech_ultimate+.dat")end
--Update modeRanks
R=modeRanks
if R[1]then
local L=R
for i=1,#L do
L[Modes[i].name],L[i]=L[i]
for k,v in next,R do
if type(k)=="number"then
R[Modes[k].name],R[k]=R[k]
break
end
elseif R.master_adavnce then
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

View File

@@ -1,4 +1,4 @@
local int,rnd=math.floor,math.random
local int=math.floor
return{
color=color.magenta,
env={
@@ -14,12 +14,12 @@ return{
local t
if D.event<20 then
t=1500-30*D.event--1500~900
B[p]= {pos=rnd(4,7),amount=12,countdown=t,cd0=t,time=0,sent=false,lv=3}
B[p+1]= {pos=rnd(3,8),amount=10,countdown=t,cd0=t,time=0,sent=false,lv=4}
B[p]= {pos=P:RND(4,7),amount=12,countdown=t,cd0=t,time=0,sent=false,lv=3}
B[p+1]= {pos=P:RND(3,8),amount=10,countdown=t,cd0=t,time=0,sent=false,lv=4}
else
t=900-10*(D.event-20)--900~600
B[p]= {pos=rnd(10),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=4}
B[p+1]= {pos=rnd(4,7),amount=8,countdown=t,cd0=t,time=0,sent=false,lv=5}
B[p]= {pos=P:RND(10),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=4}
B[p+1]= {pos=P:RND(4,7),amount=8,countdown=t,cd0=t,time=0,sent=false,lv=5}
end
B.sum=B.sum+22
P.stat.recv=P.stat.recv+22

View File

@@ -1,4 +1,4 @@
local int,rnd,min=math.floor,math.random,math.min
local int,min=math.floor,math.min
return{
color=color.lYellow,
env={
@@ -13,18 +13,18 @@ return{
local s,t
if D.event<10 then
t=800-10*D.event--800~700
B[p]= {pos=rnd(5,6),amount=9,countdown=t,cd0=t,time=0,sent=false,lv=3}
B[p+1]= {pos=rnd(4,7),amount=11,countdown=t,cd0=t+62,time=0,sent=false,lv=4}
B[p]= {pos=P:RND(5,6),amount=9,countdown=t,cd0=t,time=0,sent=false,lv=3}
B[p+1]= {pos=P:RND(4,7),amount=11,countdown=t,cd0=t+62,time=0,sent=false,lv=4}
s=20
elseif D.event<20 then
t=800-10*D.event--700~600
B[p]= {pos=rnd(3,8),amount=11,countdown=t,cd0=t,time=0,sent=false,lv=4}
B[p+1]= {pos=rnd(4,7),amount=13,countdown=t,cd0=t+62,time=0,sent=false,lv=5}
B[p]= {pos=P:RND(3,8),amount=11,countdown=t,cd0=t,time=0,sent=false,lv=4}
B[p+1]= {pos=P:RND(4,7),amount=13,countdown=t,cd0=t+62,time=0,sent=false,lv=5}
s=24
else
t=600-15*(min(D.event-20,10))--600~450
B[p]= {pos=rnd(2)*9-8,amount=14,countdown=t,cd0=t,time=0,sent=false,lv=5}
B[p+1]= {pos=rnd(3,8),amount=14,countdown=t+62,cd0=t,time=0,sent=false,lv=5}
B[p]= {pos=P:RND(2)*9-8,amount=14,countdown=t,cd0=t,time=0,sent=false,lv=5}
B[p+1]= {pos=P:RND(3,8),amount=14,countdown=t+62,cd0=t,time=0,sent=false,lv=5}
s=28
end
B.sum=B.sum+s

View File

@@ -1,4 +1,4 @@
local rnd,min=math.random,math.min
local min=math.random,math.min
local function check_c4w(P)
for i=1,#P.clearedRow do
P.field[#P.field+1]=freeRow.get(13)
@@ -35,7 +35,7 @@ return{
P.visTime[i]=freeRow.get(20)
for x=4,7 do F[i][x]=0 end
end
local r=rnd(6)
local r=P:RND(6)
if r==1 then F[1][5],F[1][4],F[2][4]=13,13,13
elseif r==2 then F[1][6],F[1][7],F[2][7]=13,13,13
elseif r==3 then F[1][4],F[2][4],F[2][5]=13,13,13

View File

@@ -1,4 +1,4 @@
local rnd,min=math.random,math.min
local min=math.min
local function check_c4w(P)
for i=1,#P.clearedRow do
P.field[#P.field+1]=freeRow.get(13)
@@ -33,7 +33,7 @@ return{
P.visTime[i]=freeRow.get(20)
for x=4,7 do F[i][x]=0 end
end
local r=rnd(6)
local r=P:RND(6)
if r==1 then F[1][5],F[1][4],F[2][4]=13,13,13
elseif r==2 then F[1][6],F[1][7],F[2][7]=13,13,13
elseif r==3 then F[1][4],F[2][4],F[2][5]=13,13,13

View File

@@ -1,4 +1,4 @@
local int,rnd=math.floor,math.random
local int=math.floor
return{
color=color.red,
env={
@@ -14,7 +14,7 @@ return{
if P.modeData.counter>=t then
P.modeData.counter=0
for _=1,4 do
P.atkBuffer[#P.atkBuffer+1]={pos=rnd(10),amount=1,countdown=5*t,cd0=5*t,time=0,sent=false,lv=2}
P.atkBuffer[#P.atkBuffer+1]={pos=P:RND(10),amount=1,countdown=5*t,cd0=5*t,time=0,sent=false,lv=2}
end
P.atkBuffer.sum=P.atkBuffer.sum+4
P.stat.recv=P.stat.recv+4

View File

@@ -1,4 +1,4 @@
local int,rnd=math.floor,math.random
local int=math.floor
return{
color=color.green,
env={
@@ -14,7 +14,7 @@ return{
if P.modeData.counter>=t then
P.modeData.counter=0
for _=1,3 do
P.atkBuffer[#P.atkBuffer+1]={pos=rnd(2,9),amount=1,countdown=2*t,cd0=2*t,time=0,sent=false,lv=1}
P.atkBuffer[#P.atkBuffer+1]={pos=P:RND(2,9),amount=1,countdown=2*t,cd0=2*t,time=0,sent=false,lv=1}
end
P.atkBuffer.sum=P.atkBuffer.sum+3
P.stat.recv=P.stat.recv+3

View File

@@ -1,4 +1,4 @@
local max,rnd=math.max,math.random
local max=math.max
return{
color=color.magenta,
env={
@@ -10,7 +10,7 @@ return{
local D=P.modeData
D.counter=D.counter+1
if D.counter>=max(90,180-D.event)then
P:garbageRise(10,1,rnd(10))
P:garbageRise(10,1,P:RND(10))
P.stat.recv=P.stat.recv+1
D.counter=0
D.event=D.event+1

View File

@@ -1,4 +1,4 @@
local max,rnd=math.max,math.random
local max=math.max
return{
color=color.lYellow,
env={
@@ -9,7 +9,7 @@ return{
local D=P.modeData
D.counter=D.counter+1
if D.counter>=max(30,80-.3*D.event)then
P:garbageRise(13+D.event%5,1,rnd(10))
P:garbageRise(13+D.event%5,1,P:RND(10))
P.stat.recv=P.stat.recv+1
D.counter=0
D.event=D.event+1

View File

@@ -1,4 +1,4 @@
local rnd,min,rem=math.random,math.min,table.remove
local min,rem=math.min,table.remove
return{
color=color.red,
env={
@@ -88,7 +88,7 @@ return{
::END::
freeRow.discard(height)
P:getNext(res[rnd(#res)])
P:getNext(res[P:RND(#res)])
end
end,
target=100,dropPiece=PLY.reach_winCheck,

View File

@@ -1,8 +1,8 @@
local format,rnd=string.format,math.random
local format=string.format
local function check_rise(P)
if #P.clearedRow==0 then
for i=1,8-P.garbageBeneath do
P:garbageRise(13,1,rnd(10))
P:garbageRise(13,1,P:RND(10))
end
end
end
@@ -19,7 +19,7 @@ return{
load=function()
PLY.newPlayer(1,340,15)
for _=1,8 do
players[1]:garbageRise(13,1,rnd(10))
players[1]:garbageRise(13,1,P:RND(10))
end
end,
mesDisp=function(P,dx,dy)

View File

@@ -1,4 +1,4 @@
local int,rnd=math.floor,math.random
local int=math.floor
local ins=table.insert
local pc_drop={50,45,40,35,30,26,22,18,15,12}
local pc_lock={55,50,45,40,36,32,30}
@@ -11,7 +11,7 @@ local function task_PC(P)
P.modeData.counter=P.modeData.counter+1
if P.modeData.counter==26 then
local base=PCbase[P.modeData.type]
P:pushLine(base[rnd(#base)],P.modeData.symmetry)
P:pushLine(base[P:RND(#base)],P.modeData.symmetry)
return true
end
end
@@ -24,9 +24,9 @@ local function newPC(P)
if c<5 then P:lose()end
end
if #P.field==0 then
local type=PCtype[P.stat.pc]or rnd(2,3)
local L=PClist[type][rnd(#PClist[1])]
local symmetry=rnd()>.5
local type=PCtype[P.stat.pc]or P:RND(2,3)
local L=PClist[type][P:RND(#PClist[1])]
local symmetry=P:RND()>.5
P.modeData.type=type
P.modeData.symmetry=symmetry
P:pushNext(L,symmetry)

View File

@@ -1,4 +1,3 @@
local rnd=math.random
local PCbase=require("parts/PCbase")
local PClist=require("parts/PClist")
local PCtype={
@@ -17,7 +16,7 @@ local function task_PC(P)
P.modeData.counter=P.modeData.counter+1
if P.modeData.counter==26 then
local base=PCbase[P.modeData.type]
P:pushLine(base[rnd(#base)],P.modeData.symmetry)
P:pushLine(base[P:RND(#base)],P.modeData.symmetry)
return true
end
end
@@ -30,9 +29,9 @@ local function newPC(P)
if c<5 then P:lose()end
end
if #P.field==0 then
local type=PCtype[P.stat.pc]or rnd(2,3)
local L=PClist[type][rnd(#PClist[1])]
local symmetry=rnd()>.5
local type=PCtype[P.stat.pc]or P:RND(2,3)
local L=PClist[type][P:RND(#PClist[1])]
local symmetry=P:RND()>.5
P.modeData.type=type
P.modeData.symmetry=symmetry
P:pushNext(L,symmetry)

View File

@@ -1,4 +1,4 @@
local max,rnd=math.max,math.random
local max=math.max
return{
color=color.cyan,
env={
@@ -8,7 +8,7 @@ return{
if not(P.control and SCN.cur=="play")then return end
P.modeData.counter=P.modeData.counter+1
if P.modeData.counter>=max(60,150-2*P.modeData.event)and P.atkBuffer.sum<4 then
P.atkBuffer[#P.atkBuffer+1]={pos=rnd(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1}
P.atkBuffer[#P.atkBuffer+1]={pos=P:RND(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1}
P.atkBuffer.sum=P.atkBuffer.sum+1
P.stat.recv=P.stat.recv+1
if P.modeData.event==45 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end

View File

@@ -1,4 +1,4 @@
local max,rnd=math.max,math.random
local max=math.max
return{
color=color.magenta,
env={
@@ -11,9 +11,9 @@ return{
if P.modeData.counter>=max(60,180-2*P.modeData.event)and B.sum<15 then
B[#B+1]=
P.modeData.event%3<2 and
{pos=rnd(10),amount=1,countdown=0,cd0=0,time=0,sent=false,lv=1}
{pos=P:RND(10),amount=1,countdown=0,cd0=0,time=0,sent=false,lv=1}
or
{pos=rnd(10),amount=3,countdown=60,cd0=60,time=0,sent=false,lv=2}
{pos=P:RND(10),amount=3,countdown=60,cd0=60,time=0,sent=false,lv=2}
local R=(P.modeData.event%3<2 and 1 or 3)
B.sum=B.sum+R
P.stat.recv=P.stat.recv+R

View File

@@ -1,4 +1,4 @@
local max,rnd=math.max,math.random
local max=math.max
return{
color=color.red,
env={
@@ -9,7 +9,7 @@ return{
P.modeData.counter=P.modeData.counter+1
if P.modeData.counter>=max(60,150-P.modeData.event)and P.atkBuffer.sum<20 then
local t=max(60,90-P.modeData.event)
P.atkBuffer[#P.atkBuffer+1]={pos=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3}
P.atkBuffer[#P.atkBuffer+1]={pos=P:RND(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3}
P.atkBuffer.sum=P.atkBuffer.sum+4
P.stat.recv=P.stat.recv+4
if P.modeData.event==60 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end

View File

@@ -1,4 +1,4 @@
local max,rnd=math.max,math.random
local max=math.max
return{
color=color.green,
env={
@@ -10,10 +10,10 @@ return{
if P.modeData.counter>=max(90,180-2*P.modeData.event)and P.atkBuffer.sum<8 then
local d=P.modeData.event+1
P.atkBuffer[#P.atkBuffer+1]=
d%4==0 and{pos=rnd(10),amount=1,countdown=60,cd0=60,time=0,sent=false,lv=1}or
d%4==1 and{pos=rnd(10),amount=2,countdown=70,cd0=70,time=0,sent=false,lv=1}or
d%4==2 and{pos=rnd(10),amount=3,countdown=80,cd0=80,time=0,sent=false,lv=2}or
d%4==3 and{pos=rnd(10),amount=4,countdown=90,cd0=90,time=0,sent=false,lv=3}
d%4==0 and{pos=P:RND(10),amount=1,countdown=60,cd0=60,time=0,sent=false,lv=1}or
d%4==1 and{pos=P:RND(10),amount=2,countdown=70,cd0=70,time=0,sent=false,lv=1}or
d%4==2 and{pos=P:RND(10),amount=3,countdown=80,cd0=80,time=0,sent=false,lv=2}or
d%4==3 and{pos=P:RND(10),amount=4,countdown=90,cd0=90,time=0,sent=false,lv=3}
P.atkBuffer.sum=P.atkBuffer.sum+d%4+1
P.stat.recv=P.stat.recv+d%4+1
if P.modeData.event==45 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end

View File

@@ -1,4 +1,4 @@
local max,rnd=math.max,math.random
local max=math.max
return{
color=color.lYellow,
env={
@@ -12,10 +12,10 @@ return{
if P.modeData.counter>=max(300,600-10*P.modeData.event)and P.atkBuffer.sum<20 then
local t=max(300,480-12*P.modeData.event)
local p=#P.atkBuffer+1
P.atkBuffer[p] ={pos=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=2}
P.atkBuffer[p+1]={pos=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3}
P.atkBuffer[p+2]={pos=rnd(10),amount=6,countdown=1.2*t,cd0=1.2*t,time=0,sent=false,lv=4}
P.atkBuffer[p+3]={pos=rnd(10),amount=6,countdown=1.5*t,cd0=1.5*t,time=0,sent=false,lv=5}
P.atkBuffer[p] ={pos=P:RND(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=2}
P.atkBuffer[p+1]={pos=P:RND(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3}
P.atkBuffer[p+2]={pos=P:RND(10),amount=6,countdown=1.2*t,cd0=1.2*t,time=0,sent=false,lv=4}
P.atkBuffer[p+3]={pos=P:RND(10),amount=6,countdown=1.5*t,cd0=1.5*t,time=0,sent=false,lv=5}
P.atkBuffer.sum=P.atkBuffer.sum+20
P.stat.recv=P.stat.recv+20
if P.modeData.event==31 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end

View File

@@ -140,8 +140,6 @@ elseif setting.lang==3 then
"l-=-1",
"Is B2B2B2B possible?",
"Initial Rotation etc. can save your life",
"Iced so bully",
"Hello world",
"Hello world!",
"Headphones for better experience",
"Have you noticed what does \"rotating\" do to block?",
@@ -154,7 +152,7 @@ elseif setting.lang==3 then
"DO NOT PRESS F10",
"Do not play game in class!",
"Disappearing doesn't mean useless",
"diao so bully",
"Diao so bully",
"COOL!!",
"CLASSIC SEXY RUSSIAN BLOCKS",
"BT cannon=beta",
@@ -167,7 +165,7 @@ elseif setting.lang==3 then
"Also try Tetr.io!",
"Also try Jstris!",
"Also try Cultris II!",
"Also try Bullpomino!",
"Also try Nullpomino!",
"ALLSPIN!",
"少女祈禱中",
"40L WR: 15.654s",

View File

@@ -99,14 +99,14 @@ local TRS={
},--J
{},--L
{
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-2},{-1,-1}},
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2},{ 0,-1},{ 1, 1}},
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2}},
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-2},{ 0, 1}},
[10]={{ 1, 0},{ 1,-1},{ 0, 2},{ 1, 2},{ 0,-1}},
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-2},{ 0, 1}},
[30]={{-1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0,-1}},
[12]={{ 1, 0},{ 1,-1},{ 0,-1},{-1,-1},{ 0, 2},{ 1, 2}},
[21]={{-1, 0},{ 0,-2},{-1,-2},{ 1, 1}},
[21]={{-1, 0},{ 0,-2},{-1,-2},{ 1, 1},{ 1, 0}},
[32]={{-1, 0},{-1,-1},{ 0,-1},{ 1,-1},{ 0, 2},{-1, 2}},
[23]={{ 1, 0},{ 0,-2},{ 1,-2},{-1, 1}},
[23]={{ 1, 0},{ 0,-2},{ 1,-2},{-1, 1},{-1, 0}},
[02]={{-1, 0},{ 1, 0},{ 0, 1}},
[20]={{ 1, 0},{-1, 0},{ 0,-1}},
[13]={{ 0,-1},{ 0, 1},{ 1, 0},{ 0,-2},{ 0, 2}},
@@ -186,23 +186,23 @@ local TRS={
{
[01]={{-1, 0},{ 1, 0},{-1, 1},{ 0,-2},{ 0,-3}},
[10]={{ 1, 0},{ 1,-1},{-1, 0},{ 0, 2},{ 0, 3}},
[03]={{ 1, 0},{ 1,-1}, { 0, 1},{ 0,-2},{ 0,-3}},
[30]={{-1, 0},{-1, 1},{ 1, 0},{ 0,-1},{ 0, 2},{ 0, 3}},
[03]={{ 1, 0},{ 1,-1},{ 0, 1},{ 0,-2},{ 0,-3}},
[30]={{-1, 1},{ 1, 0},{ 0,-1},{ 0, 2},{ 0, 3}},
[12]={{ 1, 0},{ 0,-1},{-1, 0},{ 0, 2}},
[21]={{-1, 0},{ 0, 1},{ 1, 0},{ 0,-2}},
[32]={{-1, 0},{-1, 1},{ 0, 1},{ 0,-1},{ 1, 0},{ 0, 2},{-2, 0}},
[23]={{ 1, 0},{ 1,-1},{ 0,-1},{ 0, 1},{-1, 0},{ 0,-2},{ 2, 0}},
[02]={{ 1, 0},{-1, 0},{ 0, 1}},
[20]={{-1, 0},{ 1, 0},{ 0,-1}},
[13]={{ 0,-1},{ 1, 0},{ 0, 1}},
[31]={{ 0,-1},{-1, 0},{ 0, 1}},
[32]={{-1, 0},{ 0, 1},{-1, 1},{ 1, 0},{ 0, 2},{-2, 0}},
[23]={{ 1, 0},{ 1,-1},{ 0,-1},{-1, 0},{ 0,-2},{ 2, 0}},
[02]={{ 1, 0},{-1, 0},{-1,-1}},
[20]={{-1, 0},{ 1, 0},{ 1, 1}},
[13]={{ 0,-1},{-1, 1},{ 0, 1}},
[31]={{ 0,-1},{ 1,-1},{ 0, 1}},
},--F
{},--E
{
[01]={{ 0,-1},{-1,-1},{ 1,-1},{ 1, 0},{ 1,-3},{-1, 0},{ 0, 2},{-1, 2}},
[10]={{ 1, 0},{ 0,-1},{-1,-1},{ 0,-2},{ 0,-3},{ 1,-2},{ 0, 1}},
[01]={{ 0,-1},{-1,-1},{ 1, 1},{ 1, 0},{ 1,-3},{-1, 0},{ 0, 2},{-1, 2}},
[10]={{ 1, 0},{ 0,-1},{-1,-1},{ 0,-2},{-1, 1},{ 0,-3},{ 1,-2},{ 0, 1}},
[03]={{ 0,-1},{ 1,-1},{-1,-1},{-1, 0},{-1,-3},{ 1, 0},{ 0, 2},{ 1, 2}},
[30]={{-1, 0},{ 0,-1},{ 1,-1},{ 0,-2},{ 0,-3},{-1,-2},{ 0, 1}},
[30]={{-1, 0},{ 0,-1},{ 1,-1},{ 0,-2},{ 1, 1},{ 0,-3},{-1,-2},{ 0, 1}},
[12]={{ 1, 0},{-1, 0},{ 0,-2},{ 0,-3},{ 0, 1},{-1, 1}},
[21]={{ 1,-1},{-1, 0},{ 1, 0},{ 0,-1},{ 0, 2},{ 0, 3}},
[32]={{-1, 0},{ 1, 0},{ 0,-2},{ 0,-3},{ 0, 1},{ 1, 1}},
@@ -213,10 +213,10 @@ local TRS={
[31]={{-1, 0},{ 1, 1},{ 2, 0}},
},--T5
{
[01]={{-1, 0},{-1, 1},{ 0,-2},{-1,-1},{-1,-2}},
[10]={{ 1, 0},{ 1,-1}},
[03]={{ 1, 0},{ 1, 1},{ 0,-2},{ 1,-1},{ 1,-2}},
[30]={{-1, 0},{-1,-1}},
[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}},
[12]={{ 1, 0},{ 1,-1},{ 1, 1}},
[21]={{-1,-1},{-1, 1},{-1,-1}},
[32]={{-1, 0},{-1,-1},{-1, 1}},

View File

@@ -199,7 +199,7 @@ drawableText={
replaying=T(20),
next=T(40),hold=T(40),
win=T(120),finish=T(120),
lose=T(120),pause=T(120),
gameover=T(100),pause=T(120),
custom=T(80),sequence=T(80),
setting_game=T(80),setting_video=T(80),setting_sound=T(80),

View File

@@ -86,24 +86,22 @@ local CCblockID={4,3,6,5,1,2,0}
local freshPrepare={
none=NULL,
bag=function(P)
local R=P.RND
local bag=P.gameEnv.bag
local L
repeat
L={}for i=1,#bag do L[i]=i end
repeat P:getNext(bag[rem(L,R:random(#L))])until not L[1]
repeat P:getNext(bag[rem(L,P:RND(#L))])until not L[1]
until #P.next>5
end,
his4=function(P)
local R=P.RND
local bag=P.gameEnv.bag
local L=#bag
P.his={bag[R:random(L)],bag[R:random(L)],bag[R:random(L)],bag[R:random(L)]}
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[R:random(L)]
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)
@@ -111,15 +109,14 @@ local freshPrepare={
end
end,
rnd=function(P)
local R=P.RND
local bag=P.gameEnv.bag
local L=#bag
P:getNext(bag[R:random(L)])
P:getNext(bag[P:RND(L)])
for i=1,5 do
local count=0
local i
repeat
i=bag[R:random(L)]
i=bag[P:RND(L)]
count=count+1
until i~=P.next[#P.next].id or count>=L
P:getNext(i)
@@ -143,22 +140,20 @@ local freshPrepare={
local freshMethod={
none=NULL,
bag=function(P)
local R=P.RND
if #P.next<6 then
local bag0,bag=P.gameEnv.bag,{}
for i=1,#bag0 do bag[i]=bag0[i]end
repeat P:getNext(rem(bag,R:random(#bag)))until not bag[1]
repeat P:getNext(rem(bag,P:RND(#bag)))until not bag[1]
end
end,
his4=function(P)
local R=P.RND
if #P.next<6 then
local bag=P.gameEnv.bag
local L=#bag
for n=1,4 do
local j,i=0
repeat
i=bag[R:random(L)]
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==4
P:getNext(i)
@@ -167,7 +162,6 @@ local freshMethod={
end
end,
rnd=function(P)
local R=P.RND
if #P.next<6 then
local bag=P.gameEnv.bag
local L=#bag
@@ -175,7 +169,7 @@ local freshMethod={
local count=0
local i
repeat
i=bag[R:random(L)]
i=bag[P:RND(L)]
count=count+1
until i~=P.next[#P.next].id or count>=L
P:getNext(i)
@@ -441,10 +435,7 @@ local function Pupdate_alive(P,dt)
P.curY=P.imgY
end
end
if P.curY<P.minY then
P.minY=P.curY
P.lockDelay=P.gameEnv.lock
end
P:freshMinY()
P.spinLast=false
if P.imgY~=P.curY then
@@ -692,6 +683,8 @@ local function Pdraw_norm(P)
gc.rectangle("line",-16,-3,15,604)--B2b bar boarder
gc.setColor(P.frameColor)
gc.rectangle("line",-1,-11,302,612)--Boarder
--LockDelay indicator
if P.lockDelay>=0 then
gc.rectangle("fill",0,602,300*P.lockDelay/P.gameEnv.lock,6)--Lock delay indicator
end
@@ -700,6 +693,7 @@ local function Pdraw_norm(P)
gc.circle("fill",_,615,5)
_=_+20
end
--Buffer line
local h=0
for i=1,#P.atkBuffer do
@@ -1089,6 +1083,11 @@ end
--------------------------</FX>--------------------------
--------------------------<Method>--------------------------
function player.RND(P,a,b)
local R=P.randGen
return R:random(a,b)
end
local function getNewStatTable()
local T={
time=0,score=0,
@@ -1157,7 +1156,7 @@ function player.attack(P,R,send,time,...)
B[i+1]=B[i]
end
B[k]={
pos=rnd(10),
pos=P:RND(10),
amount=send,
countdown=time,
cd0=time,
@@ -1331,11 +1330,18 @@ function player.freshLockDelay(P)
local d,d0=P.lockDelay,P.gameEnv.lock
if d<d0 and(P.freshTime<P.gameEnv.freshLimit or P.curY<P.minY)then
if P.lockDelay<P.gameEnv.lock then
P.dropDelay=P.gameEnv.drop
end
P.freshTime=P.freshTime+1
P.lockDelay=min(d+d0*.6,d0)
end
end
function player.freshMinY(P)
if P.curY<P.minY then
P.freshTime=max(P.freshTime-1,0)
P.minY=P.curY
P.lockDelay=P.gameEnv.lock
end
end
function player.lock(P)
@@ -1366,7 +1372,7 @@ function player.spin(P,d,ifpre)
end
for test=1,#iki do
local x,y=ix+iki[test][1],iy+iki[test][2]
if not P:ifoverlap(icb,x,y)and(P.gameEnv.easyFresh or y<=P.curY)then
if not P:ifoverlap(icb,x,y)and(P.freshTime<=P.gameEnv.freshLimit or iki[test][2]<0)then
ix,iy=x,y
if P.gameEnv.dropFX then
P:createDropFX(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY)
@@ -1377,6 +1383,10 @@ function player.spin(P,d,ifpre)
P.spinLast=test==2 and 0 or 1
if not ifpre then P:freshgho()end
P:freshLockDelay()
P:freshMinY()
if iki[test][2]>0 then
P.freshTime=P.freshTime+1
end
if P.human then
SFX.fieldPlay(ifpre and"prerotate"or P:ifoverlap(P.cur.bk,P.curX,P.curY+1)and P:ifoverlap(P.cur.bk,P.curX-1,P.curY)and P:ifoverlap(P.cur.bk,P.curX+1,P.curY)and"rotatekick"or"rotate",nil,P)
@@ -1399,7 +1409,8 @@ function player.resetBlock(P)
P.r,P.c=#C.bk,#C.bk[1] --Row/column
P.curX=int(6-P.c*.5)
local y=21+ceil(P.fieldBeneath/30)
P.curY,P.minY=y,y
P.curY=y
P.minY=y+sc[2]
local _=P.keyPressing
--IMS
@@ -2174,9 +2185,9 @@ function player.lose(P)
P:showTextF(P.modeData.event,0,120,60,"appear",.26,.9)
end
P.gameEnv.keepVisible=P.gameEnv.visible~="show"
P:showTextF(text.lose,0,0,90,"appear",.26,.9)
P:showTextF(text.gameover,0,0,60,"appear",.26,.9)
if P.human then
game.result="lose"
game.result="gameover"
SFX.play("fail")
VOC.play("lose")
if modeEnv.royaleMode then
@@ -2316,9 +2327,7 @@ function player.act.softDrop(P)
if P.control and P.waiting==-1 and P.cur then
if P.curY~=P.imgY then
P.curY=P.curY-1
if P.curY<P.minY then
P.minY=P.curY
end
P:freshMinY()
P.spinLast=false
end
end
@@ -2393,17 +2402,13 @@ function player.act.insDown(P)
P.fieldOff.vy=P.gameEnv.shakeFX*.5
end
P.curY,P.lockDelay,P.spinLast=P.imgY,P.gameEnv.lock,false
if P.curY<P.minY then
P.minY=P.curY
end
P:freshMinY()
end
end
function player.act.down1(P)
if P.curY~=P.imgY and P.cur then
P.curY=P.curY-1
if P.curY<P.minY then
P.minY=P.curY
end
P:freshMinY()
P.spinLast=false
end
end
@@ -2411,9 +2416,7 @@ function player.act.down4(P)
for _=1,4 do
if P.curY~=P.imgY and P.cur then
P.curY=P.curY-1
if P.curY<P.minY then
P.minY=P.curY
end
P:freshMinY()
P.spinLast=false
else
return
@@ -2425,9 +2428,7 @@ function player.act.down10(P)
for _=1,10 do
if P.curY~=P.imgY then
P.curY=P.curY-1
if P.curY<P.minY then
P.minY=P.curY
end
P:freshMinY()
P.spinLast=false
else
return
@@ -2505,7 +2506,7 @@ local function newEmptyPlayer(id,x,y,size)
P.draw=Pdraw_norm
P.bonus={}--Text objects
end
P.RND=mt.newRandomGenerator(game.seed)
P.randGen=mt.newRandomGenerator(game.seed)
P.small=false
P.life=0
@@ -2591,9 +2592,6 @@ local function applyGameEnv(P)--Finish gameEnv processing
P.dropDelay=ENV.drop
P.lockDelay=ENV.lock
if not P.gameEnv.easyFresh then
P.gameEnv.freshLimit=0
end
P.color={}
for _=1,7 do

View File

@@ -67,6 +67,7 @@ function Tick.throwBadge(data)--{ifAI,Sender,timer}
end
function Tick.autoPause(data)
data[1]=data[1]+1
if SCN.cur~="play"then return end
if data[1]==120 then
if SCN.cur=="play"then
pauseGame()

View File

@@ -56,6 +56,7 @@ Future outlook:
mine sweeper
tank battle
new AI: task-Z
self protection
cool backgrounds
'Encrypt'(compile to byte code)
better drop FX
@@ -69,7 +70,15 @@ Future outlook:
more graphic FXs & 3D features & animations
network game
0.10.1: 漏洞修复 Bug Fixed
0.10.2: 锁延修复 Lock Delay Fixed
改动:
锁延机制再修正
"失败"字样改为"游戏结束"
修复:
改设置后回放错误
字库缺字
0.10.1: 细节更新 Details update
新内容:
新语言:就这?
新语言配套阴阳怪气Tips
@@ -107,7 +116,7 @@ Future outlook:
Chinese update log
控件动效优化
极简错误音效调整
模电吉备历史性同框
模电HBM历史性同框
spin消3的分数下调
暂停界面数据显示格式和布局微调
初心/上级20G评级要求改动,清除高分榜