Compare commits

...

9 Commits

Author SHA1 Message Date
MrZ_26
99b55b72e0 0.8.23: Details Update 2020-06-07 01:06:31 +08:00
MrZ_26
08883b952f 0.8.22:Shader Update 2020-05-28 15:16:38 +08:00
MrZ_26
76fab86692 player generator优化 2020-05-23 00:09:53 +08:00
MrZ_26
725eb4e26f 0.8.22pre1 2020-05-23 00:05:04 +08:00
MrZ_26
486a64cca3 0.8.21: Bug Fixed 2020-05-23 00:04:21 +08:00
FinnTenzor
8e5f6f8b7c 在不影响newXXXPlayer逻辑的情况下调整函数体 为RemotePlayer预留位置 2020-05-21 17:09:39 +08:00
Finn
c0149d5830 Merge pull request #1 from MrZ626/master
0.8.19/20: Fantastic Global Update II
2020-05-21 16:32:44 +08:00
MrZ_26
28d5136e95 0.8.19/20: Fantastic Global Update II 2020-05-21 01:12:17 +08:00
MrZ_26
2768fa748b 0.8.18:Details Update II 2020-05-01 02:33:36 +08:00
133 changed files with 5643 additions and 4364 deletions

BIN
BGM/far.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

1068
callback.lua Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
gameVersion="Alpha V0.8.17" gameVersion="Alpha V0.8.23"
function love.conf(t) function love.conf(t)
t.identity="Techmino"--SaveDir name t.identity="Techmino"--folder name
t.version="11.1" t.version="11.1"
t.console=false t.console=false
t.gammacorrect=false t.gammacorrect=false
t.appendidentity=true--Search files in source before save directory t.appendidentity=true--search files in source before save directory
t.accelerometerjoystick=false--ios/android加速度计=摇杆 t.accelerometerjoystick=false--accelerometer=joystick on ios/android
t.audio.mixwithsystem=true t.audio.mixwithsystem=true
local W=t.window local W=t.window
@@ -17,12 +17,12 @@ function love.conf(t)
W.resizable=true W.resizable=true
W.fullscreentype="desktop"--"exclusive" W.fullscreentype="desktop"--"exclusive"
W.fullscreen=false W.fullscreen=false
W.vsync=0--fps W.vsync=0--infinite fps
W.msaa=false--num of samples to use with multi-sampled antialiasing W.msaa=false--num of samples to use with multi-sampled antialiasing
W.depth=0--bits/samp of depth buffer W.depth=0--bits/samp of depth buffer
W.stencil=1--bits/samp of stencil buffer W.stencil=1--bits/samp of stencil buffer
W.display=1--Monitor ID W.display=1--monitor ID
W.highdpi=false--High-dpi mode for the window on a Retina display W.highdpi=false--high-dpi mode for the window on a Retina display
W.x,W.y=nil W.x,W.y=nil
local M=t.modules local M=t.modules

View File

@@ -1,14 +1,13 @@
(ENG ver. below)
游戏方法: 游戏方法:
系统会提供的一个个四联骨牌("方块",总共7种),玩家需要控制(左右移动和旋转90,180,270度),每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话) 系统会提供的一个个四联骨牌("方块",总共7种),玩家需要控制(左右移动和旋转90,180,270度),每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话)
活到最后或者完成目标即胜利. 活到最后或者完成目标即胜利.
旋转系统: 旋转系统:
使用Techmino专属旋转系统 使用Techmino专属旋转系统,细节懒得写(
细节懒得写(?)
spin判定: spin判定:
结合了不可移动判定和三角判定,是否为mini也与判定过程数据有关 结合了不可移动判定和三角判定,是否为mini也与判定过程数据有关,细节也懒得写(
细节也懒得写(?)
攻击系统: 攻击系统:
普通消除: 普通消除:
@@ -17,7 +16,8 @@ spin判定:
spin1/2/3攻击2/4/6,若mini则减半 spin1/2/3攻击2/4/6,若mini则减半
B2B:加1(techrash/spin1/spin2)或2(spin3)攻击 B2B:加1(techrash/spin1/spin2)或2(spin3)攻击
B3B:在B2B效果之上消四再加1,spin再加0.5*消行数攻击,二者都+1额外抵挡 B3B:在B2B效果之上消四再加1,spin再加0.5*消行数攻击,二者都+1额外抵挡
连击:0,0,1,1,2,2,3,3,4,4,3,2,3,2,3,2,3…(后面都是2) 堆楼连击:0,0,1,1,2,2,2,3,3,3,4,4,3, 之后都是2
挖掘连击:0,0,1,1,2,2,3,3,4,4,4, 之后都是5
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文) 特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+2,额外抵挡+2 半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+2,额外抵挡+2
全消:将上述伤害之和开根号,再+6~12(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满) 全消:将上述伤害之和开根号,再+6~12(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
@@ -48,11 +48,68 @@ back to back(B2B)点数说明:
1.随机:每次攻击后10%随机挑选一个玩家锁定 1.随机:每次攻击后10%随机挑选一个玩家锁定
2.最多徽章:攻击后或者锁定玩家死亡时锁定徽章最多的玩家 2.最多徽章:攻击后或者锁定玩家死亡时锁定徽章最多的玩家
3.最高:攻击后或者锁定玩家死亡时锁定场地最高的玩家(每秒刷新) 3.最高:攻击后或者锁定玩家死亡时锁定场地最高的玩家(每秒刷新)
4.反击:攻击所有锁定自己的玩家攻击AOE,若未被任何人锁定则击随机玩家 4.反击:攻击所有锁定自己的玩家攻击AOE,若未被任何人锁定则击随机玩家(不锁定)
坚持到最后的玩家就是胜利者. 坚持到最后的玩家就是胜利者.
自定义模式说明: 自定义模式说明:
玩家可以自由调整大多数参数(不包括上述各种游戏模式的特殊效果),也可以画一个场地去消除或者是作为提示模板来进行拼图模式. 玩家可以自由调整大多数参数(不包括上述各种游戏模式的特殊效果),也可以画一个场地去消除或者是作为提示模板来进行拼图模式.
在拼图模式下,按功能键切换是否展示提示.其中打"X"的格子不允许有方块,空的格子可以是任何状态,普通的七种彩色方块必须颜色对应,垃圾行方块的为止只要有方块就可以,但是不能是空气,玩家拼出自己画的图后就会判定胜利. 在拼图模式下,按功能键切换是否展示提示.其中打"X"的格子不允许有方块,空的格子可以是任何状态,普通的七种彩色方块必须颜色对应,垃圾行方块的为止只要有方块就可以,但是不能是空气,玩家拼出自己画的图后就会判定胜利.
附录:
ZXC的Ospin地图:XY0BCgAwCAIR7v9vHtUSt8AS0xKqgpnNGyXkrmFNePf6qi3BbQPrHT2Owxe6D66NeKi86dwB Gameplay:
System will offer a series of tetrominoes ("Pieces". There are 7 types), and the player needs to control [them] (move left and right, rotate 90, 180 or 270 degrees), filling a row on the play field will clear it, attack will be sent depending on the type of the line clear (if there is an opponent)
Survive till the last or complete the level's goal to win.
Rotation system:
Uses Techmino's custom rotation system. Too lazy to write the details
Spin detection:
Combines immobile and 3-corner detection, and whether a spin is mini also depends on the data used for detection. Also too lazy to write the details
Attack system:
Regular line clears:
Single/Double/Triple/Techrash sends 0.25/1.25/2.25/4
Special line clears:
Spin Single/Double/Triple sends 2/4/6, half if Mini
B2B: +1 (Techrash/Spin Single/Spin Double) or +2 (Spin Triple)
B2B2B/B3B: In addition to B2B, +1 if Techrash, +(0.5 * lines cleared) if Spin, and in both cases +1 additional blocking
Wide Combo: 0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 3, then 2 afterwards
Dig Combo: 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, then 5 afterwards
Special line clears will increase B2B gauge, making later special line clears have B2B or B2B2B bonus (see below)
Half Perfect Clear (a Perfect Clear "with blocks left below". If it's an I clearing 1 line, then the remaining blocks must not be player-placed): Attack +2, Extra Blocking +2
Perfect Clear: square root all damage above, then +6 to +12 attack (increases within a round) and +2 extra blocking. (note: if lines cleared in this round >4, then B2B gauge will be filled)
After calculating all above, the damage value will be rounded down then sent
Score system:
The more impressive you play, the more score you get
Attack delay:
Attack from Doubles/Triples take effect the faster, then Techrash, Spins send rather slow attack, and high combos will send the slowest
B2B or B2B2B, while they increase lines sent, they also increase the attack delay. Minis will greatly increase delay.
Countering:
When you send attack, if there is garbage in queue, extra blocking will be used first, then attack, countering the earliest attack at a 1:1 ratio.
Unused extra blocking will be discarded, then remaining attack will be sent to your opponent.
Back to Back (B2B) gauge:
The B2B gauge ranges from 0 to 1,200. Special line clears are B2B if the gauge is >=40, B2B2B if >1,000.
A regular line clear -250
Spin Single/Double/Triple +50/100/180 (x40% if Mini)
Techrash +100
Spin without clearing lines +20, but gauge cannot exceed 1,000 with this method
When gauge is above 1,000, a drop without clearing lines -40 (cannot drop below 1,000 with this method)
Battle Royale modes:
Many players play within one game (all opponents are bots, not real players). As players get eliminated, blocks fall faster, and garbage take effect faster, as well as rise faster. KO-ing another player grants you one badge plus all badge that player has, increasing your attack power.
Players can select one of 4 attack modes:
1. Random: Every time you attack, 10% chance to lock onto a random player.
2. Badges: After you attack or when your target dies, lock onto the player with the most badges.
3. KOs: After you attack or when your target dies, lock onto the player with the highest field. (This refreshes every second)
4. Counter: attack all players locking onto yourself. Your attack will be sent to all of them. If you are not targetted, you attack a random player (not locking).
The last survivor wins.
Custom mode:
You can freely adjust most parameters (not including special effects of other game modes), and you can also draw a field to clear or make a template to build.
In build (puzzle) mode, you can toggle template display with Function key. Cells with a X cannot have blocks; empty cells can be in any state; regular colored cells have to be made of the corresponding block; garbage-colored cells can be any block but not air. Once you make the shape, you will win.
附录Appendix:
ZXC's cool O-spin map:XY0BCgAwCAIR7v9vHtUSt8AS0xKqgpnNGyXkrmFNePf6qi3BbQPrHT2Owxe6D66NeKi86dwB

BIN
font.ttf

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 B

BIN
image/mess/electric.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

1302
main.lua

File diff suppressed because it is too large Load Diff

View File

@@ -30,11 +30,11 @@ return{
P:win("finish") P:win("finish")
end end
end, end,
bg="game3",bgm="shining terminal", bg="aura",bgm="far",
}, },
slowMark=true, slowMark=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
players[1].modeData.event="M7" players[1].modeData.event="M7"
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)

View File

@@ -39,7 +39,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(55) setFont(55)
@@ -53,6 +53,12 @@ return{
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.event local W=P.modeData.event
return W>100 and 4 or W>=80 and 3 or W>=50 and 2 or W>=20 and 1 or W>=5 and 0 return
W>=100 and 5 or
W>=80 and 4 or
W>=60 and 3 or
W>=40 and 2 or
W>=20 and 1 or
W>=5 and 0
end, end,
} }

View File

@@ -48,7 +48,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(55) setFont(55)
@@ -66,6 +66,12 @@ return{
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P) getRank=function(P)
local W=P.modeData.event local W=P.modeData.event
return W>40 and 4 or W>=30 and 3 or W>=20 and 2 or W>=10 and 1 or W>=5 and 0 return
W>=50 and 5 or
W>=40 and 4 or
W>=30 and 3 or
W>=20 and 2 or
W>=10 and 1 or
W>=5 and 0
end, end,
} }

View File

