Compare commits

...

2 Commits

Author SHA1 Message Date
MrZ_26
1447893378 Alpha V0.7.1 2020-02-04 19:29:24 +08:00
MrZ_26
bdee7fba03 Alpha V0.6.8 2020-02-04 19:28:44 +08:00
30 changed files with 350 additions and 183 deletions

Binary file not shown.

BIN
BGM/infinite.ogg Normal file

Binary file not shown.

BIN
SFX/fail.ogg Normal file

Binary file not shown.

BIN
SFX/win.ogg Normal file

Binary file not shown.

10
ai.lua
View File

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

View File

@@ -58,6 +58,25 @@ function keyDown.mode(key)
if modeSel>1 then modeSel=modeSel-1 end if modeSel>1 then modeSel=modeSel-1 end
elseif key=="return"then elseif key=="return"then
startGame(modeID[modeSel]) 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 elseif key=="escape"then
back() back()
end end
@@ -219,7 +238,7 @@ function love.mousepressed(x,y,k,t,num)
if not t then if not t then
mouseShow=true mouseShow=true
mx,my=convert(x,y) 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 k==1 then
if not sceneSwaping and Buttons.sel then if not sceneSwaping and Buttons.sel then
local B=Buttons[scene][Buttons.sel] local B=Buttons[scene][Buttons.sel]
@@ -229,7 +248,7 @@ function love.mousepressed(x,y,k,t,num)
love.mousemoved(x,y) love.mousemoved(x,y)
sysSFX("button") sysSFX("button")
end end
elseif k==3 then elseif k==2 then
back() back()
end end
end end
@@ -245,7 +264,7 @@ function love.touchpressed(id,x,y)
if scene=="play"and setting.virtualkeySwitch then if scene=="play"and setting.virtualkeySwitch then
local t=onVirtualkey(x,y) local t=onVirtualkey(x,y)
if t then if t then
pressKey(t) pressKey(t,players[1])
end end
elseif scene=="setting3"then elseif scene=="setting3"then
x,y=convert(x,y) x,y=convert(x,y)

BIN
cb.ttf

Binary file not shown.

View File

@@ -5,11 +5,11 @@ function love.conf(t)
t.version="11.1" t.version="11.1"
t.console=X t.console=X
t.accelerometerjoystick=X--Enable the accelerometer on iOS and Android by exposing it as a Joystick (boolean) 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 t.audio.mixwithsystem=true--Switch on to keep background music playing
local W=t.window local W=t.window
W.title="Techmino V0.65" W.title="Techmino V0.7.1"
W.icon="/image/icon.png" W.icon="/image/icon.png"
W.width,W.height=1280,720 W.width,W.height=1280,720
W.borderless=X W.borderless=X

View File

