0.8.15Bug Fixed
This commit is contained in:
25
ai.lua
25
ai.lua
@@ -80,14 +80,14 @@ end
|
|||||||
-------------------------------------------------⑨Stack setup
|
-------------------------------------------------⑨Stack setup
|
||||||
local dirCount={1,1,3,3,3,0,1}
|
local dirCount={1,1,3,3,3,0,1}
|
||||||
local spinOffset={
|
local spinOffset={
|
||||||
{1,0,0},--S
|
{[0]=0,1,0,0},--Z
|
||||||
{1,0,0},--Z
|
{[0]=0,1,0,0},--L
|
||||||
{1,0,0},--L
|
{[0]=0,1,0,0},--J
|
||||||
{1,0,0},--J
|
{[0]=0,1,0,0},--T
|
||||||
{1,0,0},--T
|
{[0]=0,1,0,0},--S
|
||||||
{0,0,0},--O
|
{[0]=0,0,0,0},--O
|
||||||
{2,0,1},--I
|
{[0]=0,2,0,1},--I
|
||||||
}for i=1,7 do spinOffset[i][0]=0 end
|
}
|
||||||
local FCL={
|
local FCL={
|
||||||
[1]={
|
[1]={
|
||||||
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12}},
|
{{11},{11,2},{1},{},{2},{2,2},{12,1},{12}},
|
||||||
@@ -106,10 +106,7 @@ local FCL={
|
|||||||
{{11},{11,2},{1},{},{2},{12,1},{12},},
|
{{11},{11,2},{1},{},{2},{12,1},{12},},
|
||||||
{{4,11},{11,4},{11,3},{1,4},{4},{3},{2,3},{12,4},{12,3},{3,12},},
|
{{4,11},{11,4},{11,3},{1,4},{4},{3},{2,3},{12,4},{12,3},{3,12},},
|
||||||
},
|
},
|
||||||
}
|
}FCL[2],FCL[4],FCL[5]=FCL[1],FCL[3],FCL[3]
|
||||||
FCL[2]=FCL[1]
|
|
||||||
FCL[4]=FCL[3]
|
|
||||||
FCL[5]=FCL[3]
|
|
||||||
local LclearScore={[0]=0,-200,-120,-80,200}
|
local LclearScore={[0]=0,-200,-120,-80,200}
|
||||||
local HclearScore={[0]=0,100,140,200,500}
|
local HclearScore={[0]=0,100,140,200,500}
|
||||||
local function ifoverlapAI(f,bk,x,y)
|
local function ifoverlapAI(f,bk,x,y)
|
||||||
@@ -256,7 +253,7 @@ AI_think={
|
|||||||
P.AI_delay=P.AI_delay0
|
P.AI_delay=P.AI_delay0
|
||||||
if Timer()-P.modeData.point>P.modeData.event then
|
if Timer()-P.modeData.point>P.modeData.event then
|
||||||
P.modeData.point=Timer()
|
P.modeData.point=Timer()
|
||||||
P.modeData.event=P.AI_delay0+rnd(2,10)
|
P.modeData.event=P.AI_delay0+rnd(5,15)
|
||||||
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
||||||
end
|
end
|
||||||
return 1
|
return 1
|
||||||
@@ -294,7 +291,7 @@ AI_think={
|
|||||||
P.AI_delay=P.AI_delay0
|
P.AI_delay=P.AI_delay0
|
||||||
if Timer()-P.modeData.point>P.modeData.event then
|
if Timer()-P.modeData.point>P.modeData.event then
|
||||||
P.modeData.point=Timer()
|
P.modeData.point=Timer()
|
||||||
P.modeData.event=P.AI_delay0+rnd(2,10)
|
P.modeData.event=P.AI_delay0+rnd(5,15)
|
||||||
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
P:changeAtkMode(rnd()<.85 and 1 or #P.atker>3 and 4 or rnd()<.3 and 2 or 3)
|
||||||
end
|
end
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
4
conf.lua
4
conf.lua
@@ -1,4 +1,4 @@
|
|||||||
gameVersion="Alpha V0.8.14"
|
gameVersion="Alpha V0.8.15"
|
||||||
function love.conf(t)
|
function love.conf(t)
|
||||||
t.identity="Techmino"--SaveDir name
|
t.identity="Techmino"--SaveDir name
|
||||||
t.version="11.1"
|
t.version="11.1"
|
||||||
@@ -17,7 +17,7 @@ function love.conf(t)
|
|||||||
W.resizable=true
|
W.resizable=true
|
||||||
W.fullscreentype="desktop"--"exclusive"
|
W.fullscreentype="desktop"--"exclusive"
|
||||||
W.fullscreen=false
|
W.fullscreen=false
|
||||||
W.vsync=0--0:∞fps
|
W.vsync=0--∞fps
|
||||||
W.msaa=false--num of samples to use with multi-sampled antialiasing
|
W.msaa=false--num of samples to use with multi-sampled antialiasing
|
||||||
W.depth=0--bits/samp of depth buffer
|
W.depth=0--bits/samp of depth buffer
|
||||||
W.stencil=1--bits/samp of stencil buffer
|
W.stencil=1--bits/samp of stencil buffer
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ setting={
|
|||||||
swap=true,
|
swap=true,
|
||||||
fine=false,
|
fine=false,
|
||||||
autoPause=true,
|
autoPause=true,
|
||||||
|
|
||||||
|
lang=1,
|
||||||
|
skinSet=1,
|
||||||
|
skin={1,5,2,8,10,3,7},
|
||||||
face={0,0,0,0,0,0,0},
|
face={0,0,0,0,0,0,0},
|
||||||
--game
|
--game
|
||||||
|
|
||||||
@@ -18,12 +22,10 @@ setting={
|
|||||||
atkFX=3,
|
atkFX=3,
|
||||||
frameMul=100,
|
frameMul=100,
|
||||||
|
|
||||||
|
text=true,
|
||||||
fullscreen=false,
|
fullscreen=false,
|
||||||
bg=true,
|
bg=true,
|
||||||
bgspace=true,
|
bgspace=true,
|
||||||
lang=1,
|
|
||||||
skinSet=1,
|
|
||||||
skin={1,5,2,8,10,3,7},
|
|
||||||
--graphic
|
--graphic
|
||||||
|
|
||||||
sfx=10,bgm=7,
|
sfx=10,bgm=7,
|
||||||
@@ -47,7 +49,7 @@ stat={
|
|||||||
atk=0,send=0,recv=0,pend=0,
|
atk=0,send=0,recv=0,pend=0,
|
||||||
clear_1=0,clear_2=0,clear_3=0,clear_4=0,
|
clear_1=0,clear_2=0,clear_3=0,clear_4=0,
|
||||||
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
|
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
|
||||||
b2b=0,b3b=0,pc=0,score=0,
|
pc=0,c=0,b2b=0,b3b=0,score=0,
|
||||||
lastPlay=1,--last played mode ID
|
lastPlay=1,--last played mode ID
|
||||||
}
|
}
|
||||||
keyMap={
|
keyMap={
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ spin判定:
|
|||||||
B3B:在B2B效果之上消四再加1,spin再加0.5*消行数攻击,二者都+1额外抵挡
|
B3B:在B2B效果之上消四再加1,spin再加0.5*消行数攻击,二者都+1额外抵挡
|
||||||
连击:0,0,1,1,2,2,2,3,3,4,3,2…(后面都是2)
|
连击:0,0,1,1,2,2,2,3,3,4,3,2…(后面都是2)
|
||||||
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
|
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
|
||||||
PC:将上述伤害之和开根号,再+6~10(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
|
半全消("下方有剩余方块"的全消):伤害+2,额外抵挡+2
|
||||||
|
全消:将上述伤害之和开根号,再+6~10(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
|
||||||
根据上述规则计算后,向下取整,攻击打出
|
根据上述规则计算后,向下取整,攻击打出
|
||||||
|
|
||||||
分数系统:
|
分数系统:
|
||||||
|
|||||||
12
file.lua
12
file.lua
@@ -89,7 +89,7 @@ function saveRecord(N,L)
|
|||||||
local _,mes=F:write(dumpTable(L))
|
local _,mes=F:write(dumpTable(L))
|
||||||
F:flush()F:close()
|
F:flush()F:close()
|
||||||
if not _ then
|
if not _ then
|
||||||
TEXT(text.recSavingError..mes,1140,650,20,"sudden",.5)
|
TEXT(text.recSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function delRecord(N)
|
function delRecord(N)
|
||||||
@@ -115,7 +115,7 @@ function saveUnlock()
|
|||||||
local _,mes=F:write(dumpTable(modeRanks))
|
local _,mes=F:write(dumpTable(modeRanks))
|
||||||
F:flush()F:close()
|
F:flush()F:close()
|
||||||
if not _ then
|
if not _ then
|
||||||
TEXT(text.unlockSavingError..mes,1140,650,20,"sudden",.5)
|
TEXT(text.unlockSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ function saveData()
|
|||||||
local _,mes=F:write(dumpTable(stat))
|
local _,mes=F:write(dumpTable(stat))
|
||||||
F:flush()F:close()
|
F:flush()F:close()
|
||||||
if not _ then
|
if not _ then
|
||||||
TEXT(text.statSavingError..mes,1140,650,20,"sudden",.5)
|
TEXT(text.statSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -165,7 +165,7 @@ function saveSetting()
|
|||||||
local _,mes=F:write(dumpTable(setting))
|
local _,mes=F:write(dumpTable(setting))
|
||||||
F:flush()F:close()
|
F:flush()F:close()
|
||||||
if _ then TEXT(text.settingSaved,1140,650,40,"sudden",.5)
|
if _ then TEXT(text.settingSaved,1140,650,40,"sudden",.5)
|
||||||
else TEXT(text.settingSavingError..mes,1140,650,20,"sudden",.5)
|
else TEXT(text.settingSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -186,7 +186,7 @@ function saveKeyMap()
|
|||||||
local _,mes=F:write(dumpTable(keyMap))
|
local _,mes=F:write(dumpTable(keyMap))
|
||||||
F:flush()F:close()
|
F:flush()F:close()
|
||||||
if _ then TEXT(text.keyMapSaved,1140,650,26,"sudden",.5)
|
if _ then TEXT(text.keyMapSaved,1140,650,26,"sudden",.5)
|
||||||
else TEXT(text.keyMapSavingError..mes,1140,650,20,"sudden",.5)
|
else TEXT(text.keyMapSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -207,7 +207,7 @@ function saveVK()
|
|||||||
local _,mes=F:write(dumpTable(VK_org))
|
local _,mes=F:write(dumpTable(VK_org))
|
||||||
F:flush()F:close()
|
F:flush()F:close()
|
||||||
if _ then TEXT(text.VKSaved,1140,650,26,"sudden",.5)
|
if _ then TEXT(text.VKSaved,1140,650,26,"sudden",.5)
|
||||||
else TEXT(text.VKSavingError..mes,1140,650,20,"sudden",.5)
|
else TEXT(text.VKSavingError..(mes or"unknown error"),1140,650,20,"sudden",.5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ return{
|
|||||||
b2b="B2B ",b3b="B2B2B ",
|
b2b="B2B ",b3b="B2B2B ",
|
||||||
mini="Mini",
|
mini="Mini",
|
||||||
PC="Perfect Clear",
|
PC="Perfect Clear",
|
||||||
|
C="Clear",
|
||||||
hold="暂存",next="下一个",
|
hold="暂存",next="下一个",
|
||||||
|
|
||||||
stage=function(n)return"关卡 "..n end,
|
stage=function(n)return"关卡 "..n end,
|
||||||
@@ -248,6 +249,7 @@ return{
|
|||||||
dropFX="下落特效等级",
|
dropFX="下落特效等级",
|
||||||
shakeFX="晃动特效等级",
|
shakeFX="晃动特效等级",
|
||||||
atkFX="攻击特效等级",
|
atkFX="攻击特效等级",
|
||||||
|
text="消行文本",
|
||||||
fullscreen="全屏",
|
fullscreen="全屏",
|
||||||
frame="绘制帧率",
|
frame="绘制帧率",
|
||||||
back=BK,
|
back=BK,
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ return{
|
|||||||
b2b="满贯",b3b="大满贯",
|
b2b="满贯",b3b="大满贯",
|
||||||
mini="迷你",
|
mini="迷你",
|
||||||
PC="场地全清",
|
PC="场地全清",
|
||||||
|
C="场地半清",
|
||||||
hold="暂存",next="下一个",
|
hold="暂存",next="下一个",
|
||||||
|
|
||||||
stage=function(n)return"关卡 "..n end,
|
stage=function(n)return"关卡 "..n end,
|
||||||
@@ -176,7 +177,7 @@ return{
|
|||||||
},
|
},
|
||||||
mode={
|
mode={
|
||||||
draw="画图(Q)",
|
draw="画图(Q)",
|
||||||
custon="参数(E)",
|
custom="参数(E)",
|
||||||
start="开始",
|
start="开始",
|
||||||
back=BK,
|
back=BK,
|
||||||
},
|
},
|
||||||
@@ -245,6 +246,7 @@ return{
|
|||||||
dropFX="下落特效等级",
|
dropFX="下落特效等级",
|
||||||
shakeFX="晃动特效等级",
|
shakeFX="晃动特效等级",
|
||||||
atkFX="攻击特效等级",
|
atkFX="攻击特效等级",
|
||||||
|
text="消行文本",
|
||||||
fullscreen="全屏",
|
fullscreen="全屏",
|
||||||
frame="绘制帧率",
|
frame="绘制帧率",
|
||||||
back=BK,
|
back=BK,
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ return{
|
|||||||
b2b="B2B ",b3b="B2B2B ",
|
b2b="B2B ",b3b="B2B2B ",
|
||||||
mini="Mini",
|
mini="Mini",
|
||||||
PC="Perfect Clear",
|
PC="Perfect Clear",
|
||||||
|
C="Clear",
|
||||||
hold="Hold",next="Next",
|
hold="Hold",next="Next",
|
||||||
|
|
||||||
stage=function(n)return"STAGE "..n end,
|
stage=function(n)return"STAGE "..n end,
|
||||||
@@ -244,6 +245,7 @@ Lib used:
|
|||||||
dropFX="Drop FX level",
|
dropFX="Drop FX level",
|
||||||
shakeFX="Shake FX level",
|
shakeFX="Shake FX level",
|
||||||
atkFX="ATK FX level",
|
atkFX="ATK FX level",
|
||||||
|
text="Line-clear text",
|
||||||
fullscreen="Fullscreen",
|
fullscreen="Fullscreen",
|
||||||
frame="draw FPS",
|
frame="draw FPS",
|
||||||
back=BK,
|
back=BK,
|
||||||
@@ -276,8 +278,8 @@ Lib used:
|
|||||||
prev5="↑",next5="↓",spin5="R",
|
prev5="↑",next5="↓",spin5="R",
|
||||||
prev6="↑",next6="↓",spin6="R",
|
prev6="↑",next6="↓",spin6="R",
|
||||||
prev7="↑",next7="↓",spin7="R",
|
prev7="↑",next7="↓",spin7="R",
|
||||||
skinR="reset Color",
|
skinR="Reset Color",
|
||||||
faceR="reset Dir",
|
faceR="Reset Dir.",
|
||||||
back=BK,
|
back=BK,
|
||||||
},
|
},
|
||||||
setting_touch={
|
setting_touch={
|
||||||
|
|||||||
2
main.lua
2
main.lua
@@ -677,7 +677,7 @@ function touchMove.play(id,x,y,dx,dy)
|
|||||||
end
|
end
|
||||||
function keyDown.play(key)
|
function keyDown.play(key)
|
||||||
if key=="escape"then
|
if key=="escape"then
|
||||||
(frame<180 and scene.back or pauseGame)()
|
pauseGame()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local m=keyMap
|
local m=keyMap
|
||||||
|
|||||||
@@ -42,10 +42,10 @@ return{
|
|||||||
D.event=D.event+1
|
D.event=D.event+1
|
||||||
D.point=int(72e4/t)*.1
|
D.point=int(72e4/t)*.1
|
||||||
if D.event==20 then
|
if D.event==20 then
|
||||||
P:showText(text.great,0,-140,100,"appear",.6)
|
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||||
P.gameEnv.pushSpeed=3
|
P.gameEnv.pushSpeed=3
|
||||||
elseif D.event==50 then
|
elseif D.event==50 then
|
||||||
P:showText(text.maxspeed,0,-140,100,"appear",.6)
|
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -48,13 +48,13 @@ return{
|
|||||||
D.event=D.event+1
|
D.event=D.event+1
|
||||||
D.point=int(s*36e3/t)*.1
|
D.point=int(s*36e3/t)*.1
|
||||||
if D.event==10 then
|
if D.event==10 then
|
||||||
P:showText(text.great,0,-140,100,"appear",.6)
|
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||||
P.gameEnv.pushSpeed=4
|
P.gameEnv.pushSpeed=4
|
||||||
elseif D.event==20 then
|
elseif D.event==20 then
|
||||||
P:showText(text.awesome,0,-140,100,"appear",.6)
|
P:showTextF(text.awesome,0,-140,100,"appear",.6)
|
||||||
P.gameEnv.pushSpeed=5
|
P.gameEnv.pushSpeed=5
|
||||||
elseif D.event==30 then
|
elseif D.event==30 then
|
||||||
P:showText(text.maxspeed,0,-140,100,"appear",.6)
|
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
local rnd,min=math.random,math.min
|
local rnd,min=math.random,math.min
|
||||||
local function check_c4w(P)
|
local function check_c4w(P)
|
||||||
for i=1,#P.clearedRow do
|
for i=1,#P.clearedRow do
|
||||||
P.field[#P.field+1]=freeRow.get(10)
|
P.field[#P.field+1]=freeRow.get(13)
|
||||||
P.visTime[#P.visTime+1]=freeRow.get(20)
|
P.visTime[#P.visTime+1]=freeRow.get(20)
|
||||||
for i=4,7 do P.field[#P.field][i]=0 end
|
for i=4,7 do P.field[#P.field][i]=0 end
|
||||||
end
|
end
|
||||||
@@ -46,17 +46,17 @@ return{
|
|||||||
local P=players[1]
|
local P=players[1]
|
||||||
local F=P.field
|
local F=P.field
|
||||||
for i=1,24 do
|
for i=1,24 do
|
||||||
F[i]=freeRow.get(10)
|
F[i]=freeRow.get(13)
|
||||||
P.visTime[i]=freeRow.get(20)
|
P.visTime[i]=freeRow.get(20)
|
||||||
for x=4,7 do F[i][x]=0 end
|
for x=4,7 do F[i][x]=0 end
|
||||||
end
|
end
|
||||||
local r=rnd(6)
|
local r=rnd(6)
|
||||||
if r==1 then F[1][5],F[1][4],F[2][4]=10,10,10
|
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]=10,10,10
|
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]=10,10,10
|
elseif r==3 then F[1][4],F[2][4],F[2][5]=13,13,13
|
||||||
elseif r==4 then F[1][7],F[2][7],F[2][6]=10,10,10
|
elseif r==4 then F[1][7],F[2][7],F[2][6]=13,13,13
|
||||||
elseif r==5 then F[1][4],F[1][5],F[1][6]=10,10,10
|
elseif r==5 then F[1][4],F[1][5],F[1][6]=13,13,13
|
||||||
elseif r==6 then F[1][7],F[1][6],F[1][5]=10,10,10
|
elseif r==6 then F[1][7],F[1][6],F[1][5]=13,13,13
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
mesDisp=function(P,dx,dy)
|
mesDisp=function(P,dx,dy)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
local rnd,min=math.random,math.min
|
local rnd,min=math.random,math.min
|
||||||
local function check_c4w(P)
|
local function check_c4w(P)
|
||||||
for i=1,#P.clearedRow do
|
for i=1,#P.clearedRow do
|
||||||
P.field[#P.field+1]=freeRow.get(10)
|
P.field[#P.field+1]=freeRow.get(13)
|
||||||
P.visTime[#P.visTime+1]=freeRow.get(20)
|
P.visTime[#P.visTime+1]=freeRow.get(20)
|
||||||
for i=4,7 do P.field[#P.field][i]=0 end
|
for i=4,7 do P.field[#P.field][i]=0 end
|
||||||
end
|
end
|
||||||
@@ -44,17 +44,17 @@ return{
|
|||||||
local P=players[1]
|
local P=players[1]
|
||||||
local F=P.field
|
local F=P.field
|
||||||
for i=1,24 do
|
for i=1,24 do
|
||||||
F[i]=freeRow.get(10)
|
F[i]=freeRow.get(13)
|
||||||
P.visTime[i]=freeRow.get(20)
|
P.visTime[i]=freeRow.get(20)
|
||||||
for x=4,7 do F[i][x]=0 end
|
for x=4,7 do F[i][x]=0 end
|
||||||
end
|
end
|
||||||
local r=rnd(6)
|
local r=rnd(6)
|
||||||
if r==1 then F[1][5],F[1][4],F[2][4]=10,10,10
|
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]=10,10,10
|
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]=10,10,10
|
elseif r==3 then F[1][4],F[2][4],F[2][5]=13,13,13
|
||||||
elseif r==4 then F[1][7],F[2][7],F[2][6]=10,10,10
|
elseif r==4 then F[1][7],F[2][7],F[2][6]=13,13,13
|
||||||
elseif r==5 then F[1][4],F[1][5],F[1][6]=10,10,10
|
elseif r==5 then F[1][4],F[1][5],F[1][6]=13,13,13
|
||||||
elseif r==6 then F[1][7],F[1][6],F[1][5]=10,10,10
|
elseif r==6 then F[1][7],F[1][6],F[1][5]=13,13,13
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
mesDisp=function(P,dx,dy)
|
mesDisp=function(P,dx,dy)
|
||||||
|
|||||||
@@ -37,15 +37,15 @@ return{
|
|||||||
D.event=D.event+1
|
D.event=D.event+1
|
||||||
D.point=int(144e3/(240-2*D.event))*.1
|
D.point=int(144e3/(240-2*D.event))*.1
|
||||||
if D.event==25 then
|
if D.event==25 then
|
||||||
P:showText(text.great,0,-140,100,"appear",.6)
|
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||||
P.gameEnv.pushSpeed=3
|
P.gameEnv.pushSpeed=3
|
||||||
P.dropDelay,P.gameEnv.drop=4,4
|
P.dropDelay,P.gameEnv.drop=4,4
|
||||||
elseif D.event==50 then
|
elseif D.event==50 then
|
||||||
P:showText(text.awesome,0,-140,100,"appear",.6)
|
P:showTextF(text.awesome,0,-140,100,"appear",.6)
|
||||||
P.gameEnv.pushSpeed=4
|
P.gameEnv.pushSpeed=4
|
||||||
P.dropDelay,P.gameEnv.drop=3,3
|
P.dropDelay,P.gameEnv.drop=3,3
|
||||||
elseif D.event==75 then
|
elseif D.event==75 then
|
||||||
P:showText(text.maxspeed,0,-140,100,"appear",.6)
|
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||||
P.dropDelay,P.gameEnv.drop=2,2
|
P.dropDelay,P.gameEnv.drop=2,2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -37,16 +37,16 @@ return{
|
|||||||
D.event=D.event+1
|
D.event=D.event+1
|
||||||
D.point=int(108e3/(360-D.event*2))*.1
|
D.point=int(108e3/(360-D.event*2))*.1
|
||||||
if D.event==25 then
|
if D.event==25 then
|
||||||
P:showText(text.great,0,-140,100,"appear",.6)
|
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||||
P.gameEnv.pushSpeed=2
|
P.gameEnv.pushSpeed=2
|
||||||
P.dropDelay,P.gameEnv.drop=20,20
|
P.dropDelay,P.gameEnv.drop=20,20
|
||||||
elseif D.event==50 then
|
elseif D.event==50 then
|
||||||
P:showText(text.awesome,0,-140,100,"appear",.6)
|
P:showTextF(text.awesome,0,-140,100,"appear",.6)
|
||||||
P.gameEnv.pushSpeed=3
|
P.gameEnv.pushSpeed=3
|
||||||
P.dropDelay,P.gameEnv.drop=10,10
|
P.dropDelay,P.gameEnv.drop=10,10
|
||||||
elseif D.event==90 then
|
elseif D.event==90 then
|
||||||
P.dropDelay,P.gameEnv.drop=5,5
|
P.dropDelay,P.gameEnv.drop=5,5
|
||||||
P:showText(text.maxspeed,0,-140,100,"appear",.6)
|
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ return{
|
|||||||
name={
|
name={
|
||||||
"本地多人",
|
"本地多人",
|
||||||
"本地多人",
|
"本地多人",
|
||||||
"Hotseat",
|
"Multiplayer",
|
||||||
},
|
},
|
||||||
level={
|
level={
|
||||||
"2P",
|
"2P",
|
||||||
@@ -10,8 +10,8 @@ return{
|
|||||||
"2P",
|
"2P",
|
||||||
},
|
},
|
||||||
info={
|
info={
|
||||||
"友尽模式",
|
"友尽模式(非联网/局域网)",
|
||||||
"友尽模式",
|
"友尽模式(非联网/局域网)",
|
||||||
"End of friendship",
|
"End of friendship",
|
||||||
},
|
},
|
||||||
color=color.white,
|
color=color.white,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ return{
|
|||||||
name={
|
name={
|
||||||
"本地多人",
|
"本地多人",
|
||||||
"本地多人",
|
"本地多人",
|
||||||
"Hotseat",
|
"Multiplayer",
|
||||||
},
|
},
|
||||||
level={
|
level={
|
||||||
"3P",
|
"3P",
|
||||||
@@ -10,8 +10,8 @@ return{
|
|||||||
"3P",
|
"3P",
|
||||||
},
|
},
|
||||||
info={
|
info={
|
||||||
"友尽模式",
|
"友尽模式(非联网/局域网)",
|
||||||
"友尽模式",
|
"友尽模式(非联网/局域网)",
|
||||||
"End of friendship",
|
"End of friendship",
|
||||||
},
|
},
|
||||||
color=color.white,
|
color=color.white,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ return{
|
|||||||
name={
|
name={
|
||||||
"本地多人",
|
"本地多人",
|
||||||
"本地多人",
|
"本地多人",
|
||||||
"Hotseat",
|
"Multiplayer",
|
||||||
},
|
},
|
||||||
level={
|
level={
|
||||||
"4P",
|
"4P",
|
||||||
@@ -10,8 +10,8 @@ return{
|
|||||||
"4P",
|
"4P",
|
||||||
},
|
},
|
||||||
info={
|
info={
|
||||||
"友尽模式",
|
"友尽模式(非联网/局域网)",
|
||||||
"友尽模式",
|
"友尽模式(非联网/局域网)",
|
||||||
"End of friendship",
|
"End of friendship",
|
||||||
},
|
},
|
||||||
color=color.white,
|
color=color.white,
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ local function score(P)
|
|||||||
P.modeData.point,P.modeData.event=500,4
|
P.modeData.point,P.modeData.event=500,4
|
||||||
P:win("finish")
|
P:win("finish")
|
||||||
else
|
else
|
||||||
P:showText(text.stage(s),0,-120,80,"fly")
|
P:showTextF(text.stage(s),0,-120,80,"fly")
|
||||||
end
|
end
|
||||||
SFX.play("reach")
|
SFX.play("reach")
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ local function score(P)
|
|||||||
P.modeData.point,P.modeData.event=500,4
|
P.modeData.point,P.modeData.event=500,4
|
||||||
P:win("finish")
|
P:win("finish")
|
||||||
else
|
else
|
||||||
P:showText(text.stage(s),0,-120,80,"fly")
|
P:showTextF(text.stage(s),0,-120,80,"fly")
|
||||||
end
|
end
|
||||||
SFX.play("reach")
|
SFX.play("reach")
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ local function score(P)
|
|||||||
if MD.point%100==99 then SFX.play("blip_1")end
|
if MD.point%100==99 then SFX.play("blip_1")end
|
||||||
if int(MD.point*.01)>MD.event then
|
if int(MD.point*.01)>MD.event then
|
||||||
local s=MD.event+1;MD.event=s--level up!
|
local s=MD.event+1;MD.event=s--level up!
|
||||||
P:showText(text.stage(s),0,-120,80,"fly")
|
P:showTextF(text.stage(s),0,-120,80,"fly")
|
||||||
local E=P.gameEnv
|
local E=P.gameEnv
|
||||||
if s<4 then--first 300
|
if s<4 then--first 300
|
||||||
if s~=1 then E.lock=E.lock-1 end
|
if s~=1 then E.lock=E.lock-1 end
|
||||||
|
|||||||
@@ -9,10 +9,12 @@ local function task_PC(P)
|
|||||||
P.modeData.counter=P.modeData.counter+1
|
P.modeData.counter=P.modeData.counter+1
|
||||||
if P.modeData.counter==21 then
|
if P.modeData.counter==21 then
|
||||||
local t=P.stat.pc%2
|
local t=P.stat.pc%2
|
||||||
|
local S=P.gameEnv.skin
|
||||||
for i=1,4 do
|
for i=1,4 do
|
||||||
local r=freeRow.get(0)
|
local r=freeRow.get(0)
|
||||||
for j=1,10 do
|
for j=1,10 do
|
||||||
r[j]=PCbase[4*t+i][j]
|
local _=PCbase[4*t+i][j]
|
||||||
|
r[j]=S[_]or 0
|
||||||
end
|
end
|
||||||
ins(P.field,1,r)
|
ins(P.field,1,r)
|
||||||
ins(P.visTime,1,freeRow.get(20))
|
ins(P.visTime,1,freeRow.get(20))
|
||||||
@@ -44,7 +46,7 @@ local function newPC(P)
|
|||||||
elseif b<5 then b=7-b
|
elseif b<5 then b=7-b
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
P.next[#P.next+1]={bk=blocks[b][0],id=b,color=b,name=b}--P:newNext(b)'s simple version!
|
P:getNext(b)
|
||||||
end
|
end
|
||||||
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
||||||
newTask(task_PC,P)
|
newTask(task_PC,P)
|
||||||
@@ -54,9 +56,9 @@ local function newPC(P)
|
|||||||
P.gameEnv.lock=pc_lock[s]or 20
|
P.gameEnv.lock=pc_lock[s]or 20
|
||||||
P.gameEnv.fall=pc_fall[s]or 5
|
P.gameEnv.fall=pc_fall[s]or 5
|
||||||
if s==10 then
|
if s==10 then
|
||||||
P:showText(text.maxspeed,0,-140,100,"appear",.6)
|
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||||
else
|
else
|
||||||
P:showText(text.speedup,0,-140,40,"appear",.8)
|
P:showTextF(text.speedup,0,-140,40,"appear",.8)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -6,10 +6,12 @@ local function task_PC(P)
|
|||||||
P.modeData.counter=P.modeData.counter+1
|
P.modeData.counter=P.modeData.counter+1
|
||||||
if P.modeData.counter==21 then
|
if P.modeData.counter==21 then
|
||||||
local t=P.stat.pc%2
|
local t=P.stat.pc%2
|
||||||
|
local S=P.gameEnv.skin
|
||||||
for i=1,4 do
|
for i=1,4 do
|
||||||
local r=freeRow.get(0)
|
local r=freeRow.get(0)
|
||||||
for j=1,10 do
|
for j=1,10 do
|
||||||
r[j]=PCbase[4*t+i][j]
|
local _=PCbase[4*t+i][j]
|
||||||
|
r[j]=S[_]or 0
|
||||||
end
|
end
|
||||||
ins(P.field,1,r)
|
ins(P.field,1,r)
|
||||||
ins(P.visTime,1,freeRow.get(20))
|
ins(P.visTime,1,freeRow.get(20))
|
||||||
@@ -40,7 +42,7 @@ local function newPC(P)
|
|||||||
elseif b<5 then b=7-b
|
elseif b<5 then b=7-b
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
P.next[#P.next+1]={bk=blocks[b][0],id=b,color=b,name=b}--P:newNext(b)'s simple version!
|
P:getNext(b)
|
||||||
end
|
end
|
||||||
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
P.modeData.counter=P.stat.piece==0 and 20 or 0
|
||||||
newTask(task_PC,P)
|
newTask(task_PC,P)
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ return{
|
|||||||
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=rnd(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1}
|
||||||
P.atkBuffer.sum=P.atkBuffer.sum+1
|
P.atkBuffer.sum=P.atkBuffer.sum+1
|
||||||
P.stat.recv=P.stat.recv+1
|
P.stat.recv=P.stat.recv+1
|
||||||
if P.modeData.event==45 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
if P.modeData.event==45 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end
|
||||||
P.modeData.counter=0
|
P.modeData.counter=0
|
||||||
P.modeData.event=P.modeData.event+1
|
P.modeData.event=P.modeData.event+1
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ return{
|
|||||||
local R=(P.modeData.event%3<2 and 1 or 3)
|
local R=(P.modeData.event%3<2 and 1 or 3)
|
||||||
P.atkBuffer.sum=P.atkBuffer.sum+R
|
P.atkBuffer.sum=P.atkBuffer.sum+R
|
||||||
P.stat.recv=P.stat.recv+R
|
P.stat.recv=P.stat.recv+R
|
||||||
if P.modeData.event==60 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
if P.modeData.event==60 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end
|
||||||
P.modeData.counter=0
|
P.modeData.counter=0
|
||||||
P.modeData.event=P.modeData.event+1
|
P.modeData.event=P.modeData.event+1
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ return{
|
|||||||
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=rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3}
|
||||||
P.atkBuffer.sum=P.atkBuffer.sum+4
|
P.atkBuffer.sum=P.atkBuffer.sum+4
|
||||||
P.stat.recv=P.stat.recv+4
|
P.stat.recv=P.stat.recv+4
|
||||||
if P.modeData.event==60 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
if P.modeData.event==60 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end
|
||||||
P.modeData.counter=0
|
P.modeData.counter=0
|
||||||
P.modeData.event=P.modeData.event+1
|
P.modeData.event=P.modeData.event+1
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ return{
|
|||||||
d%4==3 and{pos=rnd(10),amount=4,countdown=90,cd0=90,time=0,sent=false,lv=3}
|
d%4==3 and{pos=rnd(10),amount=4,countdown=90,cd0=90,time=0,sent=false,lv=3}
|
||||||
P.atkBuffer.sum=P.atkBuffer.sum+d%4+1
|
P.atkBuffer.sum=P.atkBuffer.sum+d%4+1
|
||||||
P.stat.recv=P.stat.recv+d%4+1
|
P.stat.recv=P.stat.recv+d%4+1
|
||||||
if P.modeData.event==45 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
if P.modeData.event==45 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end
|
||||||
P.modeData.counter=0
|
P.modeData.counter=0
|
||||||
P.modeData.event=d
|
P.modeData.event=d
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ return{
|
|||||||
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+3]={pos=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.atkBuffer.sum=P.atkBuffer.sum+20
|
||||||
P.stat.recv=P.stat.recv+20
|
P.stat.recv=P.stat.recv+20
|
||||||
if P.modeData.event==31 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
if P.modeData.event==31 then P:showTextF(text.maxspeed,0,-140,100,"appear",.6)end
|
||||||
P.modeData.counter=0
|
P.modeData.counter=0
|
||||||
P.modeData.event=P.modeData.event+1
|
P.modeData.event=P.modeData.event+1
|
||||||
end
|
end
|
||||||
|
|||||||
25
paint.lua
25
paint.lua
@@ -153,14 +153,13 @@ function Pnt.BG.game5()
|
|||||||
else gc.clear(0,0,0)
|
else gc.clear(0,0,0)
|
||||||
end
|
end
|
||||||
end--Lightning
|
end--Lightning
|
||||||
local miniBlockColor={}
|
|
||||||
function Pnt.BG.game6()
|
function Pnt.BG.game6()
|
||||||
local t=1.2-Timer()%10%3%1.2
|
local t=1.2-Timer()%10%3%1.2
|
||||||
if t<.3 then gc.clear(t,t,t)
|
if t<.3 then gc.clear(t,t,t)
|
||||||
else gc.clear(0,0,0)
|
else gc.clear(0,0,0)
|
||||||
end
|
end
|
||||||
local R=7-int(Timer()*.5)%7
|
local R=7-int(Timer()*.5)%7
|
||||||
local _=miniBlockColor[R]
|
local _=skin.libColor[setting.skin[R]]
|
||||||
gc.setColor(_[1],_[2],_[3],.1)
|
gc.setColor(_[1],_[2],_[3],.1)
|
||||||
gc.draw(miniBlock[R],640,360,Timer()%3.1416*6,400,400,scs[R][0][2]-.5,#blocks[R][0]-scs[R][0][1]+.5)
|
gc.draw(miniBlock[R],640,360,Timer()%3.1416*6,400,400,scs[R][0][2]-.5,#blocks[R][0]-scs[R][0][1]+.5)
|
||||||
end--Fast lightning&spining tetromino
|
end--Fast lightning&spining tetromino
|
||||||
@@ -497,13 +496,11 @@ function Pnt.pause()
|
|||||||
gc.rectangle("fill",0,0,scr.w,scr.h)
|
gc.rectangle("fill",0,0,scr.w,scr.h)
|
||||||
gc.pop()
|
gc.pop()
|
||||||
setFont(25)
|
setFont(25)
|
||||||
gc.setColor(1,1,1,T)
|
|
||||||
if pauseCount>0 then
|
if pauseCount>0 then
|
||||||
t=curMode.pauseLimit and pauseTime>30
|
gc.setColor(1,.4,.4,T)
|
||||||
if t then gc.setColor(1,.4,.4,T)end
|
|
||||||
gc.print(text.pauseCount..":["..pauseCount.."] "..format("%.2f",pauseTime).."s",110,150)
|
gc.print(text.pauseCount..":["..pauseCount.."] "..format("%.2f",pauseTime).."s",110,150)
|
||||||
if t then gc.setColor(1,1,1,T)end
|
|
||||||
end
|
end
|
||||||
|
gc.setColor(1,1,1,T)
|
||||||
for i=1,7 do
|
for i=1,7 do
|
||||||
gc.print(text.pauseStat[i],95,30*i+310)
|
gc.print(text.pauseStat[i],95,30*i+310)
|
||||||
gc.print(sceneTemp[i],305,30*i+310)
|
gc.print(sceneTemp[i],305,30*i+310)
|
||||||
@@ -564,10 +561,10 @@ function Pnt.setting_control()
|
|||||||
--Floating number
|
--Floating number
|
||||||
setFont(30)
|
setFont(30)
|
||||||
local _=setting
|
local _=setting
|
||||||
mStr(_.das,226+35*_.das,150)
|
mStr(_.das,226+35*_.das,145)
|
||||||
mStr(_.arr,226+35*_.arr,240)
|
mStr(_.arr,226+35*_.arr,235)
|
||||||
mStr(_.sddas,226+35*_.sddas,330)
|
mStr(_.sddas,226+35*_.sddas,325)
|
||||||
mStr(_.sdarr,226+35*_.sdarr,420)
|
mStr(_.sdarr,226+35*_.sdarr,415)
|
||||||
|
|
||||||
--Testing O mino
|
--Testing O mino
|
||||||
_=blockSkin[setting.skin[6]]
|
_=blockSkin[setting.skin[6]]
|
||||||
@@ -633,17 +630,17 @@ function Pnt.setting_skin()
|
|||||||
for N=1,7 do
|
for N=1,7 do
|
||||||
local face=setting.face[N]
|
local face=setting.face[N]
|
||||||
local B=blocks[N][face]
|
local B=blocks[N][face]
|
||||||
local x,y=-30+140*N-scs[N][face][2]*30,335+scs[N][face][1]*30
|
local x,y=-25+140*N-scs[N][face][2]*30,325+scs[N][face][1]*30
|
||||||
local col=#B[1]
|
local col=#B[1]
|
||||||
for i=1,#B do for j=1,col do
|
for i=1,#B do for j=1,col do
|
||||||
if B[i][j]then
|
if B[i][j]then
|
||||||
gc.draw(blockSkin[setting.skin[N]],x+30*j,y-30*i)
|
gc.draw(blockSkin[setting.skin[N]],x+30*j,y-30*i)
|
||||||
end
|
end
|
||||||
end end
|
end end
|
||||||
gc.circle("fill",-15+140*N,350,sin(Timer()*10)+5)
|
gc.circle("fill",-10+140*N,340,sin(Timer()*10)+5)
|
||||||
end
|
end
|
||||||
for i=1,5 do
|
for i=1,6 do
|
||||||
gc.draw(blockSkin[12+i],1110,140+60*i,nil,2)
|
gc.draw(blockSkin[11+i],1110,100+60*i,nil,2)
|
||||||
end
|
end
|
||||||
gc.draw(drawableText.setting_skin,80,50)
|
gc.draw(drawableText.setting_skin,80,50)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -91,8 +91,8 @@ local TRS={
|
|||||||
[02]={{0,0},{-1,0}, {1,0}, {0,-1}, {0,1} },
|
[02]={{0,0},{-1,0}, {1,0}, {0,-1}, {0,1} },
|
||||||
[20]={{0,0},{1,0}, {-1,0}, {0,1}, {0,-1} },
|
[20]={{0,0},{1,0}, {-1,0}, {0,1}, {0,-1} },
|
||||||
[13]={{0,0},{0,-1}, {-1,0}, {1,0}, {0,1} },
|
[13]={{0,0},{0,-1}, {-1,0}, {1,0}, {0,1} },
|
||||||
[31]={{0,0},{1,0}, {-1,0}},
|
[31]={{0,0},{0,-1}, {1,0}, {-1,0}, {0,1} },
|
||||||
}
|
}--I
|
||||||
}for i=1,7 do collect(TRS[i])end
|
}for i=1,7 do collect(TRS[i])end
|
||||||
local AIRS={
|
local AIRS={
|
||||||
[1]={
|
[1]={
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
--LIGHT MODULE(Optimized by MrZ,Original on github/love2d community/simple-love-lights)
|
--LIGHT MODULE(Optimized by MrZ,Original on github/love2d community/simple-love-lights)
|
||||||
--Heavily based on mattdesl's libGDX implementation:
|
--Heavily based on mattdesl's libGDX implementation:
|
||||||
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
|
--https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows
|
||||||
|
--Private--
|
||||||
local gc=love.graphics
|
local gc=love.graphics
|
||||||
local C=gc.clear
|
local C=gc.clear
|
||||||
local shadowMapShader=gc.newShader("shader/shadowMap.cs")--Shader for caculating the 1D shadow map.
|
local shadowMapShader=gc.newShader("shader/shadowMap.cs")--Shader for caculating the 1D shadow map.
|
||||||
local lightRenderShader=gc.newShader("shader/lightRender.cs")--Shader for rendering blurred lights and shadows.
|
local lightRenderShader=gc.newShader("shader/lightRender.cs")--Shader for rendering blurred lights and shadows.
|
||||||
Lights={}--Lightsource objects
|
local Lights={}--Lightsource objects
|
||||||
local Lights=Lights
|
|
||||||
--Private--
|
|
||||||
local function move(L,x,y)
|
local function move(L,x,y)
|
||||||
L.x,L.y=x,y
|
L.x,L.y=x,y
|
||||||
end
|
end
|
||||||
@@ -51,18 +50,18 @@ local function draw(L)
|
|||||||
--复位
|
--复位
|
||||||
end
|
end
|
||||||
--Public--
|
--Public--
|
||||||
function drawLight()
|
function Lights.draw()
|
||||||
for i=1,#Lights do
|
for i=1,#Lights do
|
||||||
Lights[i]:draw()
|
Lights[i]:draw()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function clearLight(L)
|
function Lights.clear(L)
|
||||||
for i=1,#Lights do
|
for i=#Lights,1,-1 do
|
||||||
Lights[i]:destroy()
|
Lights[i]:destroy()
|
||||||
Lights[i]=nil
|
Lights[i]=nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function addLight(x,y,R,F)
|
function Lights.add(x,y,R,F)
|
||||||
local id=#Lights+1
|
local id=#Lights+1
|
||||||
Lights[id]={
|
Lights[id]={
|
||||||
id=id,
|
id=id,
|
||||||
@@ -77,4 +76,5 @@ function addLight(x,y,R,F)
|
|||||||
draw=draw,
|
draw=draw,
|
||||||
destroy=destroy,
|
destroy=destroy,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
return Lights
|
||||||
@@ -75,7 +75,7 @@ voiceList={
|
|||||||
mini={"mini_1","mini_2","mini_3"},
|
mini={"mini_1","mini_2","mini_3"},
|
||||||
b2b={"b2b_1","b2b_2","b2b_3"},
|
b2b={"b2b_1","b2b_2","b2b_3"},
|
||||||
b3b={"b3b_1","b3b_2"},
|
b3b={"b3b_1","b3b_2"},
|
||||||
pc={"perfectclear_1","perfectclear_2"},
|
pc={"clear_1","clear_2"},
|
||||||
win={"win_1","win_2","win_3","win_4","win_5","win_6","win_6","win_7"},
|
win={"win_1","win_2","win_3","win_4","win_5","win_6","win_6","win_7"},
|
||||||
lose={"lose_1","lose_2","lose_3"},
|
lose={"lose_1","lose_2","lose_3"},
|
||||||
bye={"bye_1","bye_2"},
|
bye={"bye_1","bye_2"},
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ SFX.list={
|
|||||||
"clear_1","clear_2","clear_3","clear_4",
|
"clear_1","clear_2","clear_3","clear_4",
|
||||||
"spin_0","spin_1","spin_2","spin_3",
|
"spin_0","spin_1","spin_2","spin_3",
|
||||||
"emit","blip_1","blip_2",
|
"emit","blip_1","blip_2",
|
||||||
"perfectclear",
|
"clear",
|
||||||
|
|
||||||
"error",
|
"error",
|
||||||
--Mono sfxs
|
--Mono sfxs
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ function space.draw()
|
|||||||
if not stars[1]then return end
|
if not stars[1]then return end
|
||||||
gc.translate(-50,-50)
|
gc.translate(-50,-50)
|
||||||
gc.setLineWidth(7)
|
gc.setLineWidth(7)
|
||||||
gc.setColor(planet.R,planet.G,planet.B,.1626)
|
gc.setColor(planet.R,planet.G,planet.B,.026)
|
||||||
gc.circle("line",planet.x,planet.y,planet.r+1)
|
gc.circle("line",planet.x,planet.y,planet.r+1)
|
||||||
gc.setColor(planet.R,.6,planet.B,.26)
|
gc.setColor(planet.R,.6,planet.B,.0626)
|
||||||
gc.circle("fill",planet.x,planet.y,planet.r)
|
gc.circle("fill",planet.x,planet.y,planet.r)
|
||||||
gc.setColor(.9,.9,.9)
|
gc.setColor(.9,.9,.9)
|
||||||
for i=1,2600,5 do
|
for i=1,2600,5 do
|
||||||
|
|||||||
240
player.lua
240
player.lua
@@ -13,6 +13,7 @@ local gameEnv0={
|
|||||||
quickR=true,swap=true,
|
quickR=true,swap=true,
|
||||||
ghost=true,center=true,
|
ghost=true,center=true,
|
||||||
smooth=false,grid=false,
|
smooth=false,grid=false,
|
||||||
|
text=true,
|
||||||
lockFX=3,dropFX=3,
|
lockFX=3,dropFX=3,
|
||||||
shakeFX=3,
|
shakeFX=3,
|
||||||
|
|
||||||
@@ -53,14 +54,9 @@ local spinSCR={--[blockName][row]
|
|||||||
--B2BMUL:1.2/2.0
|
--B2BMUL:1.2/2.0
|
||||||
--Techrash:1K;MUL:1.3/1.8
|
--Techrash:1K;MUL:1.3/1.8
|
||||||
--Mini*=.6
|
--Mini*=.6
|
||||||
local visible_opt={show=1e99,time=300,fast=20,none=5}
|
local visible_opt={show=1e99,time=300,fast=20,none=0}
|
||||||
local reAtk={0,0,1,1,1,2,2,3,3}
|
local reAtk={0,0,1,1,1,2,2,3,3}
|
||||||
local reDef={0,1,1,2,3,3,4,4,5}
|
local reDef={0,1,1,2,3,3,4,4,5}
|
||||||
local spinName={"zspin","sspin","lspin","jspin","tspin","ospin","ispin"}
|
|
||||||
local clearName={"single","double","triple"}
|
|
||||||
local spin_n={[0]="spin_0","spin_1","spin_2","spin_3"}
|
|
||||||
local clear_n={"clear_1","clear_2","clear_3","clear_4"}
|
|
||||||
local ren_n={}for i=1,11 do ren_n[i]="ren_"..i end
|
|
||||||
local initCenterX={6,6,6,6,6,6.5,6.5}--1 added
|
local initCenterX={6,6,6,6,6,6.5,6.5}--1 added
|
||||||
local initCenterY={22,22,22,22,22,22.5,21.5}--1 added
|
local initCenterY={22,22,22,22,22,22.5,21.5}--1 added
|
||||||
local CCblockID={4,3,5,6,1,2,0}
|
local CCblockID={4,3,5,6,1,2,0}
|
||||||
@@ -69,7 +65,7 @@ local kickList=require("parts/kickList")
|
|||||||
local finesseCtrlPar={
|
local finesseCtrlPar={
|
||||||
[1]={
|
[1]={
|
||||||
{1,2,1,0,1,2,2,1},
|
{1,2,1,0,1,2,2,1},
|
||||||
{2,2,3,1,1,2,3,2,2},
|
{2,2,2,1,1,2,3,2,2},
|
||||||
},--Z
|
},--Z
|
||||||
[3]={
|
[3]={
|
||||||
{1,2,1,0,1,2,2,1},
|
{1,2,1,0,1,2,2,1},
|
||||||
@@ -92,42 +88,42 @@ local CCblockID={4,3,5,6,1,2,0}
|
|||||||
local freshMethod={
|
local freshMethod={
|
||||||
none=NULL,
|
none=NULL,
|
||||||
bag7=function(P)
|
bag7=function(P)
|
||||||
if #P.next<6 then
|
local bag={1,2,3,4,5,6,7}
|
||||||
local bag={1,2,3,4,5,6,7}
|
::L::P:getNext(rem(bag,rnd(#bag)))
|
||||||
::L::P:getNext(rem(bag,rnd(#bag)))
|
if bag[1]then goto L end
|
||||||
if bag[1]then goto L end
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
his4=function(P)
|
his4=function(P)
|
||||||
if #P.next<6 then
|
local i
|
||||||
local j,i=0
|
local j=0
|
||||||
repeat
|
repeat
|
||||||
i,j=rnd(7),j+1
|
i=rnd(7)
|
||||||
until i~=P.his[1]and i~=P.his[2]and i~=P.his[3]and i~=P.his[4]
|
j=j+1
|
||||||
P:getNext(i)
|
until i~=P.his[1]and i~=P.his[2]and i~=P.his[3]and i~=P.his[4]and j<6
|
||||||
rem(P.his,1)P.his[4]=i
|
P:getNext(i)
|
||||||
end
|
rem(P.his,1)P.his[4]=i
|
||||||
end,
|
end,
|
||||||
rnd=function(P)
|
rnd=function(P)
|
||||||
::L::local i=rnd(7)
|
local i
|
||||||
if i==P.next[5].id then goto L end
|
::L::i=rnd(7)
|
||||||
|
if P.next[1]and i==P.next[#P.next].id then goto L end
|
||||||
P:getNext(i)
|
P:getNext(i)
|
||||||
end,--random
|
end,
|
||||||
drought1=function(P)
|
drought1=function(P)
|
||||||
if #P.next<6 then
|
local bag={1,2,3,4,5,6}
|
||||||
local bag={1,2,3,4,5,6}
|
::L::P:getNext(rem(bag,rnd(#bag)))
|
||||||
::L::P:getNext(rem(bag,rnd(#bag)))
|
if bag[1]then goto L end
|
||||||
if bag[1]then goto L end
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
drought2=function(P)
|
drought2=function(P)
|
||||||
if #P.next<6 then
|
local bag={1,1,1,1,2,2,2,2,6,6,6,6,3,3,4,4,5,7}
|
||||||
local bag={1,1,1,1,2,2,2,2,6,6,6,6,3,3,4,4,5,7}
|
::L::P:getNext(rem(bag,rnd(#bag)))
|
||||||
::L::P:getNext(rem(bag,rnd(#bag)))
|
if bag[1]then goto L end
|
||||||
if bag[1]then goto L end
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
|
local spinName={"zspin","sspin","lspin","jspin","tspin","ospin","ispin"}
|
||||||
|
local clearName={"single","double","triple"}
|
||||||
|
local spin_n={[0]="spin_0","spin_1","spin_2","spin_3"}
|
||||||
|
local clear_n={"clear_1","clear_2","clear_3","clear_4"}
|
||||||
|
local ren_n={}for i=1,11 do ren_n[i]="ren_"..i end
|
||||||
-------------------------</GameData>------------------------
|
-------------------------</GameData>------------------------
|
||||||
|
|
||||||
--------------------------<Pnt/Upd>-------------------------
|
--------------------------<Pnt/Upd>-------------------------
|
||||||
@@ -394,7 +390,7 @@ end
|
|||||||
local function Pdraw_small(P)
|
local function Pdraw_small(P)
|
||||||
P.frameWait=P.frameWait-1
|
P.frameWait=P.frameWait-1
|
||||||
if P.frameWait==0 then
|
if P.frameWait==0 then
|
||||||
P.frameWait=8
|
P.frameWait=10
|
||||||
gc.setCanvas(P.canvas)
|
gc.setCanvas(P.canvas)
|
||||||
gc.clear(0,0,0,.4)
|
gc.clear(0,0,0,.4)
|
||||||
gc.push("transform")
|
gc.push("transform")
|
||||||
@@ -607,7 +603,7 @@ local function Pupdate_alive(P,dt)
|
|||||||
P.AI_stage=AI_think[P.AI_mode][P.AI_stage](P,C)
|
P.AI_stage=AI_think[P.AI_mode][P.AI_stage](P,C)
|
||||||
elseif P.AI_delay<=0 then
|
elseif P.AI_delay<=0 then
|
||||||
P:pressKey(C[1])P:releaseKey(C[1])
|
P:pressKey(C[1])P:releaseKey(C[1])
|
||||||
local k=#C for i=1,k do C[i]=C[i+1]end--table.remove(C,1)
|
rem(C,1)
|
||||||
P.AI_delay=P.AI_delay0*2
|
P.AI_delay=P.AI_delay0*2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -712,7 +708,7 @@ local function Pupdate_alive(P,dt)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not P.control then goto stop end
|
if not P.control then goto stop end
|
||||||
if P.waiting==0 then P:freshNext()end
|
if P.waiting==0 then P:popNext()end
|
||||||
if P.waiting>=0 then
|
if P.waiting>=0 then
|
||||||
P.waiting=P.waiting-1
|
P.waiting=P.waiting-1
|
||||||
goto stop
|
goto stop
|
||||||
@@ -797,10 +793,13 @@ player={}local player=player
|
|||||||
----------------------------<FX>----------------------------
|
----------------------------<FX>----------------------------
|
||||||
local textFX=textFX
|
local textFX=textFX
|
||||||
function player.showText(P,text,dx,dy,font,style,spd,stop)
|
function player.showText(P,text,dx,dy,font,style,spd,stop)
|
||||||
if P.bonus then
|
if P.gameEnv.text then
|
||||||
P.bonus[#P.bonus+1]=getTEXT(text,150+dx,300+dy,font*P.size,style,spd,stop)
|
P.bonus[#P.bonus+1]=getTEXT(text,150+dx,300+dy,font*P.size,style,spd,stop)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function player.showTextF(P,text,dx,dy,font,style,spd,stop)
|
||||||
|
P.bonus[#P.bonus+1]=getTEXT(text,150+dx,300+dy,font*P.size,style,spd,stop)
|
||||||
|
end
|
||||||
local function without(L,e)
|
local function without(L,e)
|
||||||
for i=1,#L do
|
for i=1,#L do
|
||||||
if L[i]==e then return end
|
if L[i]==e then return end
|
||||||
@@ -809,7 +808,7 @@ local function without(L,e)
|
|||||||
end
|
end
|
||||||
function player.createLockFX(P)
|
function player.createLockFX(P)
|
||||||
local BK=P.cur.bk
|
local BK=P.cur.bk
|
||||||
local t=.1-P.gameEnv.lockFX*.02
|
local t=.3-P.gameEnv.lockFX*.06
|
||||||
for i=1,P.r do
|
for i=1,P.r do
|
||||||
local y=P.curY+i-1
|
local y=P.curY+i-1
|
||||||
if without(P.clearedRow,y)then
|
if without(P.clearedRow,y)then
|
||||||
@@ -821,7 +820,7 @@ function player.createLockFX(P)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.createShade(P,x1,y1,x2,y2)--x1<x2,y1>y2!
|
function player.createDropFX(P,x1,y1,x2,y2)--x1<x2,y1>y2!
|
||||||
if P.gameEnv.block and y1>=y2 then
|
if P.gameEnv.block and y1>=y2 then
|
||||||
P.dropFX[#P.dropFX+1]={5,P.cur.color,x1,y1,x2,y2}
|
P.dropFX[#P.dropFX+1]={5,P.cur.color,x1,y1,x2,y2}
|
||||||
end
|
end
|
||||||
@@ -1077,7 +1076,7 @@ function player.freshgho(P)
|
|||||||
end
|
end
|
||||||
if P.curY>P.y_img then
|
if P.curY>P.y_img then
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX then
|
||||||
P:createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
||||||
end
|
end
|
||||||
if P.gameEnv.shakeFX then
|
if P.gameEnv.shakeFX then
|
||||||
P.fieldOff.vy=P.gameEnv.shakeFX*.5
|
P.fieldOff.vy=P.gameEnv.shakeFX*.5
|
||||||
@@ -1170,7 +1169,7 @@ function player.spin(P,d,ifpre)
|
|||||||
do return end
|
do return end
|
||||||
::spin::
|
::spin::
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX then
|
||||||
P:createShade(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY)
|
P:createDropFX(P.curX,P.curY+P.r-1,P.curX+P.c-1,P.curY)
|
||||||
end
|
end
|
||||||
local y0=P.curY
|
local y0=P.curY
|
||||||
P.curX,P.curY,P.dir=ix,iy,idir
|
P.curX,P.curY,P.dir=ix,iy,idir
|
||||||
@@ -1217,7 +1216,9 @@ function player.hold(P,ifpre)
|
|||||||
P.hd.bk=blocks[hid][P.gameEnv.face[hid]]
|
P.hd.bk=blocks[hid][P.gameEnv.face[hid]]
|
||||||
if P.cur.id==0 then
|
if P.cur.id==0 then
|
||||||
P.cur=rem(P.next,1)
|
P.cur=rem(P.next,1)
|
||||||
P:newNext()
|
if #P.next<P.gameEnv.next then
|
||||||
|
P:newNext()
|
||||||
|
end
|
||||||
if P.AI_mode=="CC"then BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])end
|
if P.AI_mode=="CC"then BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])end
|
||||||
end
|
end
|
||||||
P:resetBlock()
|
P:resetBlock()
|
||||||
@@ -1233,17 +1234,19 @@ function player.hold(P,ifpre)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function player.getNext(P,n)
|
function player.getNext(P,n)
|
||||||
P.next[#P.next+1]={bk=blocks[n][P.gameEnv.face[n]],id=n,color=P.gameEnv.bone and 12 or P.gameEnv.skin[n],name=n}
|
local E=P.gameEnv
|
||||||
|
P.next[#P.next+1]={bk=blocks[n][E.face[n]],id=n,color=E.bone and 12 or E.skin[n],name=n}
|
||||||
end
|
end
|
||||||
--function player.newNext()--check/add new next to next queue,defined when create player
|
function player.popNext(P)--pop next queue to hand
|
||||||
function player.freshNext(P)
|
|
||||||
P.holded=false
|
P.holded=false
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
P.spinSeq=0
|
P.spinSeq=0
|
||||||
P.ctrlCount=0
|
P.ctrlCount=0
|
||||||
|
|
||||||
P.cur=rem(P.next,1)
|
P.cur=rem(P.next,1)
|
||||||
P:newNext()
|
if #P.next<P.gameEnv.next then
|
||||||
|
P:newNext()
|
||||||
|
end
|
||||||
if P.AI_mode=="CC"then BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])end
|
if P.AI_mode=="CC"then BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])end
|
||||||
local _=P.keyPressing
|
local _=P.keyPressing
|
||||||
if P.gameEnv.hold and _[8]then
|
if P.gameEnv.hold and _[8]then
|
||||||
@@ -1278,6 +1281,8 @@ function player.drop(P)--Place piece
|
|||||||
P.dropTime[11]=ins(P.dropTime,1,frame)--update speed dial
|
P.dropTime[11]=ins(P.dropTime,1,frame)--update speed dial
|
||||||
local cmb=P.combo
|
local cmb=P.combo
|
||||||
P.waiting=P.gameEnv.wait
|
P.waiting=P.gameEnv.wait
|
||||||
|
local clear--if (perfect)clear
|
||||||
|
local cc=0--cleared row
|
||||||
local send,exblock=0,0--Send&Send Time
|
local send,exblock=0,0--Send&Send Time
|
||||||
local cscore,sendTime=0,0
|
local cscore,sendTime=0,0
|
||||||
local dospin=0
|
local dospin=0
|
||||||
@@ -1305,7 +1310,6 @@ function player.drop(P)--Place piece
|
|||||||
--清空消行列表
|
--清空消行列表
|
||||||
if P.clearedRow[1]then P.clearedRow={}end
|
if P.clearedRow[1]then P.clearedRow={}end
|
||||||
--消行
|
--消行
|
||||||
local cc=0
|
|
||||||
for i=0,P.r-1 do
|
for i=0,P.r-1 do
|
||||||
local h=P.curY+i
|
local h=P.curY+i
|
||||||
if P:ckfull(h)then
|
if P:ckfull(h)then
|
||||||
@@ -1321,13 +1325,15 @@ function player.drop(P)--Place piece
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
_=#P.clearingRow
|
|
||||||
::L::if _>0 and P.clearingRow[_]>#P.field then
|
--处理锁定特效
|
||||||
P.clearingRow[_]=nil
|
if P.gameEnv.lockFX then
|
||||||
_=_-1
|
if cc==0 then
|
||||||
goto L
|
P:createLockFX()
|
||||||
|
elseif P.lockFX[1]then
|
||||||
|
P.lockFX={}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if P.clearingRow[1]then P.falling=P.gameEnv.fall end
|
|
||||||
|
|
||||||
--处理锁定特效
|
--处理锁定特效
|
||||||
if P.gameEnv.lockFX then
|
if P.gameEnv.lockFX then
|
||||||
@@ -1381,14 +1387,32 @@ function player.drop(P)--Place piece
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
finesse=true
|
||||||
end
|
end
|
||||||
::L2::
|
::L2::
|
||||||
|
|
||||||
--移除消去的行
|
--移除消去的行
|
||||||
for i=cc,1,-1 do
|
if cc>0 then
|
||||||
_=P.clearedRow[i]
|
for i=cc,1,-1 do
|
||||||
freeRow.discard(rem(P.field,_))
|
_=P.clearedRow[i]
|
||||||
freeRow.discard(rem(P.visTime,_))
|
freeRow.discard(rem(P.field,_))
|
||||||
|
freeRow.discard(rem(P.visTime,_))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
--清除超高特效
|
||||||
|
_=#P.clearingRow
|
||||||
|
::L::if _>0 then
|
||||||
|
if P.clearingRow[_]>#P.field then
|
||||||
|
P.clearingRow[_]=nil
|
||||||
|
_=_-1
|
||||||
|
goto L
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if P.clearingRow[1]then
|
||||||
|
P.falling=P.gameEnv.fall
|
||||||
|
elseif cc==P.r then
|
||||||
|
clear=true
|
||||||
end
|
end
|
||||||
|
|
||||||
if not finesse then--极简判定:操作判断法
|
if not finesse then--极简判定:操作判断法
|
||||||
@@ -1489,7 +1513,7 @@ function player.drop(P)--Place piece
|
|||||||
SFX.play(spin_n[cc])
|
SFX.play(spin_n[cc])
|
||||||
VOICE(spinName[P.cur.name],CHN)
|
VOICE(spinName[P.cur.name],CHN)
|
||||||
end
|
end
|
||||||
elseif #P.field>0 then
|
elseif not clear then
|
||||||
P.b2b=max(P.b2b-250,0)
|
P.b2b=max(P.b2b-250,0)
|
||||||
P:showText(text.clear[cc],0,-30,27+cc*3,"appear",(8-cc)*.3)
|
P:showText(text.clear[cc],0,-30,27+cc*3,"appear",(8-cc)*.3)
|
||||||
send=cc-.75
|
send=cc-.75
|
||||||
@@ -1508,21 +1532,31 @@ function player.drop(P)--Place piece
|
|||||||
P:showText(text.cmb[min(cmb,20)],0,25,15+min(cmb,25)*3,cmb<10 and"appear"or"flicker")
|
P:showText(text.cmb[min(cmb,20)],0,25,15+min(cmb,25)*3,cmb<10 and"appear"or"flicker")
|
||||||
cscore=cscore+min(20*cmb,300)*cc
|
cscore=cscore+min(20*cmb,300)*cc
|
||||||
end
|
end
|
||||||
if #P.field==0 then
|
if clear then
|
||||||
P:showText(text.PC,0,-80,50,"flicker")
|
if #P.field==0 then
|
||||||
send=send^.5+min(6+P.stat.pc,10)
|
P:showText(text.PC,0,-80,50,"flicker")
|
||||||
exblock=exblock+2
|
send=send^.5+min(6+P.stat.pc,10)
|
||||||
sendTime=sendTime+60
|
exblock=exblock+2
|
||||||
if P.stat.row+cc>4 then
|
sendTime=sendTime+120
|
||||||
P.b2b=1200
|
if P.stat.row+cc>4 then
|
||||||
cscore=cscore+300*min(6+P.stat.pc,10)
|
P.b2b=1200
|
||||||
|
cscore=cscore+300*min(6+P.stat.pc,10)
|
||||||
|
else
|
||||||
|
cscore=cscore+626
|
||||||
|
end
|
||||||
|
P.stat.pc=P.stat.pc+1
|
||||||
|
P.lastClear=P.cur.id*10+5
|
||||||
else
|
else
|
||||||
|
P:showText(text.C,0,-80,50,"fly")
|
||||||
|
send=send+2
|
||||||
|
exblock=exblock+2
|
||||||
|
sendTime=sendTime+60
|
||||||
cscore=cscore+626
|
cscore=cscore+626
|
||||||
|
P.stat.c=P.stat.c+1
|
||||||
|
P.lastClear=cc
|
||||||
end
|
end
|
||||||
P.stat.pc=P.stat.pc+1
|
|
||||||
P.lastClear=P.cur.id*10+5
|
|
||||||
if P.human then
|
if P.human then
|
||||||
SFX.play("perfectclear")
|
SFX.play("clear")
|
||||||
VOICE("pc",CHN)
|
VOICE("pc",CHN)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -1698,7 +1732,7 @@ local function gameOver()
|
|||||||
end
|
end
|
||||||
if p<10 then
|
if p<10 then
|
||||||
if p==0 then
|
if p==0 then
|
||||||
P:showText(text.newRecord,0,-100,100,"beat",.5)
|
P:showTextF(text.newRecord,0,-100,100,"beat",.5)
|
||||||
end
|
end
|
||||||
D.date=os.date("%Y/%m/%d %H:%M")
|
D.date=os.date("%Y/%m/%d %H:%M")
|
||||||
ins(L,p+1,D)
|
ins(L,p+1,D)
|
||||||
@@ -1748,9 +1782,9 @@ function player.win(P,result)
|
|||||||
end
|
end
|
||||||
newTask(Event_task.finish,P)
|
newTask(Event_task.finish,P)
|
||||||
if curMode.id=="custom_puzzle"then
|
if curMode.id=="custom_puzzle"then
|
||||||
P:showText(text.win,0,0,90,"beat",.4)
|
P:showTextF(text.win,0,0,90,"beat",.4)
|
||||||
else
|
else
|
||||||
P:showText(text.win,0,0,90,"beat",.5,.2)
|
P:showTextF(text.win,0,0,90,"beat",.5,.2)
|
||||||
end
|
end
|
||||||
if P.human then
|
if P.human then
|
||||||
gameOver()
|
gameOver()
|
||||||
@@ -1779,7 +1813,7 @@ function player.lose(P)
|
|||||||
if modeEnv.royaleMode then
|
if modeEnv.royaleMode then
|
||||||
P:changeAtk()
|
P:changeAtk()
|
||||||
P.modeData.event=#players.alive+1
|
P.modeData.event=#players.alive+1
|
||||||
P:showText(P.modeData.event,0,-120,60,"appear",1,12)
|
P:showTextF(P.modeData.event,0,-120,60,"appear",1,12)
|
||||||
P.strength=0
|
P.strength=0
|
||||||
if P.lastRecv then
|
if P.lastRecv then
|
||||||
local A,i=P,0
|
local A,i=P,0
|
||||||
@@ -1816,7 +1850,7 @@ function player.lose(P)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
P.gameEnv.keepVisible=P.gameEnv.visible~="show"
|
P.gameEnv.keepVisible=P.gameEnv.visible~="show"
|
||||||
P:showText(text.lose,0,0,90,"appear",.5,.2)
|
P:showTextF(text.lose,0,0,90,"appear",.5,.2)
|
||||||
if P.human then
|
if P.human then
|
||||||
gameResult="lose"
|
gameResult="lose"
|
||||||
SFX.play("fail")
|
SFX.play("fail")
|
||||||
@@ -1917,7 +1951,7 @@ function player.act.hardDrop(P)
|
|||||||
elseif P.control and P.waiting==-1 then
|
elseif P.control and P.waiting==-1 then
|
||||||
if P.curY~=P.y_img then
|
if P.curY~=P.y_img then
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX then
|
||||||
P:createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
||||||
end
|
end
|
||||||
P.curY=P.y_img
|
P.curY=P.y_img
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
@@ -1969,7 +2003,7 @@ function player.act.insLeft(P,auto)
|
|||||||
while not P:ifoverlap(P.cur.bk,P.curX-1,P.curY)do
|
while not P:ifoverlap(P.cur.bk,P.curX-1,P.curY)do
|
||||||
P.curX=P.curX-1
|
P.curX=P.curX-1
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX then
|
||||||
P:createShade(P.curX+P.c,P.curY+P.r-1,P.curX+P.c,P.curY)
|
P:createDropFX(P.curX+P.c,P.curY+P.r-1,P.curX+P.c,P.curY)
|
||||||
end
|
end
|
||||||
P:freshgho()
|
P:freshgho()
|
||||||
end
|
end
|
||||||
@@ -1991,7 +2025,7 @@ function player.act.insRight(P,auto)
|
|||||||
while not P:ifoverlap(P.cur.bk,P.curX+1,P.curY)do
|
while not P:ifoverlap(P.cur.bk,P.curX+1,P.curY)do
|
||||||
P.curX=P.curX+1
|
P.curX=P.curX+1
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX then
|
||||||
P:createShade(P.curX-1,P.curY+P.r-1,P.curX-1,P.curY)
|
P:createDropFX(P.curX-1,P.curY+P.r-1,P.curX-1,P.curY)
|
||||||
end
|
end
|
||||||
P:freshgho()
|
P:freshgho()
|
||||||
end
|
end
|
||||||
@@ -2010,7 +2044,7 @@ end
|
|||||||
function player.act.insDown(P)
|
function player.act.insDown(P)
|
||||||
if P.curY~=P.y_img then
|
if P.curY~=P.y_img then
|
||||||
if P.gameEnv.dropFX then
|
if P.gameEnv.dropFX then
|
||||||
P:createShade(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
P:createDropFX(P.curX,P.curY+1,P.curX+P.c-1,P.y_img+P.r-1)
|
||||||
end
|
end
|
||||||
if P.gameEnv.shakeFX then
|
if P.gameEnv.shakeFX then
|
||||||
P.fieldOff.vy=P.gameEnv.shakeFX*.5
|
P.fieldOff.vy=P.gameEnv.shakeFX*.5
|
||||||
@@ -2094,7 +2128,7 @@ function newDemoPlayer(id,x,y,size)
|
|||||||
atk=0,send=0,recv=0,pend=0,
|
atk=0,send=0,recv=0,pend=0,
|
||||||
clear_1=0,clear_2=0,clear_3=0,clear_4=0,
|
clear_1=0,clear_2=0,clear_3=0,clear_4=0,
|
||||||
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
|
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
|
||||||
pc=0,b2b=0,b3b=0,
|
pc=0,c=0,b2b=0,b3b=0,
|
||||||
}
|
}
|
||||||
P.modeData={point=0,event=0,counter=0}
|
P.modeData={point=0,event=0,counter=0}
|
||||||
P.keyTime={}P.keySpeed=0
|
P.keyTime={}P.keySpeed=0
|
||||||
@@ -2111,6 +2145,7 @@ function newDemoPlayer(id,x,y,size)
|
|||||||
quickR=true,swap=true,
|
quickR=true,swap=true,
|
||||||
ghost=setting.ghost,center=setting.center,
|
ghost=setting.ghost,center=setting.center,
|
||||||
smooth=setting.smooth,grid=setting.grid,
|
smooth=setting.smooth,grid=setting.grid,
|
||||||
|
text=setting.text,
|
||||||
lockFX=setting.lockFX,dropFX=setting.dropFX,
|
lockFX=setting.lockFX,dropFX=setting.dropFX,
|
||||||
shakeFX=setting.shakeFX,
|
shakeFX=setting.shakeFX,
|
||||||
|
|
||||||
@@ -2122,7 +2157,7 @@ function newDemoPlayer(id,x,y,size)
|
|||||||
ospin=true,
|
ospin=true,
|
||||||
sequence="bag7",
|
sequence="bag7",
|
||||||
face={0,0,0,0,0,0,0},
|
face={0,0,0,0,0,0,0},
|
||||||
skin={1,5,2,8,10,3,7},
|
skin=setting.skin,
|
||||||
|
|
||||||
pushSpeed=3,
|
pushSpeed=3,
|
||||||
block=true,
|
block=true,
|
||||||
@@ -2154,15 +2189,8 @@ function newDemoPlayer(id,x,y,size)
|
|||||||
P.spinSeq=0
|
P.spinSeq=0
|
||||||
P.ctrlCount=0
|
P.ctrlCount=0
|
||||||
|
|
||||||
local bag1={1,2,3,4,5,6,7}
|
|
||||||
for _=1,7 do
|
|
||||||
P:getNext(rem(bag1,rnd(#bag1)))
|
|
||||||
end
|
|
||||||
P.newNext=freshMethod.bag7
|
P.newNext=freshMethod.bag7
|
||||||
if ENV.sequence==1 then P.bag={}
|
P:newNext()
|
||||||
elseif ENV.sequence==2 then P.his={}for i=1,4 do P.his[i]=P.next.id[i+3]end
|
|
||||||
elseif ENV.sequence==3 then
|
|
||||||
end
|
|
||||||
|
|
||||||
P.human=false
|
P.human=false
|
||||||
P.AI_mode="CC"
|
P.AI_mode="CC"
|
||||||
@@ -2202,7 +2230,7 @@ function newDemoPlayer(id,x,y,size)
|
|||||||
P.dust=clearDust:clone()
|
P.dust=clearDust:clone()
|
||||||
P.dust:start()
|
P.dust:start()
|
||||||
|
|
||||||
P:freshNext()
|
P:popNext()
|
||||||
end
|
end
|
||||||
function newPlayer(id,x,y,size,AIdata)
|
function newPlayer(id,x,y,size,AIdata)
|
||||||
players[id]={id=id}
|
players[id]={id=id}
|
||||||
@@ -2239,7 +2267,7 @@ function newPlayer(id,x,y,size,AIdata)
|
|||||||
atk=0,send=0,recv=0,pend=0,
|
atk=0,send=0,recv=0,pend=0,
|
||||||
clear_1=0,clear_2=0,clear_3=0,clear_4=0,
|
clear_1=0,clear_2=0,clear_3=0,clear_4=0,
|
||||||
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
|
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
|
||||||
pc=0,b2b=0,b3b=0,
|
pc=0,c=0,b2b=0,b3b=0,
|
||||||
}--Current gamestat
|
}--Current gamestat
|
||||||
P.modeData={point=0,event=0,counter=0}--data use by mode
|
P.modeData={point=0,event=0,counter=0}--data use by mode
|
||||||
P.keyTime={}for i=1,10 do P.keyTime[i]=-1e5 end P.keySpeed=0
|
P.keyTime={}for i=1,10 do P.keyTime[i]=-1e5 end P.keySpeed=0
|
||||||
@@ -2281,33 +2309,11 @@ function newPlayer(id,x,y,size,AIdata)
|
|||||||
P.ctrlCount=0--key press time,for finesse check
|
P.ctrlCount=0--key press time,for finesse check
|
||||||
|
|
||||||
P.his={rnd(7),rnd(7),rnd(7),rnd(7)}
|
P.his={rnd(7),rnd(7),rnd(7),rnd(7)}
|
||||||
local s=ENV.sequence
|
|
||||||
if s=="bag7"or s=="his4"then
|
|
||||||
local bag1={1,2,3,4,5,6,7}
|
|
||||||
for _=1,7 do
|
|
||||||
P:getNext(rem(bag1,rnd(#bag1)))
|
|
||||||
end
|
|
||||||
elseif s=="rnd"then
|
|
||||||
for _=1,6 do
|
|
||||||
local r=rnd(7)
|
|
||||||
P:getNext(r)
|
|
||||||
end
|
|
||||||
elseif s=="drought1"then
|
|
||||||
local bag1={1,2,3,4,5,6}
|
|
||||||
for _=1,6 do
|
|
||||||
P:getNext(rem(bag1,rnd(#bag1)))
|
|
||||||
end
|
|
||||||
elseif s=="drought2"then
|
|
||||||
local bag1={1,2,3,4,6,6}
|
|
||||||
for _=1,6 do
|
|
||||||
P:getNext(rem(bag1,rnd(#bag1)))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
P.newNext=freshMethod[ENV.sequence]
|
P.newNext=freshMethod[ENV.sequence]
|
||||||
if ENV.sequence==1 then P.bag={}--Bag7
|
if ENV.sequence~="none"then
|
||||||
elseif ENV.sequence==2 then P.his={}for i=1,4 do P.his[i]=P.next.id[i+3]end--History4
|
while #P.next<P.gameEnv.next do
|
||||||
elseif ENV.sequence==3 then--Pure random
|
P:newNext()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if AIdata then
|
if AIdata then
|
||||||
@@ -2351,6 +2357,7 @@ function newPlayer(id,x,y,size,AIdata)
|
|||||||
ENV.next=min(ENV.next,setting.maxNext)
|
ENV.next=min(ENV.next,setting.maxNext)
|
||||||
end
|
end
|
||||||
if P.small then
|
if P.small then
|
||||||
|
ENV.text=false
|
||||||
ENV.lockFX=nil
|
ENV.lockFX=nil
|
||||||
ENV.dropFX=nil
|
ENV.dropFX=nil
|
||||||
ENV.shakeFX=nil
|
ENV.shakeFX=nil
|
||||||
@@ -2378,6 +2385,7 @@ function newPlayer(id,x,y,size,AIdata)
|
|||||||
|
|
||||||
P.score1,P.b2b1=0,0
|
P.score1,P.b2b1=0,0
|
||||||
P.dropFX,P.lockFX={},{}
|
P.dropFX,P.lockFX={},{}
|
||||||
|
P.bonus={}--texts
|
||||||
|
|
||||||
P.endCounter=0--used after gameover
|
P.endCounter=0--used after gameover
|
||||||
P.result=nil--string:"WIN"/"K.O."
|
P.result=nil--string:"WIN"/"K.O."
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ local sceneInit={
|
|||||||
S.clear_1.."/"..S.clear_2.."/"..S.clear_3.."/"..S.clear_4,
|
S.clear_1.."/"..S.clear_2.."/"..S.clear_3.."/"..S.clear_4,
|
||||||
"["..S.spin_0.."]/"..S.spin_1.."/"..S.spin_2.."/"..S.spin_3,
|
"["..S.spin_0.."]/"..S.spin_1.."/"..S.spin_2.."/"..S.spin_3,
|
||||||
S.b2b.."[+"..S.b3b.."]",
|
S.b2b.."[+"..S.b3b.."]",
|
||||||
S.pc,
|
S.pc.."["..S.c.."]",
|
||||||
format("%.3f",S.atk/S.row),
|
format("%.3f",S.atk/S.row),
|
||||||
S.extraPiece,
|
S.extraPiece,
|
||||||
format("%.2f%%",100*max(1-S.extraRate/S.piece,0)),
|
format("%.2f%%",100*max(1-S.extraRate/S.piece,0)),
|
||||||
@@ -160,7 +160,7 @@ local sceneInit={
|
|||||||
format("%d/%d/%d/%d",S.clear_1,S.clear_2,S.clear_3,S.clear_4),
|
format("%d/%d/%d/%d",S.clear_1,S.clear_2,S.clear_3,S.clear_4),
|
||||||
format("[%d]/%d/%d/%d",S.spin_0,S.spin_1,S.spin_2,S.spin_3),
|
format("[%d]/%d/%d/%d",S.spin_0,S.spin_1,S.spin_2,S.spin_3),
|
||||||
S.b2b.."[+"..S.b3b.."]",
|
S.b2b.."[+"..S.b3b.."]",
|
||||||
S.pc,
|
S.pc.."["..S.c.."]",
|
||||||
format("%.2f",S.atk/S.row),
|
format("%.2f",S.atk/S.row),
|
||||||
format("%d[%.3f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)),
|
format("%d[%.3f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -357,7 +357,7 @@ function gameStart()
|
|||||||
SFX.play("start")
|
SFX.play("start")
|
||||||
for P=1,#players do
|
for P=1,#players do
|
||||||
P=players[P]
|
P=players[P]
|
||||||
P:freshNext()
|
P:popNext()
|
||||||
P.timing=true
|
P.timing=true
|
||||||
P.control=true
|
P.control=true
|
||||||
end
|
end
|
||||||
|
|||||||
207
updateLog.lua
207
updateLog.lua
@@ -1,8 +1,10 @@
|
|||||||
local S=[=[
|
local S=[=[
|
||||||
"Patron"(rmb10+)(ordered by first char):
|
"Patron"(rmb10+)(ordered by first char):
|
||||||
八零哥
|
八零哥
|
||||||
|
dtg
|
||||||
Fireboos
|
Fireboos
|
||||||
gggf127
|
gggf127
|
||||||
|
加油啊,钉钉动了的大哥哥(T3228)
|
||||||
金巧
|
金巧
|
||||||
乐↗乐↘
|
乐↗乐↘
|
||||||
立斐
|
立斐
|
||||||
@@ -22,14 +24,15 @@ local S=[=[
|
|||||||
|
|
||||||
Future outlook:
|
Future outlook:
|
||||||
New mode:
|
New mode:
|
||||||
finesse
|
useful game Abbr. test
|
||||||
|
finesse exam(3next,1pt/mino,drop to score)
|
||||||
round-based dig
|
round-based dig
|
||||||
Infinite battle
|
Infinite battle
|
||||||
Bigbang
|
Bigbang
|
||||||
Rhythm
|
Rhythm
|
||||||
Combo
|
Combo
|
||||||
Square
|
Square
|
||||||
Shifting field
|
Shifting field(left/right)
|
||||||
Other:
|
Other:
|
||||||
bag sep-line switch
|
bag sep-line switch
|
||||||
game recording
|
game recording
|
||||||
@@ -41,19 +44,40 @@ Future outlook:
|
|||||||
Encrypt source code(compile to byte code)
|
Encrypt source code(compile to byte code)
|
||||||
new AI:task-Z
|
new AI:task-Z
|
||||||
CC smarter(think of garbage buffer)
|
CC smarter(think of garbage buffer)
|
||||||
0.8.14:
|
|
||||||
|
|
||||||
|
0.8.15:Bug Fixed
|
||||||
|
new:
|
||||||
|
can switch line-clear text now
|
||||||
|
new attack way "Clear"(half-clear)
|
||||||
|
give every update a name!
|
||||||
|
changed:
|
||||||
|
animation time of lock effect little changed
|
||||||
|
AI change target more slowly
|
||||||
|
Author.dignity-=1
|
||||||
|
fixed:
|
||||||
|
180° I spin kicklist error
|
||||||
|
AI will kill itself when spawn dir. of mino changed
|
||||||
|
error when reach 400 in 20G(Lunatic)
|
||||||
|
error block color in modes with starting field
|
||||||
|
cannot play pctrain mode
|
||||||
|
|
||||||
|
0.8.14:Cool FX
|
||||||
new:
|
new:
|
||||||
click/tap/any-key to skip loading animation
|
click/tap/any-key to skip loading animation
|
||||||
lock animation
|
lock animation
|
||||||
changed:
|
changed:
|
||||||
display scene info when error
|
display scene info when error
|
||||||
//many optimization
|
code:
|
||||||
|
many optimization
|
||||||
fixed:
|
fixed:
|
||||||
error when attack
|
error when attack
|
||||||
error garbage line color
|
error garbage line color
|
||||||
error in finesse checking
|
error in finesse checking
|
||||||
some times error when touch screen
|
some times error when touch screen
|
||||||
0.8.13:
|
touch/press release with no press,then error
|
||||||
|
|
||||||
|
0.8.13:O-spin Update++
|
||||||
new:
|
new:
|
||||||
a independent page to set DAS/ARR,with an animation for preview
|
a independent page to set DAS/ARR,with an animation for preview
|
||||||
changed:
|
changed:
|
||||||
@@ -66,7 +90,8 @@ Future outlook:
|
|||||||
ospin error in 0.8.12
|
ospin error in 0.8.12
|
||||||
memory leakage in t49/t99
|
memory leakage in t49/t99
|
||||||
new behavior of widgets
|
new behavior of widgets
|
||||||
0.8.12:
|
|
||||||
|
0.8.12:Bountful Update
|
||||||
new:
|
new:
|
||||||
layout setting:skin system with customizable block color/direction
|
layout setting:skin system with customizable block color/direction
|
||||||
more information when pause
|
more information when pause
|
||||||
@@ -80,12 +105,13 @@ Future outlook:
|
|||||||
canceled invalid game
|
canceled invalid game
|
||||||
easier to unlock custom mode
|
easier to unlock custom mode
|
||||||
some text changed
|
some text changed
|
||||||
//better line-clear process
|
code:
|
||||||
//merge event.lua to player.lua
|
better line-clear process
|
||||||
//new skin image format
|
merge event.lua to player.lua
|
||||||
//same format for all file
|
new skin image format
|
||||||
//better virtualkey-scanning opportunity,bit faster when many AI
|
same format for all file
|
||||||
//some player-method name changed
|
better virtualkey-scanning opportunity,bit faster when many AI
|
||||||
|
some player-method name changed
|
||||||
fixed:
|
fixed:
|
||||||
an error of pause button
|
an error of pause button
|
||||||
score may be float number
|
score may be float number
|
||||||
@@ -93,7 +119,8 @@ Future outlook:
|
|||||||
crash when paste illegal data to drawing mode
|
crash when paste illegal data to drawing mode
|
||||||
stage reset problem in t49/t99 mode
|
stage reset problem in t49/t99 mode
|
||||||
wrong info in tech-L/U/U+ mode
|
wrong info in tech-L/U/U+ mode
|
||||||
0.8.11:
|
|
||||||
|
0.8.11:Total Update
|
||||||
changed:
|
changed:
|
||||||
better rule of checking invalid game
|
better rule of checking invalid game
|
||||||
can setting when pause
|
can setting when pause
|
||||||
@@ -105,7 +132,8 @@ Future outlook:
|
|||||||
must hold R to restart when finished the game
|
must hold R to restart when finished the game
|
||||||
sth about screen size
|
sth about screen size
|
||||||
some O-spin error
|
some O-spin error
|
||||||
line counting when pc(full b2b)
|
error line counting when pc(full b2b)
|
||||||
|
|
||||||
0.8.10:
|
0.8.10:
|
||||||
new BGM:Distortion(master-final)
|
new BGM:Distortion(master-final)
|
||||||
all background darker
|
all background darker
|
||||||
@@ -113,16 +141,17 @@ Future outlook:
|
|||||||
fixed:
|
fixed:
|
||||||
error when finish master/ultra mode
|
error when finish master/ultra mode
|
||||||
shakeFX no effect when below 3
|
shakeFX no effect when below 3
|
||||||
0.8.9:
|
|
||||||
|
0.8.9:System Detail Update
|
||||||
invalid game when pause too much
|
invalid game when pause too much
|
||||||
quick play re-added
|
quick play re-added
|
||||||
new BGM:Oxygen(c4w&pc training)
|
new BGM:Oxygen(c4w&pc training)
|
||||||
space background little changed
|
space background little changed
|
||||||
fixed:
|
|
||||||
touch/press release with no press(don't know why)
|
0.8.8+:Bug-Fix Update
|
||||||
0.8.8+:
|
|
||||||
fixed many fatal bugs
|
fixed many fatal bugs
|
||||||
0.8.8:
|
|
||||||
|
0.8.8:Space BG Update
|
||||||
background now is cool space with "planets" and "stars",not boring falling tetrominos!
|
background now is cool space with "planets" and "stars",not boring falling tetrominos!
|
||||||
records with date
|
records with date
|
||||||
adjustable waiting time before start
|
adjustable waiting time before start
|
||||||
@@ -136,20 +165,23 @@ Future outlook:
|
|||||||
cannot press invisible func key
|
cannot press invisible func key
|
||||||
fixed:some mode error
|
fixed:some mode error
|
||||||
add many fatal bugs
|
add many fatal bugs
|
||||||
0.8.7:
|
|
||||||
|
0.8.7:Game Detail Update
|
||||||
better user experience in mode selecting
|
better user experience in mode selecting
|
||||||
support 2^n G falling speed
|
support 2^n G falling speed
|
||||||
speed of marathon mode changed
|
speed of marathon mode changed
|
||||||
shorter clipboard string(when air above)
|
shorter clipboard string(when air above)
|
||||||
attack system/score system little changed
|
attack system/score system little changed
|
||||||
fixed:rank system,some mode error when enter(again!)
|
fixed:rank system,some mode error when enter(again!)
|
||||||
0.8.6:
|
|
||||||
|
0.8.6:System Detail Update
|
||||||
gamepad can adjust key
|
gamepad can adjust key
|
||||||
add SFX when enter game
|
add SFX when enter game
|
||||||
map GUI little adjusted
|
map GUI little adjusted
|
||||||
event system little changed(no ctrl when scene swapping)
|
event system little changed(no ctrl when scene swapping)
|
||||||
fixed:rank system,some mode error when enter
|
fixed:rank system,some mode error when enter
|
||||||
0.8.5-:
|
|
||||||
|
0.8.5-:Exploration Update
|
||||||
mode map!Brandly new GUI for mode selecting
|
mode map!Brandly new GUI for mode selecting
|
||||||
mode unlock system,not that scary for noob
|
mode unlock system,not that scary for noob
|
||||||
every mode has rank calculating method(may some mistakes/inappropriate number)
|
every mode has rank calculating method(may some mistakes/inappropriate number)
|
||||||
@@ -160,49 +192,59 @@ Future outlook:
|
|||||||
better widget performence
|
better widget performence
|
||||||
remove Qplay
|
remove Qplay
|
||||||
many bug fixed
|
many bug fixed
|
||||||
0.8.4:
|
|
||||||
|
0.8.4:Miya Update+
|
||||||
vocal more natural(important,may cause new bug)
|
vocal more natural(important,may cause new bug)
|
||||||
a bit better performence on mobile devices
|
a bit better performence on mobile devices
|
||||||
fatal bug fixed
|
fatal bug fixed
|
||||||
0.8.3:
|
|
||||||
|
0.8.3:Miya Update
|
||||||
new widget appearence
|
new widget appearence
|
||||||
cuter miya
|
cuter miya
|
||||||
0.8.2+:
|
|
||||||
GUI adjusted
|
0.8.2:Graphics Update
|
||||||
miya figure added
|
miya figure added
|
||||||
0.8.2:
|
|
||||||
new widget appearence
|
new widget appearence
|
||||||
GUI adjusted
|
GUI adjusted
|
||||||
bug fixed
|
bug fixed
|
||||||
0.8.1:
|
|
||||||
|
0.8.1:Power Info Update
|
||||||
more FX level
|
more FX level
|
||||||
better battery info displaying
|
better battery info displaying
|
||||||
3 next in GMroll
|
3 next in GMroll
|
||||||
bug fixed
|
bug fixed
|
||||||
0.8.0:
|
|
||||||
|
0.8.0:Small Update
|
||||||
remake text system
|
remake text system
|
||||||
more details
|
more details
|
||||||
bug fixed
|
bug fixed
|
||||||
0.7.35:
|
|
||||||
|
0.7.35:Bug Fixed
|
||||||
bug fixed
|
bug fixed
|
||||||
0.7.34:
|
|
||||||
|
0.7.34:Voice Update+
|
||||||
|
replace most voice
|
||||||
shaking FX more natural
|
shaking FX more natural
|
||||||
0.7.33+:
|
|
||||||
|
0.7.33+:Bot Update
|
||||||
MORE POWERFUL 9-stack AI
|
MORE POWERFUL 9-stack AI
|
||||||
add stereo-setting slider
|
add stereo-setting slider
|
||||||
code optimized
|
code optimized
|
||||||
bug fixed
|
bug fixed
|
||||||
0.7.32:
|
|
||||||
|
0.7.32:Virtualkey Update+
|
||||||
Blind-GM now show section directly
|
Blind-GM now show section directly
|
||||||
easier&more standard classic mode
|
easier&more standard classic mode
|
||||||
can switch Virtualkey's auto dodging
|
can switch Virtualkey's auto dodging
|
||||||
in-game setting
|
in-game setting
|
||||||
code optimized
|
code optimized
|
||||||
bug fixed
|
bug fixed
|
||||||
0.7.31:
|
|
||||||
|
0.7.31:Stereo Update
|
||||||
stereo system
|
stereo system
|
||||||
fixed a problem in finesse calculating
|
fixed a problem in finesse calculating
|
||||||
0.7.30:
|
|
||||||
|
0.7.30:Virtualkey Update
|
||||||
auto-tracking virtual key,adjustable parameters!
|
auto-tracking virtual key,adjustable parameters!
|
||||||
can switch on/off virtuakeys
|
can switch on/off virtuakeys
|
||||||
add 7 more key
|
add 7 more key
|
||||||
@@ -212,22 +254,27 @@ Future outlook:
|
|||||||
can use preset in custom mode with keyboard
|
can use preset in custom mode with keyboard
|
||||||
adjusted GUI
|
adjusted GUI
|
||||||
many bug fixed
|
many bug fixed
|
||||||
0.7.28:
|
|
||||||
|
0.7.28:Finesse Update
|
||||||
add fineese check(almost useful)
|
add fineese check(almost useful)
|
||||||
code optimized
|
code optimized
|
||||||
0.7.27:
|
|
||||||
|
0.7.27:O-spin Update+
|
||||||
super O transform system
|
super O transform system
|
||||||
optimized light system(no used)
|
optimized light system(no used)
|
||||||
bug fixed
|
bug fixed
|
||||||
0.7.26:
|
|
||||||
|
0.7.26:Bug Fixed
|
||||||
new skin
|
new skin
|
||||||
import light lib
|
import light lib
|
||||||
many bug fixed
|
many bug fixed
|
||||||
0.7.25:
|
|
||||||
|
0.7.25:Demo Update
|
||||||
demo play at main menu
|
demo play at main menu
|
||||||
ALMOST reconstructed WHOLE PLAYER SYSTEM,NEED TEST
|
ALMOST reconstructed WHOLE PLAYER SYSTEM,NEED TEST
|
||||||
many bug fixed
|
many bug fixed
|
||||||
0.7.24(0.7.23):
|
|
||||||
|
0.7.23/24:Feast of Hearing
|
||||||
REMAKE ALL BGM!
|
REMAKE ALL BGM!
|
||||||
more settings with brand new GUI!
|
more settings with brand new GUI!
|
||||||
new mode:Master-Final
|
new mode:Master-Final
|
||||||
@@ -239,7 +286,8 @@ Future outlook:
|
|||||||
louder sound
|
louder sound
|
||||||
code optimized
|
code optimized
|
||||||
many bugs fixed
|
many bugs fixed
|
||||||
0.7.22:
|
|
||||||
|
0.7.22:Graphics Update
|
||||||
scoring system
|
scoring system
|
||||||
smooth dropping
|
smooth dropping
|
||||||
can change FX level
|
can change FX level
|
||||||
@@ -254,20 +302,23 @@ Future outlook:
|
|||||||
compressed setting/data
|
compressed setting/data
|
||||||
support 10% step alpha of virtual key
|
support 10% step alpha of virtual key
|
||||||
many code optimized&bugs fixed
|
many code optimized&bugs fixed
|
||||||
0.7.21:
|
|
||||||
|
0.7.21:Title Update
|
||||||
new title image
|
new title image
|
||||||
more GUI details
|
more GUI details
|
||||||
many bugs fixed
|
many bugs fixed
|
||||||
0.7.20:
|
|
||||||
|
0.7.20:Music Room Update
|
||||||
add music room
|
add music room
|
||||||
change block/space apperance in draw mode
|
change block/space apperance in draw mode
|
||||||
field shake animation
|
field shake animation
|
||||||
default sets of custom options
|
default sets of custom options
|
||||||
can set BG/BGM in custom mode
|
can set BG/BGM in custom mode
|
||||||
bug fixed
|
bug fixed
|
||||||
0.7.19:
|
|
||||||
secret option!
|
0.7.19:Voice Update
|
||||||
macOS version!
|
voice system added(voice by Miya)
|
||||||
|
support macOS!
|
||||||
new mode:C4W training
|
new mode:C4W training
|
||||||
rendering of royale mode optimized again
|
rendering of royale mode optimized again
|
||||||
add "free cell" in draw mode
|
add "free cell" in draw mode
|
||||||
@@ -275,14 +326,16 @@ Future outlook:
|
|||||||
new difficulty in infinite mode
|
new difficulty in infinite mode
|
||||||
new background/sound effect in master mode
|
new background/sound effect in master mode
|
||||||
bug fixed
|
bug fixed
|
||||||
0.7.18:
|
|
||||||
|
0.7.18:Skin Update
|
||||||
3 new block skins!(one skin origional by Miya(nya~))
|
3 new block skins!(one skin origional by Miya(nya~))
|
||||||
better restarting(to prevent mistakenly touching)
|
better restarting(to prevent mistakenly touching)
|
||||||
switch display of puzzle mode
|
switch display of puzzle mode
|
||||||
adjust UI
|
adjust UI
|
||||||
code optimized
|
code optimized
|
||||||
default custom options changed to as infinite mode
|
default custom options changed to as infinite mode
|
||||||
0.7.17:
|
|
||||||
|
0.7.17:Pause Update
|
||||||
display game stats when pause
|
display game stats when pause
|
||||||
more options in statistics
|
more options in statistics
|
||||||
better pausing
|
better pausing
|
||||||
@@ -291,28 +344,33 @@ Future outlook:
|
|||||||
adjust vibrate level for mobile devices
|
adjust vibrate level for mobile devices
|
||||||
little optimized
|
little optimized
|
||||||
bugs fixed
|
bugs fixed
|
||||||
0.7.16:
|
|
||||||
bugs fixed
|
0.7.16:Game Detail Update
|
||||||
change rules of custom puzzle mode
|
change rules of custom puzzle mode
|
||||||
change rules of TSD mode
|
change rules of TSD mode
|
||||||
better pausing
|
better pausing
|
||||||
speed optimized
|
speed optimized
|
||||||
adjust difficulty of dig mode
|
adjust difficulty of dig mode
|
||||||
0.7.15:
|
bugs fixed
|
||||||
|
|
||||||
|
0.7.15:Puzzle Update
|
||||||
can make puzzle by drawing mode
|
can make puzzle by drawing mode
|
||||||
can pause game with animation
|
can pause game with animation
|
||||||
change icon of "Functional key"
|
change icon of "Functional key"
|
||||||
speed optimized
|
speed optimized
|
||||||
bugs fixed
|
bugs fixed
|
||||||
0.7.14:
|
|
||||||
|
0.7.14:Creativity Update
|
||||||
drawing mode in custom game
|
drawing mode in custom game
|
||||||
adjustable virtual keys with mouse
|
adjustable virtual keys with mouse
|
||||||
speed optimized
|
speed optimized
|
||||||
rotate also create shade
|
rotate also create shade
|
||||||
0.7.13+:
|
|
||||||
|
0.7.13+:Small Update
|
||||||
change difficulty of survivor mode
|
change difficulty of survivor mode
|
||||||
little game rule change
|
little game rule change
|
||||||
bugs fixed(AI control error)
|
bugs fixed(AI control error)
|
||||||
|
|
||||||
0.7.13:
|
0.7.13:
|
||||||
Chinese game name:方块研究所
|
Chinese game name:方块研究所
|
||||||
SUPER COOL instant moving effect
|
SUPER COOL instant moving effect
|
||||||
@@ -323,7 +381,8 @@ Future outlook:
|
|||||||
code reconstructed
|
code reconstructed
|
||||||
bugs fixed(error when seq=his,size of custom oppo)
|
bugs fixed(error when seq=his,size of custom oppo)
|
||||||
debug key change to F8
|
debug key change to F8
|
||||||
0.7.12:
|
|
||||||
|
0.7.12:Total Update
|
||||||
AI learned to switch attack mode
|
AI learned to switch attack mode
|
||||||
seperate master mode from marathon mode
|
seperate master mode from marathon mode
|
||||||
master mode more interesting
|
master mode more interesting
|
||||||
@@ -336,7 +395,8 @@ Future outlook:
|
|||||||
swap target by combo key/press
|
swap target by combo key/press
|
||||||
some Chinese translaton edited
|
some Chinese translaton edited
|
||||||
[reconstruct event system]
|
[reconstruct event system]
|
||||||
0.7.11:
|
|
||||||
|
0.7.11:Total Update
|
||||||
some Chinese translaton edited
|
some Chinese translaton edited
|
||||||
add bone block in 2 hardest marathon(new block-fresh system)
|
add bone block in 2 hardest marathon(new block-fresh system)
|
||||||
play sound when get badges in royale mode
|
play sound when get badges in royale mode
|
||||||
@@ -347,35 +407,40 @@ Future outlook:
|
|||||||
fix 6 next in classic mode
|
fix 6 next in classic mode
|
||||||
add QR code in help page
|
add QR code in help page
|
||||||
change some detials
|
change some detials
|
||||||
0.7.10:
|
|
||||||
更完全的中文翻译
|
0.7.10:Small Update
|
||||||
|
full Chinese translation
|
||||||
add Classic mode
|
add Classic mode
|
||||||
change O spin's behaviour
|
change O spin's behaviour
|
||||||
fix bugs
|
bugs fixed
|
||||||
0.7.9:
|
|
||||||
|
0.7.9:O-spin Update
|
||||||
O spin is a lie
|
O spin is a lie
|
||||||
better attacking pointer
|
better attacking pointer
|
||||||
language system
|
language system
|
||||||
change rotate system
|
change rotate system
|
||||||
change BGM&BG set
|
change BGM&BG set
|
||||||
code optimized
|
code optimized
|
||||||
fix bugs
|
bugs fixed
|
||||||
0.7.8:
|
|
||||||
|
0.7.8:Performance Update
|
||||||
GPU usage decreased much more than before
|
GPU usage decreased much more than before
|
||||||
add virtual key animation
|
add virtual key animation
|
||||||
display player's rank after death in royale mode
|
display player's rank after death in royale mode
|
||||||
fix sequence error of PC training mode
|
fix sequence error of PC training mode
|
||||||
adjust difficulty of suvivor mode
|
adjust difficulty of suvivor mode
|
||||||
code optimized
|
code optimized
|
||||||
fix bugs
|
bugs fixed
|
||||||
0.7.7:
|
|
||||||
|
0.7.7:Mode Update
|
||||||
add dig mode
|
add dig mode
|
||||||
add survivor mode
|
add survivor mode
|
||||||
combine some modes
|
combine some modes
|
||||||
change some GUI
|
change some GUI
|
||||||
more SFXs
|
more SFXs
|
||||||
fix bugs
|
bugs fixed
|
||||||
0.7.6:
|
|
||||||
|
0.7.6:Mode Update
|
||||||
new font
|
new font
|
||||||
add DIFFICULTY selection
|
add DIFFICULTY selection
|
||||||
virtual keys give visual feedback(PC/phone)
|
virtual keys give visual feedback(PC/phone)
|
||||||
@@ -387,7 +452,8 @@ Future outlook:
|
|||||||
more FXs in royale mode
|
more FXs in royale mode
|
||||||
fix all attacking bug of royale mode
|
fix all attacking bug of royale mode
|
||||||
change sequence of TSD-only mode to bag7
|
change sequence of TSD-only mode to bag7
|
||||||
0.7.5:
|
|
||||||
|
0.7.5:Total Update
|
||||||
reduce difficuly of PC training mode,and add more patterns
|
reduce difficuly of PC training mode,and add more patterns
|
||||||
reduce difficuly of death mode
|
reduce difficuly of death mode
|
||||||
add PC challenge mode
|
add PC challenge mode
|
||||||
@@ -401,16 +467,19 @@ Future outlook:
|
|||||||
adjust GUI of royale mode
|
adjust GUI of royale mode
|
||||||
change sequence of TSD-only mode
|
change sequence of TSD-only mode
|
||||||
royale mode use LESS GPU
|
royale mode use LESS GPU
|
||||||
0.7.4:
|
|
||||||
|
0.7.4:Bug Update
|
||||||
add a lot of bugs
|
add a lot of bugs
|
||||||
0.7.3:
|
|
||||||
|
0.7.3:Game Detail Update
|
||||||
add infinite target in custom
|
add infinite target in custom
|
||||||
fix TSD-only mode result+1 when finishing with a wrong clear
|
fix TSD-only mode result+1 when finishing with a wrong clear
|
||||||
change sequence generator of TSD-only mode
|
change sequence generator of TSD-only mode
|
||||||
GUI position edited
|
GUI position edited
|
||||||
Fix Screen flow
|
Fix Screen flow
|
||||||
smarter AI
|
smarter AI
|
||||||
0.7.2:
|
|
||||||
|
0.7.2:Mode Update
|
||||||
add PC training mode
|
add PC training mode
|
||||||
add TSD-only mode
|
add TSD-only mode
|
||||||
remove non-sense s/z spin double
|
remove non-sense s/z spin double
|
||||||
|
|||||||
@@ -262,16 +262,15 @@ local Widget={
|
|||||||
dropFX= newSlider(310,410,373,5,35,nil, SETval("dropFX"), SETsto("dropFX"), nil,"shakeFX"),
|
dropFX= newSlider(310,410,373,5,35,nil, SETval("dropFX"), SETsto("dropFX"), nil,"shakeFX"),
|
||||||
shakeFX=newSlider(310,480,373,5,35,nil, SETval("shakeFX"), SETsto("shakeFX"), nil,"atkFX"),
|
shakeFX=newSlider(310,480,373,5,35,nil, SETval("shakeFX"), SETsto("shakeFX"), nil,"atkFX"),
|
||||||
atkFX= newSlider(310,550,373,5,35,nil, SETval("atkFX"), SETsto("atkFX"), nil,"frame"),
|
atkFX= newSlider(310,550,373,5,35,nil, SETval("atkFX"), SETsto("atkFX"), nil,"frame"),
|
||||||
frame= newSlider(310,620,373,10,35,nil,function()return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4 end,function(i)setting.frameMul=i<5 and 5*i+20 or 10*i end,nil,"fullscreen"),
|
frame= newSlider(310,620,373,10,35,nil,function()return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4 end,function(i)setting.frameMul=i<5 and 5*i+20 or 10*i end,nil,"text"),
|
||||||
fullscreen=newSwitch(990,180,40,SETval("fullscreen"),function()
|
text= newSwitch(990,180,35,SETval("text"),SETrev("text"),nil,"fullscreen"),
|
||||||
|
fullscreen=newSwitch(990,260,35,SETval("fullscreen"),function()
|
||||||
setting.fullscreen=not setting.fullscreen
|
setting.fullscreen=not setting.fullscreen
|
||||||
love.window.setFullscreen(setting.fullscreen)
|
love.window.setFullscreen(setting.fullscreen)
|
||||||
if not setting.fullscreen then
|
love.resize(love.graphics.getWidth(),love.graphics.getHeight())
|
||||||
love.resize(love.graphics.getWidth(),love.graphics.getHeight())
|
|
||||||
end
|
|
||||||
end,nil,"bg"),
|
end,nil,"bg"),
|
||||||
bg= newSwitch(990,250,35,SETval("bg"),SETrev("bg"),nil,"bgspace"),
|
bg= newSwitch(990,330,35,SETval("bg"),SETrev("bg"),nil,"bgspace"),
|
||||||
bgspace=newSwitch(990,330,35,SETval("bgspace"),function()
|
bgspace=newSwitch(990,410,35,SETval("bgspace"),function()
|
||||||
setting.bgspace=not setting.bgspace
|
setting.bgspace=not setting.bgspace
|
||||||
if setting.bgspace then
|
if setting.bgspace then
|
||||||
space.new()
|
space.new()
|
||||||
@@ -308,32 +307,32 @@ local Widget={
|
|||||||
setting_skin={
|
setting_skin={
|
||||||
prev= newButton(700,100,140,100,C.white,50,function()skin.prevSet()end),
|
prev= newButton(700,100,140,100,C.white,50,function()skin.prevSet()end),
|
||||||
next= newButton(860,100,140,100,C.white,50,function()skin.nextSet()end),
|
next= newButton(860,100,140,100,C.white,50,function()skin.nextSet()end),
|
||||||
prev1= newButton(125,240,90,65,C.white,30,prevSkin(1)),
|
prev1= newButton(130,230,90,65,C.white,30,prevSkin(1)),
|
||||||
prev2= newButton(265,240,90,65,C.white,30,prevSkin(2)),
|
prev2= newButton(270,230,90,65,C.white,30,prevSkin(2)),
|
||||||
prev3= newButton(405,240,90,65,C.white,30,prevSkin(3)),
|
prev3= newButton(410,230,90,65,C.white,30,prevSkin(3)),
|
||||||
prev4= newButton(545,240,90,65,C.white,30,prevSkin(4)),
|
prev4= newButton(550,230,90,65,C.white,30,prevSkin(4)),
|
||||||
prev5= newButton(685,240,90,65,C.white,30,prevSkin(5)),
|
prev5= newButton(690,230,90,65,C.white,30,prevSkin(5)),
|
||||||
prev6= newButton(825,240,90,65,C.white,30,prevSkin(6)),
|
prev6= newButton(830,230,90,65,C.white,30,prevSkin(6)),
|
||||||
prev7= newButton(965,240,90,65,C.white,30,prevSkin(7)),
|
prev7= newButton(970,230,90,65,C.white,30,prevSkin(7)),
|
||||||
|
|
||||||
next1= newButton(125,460,90,65,C.white,30,nextSkin(1)),
|
next1= newButton(130,450,90,65,C.white,30,nextSkin(1)),
|
||||||
next2= newButton(265,460,90,65,C.white,30,nextSkin(2)),
|
next2= newButton(270,450,90,65,C.white,30,nextSkin(2)),
|
||||||
next3= newButton(405,460,90,65,C.white,30,nextSkin(3)),
|
next3= newButton(410,450,90,65,C.white,30,nextSkin(3)),
|
||||||
next4= newButton(545,460,90,65,C.white,30,nextSkin(4)),
|
next4= newButton(550,450,90,65,C.white,30,nextSkin(4)),
|
||||||
next5= newButton(685,460,90,65,C.white,30,nextSkin(5)),
|
next5= newButton(690,450,90,65,C.white,30,nextSkin(5)),
|
||||||
next6= newButton(825,460,90,65,C.white,30,nextSkin(6)),
|
next6= newButton(830,450,90,65,C.white,30,nextSkin(6)),
|
||||||
next7= newButton(965,460,90,65,C.white,30,nextSkin(7)),
|
next7= newButton(970,450,90,65,C.white,30,nextSkin(7)),
|
||||||
|
|
||||||
spin1= newButton(125,550,90,65,C.white,30,nextDir(1)),
|
spin1= newButton(130,540,90,65,C.white,30,nextDir(1)),
|
||||||
spin2= newButton(265,550,90,65,C.white,30,nextDir(2)),
|
spin2= newButton(270,540,90,65,C.white,30,nextDir(2)),
|
||||||
spin3= newButton(405,550,90,65,C.white,30,nextDir(3)),
|
spin3= newButton(410,540,90,65,C.white,30,nextDir(3)),
|
||||||
spin4= newButton(545,550,90,65,C.white,30,nextDir(4)),
|
spin4= newButton(550,540,90,65,C.white,30,nextDir(4)),
|
||||||
spin5= newButton(685,550,90,65,C.white,30,nextDir(5)),
|
spin5= newButton(690,540,90,65,C.white,30,nextDir(5)),
|
||||||
--spin6=newButton(825,550,90,65,C.white,30,nextDir(6)),--O cannot rotate
|
--spin6=newButton(825,540,90,65,C.white,30,nextDir(6)),--cannot rotate O
|
||||||
spin7= newButton(965,550,90,65,C.white,30,nextDir(7)),
|
spin7= newButton(970,540,90,65,C.white,30,nextDir(7)),
|
||||||
|
|
||||||
skinR= newButton(200,650,180,80,C.lightPurple,35,function()setting.skin={1,5,2,8,10,3,7}SFX.play("hold")end),
|
skinR= newButton(200,640,220,80,C.lightPurple,35,function()setting.skin={1,5,2,8,10,3,7}SFX.play("rotate")end),
|
||||||
faceR= newButton(480,650,180,80,C.lightRed,35,function()setting.face={0,0,0,0,0,0,0}SFX.play("rotate")end),
|
faceR= newButton(480,640,220,80,C.lightRed,35,function()setting.face={0,0,0,0,0,0,0}SFX.play("hold")end),
|
||||||
back= newButton(1140,650,200,80,C.white,40,scene.back),
|
back= newButton(1140,650,200,80,C.white,40,scene.back),
|
||||||
},
|
},
|
||||||
setting_touch={
|
setting_touch={
|
||||||
|
|||||||
Reference in New Issue
Block a user