@@ -11,13 +11,13 @@ return{
env={ env={
drop=1e99,lock=1e99, drop=1e99,lock=1e99,
hold=false, hold=false,
dropPiece=player.lose, dropPiece=function(P)P:lose()end,
task=nil, task=nil,
bg="game1",bgm="newera", bg="game1",bgm="newera",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,

View File

@@ -4,14 +4,14 @@ return{
env={ env={
drop=30,lock=45, drop=30,lock=45,
visible="time", visible="time",
dropPiece=player.reach_winCheck, dropPiece=PLY.reach_winCheck,
freshLimit=10, freshLimit=10,
target=200, target=200,
bg="glow",bgm="newera", bg="glow",bgm="newera",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
mText(drawableText.line,-81,300) mText(drawableText.line,-81,300)

View File

@@ -1,3 +1,4 @@
local gc=love.graphics
local min=math.min local min=math.min
return{ return{
color=color.magenta, color=color.magenta,
@@ -6,14 +7,14 @@ return{
fall=10,lock=60, fall=10,lock=60,
center=false, center=false,
visible="none", visible="none",
dropPiece=player.reach_winCheck, dropPiece=PLY.reach_winCheck,
freshLimit=15, freshLimit=15,
target=200, target=200,
bg="rgb",bgm="secret7th", bg="rgb",bgm="secret7th",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
mText(drawableText.line,-81,300) mText(drawableText.line,-81,300)
@@ -21,6 +22,8 @@ return{
setFont(75) setFont(75)
mStr(P.stat.row,-81,220) mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340) mStr(P.stat.clear_S[4],-81,340)
gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6)
end, end,
score=function(P)return{min(P.stat.row or 200),P.stat.time}end, score=function(P)return{min(P.stat.row or 200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,

View File

@@ -1,3 +1,4 @@
local gc=love.graphics
local min=math.min local min=math.min
return{ return{
color=color.red, color=color.red,
@@ -7,14 +8,14 @@ return{
center=false,ghost=false, center=false,ghost=false,
dropFX=0,lockFX=0, dropFX=0,lockFX=0,
visible="none", visible="none",
dropPiece=player.reach_winCheck, dropPiece=PLY.reach_winCheck,
freshLimit=15, freshLimit=15,
target=200, target=200,
bg="rgb",bgm="secret8th", bg="rgb",bgm="secret8th",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
mText(drawableText.line,-81,300) mText(drawableText.line,-81,300)
@@ -22,6 +23,8 @@ return{
setFont(75) setFont(75)
mStr(P.stat.row,-81,220) mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340) mStr(P.stat.clear_S[4],-81,340)
gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6)
end, end,
score=function(P)return{min(P.stat.row or 200),P.stat.time}end, score=function(P)return{min(P.stat.row or 200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,

View File

@@ -1,3 +1,4 @@
local gc=love.graphics
local min=math.min local min=math.min
return{ return{
color=color.green, color=color.green,
@@ -5,14 +6,14 @@ return{
drop=15,lock=45, drop=15,lock=45,
freshLimit=10, freshLimit=10,
visible="fast", visible="fast",
dropPiece=player.reach_winCheck, dropPiece=PLY.reach_winCheck,
freshLimit=10, freshLimit=10,
target=200, target=200,
bg="glow",bgm="reason", bg="glow",bgm="reason",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
mText(drawableText.line,-81,300) mText(drawableText.line,-81,300)
@@ -20,6 +21,8 @@ return{
setFont(75) setFont(75)
mStr(P.stat.row,-81,220) mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340) mStr(P.stat.clear_S[4],-81,340)
gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6)
end, end,
score=function(P)return{min(P.stat.row or 200),P.stat.time}end, score=function(P)return{min(P.stat.row or 200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,

View File

@@ -1,3 +1,4 @@
local gc=love.graphics
local min=math.min local min=math.min
return{ return{
color=color.red, color=color.red,
@@ -8,14 +9,14 @@ return{
center=false,ghost=false, center=false,ghost=false,
dropFX=0,lockFX=0, dropFX=0,lockFX=0,
visible="none", visible="none",
dropPiece=player.reach_winCheck, dropPiece=PLY.reach_winCheck,
freshLimit=15, freshLimit=15,
target=200, target=200,
bg="rgb",bgm="secret7th", bg="rgb",bgm="secret7th",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
mText(drawableText.line,-81,300) mText(drawableText.line,-81,300)
@@ -23,6 +24,8 @@ return{
setFont(75) setFont(75)
mStr(P.stat.row,-81,220) mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340) mStr(P.stat.clear_S[4],-81,340)
gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6)
end, end,
score=function(P)return{min(P.stat.row or 200),P.stat.time}end, score=function(P)return{min(P.stat.row or 200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end, scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,

View File

@@ -27,7 +27,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local P=players[1] local P=players[1]
local F=P.field local F=P.field
for i=1,24 do for i=1,24 do

View File

@@ -25,7 +25,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local P=players[1] local P=players[1]
local F=P.field local F=P.field
for i=1,24 do for i=1,24 do

View File

@@ -29,7 +29,7 @@ return{
}, },
slowMark=true, slowMark=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(75) setFont(75)

View File

@@ -3,7 +3,7 @@ local int=math.floor
return{ return{
color=color.white, color=color.white,
env={ env={
dropPiece=player.reach_winCheck, dropPiece=PLY.reach_winCheck,
}, },
load=function() load=function()
for i=1,#customID do for i=1,#customID do
@@ -12,14 +12,14 @@ return{
end end
modeEnv._20G=modeEnv.drop==0 modeEnv._20G=modeEnv.drop==0
modeEnv.oncehold=customSel[6]==1 modeEnv.oncehold=customSel[6]==1
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local L=modeEnv.opponent local L=modeEnv.opponent
if L~=0 then if L~=0 then
modeEnv.target=nil modeEnv.target=nil
if L<10 then if L<10 then
newAIPlayer(2,965,360,.5,AITemplate("9S",2*L)) PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",2*L))
else else
newAIPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10))) PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10)))
end end
end end
preField.h=20 preField.h=20

View File

@@ -32,14 +32,14 @@ return{
modeEnv._20G=modeEnv.drop==0 modeEnv._20G=modeEnv.drop==0
modeEnv.oncehold=customSel[6]==1 modeEnv.oncehold=customSel[6]==1
modeEnv.target=0 modeEnv.target=0
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local L=modeEnv.opponent local L=modeEnv.opponent
if L~=0 then if L~=0 then
modeEnv.target=nil modeEnv.target=nil
if L<10 then if L<10 then
newAIPlayer(2,965,360,.5,AITemplate("9S",2*L)) PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",2*L))
else else
newAIPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10))) PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10)))
end end
end end
preField.h=20 preField.h=20

View File

@@ -41,7 +41,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(55) setFont(55)

View File

@@ -41,7 +41,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(55) setFont(55)

View File

@@ -20,7 +20,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(65) setFont(65)

View File

@@ -9,7 +9,7 @@ return{
local D=P.modeData local D=P.modeData
D.counter=D.counter+1 D.counter=D.counter+1
if D.counter>=max(30,80-.3*D.event)then if D.counter>=max(30,80-.3*D.event)then
P:garbageRise(11+D.event%3,1,rnd(10)) P:garbageRise(13+D.event%5,1,rnd(10))
P.stat.recv=P.stat.recv+1 P.stat.recv=P.stat.recv+1
D.counter=0 D.counter=0
D.event=D.event+1 D.event=D.event+1
@@ -19,7 +19,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(65) setFont(65)

View File

@@ -51,9 +51,9 @@ return{
res[A+2]=7 res[A+2]=7
end end
--give O when no Δ=0/give T when no Δ=1 --give O when no d=0/give T when no d=1
d=0--Δ=0 d=0--d=0 count
A=0--Δ=1 A=0--d=1 count
for x=2,10 do for x=2,10 do
local _=height[x]-height[x-1] local _=height[x]-height[x-1]
if _==0 then if _==0 then
@@ -82,7 +82,7 @@ return{
P:getNext(res[rnd(#res)]) P:getNext(res[rnd(#res)])
end end
end, end,
target=100,dropPiece=player.reach_winCheck, target=100,dropPiece=PLY.reach_winCheck,
next=1,hold=false, next=1,hold=false,
ospin=false, ospin=false,
freshLimit=15, freshLimit=15,
@@ -90,7 +90,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(70) setFont(70)

View File

@@ -5,7 +5,7 @@ return{
drop=20,lock=60, drop=20,lock=60,
sequence="bag", sequence="bag",
bag={1,1,2,2,3,3,4,4,5,5,6,6}, bag={1,1,2,2,3,3,4,4,5,5,6,6},
target=100,dropPiece=player.reach_winCheck, target=100,dropPiece=PLY.reach_winCheck,
next=3, next=3,
ospin=false, ospin=false,
freshLimit=15, freshLimit=15,
@@ -13,7 +13,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(70) setFont(70)

View File

@@ -1,14 +0,0 @@
return{
color=color.white,
env={
drop=60,lock=60,
freshLimit=15,
bg="none",bgm="way",
},
load=function()
newPlayer(1,20,15)
newPlayer(2,650,15)
end,
mesDisp=function(P,dx,dy)
end,
}

View File

@@ -1,15 +0,0 @@
return{
color=color.white,
env={
drop=60,lock=60,
freshLimit=15,
bg="none",bgm="way",
},
load=function()
newPlayer(1,20,100,.65)
newPlayer(2,435,100,.65)
newPlayer(3,850,100,.65)
end,
mesDisp=function(P,dx,dy)
end,
}

View File

@@ -1,16 +0,0 @@
return{
color=color.white,
env={
drop=60,lock=60,
freshLimit=15,
bg="none",bgm="way",
},
load=function()
newPlayer(1,25,160,.5)
newPlayer(2,335,160,.5)
newPlayer(3,645,160,.5)
newPlayer(4,955,160,.5)
end,
mesDisp=function(P,dx,dy)
end,
}

View File

@@ -7,7 +7,7 @@ return{
bg="glow",bgm="infinite", bg="glow",bgm="infinite",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -17,7 +17,7 @@ return{
bg="glow",bgm="infinite", bg="glow",bgm="infinite",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
for _=1,8 do for _=1,8 do
players[1]:garbageRise(13,1,rnd(10)) players[1]:garbageRise(13,1,rnd(10))
end end

View File

@@ -26,7 +26,7 @@ return{
pauseLimit=true, pauseLimit=true,
slowMark=true, slowMark=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -26,7 +26,7 @@ return{
pauseLimit=true, pauseLimit=true,
slowMark=true, slowMark=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)
@@ -42,8 +42,8 @@ return{
if L>=200 then if L>=200 then
local T=P.stat.time local T=P.stat.time
return return
T<=185 and 5 or T<=226 and 5 or
T<=250 and 4 or T<=262 and 4 or
3 3
else else
return return

View File

@@ -47,7 +47,7 @@ return{
}, },
slowMark=true, slowMark=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -51,7 +51,7 @@ return{
}, },
slowMark=true, slowMark=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -47,7 +47,7 @@ return{
}, },
slowMark=true, slowMark=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -4,14 +4,14 @@ return{
env={ env={
drop=60,lock=120, drop=60,lock=120,
fall=10, fall=10,
target=100,dropPiece=player.reach_winCheck, target=100,dropPiece=PLY.reach_winCheck,
freshLimit=15, freshLimit=15,
ospin=false, ospin=false,
bg="rgb",bgm="infinite", bg="rgb",bgm="infinite",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -4,14 +4,14 @@ return{
env={ env={
drop=20,lock=60, drop=20,lock=60,
fall=20, fall=20,
target=100,dropPiece=player.reach_winCheck, target=100,dropPiece=PLY.reach_winCheck,
freshLimit=15, freshLimit=15,
ospin=false, ospin=false,
bg="rgb",bgm="infinite", bg="rgb",bgm="infinite",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -4,13 +4,13 @@ return{
env={ env={
oncehold=false, oncehold=false,
drop=300,lock=1e99, drop=300,lock=1e99,
target=100,dropPiece=player.reach_winCheck, target=100,dropPiece=PLY.reach_winCheck,
ospin=false, ospin=false,
bg="rgb",bgm="newera", bg="rgb",bgm="newera",
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -5,53 +5,35 @@ local pc_lock={55,50,45,40,36,32,30}
local pc_fall={18,16,14,12,10,9,8,7,6} local pc_fall={18,16,14,12,10,9,8,7,6}
local PCbase=require("parts/PCbase") local PCbase=require("parts/PCbase")
local PClist=require("parts/PClist") local PClist=require("parts/PClist")
local PCtype={[0]=1,2,1,3,2,3}
local function task_PC(P) local function task_PC(P)
local _
P.modeData.counter=P.modeData.counter+1 P.modeData.counter=P.modeData.counter+1
if P.modeData.counter==21 then if P.modeData.counter==26 then
local t=P.stat.pc%2 local base=PCbase[P.modeData.type]
local S=P.gameEnv.skin P:pushLine(base[rnd(#base)],P.modeData.symmetry)
for i=1,4 do
local r=freeRow.get(0)
for j=1,10 do
_=PCbase[4*t+i][j]
r[j]=S[_]or 0
end
ins(P.field,1,r)
ins(P.visTime,1,freeRow.get(20))
end
P.fieldBeneath=P.fieldBeneath+120
P.curY=P.curY+4
P:freshgho()
return true return true
end end
end end
local function newPC(P) local function newPC(P)
local r=P.field;r=r[#r] local r=P.field
if r then if r[1]then
r=r[#r]
local c=0 local c=0
for i=1,10 do if r[i]>0 then c=c+1 end end for i=1,10 do if r[i]>0 then c=c+1 end end
if c<5 then if c<5 then P:lose()end
P:lose()
end
end end
if P.stat.piece%4==0 and #P.field==0 then if #P.field==0 then
P.modeData.event=P.modeData.event==0 and 1 or 0 local type=PCtype[P.stat.pc]or rnd(2,3)
local r=rnd(#PClist) local L=PClist[type][rnd(#PClist[1])]
local f=P.modeData.event==0 local symmetry=rnd()>.5
for i=1,4 do P.modeData.type=type
local b=PClist[r][i] P.modeData.symmetry=symmetry
if f then P:pushNext(L,symmetry)
if b<3 then b=3-b
elseif b<5 then b=7-b
end
end
P:getNext(b)
end
P.modeData.counter=P.stat.piece==0 and 20 or 0 P.modeData.counter=P.stat.piece==0 and 20 or 0
TASK.new(task_PC,P) TASK.new(task_PC,P)
local s=P.stat.pc*.5
local s=P.stat.pc*.25
if int(s)==s and s>0 then if int(s)==s and s>0 then
P.gameEnv.drop=pc_drop[s]or 10 P.gameEnv.drop=pc_drop[s]or 10
P.gameEnv.lock=pc_lock[s]or 20 P.gameEnv.lock=pc_lock[s]or 20
@@ -80,7 +62,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newPC(players[1]) newPC(players[1])
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
@@ -94,11 +76,11 @@ return{
getRank=function(P) getRank=function(P)
local L=P.stat.pc local L=P.stat.pc
return return
L>=50 and 5 or L>=100 and 5 or
L>=40 and 4 or L>=70 and 4 or
L>=30 and 3 or L>=40 and 3 or
L>=20 and 2 or L>=20 and 2 or
L>=10 and 1 or L>=10 and 1 or
L>=1 and 0 L>=2 and 0
end, end,
} }

View File

@@ -1,50 +1,41 @@
local rnd=math.random local rnd=math.random
local ins=table.insert
local PCbase=require("parts/PCbase") local PCbase=require("parts/PCbase")
local PClist=require("parts/PClist") local PClist=require("parts/PClist")
local PCtype={
[0]=1,1,1,1,2,
1,1,1,1,3,
1,1,1,2,
1,1,1,3,
1,1,2,
1,1,3,
1,2,
1,3,
2,
3,
}
local function task_PC(P) local function task_PC(P)
local _
P.modeData.counter=P.modeData.counter+1 P.modeData.counter=P.modeData.counter+1
if P.modeData.counter==21 then if P.modeData.counter==26 then
local t=P.stat.pc%2 local base=PCbase[P.modeData.type]
local S=P.gameEnv.skin P:pushLine(base[rnd(#base)],P.modeData.symmetry)
for i=1,4 do
local r=freeRow.get(0)
for j=1,10 do
_=PCbase[4*t+i][j]
r[j]=S[_]or 0
end
ins(P.field,1,r)
ins(P.visTime,1,freeRow.get(20))
end
P.fieldBeneath=P.fieldBeneath+120
P.curY=P.curY+4
P:freshgho()
return true return true
end end
end end
local function newPC(P) local function newPC(P)
local r=P.field;r=r[#r] local r=P.field
if r then if r[1]then
r=r[#r]
local c=0 local c=0
for i=1,10 do if r[i]>0 then c=c+1 end end for i=1,10 do if r[i]>0 then c=c+1 end end
if c<5 then if c<5 then P:lose()end
P:lose()
end
end end
if P.stat.piece%4==0 and #P.field==0 then if #P.field==0 then
P.modeData.event=P.modeData.event==0 and 1 or 0 local type=PCtype[P.stat.pc]or rnd(2,3)
local r=rnd(#PClist) local L=PClist[type][rnd(#PClist[1])]
local f=P.modeData.event==0 local symmetry=rnd()>.5
for i=1,4 do P.modeData.type=type
local b=PClist[r][i] P.modeData.symmetry=symmetry
if f then P:pushNext(L,symmetry)
if b<3 then b=3-b
elseif b<5 then b=7-b
end
end
P:getNext(b)
end
P.modeData.counter=P.stat.piece==0 and 20 or 0 P.modeData.counter=P.stat.piece==0 and 20 or 0
TASK.new(task_PC,P) TASK.new(task_PC,P)
end end
@@ -54,7 +45,7 @@ return{
env={ env={
next=4, next=4,
hold=false, hold=false,
drop=150,lock=150, drop=120,lock=180,
fall=20, fall=20,
sequence="none", sequence="none",
dropPiece=newPC, dropPiece=newPC,
@@ -63,7 +54,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newPC(players[1]) newPC(players[1])
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
@@ -77,11 +68,11 @@ return{
getRank=function(P) getRank=function(P)
local L=P.stat.pc local L=P.stat.pc
return return
L>=100 and 5 or L>=260 and 5 or
L>=60 and 4 or L>=126 and 4 or
L>=40 and 3 or L>=62 and 3 or
L>=25 and 2 or L>=26 and 2 or
L>=15 and 1 or L>=12 and 1 or
L>=1 and 0 L>=2 and 0
end, end,
} }

View File

@@ -19,9 +19,9 @@ return{
bg="game2",bgm="push", bg="game2",bgm="push",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,5000)) PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,5000))
garbageSpeed=1e99 game.garbageSpeed=1e99
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,

View File

@@ -19,9 +19,9 @@ return{
bg="game2",bgm="push", bg="game2",bgm="push",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,10000)) PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,10000))
garbageSpeed=1e99 game.garbageSpeed=1e99
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,
@@ -32,10 +32,10 @@ return{
if P.result=="WIN"then if P.result=="WIN"then
local T=P.stat.piece local T=P.stat.piece
return return
T<=30 and 5 or T<=23 and 5 or
T<=40 and 4 or T<=26 and 4 or
T<=55 and 3 or T<=40 and 3 or
T<=70 and 2 or T<=60 and 2 or
1 1
end end
end, end,

View File

@@ -19,9 +19,9 @@ return{
bg="game2",bgm="push", bg="game2",bgm="push",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newAIPlayer(2,965,360,.5,AITemplate("CC",10,2,true,12600)) PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,2,true,12600))
garbageSpeed=1e99 game.garbageSpeed=1e99
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,
@@ -32,10 +32,10 @@ return{
if P.result=="WIN"then if P.result=="WIN"then
local T=P.stat.piece local T=P.stat.piece
return return
T<=35 and 5 or T<=30 and 5 or
T<=45 and 4 or T<=40 and 4 or
T<=65 and 3 or T<=55 and 3 or
T<=85 and 2 or T<=75 and 2 or
1 1
end end
end, end,

View File

@@ -19,9 +19,9 @@ return{
bg="game2",bgm="push", bg="game2",bgm="push",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,16260)) PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,16260))
garbageSpeed=1e99 game.garbageSpeed=1e99
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,
@@ -32,10 +32,10 @@ return{
if P.result=="WIN"then if P.result=="WIN"then
local T=P.stat.piece local T=P.stat.piece
return return
T<=40 and 5 or T<=30 and 5 or
T<=50 and 4 or T<=40 and 4 or
T<=75 and 3 or T<=55 and 3 or
T<=100 and 2 or T<=75 and 2 or
1 1
end end
end, end,

View File

@@ -19,9 +19,9 @@ return{
bg="game2",bgm="push", bg="game2",bgm="push",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,26000)) PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,26000))
garbageSpeed=1e99 game.garbageSpeed=1e99
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,
@@ -32,10 +32,10 @@ return{
if P.result=="WIN"then if P.result=="WIN"then
local T=P.stat.piece local T=P.stat.piece
return return
T<=50 and 5 or T<=30 and 5 or
T<=60 and 4 or T<=40 and 4 or
T<=80 and 3 or T<=55 and 3 or
T<=100 and 2 or T<=75 and 2 or
1 1
end end
end, end,

View File

@@ -7,8 +7,8 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newAIPlayer(2,965,360,.5,AITemplate("9S",3)) PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",3))
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,
@@ -19,10 +19,10 @@ return{
if P.result=="WIN"then if P.result=="WIN"then
local T=P.stat.time local T=P.stat.time
return return
T<=15 and 5 or T<=20 and 5 or
T<=25 and 4 or T<=25 and 4 or
T<=40 and 3 or T<=35 and 3 or
T<=80 and 2 or T<=60 and 2 or
1 1
end end
end, end,

View File

@@ -7,8 +7,8 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newAIPlayer(2,965,360,.5,AITemplate("9S",5)) PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",5))
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,
@@ -19,10 +19,10 @@ return{
if P.result=="WIN"then if P.result=="WIN"then
local T=P.stat.time local T=P.stat.time
return return
T<=16 and 5 or T<=20 and 5 or
T<=28 and 4 or T<=25 and 4 or
T<=45 and 3 or T<=40 and 3 or
T<=90 and 2 or T<=62 and 2 or
1 1
end end
end, end,

View File

@@ -7,8 +7,8 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newAIPlayer(2,965,360,.5,AITemplate("9S",7)) PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",7))
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,
@@ -19,9 +19,9 @@ return{
if P.result=="WIN"then if P.result=="WIN"then
local T=P.stat.time local T=P.stat.time
return return
T<=17 and 5 or T<=20 and 5 or
T<=26 and 4 or T<=25 and 4 or
T<=45 and 3 or T<=35 and 3 or
T<=60 and 2 or T<=60 and 2 or
1 1
end end

View File

@@ -7,8 +7,8 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newAIPlayer(2,965,360,.5,AITemplate("CC",9,2,true,26000)) PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",9,2,true,26000))
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,
@@ -19,10 +19,10 @@ return{
if P.result=="WIN"then if P.result=="WIN"then
local T=P.stat.time local T=P.stat.time
return return
T<=18 and 5 or T<=20 and 5 or
T<=30 and 4 or T<=25 and 4 or
T<=50 and 3 or T<=35 and 3 or
T<=70 and 2 or T<=60 and 2 or
1 1
end end
end, end,

View File

@@ -7,8 +7,8 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,50000)) PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,50000))
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
end, end,
@@ -20,8 +20,8 @@ return{
local T=P.stat.time local T=P.stat.time
return return
T<=20 and 5 or T<=20 and 5 or
T<=30 and 4 or T<=25 and 4 or
T<=45 and 3 or T<=35 and 3 or
T<=60 and 2 or T<=60 and 2 or
1 1
end end

44
modes/sprintPenta.lua Normal file
View File

@@ -0,0 +1,44 @@
local gc=love.graphics
local rnd=math.random
return{
color=color.green,
env={
drop=60,lock=60,
sequence="bag",bag={8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25},
target=40,dropPiece=PLY.reach_winCheck,
bg="aura",bgm="race",
},
load=function()
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P)
local dx,dy=P.fieldOff.x,P.fieldOff.y
setFont(55)
local r=40-P.stat.row
if r<0 then r=0 end
mStr(r,-81,265)
if r<21 and r>0 then
gc.setLineWidth(4)
gc.setColor(1,r>10 and 0 or rnd(),.5)
gc.line(dx,600-30*r+dy,300+dx,600-30*r+dy)
end
end,
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return toTime(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local T=P.stat.row
if T<5 then
return
elseif T<40 then
return 0
end
T=P.stat.time
return
T<=76 and 5 or
T<=90 and 4 or
T<=150 and 3 or
T<=260 and 2 or
1
end,
}

View File

@@ -4,11 +4,11 @@ return{
color=color.cyan, color=color.cyan,
env={ env={
drop=60,lock=60, drop=60,lock=60,
target=10,dropPiece=player.reach_winCheck, target=10,dropPiece=PLY.reach_winCheck,
bg="strap",bgm="race", bg="strap",bgm="race",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P) mesDisp=function(P)
local dx,dy=P.fieldOff.x,P.fieldOff.y local dx,dy=P.fieldOff.x,P.fieldOff.y

View File

@@ -4,11 +4,11 @@ return{
color=color.orange, color=color.orange,
env={ env={
drop=60,lock=60, drop=60,lock=60,
target=100,dropPiece=player.reach_winCheck, target=100,dropPiece=PLY.reach_winCheck,
bg="strap",bgm="race", bg="strap",bgm="race",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P) mesDisp=function(P)
local dx,dy=P.fieldOff.x,P.fieldOff.y local dx,dy=P.fieldOff.x,P.fieldOff.y
@@ -33,7 +33,7 @@ return{
T<=90 and 4 or T<=90 and 4 or
T<=130 and 3 or T<=130 and 3 or
T<=200 and 2 or T<=200 and 2 or
T<=270 and 1 or T<=360 and 1 or
0 0
end, end,
} }

View File

@@ -4,11 +4,11 @@ return{
color=color.lightGrey, color=color.lightGrey,
env={ env={
drop=60,lock=60, drop=60,lock=60,
target=1000,dropPiece=player.reach_winCheck, target=1000,dropPiece=PLY.reach_winCheck,
bg="strap",bgm="push", bg="strap",bgm="push",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P) mesDisp=function(P)
local dx,dy=P.fieldOff.x,P.fieldOff.y local dx,dy=P.fieldOff.x,P.fieldOff.y
@@ -32,8 +32,8 @@ return{
T<=626 and 5 or T<=626 and 5 or
T<=1000 and 4 or T<=1000 and 4 or
T<=1400 and 3 or T<=1400 and 3 or
T<=2200 and 2 or T<=2260 and 2 or
T<=3000 and 1 or T<=3260 and 1 or
0 0
end, end,
} }

View File

@@ -4,11 +4,11 @@ return{
color=color.lightBlue, color=color.lightBlue,
env={ env={
drop=60,lock=60, drop=60,lock=60,
target=20,dropPiece=player.reach_winCheck, target=20,dropPiece=PLY.reach_winCheck,
bg="strap",bgm="race", bg="strap",bgm="race",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P) mesDisp=function(P)
local dx,dy=P.fieldOff.x,P.fieldOff.y local dx,dy=P.fieldOff.x,P.fieldOff.y
@@ -31,8 +31,8 @@ return{
return return
T<=13 and 5 or T<=13 and 5 or
T<=18 and 4 or T<=18 and 4 or
T<=45 and 3 or T<=32.6 and 3 or
T<=80 and 2 or T<=62.6 and 2 or
T<=126 and 1 or T<=126 and 1 or
0 0
end, end,

View File

@@ -4,11 +4,11 @@ return{
color=color.green, color=color.green,
env={ env={
drop=60,lock=60, drop=60,lock=60,
target=40,dropPiece=player.reach_winCheck, target=40,dropPiece=PLY.reach_winCheck,
bg="strap",bgm="race", bg="strap",bgm="race",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P) mesDisp=function(P)
local dx,dy=P.fieldOff.x,P.fieldOff.y local dx,dy=P.fieldOff.x,P.fieldOff.y
@@ -31,8 +31,8 @@ return{
return return
T<=26 and 5 or T<=26 and 5 or
T<=32.6 and 4 or T<=32.6 and 4 or
T<=40 and 3 or T<=52.6 and 3 or
T<=62 and 2 or T<=92.9 and 2 or
T<=183 and 1 or T<=183 and 1 or
0 0
end, end,

View File

@@ -4,11 +4,11 @@ return{
color=color.red, color=color.red,
env={ env={
drop=60,lock=60, drop=60,lock=60,
target=400,dropPiece=player.reach_winCheck, target=400,dropPiece=PLY.reach_winCheck,
bg="strap",bgm="push", bg="strap",bgm="push",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P) mesDisp=function(P)
local dx,dy=P.fieldOff.x,P.fieldOff.y local dx,dy=P.fieldOff.x,P.fieldOff.y
@@ -30,10 +30,10 @@ return{
local T=P.stat.time local T=P.stat.time
return return
T<=255 and 5 or T<=255 and 5 or
T<=330 and 4 or T<=326 and 4 or
T<=420 and 3 or T<=462 and 3 or
T<=626 and 2 or T<=626 and 2 or
T<=1000 and 1 or T<=1260 and 1 or
0 0
end, end,
} }

View File

@@ -20,7 +20,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(65) setFont(65)

View File

@@ -26,7 +26,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(65) setFont(65)

View File

@@ -21,7 +21,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(65) setFont(65)

View File

@@ -25,7 +25,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(65) setFont(65)

View File

@@ -27,7 +27,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(65) setFont(65)

View File

@@ -1,5 +1,5 @@
local format=string.format local format=string.format
local function tech_check_ultimate(P) local function tech_check_hard(P)
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
P:lose() P:lose()
end end
@@ -11,11 +11,11 @@ return{
drop=30,lock=60, drop=30,lock=60,
freshLimit=15, freshLimit=15,
target=200, target=200,
dropPiece=tech_check_ultimate, dropPiece=tech_check_hard,
bg="matrix",bgm="secret8th", bg="matrix",bgm="secret8th",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -15,7 +15,7 @@ return{
bg="matrix",bgm="secret8th", bg="matrix",bgm="secret8th",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -1,5 +1,5 @@
local format=string.format local format=string.format
local function tech_check_ultimate(P) local function tech_check_hard(P)
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
P:lose() P:lose()
end end
@@ -11,11 +11,11 @@ return{
_20G=true,lock=60, _20G=true,lock=60,
freshLimit=15, freshLimit=15,
target=200, target=200,
dropPiece=tech_check_ultimate, dropPiece=tech_check_hard,
bg="matrix",bgm="secret7th", bg="matrix",bgm="secret7th",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -1,6 +1,6 @@
local format=string.format local format=string.format
local function tech_check_hard(P) local function tech_check_easy(P)
if #P.clearedRow>0 and P.lastClear<10 then if #P.clearedRow>0 and P.b2b<40 then
P:lose() P:lose()
end end
end end
@@ -11,11 +11,11 @@ return{
_20G=true,lock=60, _20G=true,lock=60,
freshLimit=15, freshLimit=15,
target=200, target=200,
dropPiece=tech_check_hard, dropPiece=tech_check_easy,
bg="matrix",bgm="secret7th", bg="matrix",bgm="secret7th",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -1,5 +1,5 @@
local format=string.format local format=string.format
local function tech_check_ultimate(P) local function tech_check_hard(P)
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
P:lose() P:lose()
end end
@@ -11,11 +11,11 @@ return{
oncehold=false, oncehold=false,
drop=1e99,lock=1e99, drop=1e99,lock=1e99,
target=200, target=200,
dropPiece=tech_check_ultimate, dropPiece=tech_check_hard,
bg="matrix",bgm="newera", bg="matrix",bgm="newera",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -15,7 +15,7 @@ return{
bg="matrix",bgm="newera", bg="matrix",bgm="newera",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -1,5 +1,5 @@
local format=string.format local format=string.format
local function tech_check_ultimate(P) local function tech_check_hard(P)
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
P:lose() P:lose()
end end
@@ -13,12 +13,12 @@ return{
freshLimit=15, freshLimit=15,
target=200, target=200,
fineKill=true, fineKill=true,
dropPiece=tech_check_ultimate, dropPiece=tech_check_hard,
bg="flink",bgm="infinite", bg="flink",bgm="infinite",
}, },
slowMark=true, slowMark=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -1,9 +1,4 @@
local format=string.format local format=string.format
local function tech_check_hard(P)
if #P.clearedRow>0 and P.lastClear<10 then
P:lose()
end
end
return{ return{
color=color.lightYellow, color=color.lightYellow,
@@ -13,12 +8,11 @@ return{
freshLimit=15, freshLimit=15,
target=200, target=200,
fineKill=true, fineKill=true,
dropPiece=tech_check_hard,
bg="flink",bgm="infinite", bg="flink",bgm="infinite",
}, },
slowMark=true, slowMark=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(45) setFont(45)

View File

@@ -31,7 +31,7 @@ return{
powerUp={2,5,10,20}, powerUp={2,5,10,20},
stage={30,20,15,10,5}, stage={30,20,15,10,5},
} }
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local L={}for i=1,49 do L[i]=true end local L={}for i=1,49 do L[i]=true end
local t=system~="Windows"and 0 or 2 local t=system~="Windows"and 0 or 2
while t>0 do while t>0 do
@@ -41,17 +41,17 @@ return{
local n=2 local n=2
for i=1,4 do for j=1,6 do for i=1,4 do for j=1,6 do
if L[n]then if L[n]then
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5))) PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5)))
else else
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000)) PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000))
end end
n=n+1 n=n+1
end end end end
for i=9,12 do for j=1,6 do for i=9,12 do for j=1,6 do
if L[n]then if L[n]then
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(2,5))) PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(2,5)))
else else
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000)) PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000))
end end
n=n+1 n=n+1
end end end end

View File

@@ -31,7 +31,7 @@ return{
powerUp={2,5,10,20}, powerUp={2,5,10,20},
stage={30,20,15,10,5}, stage={30,20,15,10,5},
} }
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local L={}for i=1,49 do L[i]=true end local L={}for i=1,49 do L[i]=true end
local t=system~="Windows"and 0 or 4 local t=system~="Windows"and 0 or 4
while t>0 do while t>0 do
@@ -41,17 +41,17 @@ return{
local n=2 local n=2
for i=1,4 do for j=1,6 do for i=1,4 do for j=1,6 do
if L[n]then if L[n]then
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,7))) PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,7)))
else else
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000)) PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000))
end end
n=n+1 n=n+1
end end end end
for i=9,12 do for j=1,6 do for i=9,12 do for j=1,6 do
if L[n]then if L[n]then
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(4,7))) PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(4,7)))
else else
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000)) PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000))
end end
n=n+1 n=n+1
end end end end

View File

@@ -31,7 +31,7 @@ return{
powerUp={2,5,10,20}, powerUp={2,5,10,20},
stage={30,20,15,10,5}, stage={30,20,15,10,5},
} }
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local L={}for i=1,49 do L[i]=true end local L={}for i=1,49 do L[i]=true end
local t=system~="Windows"and 0 or 6 local t=system~="Windows"and 0 or 6
while t>0 do while t>0 do
@@ -41,17 +41,17 @@ return{
local n=2 local n=2
for i=1,4 do for j=1,6 do for i=1,4 do for j=1,6 do
if L[n]then if L[n]then
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(8,10))) PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(8,10)))
else else
newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000)) PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000))
end end
n=n+1 n=n+1
end end end end
for i=9,12 do for j=1,6 do for i=9,12 do for j=1,6 do
if L[n]then if L[n]then
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,10))) PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,10)))
else else
newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000)) PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000))
end end
n=n+1 n=n+1
end end end end

