Compare commits

...

1 Commits

Author SHA1 Message Date
MrZ_26
1447893378 Alpha V0.7.1 2020-02-04 19:29:24 +08:00
26 changed files with 278 additions and 131 deletions

10
ai.lua
View File

@@ -5,7 +5,7 @@ VerticalTransitions
BlockedCells
Wells
FilledLines
TetrisShape
TechrashShape
BlockedWells;
]]
dirCount={1,1,3,3,3,0,1}
@@ -97,17 +97,17 @@ function getScore(field,cb,cx,cy)
for x=1,9 do
local dh=abs(height[x]-height[x])
if dh>1 then
rough=rough+min(dh^2,10)
rough=rough+min(dh^1.5,10)
end
end
ins(freeRow,height)
return
-highest*5
-rough*15
-rough*20
-cy*20
-#cb*10
+clear^2*4
-hole*15
-hole*25
end
function AI_getControls(ctrl)
local Tfield={}--test field
@@ -119,7 +119,7 @@ function AI_getControls(ctrl)
end
end
local best={x=1,dir=0,hold=false,score=-9e99}
for ifhold=0,1 do
for ifhold=0,gameEnv.hold and 1 or 0 do
local bn=ifhold==0 and bn or hn>0 and hn or nxt[1]
for dir=0,dirCount[bn] do--each dir
local cb=blocks[bn][dir]

View File

@@ -58,6 +58,25 @@ function keyDown.mode(key)
if modeSel>1 then modeSel=modeSel-1 end
elseif key=="return"then
startGame(modeID[modeSel])
elseif key=="c"then
gotoScene("custom")
elseif key=="escape"then
back()
end
end
function keyDown.custom(key)
if key=="left"then
local k=customID[optSel]
customSel[k]=(customSel[k]-2)%#customRange[k]+1
elseif key=="right"then
local k=customID[optSel]
customSel[k]=customSel[k]%#customRange[k]+1
elseif key=="down"then
optSel=optSel%#customID+1
elseif key=="up"then
optSel=(optSel-2)%#customID+1
elseif key=="return"then
startGame("custom")
elseif key=="escape"then
back()
end
@@ -219,7 +238,7 @@ function love.mousepressed(x,y,k,t,num)
if not t then
mouseShow=true
mx,my=convert(x,y)
if mouseDown[scene]then mouseDown[scene](mx,my,k)end
--if mouseDown[scene]then mouseDown[scene](mx,my,k)end
if k==1 then
if not sceneSwaping and Buttons.sel then
local B=Buttons[scene][Buttons.sel]
@@ -229,7 +248,7 @@ function love.mousepressed(x,y,k,t,num)
love.mousemoved(x,y)
sysSFX("button")
end
elseif k==3 then
elseif k==2 then
back()
end
end

BIN
cb.ttf

Binary file not shown.

View File

@@ -5,11 +5,11 @@ function love.conf(t)
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.gammacorrect=true
t.gammacorrect=X
t.audio.mixwithsystem=true--Switch on to keep background music playing
local W=t.window
W.title="Techmino V0.68"
W.title="Techmino V0.7.1"
W.icon="/image/icon.png"
W.width,W.height=1280,720
W.borderless=X

View File