@@ -42,7 +42,7 @@ function createPlayer(id,x,y,size,AIspeed,data)
P.control=false P.control=false
P.timing=false P.timing=false
P.time=0 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.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.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] P.nb[i]=blocks[P.nxt[i]][0]
end--First bag end--First bag
P.freshNext=randomMethod[P.gameEnv.sequence]
if P.gameEnv.sequence==1 then P.bag={}--Bag7 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==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 elseif P.gameEnv.sequence==3 then--Pure random
end end
P.showTime=P.gameEnv.visible==1 and 1e99 or P.gameEnv.visible==2 and 300 or 20 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.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.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
P.moving,P.downing=0,0 P.moving,P.downing=0,0
@@ -132,17 +133,17 @@ function throwBadge(s,r,amount)--Player id
ins(FX.badge,{x1,y1,x2,y2,t=0,size=(10+min(amount,10))*.1}) ins(FX.badge,{x1,y1,x2,y2,t=0,size=(10+min(amount,10))*.1})
end end
function freshgho() function freshgho()
if not P.gameEnv._20G then if P.gameEnv._20G or keyPressing[7]and gameEnv.sdarr==0 then
P.y_img=P.cy>#field+1 and #field+1 or P.cy
while not ifoverlap(cb,cx,y_img-1)do
P.y_img=P.y_img-1
end
else
while not ifoverlap(cb,cx,cy-1)do while not ifoverlap(cb,cx,cy-1)do
P.cy=P.cy-1 P.cy=P.cy-1
P.spinLast=false P.spinLast=false
end end
P.y_img=P.cy P.y_img=P.cy
else
P.y_img=P.cy>#field+1 and #field+1 or P.cy
while not ifoverlap(cb,cx,y_img-1)do
P.y_img=P.y_img-1
end
end end
end end
function freshLockDelay() function freshLockDelay()
@@ -221,7 +222,7 @@ function pressKey(i,player)
ins(keyTime,1,frame)rem(keyTime,11) ins(keyTime,1,frame)rem(keyTime,11)
cstat.key=cstat.key+1 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 --Key count
end end
-- if playmode=="recording"then ins(rec,{i,frame})end -- if playmode=="recording"then ins(rec,{i,frame})end
@@ -322,20 +323,21 @@ function drop()
P.combo=P.combo+1--combo=0 is under P.combo=P.combo+1--combo=0 is under
if cc==4 then if cc==4 then
if b2b>500 then if b2b>500 then
showText("Tetris B2B2B","fly",70) showText("Techrash B2B2B","fly",70)
csend=6 csend=6
exblock=exblock+2 sendTime=80
elseif b2b>=100 then
showText("Tetris B2B","drive",70)
csend=5
exblock=exblock+1 exblock=exblock+1
elseif b2b>=100 then
showText("Techrash B2B","drive",70)
sendTime=70
csend=5
else else
showText("Tetris","stretch",80) showText("Techrash","stretch",80)
sendTime=60
csend=4 csend=4
end end
P.b2b=P.b2b+100 P.b2b=P.b2b+100
sendTime=60 P.cstat.techrash=P.cstat.techrash+1
P.cstat.tetris=P.cstat.tetris+1
elseif cc>0 then elseif cc>0 then
if dospin then if dospin then
if b2b>500 then if b2b>500 then
@@ -372,7 +374,7 @@ function drop()
if dospin then if dospin then
showText(spinName[0][bn],"appear",50) showText(spinName[0][bn],"appear",50)
SFX("spin_0") SFX("spin_0")
P.b2b=b2b+40 P.b2b=b2b+30
end end
end end
@@ -432,9 +434,9 @@ function drop()
end end
elseif cc==0 then elseif cc==0 then
if P.b2b>450 then if P.b2b>450 then
P.b2b=max(b2b-2,450) P.b2b=b2b-10
elseif P.b2b>100 then elseif P.b2b>100 then
P.b2b=max(b2b-5,100) P.b2b=max(b2b-6,100)
end end
garbageRelease() garbageRelease()
end 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

193
list.lua
View File

