Compare commits
19 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f2cf2ce29b | ||
|
|
397cdd3e75 | ||
|
|
5b7dd0cfdd | ||
|
|
15b413040d | ||
|
|
e746cf7bb1 | ||
|
|
e4258dad42 | ||
|
|
156a1f92be | ||
|
|
77af980255 | ||
|
|
d4cd90cfea | ||
|
|
10c3157ad1 | ||
|
|
0c3a91fc7c | ||
|
|
a3ecfeb59a | ||
|
|
243fa72f98 | ||
|
|
67835a722b | ||
|
|
e07287223c | ||
|
|
94214abc01 | ||
|
|
38d8d73d82 | ||
|
|
fd6dfda9c4 | ||
|
|
7f3edeaacf |
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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")}),
|
||||
|
||||
2
conf.lua
2
conf.lua
@@ -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"
|
||||
|
||||
14
main.lua
14
main.lua
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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}},
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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评级要求改动,清除高分榜
|
||||
|
||||
Reference in New Issue
Block a user