View File

@@ -31,7 +31,7 @@ return{
powerUp={2,6,14,30}, powerUp={2,6,14,30},
stage={75,50,35,20,10}, stage={75,50,35,20,10},
} }
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local L={}for i=1,100 do L[i]=true end local L={}for i=1,100 do L[i]=true end
local t=system~="Windows"and 0 or 4 local t=system~="Windows"and 0 or 4
while t>0 do while t>0 do
@@ -41,17 +41,17 @@ return{
local n=2 local n=2
for i=1,7 do for j=1,7 do for i=1,7 do for j=1,7 do
if L[n]then if L[n]then
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5))) PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5)))
else else
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000)) PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000))
end end
n=n+1 n=n+1
end end end end
for i=15,21 do for j=1,7 do for i=15,21 do for j=1,7 do
if L[n]then if L[n]then
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(2,5))) PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(2,5)))
else else
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000)) PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000))
end end
n=n+1 n=n+1
end end end end

View File

@@ -31,7 +31,7 @@ return{
powerUp={2,6,14,30}, powerUp={2,6,14,30},
stage={75,50,35,20,10}, stage={75,50,35,20,10},
} }
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local L={}for i=1,100 do L[i]=true end local L={}for i=1,100 do L[i]=true end
local t=system~="Windows"and 0 or 4 local t=system~="Windows"and 0 or 4
while t>0 do while t>0 do
@@ -41,17 +41,17 @@ return{
local n=2 local n=2
for i=1,7 do for j=1,7 do for i=1,7 do for j=1,7 do
if L[n]then if L[n]then
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,7))) PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,7)))
else else
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000)) PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000))
end end
n=n+1 n=n+1
end end end end
for i=15,21 do for j=1,7 do for i=15,21 do for j=1,7 do
if L[n]then if L[n]then
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,7))) PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,7)))
else else
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000)) PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000))
end end
n=n+1 n=n+1
end end end end