@@ -73,7 +73,7 @@ end
sfx={ sfx={
"button", "button",
"ready","start", "ready","start","win","fail",
"move","rotate","rotatekick","hold", "move","rotate","rotatekick","hold",
"prerotate","prehold", "prerotate","prehold",
"drop","fall", "drop","fall",
@@ -89,14 +89,17 @@ bgm={
"race", "race",
"push", "push",
"reason", "reason",
"hide", "infinite",
} }
prevMenu={ prevMenu={
load=love.event.quit, load=love.event.quit,
ready="mode", ready="mode",
play="mode", play=function()
gotoScene(gamemode~="custom"and"mode"or"custom")
end,
mode="main", mode="main",
custom="mode",
help="main", help="main",
stat="main", stat="main",
setting=function() setting=function()
@@ -109,17 +112,18 @@ prevMenu={
main="quit", main="quit",
} }
modeID={"sprint","marathon","zen","infinite","solo","death","blind","tetris41","asymsolo","gmroll","p2","p3","p4"} modeID={"sprint","marathon","zen","infinite","solo","death","blind","puzzle","techmino41","asymsolo","gmroll","p2","p3","p4"}
modeName={"Sprint","Marathon","Zen","Infinite","1v1","Death","Blind","Tetris 41","Asymmetry solo","GM roll","2P","3P","4P"} modeName={"Sprint","Marathon","Zen","Infinite","1v1","Death","Blind","Puzzle","Techmino 41","Asymmetry solo","GM roll","2P","3P","4P"}
modeInfo={ modeInfo={
sprint="Clear 40 Lines", sprint="Clear 40 Lines",
marathon="Clear 200 Lines", marathon="Clear 200 Lines",
zen="Clear 200 Lines without gravity", zen="Clear 200 Lines without gravity",
infinite="Infinite game,infinite happy", infinite="Infinite game,infinite happiness",
solo="Beat AI", solo="Beat AI",
death="Survive under terrible speed", death="Survive under terrible speed",
blind="Invisible board!", blind="Invisible board!",
tetris41="Melee fight with 40 AIs", puzzle="Your keyboard broke",
techmino41="Melee fight with 40 AIs",
asymsolo=" See-->", asymsolo=" See-->",
gmroll="Who want to be the grand master?", gmroll="Who want to be the grand master?",
p2="2 players game", p2="2 players game",
@@ -127,6 +131,59 @@ modeInfo={
p4="4 players game", 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={"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:"} 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} blockPos={4,4,4,4,4,5,4}
@@ -140,11 +197,11 @@ ren_n={"ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","
percent0to5={[0]="0%","20%","40%","60%","80%","100%",} percent0to5={[0]="0%","20%","40%","60%","80%","100%",}
marathon_drop={[0]=60,48,40,30,24,18,15,12,10,8,7,6,5,4,3,2,1,1,0,0} 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,8,7,6} death_lock={10,9,9,8,8}
death_wait={6,5,4,3,2} death_wait={6,6,5,5,4}
death_fall={10,8,7,6,5} 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"} snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"}
snapLevelValue={1,10,20,40,60,80}
act={ act={
moveLeft=function(auto) moveLeft=function(auto)
@@ -179,7 +236,10 @@ act={
end end
end, end,
softDrop=function() 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 P.downing=1
end, end,
rotRight=function()spin(1)end, rotRight=function()spin(1)end,
@@ -192,10 +252,34 @@ act={
count=60+26--Althour'z neim count=60+26--Althour'z neim
end, end,
insDown=function()if cy~= y_img then P.cy,P.lockDelay,P.spinLast=y_img,gameEnv.lock,false end end, insDown=function()if cy~= y_img then P.cy,P.lockDelay,P.spinLast=y_img,gameEnv.lock,false end end,
insLeft=function()while not ifoverlap(cb,cx-1,cy)do P.cx,P.lockDelay=cx-1,gameEnv.lock;freshgho()end end, insLeft=function()
insRight=function()while not ifoverlap(cb,cx+1,cy)do P.cx,P.lockDelay=cx+1,gameEnv.lock;freshgho()end end, while not ifoverlap(cb,cx-1,cy)do
down1=function()if cy~=y_img then P.cy=cy-1 end end, P.cx,P.lockDelay=cx-1,gameEnv.lock
down4=function()for i=1,4 do if cy~=y_img then P.cy=cy-1 else break end end end, freshgho()
end
end,
insRight=function()
while not ifoverlap(cb,cx+1,cy)do
P.cx,P.lockDelay=cx+1,gameEnv.lock
freshgho()
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, quit=function()Event.gameover.lose()end,
--System movements --System movements
} }
@@ -221,38 +305,38 @@ TRS={
[1]={ [1]={
[01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2},{0,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}}, [10]={{0,0},{1,0},{1,-1},{0,2},{1,2},{0,-1}},
[12]={{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},{0,-2},{-1,-2}}, [21]={{0,0},{-1,0},{-1,1},{1,0},{0,-2},{-1,-2}},
[23]={{0,0},{1,0},{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,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}}, [30]={{0,0},{-1,0},{-1,-1},{0,2},{-1,2}},
[03]={{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}}, [02]={{0,0},{1,0},{-1,0},{0,-1},{0,1}},
[20]={{0,0},{-1,0},{1,0},{0,1},{0,-1}}, [20]={{0,0},{-1,0},{1,0},{0,1},{0,-1}},
[13]={{0,0},{0,1},{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},{-1,0},{0,2}}, [31]={{0,0},{0,1},{0,-1},{1,0}},
}, },--Z/J
[2]={ [2]={
[01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2}}, [01]={{0,0},{-1,0},{-1,1},{0,-2},{-1,-2}},
[10]={{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}}, [12]={{0,0},{1,0},{1,-1},{1,1},{0,2},{1,2}},
[21]={{0,0},{-1,0},{-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},{0,-2},{1,-2}}, [23]={{0,0},{1,0},{1,1},{-1,0},{0,-2},{1,-2}},
[32]={{0,0},{-1,0},{-1,-1},{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}}, [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},{0,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}}, [02]={{0,0},{-1,0},{1,0},{0,-1},{0,1}},
[20]={{0,0},{1,0},{-1,0},{0,1},{0,-1}}, [20]={{0,0},{1,0},{-1,0},{0,1},{0,-1}},
[13]={{0,0},{0,-1},{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},{1,0},{0,2}}, [31]={{0,0},{0,-1},{0,1},{-1,0}},
}, },--S/L
[5]={ [5]={
[01]={{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}}, [10]={{0,0},{1,0},{1,-1},{0,2},{1,2},{0,-1},{1,1}},
[12]={{0,0},{1,0},{1,-1},{0,2},{1,2}}, [12]={{0,0},{1,0},{1,-1},{0,-1},{-1,-1},{0,2},{1,2}},
[21]={{0,0},{-1,0},{-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},{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,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}}, [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}}, [03]={{0,0},{1,0},{1,1},{0,-2},{1,-2},{0,1}},
[02]={{0,0},{-1,0},{1,0},{0,-1},{0,1}}, [02]={{0,0},{-1,0},{1,0},{0,-1},{0,1}},
@@ -264,8 +348,8 @@ TRS={
[01]={{0,0},{1,0},{-2,0},{-2,-1},{1,2}}, [01]={{0,0},{1,0},{-2,0},{-2,-1},{1,2}},
[10]={{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}}, [12]={{0,0},{-1,0},{2,0},{-1,2},{2,-1}},
[21]={{0,0},{-2,0},{1,0},{-2,1},{1,-2}}, [21]={{0,0},{-2,0},{1,0},{1,-2},{-2,1}},
[23]={{0,0},{2,0},{-1,0},{2,1},{-1,-2}}, [23]={{0,0},{2,0},{-1,0},{-1,-2},{2,1}},
[32]={{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}}, [30]={{0,0},{1,0},{-2,0},{1,-2},{-2,1}},
[03]={{0,0},{-1,0},{2,0},{2,-1},{-1,2}}, [03]={{0,0},{-1,0},{2,0},{2,-1},{-1,2}},
@@ -284,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=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=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=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={ 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=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,hide=function()return not setting.virtualkeySwitch end,code=function()if modeSel<#modeID 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=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={ play={
}, },
@@ -339,14 +432,14 @@ Buttons={
end,up=14,down=16}, 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=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=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 --15~18
}, },
setting2={--Control setting 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 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() {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 setting.virtualkeySwitch=not setting.virtualkeySwitch
end}, end},
@@ -377,11 +470,11 @@ Buttons={
end}, end},
}, },
help={ 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}, {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={ 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) sel=nil,--selected button id(integer)
} }
@@ -424,7 +517,7 @@ Text={
}, },
help={ help={
"I think you don't need \"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", "But just play like playing TOP/C2/KOS/TGM3",
"Game is not public now,so DO NOT DISTIRBUTE", "Game is not public now,so DO NOT DISTIRBUTE",
"", "",

147
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 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 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 ins,rem,sort=table.insert,table.remove,table.sort
null=function()end
ww,wh=gc.getWidth(),gc.getHeight() ww,wh=gc.getWidth(),gc.getHeight()
Timer=tm.getTime--Easy&Quick to get time! Timer=tm.getTime--Easy&Quick to get time!
@@ -28,7 +29,7 @@ function setFont(s)
if Fonts[s]then if Fonts[s]then
gc.setFont(Fonts[s]) gc.setFont(Fonts[s])
else else
local t=gc.setNewFont("cb.ttf",s) local t=gc.setNewFont("siyuanhei.otf",s-5)
Fonts[s]=t Fonts[s]=t
gc.setFont(t) gc.setFont(t)
end end
@@ -41,11 +42,11 @@ gameEnv0={
sddas=0,sdarr=2, sddas=0,sdarr=2,
ghost=true,center=true, ghost=true,center=true,
drop=30,lock=45, drop=30,lock=45,
wait=0,fall=20, wait=1,fall=1,
next=6,hold=true, next=6,hold=true,
sequence=1,visible=1, sequence=1,visible=1,
_20G=false,target=9e99, _20G=false,target=1e99,
freshLimit=9e99, freshLimit=1e99,
virtualkey={ virtualkey={
{80,720-80,6400,80},--moveLeft {80,720-80,6400,80},--moveLeft
{240,720-80,6400,80},--moveRight {240,720-80,6400,80},--moveRight
@@ -57,9 +58,22 @@ gameEnv0={
{1280-80,720-400,6400,80},--hold {1280-80,720-400,6400,80},--hold
{80,80,6400,80},--restart {80,80,6400,80},--restart
}, },
reach=function()end, reach=null,
--not all is actually used,some only provide a key --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={ randomMethod={
function() function()
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1) P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)
@@ -75,13 +89,10 @@ randomMethod={
end, end,
function() function()
P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1) P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1)
for j=1,4 do local i,j=nil,0
local i,f=rnd(7) ::r::
for k=1,4 do i,j=rnd(7),j+1
if i==P.his[k]then f=true end 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
end
if not f then break end
end
P.nxt[6],P.nb[6]=i,blocks[i][0] P.nxt[6],P.nb[6]=i,blocks[i][0]
rem(P.his,1)ins(P.his,i) rem(P.his,1)ins(P.his,i)
end, end,
@@ -94,8 +105,7 @@ randomMethod={
loadmode={ loadmode={
sprint=function() sprint=function()
modeEnv={ modeEnv={
wait=1, drop=60,
fall=1,
target=40, target=40,
reach=Event.gameover.win, reach=Event.gameover.win,
} }
@@ -107,25 +117,21 @@ loadmode={
modeEnv={ modeEnv={
drop=1e99, drop=1e99,
lock=1e99, lock=1e99,
wait=1,
fall=1,
target=200, target=200,
reach=Event.gameover.win, reach=Event.gameover.win,
} }
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="strap" curBG="strap"
BGM("reason") BGM("infinite")
end, end,
infinite=function() infinite=function()
modeEnv={ modeEnv={
drop=1e99, drop=1e99,
lock=1e99, lock=1e99,
wait=1,
fall=1,
} }
createPlayer(1,340,15) createPlayer(1,340,15)
curBG="glow" curBG="glow"
BGM("hide") BGM("infinite")
end, end,
gmroll=function() gmroll=function()
modeEnv={ modeEnv={
@@ -145,7 +151,6 @@ loadmode={
marathon=function() marathon=function()
modeEnv={ modeEnv={
drop=60, drop=60,
wait=1,
fall=20, fall=20,
target=10, target=10,
reach=Event.marathon_reach, reach=Event.marathon_reach,
@@ -171,10 +176,25 @@ loadmode={
curBG="game2" curBG="game2"
BGM("push") BGM("push")
end, end,
tetris41=function() puzzle=function()
modeEnv={ modeEnv={
wait=1, hold=false,
fall=1, das=0,
arr=0,
_20G=true,
drop=0,
lock=1e99,
fall=10,
target=40,
reach=Event.gameover.win,
}
createPlayer(1,340,15)
curBG="glow"
BGM("way")
end,
techmino41=function()
modeEnv={
freshLimit=15,
} }
royaleMode=true royaleMode=true
createPlayer(1,340,15)--Player createPlayer(1,340,15)--Player
@@ -198,8 +218,6 @@ loadmode={
end, end,
solo=function() solo=function()
modeEnv={ modeEnv={
wait=1,
fall=1,
freshLimit=15, freshLimit=15,
} }
createPlayer(1,20,15)--Player createPlayer(1,20,15)--Player
@@ -212,8 +230,6 @@ loadmode={
modeEnv={ modeEnv={
drop=15, drop=15,
lock=30, lock=30,
wait=1,
fall=1,
visible=0, visible=0,
freshLimit=10, freshLimit=10,
} }
@@ -224,8 +240,6 @@ loadmode={
end, end,
asymsolo=function() asymsolo=function()
modeEnv={ modeEnv={
wait=1,
fall=1,
visible=2, visible=2,
freshLimit=15, freshLimit=15,
} }
@@ -237,8 +251,6 @@ loadmode={
end, end,
p2=function() p2=function()
modeEnv={ modeEnv={
wait=1,
fall=1,
freshLimit=15, freshLimit=15,
} }
createPlayer(1,20,15) createPlayer(1,20,15)
@@ -249,8 +261,6 @@ loadmode={
end, end,
p3=function() p3=function()
modeEnv={ modeEnv={
wait=1,
fall=1,
freshLimit=15, freshLimit=15,
} }
createPlayer(1,20,100,.65) createPlayer(1,20,100,.65)
@@ -262,8 +272,6 @@ loadmode={
end, end,
p4=function() p4=function()
modeEnv={ modeEnv={
wait=1,
fall=1,
freshLimit=15, freshLimit=15,
} }
createPlayer(1,25,150,.5) createPlayer(1,25,150,.5)
@@ -274,6 +282,23 @@ loadmode={
curBG="game2" curBG="game2"
BGM("way") BGM("way")
end, 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={ Event={
gameover={ gameover={
@@ -290,6 +315,7 @@ Event={
end end
end end
showText("WIN","appear",100,nil,true) showText("WIN","appear",100,nil,true)
if P.id==1 and players[2]and players[2].ai then SFX("win")end
ins(task,Event.task.win) ins(task,Event.task.win)
end, end,
lose=function() lose=function()
@@ -323,6 +349,7 @@ Event={
visTime[i][j]=min(visTime[i][j],20) visTime[i][j]=min(visTime[i][j],20)
end end
end end
if P.id==1 and players[2]and players[2].ai then SFX("fail")end
ins(task,Event.task.lose) ins(task,Event.task.lose)
end, end,
}, },
@@ -409,55 +436,65 @@ mesDisp={
mStr(cstat.atk,-75,320) mStr(cstat.atk,-75,320)
mStr(format("%.2f",2.5*cstat.atk/cstat.piece),-75,430) mStr(format("%.2f",2.5*cstat.atk/cstat.piece),-75,430)
setFont(20) setFont(20)
gc.print("Attack",-103,360) gc.print("Attack",-100,360)
gc.print("Efficiency",-114,472) gc.print("Efficiency",-108,472)
end, end,
gmroll=function() gmroll=function()
setFont(35) setFont(30)
gc.print("Tetris",-120,390) gc.print("Techrash",-130,390)
setFont(80) setFont(80)
mStr(cstat.tetris,-75,420) mStr(cstat.techrash,-75,420)
end, end,
marathon=function() marathon=function()
setFont(50) setFont(50)
mStr(P.cstat.row,-75,330) mStr(P.cstat.row,-75,330)
mStr(gameEnv.target,-75,380) mStr(gameEnv.target,-75,380)
gc.line(-120,377,-30,377) gc.rectangle("fill",-120,376,90,4)
end, end,
death=function() death=function()
setFont(50) setFont(50)
mStr(P.cstat.row,-75,330) mStr(P.cstat.row,-75,330)
mStr(gameEnv.target,-75,380) mStr(gameEnv.target,-75,380)
gc.line(-120,377,-30,377) gc.rectangle("fill",-120,376,90,4)
end, end,
tetris41=function() puzzle=function()
setFont(75)
mStr(max(40-P.cstat.row,0),-75,280)
end,
techmino41=function()
gc.draw(badgeIcon,-120,150,nil,1.5) gc.draw(badgeIcon,-120,150,nil,1.5)
setFont(50) setFont(50)
gc.print(badge,-65,150) gc.print(badge,-65,150)
mStr(cstat.atk,-75,320) mStr(cstat.atk,-75,320)
mStr(#players.alive,-75,430) mStr(#players.alive,-75,430)
setFont(20) setFont(20)
gc.print("Attack",-103,360) gc.print("Attack",-100,360)
gc.print("Remain",-105,472) gc.print("Remain",-105,472)
end, end,
blind=function() blind=function()
setFont(35) setFont(30)
gc.print("Rows",-115,220) gc.print("Rows",-110,220)
gc.print("Tetris",-120,390) gc.print("Techrash",-130,390)
setFont(80) setFont(80)
mStr(P.cstat.row,-75,250) mStr(P.cstat.row,-75,250)
mStr(cstat.tetris,-75,420) mStr(cstat.techrash,-75,420)
end, end,
solo=function() solo=function()
gc.print("Attack",-130,365) gc.print("Attack",-128,365)
setFont(80) setFont(80)
mStr(cstat.atk,-75,300) mStr(cstat.atk,-75,300)
end, end,
asymsolo=function() asymsolo=function()
gc.print("Attack",-132,365) gc.print("Attack",-128,365)
setFont(80) setFont(80)
mStr(cstat.atk,-75,300) mStr(cstat.atk,-75,300)
end, 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 --Game system Data
@@ -523,15 +560,15 @@ stat={
} }
--User Data&User Setting --User Data&User Setting
--------------------------------Wrning!_G __index Ply[n] when chng any playr's elments! --------------------------------Wrning!_G __index Ply[n] when chng any playr's elments!
require("list")
require("texture")
require("ai")
require("toolfunc") require("toolfunc")
require("sysfunc") require("sysfunc")
require("gamefunc") require("gamefunc")
require("list")
require("texture")
require("ai")
require("timer") require("timer")
require("paint") require("paint")
require("game_scene") require("scene")
require("call&sys") require("call&sys")
userData=fs.newFile("userdata") userData=fs.newFile("userdata")

View File

@@ -190,6 +190,15 @@ function Pnt.BG.strap()
gc.draw(background[2],x,0,nil,10) gc.draw(background[2],x,0,nil,10)
gc.draw(background[2],x-1280,0,nil,10) gc.draw(background[2],x-1280,0,nil,10)
end 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() function Pnt.load()
gc.setLineWidth(4) gc.setLineWidth(4)
@@ -198,28 +207,18 @@ function Pnt.load()
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.rectangle("line",340,340,640,40) gc.rectangle("line",340,340,640,40)
setFont(30) setFont(30)
mStr(Text.load[loading],640,345) mStr(Text.load[loading],640,346)
setFont(20) setFont(20)
mStr("not animation,real loading!",640,392) mStr("not animation,real loading!",640,392)
end end
function Pnt.main() function Pnt.main()
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(30) setFont(30)
gc.print("Alpha V0.65",370,150) gc.print("Alpha V0.7.1",370,150)
gc.print(system,530,110) gc.print(system,530,110)
gc.draw(titleImage,30,30) gc.draw(titleImage,30,30)
end end
function Pnt.mode() 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) setFont(30)
mStr(modeInfo[modeID[modeSel]],270,300) mStr(modeInfo[modeID[modeSel]],270,300)
setFont(80) setFont(80)
@@ -234,6 +233,25 @@ function Pnt.mode()
end end
end 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() function Pnt.play()
for p=1,#players do for p=1,#players do
P=players[p] P=players[p]
@@ -253,28 +271,8 @@ function Pnt.play()
drawPixel(j,i,field[j][i],min(visTime[j][i],20)*.05) drawPixel(j,i,field[j][i],min(visTime[j][i],20)*.05)
end end
end end
else
gc.setColor(1,1,1,falling/gameEnv.fall)
gc.rectangle("fill",0,600-30*j,320,30)
end end
end--Field end--Field
if not P.result 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,bn,.3)
end
end end
end--Ghost
if waiting<=0 then
gc.setColor(1,1,1)
for i=1,r do for j=1,c do
if cb[i][j]>0 then
drawPixel(i+cy-1,j+cx-1,bn,1)
end
end end--Block
end
end
gc.setColor(1,1,1) gc.setColor(1,1,1)
gc.draw(PTC.dust[p])--Draw game field gc.draw(PTC.dust[p])--Draw game field
gc.setStencilTest()--In-playField mask gc.setStencilTest()--In-playField mask
@@ -293,13 +291,13 @@ function Pnt.play()
if not a.sent then if not a.sent then
if a.countdown>0 then if a.countdown>0 then
gc.setColor(attackColor[a.lv][1]) gc.setColor(attackColor[a.lv][1])
gc.rectangle("fill",305,600-h,8,-bar+5) gc.rectangle("fill",315,600-h,8,-bar+5)
gc.setColor(attackColor[a.lv][2]) gc.setColor(attackColor[a.lv][2])
gc.rectangle("fill",305,600-h+(-bar+5),8,-(-bar+5)*(1-a.countdown/a.cd0)) gc.rectangle("fill",315,600-h+(-bar+5),8,-(-bar+5)*(1-a.countdown/a.cd0))
--Timing --Timing
else else
attackColor.animate[a.lv]((sin((Timer()-i)*20)+1)*.5) attackColor.animate[a.lv]((sin((Timer()-i)*20)+1)*.5)
gc.rectangle("fill",305,600-h,8,-bar+5) gc.rectangle("fill",315,600-h,8,-bar+5)
--Warning --Warning
end end
end end
@@ -377,19 +375,19 @@ function Pnt.play()
end end
if a.countdown>0 then if a.countdown>0 then
gc.setColor(attackColor[a.lv][1]) gc.setColor(attackColor[a.lv][1])
gc.rectangle("fill",305,600-h,8,-bar+5) gc.rectangle("fill",308,600-h,8,-bar+5)
gc.setColor(attackColor[a.lv][2]) gc.setColor(attackColor[a.lv][2])
gc.rectangle("fill",305,600-h+(-bar+5),8,-(-bar+5)*(1-a.countdown/a.cd0)) gc.rectangle("fill",308,600-h+(-bar+5),8,-(-bar+5)*(1-a.countdown/a.cd0))
--Timing --Timing
else else
attackColor.animate[a.lv]((sin((Timer()-i)*20)+1)*.5) attackColor.animate[a.lv]((sin((Timer()-i)*20)+1)*.5)
gc.rectangle("fill",305,600-h,8,-bar+5) gc.rectangle("fill",308,600-h,8,-bar+5)
--Warning --Warning
end end
else else
gc.setColor(attackColor[a.lv][1]) gc.setColor(attackColor[a.lv][1])
bar=bar*(20-a.time)*.05 bar=bar*(20-a.time)*.05
gc.rectangle("fill",305,600-h,8,-bar+5) gc.rectangle("fill",308,600-h,8,-bar+5)
--Disappear --Disappear
end end
h=h+bar h=h+bar
@@ -442,7 +440,7 @@ function Pnt.play()
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(40) setFont(40)
gc.print(format("%0.2f",time),-130,530)--Draw time gc.print(format("%.2f",time),-130,530)--Draw time
if mesDisp[gamemode]then mesDisp[gamemode]()end--Draw other message if mesDisp[gamemode]then mesDisp[gamemode]()end--Draw other message
setFont(15) setFont(15)

View File

@@ -23,6 +23,12 @@ function game.mode()
curBG="none" curBG="none"
BGM("blank") BGM("blank")
end end
function game.custom()
optSel=optSel or 1
scene="custom"
curBG="matrix"
BGM("blank")
end
function game.play() function game.play()
scene="play" scene="play"
--curBG="game1" --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 local N=gc.newImage
function C(x,y)
c=gc.newCanvas(x,y)
gc.setCanvas(c)
end
titleImage=N("/image/mess/title.png") titleImage=N("/image/mess/title.png")
mouseIcon=N("/image/mess/mouseIcon.png") mouseIcon=N("/image/mess/mouseIcon.png")
spinCenter=N("/image/mess/spinCenter.png") spinCenter=N("/image/mess/spinCenter.png")
dialCircle=N("/image/mess/dialCircle.png") dialCircle=N("/image/mess/dialCircle.png")
dialNeedle=N("/image/mess/dialNeedle.png") dialNeedle=N("/image/mess/dialNeedle.png")
badgeIcon=N("/image/mess/badge.png") badgeIcon=N("/image/mess/badge.png")
blockSkin={} blockSkin={}
local img=N("/image/block/1.png")
for i=1,13 do 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 end
img:release()
background={} background={}
gc.setColor(1,1,1) gc.setColor(1,1,1)
background={ background={
@@ -24,7 +32,7 @@ end
PTC={dust={}}--Particle systems PTC={dust={}}--Particle systems
c=gc.newCanvas(6,6)gc.setCanvas(c) C(6,6)
gc.clear(1,1,1) gc.clear(1,1,1)
PTC.dust[0]=gc.newParticleSystem(c,1000) PTC.dust[0]=gc.newParticleSystem(c,1000)
PTC.dust[0]:setParticleLifetime(.2,.3) PTC.dust[0]:setParticleLifetime(.2,.3)

View File

@@ -106,7 +106,7 @@ function Tmr.play(dt)
v=0 for i=2,10 do v=v+i*(i-1)*7.2/(frame-dropTime[i])end P.dropSpeed=dropSpeed*.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
--Update speeds --Update speeds
if P.ai then if P.ai and waiting<=0 then
P.ai.controlDelay=P.ai.controlDelay-1 P.ai.controlDelay=P.ai.controlDelay-1
if P.ai.controlDelay==0 then if P.ai.controlDelay==0 then
if #P.ai.controls>0 then if #P.ai.controls>0 then
@@ -163,7 +163,9 @@ function Tmr.play(dt)
removeRow(field,clearing[i]) removeRow(field,clearing[i])
removeRow(visTime,clearing[i]) removeRow(visTime,clearing[i])
end end
P.clearing={} while #clearing>0 do
rem(clearing)
end
end end
--Rows cleared drop --Rows cleared drop
elseif waiting>0 then elseif waiting>0 then
@@ -189,8 +191,10 @@ function Tmr.play(dt)
end end
end end
P.b2b1=P.b2b1*.93+P.b2b*.07 P.b2b1=P.b2b1*.93+P.b2b*.07
if P.b2b>500 then P.b2b=P.b2b-.1 end if P.b2b>500 then
--ALive P.b2b=P.b2b-.06
end
--Alive
else else
P.keySpeed=keySpeed*.96+cstat.key/time*60*.04 P.keySpeed=keySpeed*.96+cstat.key/time*60*.04
P.dropSpeed=dropSpeed*.96+cstat.piece/time*60*.04 P.dropSpeed=dropSpeed*.96+cstat.piece/time*60*.04