Compare commits
1 Commits
v0.0.19072
...
v0.0.19072
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
17094b988b |
75
SRS.lua
75
SRS.lua
@@ -1,75 +0,0 @@
|
||||
blocks={
|
||||
{[0]={{0,1,1},{1,1,0}},{{1,0},{1,1},{0,1}},{{0,1,1},{1,1,0}},{{1,0},{1,1},{0,1}}},--Z
|
||||
{[0]={{1,1,0},{0,1,1}},{{0,1},{1,1},{1,0}},{{1,1,0},{0,1,1}},{{0,1},{1,1},{1,0}}},--S
|
||||
{[0]={{1,1,1},{0,0,1}},{{1,1},{1,0},{1,0}},{{1,0,0},{1,1,1}},{{0,1},{0,1},{1,1}}},--L
|
||||
{[0]={{1,1,1},{1,0,0}},{{1,0},{1,0},{1,1}},{{0,0,1},{1,1,1}},{{1,1},{0,1},{0,1}}},--J
|
||||
{[0]={{1,1,1},{0,1,0}},{{1,0},{1,1},{1,0}},{{0,1,0},{1,1,1}},{{0,1},{1,1},{0,1}}},--T
|
||||
{[0]={{1,1},{1,1}},{{1,1},{1,1}},{{1,1},{1,1}},{{1,1},{1,1}}},--O
|
||||
{[0]={{1,1,1,1}},{{1},{1},{1},{1}},{{1,1,1,1}},{{1},{1},{1},{1}}},--I
|
||||
}
|
||||
do--SRS data
|
||||
local K={0,0}
|
||||
local D,E,L,S,R,Q,J,C={0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}
|
||||
local B,I,P,F,M,T={-2,1},{-2,0},{-2,-1},{2,1},{2,0},{2,-1}
|
||||
local X,Y,Z={-1,-2},{0,-2},{1,-2}
|
||||
local F,G,N={-1,2},{0,2},{1,2}
|
||||
scs={N,N,N,N,N,{1.5,1.5},{.5,2.5}}
|
||||
SRS={
|
||||
[1]={
|
||||
[01]={K,J,C,Y,X,D},
|
||||
[10]={K,L,S,G,N,R},
|
||||
[12]={K,L,S,G,N},
|
||||
[21]={K,J,C,Y,X},
|
||||
[23]={K,L,E,Y,Z},
|
||||
[32]={K,J,Q,G,F},
|
||||
[30]={K,J,Q,G,F},
|
||||
[03]={K,L,E,Y,Z},
|
||||
[02]={K,L,J,R,D},
|
||||
[20]={K,J,L,D,R},
|
||||
[13]={K,D,R,J,L,G},
|
||||
[31]={K,R,D,L,J,G},
|
||||
},
|
||||
[2]={
|
||||
[01]={K,J,C,Y,X},
|
||||
[10]={K,L,S,G,N},
|
||||
[12]={K,L,S,G,N},
|
||||
[21]={K,J,C,Y,X},
|
||||
[23]={K,L,E,Y,Z},
|
||||
[32]={K,J,Q,G,F},
|
||||
[30]={K,J,Q,G,F,R},
|
||||
[03]={K,L,E,Y,Z,D},
|
||||
[02]={K,J,L,R,D},
|
||||
[20]={K,L,J,D,R},
|
||||
[13]={K,R,D,L,J,G},
|
||||
[31]={K,D,R,J,L,G},
|
||||
},
|
||||
[5]={
|
||||
[01]={K,J,C,Y,X},
|
||||
[10]={K,L,S,G,N},
|
||||
[12]={K,L,S,G,N},
|
||||
[21]={K,J,C,Y,X},
|
||||
[23]={K,L,E,Y,Z},
|
||||
[32]={K,J,Q,G,F},
|
||||
[30]={K,J,Q,G,F,R},
|
||||
[03]={K,L,E,Y,Z,D},
|
||||
[02]={K,J,L,R,D},
|
||||
[20]={K,L,J,D,R},
|
||||
[13]={K,R,D,L,J,G},
|
||||
[31]={K,R,D,J,L,G},
|
||||
},
|
||||
[7]={
|
||||
[01]={K,I,L,P,N},
|
||||
[10]={K,M,J,F,X},
|
||||
[12]={K,J,M,F,T},
|
||||
[21]={K,L,I,Z,B},
|
||||
[23]={K,M,J,F,X},
|
||||
[32]={K,I,L,P,N},
|
||||
[30]={K,L,I,Z,B},
|
||||
[03]={K,J,M,F,T},
|
||||
[02]={K,J,L,D},
|
||||
[20]={K,L,J,R},
|
||||
[13]={K,L},
|
||||
[31]={K,J},
|
||||
}
|
||||
}SRS[3],SRS[4],SRS[6]=SRS[2],SRS[1],SRS[1]
|
||||
end
|
||||
70
TRS.lua
Normal file
70
TRS.lua
Normal file
@@ -0,0 +1,70 @@
|
||||
blocks={
|
||||
{[0]={{0,1,1},{1,1,0}},{{1,0},{1,1},{0,1}},{{0,1,1},{1,1,0}},{{1,0},{1,1},{0,1}}},--Z
|
||||
{[0]={{1,1,0},{0,1,1}},{{0,1},{1,1},{1,0}},{{1,1,0},{0,1,1}},{{0,1},{1,1},{1,0}}},--S
|
||||
{[0]={{1,1,1},{0,0,1}},{{1,1},{1,0},{1,0}},{{1,0,0},{1,1,1}},{{0,1},{0,1},{1,1}}},--L
|
||||
{[0]={{1,1,1},{1,0,0}},{{1,0},{1,0},{1,1}},{{0,0,1},{1,1,1}},{{1,1},{0,1},{0,1}}},--J
|
||||
{[0]={{1,1,1},{0,1,0}},{{1,0},{1,1},{1,0}},{{0,1,0},{1,1,1}},{{0,1},{1,1},{0,1}}},--T
|
||||
{[0]={{1,1},{1,1}},{{1,1},{1,1}},{{1,1},{1,1}},{{1,1},{1,1}}},--O
|
||||
{[0]={{1,1,1,1}},{{1},{1},{1},{1}},{{1,1,1,1}},{{1},{1},{1},{1}}},--I
|
||||
}
|
||||
do
|
||||
scs={{1,2},{1,2},{1,2},{1,2},{1,2},{1.5,1.5},{.5,2.5}}
|
||||
TRS={
|
||||
[1]={
|
||||
[01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2},{0,1}},
|
||||
[10]={{0,0},{1,0},{1,-1},{0,2},{1,2},{0,-1}},
|
||||
[12]={{0,0},{1,0},{1,-1},{0,2},{1,2}},
|
||||
[21]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2}},
|
||||
[23]={{0,0},{1,0},{1,1},{0,-2},{1,-2}},
|
||||
[32]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2}},
|
||||
[30]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2}},
|
||||
[03]={{0,0},{1,0},{1,1},{0,-2},{1,-2}},
|
||||
[02]={{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},{0,-1},{-1,0},{1,0},{0,2}},
|
||||
[31]={{0,0},{0,-1},{0,1},{1,0},{-1,0},{0,2}},
|
||||
},
|
||||
[2]={
|
||||
[01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2}},
|
||||
[10]={{0,0},{1,0},{1,-1},{0,2},{1,2}},
|
||||
[12]={{0,0},{1,0},{1,-1},{0,2},{1,2}},
|
||||
[21]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2}},
|
||||
[23]={{0,0},{1,0},{1,1},{0,-2},{1,-2}},
|
||||
[32]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2}},
|
||||
[30]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2},{0,-1}},
|
||||
[03]={{0,0},{1,0},{1,1},{0,-2},{1,-2},{0,1}},
|
||||
[02]={{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},{0,1},{1,0},{-1,0},{0,2}},
|
||||
[31]={{0,0},{0,1},{0,-1},{-1,0},{1,0},{0,2}},
|
||||
},
|
||||
[5]={
|
||||
[01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2}},
|
||||
[10]={{0,0},{1,0},{1,-1},{0,2},{1,2}},
|
||||
[12]={{0,0},{1,0},{1,-1},{0,2},{1,2}},
|
||||
[21]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2}},
|
||||
[23]={{0,0},{1,0},{1,1},{0,-2},{1,-2}},
|
||||
[32]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2}},
|
||||
[30]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2},{0,-1}},
|
||||
[03]={{0,0},{1,0},{1,1},{0,-2},{1,-2},{0,1}},
|
||||
[02]={{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},{0,1},{1,0},{-1,0},{0,2}},
|
||||
[31]={{0,0},{0,-1},{0,1},{-1,0},{1,0},{0,2}},
|
||||
},
|
||||
[7]={
|
||||
[01]={{0,0},{-2,0},{1,0},{-2,-1},{1,2}},
|
||||
[10]={{0,0},{2,0},{-1,0},{2,1},{-1,-2}},
|
||||
[12]={{0,0},{-1,0},{2,0},{-1,2},{2,-1}},
|
||||
[21]={{0,0},{1,0},{-2,0},{1,-2},{-2,1}},
|
||||
[23]={{0,0},{2,0},{-1,0},{2,1},{-1,-2}},
|
||||
[32]={{0,0},{-2,0},{1,0},{-2,-1},{1,2}},
|
||||
[30]={{0,0},{1,0},{-2,0},{1,-2},{-2,1}},
|
||||
[03]={{0,0},{-1,0},{2,0},{-1,2},{2,-1}},
|
||||
[02]={{0,0},{-1,0},{1,0},{0,1}},
|
||||
[20]={{0,0},{1,0},{-1,0},{0,-1}},
|
||||
[13]={{0,0},{1,0}},
|
||||
[31]={{0,0},{-1,0}},
|
||||
}
|
||||
}TRS[3],TRS[4],TRS[6]=TRS[2],TRS[1],TRS[1]
|
||||
end
|
||||
4
ai.lua
4
ai.lua
@@ -75,9 +75,9 @@ function getScore(field,cb,cx,cy)
|
||||
end
|
||||
return
|
||||
-highest*5
|
||||
-rough*15
|
||||
-rough*20
|
||||
-cy*15
|
||||
+clear^2*3
|
||||
+clear^2*4
|
||||
-hole*20
|
||||
end
|
||||
--controlname:mL,mR,rR,rL,rF,hD,sD,H,LL,RR
|
||||
|
||||
116
button.lua
116
button.lua
@@ -2,72 +2,90 @@ Buttons={
|
||||
load={},
|
||||
intro={},
|
||||
main={
|
||||
{x=500,y=300,w=320,h=60,rgb={1,0,0},alpha=0,t="Play",code=function()gotoScene("mode")end},
|
||||
{x=500,y=380,w=320,h=60,rgb={0,0,1},alpha=0,t="Settings",code=function()gotoScene("setting")end},
|
||||
{x=415,y=460,w=150,h=60,rgb={1,1,0},alpha=0,t="Help",code=function()gotoScene("help")end},
|
||||
{x=585,y=460,w=150,h=60,rgb={0,1,1},alpha=0,t="Statistics",code=function()gotoScene("stat")end},
|
||||
{x=500,y=540,w=320,h=60,rgb={.5,.5,.5},alpha=0,t="Quit",code=function()gotoScene("quit")end},
|
||||
{x=240,y=300,w=320,h=60,rgb=color.red,t="Play",code=function()gotoScene("mode")end},
|
||||
{x=240,y=380,w=320,h=60,rgb=color.blue,t="Settings",code=function()gotoScene("setting")end},
|
||||
{x=155,y=460,w=150,h=60,rgb=color.yellow,t="Help",code=function()gotoScene("help")end},
|
||||
{x=325,y=460,w=150,h=60,rgb=color.cyan,t="Statistics",code=function()gotoScene("stat")end},
|
||||
{x=240,y=540,w=320,h=60,rgb=color.grey,t="Quit",code=function()gotoScene("quit")end},
|
||||
},
|
||||
mode={
|
||||
{x=200,y=150,w=250,h=70,rgb={1,1,1},alpha=0,t="40 Lines",code=function()startGame("sprint")end},
|
||||
{x=500,y=150,w=250,h=70,rgb={1,1,1},alpha=0,t="Zen",code=function()startGame("zen")end},
|
||||
{x=800,y=150,w=250,h=70,rgb={1,1,1},alpha=0,t="GM Roll",code=function()startGame("gmroll")end},
|
||||
{x=200,y=250,w=250,h=70,rgb={1,1,1},alpha=0,t="Marathon",code=function()startGame("marathon")end},
|
||||
{x=200,y=350,w=250,h=70,rgb={1,1,1},alpha=0,t="Death",code=function()startGame("death")end},
|
||||
{x=500,y=250,w=250,h=70,rgb={1,1,1},alpha=0,t="Tetris 25",code=function()startGame("tetris25")end},
|
||||
{x=500,y=350,w=250,h=70,rgb={1,1,1},alpha=0,t="AI Solo",code=function()startGame("solo")end},
|
||||
{x=800,y=250,w=250,h=70,rgb={1,1,1},alpha=0,t="Blind",code=function()startGame("blind")end},
|
||||
{x=800,y=350,w=250,h=70,rgb={1,1,1},alpha=0,t="Asymmetry Solo",code=function()startGame("asymsolo")end},
|
||||
{x=500,y=520,w=350,h=80,rgb={1,1,1},alpha=0,t="Back",code=function()gotoScene("main")end},
|
||||
{x=330,y=140,w=280,h=70,rgb=color.white,t="40 Lines",code=function()startGame("sprint")end},
|
||||
{x=640,y=140,w=280,h=70,rgb=color.white,t="Zen",code=function()startGame("zen")end},
|
||||
{x=950,y=140,w=280,h=70,rgb=color.white,t="GM Roll",code=function()startGame("gmroll")end},
|
||||
{x=330,y=250,w=280,h=70,rgb=color.white,t="Marathon",code=function()startGame("marathon")end},
|
||||
{x=330,y=360,w=280,h=70,rgb=color.white,t="Death",code=function()startGame("death")end},
|
||||
{x=640,y=250,w=280,h=70,rgb=color.white,t="Tetris 25",code=function()startGame("tetris25")end},
|
||||
{x=640,y=360,w=280,h=70,rgb=color.white,t="AI Solo",code=function()startGame("solo")end},
|
||||
{x=950,y=250,w=280,h=70,rgb=color.white,t="Blind",code=function()startGame("blind")end},
|
||||
{x=950,y=360,w=280,h=70,rgb=color.white,t="Asymmetry Solo",code=function()startGame("asymsolo")end},
|
||||
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=function()gotoScene("main")end},
|
||||
},
|
||||
play={
|
||||
{x=950,y=30,w=80,h=40,rgb={1,1,1},alpha=0,t="Back",code=function()gotoScene("mode")end},
|
||||
{x=1230,y=30,w=80,h=40,rgb=color.white,t="Back",code=function()gotoScene("mode")end},
|
||||
},
|
||||
setting={
|
||||
{x=120,y=80,w=30,h=30,rgb={1,1,1},alpha=0,t="-",code=function()setting.das=(setting.das-1)%31 end,hold=true},
|
||||
{x=280,y=80,w=30,h=30,rgb={1,1,1},alpha=0,t="+",code=function()setting.das=(setting.das+1)%31 end,hold=true},
|
||||
{x=320,y=80,w=30,h=30,rgb={1,1,1},alpha=0,t="-",code=function()setting.arr=(setting.arr-1)%16 end,hold=true},
|
||||
{x=480,y=80,w=30,h=30,rgb={1,1,1},alpha=0,t="+",code=function()setting.arr=(setting.arr+1)%16 end,hold=true},
|
||||
{x=200,y=200,w=190,h=40,rgb={1,1,1},alpha=0,t=function()return setting.ghost and"Ghost ON"or"Ghost OFF"end,code=function()setting.ghost=not setting.ghost end},
|
||||
{x=400,y=200,w=190,h=40,rgb={1,1,1},alpha=0,t=function()return setting.center and"Center ON"or"Center OFF"end,code=function()setting.center=not setting.center end},
|
||||
|
||||
|
||||
{x=700,y=80,w=280,h=50,rgb={1,1,1},alpha=0,t=function()return setting.sfx and"Disable SFX"or"Enable SFX"end,code=function()setting.sfx=not setting.sfx end},
|
||||
{x=700,y=150,w=280,h=50,rgb={1,1,1},alpha=0,t=function()return setting.bgm and"Disable BGM"or"Enable BGM"end,
|
||||
code=function()
|
||||
setting.bgm=not setting.bgm
|
||||
if setting.bgm then BGM("blank")else BGM()end
|
||||
end
|
||||
},
|
||||
{x=700,y=220,w=280,h=50,rgb={1,1,1},alpha=0,t=function()return setting.fullscreen and"Disable fullscreen"or"Enable fullscreen"end,
|
||||
{x=330,y=100,w=200,h=60,rgb=color.white,t=function()return setting.ghost and"Ghost ON"or"Ghost OFF"end,code=function()setting.ghost=not setting.ghost end},
|
||||
{x=540,y=100,w=200,h=60,rgb=color.white,t=function()return setting.center and"Center ON"or"Center OFF"end,code=function()setting.center=not setting.center end},
|
||||
{x=870,y=100,w=340,h=60,rgb=color.white,t=function()return setting.sfx and"Disable SFX"or"Enable SFX"end,code=function()setting.sfx=not setting.sfx end},
|
||||
{x=870,y=180,w=340,h=60,rgb=color.white,t=function()return setting.bgm and"Disable BGM"or"Enable BGM"end,code=function()BGM()setting.bgm=not setting.bgmBGM("blank")end},
|
||||
{x=870,y=260,w=340,h=60,rgb=color.white,t=function()return setting.fullscreen and"Disable fullscreen"or"Enable fullscreen"end,
|
||||
code=function()
|
||||
setting.fullscreen=not setting.fullscreen
|
||||
love.window.setFullscreen(setting.fullscreen)
|
||||
end
|
||||
},
|
||||
|
||||
{x=300,y=400,w=230,h=50,rgb={1,1,1},alpha=0,t="More settings",code=function()gotoScene("setting2")end},
|
||||
{x=500,y=500,w=100,h=50,rgb={1,1,1},alpha=0,t="Back",code=function()back()end},
|
||||
{x=390,y=250,w=320,h=60,rgb=color.white,t="Advanced settings",code=function()gotoScene("setting2")end},
|
||||
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=function()back()end},
|
||||
},
|
||||
setting2={
|
||||
{x=350,y=70,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[1]end,code=function()keysetting=1 end},
|
||||
{x=350,y=120,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[2]end,code=function()keysetting=2 end},
|
||||
{x=350,y=170,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[3]end,code=function()keysetting=3 end},
|
||||
{x=350,y=220,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[4]end,code=function()keysetting=4 end},
|
||||
{x=350,y=270,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[5]end,code=function()keysetting=5 end},
|
||||
{x=350,y=320,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[6]end,code=function()keysetting=6 end},
|
||||
{x=350,y=370,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[7]end,code=function()keysetting=7 end},
|
||||
{x=350,y=420,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[8]end,code=function()keysetting=8 end},
|
||||
{x=350,y=470,w=210,h=43,rgb={1,1,1},alpha=0,t=function()return setting.key[9]end,code=function()keysetting=9 end},
|
||||
{x=320,y=550,w=130,h=43,rgb={1,1,1},alpha=0,t="Reset",code=function()setting.key={"left","right","x","z","c","up","down","space","r","LEFT","RIGHT"}end},
|
||||
{x=500,y=550,w=100,h=50,rgb={1,1,1},alpha=0,t="Back",code=function()back()end},
|
||||
{x=850,y=90,w=40,h=40,rgb=color.white,t="-",code=function()setting.das=(setting.das-1)%31 end,hold=true},
|
||||
{x=1210,y=90,w=40,h=40,rgb=color.white,t="+",code=function()setting.das=(setting.das+1)%31 end,hold=true},
|
||||
{x=1260,y=90,w=40,h=40,rgb=color.white,t="-",code=function()setting.arr=(setting.arr-1)%16 end,hold=true},
|
||||
{x=1430,y=90,w=40,h=40,rgb=color.white,t="+",code=function()setting.arr=(setting.arr+1)%16 end,hold=true},
|
||||
{x=420,y=70,w=190,h=45,rgb=color.white,t=function()return setting.key[1]end,code=function()keysetting=1 end},
|
||||
{x=420,y=130,w=190,h=45,rgb=color.white,t=function()return setting.key[2]end,code=function()keysetting=2 end},
|
||||
{x=420,y=190,w=190,h=45,rgb=color.white,t=function()return setting.key[3]end,code=function()keysetting=3 end},
|
||||
{x=420,y=250,w=190,h=45,rgb=color.white,t=function()return setting.key[4]end,code=function()keysetting=4 end},
|
||||
{x=420,y=310,w=190,h=45,rgb=color.white,t=function()return setting.key[5]end,code=function()keysetting=5 end},
|
||||
{x=420,y=370,w=190,h=45,rgb=color.white,t=function()return setting.key[6]end,code=function()keysetting=6 end},
|
||||
{x=420,y=430,w=190,h=45,rgb=color.white,t=function()return setting.key[7]end,code=function()keysetting=7 end},
|
||||
{x=420,y=490,w=190,h=45,rgb=color.white,t=function()return setting.key[8]end,code=function()keysetting=8 end},
|
||||
{x=420,y=550,w=190,h=45,rgb=color.white,t=function()return setting.key[9]end,code=function()keysetting=9 end},
|
||||
{x=420,y=630,w=120,h=55,rgb=color.white,t="Reset",code=function()setting.key={"left","right","x","z","c","up","down","space","r","LEFT","RIGHT"}end},
|
||||
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=function()keysetting=nil;back()end},
|
||||
},
|
||||
help={
|
||||
{x=500,y=500,w=200,h=60,rgb={1,1,1},alpha=0,t="Back",code=function()back()end},
|
||||
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=function()back()end},
|
||||
},
|
||||
stat={
|
||||
{x=500,y=500,w=200,h=60,rgb={1,1,1},alpha=0,t="Back",code=function()back()end},
|
||||
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=function()back()end},
|
||||
},
|
||||
sel=nil,--selected button Obj
|
||||
pressing=0,--pressing time
|
||||
}
|
||||
}
|
||||
for k,v in pairs(Buttons)do
|
||||
if type(v)=="table"then
|
||||
for i=1,#v do
|
||||
v[i].alpha=0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
gamePad={
|
||||
{x=0,y=0,r=60},--moveLeft
|
||||
{x=0,y=0,r=60},--moveRight
|
||||
{x=0,y=0,r=60},--rotLeft
|
||||
{x=0,y=0,r=60},--rotRight
|
||||
{x=0,y=0,r=60},--rotFlip
|
||||
{x=0,y=0,r=60},--hardDrop
|
||||
{x=0,y=0,r=60},--softDrop
|
||||
{x=0,y=0,r=60},--hold
|
||||
{x=0,y=0,r=60},--restart
|
||||
{x=0,y=0,r=60},--toLeft
|
||||
{x=0,y=0,r=60},--toRight
|
||||
{x=0,y=0,r=60},--toDown
|
||||
}
|
||||
for i=1,#gamePad do
|
||||
gamePad[i].press=false
|
||||
gamePad[i].r=gamePad[i].r^2
|
||||
end
|
||||
18
conf.lua
18
conf.lua
@@ -2,27 +2,27 @@ function love.conf(t)
|
||||
local X=nil
|
||||
t.identity="Techmino"--The name of the save directory (string)
|
||||
t.appendidentity=X--Search files in source directory before save directory (boolean)
|
||||
t.version="11.2"
|
||||
t.version="11.1"
|
||||
t.console=X
|
||||
t.accelerometerjoystick=X--Enable the accelerometer on iOS and Android by exposing it as a Joystick (boolean)
|
||||
t.externalstorage=X
|
||||
t.gammacorrect=true
|
||||
-- t.audio.mixwithsystem=true--Keep background music playing when opening LOVE (boolean, iOS and Android only)
|
||||
|
||||
t.window.title="Techmino"
|
||||
t.window.title="Techmino Alpha"
|
||||
t.window.icon="/image/icon.png"
|
||||
t.window.width=1000
|
||||
t.window.height=600
|
||||
t.window.width=1280
|
||||
t.window.height=720
|
||||
t.window.borderless=X
|
||||
t.window.resizable=true
|
||||
t.window.minwidth=500
|
||||
t.window.minheight=300
|
||||
t.window.minwidth=640
|
||||
t.window.minheight=360
|
||||
t.window.fullscreen=X
|
||||
t.window.fullscreentype="desktop"--Choose between "desktop" fullscreen or "exclusive" fullscreen mode (string)
|
||||
t.window.vsync=1
|
||||
t.window.msaa=0--The number of samples to use with multi-sampled antialiasing (number)
|
||||
t.window.depth=nil--The number of bits per sample in the depth buffer
|
||||
t.window.stencil=nil--The number of bits per sample in the stencil buffer
|
||||
t.window.msaa=X--The number of samples to use with multi-sampled antialiasing (number)
|
||||
t.window.depth=X--The number of bits per sample in the depth buffer
|
||||
t.window.stencil=1--The number of bits per sample in the stencil buffer
|
||||
t.window.display=1--Index of the monitor to show the window in (number)
|
||||
t.window.highdpi=X--Enable high-dpi mode for the window on a Retina display (boolean)
|
||||
t.window.x=nil
|
||||
|
||||
46
control.lua
46
control.lua
@@ -1,11 +1,10 @@
|
||||
function love.mousemoved(x,y)
|
||||
x,y=mouseConvert(x,y)
|
||||
mx,my=x,y
|
||||
mx,my=mouseConvert(x,y)
|
||||
Buttons.sel=nil
|
||||
for i=1,#Buttons[scene]do
|
||||
local B=Buttons[scene][i]
|
||||
if not(B.hide and B.hide())then
|
||||
if abs(x-B.x)<B.w*.5 and abs(y-B.y)<B.h*.5 then
|
||||
if abs(mx-B.x)<B.w*.5 and abs(my-B.y)<B.h*.5 then
|
||||
Buttons.sel=B
|
||||
return nil
|
||||
end
|
||||
@@ -14,8 +13,8 @@ function love.mousemoved(x,y)
|
||||
if not Buttons.sel then Buttons.pressing=0 end
|
||||
end
|
||||
function love.mousepressed(x,y,k)
|
||||
x,y=mouseConvert(x,y)
|
||||
if mouseDown[scene]then mouseDown[scene](x,y,k)end
|
||||
mx,my=mouseConvert(x,y)
|
||||
if mouseDown[scene]then mouseDown[scene](mx,my,k)end
|
||||
if k==1 then
|
||||
if not sceneSwaping and Buttons.sel then
|
||||
local B=Buttons.sel
|
||||
@@ -23,7 +22,7 @@ function love.mousepressed(x,y,k)
|
||||
B.code()
|
||||
B.alpha=1
|
||||
Buttons.sel=nil
|
||||
love.mousemoved(mx,my)
|
||||
love.mousemoved(x,y)
|
||||
SFX("button")
|
||||
end
|
||||
elseif k==3 then
|
||||
@@ -33,17 +32,38 @@ end
|
||||
function love.mousereleased(x,y,k)
|
||||
Buttons.pressing=0
|
||||
end
|
||||
--[[
|
||||
|
||||
function love.touchpressed(id,x,y)
|
||||
local i=love.touch.getTouches
|
||||
if #i==1 then
|
||||
love.mousemoved(x,y)
|
||||
end
|
||||
ins(touches,id)
|
||||
end
|
||||
function love.touchrealeased(id,x,y)
|
||||
love.mousepressed(x,y,1)
|
||||
end]]
|
||||
for i=1,#touches do
|
||||
if touches[i]==id then rem(touches,i)break end
|
||||
end
|
||||
end
|
||||
function love.touchmoved(id,x,y,dx,dy)
|
||||
end
|
||||
|
||||
function love.keypressed(i)
|
||||
--[[
|
||||
if Buttons.sel then
|
||||
local b=Buttons.sel
|
||||
if i=="up"then b.y=b.y-10
|
||||
elseif i=="down"then b.y=b.y+10
|
||||
elseif i=="left"then b.x=b.x-10
|
||||
elseif i=="right"then b.x=b.x+10
|
||||
elseif i=="k"then b.w=b.w-10
|
||||
elseif i=="l"then b.w=b.w+10
|
||||
elseif i==","then b.h=b.h-10
|
||||
elseif i=="."then b.h=b.h+10
|
||||
elseif i=="s"then
|
||||
print("")
|
||||
for i=1,#Buttons[scene]do
|
||||
local b=Buttons[scene][i]
|
||||
print(b.t,b.x,b.y,b.w,b.h)
|
||||
end
|
||||
end
|
||||
end]]
|
||||
if keyDown[scene]then keyDown[scene](i)
|
||||
elseif i=="escape"then back()
|
||||
end
|
||||
|
||||
@@ -27,6 +27,8 @@ end
|
||||
function game.play()
|
||||
scene="play"
|
||||
--curBG="game1"
|
||||
resetGameData()
|
||||
collectgarbage()
|
||||
SFX("ready")
|
||||
end
|
||||
function game.setting()
|
||||
|
||||
BIN
image/BG/1.png
BIN
image/BG/1.png
Binary file not shown.
|
Before Width: | Height: | Size: 9.3 KiB After Width: | Height: | Size: 10 KiB |
BIN
image/block.png
BIN
image/block.png
Binary file not shown.
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.2 KiB |
475
main.lua
475
main.lua
@@ -1,10 +1,9 @@
|
||||
math.randomseed(os.time()*626)
|
||||
gc,kb,ms,tm,fs=love.graphics,love.keyboard,love.mouse,love.timer,love.filesystem
|
||||
gc,kb,ms,tc,tm,fs=love.graphics,love.keyboard,love.mouse,love.touch,love.timer,love.filesystem
|
||||
toN,toS=tonumber,tostring
|
||||
int,ceil,abs,rnd,max,min,sin,cos,atan,pi=math.floor,math.ceil,math.abs,math.random,math.max,math.min,math.sin,math.cos,math.atan,math.pi
|
||||
sub,gsub,find,format,byte,char=string.sub,string.gsub,string.find,string.format,string.byte,string.char
|
||||
ins,rem,sort=table.insert,table.remove,table.sort
|
||||
function null()end
|
||||
|
||||
function sortByTime(a,b)
|
||||
return a.time>b.time
|
||||
end
|
||||
@@ -13,12 +12,15 @@ ww,wh=gc.getWidth(),gc.getHeight()
|
||||
|
||||
Timer=tm.getTime
|
||||
mx,my,mouseShow=-10,-10,true
|
||||
pause=0--pause countdown
|
||||
pause=0--pause countdown(frame)
|
||||
focus=true
|
||||
touches={}--touch ids
|
||||
|
||||
scene=""
|
||||
gamemode=""
|
||||
bgmPlaying=nil
|
||||
curBG="none"
|
||||
BGblock={ct=140}
|
||||
|
||||
languages={"eng"}
|
||||
prevMenu={
|
||||
@@ -33,28 +35,35 @@ prevMenu={
|
||||
intro="quit",
|
||||
main="quit",
|
||||
}
|
||||
swap={
|
||||
none={2,1,d=function()end},
|
||||
flash={8,1,d=function()gc.clear(1,1,1)end},
|
||||
deck={60,20,d=function()
|
||||
local t=sceneSwaping.time
|
||||
t=(t>40 and 60-t or t>20 and 20 or t)/255
|
||||
gc.setColor(.6,.6,.6,t*13)
|
||||
gc.rectangle("fill",0,0,1000,t*15)
|
||||
gc.rectangle("fill",0,600-t*15,1000,t*15)
|
||||
gc.setColor(.5,0,0,t*13)
|
||||
gc.line(0,t*15,1000,t*15)
|
||||
gc.line(0,600-t*15,1000,600-t*15)
|
||||
end
|
||||
},
|
||||
}
|
||||
|
||||
kb.setKeyRepeat(false)
|
||||
kb.setTextInput(false)
|
||||
--Disable system key repeat
|
||||
|
||||
Texts={
|
||||
eng={
|
||||
load={"Loading textures","Loading BGM","Loading SFX","Finished",},
|
||||
stat={"Games played:","Game time:","Total block used:","Total rows cleared:","Total lines sent:",},
|
||||
stat={
|
||||
"Games run:",
|
||||
"Games played:",
|
||||
"Game time:",
|
||||
"Total block used:",
|
||||
"Total rows cleared:",
|
||||
"Total lines sent:",
|
||||
},
|
||||
help={
|
||||
"I think you don't need \"help\".",
|
||||
"THIS IS NOT TETRIS,and doesn't use SRS.",
|
||||
"But just play like playing TOP/C2/KOS/TGM3",
|
||||
"Game is not public now,DO NOT DISTIRBUTE",
|
||||
"",
|
||||
"Powered by LOVE2D",
|
||||
"Author:MrZ E-mail:1046101471@qq.com",
|
||||
"Programe:MrZ Art:MrZ Music:MrZ SFX:MrZ",
|
||||
"Tool used:VScode,GFIE,Beepbox,Goldwave",
|
||||
"Special thanks:TOP,C2,KOS,TGM3,GFIE,and YOU!!",
|
||||
"Any bugs/suggestions to me.",
|
||||
},
|
||||
},
|
||||
}
|
||||
numFonts={}
|
||||
@@ -66,7 +75,7 @@ function numFont(s)
|
||||
numFonts[s]=t
|
||||
gc.setFont(t)
|
||||
end
|
||||
currentFont=-1
|
||||
currentFont=s
|
||||
end
|
||||
Fonts={}for i=1,#languages do Fonts[languages[i]]={}end
|
||||
fontLib={
|
||||
@@ -96,8 +105,6 @@ chi=function(s)
|
||||
end,
|
||||
}
|
||||
|
||||
require("button")
|
||||
|
||||
sfx={
|
||||
"button",
|
||||
"ready","start",
|
||||
@@ -173,21 +180,32 @@ FX={
|
||||
end,
|
||||
}
|
||||
function stencil_field()
|
||||
gc.rectangle("fill",0,0,300,600)
|
||||
gc.rectangle("fill",0,-10,300,610)
|
||||
end
|
||||
--System data
|
||||
list={
|
||||
blockName={"Z","S","L","J","T","O","I"},
|
||||
clearname={"Single","Double","Triple"},
|
||||
reason={[0]="Escape","Block out","Lock out","Finished","Top out"},
|
||||
method={"Bag7","His4","Rnd"},
|
||||
color={
|
||||
red={1,0,0},
|
||||
green={0,1,0},
|
||||
blue={0,0,1},
|
||||
yellow={1,1,0},
|
||||
purple={1,0,1},
|
||||
cyan={0,1,1},
|
||||
white={1,1,1},
|
||||
grey={.6,.6,.6},
|
||||
}
|
||||
-- for k,v in pairs(color) do
|
||||
-- v[1],v[2],v[3]=255*v[1],255*v[2],255*v[3]
|
||||
-- end
|
||||
|
||||
loseReason={"Finished","Block out"}
|
||||
blockName={"Z","S","L","J","T","O","I"}
|
||||
clearName={"Single","Double","Triple"}
|
||||
actName={"moveLeft","moveRight","rotRight","rotLeft","rotFlip","hardDrop","softDrop","hold","restart","toLeft","toRight"}
|
||||
actName_={"move left","move right","rotate right","rotate left","rotate flip","hard drop","soft drop","hold","restart","toLeft","toRight"}
|
||||
actName_show={"move left","move right","rotate right","rotate left","rotate flip","hard drop","soft drop","hold","restart","toLeft","toRight"}
|
||||
blockPos={4,4,4,4,4,5,4}
|
||||
renATK={[0]=0,0,0,1,1,1,2,2,2,3,3,3}
|
||||
renATK={[0]=0,0,0,1,1,1,2,2,2,3,3,3}--4 else
|
||||
b2bATK={3,5,8}
|
||||
require"SRS"--load bolck&SRS data
|
||||
require("TRS")--load block&TRS kick
|
||||
gameEnv0={
|
||||
das=6,arr=1,
|
||||
ghost=true,center=true,
|
||||
@@ -197,9 +215,7 @@ gameEnv0={
|
||||
sequence=1,visible=1,
|
||||
_20G=false,target=9e99,
|
||||
freshLimit=9e99,
|
||||
color={1,5,2,8,10,3,7,13},
|
||||
key={"left","right","x","z","c","up","down","space","LEFT","RIGHT"},
|
||||
spinList={true,true,true,true,true,false,false},
|
||||
reach=function()end,--Called when reach row target
|
||||
}
|
||||
randomMethod={
|
||||
@@ -241,7 +257,7 @@ loadmode={
|
||||
target=40,
|
||||
reach=Event.gameover.win,
|
||||
}
|
||||
createPlayer(1,190,20,.8)
|
||||
createPlayer(1,340,15)
|
||||
curBG="game1"
|
||||
BGM("race")
|
||||
end,
|
||||
@@ -254,7 +270,7 @@ loadmode={
|
||||
target=200,
|
||||
reach=Event.gameover.win,
|
||||
}
|
||||
createPlayer(1,190,20,.8)
|
||||
createPlayer(1,340,15)
|
||||
curBG="game1"
|
||||
BGM("reason")
|
||||
end,
|
||||
@@ -269,7 +285,7 @@ loadmode={
|
||||
freshLimit=15,
|
||||
arr=1,
|
||||
}
|
||||
createPlayer(1,190,20,.8)
|
||||
createPlayer(1,340,15)
|
||||
curBG="game3"
|
||||
BGM("push")
|
||||
end,
|
||||
@@ -282,7 +298,7 @@ loadmode={
|
||||
reach=Event.marathon_reach,
|
||||
freshLimit=15,
|
||||
}
|
||||
createPlayer(1,190,20,.8)
|
||||
createPlayer(1,340,15)
|
||||
curBG="game1"
|
||||
BGM("way")
|
||||
end,
|
||||
@@ -298,7 +314,7 @@ loadmode={
|
||||
freshLimit=15,
|
||||
arr=1,
|
||||
}
|
||||
createPlayer(1,190,20,.8)
|
||||
createPlayer(1,340,15)
|
||||
curBG="game2"
|
||||
BGM("push")
|
||||
end,
|
||||
@@ -307,18 +323,18 @@ loadmode={
|
||||
wait=1,
|
||||
fall=1,
|
||||
}
|
||||
createPlayer(1,240,30,.8)--Player
|
||||
createPlayer(1,340,15)--Player
|
||||
|
||||
local n=2
|
||||
for i=1,2 do
|
||||
for j=1,5 do
|
||||
createPlayer(n,100*i-65,110*j-75,.15,rnd(4)+1)
|
||||
createPlayer(n,150*i-115,142*j-130,.19,rnd(4)+1)
|
||||
n=n+1
|
||||
end
|
||||
end
|
||||
for i=9,10 do
|
||||
for i=8,9 do
|
||||
for j=1,5 do
|
||||
createPlayer(n,100*i-130,110*j-75,.14,rnd(4)+1)
|
||||
createPlayer(n,150*i-210,142*j-130,.19,rnd(4)+1)
|
||||
n=n+1
|
||||
end
|
||||
end--AIs
|
||||
@@ -331,8 +347,8 @@ loadmode={
|
||||
wait=1,
|
||||
fall=1,
|
||||
}
|
||||
createPlayer(1,40,30,.8)--Player
|
||||
createPlayer(2,560,100,.7,2)--AI
|
||||
createPlayer(1,20,15)--Player
|
||||
createPlayer(2,660,85,.9,2)--AI
|
||||
|
||||
curBG="game2"
|
||||
BGM("race")
|
||||
@@ -346,7 +362,7 @@ loadmode={
|
||||
visible=0,
|
||||
freshLimit=8,
|
||||
}
|
||||
createPlayer(1,190,20,.8)
|
||||
createPlayer(1,340,15)
|
||||
|
||||
curBG="game1"
|
||||
BGM("push")
|
||||
@@ -357,8 +373,8 @@ loadmode={
|
||||
fall=1,
|
||||
visible=2,
|
||||
}
|
||||
createPlayer(1,40,30,.8)--Player
|
||||
createPlayer(2,560,100,.7,2)--AI
|
||||
createPlayer(1,20,15)--Player
|
||||
createPlayer(2,660,85,.9,2)--AI
|
||||
|
||||
curBG="game2"
|
||||
BGM("race")
|
||||
@@ -369,22 +385,18 @@ Event={
|
||||
win=function()
|
||||
P.alive=false
|
||||
P.control=false
|
||||
P.timing=false
|
||||
P.waiting=1e99
|
||||
gameover=0
|
||||
for i=1,#visTime do for j=1,10 do
|
||||
P.visTime[i][j]=1e99
|
||||
end end--Make all visible
|
||||
P.control=false
|
||||
ins(task,Event.task.win)
|
||||
end,
|
||||
lose=function()
|
||||
P.alive=false
|
||||
P.control=false
|
||||
P.timing=false
|
||||
P.waiting=1e99
|
||||
gameover=0
|
||||
for i=1,#visTime do for j=1,10 do
|
||||
P.visTime[i][j]=1e99
|
||||
end end--Make all visible
|
||||
for i=1,#players.alive do
|
||||
if players.alive[i]==P.id then
|
||||
rem(players.alive,i)
|
||||
@@ -474,44 +486,28 @@ Data={
|
||||
shirase_lare={[0]=0},
|
||||
}
|
||||
mesDisp={
|
||||
--Default:font=40,white
|
||||
sprint=function()
|
||||
gc.setColor(1,1,1)
|
||||
setFont(40)
|
||||
gc.print(format("%0.2f",time),-130,530)
|
||||
setFont(75)
|
||||
mStr(max(40-P.cstat.row,0),-80,280)
|
||||
mStr(max(40-P.cstat.row,0),-76,280)
|
||||
end,
|
||||
zen=function()
|
||||
gc.setColor(1,1,1)
|
||||
setFont(40)
|
||||
gc.print(format("%0.2f",time),-130,530)
|
||||
setFont(75)
|
||||
mStr(max(200-P.cstat.row,0),-80,280)
|
||||
mStr(max(200-P.cstat.row,0),-76,280)
|
||||
end,
|
||||
gmroll=function()
|
||||
gc.setColor(1,1,1)
|
||||
setFont(40)
|
||||
gc.print(format("%0.2f",time),-130,530)
|
||||
setFont(35)
|
||||
gc.print("Tetris",-120,390)
|
||||
setFont(80)
|
||||
mStr(cstat.tetris,-77,420)
|
||||
end,
|
||||
marathon=function()
|
||||
gc.setColor(1,1,1)
|
||||
setFont(40)
|
||||
gc.print(format("%0.2f",time),-130,530)
|
||||
mStr(P.cstat.row.."/"..gameEnv.target,-80,250)
|
||||
mStr(P.cstat.row.."/"..gameEnv.target,-76,250)
|
||||
end,
|
||||
death=function()
|
||||
gc.setColor(1,1,1)
|
||||
setFont(40)
|
||||
gc.print(format("%0.2f",time),-130,530)
|
||||
mStr(P.cstat.row.."/"..gameEnv.target,-80,250)
|
||||
mStr(P.cstat.row.."/"..gameEnv.target,-76,250)
|
||||
end,
|
||||
tetris25=function()
|
||||
gc.setColor(1,1,1)
|
||||
setFont(40)
|
||||
gc.print("Remain",-142,510)
|
||||
gc.print("Attack",-132,365)
|
||||
setFont(80)
|
||||
@@ -519,9 +515,22 @@ mesDisp={
|
||||
mStr(cstat.atk,-77,300)
|
||||
end,
|
||||
blind=function()
|
||||
gc.setColor(1,1,1)
|
||||
setFont(35)
|
||||
gc.print("Rows",-115,220)
|
||||
gc.print("Tetris",-120,390)
|
||||
setFont(80)
|
||||
mStr(P.cstat.row,-80,250)
|
||||
mStr(P.cstat.row,-77,250)
|
||||
mStr(cstat.tetris,-77,420)
|
||||
end,
|
||||
solo=function()
|
||||
gc.print("Attack",-132,365)
|
||||
setFont(80)
|
||||
mStr(cstat.atk,-77,300)
|
||||
end,
|
||||
asymsolo=function()
|
||||
gc.print("Attack",-132,365)
|
||||
setFont(80)
|
||||
mStr(cstat.atk,-77,300)
|
||||
end,
|
||||
}
|
||||
--Game system Data
|
||||
@@ -533,7 +542,6 @@ setting={
|
||||
das=5,arr=0,
|
||||
ghost=true,center=true,
|
||||
key={"left","right","x","z","c","up","down","space","r","LEFT","RIGHT"},
|
||||
color={1,5,2,8,10,3,7,13},
|
||||
}
|
||||
stat={
|
||||
run=0,
|
||||
@@ -548,6 +556,7 @@ stat={
|
||||
spin=0,
|
||||
}
|
||||
--Userdata tables
|
||||
require("button")
|
||||
|
||||
function string.splitS(s,sep)
|
||||
sep=sep or"/"
|
||||
@@ -582,32 +591,10 @@ function nextLanguage()
|
||||
end
|
||||
function mStr(s,x,y)gc.printf(s,x-500,y,1000,"center")end
|
||||
function mouseConvert(x,y)
|
||||
if wh/ww<=.6 then
|
||||
return 500+(x-ww*.5)*600/wh,y*600/wh
|
||||
if wh/ww<=720/1280 then
|
||||
return 640+(x-ww*.5)*720/wh,y*720/wh
|
||||
else
|
||||
return x*1000/ww,300+(y-wh*.5)*1000/ww
|
||||
end
|
||||
end
|
||||
function drawButton()
|
||||
for i=1,#Buttons[scene]do
|
||||
local B=Buttons[scene][i]
|
||||
if not(B.hide and B.hide())then
|
||||
local t=B==Buttons.sel and .3 or 0
|
||||
B.alpha=abs(B.alpha-t)>.02 and(B.alpha+(B.alpha<t and .02 or -.02))or t
|
||||
if B.alpha>t then B.alpha=B.alpha-.02 elseif B.alpha<t then B.alpha=B.alpha+.02 end
|
||||
gc.setColor(B.rgb[1],B.rgb[2],B.rgb[3],B.alpha)
|
||||
gc.rectangle("fill",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h)
|
||||
local t=type(B.t)=="string"and B.t or B.t()
|
||||
gc.setColor(B.rgb[1],B.rgb[2],B.rgb[3],.3)
|
||||
gc.setLineWidth(6)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h)
|
||||
mStr(t,B.x-1,B.y-1-currentFont*.5)
|
||||
mStr(t,B.x-1,B.y+1-currentFont*.5)
|
||||
mStr(t,B.x+1,B.y-1-currentFont*.5)
|
||||
mStr(t,B.x+1,B.y+1-currentFont*.5)
|
||||
gc.setColor(B.rgb)
|
||||
gc.setLineWidth(3)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h)
|
||||
mStr(t,B.x,B.y-currentFont*.5)
|
||||
end
|
||||
return x*1280/ww,360+(y-wh*.5)*1280/ww
|
||||
end
|
||||
end
|
||||
function SFX(s,v)
|
||||
@@ -628,7 +615,7 @@ end
|
||||
|
||||
function gotoScene(s,style)
|
||||
if not sceneSwaping and s~=scene then
|
||||
style=style or"none"
|
||||
style=style or"deck"
|
||||
sceneSwaping={
|
||||
tar=s,style=style,
|
||||
time=swap[style][1],mid=swap[style][2],
|
||||
@@ -636,87 +623,23 @@ function gotoScene(s,style)
|
||||
}
|
||||
end
|
||||
end
|
||||
function createPlayer(id,x,y,size,AIspeed,data)
|
||||
players[id]={id=id}
|
||||
ins(players.alive,id)
|
||||
local P=players[id]
|
||||
P.index={__index=P}
|
||||
P.x,P.y,P.size=x,y,size
|
||||
|
||||
if AIspeed then
|
||||
P.ai={
|
||||
controls={},
|
||||
controlDelay=60,
|
||||
controlDelay0=AIspeed,
|
||||
}
|
||||
end
|
||||
|
||||
P.alive=true
|
||||
P.control=false
|
||||
P.time=0
|
||||
P.cstat={piece=0,row=0,atk=0,tetris=0}--Current gamestat
|
||||
P.keyTime={}for i=1,10 do P.keyTime[i]=-1e5 end P.keySpeed=0
|
||||
P.dropTime={}for i=1,10 do P.dropTime[i]=-1e5 end P.dropSpeed=0
|
||||
|
||||
P.gameEnv={}--Game setting vars,like dropDelay setting
|
||||
for k,v in pairs(gameEnv0)do
|
||||
if data and data[k]~=nil then
|
||||
P.gameEnv[k]=data[k]
|
||||
elseif modeEnv[k]~=nil then
|
||||
P.gameEnv[k]=modeEnv[k]
|
||||
elseif setting[k]~=nil then
|
||||
P.gameEnv[k]=setting[k]
|
||||
else
|
||||
P.gameEnv[k]=v
|
||||
end
|
||||
end--reset current game settings
|
||||
|
||||
P.field,P.visTime,P.atkBuffer={},{},{}
|
||||
P.hn,P.hb,P.holded=0,{{}},false
|
||||
P.nxt,P.nb={},{}
|
||||
P.dropDelay,P.lockDelay=P.gameEnv.drop,P.gameEnv.lock
|
||||
P.freshTime=0
|
||||
P.lastSpin=false
|
||||
|
||||
local bag1={1,2,3,4,5,6,7}
|
||||
for i=1,7 do
|
||||
P.nxt[i]=rem(bag1,rnd(#bag1))
|
||||
P.nb[i]=blocks[P.nxt[i]][0]
|
||||
end--First bag
|
||||
|
||||
if P.gameEnv.sequence==1 then P.bag={}--Bag7
|
||||
elseif P.gameEnv.sequence==2 then P.his={}for i=1,4 do P.his[i]=P.nxt[i+3]end--History4
|
||||
elseif P.gameEnv.sequence==3 then--Pure random
|
||||
end
|
||||
P.showTime=P.gameEnv.visible==1 and 1e99 or P.gameEnv.visible==2 and 300 or 20
|
||||
P.freshNext=randomMethod[P.gameEnv.sequence]
|
||||
P.cb,P.sc,P.bn,P.r,P.c,P.cx,P.cy,P.dir,P.y_img={{}},{0,0},1,0,0,0,0,0,0
|
||||
P.keyPressing={}for i=1,10 do P.keyPressing[i]=false end
|
||||
P.moving,P.downing=0,0
|
||||
P.waiting,P.falling=0,0
|
||||
P.clearing={}
|
||||
P.fieldBeneath=0
|
||||
|
||||
P.combo=0
|
||||
P.b2b=false
|
||||
|
||||
P.task={}
|
||||
P.bonus={}
|
||||
end
|
||||
function startGame(mode)
|
||||
--rec=""
|
||||
gamemode=mode
|
||||
function resetGameData()
|
||||
players={alive={}}
|
||||
loadmode[mode]()
|
||||
loadmode[gamemode]()
|
||||
|
||||
frame=0
|
||||
count=179
|
||||
FX.beam={}
|
||||
for i=1,#PTC.dust do PTC.dust[i]:release()end
|
||||
for i=1,#PTC.dust do PTC.dust[i]=nil end
|
||||
for i=1,#players do
|
||||
PTC.dust[i]=PTC.dust[0]:clone()
|
||||
PTC.dust[i]:start()
|
||||
end
|
||||
stat.game=stat.game+1
|
||||
end
|
||||
function startGame(mode)
|
||||
--rec=""
|
||||
gamemode=mode
|
||||
gotoScene("play")
|
||||
end
|
||||
function back()
|
||||
@@ -787,6 +710,74 @@ function savedata()
|
||||
userdata:close()
|
||||
end
|
||||
--System events
|
||||
function createPlayer(id,x,y,size,AIspeed,data)
|
||||
players[id]={id=id}
|
||||
ins(players.alive,id)
|
||||
local P=players[id]
|
||||
P.index={__index=P}
|
||||
P.x,P.y,P.size=x,y,size or 1
|
||||
|
||||
if AIspeed then
|
||||
P.ai={
|
||||
controls={},
|
||||
controlDelay=60,
|
||||
controlDelay0=AIspeed,
|
||||
}
|
||||
end
|
||||
|
||||
P.alive=true
|
||||
P.control=false
|
||||
P.timing=false
|
||||
P.time=0
|
||||
P.cstat={key=0,piece=0,row=0,atk=0,tetris=0}--Current gamestat
|
||||
P.keyTime={}for i=1,10 do P.keyTime[i]=-1e5 end P.keySpeed=0
|
||||
P.dropTime={}for i=1,10 do P.dropTime[i]=-1e5 end P.dropSpeed=0
|
||||
|
||||
P.gameEnv={}--Game setting vars,like dropDelay setting
|
||||
for k,v in pairs(gameEnv0)do
|
||||
if data and data[k]~=nil then
|
||||
P.gameEnv[k]=data[k]
|
||||
elseif modeEnv[k]~=nil then
|
||||
P.gameEnv[k]=modeEnv[k]
|
||||
elseif setting[k]~=nil then
|
||||
P.gameEnv[k]=setting[k]
|
||||
else
|
||||
P.gameEnv[k]=v
|
||||
end
|
||||
end--reset current game settings
|
||||
|
||||
P.field,P.visTime,P.atkBuffer={},{},{}
|
||||
P.hn,P.hb,P.holded=0,{{}},false
|
||||
P.nxt,P.nb={},{}
|
||||
P.dropDelay,P.lockDelay=P.gameEnv.drop,P.gameEnv.lock
|
||||
P.freshTime=0
|
||||
P.lastSpin=false
|
||||
|
||||
local bag1={1,2,3,4,5,6,7}
|
||||
for i=1,7 do
|
||||
P.nxt[i]=rem(bag1,rnd(#bag1))
|
||||
P.nb[i]=blocks[P.nxt[i]][0]
|
||||
end--First bag
|
||||
|
||||
if P.gameEnv.sequence==1 then P.bag={}--Bag7
|
||||
elseif P.gameEnv.sequence==2 then P.his={}for i=1,4 do P.his[i]=P.nxt[i+3]end--History4
|
||||
elseif P.gameEnv.sequence==3 then--Pure random
|
||||
end
|
||||
P.showTime=P.gameEnv.visible==1 and 1e99 or P.gameEnv.visible==2 and 300 or 20
|
||||
P.freshNext=randomMethod[P.gameEnv.sequence]
|
||||
P.cb,P.sc,P.bn,P.r,P.c,P.cx,P.cy,P.dir,P.y_img={{}},{0,0},1,0,0,0,0,0,0
|
||||
P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
|
||||
P.moving,P.downing=0,0
|
||||
P.waiting,P.falling=0,0
|
||||
P.clearing={}
|
||||
P.fieldBeneath=0
|
||||
|
||||
P.combo=0
|
||||
P.b2b=false
|
||||
|
||||
P.task={}
|
||||
P.bonus={}
|
||||
end
|
||||
function showText(text,type,font,dy)
|
||||
ins(P.bonus,{t=0,text=text,draw=FX[type],font=font,dy=dy or 0})
|
||||
end
|
||||
@@ -855,8 +846,8 @@ function resetblock()
|
||||
if keyPressing[3]then spin(1,true)end
|
||||
if keyPressing[4]then spin(-1,true)end
|
||||
if keyPressing[5]then spin(2,true)end
|
||||
freshgho()
|
||||
if ifoverlap(cb,cx,cy)then Event.gameover.lose()end
|
||||
freshgho()
|
||||
if keyPressing[6]then act.hardDrop()P.keyPressing[6]=false end
|
||||
end
|
||||
function pressKey(i,player)
|
||||
@@ -874,7 +865,7 @@ function pressKey(i,player)
|
||||
elseif i==2 then
|
||||
P.moving=1
|
||||
end
|
||||
P.cstat.key=stat.key+1;ins(keyTime,1,frame)rem(keyTime,11)
|
||||
P.cstat.key=P.cstat.key+1;ins(keyTime,1,frame)rem(keyTime,11)
|
||||
stat.key=stat.key+1
|
||||
end
|
||||
-- if playmode=="recording"then ins(rec,{i,frame})end
|
||||
@@ -892,7 +883,7 @@ function spin(d,ifpre)
|
||||
local ir,ic=#icb,#icb[1]
|
||||
local ix,iy=cx+sc[2]-isc[2],cy+sc[1]-isc[1]
|
||||
local t=false--if spin available
|
||||
local iki=SRS[bn][dir*10+(dir+d)%4]
|
||||
local iki=TRS[bn][dir*10+(dir+d)%4]
|
||||
for i=1,#iki do
|
||||
if not ifoverlap(icb,ix+iki[i][1],iy+iki[i][2])then
|
||||
ix,iy=ix+iki[i][1],iy+iki[i][2]
|
||||
@@ -920,7 +911,7 @@ function hold(ifpre)
|
||||
if bn==0 then freshNext()end
|
||||
P.sc={scs[bn][1],scs[bn][2]}P.dir=0
|
||||
P.r,P.c=#cb,#cb[1]
|
||||
P.cx,P.cy=blockPos[bn],21
|
||||
P.cx,P.cy=blockPos[bn],21+ceil(fieldBeneath/30)
|
||||
freshgho()
|
||||
P.dropDelay,P.lockDelay,P.freshTime=gameEnv.drop,gameEnv.lock,0
|
||||
if ifoverlap(cb,cx,cy) then Event.gameover.lose()end
|
||||
@@ -933,9 +924,8 @@ function drop()
|
||||
if cy==y_img then
|
||||
ins(dropTime,1,frame)rem(dropTime,11)--update speed dial
|
||||
P.waiting=gameEnv.wait
|
||||
local canSpin=gameEnv.spinList[bn]
|
||||
local dospin=canSpin and ifoverlap(cb,cx-1,cy)and ifoverlap(cb,cx+1,cy)and ifoverlap(cb,cx,cy+1)
|
||||
if canSpin and not dospin and bn<6 and spinLast then
|
||||
local dospin=bn~=6 and ifoverlap(cb,cx-1,cy)and ifoverlap(cb,cx+1,cy)and ifoverlap(cb,cx,cy+1)
|
||||
if bn<6 and not dospin and bn<6 and spinLast then
|
||||
local x,y=cx+sc[2]-1,cy+sc[1]-1
|
||||
local c=0
|
||||
if solid(x-1,y+1)then c=c+1 end
|
||||
@@ -949,7 +939,7 @@ function drop()
|
||||
end
|
||||
end--Triangle spin system
|
||||
lock()
|
||||
local cc,csend=checkrow(cy,r),0--Currect clear&send
|
||||
local cc,csend,sendTime=checkrow(cy,r),0,0--Currect clear&send&sendTime
|
||||
local mini=dospin and cc<r
|
||||
|
||||
P.combo=P.combo+1--combo=0 is under
|
||||
@@ -962,40 +952,46 @@ function drop()
|
||||
csend=4
|
||||
P.b2b=true
|
||||
end
|
||||
sendTime=120
|
||||
P.cstat.tetris=P.cstat.tetris+1
|
||||
elseif cc>0 then
|
||||
if dospin then
|
||||
local t=list.blockName[bn].." spin "..list.clearname[cc]
|
||||
if mini then showText("Mini","drive",40,10)end
|
||||
local t=blockName[bn].." spin "..clearName[cc]
|
||||
if b2b then
|
||||
t=t.." B2B"
|
||||
showText(t,"spin",40)
|
||||
csend=b2bATK[cc]
|
||||
sendTime=csend*40
|
||||
else
|
||||
showText(t,"spin",50)
|
||||
csend=2*cc
|
||||
sendTime=csend*30
|
||||
P.b2b=true
|
||||
end
|
||||
if mini then showText("Mini","drive",40,10)sendTime=sendTime+30 end
|
||||
SFX("spin_"..cc)
|
||||
stat.spin=stat.spin+1
|
||||
else
|
||||
P.b2b=false
|
||||
showText(list.clearname[cc],"appear",50)
|
||||
showText(clearName[cc],"appear",50)
|
||||
csend=cc-1
|
||||
sendTime=20+csend*20
|
||||
end
|
||||
else
|
||||
P.combo=0
|
||||
if dospin then
|
||||
showText(list.blockName[bn].." spin","appear",50)
|
||||
showText(blockName[bn].." spin","appear",50)
|
||||
SFX("spin_0")
|
||||
end
|
||||
end
|
||||
if cc>0 and #clearing==#field then
|
||||
showText("Perfect Clear","flicker",70,-60)
|
||||
csend=csend+5
|
||||
csend=csend+6
|
||||
sendTime=sendTime+90
|
||||
SFX("perfectclear")
|
||||
end
|
||||
csend=csend+(renATK[combo]or 4)
|
||||
sendTime=sendTime+20*combo
|
||||
if cc>0 then
|
||||
SFX("clear_"..cc)
|
||||
SFX("ren_"..min(combo,11))
|
||||
@@ -1015,7 +1011,7 @@ function drop()
|
||||
rem(P.atkBuffer,1)
|
||||
end
|
||||
end
|
||||
if csend>0 and #players.alive>1 then garbageSend(P.id,csend,120)end
|
||||
if csend>0 and #players.alive>1 then garbageSend(P.id,csend,sendTime)end
|
||||
elseif cc==0 then
|
||||
garbageRelease()
|
||||
end--Send attack
|
||||
@@ -1036,7 +1032,7 @@ function lock()
|
||||
if not P.field[y]then P.field[y],P.visTime[y]={0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}end
|
||||
for j=1,c do
|
||||
if cb[i][j]~=0 then
|
||||
P.field[y][cx+j-1]=P.gameEnv.color[bn]
|
||||
P.field[y][cx+j-1]=P.bn
|
||||
P.visTime[y][cx+j-1]=P.showTime
|
||||
end
|
||||
end
|
||||
@@ -1069,10 +1065,7 @@ function garbageRelease()
|
||||
end
|
||||
end
|
||||
end
|
||||
function drawPixel(y,x,id,alpha)
|
||||
gc.setColor(1,1,1,alpha)
|
||||
gc.draw(blockSkin[id],30*x-30,600-30*y)
|
||||
end
|
||||
|
||||
--------------------------------Warning!_G is __indexed to players[n]!
|
||||
|
||||
require("user_actions")--Game control functions
|
||||
@@ -1094,8 +1087,8 @@ function keyDown.setting2(key)
|
||||
back()
|
||||
elseif keysetting then
|
||||
setting.key[keysetting]=key
|
||||
keysetting=nil
|
||||
end
|
||||
keysetting=nil
|
||||
end
|
||||
keyUp={}
|
||||
function keyUp.play(key)
|
||||
@@ -1112,27 +1105,60 @@ wheelmoved={}
|
||||
require("ai")--AI module
|
||||
require("timer")--Timer
|
||||
require("paint")--Paint
|
||||
require("game_scene")--Game scenes
|
||||
require("control")--User control
|
||||
require("game_scene")--Game scenes swapping
|
||||
require("control")--User system control
|
||||
|
||||
function love.update(dt)
|
||||
--[[
|
||||
if players then
|
||||
for i=1,#players do
|
||||
for k,v in pairs(players[i])do
|
||||
if rawget(_G,k)then print(i,k)end
|
||||
for k,v in pairs(players[1])do
|
||||
if rawget(_G,k)then print(k)end
|
||||
end
|
||||
end--variables flew debugging]]
|
||||
for i=#BGblock,1,-1 do
|
||||
BGblock[i].y=BGblock[i].y+BGblock[i].v
|
||||
if BGblock[i].y>720 then rem(BGblock[i])end
|
||||
end
|
||||
BGblock.ct=BGblock.ct-1
|
||||
if BGblock.ct==0 then
|
||||
local t={bn=rnd(7),size=2+3*rnd()}
|
||||
t.b=blocks[t.bn][rnd(0,3)]
|
||||
t.x=rnd(-#t.b[1]*t.size*30+100,1180)
|
||||
t.y=-#t.b*30*t.size
|
||||
t.v=t.size*(1+rnd())
|
||||
ins(BGblock,t)
|
||||
BGblock.ct=rnd(20,40)
|
||||
end
|
||||
--Background blocks update
|
||||
|
||||
for i=1,#touches do
|
||||
local x,y=tc.getPosition(touches[i])
|
||||
for K=1,#gamePad do
|
||||
local b=gamePad[K]
|
||||
local press=false
|
||||
if (x-b.x)^2+(y-b.y)^2<b.r then--Radios already squared
|
||||
press=true
|
||||
end
|
||||
if b.press~=press then
|
||||
(press and pressKey or releaseKey)(K)
|
||||
b.press=press
|
||||
end
|
||||
end
|
||||
end
|
||||
--Touch system
|
||||
|
||||
if Buttons.pressing>0 then
|
||||
Buttons.pressing=Buttons.pressing+1
|
||||
if Buttons.pressing>35 and Buttons.pressing%6==0 then love.mousepressed(ms.getX(),ms.getY(),1)end
|
||||
end
|
||||
--DAP button
|
||||
|
||||
if sceneSwaping then
|
||||
sceneSwaping.time=sceneSwaping.time-1
|
||||
if sceneSwaping.time==sceneSwaping.mid then
|
||||
for i=1,#Buttons[scene]do
|
||||
Buttons[scene][i].alpha=0
|
||||
end
|
||||
end--Reset buttons' state
|
||||
game[sceneSwaping.tar]()
|
||||
Buttons.sel=nil
|
||||
love.mousemoved(ms.getX(),ms.getY())
|
||||
@@ -1142,11 +1168,22 @@ function love.update(dt)
|
||||
elseif Tmr[scene]then
|
||||
Tmr[scene](dt)
|
||||
end
|
||||
--scene swapping & Timer
|
||||
end
|
||||
function love.draw()
|
||||
Pnt.BG[curBG]()
|
||||
gc.setColor(1,1,1,.3)
|
||||
for n=1,#BGblock do
|
||||
local b,img=BGblock[n].b,blockSkin[BGblock[n].bn]
|
||||
local size=BGblock[n].size
|
||||
for i=1,#b do for j=1,#b[1]do
|
||||
if b[i][j]>0 then
|
||||
gc.draw(img,BGblock[n].x+(j-1)*30*size,BGblock[n].y+(i-1)*30*size,nil,size)
|
||||
end
|
||||
end end--Block
|
||||
end
|
||||
if Pnt[scene]then Pnt[scene]()end
|
||||
setFont(35)
|
||||
setFont(40)
|
||||
drawButton()
|
||||
if mouseShow then
|
||||
gc.setColor(1,.5,0,.7)
|
||||
@@ -1155,16 +1192,16 @@ function love.draw()
|
||||
if sceneSwaping then sceneSwaping.draw()end
|
||||
|
||||
gc.setColor(0,0,0)
|
||||
if wh/ww>=.6 then
|
||||
gc.rectangle("fill",0,0,1000,-(wh*1000/ww-600)*.5)
|
||||
gc.rectangle("fill",0,600,1000,(wh*1000/ww-600)*.5)
|
||||
if wh/ww>=720/1280 then
|
||||
gc.rectangle("fill",0,0,1280,-(wh*1280/ww-720)*.5)
|
||||
gc.rectangle("fill",0,720,1280,(wh*1280/ww-720)*.5)
|
||||
else
|
||||
gc.rectangle("fill",0,0,-(ww*600/wh-1000)*.5,600)
|
||||
gc.rectangle("fill",1000,0,(ww*600/wh-1000)*.5,600)
|
||||
gc.rectangle("fill",0,0,-(ww*720/wh-1280)*.5,720)
|
||||
gc.rectangle("fill",1280,0,(ww*720/wh-1280)*.5,720)
|
||||
end--Draw black side
|
||||
|
||||
numFont(10)gc.setColor(1,1,1)
|
||||
gc.print(tm.getFPS(),0,590)
|
||||
numFont(20)gc.setColor(1,1,1)
|
||||
gc.print(tm.getFPS(),0,700)
|
||||
--if gcinfo()>500 then collectgarbage()end
|
||||
end
|
||||
function love.resize(x,y)
|
||||
@@ -1172,11 +1209,11 @@ function love.resize(x,y)
|
||||
gc.origin()
|
||||
gc.translate(ww*.5,wh*.5)
|
||||
if wh/ww>=.6 then
|
||||
gc.scale(ww/1000)
|
||||
gc.scale(ww/1280)
|
||||
else
|
||||
gc.scale(wh/600)
|
||||
gc.scale(wh/720)
|
||||
end
|
||||
gc.translate(-500,-300)
|
||||
gc.translate(-640,-360)
|
||||
end
|
||||
function love.focus(f)
|
||||
if f then
|
||||
@@ -1191,10 +1228,12 @@ function love.focus(f)
|
||||
end
|
||||
end
|
||||
function love.run()
|
||||
local frameT=Timer()
|
||||
local frameT,dt=Timer()
|
||||
tm.step()
|
||||
love.resize(1000,600)
|
||||
love.resize(1280,720)
|
||||
game.load()--Launch
|
||||
math.randomseed(os.time()*626)--true ultheur's naim!
|
||||
-- while true do
|
||||
return function()
|
||||
love.event.pump()
|
||||
for name,a,b,c,d,e,f in love.event.poll()do
|
||||
@@ -1232,10 +1271,9 @@ do--Texture/Image
|
||||
l={}
|
||||
for i=1,1 do
|
||||
local p=gc.newImage("/image/BG/"..i..".png")
|
||||
l[i]=gc.newCanvas(1200,1200)
|
||||
l[i]=gc.newCanvas(1536,1536)
|
||||
gc.setCanvas(l[i])
|
||||
gc.draw(p,nil,nil,nil,10,10)
|
||||
p:release()
|
||||
gc.draw(p,nil,nil,nil,12,12)
|
||||
end
|
||||
background=l
|
||||
gc.setCanvas()
|
||||
@@ -1253,7 +1291,6 @@ do--Particle
|
||||
gc.setCanvas()
|
||||
end
|
||||
c=nil
|
||||
|
||||
userdata=fs.newFile("userdata")
|
||||
if fs.getInfo("userdata")then
|
||||
loaddata()
|
||||
|
||||
233
paint.lua
233
paint.lua
@@ -1,63 +1,116 @@
|
||||
swapDeck_data={
|
||||
{4,0,1,1},{6,0,15,1},{5,0,9,1},{6,0,6,1},
|
||||
{1,0,3,1},{3,0,12,1},{1,1,8,1},{2,1,4,2},
|
||||
{3,2,13,2},{4,1,12,2},{5,2,1,2},{7,1,11,2},
|
||||
{2,1,9,3},{3,0,6,3},{4,2,14,3},{1,0,4,4},
|
||||
{7,1,1,4},{6,0,2,4},{5,2,6,4},{6,0,14,5},
|
||||
{3,3,15,5},{4,0,7,6},{7,1,10,5},{5,0,2,6},
|
||||
{2,1,1,7},{1,0,4,6},{4,1,13,5},{1,1,6,7},
|
||||
{5,3,11,5},{3,2,11,7},{6,0,8,7},{4,2,12,8},
|
||||
{7,0,8,9},{1,0,2,8},{5,2,4,8},{6,0,15,8},
|
||||
}--Block id [ZSLJTOI] ,dir,x,y
|
||||
swap={
|
||||
none={2,1,d=function()end},
|
||||
flash={8,1,d=function()gc.clear(1,1,1)end},
|
||||
deck={42,1,d=function()
|
||||
local t=sceneSwaping.time
|
||||
gc.setColor(1,1,1)
|
||||
if t>6 then
|
||||
for i=1,43-t do
|
||||
local bn=swapDeck_data[i][1]
|
||||
local b=blocks[bn][swapDeck_data[i][2]]
|
||||
local cx,cy=swapDeck_data[i][3],swapDeck_data[i][4]
|
||||
for y=1,#b do for x=1,#b[1]do
|
||||
if b[y][x]>0 then
|
||||
gc.draw(blockSkin[bn],80*(cx+x-2),80*(10-cy-y),nil,8/3)
|
||||
end
|
||||
end end
|
||||
end
|
||||
else
|
||||
gc.clear(1,1,1)
|
||||
end
|
||||
end
|
||||
},
|
||||
}--Scene swapping animations
|
||||
|
||||
function drawButton()
|
||||
for i=1,#Buttons[scene]do
|
||||
local B=Buttons[scene][i]
|
||||
if not(B.hide and B.hide())then
|
||||
local t=B==Buttons.sel and .3 or 0
|
||||
B.alpha=abs(B.alpha-t)>.02 and(B.alpha+(B.alpha<t and .02 or -.02))or t
|
||||
if B.alpha>t then B.alpha=B.alpha-.02 elseif B.alpha<t then B.alpha=B.alpha+.02 end
|
||||
gc.setColor(B.rgb[1],B.rgb[2],B.rgb[3],B.alpha)
|
||||
gc.rectangle("fill",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h)
|
||||
local t=B.t
|
||||
if type(t)=="function"then t=t()
|
||||
end
|
||||
gc.setColor(B.rgb[1],B.rgb[2],B.rgb[3],.3)
|
||||
gc.setLineWidth(5)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h)
|
||||
mStr(t,B.x-1,B.y-1-currentFont*.5)
|
||||
mStr(t,B.x-1,B.y+1-currentFont*.5)
|
||||
mStr(t,B.x+1,B.y-1-currentFont*.5)
|
||||
mStr(t,B.x+1,B.y+1-currentFont*.5)
|
||||
gc.setColor(B.rgb)
|
||||
gc.setLineWidth(3)gc.rectangle("line",B.x-B.w*.5,B.y-B.h*.5,B.w,B.h)
|
||||
mStr(t,B.x,B.y-currentFont*.5)
|
||||
end
|
||||
end
|
||||
end
|
||||
function drawDial(x,y,speed)
|
||||
gc.push("transform")
|
||||
gc.translate(x,y)
|
||||
gc.setColor(1,1,1)
|
||||
mStr(int(speed),0,-14)
|
||||
gc.setColor(.6,.6,.6)gc.setLineWidth(5)
|
||||
gc.circle("line",0,0,30)
|
||||
gc.setColor(1,1,1)gc.setLineWidth(2)
|
||||
gc.circle("line",0,0,30)
|
||||
gc.rotate(2.0944+(speed<=175 and .020944*speed or 4.712389-52.35988/(speed-125)))
|
||||
gc.setColor(.4,.4,.4,.5)gc.setLineWidth(5)
|
||||
gc.line(0,0,22,0)
|
||||
gc.setColor(.6,.6,.6,.5)gc.setLineWidth(3)
|
||||
gc.line(0,0,22,0)
|
||||
gc.pop()
|
||||
end
|
||||
function drawPixel(y,x,id,alpha)
|
||||
gc.setColor(1,1,1,alpha)
|
||||
gc.draw(blockSkin[id],30*x-30,600-30*y)
|
||||
end
|
||||
|
||||
Pnt={BG={}}
|
||||
function Pnt.BG.none()
|
||||
gc.clear(.2,.2,.2)
|
||||
end
|
||||
function Pnt.BG.menu()
|
||||
gc.setLineWidth(40)
|
||||
gc.setColor(1,.9,.9)
|
||||
local t=(Timer()%1)*100
|
||||
for i=-6,9 do
|
||||
gc.line(t+100*i,-50,t+100*i+600,650)
|
||||
end
|
||||
gc.setLineWidth(2)
|
||||
gc.clear(.1,.1,.1)
|
||||
end
|
||||
function Pnt.BG.game1()
|
||||
gc.setColor(1,1,1)
|
||||
gc.draw(background[1],500,300,Timer()*.15,nil,nil,600,600)
|
||||
gc.draw(background[1],640,360,Timer()*.15,nil,nil,768,768)
|
||||
end
|
||||
function Pnt.BG.game2()
|
||||
gc.setColor(1,.5,.5)
|
||||
gc.draw(background[1],500,300,Timer()*.15,nil,nil,600,600)
|
||||
gc.draw(background[1],640,360,Timer()*.15,nil,nil,768,768)
|
||||
end
|
||||
function Pnt.BG.game3()
|
||||
gc.setColor(.5,.7,1)
|
||||
gc.draw(background[1],500,300,Timer()*.15,nil,nil,600,600)
|
||||
end
|
||||
function Pnt.BG.game4()
|
||||
local t=215+sin(Timer()*6)*40
|
||||
gc.setColor(255,t,t)
|
||||
gc.rectangle("fill",0,0,1000,600)
|
||||
end
|
||||
function Pnt.BG.game5()
|
||||
gc.setColor(1,.9,.9)
|
||||
local t=(Timer()%1)*50
|
||||
for x=0,20 do
|
||||
for y=0,12 do
|
||||
if(x+y)%2==0 then
|
||||
gc.rectangle("fill",50*x-t,50*y-t,50,50)
|
||||
end
|
||||
end
|
||||
end
|
||||
gc.setColor(.6,.6,1)
|
||||
gc.draw(background[1],640,360,Timer()*.15,nil,nil,768,768)
|
||||
end
|
||||
|
||||
function Pnt.load()
|
||||
if loadprogress then
|
||||
gc.setLineWidth(3)
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(.8,.8,.8)
|
||||
gc.rectangle("fill",200,280,loadprogress*600,40)
|
||||
gc.rectangle("fill",340,340,loadprogress*640,40)
|
||||
gc.setColor(1,1,1)
|
||||
gc.rectangle("line",200,280,600,40)
|
||||
gc.rectangle("line",340,340,640,40)
|
||||
setFont(30)
|
||||
mStr("Loading...",500,285)
|
||||
mStr("Loading...",640,345)
|
||||
end
|
||||
end
|
||||
function Pnt.intro()
|
||||
gc.setColor(1,1,1)
|
||||
gc.draw(img.title[setting.lang],500,300,nil,nil,nil,250,100)
|
||||
end
|
||||
function Pnt.main()
|
||||
gc.setColor(1,1,1)
|
||||
gc.draw(img.title[setting.lang],500,120,nil,nil,nil,250,60)
|
||||
setFont(30)
|
||||
gc.print("Alpha 0.0.19726",370,150)
|
||||
gc.draw(img.title[setting.lang],30,30)
|
||||
end
|
||||
function Pnt.play()
|
||||
for p=1,#players do
|
||||
@@ -65,10 +118,10 @@ function Pnt.play()
|
||||
setmetatable(_G,P.index)
|
||||
gc.push("transform")
|
||||
gc.translate(x,y)gc.scale(size)--Scale
|
||||
gc.setColor(0,0,0,.8)gc.rectangle("fill",0,0,620,690)--Black Background
|
||||
gc.setColor(0,0,0,.8)gc.rectangle("fill",0,0,600,690)--Black Background
|
||||
gc.setLineWidth(3)
|
||||
gc.setColor(1,1,1)gc.rectangle("line",0,0,620,690)--Big frame
|
||||
gc.translate(160,70)
|
||||
gc.setColor(1,1,1)gc.rectangle("line",0,0,600,690)--Big frame
|
||||
gc.translate(150,70)
|
||||
gc.stencil(stencil_field, "replace", 1)
|
||||
gc.translate(0,fieldBeneath)
|
||||
love.graphics.setStencilTest("equal",1)
|
||||
@@ -81,39 +134,41 @@ function Pnt.play()
|
||||
end
|
||||
else
|
||||
gc.setColor(1,1,1,falling/gameEnv.fall)
|
||||
gc.rectangle("fill",0,600-30*j,300,30)
|
||||
gc.rectangle("fill",0,600-30*j,320,30)
|
||||
end
|
||||
end--Field
|
||||
if waiting<=0 then
|
||||
if gameEnv.ghost then
|
||||
for i=1,r do for j=1,c do
|
||||
if cb[i][j]>0 then
|
||||
drawPixel(i+y_img-1,j+cx-1,gameEnv.color[bn],.3)
|
||||
drawPixel(i+y_img-1,j+cx-1,bn,.3)
|
||||
end
|
||||
end end
|
||||
end--Ghost
|
||||
gc.setColor(1,1,1,lockDelay/gameEnv.lock)
|
||||
for i=1,r do for j=1,c do
|
||||
if cb[i][j]>0 then
|
||||
gc.rectangle("fill",30*(j+cx-1)-35,595-30*(i+cy-1),40,40)
|
||||
gc.rectangle("fill",30*(j+cx-1)-34,596-30*(i+cy-1),38,38)
|
||||
end
|
||||
end end--BlockShade(lockdelay indicator)
|
||||
for i=1,r do for j=1,c do
|
||||
if cb[i][j]>0 then
|
||||
drawPixel(i+cy-1,j+cx-1,gameEnv.color[bn],1)
|
||||
drawPixel(i+cy-1,j+cx-1,bn,1)
|
||||
end
|
||||
end end--Block
|
||||
if gameEnv.center then
|
||||
local x=30*(cx+sc[2]-1)-30+15
|
||||
gc.circle("fill",x,600-30*(cy+sc[1]-1)+15,4)
|
||||
gc.setColor(1,1,1,.5)
|
||||
gc.circle("fill",x,600-30*(y_img+sc[1]-1)+15,4)
|
||||
end
|
||||
end--Rotate center
|
||||
end
|
||||
gc.setColor(1,1,1)
|
||||
gc.draw(PTC.dust[p])--Draw game field
|
||||
love.graphics.setStencilTest()--In-field mask
|
||||
love.graphics.setStencilTest()--In-playField mask
|
||||
gc.translate(0,-fieldBeneath)
|
||||
gc.setColor(1,1,1)gc.rectangle("line",-1,-1,300,600)--Draw boarder
|
||||
|
||||
|
||||
local h=0
|
||||
for i=1,#atkBuffer do
|
||||
local a=atkBuffer[i]
|
||||
@@ -128,11 +183,11 @@ function Pnt.play()
|
||||
gc.rectangle("fill",302,600-h,8,-bar+5)
|
||||
gc.setColor(1,1,0)
|
||||
gc.rectangle("fill",302,600-h+(-bar+5),8,-(-bar+5)*(1-a.countdown/a.cd0))
|
||||
--Time count
|
||||
--Timing
|
||||
else
|
||||
gc.setColor(1,(sin((Timer()-i)*20)+1)*.5,0)
|
||||
gc.rectangle("fill",302,600-h,8,-bar+5)
|
||||
--warning
|
||||
--Warning
|
||||
end
|
||||
else
|
||||
gc.setColor(1,0,0)
|
||||
@@ -151,7 +206,7 @@ function Pnt.play()
|
||||
for i=1,#hb do
|
||||
for j=1,#hb[1] do
|
||||
if hb[i][j]>0 then
|
||||
drawPixel(i+17.5-#hb*.5,j-2.5-#hb[1]*.5,holded and 13 or gameEnv.color[hn],1)
|
||||
drawPixel(i+17.5-#hb*.5,j-2.5-#hb[1]*.5,holded and 13 or hn,1)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -163,7 +218,7 @@ function Pnt.play()
|
||||
for i=1,#b do
|
||||
for j=1,#b[1] do
|
||||
if b[i][j]>0 then
|
||||
drawPixel(i+20-2.4*N-#b*.5,j+12.5-#b[1]*.5,gameEnv.color[nxt[N]],1)
|
||||
drawPixel(i+20-2.4*N-#b*.5,j+12.5-#b[1]*.5,nxt[N],1)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -180,22 +235,20 @@ function Pnt.play()
|
||||
for i=1,#bonus do
|
||||
bonus[i]:draw()
|
||||
end--Effects
|
||||
if mesDisp[gamemode]then mesDisp[gamemode]()end--Draw message
|
||||
setFont(45)
|
||||
gc.translate(380,550)
|
||||
gc.setColor(1,1,1)
|
||||
mStr(int(dropSpeed),0,-21)
|
||||
gc.setColor(.6,.6,.6)gc.setLineWidth(5)
|
||||
gc.circle("line",0,0,50)
|
||||
gc.setColor(1,1,1)gc.setLineWidth(2)
|
||||
gc.circle("line",0,0,50)
|
||||
gc.rotate(2.0944+(dropSpeed<=175 and .020944*dropSpeed or 4.712389-52.35988/(dropSpeed-125)))
|
||||
gc.setColor(.4,.4,.4,.5)gc.setLineWidth(5)
|
||||
gc.line(0,0,40,0)
|
||||
gc.setColor(.6,.6,.6,.5)gc.setLineWidth(3)
|
||||
gc.line(0,0,40,0)
|
||||
--Speed dial
|
||||
|
||||
|
||||
gc.setColor(1,1,1)
|
||||
setFont(40)
|
||||
gc.print(format("%0.2f",time),-125,530)--Draw time
|
||||
if mesDisp[gamemode]then mesDisp[gamemode]()end--Draw other message
|
||||
|
||||
setFont(15)
|
||||
gc.setColor(1,1,1)
|
||||
gc.print("BPM",380,490)
|
||||
gc.print("KPM",335,580)
|
||||
setFont(30)
|
||||
drawDial(350,520,dropSpeed)
|
||||
drawDial(400,570,keySpeed)
|
||||
--Speed dials
|
||||
gc.pop()
|
||||
end--Draw players
|
||||
gc.setLineWidth(3)
|
||||
@@ -217,38 +270,40 @@ function Pnt.play()
|
||||
end
|
||||
setmetatable(_G,nil)
|
||||
end
|
||||
function Pnt.setting()
|
||||
setFont(30)
|
||||
gc.setColor(1,1,1)
|
||||
mStr("DAS:"..setting.das,200,65)
|
||||
mStr("ARR:"..setting.arr,400,65)
|
||||
end
|
||||
function Pnt.setting2()
|
||||
setFont(30)
|
||||
setFont(35)
|
||||
gc.setColor(1,1,1)
|
||||
mStr("DAS:"..setting.das,330,72)
|
||||
mStr("ARR:"..setting.arr,545,72)
|
||||
gc.setColor(1,1,1)
|
||||
for i=1,9 do
|
||||
gc.printf(actName_[i]..":",80,5+50*i,150,"right")
|
||||
gc.printf(actName_show[i]..":",100,60*i-8,200,"right")
|
||||
end
|
||||
if keysetting then
|
||||
setFont(35)
|
||||
gc.print("<<",470,50*keysetting)
|
||||
gc.print("<<",550,60*keysetting-10)
|
||||
end
|
||||
end
|
||||
function Pnt.help()
|
||||
setFont(32)
|
||||
gc.setColor(1,1,1)
|
||||
gc.draw(img.title[setting.lang],60,420,.2,.5+.05*sin(Timer()*2))
|
||||
for i=1,11 do
|
||||
mStr(Text.help[i],640,15+43*i)
|
||||
end
|
||||
gc.draw(img.title[setting.lang],180,600,.2,.7+.05*sin(Timer()*2),nil,140,100)
|
||||
end
|
||||
function Pnt.stat()
|
||||
setFont(30)
|
||||
gc.setColor(1,1,1)
|
||||
gc.print(Text.stat[1],250,60)
|
||||
gc.print(Text.stat[2],250,100)
|
||||
gc.print(Text.stat[3],250,140)
|
||||
gc.print(Text.stat[4],250,180)
|
||||
|
||||
gc.print(stat.game,600,60)
|
||||
gc.print(format("%0.2f",stat.gametime).."s",600,100)
|
||||
gc.print(stat.piece,600,140)
|
||||
gc.print(stat.row,600,180)
|
||||
gc.draw(img.title[setting.lang],60,420,.2,.5+.05*sin(Timer()*2))
|
||||
for i=1,6 do
|
||||
gc.print(Text.stat[i],250,20+40*i)
|
||||
end
|
||||
|
||||
gc.print(stat.run,600,60)
|
||||
gc.print(stat.game,600,100)
|
||||
gc.print(format("%0.2f",stat.gametime).."s",600,140)
|
||||
gc.print(stat.piece,600,180)
|
||||
gc.print(stat.row,600,220)
|
||||
gc.print(stat.atk,600,260)
|
||||
gc.draw(img.title[setting.lang],180,600,.2,.7+.05*sin(Timer()*2),nil,140,100)
|
||||
end
|
||||
33
timer.lua
33
timer.lua
@@ -28,17 +28,18 @@ function Tmr.load()
|
||||
else
|
||||
for i=1,#sfx do sfx[i]=nil end
|
||||
loading=4
|
||||
loadnum=1
|
||||
loadnum=0
|
||||
end
|
||||
elseif loading==4 then
|
||||
loadnum=loadnum+1
|
||||
if loadnum==20 then
|
||||
if loadnum==15 then
|
||||
gotoScene("main")
|
||||
end
|
||||
end
|
||||
end
|
||||
function Tmr.play(dt)
|
||||
frame=frame+1
|
||||
stat.gametime=stat.gametime+dt
|
||||
if count then
|
||||
count=count-1
|
||||
if count==0 then
|
||||
@@ -49,6 +50,7 @@ function Tmr.play(dt)
|
||||
_G.P=P
|
||||
setmetatable(_G,P.index)
|
||||
P.control=true
|
||||
P.timing=true
|
||||
resetblock()
|
||||
end
|
||||
setmetatable(_G,nil)
|
||||
@@ -56,13 +58,12 @@ function Tmr.play(dt)
|
||||
SFX("ready")
|
||||
end
|
||||
return nil
|
||||
end
|
||||
end--Start counting
|
||||
for p=1,#players do
|
||||
P=players[p]
|
||||
setmetatable(_G,P.index)
|
||||
if timing then P.time=time+dt end
|
||||
if alive then
|
||||
if control then P.time=time+dt end
|
||||
|
||||
local v=0
|
||||
for i=2,10 do v=v+i*(i-1)*7.2/(frame-keyTime[i])end P.keySpeed=keySpeed*.99+v*.1
|
||||
v=0 for i=2,10 do v=v+i*(i-1)*7.2/(frame-dropTime[i])end P.dropSpeed=dropSpeed*.99+v*.1
|
||||
@@ -118,6 +119,7 @@ function Tmr.play(dt)
|
||||
end
|
||||
P.clearing={}
|
||||
end
|
||||
--Rows cleared drop
|
||||
elseif waiting>0 then
|
||||
P.waiting=waiting-1
|
||||
if waiting<=0 then
|
||||
@@ -137,7 +139,26 @@ function Tmr.play(dt)
|
||||
end
|
||||
end
|
||||
end
|
||||
end--If alive
|
||||
else--Alive
|
||||
P.keySpeed=keySpeed*.96+cstat.key/time*60*.04
|
||||
P.dropSpeed=dropSpeed*.96+cstat.piece/time*60*.04
|
||||
--Final average speeds
|
||||
if falling>0 then
|
||||
P.falling=falling-1
|
||||
if falling<=0 then
|
||||
if #field>clearing[1]then SFX("fall")end
|
||||
for i=1,#clearing do
|
||||
rem(field,clearing[i])
|
||||
rem(visTime,clearing[i])
|
||||
end
|
||||
P.clearing={}
|
||||
end
|
||||
end--Rows cleared drop
|
||||
for j=1,#field do for i=1,10 do
|
||||
if visTime[j][i]<20 then P.visTime[j][i]=visTime[j][i]+.5 end
|
||||
end end
|
||||
--Make field visible
|
||||
end--Dead
|
||||
for i=#bonus,1,-1 do
|
||||
bonus[i].t=bonus[i].t+1
|
||||
if bonus[i].t>60 then rem(bonus,i)end
|
||||
|
||||
@@ -40,7 +40,7 @@ act={
|
||||
hold=hold,
|
||||
--Player movements
|
||||
restart=function()
|
||||
startGame(gamemode)
|
||||
resetGameData()
|
||||
count=60+26--Althour'z neim
|
||||
end,
|
||||
down1=function()drop()end,
|
||||
|
||||
Reference in New Issue
Block a user