View File

@@ -31,7 +31,7 @@ return{
powerUp={2,6,14,30}, powerUp={2,6,14,30},
stage={75,50,35,20,10}, stage={75,50,35,20,10},
} }
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
local L={}for i=1,100 do L[i]=true end local L={}for i=1,100 do L[i]=true end
local t=system~="Windows"and 0 or 4 local t=system~="Windows"and 0 or 4
while t>0 do while t>0 do
@@ -41,17 +41,17 @@ return{
local n=2 local n=2
for i=1,7 do for j=1,7 do for i=1,7 do for j=1,7 do
if L[n]then if L[n]then
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(8,10))) PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(8,10)))
else else
newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000)) PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000))
end end
n=n+1 n=n+1
end end end end
for i=15,21 do for j=1,7 do for i=15,21 do for j=1,7 do
if L[n]then if L[n]then
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,10))) PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,10)))
else else
newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000)) PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000))
end end
n=n+1 n=n+1
end end end end

View File

@@ -21,7 +21,7 @@ return{
bg="matrix",bgm="reason", bg="matrix",bgm="reason",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(75) setFont(75)

View File

@@ -19,7 +19,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(75) setFont(75)

View File

@@ -19,7 +19,7 @@ return{
}, },
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(75) setFont(75)

View File