@@ -42,7 +42,7 @@ function createPlayer(id,x,y,size,AIspeed,data)
P.control=false
P.timing=false
P.time=0
P.cstat={key=0,piece=0,row=0,atk=0,tetris=0}--Current gamestat
P.cstat={key=0,piece=0,row=0,atk=0,techrash=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
@@ -74,12 +74,13 @@ function createPlayer(id,x,y,size,AIspeed,data)
P.nb[i]=blocks[P.nxt[i]][0]
end--First bag
P.freshNext=randomMethod[P.gameEnv.sequence]
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
@@ -221,7 +222,7 @@ function pressKey(i,player)
ins(keyTime,1,frame)rem(keyTime,11)
cstat.key=cstat.key+1
if player.id==1 then stat.key=stat.key+1 end
if P.id==1 then stat.key=stat.key+1 end
--Key count
end
-- if playmode=="recording"then ins(rec,{i,frame})end
@@ -322,21 +323,21 @@ function drop()
P.combo=P.combo+1--combo=0 is under
if cc==4 then
if b2b>500 then
showText("Tetris B2B2B","fly",70)
showText("Techrash B2B2B","fly",70)
csend=6
sendTime=80
exblock=exblock+1
elseif b2b>=100 then
showText("Tetris B2B","drive",70)
showText("Techrash B2B","drive",70)
sendTime=70
csend=5
else
showText("Tetris","stretch",80)
showText("Techrash","stretch",80)
sendTime=60
csend=4
end
P.b2b=P.b2b+100
P.cstat.tetris=P.cstat.tetris+1
P.cstat.techrash=P.cstat.techrash+1
elseif cc>0 then
if dospin then
if b2b>500 then
@@ -433,9 +434,9 @@ function drop()
end
elseif cc==0 then
if P.b2b>450 then
P.b2b=max(b2b-2,450)
P.b2b=b2b-10
elseif P.b2b>100 then
P.b2b=max(b2b-5,100)
P.b2b=max(b2b-6,100)
end
garbageRelease()
end

BIN
image/block/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 463 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 578 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 441 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 584 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 684 B

162
list.lua
View File

@@ -95,8 +95,11 @@ bgm={
prevMenu={
load=love.event.quit,
ready="mode",
play="mode",
play=function()
gotoScene(gamemode~="custom"and"mode"or"custom")
end,
mode="main",
custom="mode",
help="main",
stat="main",
setting=function()
@@ -109,8 +112,8 @@ prevMenu={
main="quit",
}
modeID={"sprint","marathon","zen","infinite","solo","death","blind","puzzle","tetris41","asymsolo","gmroll","p2","p3","p4"}
modeName={"Sprint","Marathon","Zen","Infinite","1v1","Death","Blind","Puzzle","Tetris 41","Asymmetry solo","GM roll","2P","3P","4P"}
modeID={"sprint","marathon","zen","infinite","solo","death","blind","puzzle","techmino41","asymsolo","gmroll","p2","p3","p4"}
modeName={"Sprint","Marathon","Zen","Infinite","1v1","Death","Blind","Puzzle","Techmino 41","Asymmetry solo","GM roll","2P","3P","4P"}
modeInfo={
sprint="Clear 40 Lines",
marathon="Clear 200 Lines",
@@ -120,7 +123,7 @@ modeInfo={
death="Survive under terrible speed",
blind="Invisible board!",
puzzle="Your keyboard broke",
tetris41="Melee fight with 40 AIs",
techmino41="Melee fight with 40 AIs",
asymsolo=" See-->",
gmroll="Who want to be the grand master?",
p2="2 players game",
@@ -128,6 +131,59 @@ modeInfo={
p4="4 players game",
}
customID={
"drop",
"lock",
"wait",
"fall",
"next",
"hold",
"sequence",
"visible",
"target",
"freshLimit",
"opponent",
}--Order
customOption={
drop="Drop delay:",
lock="Lock delay:",
wait="Next piece delay:",
fall="Clear row delay:",
next="Next count:",
hold="Hold:",
sequence="Sequence:",
visible="Visible:",
target="Line limit:",
freshLimit="Lock fresh limit:",
opponent="Opponent speed:",
}--Key str
customVal={
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"","[20G]"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil,
fall=nil,
next=nil,
hold={"on","off"},
sequence={"bag","his4","random"},
visible={"Show","half","hide"},
target=nil,
freshLimit=nil,
opponent={"No CPU",1,2,3,4,5,6,7,8,9,10,11},
}--number-Val str
customRange={
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99,-1},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
wait={1,3,5,7,10,15,20,30,60},
fall={1,3,5,7,10,15,20,30,60},
next={0,1,2,3,4,5,6},
hold={true,false},
sequence={1,2,3},
visible={1,2,3},
target={10,20,40,100,200,500,1000},
freshLimit={0,5,15,1e99},
opponent={0,60,30,20,15,10,7,5,4,3,2,1},
}
actName={"moveLeft","moveRight","rotRight","rotLeft","rotFlip","hardDrop","softDrop","hold","restart","insLeft","insRight","insDown"}
actName_show={"Move Left:","Move Right:","Rotate Right:","Rotate Left:","Rotate Flip","Hard Drop:","Soft Drop:","Hold:","Restart:","Instant Left:","Instant Right:","Ins Down:"}
blockPos={4,4,4,4,4,5,4}
@@ -144,8 +200,8 @@ marathon_drop={[0]=60,48,40,30,24,18,15,12,10,8,7,6,5,4,3,2,1,1,0,0}
death_lock={10,9,9,8,8}
death_wait={6,6,5,5,4}
death_fall={10,9,8,7,6}
snapLevelValue={1,10,20,40,60,80}
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"}
snapLevelValue={1,10,20,40,60,80}
act={
moveLeft=function(auto)
@@ -180,7 +236,10 @@ act={
end
end,
softDrop=function()
if cy~=y_img then P.cy=cy-1 end
if cy~=y_img then
P.cy=cy-1
P.spinLast=false
end
P.downing=1
end,
rotRight=function()spin(1)end,
@@ -205,8 +264,22 @@ act={
freshgho()
end
end,
down1=function()if cy~=y_img then P.cy=cy-1 end end,
down4=function()for i=1,4 do if cy~=y_img then P.cy=cy-1 else break end end end,
down1=function()
if cy~=y_img then
P.cy=cy-1
P.spinLast=false
end
end,
down4=function()
for i=1,4 do
if cy~=y_img then
P.cy=cy-1
P.spinLast=false
else
break
end
end
end,
quit=function()Event.gameover.lose()end,
--System movements
}
@@ -232,38 +305,38 @@ 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}},
[12]={{0,0},{1,0},{1,-1},{-1,0},{0,2},{1,2}},
[21]={{0,0},{-1,0},{-1,1},{1,0},{0,-2},{-1,-2}},
[23]={{0,0},{1,0},{1,1},{1,-1},{0,-2},{1,-2}},
[32]={{0,0},{-1,0},{-1,-1},{-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}},
},
[13]={{0,0},{0,-1},{0,1},{-1,0}},
[31]={{0,0},{0,1},{0,-1},{1,0}},
},--Z/J
[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}},
[12]={{0,0},{1,0},{1,-1},{1,1},{0,2},{1,2}},
[21]={{0,0},{-1,0},{-1,1},{-1,-1},{0,-2},{-1,-2}},
[23]={{0,0},{1,0},{1,1},{-1,0},{0,-2},{1,-2}},
[32]={{0,0},{-1,0},{-1,-1},{1,0},{0,2},{-1,2}},
[30]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2},{0,-1},{-1,1}},
[03]={{0,0},{1,0},{1,1},{0,-2},{1,-2},{1,-1},{0,1}},
[02]={{0,0},{-1,0},{1,0},{0,-1},{0,1}},
[20]={{0,0},{1,0},{-1,0},{0,1},{0,-1}},
[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}},
},
[13]={{0,0},{0,1},{0,-1},{1,0}},
[31]={{0,0},{0,-1},{0,1},{-1,0}},
},--S/L
[5]={
[01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2}},
[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}},
[01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2},{-1,-1},{0,1}},
[10]={{0,0},{1,0},{1,-1},{0,2},{1,2},{0,-1},{1,1}},
[12]={{0,0},{1,0},{1,-1},{0,-1},{-1,-1},{0,2},{1,2}},
[21]={{0,0},{-1,0},{-1,1},{1,1},{0,-2},{-1,-2}},
[23]={{0,0},{1,0},{1,1},{-1,1},{0,-2},{1,-2}},
[32]={{0,0},{-1,0},{-1,-1},{0,-1},{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}},
@@ -295,13 +368,22 @@ Buttons={
{x=250,y=380,w=330,h=60,rgb=color.blue,t="Settings",code=function()gotoScene("setting")end,up=1,down=3},
{x=165,y=460,w=160,h=60,rgb=color.yellow,t="Help",code=function()gotoScene("help")end,up=2,down=5,right=4},
{x=335,y=460,w=160,h=60,rgb=color.cyan,t="Statistics",code=function()gotoScene("stat")end,up=2,down=5,left=3},
{x=250,y=540,w=330,h=60,rgb=color.grey,t="Quit",code=function()gotoScene("quit")end,up=3},
{x=250,y=540,w=330,h=60,rgb=color.grey,t="Quit",code=back,up=3},
},
mode={
{x=1000,y=210,w=200,h=140,rgb=color.white,hide=function()return not setting.virtualkeySwitch end,code=function()if modeSel>1 then modeSel=modeSel-1 end end},
{x=1000,y=430,w=200,h=140,rgb=color.white,t="v",f=80,hide=function()return not setting.virtualkeySwitch end,code=function()if modeSel<#modeID then modeSel=modeSel+1 end end},
{x=1000,y=210,w=200,h=140,rgb=color.white,t="Λ",f=64,code=function()if modeSel>1 then modeSel=modeSel-1 end end},
{x=1000,y=430,w=200,h=140,rgb=color.white,t="v",f=80,code=function()if modeSel<#modeID then modeSel=modeSel+1 end end},
{x=1000,y=600,w=180,h=80,rgb=color.green,t="Start",code=function()startGame(modeID[modeSel])end},
{x=640,y=630,w=180,h=60,rgb=color.white,t="Back",code=function()gotoScene("main")end},
{x=400,y=150,w=180,h=80,rgb=color.yellow,t="Custom(c)",code=function()gotoScene("custom")end},
{x=640,y=630,w=180,h=60,rgb=color.white,t="Back",code=back},
},
custom={
{x=1000,y=200,w=100,h=100,rgb=color.white,t="Λ",f=40,code=function()optSel=(optSel-2)%#customID+1 end},
{x=1000,y=440,w=100,h=100,rgb=color.white,t="v",f=50,code=function()optSel=optSel%#customID+1 end},
{x=880,y=320,w=100,h=100,rgb=color.white,t="<",f=50,code=function()local k=customID[optSel]customSel[k]=(customSel[k]-2)%#customRange[k]+1 end},
{x=1120,y=320,w=100,h=100,rgb=color.white,t=">",f=50,code=function()local k=customID[optSel]customSel[k]=customSel[k]%#customRange[k]+1 end},
{x=1000,y=580,w=180,h=80,rgb=color.green,t="Start",code=function()startGame("custom")end},
{x=640,y=630,w=180,h=60,rgb=color.white,t="Back",code=back},
},
play={
},
@@ -350,14 +432,14 @@ Buttons={
end,up=14,down=16},
{x=870,y=420,w=340,h=60,rgb=color.green,t="Control settings",code=function()gotoScene("setting2")end,up=15,down=17},
{x=870,y=500,w=340,h=60,rgb=color.yellow,t="Touch settings",code=function()gotoScene("setting3")end,up=16,down=18},
{x=640,y=640,w=210,h=60,rgb=color.white,t="Save&Back",code=function()back()end,up=17},
{x=640,y=640,w=210,h=60,rgb=color.white,t="Save&Back",code=back,up=17},
--15~18
},
setting2={--Control setting
{x=840,y=630,w=180,h=60,rgb=color.white,t="Back",code=function()keysetting=nil;back()end},
{x=840,y=630,w=180,h=60,rgb=color.white,t="Back",code=back},
},
setting3={--Touch setting
{x=640,y=410,w=170,h=80,t="Back",code=function()back()end},
{x=640,y=410,w=170,h=80,t="Back",code=back},
{x=640,y=210,w=500,h=80,t=function()return setting.virtualkeySwitch and"Hide Virtual Key"or"Show Virtual Key"end,code=function()
setting.virtualkeySwitch=not setting.virtualkeySwitch
end},
@@ -388,11 +470,11 @@ Buttons={
end},
},
help={
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=function()back()end,right=2},
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=back,right=2},
{x=980,y=590,w=230,h=60,rgb=color.white,t="Author's qq",code=function()sys.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,left=1},
},
stat={
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=function()back()end},
{x=640,y=590,w=180,h=60,rgb=color.white,t="Back",code=back},
},
sel=nil,--selected button id(integer)
}
@@ -435,7 +517,7 @@ Text={
},
help={
"I think you don't need \"help\".",
"THIS IS NOT TETRIS,and SRS NOT USED.",
"THIS IS ONLY A SMALL BLOCK GAME",
"But just play like playing TOP/C2/KOS/TGM3",
"Game is not public now,so DO NOT DISTIRBUTE",
"",

119
main.lua
View File

@@ -3,6 +3,7 @@ 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
null=function()end
ww,wh=gc.getWidth(),gc.getHeight()
Timer=tm.getTime--Easy&Quick to get time!
@@ -28,7 +29,7 @@ function setFont(s)
if Fonts[s]then
gc.setFont(Fonts[s])
else
local t=gc.setNewFont("cb.ttf",s)
local t=gc.setNewFont("siyuanhei.otf",s-5)
Fonts[s]=t
gc.setFont(t)
end
@@ -41,11 +42,11 @@ gameEnv0={
sddas=0,sdarr=2,
ghost=true,center=true,
drop=30,lock=45,
wait=0,fall=20,
wait=1,fall=1,
next=6,hold=true,
sequence=1,visible=1,
_20G=false,target=9e99,
freshLimit=9e99,
_20G=false,target=1e99,
freshLimit=1e99,
virtualkey={
{80,720-80,6400,80},--moveLeft
{240,720-80,6400,80},--moveRight
@@ -57,9 +58,22 @@ gameEnv0={
{1280-80,720-400,6400,80},--hold
{80,80,6400,80},--restart
},
reach=function()end,
reach=null,
--not all is actually used,some only provide a key
}
customSel={
drop=20,
lock=20,
wait=1,
fall=1,
next=7,
hold=1,
sequence=1,
visible=1,
target=4,
freshLimit=3,
opponent=1,
}
randomMethod={
function()
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)
@@ -75,13 +89,10 @@ randomMethod={
end,
function()
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)
for j=1,4 do
local i,f=rnd(7)
for k=1,4 do
if i==P.his[k]then f=true end
end
if not f then break end
end
local i,j=nil,0
::r::
i,j=rnd(7),j+1
if(i==P.his[1]or i==P.his[2]or i==P.his[3]or i==P.his[4])and j<6 then goto r end
P.nxt[6],P.nb[6]=i,blocks[i][0]
rem(P.his,1)ins(P.his,i)
end,
@@ -94,8 +105,7 @@ randomMethod={
loadmode={
sprint=function()
modeEnv={
wait=1,
fall=1,
drop=60,
target=40,
reach=Event.gameover.win,
}
@@ -107,8 +117,6 @@ loadmode={
modeEnv={
drop=1e99,
lock=1e99,
wait=1,
fall=1,
target=200,
reach=Event.gameover.win,
}
@@ -120,8 +128,6 @@ loadmode={
modeEnv={
drop=1e99,
lock=1e99,
wait=1,
fall=1,
}
createPlayer(1,340,15)
curBG="glow"
@@ -145,7 +151,6 @@ loadmode={
marathon=function()
modeEnv={
drop=60,
wait=1,
fall=20,
target=10,
reach=Event.marathon_reach,
@@ -179,7 +184,6 @@ loadmode={
_20G=true,
drop=0,
lock=1e99,
wait=1,
fall=10,
target=40,
reach=Event.gameover.win,
@@ -188,10 +192,8 @@ loadmode={
curBG="glow"
BGM("way")
end,
tetris41=function()
techmino41=function()
modeEnv={
wait=1,
fall=1,
freshLimit=15,
}
royaleMode=true
@@ -216,8 +218,6 @@ loadmode={
end,
solo=function()
modeEnv={
wait=1,
fall=1,
freshLimit=15,
}
createPlayer(1,20,15)--Player
@@ -230,8 +230,6 @@ loadmode={
modeEnv={
drop=15,
lock=30,
wait=1,
fall=1,
visible=0,
freshLimit=10,
}
@@ -242,8 +240,6 @@ loadmode={
end,
asymsolo=function()
modeEnv={
wait=1,
fall=1,
visible=2,
freshLimit=15,
}
@@ -255,8 +251,6 @@ loadmode={
end,
p2=function()
modeEnv={
wait=1,
fall=1,
freshLimit=15,
}
createPlayer(1,20,15)
@@ -267,8 +261,6 @@ loadmode={
end,
p3=function()
modeEnv={
wait=1,
fall=1,
freshLimit=15,
}
createPlayer(1,20,100,.65)
@@ -280,8 +272,6 @@ loadmode={
end,
p4=function()
modeEnv={
wait=1,
fall=1,
freshLimit=15,
}
createPlayer(1,25,150,.5)
@@ -292,6 +282,23 @@ loadmode={
curBG="game2"
BGM("way")
end,
custom=function()
modeEnv={reach=Event.gameover.win}
for i=1,#customID do
local k=customID[i]
modeEnv[k]=customRange[k][customSel[k]]
end
modeEnv._20G=modeEnv.drop==-1
if modeEnv.opponent==0 then
createPlayer(1,340,15)
else
modeEnv.target=nil
createPlayer(1,20,15)
createPlayer(2,660,85,.9,modeEnv.opponent)
end
curBG="matrix"
BGM("reason")
end,
}
Event={
gameover={
@@ -429,59 +436,65 @@ mesDisp={
mStr(cstat.atk,-75,320)
mStr(format("%.2f",2.5*cstat.atk/cstat.piece),-75,430)
setFont(20)
gc.print("Attack",-103,360)
gc.print("Efficiency",-114,472)
gc.print("Attack",-100,360)
gc.print("Efficiency",-108,472)
end,
gmroll=function()
setFont(35)
gc.print("Tetris",-120,390)
setFont(30)
gc.print("Techrash",-130,390)
setFont(80)
mStr(cstat.tetris,-75,420)
mStr(cstat.techrash,-75,420)
end,
marathon=function()
setFont(50)
mStr(P.cstat.row,-75,330)
mStr(gameEnv.target,-75,380)
gc.line(-120,377,-30,377)
gc.rectangle("fill",-120,376,90,4)
end,
death=function()
setFont(50)
mStr(P.cstat.row,-75,330)
mStr(gameEnv.target,-75,380)
gc.line(-120,377,-30,377)
gc.rectangle("fill",-120,376,90,4)
end,
puzzle=function()
setFont(75)
mStr(max(40-P.cstat.row,0),-75,280)
end,
tetris41=function()
techmino41=function()
gc.draw(badgeIcon,-120,150,nil,1.5)
setFont(50)
gc.print(badge,-65,150)
mStr(cstat.atk,-75,320)
mStr(#players.alive,-75,430)
setFont(20)
gc.print("Attack",-103,360)
gc.print("Attack",-100,360)
gc.print("Remain",-105,472)
end,
blind=function()
setFont(35)
gc.print("Rows",-115,220)
gc.print("Tetris",-120,390)
setFont(30)
gc.print("Rows",-110,220)
gc.print("Techrash",-130,390)
setFont(80)
mStr(P.cstat.row,-75,250)
mStr(cstat.tetris,-75,420)
mStr(cstat.techrash,-75,420)
end,
solo=function()
gc.print("Attack",-130,365)
gc.print("Attack",-128,365)
setFont(80)
mStr(cstat.atk,-75,300)
end,
asymsolo=function()
gc.print("Attack",-132,365)
gc.print("Attack",-128,365)
setFont(80)
mStr(cstat.atk,-75,300)
end,
custom=function()
if gameEnv.target<1e4 then
setFont(75)
mStr(max(gameEnv.target-P.cstat.row,0),-75,280)
end
end
}
--Game system Data
@@ -547,12 +560,12 @@ stat={
}
--User Data&User Setting
--------------------------------Wrning!_G __index Ply[n] when chng any playr's elments!
require("list")
require("texture")
require("ai")
require("toolfunc")
require("sysfunc")
require("gamefunc")
require("list")
require("texture")
require("ai")
require("timer")
require("paint")
require("scene")

View File

@@ -190,6 +190,15 @@ function Pnt.BG.strap()
gc.draw(background[2],x,0,nil,10)
gc.draw(background[2],x-1280,0,nil,10)
end
function Pnt.BG.matrix()
for i=0,15 do
for j=0,8 do
local t=sin(Timer()*((2.468*i-1.357*j)%3))*.3
gc.setColor(t,t,t)
gc.rectangle("fill",80*i,80*j,80,80)
end
end
end
function Pnt.load()
gc.setLineWidth(4)
@@ -198,28 +207,18 @@ function Pnt.load()
gc.setColor(1,1,1)
gc.rectangle("line",340,340,640,40)
setFont(30)
mStr(Text.load[loading],640,345)
mStr(Text.load[loading],640,346)
setFont(20)
mStr("not animation,real loading!",640,392)
end
function Pnt.main()
gc.setColor(1,1,1)
setFont(30)
gc.print("Alpha V0.68",370,150)
gc.print("Alpha V0.7.1",370,150)
gc.print(system,530,110)
gc.draw(titleImage,30,30)
end
function Pnt.mode()
if setting.virtualkeySwitch then
gc.setColor(.5,.5,.5)
gc.draw(charV,1019,249,pi)
gc.draw(charV,1021,249,pi)
gc.draw(charV,1019,251,pi)
gc.draw(charV,1020,251,pi)
gc.setColor(1,1,1)
gc.draw(charV,1020,250,pi)
end
gc.setColor(1,1,1)
setFont(30)
mStr(modeInfo[modeID[modeSel]],270,300)
setFont(80)
@@ -234,6 +233,25 @@ function Pnt.mode()
end
end
end
function Pnt.custom()
setFont(80)
gc.setColor(color.lightGrey)
gc.print("Custom Game",20,20)
gc.setColor(color.white)
gc.print("Custom Game",22,23)
setFont(35)
for i=1,#customID do
local k=customID[i]
local y=90+35*i
gc.print(customOption[k],50,y)
if customVal[k]then
gc.print(customVal[k][customSel[k]],350,y)
else
gc.print(customRange[k][customSel[k]],350,y)
end
end
gc.print("",10,88+35*optSel)
end
function Pnt.play()
for p=1,#players do
P=players[p]

View File

@@ -23,6 +23,12 @@ function game.mode()
curBG="none"
BGM("blank")
end
function game.custom()
optSel=optSel or 1
scene="custom"
curBG="matrix"
BGM("blank")
end
function game.play()
scene="play"
--curBG="game1"

BIN
siyuanhei.otf Normal file

Binary file not shown.

View File

@@ -1,16 +1,24 @@
setFont(80)
charV=gc.newText(Fonts[80],"v")
local N=gc.newImage
function C(x,y)
c=gc.newCanvas(x,y)
gc.setCanvas(c)
end
titleImage=N("/image/mess/title.png")
mouseIcon=N("/image/mess/mouseIcon.png")
spinCenter=N("/image/mess/spinCenter.png")
dialCircle=N("/image/mess/dialCircle.png")
dialNeedle=N("/image/mess/dialNeedle.png")
badgeIcon=N("/image/mess/badge.png")
blockSkin={}
local img=N("/image/block/1.png")
for i=1,13 do
blockSkin[i]=N("/image/block/1/"..i..".png")
C(30,30)
gc.draw(img,30-30*i,0)
blockSkin[i]=c
end
img:release()
background={}
gc.setColor(1,1,1)
background={
@@ -24,7 +32,7 @@ end
PTC={dust={}}--Particle systems
c=gc.newCanvas(6,6)gc.setCanvas(c)
C(6,6)
gc.clear(1,1,1)
PTC.dust[0]=gc.newParticleSystem(c,1000)
PTC.dust[0]:setParticleLifetime(.2,.3)

View File

@@ -163,7 +163,9 @@ function Tmr.play(dt)
removeRow(field,clearing[i])
removeRow(visTime,clearing[i])
end
P.clearing={}
while #clearing>0 do
rem(clearing)
end
end
--Rows cleared drop
elseif waiting>0 then
@@ -190,9 +192,7 @@ function Tmr.play(dt)
end
P.b2b1=P.b2b1*.93+P.b2b*.07
if P.b2b>500 then
P.b2b=P.b2b-.2
elseif P.b2b>100 then
P.b2b=P.b2b-.15
P.b2b=P.b2b-.06
end
--Alive
else