diff --git a/SRS.lua b/SRS.lua deleted file mode 100644 index abb9741d..00000000 --- a/SRS.lua +++ /dev/null @@ -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 \ No newline at end of file diff --git a/TRS.lua b/TRS.lua new file mode 100644 index 00000000..9d596cc1 --- /dev/null +++ b/TRS.lua @@ -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 \ No newline at end of file diff --git a/ai.lua b/ai.lua index b30f6035..39763049 100644 --- a/ai.lua +++ b/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 diff --git a/button.lua b/button.lua index 26e78c56..f496220e 100644 --- a/button.lua +++ b/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 -} \ No newline at end of file +} +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 \ No newline at end of file diff --git a/conf.lua b/conf.lua index a1ada440..9c780581 100644 --- a/conf.lua +++ b/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 diff --git a/control.lua b/control.lua index 6f29ee2b..d7cb601e 100644 --- a/control.lua +++ b/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.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.alphat then B.alpha=B.alpha-.02 elseif B.alpha0 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)^20 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() diff --git a/paint.lua b/paint.lua index 06f9a744..a16ebf15 100644 --- a/paint.lua +++ b/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.alphat then B.alpha=B.alpha-.02 elseif B.alpha0 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 \ No newline at end of file diff --git a/timer.lua b/timer.lua index 6c99d6cc..72524ca0 100644 --- a/timer.lua +++ b/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 diff --git a/user_actions.lua b/user_actions.lua index 6d752b13..4e367f0a 100644 --- a/user_actions.lua +++ b/user_actions.lua @@ -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,