@@ -25,7 +25,7 @@ return{
slowMark=true, slowMark=true,
pauseLimit=true, pauseLimit=true,
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
gc.setLineWidth(2) gc.setLineWidth(2)

View File

@@ -3,11 +3,11 @@ return{
env={ env={
drop=120,lock=120, drop=120,lock=120,
oncehold=false,target=200, oncehold=false,target=200,
dropPiece=player.reach_winCheck, dropPiece=PLY.reach_winCheck,
bg="strap",bgm="infinite", bg="strap",bgm="infinite",
}, },
load=function() load=function()
newPlayer(1,340,15) PLY.newPlayer(1,340,15)
end, end,
mesDisp=function(P,dx,dy) mesDisp=function(P,dx,dy)
setFont(70) setFont(70)

106
paint.lua
View File

@@ -17,7 +17,7 @@ local modeRankColor={
color.purple, --Special color.purple, --Special
} }
local rankString={ local rankString={
"C","B","A","S","SS", "D","C","B","A","S",
} }
local miniTitle_rect={ local miniTitle_rect={
{2,0,5,1},{4,1,1,6}, {2,0,5,1},{4,1,1,6},
@@ -54,7 +54,7 @@ local function VirtualkeyPreview()
local c=sceneTemp.sel==i and .6 or 1 local c=sceneTemp.sel==i and .6 or 1
gc.setColor(c,1,c,setting.VKAlpha*.1) gc.setColor(c,1,c,setting.VKAlpha*.1)
gc.setLineWidth(B.r*.07) gc.setLineWidth(B.r*.07)
gc.circle("line",B.x,B.y,B.r) gc.circle("line",B.x,B.y,B.r,10)
if setting.VKIcon then gc.draw(VKIcon[i],B.x,B.y,nil,B.r*.025,nil,18,18)end if setting.VKIcon then gc.draw(VKIcon[i],B.x,B.y,nil,B.r*.025,nil,18,18)end
end end
end end
@@ -70,13 +70,13 @@ local function drawVirtualkey()
local B=V[i] local B=V[i]
gc.setColor(1,1,1,a) gc.setColor(1,1,1,a)
gc.setLineWidth(B.r*.07) gc.setLineWidth(B.r*.07)
gc.circle("line",B.x,B.y,B.r)--Button outline gc.circle("line",B.x,B.y,B.r,10)--Button outline
_=V[i].pressTime _=V[i].pressTime
gc.draw(VKIcon[i],B.x,B.y,nil,B.r*.026+_*.08,nil,18,18)--icon gc.draw(VKIcon[i],B.x,B.y,nil,B.r*.026+_*.08,nil,18,18)--icon
if _>0 then if _>0 then
gc.setColor(1,1,1,a*_*.08) gc.setColor(1,1,1,a*_*.08)
gc.circle("fill",B.x,B.y,B.r*.94)--Glow gc.circle("fill",B.x,B.y,B.r*.94,10)--Glow
gc.circle("line",B.x,B.y,B.r*(1.4-_*.04))--Ripple gc.circle("line",B.x,B.y,B.r*(1.4-_*.04),10)--Ripple
end end
end end
end end
@@ -86,12 +86,12 @@ local function drawVirtualkey()
local B=V[i] local B=V[i]
gc.setColor(1,1,1,a) gc.setColor(1,1,1,a)
gc.setLineWidth(B.r*.07) gc.setLineWidth(B.r*.07)
gc.circle("line",B.x,B.y,B.r) gc.circle("line",B.x,B.y,B.r,10)
_=V[i].pressTime _=V[i].pressTime
if _>0 then if _>0 then
gc.setColor(1,1,1,a*_*.08) gc.setColor(1,1,1,a*_*.08)
gc.circle("fill",B.x,B.y,B.r*.94) gc.circle("fill",B.x,B.y,B.r*.94,10)
gc.circle("line",B.x,B.y,B.r*(1.4-_*.04)) gc.circle("line",B.x,B.y,B.r*(1.4-_*.04),10)
end end
end end
end end
@@ -202,11 +202,9 @@ function Pnt.mode()
end end
_=drawableText[rankString[modeRanks[M.id]]] _=drawableText[rankString[modeRanks[M.id]]]
if _ then if _ then
local dx,dy=6.26*sin(Timer()*1.26+M.id),12.6*sin(Timer()+M.id) local dx,dy=6.26*sin(Timer()*0.626+M.id),6.6*sin(Timer()+M.id)
gc.setColor(0,0,0,.5) gc.setColor(0,0,0,.26)
mDraw(_,M.x+dx*1.5,M.y+dy*1.5) mDraw(_,M.x+dx*1.5,M.y+dy*1.5)
gc.setColor(1,1,1,.8)
mDraw(_,M.x+dx,M.y+dy)
end end
--[[ --[[
if M.icon then if M.icon then
@@ -278,8 +276,8 @@ function Pnt.music()
gc.draw(drawableText.musicRoom,22,23) gc.draw(drawableText.musicRoom,22,23)
gc.draw(drawableText.nowPlaying,490,390) gc.draw(drawableText.nowPlaying,490,390)
setFont(30) setFont(30)
for i=1,#musicID do for i=1,BGM.len do
gc.print(musicID[i],50,90+30*i) gc.print(BGM.list[i],50,90+30*i)
end end
gc.draw(IMG.titleImage,640,310,nil,1.5,nil,206,35) gc.draw(IMG.titleImage,640,310,nil,1.5,nil,206,35)
if BGM.nowPlay then if BGM.nowPlay then
@@ -338,7 +336,7 @@ function Pnt.draw()
local pen=sceneTemp.pen local pen=sceneTemp.pen
if pen>0 then if pen>0 then
gc.setLineWidth(13) gc.setLineWidth(13)
gc.setColor(skin.libColor[pen]) gc.setColor(SKIN.libColor[pen])
gc.rectangle("line",565,460,70,70) gc.rectangle("line",565,460,70,70)
elseif pen==-1 then elseif pen==-1 then
gc.setLineWidth(5) gc.setLineWidth(5)
@@ -354,7 +352,7 @@ function Pnt.draw()
local _ local _
for i=1,7 do for i=1,7 do
_=setting.skin[i] _=setting.skin[i]
gc.setColor(skin.libColor[_]) gc.setColor(SKIN.libColor[_])
mStr(text.block[i],500+65*_,65) mStr(text.block[i],500+65*_,65)
end end
end end
@@ -416,13 +414,20 @@ function Pnt.play()
end end
end end
end end
gc.push("transform")
gc.origin()
if restartCount>0 then if restartCount>0 then
gc.setColor(0,0,0,restartCount*.05) gc.setColor(0,0,0,restartCount*.05)
gc.push("transform") gc.rectangle("fill",0,0,scr.w*scr.dpi,scr.h*scr.dpi)
gc.origin()
gc.rectangle("fill",0,0,scr.w,scr.h)
gc.pop()
end end
if game.warnLVL>0 then
gc.setColor(0,0,0,0)
SHADER.warning:send("level",game.warnLVL)
gc.setShader(SHADER.warning)
gc.rectangle("fill",0,0,scr.w,scr.h)
gc.setShader()
end
gc.pop()
end end
local hexList={1,0,.5,1.732*.5,-.5,1.732*.5}for i=1,6 do hexList[i]=hexList[i]*150 end local hexList={1,0,.5,1.732*.5,-.5,1.732*.5}for i=1,6 do hexList[i]=hexList[i]*150 end
local textPos={90,131,-90,131,-200,-25,-90,-181,90,-181,200,-25} local textPos={90,131,-90,131,-200,-25,-90,-181,90,-181,200,-25}
@@ -431,21 +436,21 @@ local dataPos={90,143,-90,143,-200,-13,-90,-169,90,-169,200,-13}
function Pnt.pause() function Pnt.pause()
local S=sceneTemp local S=sceneTemp
local T=S.timer*.02 local T=S.timer*.02
if T<1 or gameResult then Pnt.play()end if T<1 or game.result then Pnt.play()end
--Dark BG --Dark BG
local _=T local _=T
if gameResult then _=_*.6 end if game.result then _=_*.7 end
gc.setColor(.15,.15,.15,_) gc.setColor(.15,.15,.15,_)
gc.push("transform") gc.push("transform")
gc.origin() gc.origin()
gc.rectangle("fill",0,0,scr.w,scr.h) gc.rectangle("fill",0,0,scr.w*scr.dpi,scr.h*scr.dpi)
gc.pop() gc.pop()
--Pause Info --Pause Info
setFont(25) setFont(25)
if pauseCount>0 then if game.pauseCount>0 then
gc.setColor(1,.4,.4,T) gc.setColor(1,.4,.4,T)
gc.print(text.pauseCount..":["..pauseCount.."] "..format("%.2f",pauseTime).."s",70,100) gc.print(text.pauseCount..":["..game.pauseCount.."] "..format("%.2f",game.pauseTime).."s",70,100)
end end
gc.setColor(1,1,1,T) gc.setColor(1,1,1,T)
@@ -457,7 +462,7 @@ function Pnt.pause()
--Result Text --Result Text
setFont(35) setFont(35)
mText(gameResult and drawableText[gameResult]or drawableText.pause,640,50-10*(5-sceneTemp.timer*.1)^1.5) mText(game.result and drawableText[game.result]or drawableText.pause,640,50-10*(5-sceneTemp.timer*.1)^1.5)
--Infos --Infos
if frame>180 then if frame>180 then
@@ -515,9 +520,9 @@ function Pnt.setting_game()
mText(drawableText.setting_game,640,15) mText(drawableText.setting_game,640,15)
gc.draw(blockSkin[int(Timer()*2)%11+1],720,540,Timer()%6.28319,2,nil,15,15) gc.draw(blockSkin[int(Timer()*2)%11+1],720,540,Timer()%6.28319,2,nil,15,15)
end end
function Pnt.setting_graphic() function Pnt.setting_video()
gc.setColor(1,1,1) gc.setColor(1,1,1)
mText(drawableText.setting_graphic,640,15) mText(drawableText.setting_video,640,15)
end end
function Pnt.setting_sound() function Pnt.setting_sound()
gc.setColor(1,1,1,.8) gc.setColor(1,1,1,.8)
@@ -598,16 +603,16 @@ function Pnt.setting_key()
gc.setColor(1,1,1) gc.setColor(1,1,1)
setFont(26) setFont(26)
local board=s.board local b1,b2=keyMap[s.board],keyMap[s.board+2]
for N=1,20 do for N=1,20 do
if N<11 then if N<11 then
gc.printf(text.acts[N],47,45*N+22,180,"right") gc.printf(text.acts[N],47,45*N+22,180,"right")
mStr(keyMap[board][N],340,45*N+22) mStr(b1[N],340,45*N+22)
mStr(keyMap[board+8][N],540,45*N+22) mStr(b2[N],540,45*N+22)
else else
gc.printf(text.acts[N],647,45*N-428,180,"right") gc.printf(text.acts[N],647,45*N-428,180,"right")
mStr(keyMap[board][N],940,45*N-428) mStr(b1[N],940,45*N-428)
mStr(keyMap[board+8][N],1040,45*N-428) mStr(b2[N],1040,45*N-428)
end end
end end
gc.setLineWidth(2) gc.setLineWidth(2)
@@ -618,9 +623,7 @@ function Pnt.setting_key()
gc.line(40,y,1240,y) gc.line(40,y,1240,y)
end end
setFont(35) setFont(35)
gc.print("Player:",170,590) gc.print(text.page..s.board,280,590)
gc.print(int(board*.5+.5),300,590)
gc.print(board.."/8",580,590)
gc.draw(drawableText.ctrlSetHelp,50,650) gc.draw(drawableText.ctrlSetHelp,50,650)
end end
function Pnt.setting_skin() function Pnt.setting_skin()
@@ -669,11 +672,11 @@ function Pnt.help()
setFont(20) setFont(20)
gc.setColor(1,1,1) gc.setColor(1,1,1)
for i=1,#text.help do for i=1,#text.help do
gc.printf(text.help[i],150,30*i-10,1000,"center") gc.printf(text.help[i],150,35*i+40,1000,"center")
end end
setFont(19) setFont(19)
gc.print(text.used,30,330) gc.print(text.used,30,330)
gc.draw(IMG.titleImage,280,610,.1,1+.05*sin(Timer()*2),nil,206,35) gc.draw(IMG.titleImage,280,610,.1,1+.05*sin(Timer()*2.6),nil,206,35)
gc.setLineWidth(3) gc.setLineWidth(3)
gc.rectangle("line",18,18,263,263) gc.rectangle("line",18,18,263,263)
gc.rectangle("line",1012,18,250,250) gc.rectangle("line",1012,18,250,250)
@@ -681,15 +684,30 @@ function Pnt.help()
gc.draw(IMG.pay2,1014,20) gc.draw(IMG.pay2,1014,20)
setFont(20) setFont(20)
mStr(text.group,640,490) mStr(text.group,640,490)
gc.setColor(1,1,1,sin(Timer()*10)*.4+.6) gc.setColor(1,1,1,sin(Timer()*20)*.3+.6)
setFont(30) setFont(30)
gc.print(text.support,150,283+20,sin(Timer()*2.6)*.02,nil,nil,115,20) mStr(text.support,150+sin(Timer()*4)*20,283)
gc.print(text.support,1138,270+20,sin(Timer()*2.83)*.02,nil,nil,115,20) mStr(text.support,1138-sin(Timer()*4)*20,270)
end
function Pnt.staff()
local L=text.staff
local t=sceneTemp.time
if t>0 then
setFont(40)
for i=1,#L do
mStr(L[i],640,800+80*i-t*40)
end
mDraw(IMG.coloredTitleImage,640,800-t*40,nil,2)
mDraw(IMG.coloredTitleImage,640,2160-t*40,nil,2)
else
setFont(60)
mStr("Don't tell this to anyone.",640,-100-t*40)
end
end end
function Pnt.stat() function Pnt.stat()
local chart=sceneTemp.chart local chart=sceneTemp.chart
setFont(24) setFont(24)
local _,__=skin.libColor,setting.skin local _,__=SKIN.libColor,setting.skin
local A,B=chart.A1,chart.A2 local A,B=chart.A1,chart.A2
for x=1,7 do for x=1,7 do
gc.setColor(_[__[x]]) gc.setColor(_[__[x]])
@@ -737,8 +755,6 @@ function Pnt.history()
gc.rectangle("line",30,45,1000,632) gc.rectangle("line",30,45,1000,632)
setFont(20) setFont(20)
local _=sceneTemp local _=sceneTemp
for i=0,min(22,#_[1]-_[2])do gc.print(_[1][_[2]],40,50)
gc.print(_[1][_[2]+i],40,50+27*(i))
end
end end
return Pnt return Pnt

View File

@@ -1,10 +1,68 @@
return{ return{
{3,3,3,0,0,0,0,0,2,2}, {
{3,6,6,0,0,0,0,2,2,5}, {
{4,6,6,0,0,0,1,1,5,5}, {4,4,4,3,3,3,7,0,0,0},
{4,4,4,0,0,0,0,1,1,5}, {4,1,6,6,2,3,7,0,0,0},
{1,1,0,0,0,0,0,4,4,4}, {1,1,6,6,2,2,7,0,0,0},
{5,1,1,0,0,0,0,6,6,4}, {1,7,7,7,7,2,7,0,0,0},
{5,5,2,2,0,0,0,6,6,3}, },
{5,2,2,0,0,0,0,3,3,3}, {
{4,4,4,3,3,3,0,0,0,7},
{4,1,6,6,2,3,0,0,0,7},
{1,1,6,6,2,2,0,0,0,7},
{1,7,7,7,7,2,0,0,0,7},
},
{
{2,7,7,7,7,1,7,0,0,0},
{2,2,6,6,1,1,7,0,0,0},
{3,2,6,6,1,4,7,0,0,0},
{3,3,3,4,4,4,7,0,0,0},
},
{
{2,7,7,7,7,1,0,0,0,7},
{2,2,6,6,1,1,0,0,0,7},
{3,2,6,6,1,4,0,0,0,7},
{3,3,3,4,4,4,0,0,0,7},
},
},--3*4 shape
{
{
{1,1,0,0,0,0,0,3,3,3},
{5,1,1,0,0,0,0,6,6,3},
{5,5,2,2,0,0,0,6,6,4},
{5,2,2,0,0,0,0,4,4,4},
},
{
{1,1,0,0,0,0,0,4,4,4},
{5,1,1,0,0,0,0,4,6,6},
{5,5,2,2,0,0,0,3,6,6},
{5,2,2,0,0,0,0,3,3,3},
},
{
{3,3,3,1,1,0,0,0,0,0},
{6,6,3,5,1,1,0,0,0,0},
{6,6,4,5,5,2,2,0,0,0},
{4,4,4,5,2,2,0,0,0,0},
},
{
{4,4,4,1,1,0,0,0,0,0},
{4,6,6,5,1,1,0,0,0,0},
{3,6,6,5,5,2,2,0,0,0},
{3,3,3,5,2,2,0,0,0,0},
},
},--7 piece opener(right>)(without i)
{
{
{4,4,4,3,3,3,0,0,0,0},
{4,1,6,6,2,3,0,0,0,0},
{1,1,6,6,2,2,0,0,0,0},
{1,7,7,7,7,2,0,0,0,0},
},
{
{2,7,7,7,7,1,0,0,0,0},
{2,2,6,6,1,1,0,0,0,0},
{3,2,6,6,1,4,0,0,0,0},
{3,3,3,4,4,4,0,0,0,0},
},
},--6 piece opener
} }

View File

@@ -1,11 +1,77 @@
return{ return{
{7,7,4,5},{7,7,6,4},{7,7,2,4},{7,7,1,3},{7,7,5,6},{7,7,5,2},{7,7,5,4},{7,7,5,3}, {
{7,4,1,2},{7,3,5,7},{7,5,4,3},{7,5,1,2},{7,1,4,2},{7,4,2,5},{7,6,4,5},{7,5,4,2}, {1,3,3},{1,3,4},{1,5,3},{3,1,3},{3,1,4},{3,2,4},{3,3,2},{3,3,5},{3,3,6},{3,3,7},
{7,5,6,4},{7,5,3,6},{7,2,5,6},{7,2,6,4},{7,2,1,3},{7,5,2,7},{7,5,7,2},{7,5,2,3}, {3,4,1},{3,4,5},{3,4,6},{3,5,3},{3,5,4},{3,5,5},{3,6,3},{3,6,4},{3,7,3},{3,7,4},
{7,5,3,2},{7,6,5,4},{7,3,1,5},{7,3,2,5},{7,4,1,5},{7,4,5,2},{7,7,3,6},{7,3,7,6}, {5,3,4},{5,3,5},{5,5,1},{5,5,3},{5,7,3},{6,3,3},{6,3,4},{6,6,7},{6,7,6},{7,3,3},
{7,3,6,2},{7,3,7,1},{7,6,4,2},{3,2,7,6},{3,2,6,7},{7,7,4,5},{7,5,3,4},{7,3,6,5}, {7,3,4},{7,5,3},{7,6,6},{7,7,7},
{7,3,2,5},{7,4,6,5},{7,5,2,3},{7,3,5,7},{7,3,2,5},{7,3,5,1},{7,5,2,3},{3,6,2,5}, },--3*4 shape
{3,1,2,5},{3,1,1,5},{3,1,5,2},{3,1,5,1},{3,5,1,2},{4,5,3,2},{4,2,6,5},{6,5,3,2}, {
{1,4,2,5},{1,5,3,6},{5,2,6,3},{5,2,1,3},{5,2,7,4},{2,4,1,5},{2,4,5,1},{2,1,4,5}, {5,3,4,4},{5,3,7,7},{5,7,4,4},{4,2,4,4},{3,5,4,4},{3,4,5,4},{3,3,7,4},{7,5,4,4},{1,5,1,1},{1,5,5,5},
{2,5,4,3},{2,5,6,7},{7,5,4,2},{4,5,3,5}, {1,5,7,4},{1,2,4,5},{1,4,5,5},{1,4,5,2},{1,4,2,5},{1,4,4,4},{5,1,4,5},{5,5,4,1},{5,5,4,2},{5,5,4,4},
{5,4,5,4},{5,4,4,5},{5,4,4,3},{5,7,4,6},{5,7,4,3},{2,5,4,4},{6,4,4,4},{6,7,4,6},{4,1,2,5},{4,1,4,4},
{4,5,4,5},{4,5,7,7},{4,6,4,4},{4,4,6,4},{4,4,3,5},{4,4,3,6},{4,3,4,5},{4,3,4,6},{4,7,3,4},{4,7,7,5},
{3,1,4,4},{3,1,4,3},{3,1,3,4},{3,5,5,4},{3,5,4,5},{3,5,7,7},{3,2,5,2},{3,2,4,4},{3,6,4,4},{3,6,3,3},
{3,4,1,3},{3,4,4,5},{3,4,4,6},{3,4,3,7},{3,3,6,3},{3,7,5,7},{3,7,4,3},{3,7,3,4},{7,5,4,6},{7,5,4,3},
{7,5,3,4},{7,5,7,1},{7,6,4,6},{7,4,1,5},{7,4,5,6},{7,4,3,4},{7,4,7,5},{7,3,1,5},{7,3,5,7},{7,3,4,4},
{7,3,3,4},{7,3,7,5},{7,7,4,5},{7,7,7,4},{1,1,5,2},{1,1,7,4},{1,5,1,2},{1,5,1,3},{1,5,5,2},{1,5,2,1},
{1,5,2,3},{1,5,6,3},{1,5,6,7},{1,5,4,1},{1,5,4,5},{1,5,4,2},{1,5,4,3},{1,5,4,7},{1,5,3,1},{1,5,3,4},
{1,5,7,2},{1,5,7,6},{1,5,7,7},{1,2,5,1},{1,2,5,4},{1,2,7,4},{1,4,1,5},{1,4,5,1},{1,4,5,4},{1,4,6,5},
{1,4,4,3},{1,4,3,3},{1,3,1,2},{1,3,5,2},{1,3,4,4},{1,3,4,3},{1,3,3,4},{1,7,1,4},{1,7,5,6},{1,7,5,4},
{1,7,5,3},{1,7,5,7},{1,7,2,3},{1,7,6,4},{1,7,4,1},{1,7,4,5},{1,7,4,7},{1,7,3,1},{1,7,7,4},{5,1,5,5},
{5,1,5,2},{5,1,5,4},{5,1,2,3},{5,1,6,3},{5,1,4,1},{5,1,4,2},{5,1,4,7},{5,1,7,2},{5,1,7,4},{5,5,1,5},
{5,5,1,2},{5,5,1,4},{5,5,5,1},{5,5,5,2},{5,5,5,4},{5,5,5,7},{5,5,2,1},{5,5,2,5},{5,5,6,7},{5,5,4,5},
{5,5,4,3},{5,5,3,1},{5,5,3,4},{5,5,7,5},{5,5,7,6},{5,2,1,3},{5,2,5,4},{5,2,4,5},{5,2,3,1},{5,2,3,6},
{5,2,7,1},{5,6,1,3},{5,6,5,7},{5,6,6,1},{5,4,1,5},{5,4,1,7},{5,4,5,1},{5,4,5,5},{5,4,5,2},{5,4,5,3},
{5,4,2,5},{5,4,4,1},{5,4,4,4},{5,4,3,1},{5,4,3,5},{5,4,3,4},{5,4,7,1},{5,3,5,4},{5,3,5,3},{5,3,2,2},
{5,3,6,6},{5,3,4,1},{5,3,4,5},{5,3,4,3},{5,3,3,1},{5,3,3,4},{5,3,3,3},{5,7,1,2},{5,7,1,4},{5,7,1,3},
{5,7,5,5},{5,7,5,7},{5,7,2,1},{5,7,6,4},{5,7,6,7},{5,7,4,1},{5,7,4,2},{5,7,4,7},{5,7,3,1},{5,7,3,2},
{5,7,3,6},{5,7,3,4},{5,7,3,7},{5,7,7,1},{5,7,7,6},{5,7,7,4},{5,7,7,3},{2,1,5,1},{2,1,4,5},{2,1,7,4},
{2,5,1,1},{2,5,4,5},{2,5,3,6},{2,4,1,5},{2,4,4,4},{2,4,4,3},{2,3,5,6},{2,7,1,4},{2,7,5,5},{2,7,4,1},
{2,7,3,7},{2,7,7,3},{6,5,6,1},{6,5,3,1},{6,6,5,1},{6,6,4,5},{6,6,7,4},{6,4,6,5},{6,4,7,5},{6,3,4,3},
{6,3,3,4},{6,7,6,4},{6,7,4,1},{6,7,4,5},{6,7,4,7},{6,7,7,4},{4,1,1,5},{4,1,5,1},{4,1,5,5},{4,1,5,2},
{4,1,5,7},{4,1,6,5},{4,1,4,3},{4,1,3,4},{4,1,3,3},{4,1,7,5},{4,5,5,4},{4,5,4,1},{4,5,4,4},{4,5,4,3},
{4,5,3,1},{4,5,3,5},{4,2,1,5},{4,2,4,3},{4,2,3,4},{4,6,6,5},{4,6,4,3},{4,6,3,4},{4,4,1,4},{4,4,1,3},
{4,4,5,1},{4,4,5,4},{4,4,5,3},{4,4,2,4},{4,4,4,1},{4,4,4,5},{4,4,4,6},{4,4,7,4},{4,4,7,3},{4,3,6,4},
{4,3,4,7},{4,3,3,5},{4,3,7,4},{4,7,1,5},{4,7,5,6},{4,7,5,7},{4,7,2,1},{4,7,2,5},{4,7,6,5},{4,7,4,4},
{4,7,4,3},{3,1,1,2},{3,1,5,1},{3,1,5,2},{3,1,2,1},{3,1,6,5},{3,1,6,7},{3,1,7,6},{3,5,1,2},{3,5,5,1},
{3,5,5,6},{3,5,5,3},{3,5,2,1},{3,5,2,2},{3,5,6,5},{3,5,6,6},{3,5,4,1},{3,5,4,3},{3,5,3,1},{3,5,3,5},
{3,5,3,4},{3,5,3,3},{3,2,1,5},{3,2,5,1},{3,2,2,5},{3,6,1,5},{3,6,1,7},{3,6,5,5},{3,6,5,6},{3,6,6,5},
{3,6,4,3},{3,6,3,4},{3,4,5,3},{3,4,2,4},{3,4,6,4},{3,4,6,3},{3,4,3,1},{3,4,3,5},{3,4,3,2},{3,4,3,6},
{3,4,7,3},{3,3,1,4},{3,3,5,1},{3,3,5,4},{3,3,5,3},{3,3,6,4},{3,3,4,1},{3,3,4,5},{3,3,4,2},{3,3,4,6},
{3,3,4,7},{3,3,3,1},{3,3,3,5},{3,3,3,6},{3,7,1,5},{3,7,5,1},{3,7,5,2},{3,7,2,5},{3,7,6,5},{3,7,7,5},
{7,1,1,4},{7,1,5,6},{7,1,5,4},{7,1,5,3},{7,1,5,7},{7,1,2,3},{7,1,6,4},{7,1,4,1},{7,1,4,5},{7,1,4,7},
{7,1,3,1},{7,1,7,4},{7,5,1,2},{7,5,1,6},{7,5,1,4},{7,5,1,3},{7,5,1,7},{7,5,5,5},{7,5,5,7},{7,5,2,1},
{7,5,6,4},{7,5,6,7},{7,5,4,1},{7,5,4,2},{7,5,4,7},{7,5,3,1},{7,5,3,2},{7,5,3,6},{7,5,3,7},{7,5,7,6},
{7,5,7,4},{7,5,7,3},{7,2,1,4},{7,2,1,3},{7,2,5,5},{7,2,4,1},{7,2,3,7},{7,2,7,3},{7,6,1,4},{7,6,5,4},
{7,6,6,4},{7,6,4,1},{7,6,4,5},{7,6,4,7},{7,6,7,4},{7,4,5,1},{7,4,5,2},{7,4,5,7},{7,4,2,1},{7,4,2,5},
{7,4,6,5},{7,4,4,4},{7,4,4,3},{7,3,5,1},{7,3,5,2},{7,3,5,6},{7,3,5,4},{7,3,2,5},{7,3,2,7},{7,3,6,1},
{7,3,6,5},{7,3,4,3},{7,3,7,2},{7,3,7,6},{7,7,1,4},{7,7,5,1},{7,7,5,6},{7,7,5,4},{7,7,5,3},{7,7,2,3},
{7,7,6,4},{7,7,6,3},{7,7,4,7},{7,7,3,6},
},--7 piece opener (right>)
{
{1,1,3,4},{1,1,4,3},{1,2,5,3},{1,2,5,4},{1,3,4,7},{1,3,5,5},{1,3,7,3},{1,3,7,4},{1,4,1,4},{1,4,4,6},
{1,5,2,3},{1,5,3,2},{1,5,3,5},{1,5,4,7},{1,5,5,2},{1,5,5,4},{1,5,5,5},{1,5,7,3},{1,5,7,4},{1,6,3,3},
{1,6,5,3},{1,7,3,3},{1,7,3,4},{1,7,5,3},{1,7,5,4},{3,1,3,7},{3,1,4,7},{3,1,5,5},{3,1,6,3},{3,1,7,3},
{3,1,7,4},{3,2,2,3},{3,2,3,2},{3,2,3,6},{3,2,4,5},{3,2,4,7},{3,2,5,5},{3,2,6,3},{3,2,6,4},{3,2,7,4},
{3,3,1,5},{3,3,2,6},{3,3,2,7},{3,3,3,3},{3,3,3,4},{3,3,4,3},{3,3,4,4},{3,3,5,3},{3,3,5,4},{3,3,6,1},
{3,3,6,6},{3,3,6,7},{3,3,7,2},{3,3,7,5},{3,3,7,6},{3,3,7,7},{3,4,1,2},{3,4,1,5},{3,4,1,7},{3,4,2,1},
{3,4,2,5},{3,4,2,7},{3,4,3,3},{3,4,3,4},{3,4,4,3},{3,4,4,4},{3,4,5,3},{3,4,5,4},{3,4,5,7},{3,4,6,1},
{3,4,6,2},{3,4,6,7},{3,4,7,1},{3,4,7,2},{3,4,7,5},{3,4,7,6},{3,5,1,2},{3,5,2,3},{3,5,2,5},{3,5,3,2},
{3,5,3,3},{3,5,3,4},{3,5,4,3},{3,5,4,6},{3,5,4,7},{3,5,5,5},{3,5,5,7},{3,5,6,4},{3,5,7,3},{3,5,7,4},
{3,5,7,5},{3,6,1,3},{3,6,2,3},{3,6,2,4},{3,6,3,1},{3,6,3,5},{3,6,3,6},{3,6,3,7},{3,6,4,2},{3,6,4,7},
{3,6,5,4},{3,6,6,3},{3,6,6,4},{3,6,7,3},{3,6,7,4},{3,7,1,3},{3,7,1,4},{3,7,2,4},{3,7,3,2},{3,7,3,5},
{3,7,3,6},{3,7,3,7},{3,7,4,1},{3,7,4,2},{3,7,4,5},{3,7,4,6},{3,7,5,3},{3,7,5,4},{3,7,5,5},{3,7,6,3},
{3,7,6,4},{3,7,7,3},{3,7,7,4},{5,1,2,3},{5,1,3,2},{5,1,3,4},{5,1,4,1},{5,1,4,7},{5,1,5,4},{5,1,5,5},
{5,1,7,4},{5,3,1,2},{5,3,1,4},{5,3,2,5},{5,3,3,3},{5,3,3,4},{5,3,3,6},{5,3,4,3},{5,3,5,2},{5,3,5,4},
{5,3,5,5},{5,3,5,7},{5,3,7,4},{5,3,7,5},{5,5,1,2},{5,5,1,4},{5,5,3,2},{5,5,3,3},{5,5,3,4},{5,5,3,5},
{5,5,3,7},{5,5,5,1},{5,5,5,5},{5,5,6,3},{5,5,6,7},{5,5,7,1},{5,5,7,3},{5,5,7,6},{5,6,3,5},{5,6,3,6},
{5,6,3,7},{5,6,5,3},{5,6,6,3},{5,6,7,3},{5,7,1,4},{5,7,3,4},{5,7,3,5},{5,7,5,1},{5,7,5,3},{5,7,5,6},
{5,7,6,3},{5,7,7,3},{6,1,3,3},{6,3,3,5},{6,3,3,6},{6,3,3,7},{6,3,4,7},{6,3,6,3},{6,3,6,4},{6,3,7,3},
{6,3,7,4},{6,5,3,5},{6,5,3,6},{6,5,3,7},{6,5,6,3},{6,5,7,3},{6,6,3,3},{6,6,3,4},{6,6,5,3},{6,6,6,6},
{6,6,7,7},{6,7,3,3},{6,7,3,4},{6,7,5,3},{6,7,6,7},{6,7,7,6},{7,1,3,3},{7,1,3,4},{7,1,5,3},{7,1,5,4},
{7,3,1,3},{7,3,1,4},{7,3,2,4},{7,3,3,2},{7,3,3,5},{7,3,3,6},{7,3,3,7},{7,3,4,1},{7,3,4,2},{7,3,4,5},
{7,3,4,6},{7,3,5,3},{7,3,5,4},{7,3,5,5},{7,3,6,3},{7,3,6,4},{7,3,7,3},{7,3,7,4},{7,5,1,4},{7,5,3,4},
{7,5,3,5},{7,5,5,1},{7,5,5,3},{7,5,5,6},{7,5,6,3},{7,5,7,3},{7,6,3,3},{7,6,3,4},{7,6,5,3},{7,6,6,7},
{7,6,7,6},{7,7,3,3},{7,7,3,4},{7,7,5,3},{7,7,6,6},{7,7,7,7},
},--6 piece opener
} }

View File

@@ -19,65 +19,65 @@ local blockPos={4,4,4,4,4,5,4}
local scs={{1,2},{1,2},{1,2},{1,2},{1,2},{1.5,1.5},{0.5,2.5}} local scs={{1,2},{1,2},{1,2},{1,2},{1,2},{1.5,1.5},{0.5,2.5}}
-------------------------------------------------Cold clear -------------------------------------------------Cold clear
local CCblockID={4,3,5,6,1,2,0} local CCblockID={4,3,5,6,1,2,0}
if system~="Windows"then goto SKIP end if system=="Windows"then
require("CCloader") require("CCloader")
BOT={ BOT={
getConf= cc.get_default_config ,--()options,weights getConf= cc.get_default_config ,--()options,weights
--setConf= cc.set_options ,--(options,hold,20g,bag7) --setConf= cc.set_options ,--(options,hold,20g,bag7)
new= cc.launch_async ,--(options,weights)bot new= cc.launch_async ,--(options,weights)bot
addNext= cc.add_next_piece_async ,--(bot,piece) addNext= cc.add_next_piece_async ,--(bot,piece)
update= cc.reset_async ,--(bot,field,b2b,combo) update= cc.reset_async ,--(bot,field,b2b,combo)
think= cc.request_next_move ,--(bot) think= cc.request_next_move ,--(bot)
getMove= cc.poll_next_move ,--(bot)success,hold,move getMove= cc.poll_next_move ,--(bot)success,hold,move
ifDead= cc.is_dead_async ,--(bot)dead ifDead= cc.is_dead_async ,--(bot)dead
destroy= cc.destroy_async ,--(bot) destroy= cc.destroy_async ,--(bot)
setHold= cc.set_hold ,--(opt,bool) setHold= cc.set_hold ,--(opt,bool)
set20G= cc.set_20g ,--(opt,bool) set20G= cc.set_20g ,--(opt,bool)
setBag= cc.set_bag7 ,--(opt,bool) setBag= cc.set_bag7 ,--(opt,bool)
setNode= cc.set_max_nodes ,--(opt,bool) setNode= cc.set_max_nodes ,--(opt,bool)
free= cc.free ,--(opt/wei) free= cc.free ,--(opt/wei)
} }
function CC_updateField(P) function CC_updateField(P)
local F,i={},1 local F,i={},1
for y=1,#P.field do for y=1,#P.field do
for x=1,10 do for x=1,10 do
F[i],i=P.field[y][x]>0,i+1 F[i],i=P.field[y][x]>0,i+1
end
end end
while i<400 do
F[i],i=false,i+1
end
BOT.update(P.AI_bot,F,P.b2b>=100,P.combo)
end end
while i<400 do function CC_switch20G(P)
F[i],i=false,i+1 P.AIdata._20G=true
end P.AI_keys={}
BOT.update(P.AI_bot,F,P.b2b>=100,P.combo) BOT.destroy(P.AI_bot)
end local opt,wei=BOT.getConf()
function CC_switch20G(P) BOT.setHold(opt,P.AIdata.hold)
P.AIdata._20G=true BOT.set20G(opt,P.AIdata._20G)
P.AI_keys={} BOT.setBag(opt,P.AIdata.bag7)
BOT.destroy(P.AI_bot) BOT.setNode(opt,P.AIdata.node)
local opt,wei=BOT.getConf() P.AI_bot=BOT.new(opt,wei)
BOT.setHold(opt,P.AIdata.hold) BOT.free(opt)BOT.free(wei)
BOT.set20G(opt,P.AIdata._20G) for i=1,P.AIdata.next do
BOT.setBag(opt,P.AIdata.bag7) BOT.addNext(P.AI_bot,CCblockID[P.next[i].id])
BOT.setNode(opt,P.AIdata.node) end
P.AI_bot=BOT.new(opt,wei) CC_updateField(P)
BOT.free(opt)BOT.free(wei) P.hd={bk={{}},id=0,color=0,name=0}P.holded=false
for i=1,P.AIdata.next do P.cur=rem(P.next,1)
BOT.addNext(P.AI_bot,CCblockID[P.next[i].id]) P.sc,P.dir=scs[P.cur.id],0
end P.r,P.c=#P.cur.bk,#P.cur.bk[1]
CC_updateField(P) P.curX,P.curY=blockPos[P.cur.id],21+ceil(P.fieldBeneath/30)-P.r+min(int(#P.field*.2),2)
P.hd={bk={{}},id=0,color=0,name=0}P.holded=false
P.cur=rem(P.next,1)
P.sc,P.dir=scs[P.cur.id],0
P.r,P.c=#P.cur.bk,#P.cur.bk[1]
P.curX,P.curY=blockPos[P.cur.id],21+ceil(P.fieldBeneath/30)-P.r+min(int(#P.field*.2),2)
P:newNext() P:newNext()
BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id]) BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])
collectgarbage() collectgarbage()
end
end end
::SKIP:: -------------------------------------------------9 Stack setup
-------------------------------------------------⑨Stack setup
local dirCount={1,1,3,3,3,0,1} local dirCount={1,1,3,3,3,0,1}
local spinOffset={ local spinOffset={
{[0]=0,1,0,0},--Z {[0]=0,1,0,0},--Z
@@ -180,7 +180,7 @@ local function getScore(field,cb,cy)
HclearScore[clear]--Clearing HclearScore[clear]--Clearing
-hole*70--Hole -hole*70--Hole
-cy*50--Height -cy*50--Height
-sdh--∫Δh -sdh--Sum of DeltaH
or or
LclearScore[clear] LclearScore[clear]
-hole*100 -hole*100
@@ -231,10 +231,8 @@ AI_think={
end end
end end
::L:: while #Tfield>0 do
if #Tfield>0 then
freeRow.discard(rem(Tfield,1)) freeRow.discard(rem(Tfield,1))
goto L
end--Release cache end--Release cache
local p=#ctrl+1 local p=#ctrl+1
if best.hold then if best.hold then

View File

@@ -2,239 +2,302 @@ local gc=love.graphics
local int,ceil,rnd,abs=math.floor,math.ceil,math.random,math.abs local int,ceil,rnd,abs=math.floor,math.ceil,math.random,math.abs
local max,min,sin,cos=math.max,math.min,math.sin,math.cos local max,min,sin,cos=math.max,math.min,math.sin,math.cos
local BG
local scr=scr local scr=scr
local BGvars={_G=_G,SHADER=SHADER}
local BGinit,BGresize,BGupdate,BGdraw,BGdiscard={},{},{},{},{} local back={}
local BGvars={_G=_G} back.none={
draw=function()
gc.clear(.15,.15,.15)
end,
}
back.grey={
draw=function()
gc.clear(.3,.3,.3)
end,
}
back.glow={
init=function()
t=0
end,
update=function(dt)
t=t+dt
end,
draw=function()
local t=(sin(t*.5)+sin(t*.7)+sin(t*.9+1)+sin(t*1.5)+sin(t*2+10))*.08
gc.clear(t,t,t)
end,
}--light-dark
back.rgb={
init=function()
t=0
end,
update=function(dt)
t=t+dt
end,
draw=function()
gc.clear(
sin(t*1.2)*.15+.2,
sin(t*1.5)*.15+.2,
sin(t*1.9)*.15+.2
)
end,
}--Changing pure color
back.strap={
init=function()
t=0
end,
update=function(dt)
t=t+dt
end,
draw=function()
SHADER.strap:send("t",t*.626)
gc.setColor(.4,.626,.626)
gc.setShader(SHADER.strap)
gc.rectangle("fill",0,0,scr.w,scr.h)
gc.setShader()
end,
}--Horizonal ranbow
back.flink={
init=function()
t=0
end,
update=function(dt)
t=t+dt
end,
draw=function()
local t=.13-t%3%1.7
if t<.2 then gc.clear(t,t,t)
else gc.clear(0,0,0)
end
end,
}--flash after random time
back.aura={
init=function()
t=rnd()*3600
BG.resize(scr.w,scr.h)
end,
resize=function(w,h)
SHADER.aura:send("w",w*scr.dpi)
SHADER.aura:send("h",h*scr.dpi)
end,
update=function(dt)
t=t+dt
end,
draw=function()
SHADER.aura:send("t",t)
gc.setShader(SHADER.aura)
gc.rectangle("fill",0,0,scr.w,scr.h)
gc.setShader()
end,
}--cool liquid background
back.game1={
init=function()
t=0
BG.resize(scr.w,scr.h)
end,
resize=function(w,h)
SHADER.rainbow:send("w",w*scr.dpi)
SHADER.rainbow:send("h",h*scr.dpi)
end,
update=function(dt)
t=t+dt
end,
draw=function()
SHADER.rainbow:send("t",t)
gc.setColor(.6,.6,.6)
gc.setShader(SHADER.rainbow)
gc.rectangle("fill",0,0,scr.w,scr.h)
gc.setShader()
end,
}--Rolling rainbow
back.game2={
init=function()
t=0
BG.resize(scr.w,scr.h)
end,
resize=function(w,h)
SHADER.rainbow:send("w",w*scr.dpi)
SHADER.rainbow:send("h",h*scr.dpi)
end,
update=function(dt)
t=t+dt
end,
draw=function()
SHADER.rainbow:send("t",t)
gc.setColor(.7,.4,.4)
gc.setShader(SHADER.rainbow)
gc.rectangle("fill",0,0,scr.w,scr.h)
gc.setShader()
end,
}--Red rolling rainbow
back.game3={
init=function()
t=0
BG.resize(scr.w,scr.h)
end,
resize=function(w,h)
SHADER.rainbow:send("w",w*scr.dpi)
SHADER.rainbow:send("h",h*scr.dpi)
end,
update=function(dt)
t=t+dt
end,
draw=function()
SHADER.rainbow:send("t",t)
gc.setColor(.5,.5,.8)
gc.setShader(SHADER.rainbow)
gc.rectangle("fill",0,0,scr.w,scr.h)
gc.setShader()
end,
}--Blue rolling rainbow
back.game4={
init=function()
t=0
end,
update=function(dt)
t=t+dt
end,
draw=function()
SHADER.strap:send("t",t*1.26)
gc.setColor(.5,.626,.74)
gc.setShader(SHADER.strap)
gc.rectangle("fill",0,0,scr.w,scr.h)
gc.setShader()
end,
}--Blue strap
back.game5={
init=function()
t=0
end,
update=function(dt)
t=t+dt
end,
draw=function()
local t=2.5-t%20%6%2.5
if t<.3 then gc.clear(t,t,t)
else gc.clear(0,0,0)
end
end,
}--Lightning
function BGdraw.none()
gc.clear(.15,.15,.15)
end
function BGdraw.grey()
gc.clear(.3,.3,.3)
end
function BGinit.glow()
t=0
end
function BGupdate.glow(dt)
t=t+dt
end
function BGdraw.glow()
local t=(sin(t*.5)+sin(t*.7)+sin(t*.9+1)+sin(t*1.5)+sin(t*2+10))*.08
gc.clear(t,t,t)
end
function BGinit.rgb()
t=0
end
function BGupdate.rgb(dt)
t=t+dt
end
function BGdraw.rgb()
gc.clear(
sin(t*1.2)*.15+.2,
sin(t*1.5)*.15+.2,
sin(t*1.9)*.15+.2
)
end
function BGinit.strap()
t=0
img=_G.IMG.gameBG2
end
function BGupdate.strap(dt)
t=t+dt
end
function BGdraw.strap()
gc.setColor(.5,.5,.5)
local x=t%16*-64
repeat
gc.draw(img,x,0,nil,8,scr.h)
x=x+1024--image width*8
until x>=scr.w
end
function BGinit.flink()
t=0
end
function BGupdate.flink(dt)
t=t+dt
end
function BGdraw.flink()
local t=.13-t%3%1.7
if t<.2 then gc.clear(t,t,t)
else gc.clear(0,0,0)
end
end
function BGinit.game1()
t=0
img=_G.IMG.gameBG1
end
function BGupdate.game1(dt)
t=t+dt
end
function BGdraw.game1()
gc.setColor(.5,.5,.5)
gc.draw(img,scr.w*.5,scr.h*.5,t*.15,scr.rad*.0625,nil,16,16)
end--Rainbow
function BGinit.game2()
t=0
img=_G.IMG.gameBG1
end
function BGupdate.game2(dt)
t=t+dt
end
function BGdraw.game2()
gc.setColor(.5,.26,.26)
gc.draw(img,scr.w*.5,scr.h*.5,t*.15,scr.rad*.0625,nil,16,16)
end--Red rainbow
function BGinit.game3()
t=0
img=_G.IMG.gameBG1
end
function BGupdate.game3(dt)
t=t+dt
end
function BGdraw.game3()
gc.setColor(.4,.4,.8)
gc.draw(img,scr.w*.5,scr.h*.5,t*.15,scr.rad*.0625,nil,16,16)
end--Blue rainbow
function BGinit.game4()
t=0
img=_G.IMG.gameBG2
end
function BGupdate.game4(dt)
t=t+dt
end
function BGdraw.game4()
gc.setColor(.05,.4,.4)
local x=t%8*-128
repeat
gc.draw(img,x,0,nil,8,scr.h)
x=x+1024--image width*8
until x>=scr.w
end--Fast strap
function BGinit.game5()
t=0
end
function BGupdate.game5(dt)
t=t+dt
end
function BGdraw.game5()
local t=2.5-t%20%6%2.5
if t<.3 then gc.clear(t,t,t)
else gc.clear(0,0,0)
end
end--Lightning
function BGinit.game6()
t=0
colorLib=_G.skin.libColor
colorSet=_G.setting.skin
miniBlock=_G.miniBlock
end
function BGupdate.game6(dt)
t=t+dt
end
local blocks=require("parts/mino") local blocks=require("parts/mino")
local scs=require("parts/spinCenters") local scs=require("parts/spinCenters")
function BGdraw.game6() back.game6={
local t=1.2-t%10%3%1.2 init=function()
if t<.3 then gc.clear(t,t,t) t=0
else gc.clear(0,0,0) colorLib=_G.SKIN.libColor
end colorSet=_G.setting.skin
local R=7-int(t*.5)%7 miniBlock=_G.miniBlock
local _=colorLib[colorSet[R]] end,
gc.setColor(_[1],_[2],_[3],.1) update=function(dt)
gc.draw(miniBlock[R],640,360,t%3.1416*6,400,400,scs[R][0][2]-.5,#blocks[R][0]-scs[R][0][1]+.5) t=t+dt
end--Fast lightning&spining tetromino end,
draw=function()
local t=1.2-t%10%3%1.2
if t<.3 then gc.clear(t,t,t)
else gc.clear(0,0,0)
end
local R=7-int(t*.5)%7
local _=colorLib[colorSet[R]]
gc.setColor(_[1],_[2],_[3],.1)
gc.draw(miniBlock[R],640,360,t%3.1416*6,400,400,scs[R][0][2]-.5,#blocks[R][0]-scs[R][0][1]+.5)
end,
}--Fast lightning + spining tetromino
local matrixT={}for i=1,50 do matrixT[i]={}for j=1,50 do matrixT[i][j]=love.math.noise(i,j)+2 end end local matrixT={}for i=1,50 do matrixT[i]={}for j=1,50 do matrixT[i][j]=love.math.noise(i,j)+2 end end
function BGinit.matrix() back.matrix={
t=0 init=function()
end t=rnd()*3600
function BGupdate.matrix(dt) end,
t=t+dt update=function(dt)
end t=t+dt
function BGdraw.matrix() end,
gc.scale(scr.k) draw=function()
gc.clear(.15,.15,.15) gc.scale(scr.k)
local _=ceil(scr.h/80) gc.clear(.15,.15,.15)
for i=1,ceil(scr.w/80)do local Y=ceil(scr.h*scr.dpi/80)
for j=1,_ do for x=1,ceil(scr.w*scr.dpi/80)do
gc.setColor(1,1,1,sin(matrixT[i][j]*t)*.1+.1) for y=1,Y do
gc.rectangle("fill",80*i,80*j,-80,-80) gc.setColor(1,1,1,sin(x+matrixT[x][y]*t)*.1+.1)
gc.rectangle("fill",80*x,80*y,-80,-80)
end
end end
end gc.scale(1/scr.k)
gc.scale(1/scr.k) end,
end }
back.space={
init=function()
stars={}
W,H=scr.w+20,scr.h+20
BG.resize(scr.w,scr.h)
end,
resize=function(w,h)
local S=stars
for i=1,1260,5 do
local s=rnd(26,40)*.1
S[i]=s*scr.k --size
S[i+1]=rnd(W)-10 --x
S[i+2]=rnd(H)-10 --y
S[i+3]=(rnd()-.5)*.01*s --vx
S[i+4]=(rnd()-.5)*.01*s --vy
end--800 var
end,
update=function(dt)
local S=stars
for i=1,1260,5 do
S[i+1]=(S[i+1]+S[i+3])%W
S[i+2]=(S[i+2]+S[i+4])%H
end--star moving
end,
draw=function()
gc.clear(.2,.2,.2)
if not stars[1]then return end
gc.translate(-10,-10)
gc.setColor(.8,.8,.8)
for i=1,1260,5 do
local s=stars
local x,y=s[i+1],s[i+2]
s=s[i]
gc.rectangle("fill",x,y,s,s)
end
gc.translate(10,10)
end,
discard=function()
stars={}
end,
}
function BGinit.space() for _,bg in next,back do
stars={} if not bg.init then bg.init= NULL end setfenv(bg.init ,BGvars)
for i=1,2600,5 do if not bg.resize then bg.resize= NULL end setfenv(bg.resize ,BGvars)
local s=0.75*2^(rnd()*1.5) if not bg.update then bg.update= NULL end setfenv(bg.update ,BGvars)
stars[i]=s --size if not bg.discard then bg.discard=NULL end setfenv(bg.discard ,BGvars)
stars[i+1]=rnd(W) --x if not bg.draw then bg.draw= NULL end setfenv(bg.draw ,BGvars)
stars[i+2]=rnd(H) --y end--make BG vars invisible
stars[i+3]=(rnd()-.5)*.01*s --vx
stars[i+4]=(rnd()-.5)*.01*s --vy
end--800 var
end
function BGresize.space(w,h)
W,H=w+100,h+100
end
function BGupdate.space(dt)
for i=1,2600,5 do
stars[i+1]=(stars[i+1]+stars[i+3])%W
stars[i+2]=(stars[i+2]+stars[i+4])%H
end--star moving
end
function BGdraw.space() BG={
gc.clear(.2,.2,.2)
if not stars[1]then return end
gc.translate(-50,-50)
gc.setColor(.8,.8,.8)
for i=1,2600,5 do
local x,y=stars[i+1],stars[i+2]
gc.circle("fill",x,y,stars[i])
end
gc.translate(50,50)
end
function BGdiscard.space()
stars={}
end
for k in next,BGdraw do
if BGinit[k]then setfenv(BGinit[k], BGvars)end
if BGresize[k]then setfenv(BGresize[k], BGvars)end
if BGupdate[k]then setfenv(BGupdate[k], BGvars)end
if BGdraw[k]then setfenv(BGdraw[k], BGvars)end
if BGdiscard[k]then setfenv(BGdiscard[k], BGvars)end
end
local BG={
cur="none", cur="none",
resize=NULL, resize=NULL,
update=NULL, update=NULL,
draw=BGdraw.none, draw=back.none.draw,
} }
function BG.set(bg) function BG.set(bg)
if bg==BG.cur or not setting.bg then return end if bg==BG.cur or not setting.bg then return end
if BG.discard then
BG.discard()
collectgarbage()
end
BG.cur=bg BG.cur=bg
local _=BGdiscard[BG.cur]if _ then _()collectgarbage()end bg=back[bg]
BG.resize=BGresize[bg]or NULL;BG.resize(scr.w,scr.h)
_=BGinit[bg]if _ then _()end
BG.update=BGupdate[bg]or NULL
BG.draw=BGdraw[bg]
end
BG.init=bg.init or NULL
BG.resize=bg.resize or NULL
BG.update=bg.update or NULL
BG.discard=bg.discard or NULL
BG.draw=bg.draw or NULL
BG.init()
end
return BG return BG

View File

@@ -1,20 +1,26 @@
local rem=table.remove local rem=table.remove
local BGM={} local BGM={
-- BGM.nowPlay=[str:playing ID] --nowPlay=[str:playing ID]
-- BGM.suspend=[str:pausing ID] --suspend=[str:pausing ID]
-- BGM.playing=[src:playing SRC] --playing=[src:playing SRC]
BGM.list={
"blank","way","newera","infinite","reason",
"race","push","secret7th","secret8th",
"rockblock","cruelty","final","8-bit happiness","end",
"shining terminal","oxygen","distortion",
} }
function BGM.loadOne(_) BGM.list={
_,BGM.list[_]=BGM.list[_] "blank","way","race","newera","push","reason","infinite",
BGM.list[_]=love.audio.newSource("/BGM/".._..".ogg","stream") "secret7th","secret8th",
BGM.list[_]:setLooping(true) "shining terminal","oxygen","distortion","far",
BGM.list[_]:setVolume(0) "rockblock","cruelty","final","8-bit happiness","end",
"hay what kind of feeling",
}
BGM.len=#BGM.list
function BGM.loadOne(N)
N=BGM.list[N]
local file="/BGM/"..N..".ogg"
if love.filesystem.getInfo(file)then
BGM.list[N]=love.audio.newSource(file,"stream")
BGM.list[N]:setLooping(true)
BGM.list[N]:setVolume(0)
end
end end
function BGM.loadAll() function BGM.loadAll()
for i=1,#BGM.list do for i=1,#BGM.list do
@@ -23,9 +29,10 @@ function BGM.loadAll()
end end
function BGM.play(s) function BGM.play(s)
if setting.bgm==0 then if setting.bgm==0 then
BGM.playing=BGM.list[s]
BGM.suspend,BGM.nowPlay=s BGM.suspend,BGM.nowPlay=s
return return
elseif not s then elseif not s or not BGM.list[s]then
return return
end end
if BGM.nowPlay~=s then if BGM.nowPlay~=s then

View File

@@ -1,40 +1,44 @@
setting={ local s={
--game
das=10,arr=2, das=10,arr=2,
sddas=0,sdarr=2, sddas=0,sdarr=2,
ihs=true,irs=true,ims=true, ihs=true,irs=true,ims=true,
reTime=10, reTime=4,
maxNext=6, maxNext=6,
quickR=true, quickR=true,
swap=true, swap=true,
fine=false, fine=false,
autoPause=true, autoPause=true,
lang=1, lang=1,
skinSet=1, skinSet=1,
skin={1,5,2,8,10,3,7}, skin={1,5,8,2,10,3,7,1,5,5,1,8,2,10,3,7,10,7,8,2,8,2,1,5,3},
face={0,0,0,0,0,0,0}, face={},
--game
--graphic
ghost=true,center=true, ghost=true,center=true,
smooth=true,grid=false, smooth=true,grid=false,
bagLine=false, bagLine=false,
lockFX=2, lockFX=2,
dropFX=3, dropFX=3,
clearFX=2,
shakeFX=2, shakeFX=2,
atkFX=3, atkFX=3,
frameMul=100, frameMul=100,
text=true, text=true,
warn=true,
fullscreen=false, fullscreen=false,
bg=true, bg=true,
--graphic powerInfo=false,
--sound
sfx=10,bgm=7, sfx=10,bgm=7,
vib=0,voc=0, vib=0,voc=0,
stereo=6, stereo=6,
--sound
VKSound=true,--if SFX --virtualkey
VKSFX=3,--SFX volume
VKVIB=0,--VIB
VKSwitch=false,--if disp VKSwitch=false,--if disp
VKTrack=false,--if tracked VKTrack=false,--if tracked
VKDodge=false,--if dodge VKDodge=false,--if dodge
@@ -42,28 +46,37 @@ setting={
VKCurW=4,--Cur-Pos Weight VKCurW=4,--Cur-Pos Weight
VKIcon=true,--if disp icon VKIcon=true,--if disp icon
VKAlpha=3, VKAlpha=3,
--control
} }
stat={ for i=1,25 do
s.face[i]=0
end
setting=s
s={
version=gameVersion, version=gameVersion,
run=0,game=0,time=0, run=0,game=0,time=0,
key=0,rotate=0,hold=0, key=0,rotate=0,hold=0,
extraPiece=0,extraRate=0, extraPiece=0,extraRate=0,
piece=0,row=0,dig=0, piece=0,row=0,dig=0,
atk=0,digatk=0,send=0,recv=0,pend=0, atk=0,digatk=0,
clear_S={0,0,0,0},clear_B={0,0,0,0,0,0,0}, send=0,recv=0,pend=0,off=0,
spin_S={0,0,0,0},spin_B={0,0,0,0,0,0,0}, clear={},clear_B={},clear_S={0,0,0,0,0},
clear={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, spin={},spin_B={},spin_S={0,0,0,0,0},
spin={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},
pc=0,hpc=0,b2b=0,b3b=0,score=0, pc=0,hpc=0,b2b=0,b3b=0,score=0,
lastPlay=1,--last played mode ID lastPlay=1,--last played mode ID
} }
for i=1,25 do
s.clear_B[i]=0
s.spin_B[i]=0
s.clear[i]={0,0,0,0,0}
s.spin[i]={0,0,0,0,0}
end
stat=s
keyMap={ keyMap={
{"left","right","x","z","c","up","down","space","tab","r"}, {"left","right","x","z","c","up","down","space","tab","r"},{},
{},{},{},{},{},{},{},
--keyboard --keyboard
{"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","x","leftshoulder"}, {"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","x","leftshoulder"},{},
{},{},{},{},{},{},{},
--joystick --joystick
} }
for i=1,#keyMap do for j=1,20 do for i=1,#keyMap do for j=1,20 do

View File

@@ -41,14 +41,14 @@ local function dumpTable(L,t)
end end
elseif T=="string"then k=k.."=" elseif T=="string"then k=k.."="
elseif T=="boolean"then k="["..k.."]=" elseif T=="boolean"then k="["..k.."]="
else error("Error key type!") else assert(false,"Error key type!")
end end
T=type(v) T=type(v)
if T=="number"then v=tostring(v) if T=="number"then v=tostring(v)
elseif T=="string"then v="\""..v.."\"" elseif T=="string"then v="\""..v.."\""
elseif T=="table"then v=dumpTable(v,t+1) elseif T=="table"then v=dumpTable(v,t+1)
elseif T=="boolean"then v=tostring(v) elseif T=="boolean"then v=tostring(v)
else error("Error data type!") else assert(false,"Error data type!")
end end
s=s..tabs[t]..k..v..",\n" s=s..tabs[t]..k..v..",\n"
end end
@@ -68,7 +68,7 @@ end
local files={ local files={
data= fs.newFile("data.dat"), data= fs.newFile("data.dat"),
setting=fs.newFile("setting.dat"), setting=fs.newFile("settings.dat"),
VK= fs.newFile("virtualkey.dat"), VK= fs.newFile("virtualkey.dat"),
keyMap= fs.newFile("key.dat"), keyMap= fs.newFile("key.dat"),
unlock= fs.newFile("unlock.dat"), unlock= fs.newFile("unlock.dat"),
@@ -136,10 +136,6 @@ function File.loadData()
if s then if s then
setfenv(s,{}) setfenv(s,{})
local S=s() local S=s()
if S.version~=gameVersion then
S.version=gameVersion
TEXT.show(text.newVersion,640,200,30,"fly",.3)
end
if not S.version or S.version=="Alpha V0.8.15"then if not S.version or S.version=="Alpha V0.8.15"then
S.clear_S={S.clear_1,S.clear_2,S.clear_3,S.clear_4} S.clear_S={S.clear_1,S.clear_2,S.clear_3,S.clear_4}
S.clear={{},{},{},{},{},{},{}} S.clear={{},{},{},{},{},{},{}}
@@ -184,6 +180,38 @@ function File.loadData()
S.clear[i][4]=0 S.clear[i][4]=0
end end
end end
if not S.clear_B[8]then
for i=1,7 do
S.clear[i][5]=0
S.spin[i][5]=0
end
for i=8,25 do
S.clear[i]={0,0,0,0,0}
S.spin[i]={0,0,0,0,0}
S.spin_B[i]=0
S.clear_B[i]=0
end
S.spin_S[5]=0
S.clear_S[5]=0
end
if S.version=="Alpha V0.8.18"or S.version=="Alpha V0.8.19"then
S.clear[3],S.clear[4]=S.clear[4],S.clear[3]
S.spin[3],S.spin[4]=S.spin[4],S.spin[3]
S.clear_B[3],S.clear_B[4]=S.clear_B[4],S.clear_B[3]
S.spin_B[3],S.spin_B[4]=S.spin_B[4],S.spin_B[3]
end
if S.version=="Alpha V0.8.22"then
S.off=S.recv-S.pend
end
if #modeRanks==76 then
for i=1,4 do
table.remove(modeRanks)
end
end
if S.version~=gameVersion then
S.version=gameVersion
TEXT.show(text.newVersion,640,200,30,"fly",.3)
end
addToTable(S,stat) addToTable(S,stat)
end end
end end

View File

@@ -13,31 +13,37 @@ if setting.lang==1 then
"2+2=Miya", "2+2=Miya",
"225238922 哔哩哔哩 干杯~", "225238922 哔哩哔哩 干杯~",
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活", "适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
"合群了就会消失,但是消失不代表没有意义", "合群了就会消失, 但是消失不代表没有意义",
"学会使用两个旋转键,三个更好", "学会使用两个旋转键, 三个更好",
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)", "更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
"注意到\"旋转\"到底对方块做了些什么吗?", "注意到\"旋转\"到底对方块做了些什么吗?",
"20G本质是一套全新的游戏规则", "20G本质是一套全新的游戏规则",
"不要在上课时玩游戏!", "不要在上课时玩游戏!",
"本游戏难度上限很高,做好心理准备", "本游戏难度上限很高, 做好心理准备",
"本游戏可不是休闲游戏", "本游戏可不是休闲游戏",
"调到特殊的日期也不会发生什么的", "调到特殊的日期也不会发生什么的",
"3.1415926535897932384", "3.1415926535897932384",
"2.7182818284590452353", "2.7182818284590452353",
"Let-The-Bass-Kick!", "Let-The-Bass-Kick!",
"使用love2d引擎制作", "使用love2d引擎制作",
"有疑问?先看设置有没有你想要的", "有疑问? 先看设置有没有你想要的",
"有建议的话可以把信息反馈给作者~", "有建议的话可以把信息反馈给作者~",
"不要按F10", "不要按F10",
"秘密数字:626", "秘密数字:626",
"CLASSIC SEXY RUSSIAN BLOCKS", "CLASSIC SEXY RUSSIAN BLOCKS",
"戴上耳机以获得最佳体验", "戴上耳机以获得最佳体验",
"少女祈祷中", "少女祈祷中",
"LrL,RlR LLr,RRl RRR,LLL RfR,RRf,rFF FFF",--ZSLJTOI "LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
"RUR'U'R'FR2U'R'U'RUR'F'", "(RUR'U')R'FR2U'R'U'(RUR'F')",
"Am G F G", "Am G F G",
"Techmino 好玩!", "联网还没做呢, 别急",
"\"免费吃鸡方块\"",
"Techminohaowan", "Techminohaowan",
"Techmino 好玩!",
"tetr.js 也很好玩!",
"jstris 也很好玩!",
"tetr.io 也很好玩!",
"nullpomino 也很好玩!",
} }
elseif setting.lang==2 then elseif setting.lang==2 then
L={ L={
@@ -73,11 +79,17 @@ elseif setting.lang==2 then
"CLASSIC SEXY RUSSIAN BLOCKS", "CLASSIC SEXY RUSSIAN BLOCKS",
"戴上耳机以获得最佳体验", "戴上耳机以获得最佳体验",
"少女祈祷中", "少女祈祷中",
"LrL,RlR LLr,RRl RRR,LLL RfR,RRf,rFF FFF",--ZSLJTOI "LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
"RUR'U'R'FR2U'R'U'RUR'F'", "(RUR'U')R'FR2U'R'U'(RUR'F')",
"Am G F G", "Am G F G",
"Techmino 好玩!", "联网还没做呢, 别急",
"\"免费吃鸡方块\"",
"Techminohaowan", "Techminohaowan",
"Techmino 好玩!",
"tetr.js 也很好玩!",
"jstris 也很好玩!",
"tetr.io 也很好玩!",
"nullpomino 也很好玩!",
} }
elseif setting.lang==3 then elseif setting.lang==3 then
L={ L={
@@ -114,10 +126,24 @@ elseif setting.lang==3 then
"CLASSIC SEXY RUSSIAN BLOCKS", "CLASSIC SEXY RUSSIAN BLOCKS",
"Headphones for better experience", "Headphones for better experience",
"少女祈禱中", "少女祈禱中",
"RUR'U'R'FR2U'R'U'RUR'F'", "(RUR'U')R'FR2U'R'U'(RUR'F')",
"Am G F G", "Am G F G",
"LrL,RlR LLr,RRl RRR,LLL RfR,RRf,rFF FFF",--ZSLJTOI "LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
"Only offline game now",
"\"Free block game with royale-mode\"",
"Techmino is so fun!", "Techmino is so fun!",
"Who is diao",
"Also try tetr.js!",
"Also try jstris!",
"Also try tetr.io!",
"Also try nullpomino!",
} }
elseif setting.lang==4 then
L={'!','@','#','$','%','^','&','*','(',')','-','=','_','+','[',']','{','}','\\','|',';',':','\'','"',',','<','.','>','/','?'}
local s=""
for i=1,math.random(16,26)do
s=s..L[math.random(#L)]
end
return s
end end
return L[math.random(#L)] return L[math.random(#L)]

View File

@@ -1,4 +1,5 @@
local IMG={ local IMG={
batteryImage="/mess/power.png",
titleImage="mess/title.png", titleImage="mess/title.png",
coloredTitleImage="mess/title_colored.png", coloredTitleImage="mess/title_colored.png",
dialCircle="mess/dialCircle.png", dialCircle="mess/dialCircle.png",
@@ -16,8 +17,7 @@ local IMG={
miyaF3="miya/f3.png", miyaF3="miya/f3.png",
miyaF4="miya/f4.png", miyaF4="miya/f4.png",
gameBG1="BG/bg1.png", electric="mess/electric.png",
gameBG2="BG/bg2.png",
} }
local list={} local list={}
local count=0 local count=0

Some files were not shown because too many files have changed in this diff Show More