Compare commits

...

16 Commits

Author SHA1 Message Date
MrZ_26
e1d92a166b 0.8.24: Bug Fixed 2020-06-14 15:21:20 +08:00
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
MrZ_26
00026bc46b 0.8.17:Details Update 2020-04-30 01:23:11 +08:00
MrZ_26
7d63386410 0.8.16Fantastic Global Update 2020-04-30 01:23:11 +08:00
MrZ_26
e88553bc00 0.8.15Bug Fixed 2020-04-30 01:23:11 +08:00
MrZ_26
4652be7067 0.8.14 2020-04-30 01:23:11 +08:00
MrZ_26
ed0f8031d0 0.8.13 2020-04-30 01:23:11 +08:00
MrZ_26
15df07ae3f 0.8.12 2020-04-30 01:22:06 +08:00
178 changed files with 9397 additions and 7655 deletions

BIN
BGM/far.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
SFX/virtualKey.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
SFX/welcome_sfx.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
VOICE/welcome_voc.ogg Normal file

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

View File

@@ -1,92 +0,0 @@
setting={
das=10,arr=2,
sddas=0,sdarr=2,
reTime=10,
maxNext=6,
quickR=true,
swap=true,
fine=false,
autoPause=true,
--game
ghost=true,center=true,
smo=true,grid=false,
dropFX=3,
shakeFX=2,
atkFX=3,
frameMul=100,
fullscreen=false,
bg=true,
bgspace=true,
lang=1,
skin=1,
--graphic
sfx=10,bgm=7,
vib=0,voc=0,
stereo=6,
--sound
keyMap={
{"left","right","x","z","c","up","down","space","tab","r"},
{},{},{},{},{},{},{},
--keyboard
{"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","x","leftshoulder"},
{},{},{},{},{},{},{},
--joystick
},
VKSwitch=false,--if disp
VKTrack=false,--if tracked
VKDodge=false,--if dodge
VKTchW=3,--Touch-Pos Weight
VKCurW=4,--Cur-Pos Weight
VKIcon=true,--if disp icon
VKAlpha=3,
--control
}
local L=setting.keyMap
for i=1,#L do
for j=1,20 do
if not L[i][j]then
L[i][j]=""
end
end
end
stat={
run=0,game=0,time=0,
extraPiece=0,extraRate=0,
key=0,rotate=0,hold=0,piece=0,row=0,
atk=0,send=0,recv=0,pend=0,
clear_1=0,clear_2=0,clear_3=0,clear_4=0,
spin_0=0,spin_1=0,spin_2=0,spin_3=0,
b2b=0,b3b=0,pc=0,score=0,
}
--Things related to virtualkey
local O,_=true,false
VK_org={--Original set,for restore VK' position
{ava=O,x=80, y=720-200, r=80},--moveLeft
{ava=O,x=320, y=720-200, r=80},--moveRight
{ava=O,x=1280-80, y=720-200, r=80},--rotRight
{ava=O,x=1280-200, y=720-80, r=80},--rotLeft
{ava=O,x=1280-200, y=720-320, r=80},--rotFlip
{ava=O,x=200, y=720-320, r=80},--hardDrop
{ava=O,x=200, y=720-80, r=80},--softDrop
{ava=O,x=1280-320, y=720-200, r=80},--hold
{ava=O,x=1280-80, y=280, r=80},--func
{ava=O,x=80, y=280, r=80},--restart
{ava=_,x=100, y=50, r=80},--insLeft
{ava=_,x=200, y=50, r=80},--insRight
{ava=_,x=300, y=50, r=80},--insDown
{ava=_,x=400, y=50, r=80},--down1
{ava=_,x=500, y=50, r=80},--down4
{ava=_,x=600, y=50, r=80},--down10
{ava=_,x=700, y=50, r=80},--dropLeft
{ava=_,x=800, y=50, r=80},--dropRight
{ava=_,x=900, y=50, r=80},--addToLeft
{ava=_,x=1000, y=50, r=80},--addToRight
}
virtualkey={}
for i=1,#VK_org do
virtualkey[i]={}
end

View File

@@ -1,14 +1,13 @@
(ENG ver. below)
游戏方法:
控制系统提供的一个个四联方块(左右移动和旋转90,180,270度),每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话)
系统提供的一个个四联骨牌("方块",总共7种),玩家需要控制(左右移动和旋转90,180,270度),每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话)
活到最后或者完成目标即胜利.
旋转系统:
使用Techmino专属旋转系统
细节不赘述
使用Techmino专属旋转系统,细节懒得写(
spin判定:
结合了不可移动判定和三角判定,是否为mini也与判定过程数据有关
细节不赘述
结合了不可移动判定和三角判定,是否为mini也与判定过程数据有关,细节也懒得写(
攻击系统:
普通消除:
@@ -16,14 +15,16 @@ spin判定:
特殊消除:
spin1/2/3攻击2/4/6,若mini则减半
B2B:加1(techrash/spin1/spin2)或2(spin3)攻击
B3B:在B2B效果之上再+1攻击和+1额外抵挡
连击:0,0,1,1,2,2,3,3,4,4,3……
B3B:在B2B效果之上消四再加1,spin再加0.5*消行数攻击,二者都+1额外抵挡
堆楼连击: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)增益(详细说明见下文)
PC:将上述伤害之和开根号,再+6~10(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+2,额外抵挡+2
全消:将上述伤害之和开根号,再+6~12(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
根据上述规则计算后,向下取整,攻击打出
分数系统:
玩得越牛逼得分越高嗷(
操作越牛逼得分越高嗷(
攻击延迟:
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢
@@ -36,7 +37,7 @@ spin判定:
back to back(B2B)点数说明:
B2B点数的范围在0~1200,在点数>=40时进行特殊消除为B2B,>1000时特殊消除为B3B
普通消除-250
spin1/2/3:+50/100/180(mini减半)
spin1/2/3:+50/100/180(mini变为原来40%)
消四:+100
空spin:+20,此法得到的点数不能超过1000
当点数在1000以上时空放一块-40(不减到低于1000)
@@ -47,9 +48,68 @@ back to back(B2B)点数说明:
1.随机:每次攻击后10%随机挑选一个玩家锁定
2.最多徽章:攻击后或者锁定玩家死亡时锁定徽章最多的玩家
3.最高:攻击后或者锁定玩家死亡时锁定场地最高的玩家(每秒刷新)
4.反击:攻击所有锁定自己的玩家攻击AOE,若未被任何人锁定则击随机玩家
4.反击:攻击所有锁定自己的玩家攻击AOE,若未被任何人锁定则击随机玩家(不锁定)
坚持到最后的玩家就是胜利者.
自定义模式说明:
玩家可以自由调整大多数参数(不包括上述各种游戏模式的特殊效果),也可以画一个场地去消除或者是作为提示模板来进行拼图模式.
在拼图模式下,按功能键切换是否展示提示.其中打"X"的格子不允许有方块,空的格子可以是任何状态,普通的七种彩色方块必须颜色对应,垃圾行方块的为止只要有方块就可以,但是不能是空气,玩家拼出自己画的图后就会判定胜利.
在拼图模式下,按功能键切换是否展示提示.其中打"X"的格子不允许有方块,空的格子可以是任何状态,普通的七种彩色方块必须颜色对应,垃圾行方块的为止只要有方块就可以,但是不能是空气,玩家拼出自己画的图后就会判定胜利.
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

278
file.lua
View File

@@ -1,278 +0,0 @@
local fs=love.filesystem
local int,max,min=math.floor,math.max,math.min
local sub,find=string.sub,string.find
local toN,toS=tonumber,tostring
local concat=table.concat
local function splitS(s,sep)
local t,n={},1
repeat
local p=find(s,sep)or #s+1
t[n]=sub(s,1,p-1)
n=n+1
s=sub(s,p+#sep)
until #s==0
return t
end
function loadRecord(N)
local F=fs.newFile(N..".dat")
if F:open("r")then
local s=loadstring(F:read())
local T={}
setfenv(s,T)
T[1]=s()
return T[1]
end
end
local function dumpTable(L)
local s="{\n"
for k,v in next,L do
local T
T=type(k)
if T=="number"then k="["..k.."]="
elseif T=="string"then k=k.."="
else error("Error data type!")
end
T=type(v)
if T=="number"then v=tostring(v)
elseif T=="string"then v="\""..v.."\""
elseif T=="table"then v=dumpTable(v)
else error("Error data type!")
end
s=s..k..v..",\n"
end
return s.."}"
end
function saveRecord(N,L)
local F=fs.newFile(N..".dat")
F:open("w")
local _=F:write("return"..dumpTable(L))
F:flush()
F:close()
if not _ then
TEXT(text.recSavingError..mes,640,480,40,"appear",.4)
end
end
function delRecord(N)
fs.remove(N..".dat")
end
function saveUnlock()
local t={}
local RR=modeRanks
for i=1,#RR do
t[i]=RR[i]or"X"
end
t=concat(t,",")
local F=FILE.unlock
F:open("w")
local _=F:write(t)
F:flush()
F:close()
if not _ then
TEXT(text.unlockSavingError..mes,640,480,40,"appear",.4)
end
end
function loadUnlock()
local F=FILE.unlock
F:open("r")
local t=F:read()
F:close()
t=splitS(t,",")
for i=1,#modeRanks do
local v=toN(t[i])
if not v or v<0 or v>6 or v~=int(v)then v=false end
modeRanks[i]=v
end
end
local statOpt={
"run","game","time",
"extraPiece","extraRate",
"key","rotate","hold","piece","row",
"atk","send","recv","pend",
"clear_1","clear_2","clear_3","clear_4",
"spin_0","spin_1","spin_2","spin_3",
"b2b","b3b","pc","score",
}
function loadStat()
local F=FILE.data
F:open("r")
local t=F:read()
F:close()
t=splitS(t,"\r\n")
for i=1,#t do
local p=find(t[i],"=")
if p then
local t,v=sub(t[i],1,p-1),sub(t[i],p+1)
for i=1,#statOpt do
if t==statOpt[i]then
v=toN(v)if not v or v<0 then v=0 end
stat[t]=v
goto L
end
end
if t=="lastPlay"then
v=toN(v)
mapCam.lastPlay=v and modeRanks[v]and v or 1
end
end
::L::
end
end
function saveStat()
local t={}
for i=1,#statOpt do
t[i]=statOpt[i].."="..toS(stat[statOpt[i]])
end
t[#t+1]="lastPlay="..mapCam.lastPlay
t=concat(t,"\r\n")
local F=FILE.data
F:open("w")
local _=F:write(t)
F:flush()
F:close()
if not _ then
TEXT(text.statSavingError..mes,640,480,40,"appear",.4)
end
end
function loadSetting()
local F=FILE.setting
F:open("r")
local t=F:read()
F:close()
t=splitS(t,"\r\n")
for i=1,#t do
local p=find(t[i],"=")
if p then
local t,v=sub(t[i],1,p-1),sub(t[i],p+1)
if--10档的设置
--声音
t=="sfx"or t=="bgm"or t=="voc"or t=="stereo"or
--三个触摸设置项
t=="VKTchW"or t=="VKCurW"or t=="VKAlpha"or
--重开时间
t=="reTime"
then
v=toN(v)
if v and v==int(v)and v>=0 and v<=10 then
setting[t]=v
end
elseif t=="vib"then
setting.vib=toN(v:match("[012345]"))or 0
elseif t=="fullscreen"then
setting.fullscreen=v=="true"
love.window.setFullscreen(setting.fullscreen)
elseif
--开关设置们
t=="bg"or
t=="ghost"or t=="center"or t=="grid"or t=="swap"or
t=="quickR"or t=="fine"or t=="bgspace"or t=="smo"or
t=="VKSwitch"or t=="VKTrack"or t=="VKDodge"or t=="VKIcon"
then
setting[t]=v=="true"
elseif t=="frameMul"then
setting.frameMul=min(max(toN(v)or 100,0),100)
elseif t=="das"or t=="arr"or t=="sddas"or t=="sdarr"then
v=toN(v)if not v or v<0 then v=0 end
setting[t]=int(v)
elseif t=="dropFX"or t=="shakeFX"or t=="atkFX"then
setting[t]=toN(v:match("[012345]"))or 0
elseif t=="lang"then
setting[t]=toN(v:match("[123]"))or 1
elseif t=="skin"then
setting[t]=toN(v:match("[12345678]"))or 1
elseif t=="keymap"then
v=splitS(v,"/")
for i=1,16 do
local v1=splitS(v[i],",")
for j=1,#v1 do
setting.keyMap[i][j]=v1[j]
end
end
elseif t=="VK"then
v=splitS(v,"/")
local SK
for i=1,#v do
if v[i]then
SK=splitS(v[i],",")
local K=VK_org[i]
K.ava=SK[1]=="T"
K.x,K.y,K.r=toN(SK[2]),toN(SK[3]),toN(SK[4])
end
end
end
end
end
end
local saveOpt={
"das","arr",
"sddas","sdarr",
"reTime",
"quickR",
"swap",
"fine",
"autoPause",
"ghost","center",
"smo","grid",
"dropFX",
"shakeFX",
"atkFX",
"frameMul",
"fullscreen",
"bg",
"bgspace",
"lang",
"skin",
"sfx","bgm",
"vib","voc",
"stereo",
"VKSwitch",
"VKTrack",
"VKDodge",
"VKTchW",
"VKCurW",
"VKIcon",
"VKAlpha",
}
function saveSetting()
local vk={}--virtualkey table
for i=1,#VK_org do
local V=VK_org[i]
vk[i]=concat({
V.ava and"T"or"F",
int(V.x+.5),
int(V.y+.5),
V.r,
},",")
end--pre-pack virtualkey setting
local map={}
for i=1,16 do
map[i]=concat(setting.keyMap[i],",")
end
local t={
"keymap="..toS(concat(map,"/")),
"VK="..toS(concat(vk,"/")),
}
for i=1,#saveOpt do
t[#t+1]=saveOpt[i].."="..toS(setting[saveOpt[i]])
end
t=concat(t,"\r\n")
local F=FILE.setting
F:open("w")
local _,mes=F:write(t)
F:flush()
F:close()
if _ then
newTask(Event_task.settingSaved,nil,{15})
else
TEXT(text.settingSavingError.."123",370,350,20,"appear",.3)
end
end

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

BIN
image/mess/electric.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

BIN
image/mess/pay1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
image/mess/pay2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1023 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 915 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

BIN
image/skin/ball(shaw).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
image/skin/classic(_).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
image/skin/glow(mrz).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
image/skin/jelly(miya).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
image/skin/normal(mrz).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

BIN
image/skin/paper(mrz).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
image/skin/plastic(mrz).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
image/skin/pure(mrz).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

BIN
image/skin/smooth(mrz).png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,334 +0,0 @@
local BK="返回"
local actName={
"左移:","右移:",
"顺时针旋转:","逆时针旋转:","180°旋转:",
"硬降:","软降:",
"暂存:","功能键:",
"重新开始:",
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
"落在最左:","落在最右:","列在最左:","列在最右:",
}
return{
lang="中文",
atkModeName={"随机","徽章","击杀","反击"},
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
techrash="Techrash",
techrashB2B="B2B Techrash",
techrashB3B="B2B2B Techrash",
block={"Z","S","L","J","T","O","I"},
clear={" single"," double"," triple"},
spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"},
b2b="B2B ",b3b="B2B2B ",
mini="Mini",
PC="Perfect Clear",
hold="暂存",next="下一个",
stage=function(n)return"关卡 "..n end,
great="Great!",
awesome="Awesome.",
continue="Continue.",
maxspeed="最高速度",
speedup="速度加快",
win="胜利",
finish="结束",
lose="失败",
pause="暂停",
pauseCount="暂停统计",
custom="自定义游戏",
customOption={
drop="下落速度:",
lock="锁定延迟:",
wait="放块延迟:",
fall="消行延迟:",
next="序列数量:",
hold="暂存:",
sequence="序列:",
visible="可见性:",
target="目标行数:",
freshLimit="锁延刷新次数:",
opponent="对手速度等级:",
bg="背景:",
bgm="背景音乐:",
},
customVal={
drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil,
fall=nil,
next=nil,
hold={"","","无限"},
sequence={"bag7","his4","随机"},
visible={"可见","半隐","全隐","瞬隐"},
target={10,20,40,100,200,500,1000,""},
freshLimit={0,8,15,""},
opponent={"无电脑","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
},
softdropdas="软降DAS:",
softdroparr="软降ARR:",
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
keyboard="键盘",joystick="手柄",
space="空格",enter="回车",
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
setting_game="游戏设置",
setting_graphic="画面设置",
setting_sound="声音设置",
musicRoom="音乐室",
nowPlaying="正在播放:",
unlockSavingError="解锁保存失败:",
recSavingError="纪录保存失败:",
statSavingError="数据保存失败:",
settingSaved="设置已保存",
settingSavingError="设置保存失败:",
copySuccess="已复制到剪切板",
dataCorrupted="数据损坏",
VKTchW="触摸点权重",
VKOrgW="原始点权重",
VKCurW="当前点权重",
noScore="暂无成绩",
highScore="最佳成绩",
newRecord="打破纪录",
invalidGame="成绩无效",
errorMsg="Techmino遇到了问题,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.(回车/双击重启)",
actName=actName,
load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载模式ing","加载乱七八糟的东西ing"},
tips={
"不是动画,真的在加载!",
"大满贯10连击消四全清!",
"<方块研究所>有一个Nspire-CX版本!",
"B2B2B???",
"B2B2B2B存在吗?",
"MEGACMB!",
"ALLSPIN!",
"O spin triple!",
"Miya:喵!",
"225238922 哔哩哔哩 干杯~",
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
"合群了就会消失,但是消失不代表没有意义",
"学会使用两个旋转键,三个更好",
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
"注意到\"旋转\"到底对方块做了些什么吗?",
"20G本质是一套全新的游戏规则",
"不要在上课时玩游戏!",
"本游戏难度上限很高,做好心理准备",
"本游戏可不是休闲游戏",
"调到特殊的日期也不会发生什么的",
"3.1415926535897932384",
"2.7182818284590452353",
"Let-The-Bass-Kick!",
"使用love2d引擎制作",
"有疑问?先看设置有没有你想要的",
"有建议的话可以把信息反馈给作者~",
"不要按F8",
"秘密数字:626",
"CLASSIC SEXY RUSSIAN BLOCKS",
"戴上耳机以获得最佳体验",
"少女祈祷中",
"少女折寿中",
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
"(第一次才准)今日幸运数字:"..math.random(100,626),
},
stat={
"游戏运行次数:",
"游戏局数:",
"游戏时间:",
"按键数:",
"旋转数:",
"Hold次数:",
"方块使用数:",
"消行数:",
"攻击数:",
"发送数:",
"接收数:",
"上涨数:",
"消除数:",
"Spin数:",
"B2B数:",
"PC数:",
"效率:",
"多余操作:",
"最简操作率:",
},
help={
"好像也没啥好帮助的吧?就当是关于了",
"这只是一个普通的方块游戏,请勿称此游戏为某某某方块",
"不过就当成TOP/C2/KOS/TGM3/JS玩好了",
"游戏还在测试阶段,请 勿 外 传",
"",
"使用LOVE2D引擎",
"作者:MrZ 邮箱:1046101471@qq.com",
"程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:Miya",
"特别感谢:Farter,Flyz,196,Teatube,T830,[所有测试人员]和 你!",
"错误或者建议请附带相关信息发送到作者邮箱~",
},
used=[[
使用工具:
Beepbox
GFIE
Goldwave
使用库:
Cold_Clear[MinusKelvin]
simple-love-lights[dylhunn]
]],
support="支持作者",
group="官方QQ群",
warning="禁止直接传播游戏本体",
WidgetText={
main={
play="开始",
setting="设置",
music="音乐室",
stat="统计信息",
help="帮助",
qplay="快速开始",
lang="言/A",
quit="退出",
},
mode={
draw="画图(Q)",
setting="参数(E)",
start="开始",
back=BK,
},
music={
bgm="BGM",
up="",
play="播放",
down="",
back=BK,
},
custom={
up="",
down="",
left="",
right="",
set1="40行(1)",
set2="1v1(2)",
set3="无尽(3)",
set4="隐形(4)",
set5="极限(5)",
back=BK,
},
draw={
any="不定",
block1="Z",
block2="S",
block3="L",
block4="J",
block5="T",
block6="O",
block7="I",
gb1="",
gb2="",
gb3="",
gb4="",
gb5="",
space="×",
clear="清除",
demo="演示模式",
copy="复制",
paste="粘贴",
back=BK,
},
play={
pause="暂停",
},
pause={
resume= "继续",
restart="重新开始",
setting="设置",
quit= "退出",
},
setting_game={
graphic="←画面设置",
sound="声音设置→",
dasD="-",dasU="+",
arrD="-",arrU="+",
sddasD="-",sddasU="+",
sdarrD="-",sdarrU="+",
reTime="开局等待时间",
maxNext="最大预览数量",
quickR="快速重新开始",
autoPause="自动暂停",
swap="组合键切换攻击模式",
fine="极简操作提示音",
ctrl="键位设置",
touch="触屏设置",
back=BK,
},
setting_graphic={
sound="←声音设置",
game="游戏设置→",
ghost="阴影",
grid="网格",
center="旋转中心",
skin="皮肤",
bg="背景",
bgspace="星空背景",
smo="平滑下落",
dropFX="下落特效等级",
shakeFX="晃动特效等级",
atkFX="攻击特效等级",
fullscreen="全屏",
frame="绘制帧率",
back=BK,
},
setting_sound={
game="←游戏设置",
graphic="画面设置→",
sfx="音效",
bgm="音乐",
vib="震动",
voc="语音",
stereo="立体声",
back=BK,
},
setting_key={
back=BK,
},
setting_touch={
default="默认组合",
snap=function()return text.snapLevelName[sceneTemp.snap]end,
option="选项",
back=BK,
size="大小",
},
setting_touchSwitch={
b1= actName[1],b2=actName[2],b3=actName[3],b4=actName[4],
b5= actName[5],b6=actName[6],b7=actName[7],b8=actName[8],
b9= actName[9],b10=actName[10],b11=actName[11],b12=actName[12],
b13=actName[13],b14=actName[14],b15=actName[15],b16=actName[16],
b17=actName[17],b18=actName[18],b19=actName[19],b20=actName[20],
norm="标准",
pro="专业",
hide="显示虚拟按键",
track="按键自动跟踪",
icon="图标",
tkset="跟踪设置",
alpha="透明度",
back=BK,
},
setting_trackSetting={
VKDodge="自动避让",
back=BK,
},
help={
his="历史",
qq="作者QQ",
back=BK,
},
history={
prev="",
next="",
back=BK,
},
stat={
path="打开存储目录",
back=BK,
},
},
}--文

View File

@@ -1,335 +0,0 @@
local BK="返回"
local actName={
"左移:","右移:",
"顺时针旋转:","逆时针旋转:","180°旋转:",
"硬降:","软降:",
"暂存:","功能键:",
"重新开始:",
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
"落在最左:","落在最右:","列在最左:","列在最右:",
}
return{
lang="全中文",
atkModeName={"随机","徽章","击杀","反击"},
royale_remain=function(n)return"剩余 "..n.." 名玩家"end,
cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
techrash="四清",
techrashB2B="满贯 四清",
techrashB3B="大满贯 四清",
block={"Z","S","L","J","T","O","I"},
clear={"单清","双清","三清"},
spin={"Z型回旋","S型回旋","L型回旋","J型回旋","T型回旋","O型回旋","I型回旋"},
b2b="满贯",b3b="大满贯",
mini="迷你",
PC="场地全清",
hold="暂存",next="下一个",
stage=function(n)return"关卡 "..n end,
great="不错!",
awesome="精彩。",
continue="继续。",
maxspeed="最高速度",
speedup="速度加快",
win="胜利",
finish="结束",
lose="失败",
pause="暂停",
pauseCount="暂停统计",
custom="自定义游戏",
customOption={
drop="下落速度:",
lock="锁定延迟:",
wait="放块延迟:",
fall="消行延迟:",
next="序列数量:",
hold="暂存:",
sequence="序列:",
visible="可见性:",
target="目标行数:",
freshLimit="锁延刷新次数:",
opponent="对手速度等级:",
bg="背景:",
bgm="背景音乐:",
},
customVal={
drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil,
fall=nil,
next=nil,
hold={"","","无限"},
sequence={"bag7","his4","随机"},
visible={"可见","半隐","全隐","瞬隐"},
target={10,20,40,100,200,500,1000,""},
freshLimit={0,8,15,""},
opponent={"无电脑","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
},
softdropdas="软降DAS:",
softdroparr="软降ARR:",
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
keyboard="键盘",joystick="手柄",
space="空格",enter="回车",
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
setting_game="游戏设置",
setting_graphic="画面设置",
setting_sound="声音设置",
musicRoom="音乐室",
nowPlaying="正在播放:",
unlockSavingError="解锁保存失败:",
recSavingError="纪录保存失败:",
statSavingError="数据保存失败:",
settingSaved="设置已保存",
settingSavingError="设置保存失败:",
copySuccess="已复制到剪切板",
dataCorrupted="数据损坏",
VKTchW="触摸点权重",
VKOrgW="原始点权重",
VKCurW="当前点权重",
noScore="暂无成绩",
highScore="最佳成绩",
newRecord="打破纪录",
invalidGame="成绩无效",
errorMsg="Techmino遇到了问题,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.(回车/双击重启)",
actName=actName,
load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载模式ing","加载乱七八糟的东西ing"},
tips={
"不是动画,真的在加载!",
"大满贯10连击消四全清!",
"<方块研究所>有一个Nspire-CX版本!",
"B2B2B???",
"B2B2B2B存在吗?",
"MEGACMB!",
"ALLSPIN!",
"O型回旋三清!",
"Miya:喵!",
"225238922 哔哩哔哩 干杯~",
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
"合群了就会消失,但是消失不代表没有意义",
"学会使用两个旋转键,三个更好",
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
"注意到\"旋转\"到底对方块做了些什么吗?",
"20G本质是一套全新的游戏规则",
"不要在上课时玩游戏!",
"本游戏难度上限很高,做好心理准备",
"本游戏可不是休闲游戏",
"调到特殊的日期也不会发生什么的",
"3.1415926535897932384",
"2.7182818284590452353",
"Let-The-Bass-Kick!",
"使用love2d引擎制作",
"有疑问?先看设置有没有你想要的",
"有建议的话可以把信息反馈给作者~",
"不要按F8",
"秘密数字:626",
"CLASSIC SEXY RUSSIAN BLOCKS",
"戴上耳机以获得最佳体验",
"少女祈祷中",
"少女折寿中",
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
"(第一次才准)今日幸运数字:"..math.random(100,626),
},
stat={
"游戏运行次数:",
"游戏局数:",
"游戏时间:",
"按键数:",
"旋转数:",
"暂存次数:",
"方块使用:",
"消行数:",
"攻击行数:",
"发送数:",
"接收数:",
"上涨数:",
"消除数:",
"旋转消行数:",
"满贯数:",
"全清数:",
"效率:",
"多余操作:",
"最简操作率:",
},
help={
"好像也没啥好帮助的吧?就当是关于了",
"这只是一个普通的方块游戏,请勿称此游戏为某某某方块",
"不过就当成TOP/C2/KOS/TGM3/JS玩好了",
"游戏还在测试阶段,请 勿 外 传",
"",
"使用LOVE2D引擎",
"作者:MrZ 邮箱:1046101471@qq.com",
"程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:Miya",
"特别感谢:Farter,Flyz,196,Teatube,T830,[所有测试人员]和 你!",
"错误或者建议请附带相关信息发送到作者邮箱~",
},
used=[[
使用工具:
Beepbox
GFIE
Goldwave
使用库:
Cold_Clear[MinusKelvin]
simple-love-lights[dylhunn]
]],
support="支持作者",
group="官方QQ群",
warning="禁止直接传播游戏本体",
WidgetText={
main={
play="开始",
setting="设置",
music="音乐室",
stat="统计信息",
help="帮助",
qplay="快速开始",
lang="言/A",
quit="退出",
},
mode={
draw="画图(Q)",
setting="参数(E)",
start="开始",
back=BK,
},
music={
bgm="BGM",
up="",
play="播放",
down="",
back=BK,
},
custom={
up="",
down="",
left="",
right="",
set1="40行(1)",
set2="1v1(2)",
set3="无尽(3)",
set4="隐形(4)",
set5="极限(5)",
back=BK,
},
draw={
any="不定",
block1="Z",
block2="S",
block3="L",
block4="J",
block5="T",
block6="O",
block7="I",
gb1="",
gb2="",
gb3="",
gb4="",
gb5="",
space="×",
clear="清除",
demo="演示模式",
copy="复制",
paste="粘贴",
back=BK,
},
play={
pause="暂停",
},
pause={
resume= "继续",
restart="重新开始",
setting="设置",
quit= "退出",
},
setting_game={
graphic="←画面设置",
sound="声音设置→",
dasD="-",dasU="+",
arrD="-",arrU="+",
sddasD="-",sddasU="+",
sdarrD="-",sdarrU="+",
reTime="开局等待时间",
maxNext="最大预览数量",
autoPause="自动暂停",
quickR="快速重新开始",
swap="组合键切换攻击模式",
fine="极简操作提示音",
ctrl="键位设置",
touch="触屏设置",
back=BK,
},
setting_graphic={
sound="←声音设置",
game="游戏设置→",
ghost="阴影",
grid="网格",
center="旋转中心",
skin="皮肤",
bg="背景",
bgspace="星空背景",
smo="平滑下落",
dropFX="下落特效等级",
shakeFX="晃动特效等级",
atkFX="攻击特效等级",
fullscreen="全屏",
frame="绘制帧率",
back=BK,
},
setting_sound={
game="←游戏设置",
graphic="画面设置→",
sfx="音效",
bgm="音乐",
vib="震动",
voc="语音",
stereo="立体声",
back=BK,
},
setting_key={
back=BK,
},
setting_touch={
default="默认组合",
snap=function()return text.snapLevelName[sceneTemp.snap]end,
option="选项",
back=BK,
size="大小",
},
setting_touchSwitch={
b1= actName[1],b2=actName[2],b3=actName[3],b4=actName[4],
b5= actName[5],b6=actName[6],b7=actName[7],b8=actName[8],
b9= actName[9],b10=actName[10],b11=actName[11],b12=actName[12],
b13=actName[13],b14=actName[14],b15=actName[15],b16=actName[16],
b17=actName[17],b18=actName[18],b19=actName[19],b20=actName[20],
norm="标准",
pro="专业",
hide="显示虚拟按键",
track="按键自动跟踪",
icon="图标",
tkset="跟踪设置",
alpha="透明度",
back=BK,
},
setting_trackSetting={
VKDodge="自动避让",
back=BK,
},
help={
his="历史",
qq="作者QQ",
back=BK,
},
history={
prev="",
next="",
back=BK,
},
stat={
path="打开存储目录",
back=BK,
},
},
}--译

View File

@@ -1,332 +0,0 @@
local BK="Back"
local actName={
"Move Left:","Move Right:",
"Rotate Right:","Rotate Left:","Rotate Flip:",
"Hard Drop:","Soft Drop:","Hold:","Function:","Restart:",
"Instant Left:","Instant Right:","Ins Down:","Down 1:","Down 4:","Down 10:",
"Left Drop:","Right Drop:","Left INS:","Right INS:",
}
return{
lang="English",
atkModeName={"Random","Badges","K.O.s","Counters"},
royale_remain=function(n)return n.." Players Remain"end,
cmb={nil,nil,"3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
techrash="Techrash",
techrashB2B="B2B Techrash",
techrashB3B="B2B2B Techrash",
block={"Z","S","L","J","T","O","I"},
clear={" single"," double"," triple"},
spin={"Z-spin","S-spin","L-spin","J-spin","T-spin","O-spin","I-spin"},
b2b="B2B ",b3b="B2B2B ",
mini="Mini",
PC="Perfect Clear",
hold="Hold",next="Next",
stage=function(n)return"STAGE "..n end,
great="Great!",
awesome="Awesome.",
continue="Continue.",
maxspeed="Max speed",
speedup="Speed up",
win="WIN",
finish="FINISH",
lose="LOSE",
pause="PAUSE",
pauseCount="Pause Count",
custom="Custom Game",
customOption={
drop="Drop speed:",
lock="Lock delay:",
wait="Next piece delay:",
fall="Clear row delay:",
next="Next count:",
hold="Hold:",
sequence="Sequence:",
visible="Visible:",
target="Line limit:",
freshLimit="Lock fresh limit:",
opponent="Opponent speed:",
bg="Background:",
bgm="BGM:",
},
customVal={
drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,""},
wait=nil,
fall=nil,
next=nil,
hold={"ON","OFF","FREE"},
sequence={"bag7","his4","random"},
visible={"normal","time","invisible","sudden"},
target={10,20,40,100,200,500,1000,""},
freshLimit={0,8,15,""},
opponent={"No CPU","9S Lv1","9S Lv2","9S Lv3","9S Lv4","9S Lv5","CC Lv1","CC Lv2","CC Lv3","CC Lv4","CC Lv5","CC Lv6"},
},
softdropdas="Down DAS:",
softdroparr="Down ARR:",
snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"},
keyboard="Keyboard",joystick="Joystick",
space="Space",enter="Enter",
ctrlSetHelp="Arrowkey to select/change slot,Enter to change,Esc back",
setting_game="Game setting",
setting_graphic="Graphic setting",
setting_sound="Sound setting",
musicRoom="Music Room",
nowPlaying="Now Playing:",
unlockSavingError="Failed to save unlock:",
recSavingError="Failed to save record:",
statSavingError="Failed to save stat:",
settingSaved="Setting Saved",
settingSavingError="Failed to save setting:",
copySuccess="Copy Success",
dataCorrupted="Data Corrupted",
VKTchW="Touch weight",
VKOrgW="Origion weight",
VKCurW="CurPos weight",
noScore="No Score Yet",
highScore="Highscore",
newRecord="New Rocord",
invalidGame="Invalid Game",
errorMsg="Techmino ran into a problem and needs to restart.\nWe collected some error info,and you can send them to author.(enter/DblClick to restart)",
actName=actName,
load={[0]="Finished","Loading VOICE","Loading BGM","Loading SFX","Loading modes","Loading other things"},
tips={
"Not animation,real loading!",
"Back to Back 10 combo Techrash PC!",
"Techmino has a Nspire-CX edition!",
"B2B2B???",
"Is B2B2B2B possible?",
"MEGACMB!",
"ALLSPIN!",
"O spin triple!",
"Miya:Nya!",
"225238922 Bilibili cheers!",
"Playing too much = taking drugs",
"Disappearing doesn't mean useless",
"Try to use two rotate button,three better",
"Small DAS&ARR can make you faster,if you can control block correctly",
"Have you noticed what does \"rotating\" do to block?",
"20G actually is a brand new game rule",
"Do not play game in class!",
"This game can be very hard,be mentally perpared",
"This in not a casual game",
"Nothing will happen when some special day come",
"3.1415926535897932384",
"2.7182818284590452353",
"Let-The-Bass-Kick!",
"Powered by love2d",
"Find out what's in the setting!",
"Any suggestions to author!",
"DO NOT PRESS F8",
"Secret num:626",
"Techmino=Technique+Tetromino",
"CLASSIC SEXY RUSSIAN BLOCKS",
"Headphones for better experience",
"少女祈禱中",
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
"(first effective)Your luck number today:"..math.random(100,626),
},
stat={
"Games run:",
"Games played:",
"Game time:",
"Key pressed:",
"Rotate:",
"Hold:",
"Block used:",
"Lines cleared:",
"Attack:",
"Sent:",
"Receive:",
"Pend:",
"Clear:",
"Spin:",
"B2B:",
"PC:",
"Efficiency:",
"Finesse error:",
"Finesse rate:",
},
help={
"I don't think you need \"help\".",
"THIS IS ONLY A BLOCK GAME,not T****s",
"But just play like playing TOP/C2/KOS/TGM3",
"Game is not public now,so DO NOT DISTIRBUTE",
"",
"Powered by LOVE2D",
"Author:MrZ E-mail:1046101471@qq.com",
"Program:MrZ Art:MrZ Music:MrZ SFX:MrZ VOICE:Miya",
"Special thanks:Farter,Flyz,196,Teatube,T830,[all test staff] and YOU!",
"Any bugs/suggestions to my E-mail.",
},
used=[[
Tool used:
Beepbox
GFIE
Goldwave
Lib used:
Cold_Clear[MinusKelvin]
simple-love-lights[dylhunn]
]],
support="Support Author",
group="Official QQ Group",
warning="DO NOT SHARE APP",
WidgetText={
main={
play="Play",
setting="Settings",
music="Music room",
stat="Statistics",
help="Help",
qplay="qPlay",
lang="言/A",
quit="Quit",
},
mode={
draw="Draw(Q)",
setting="Setting(E)",
start="Start",
back=BK,
},
music={
bgm="BGM",
up="",
play="Play",
down="",
back=BK,
},
custom={
up="",
down="",
left="",
right="",
set1="40L(1)",
set2="1v1(2)",
set3="infinite(3)",
set4="blind(4)",
set5="master(5)",
back=BK,
},
draw={
any="ANY",
block1="Z",
block2="S",
block3="L",
block4="J",
block5="T",
block6="O",
block7="I",
gb1="",
gb2="",
gb3="",
gb4="",
gb5="",
space="×",
clear="Clear",
demo="Demo",
copy="Copy",
paste="Paste",
back=BK,
},
play={
pause="Pause",
},
pause={
resume="Resume",
restart="Restart",
setting="Setting",
quit="Quit",
},
setting_game={
graphic="←Graphic",
sound="Sound→",
dasD="-",dasU="+",
arrD="-",arrU="+",
sddasD="-",sddasU="+",
sdarrD="-",sdarrU="+",
reTime="Delay before game",
maxNext="Max next count",
quickR="Quick restart",
autoPause="Auto pause",
swap="Combo key to change ATK mode",
fine="Finesse error SFX",
ctrl="Key Setting",
touch="Touch Setting",
back=BK,
},
setting_graphic={
sound="←Sound",
game="Game→",
ghost="Ghost",
grid="Grid",
center="Center",
skin="Skin",
bg="Background",
bgspace="BG space",
smo="Smoooth drop",
dropFX="Drop FX level",
shakeFX="Shake FX level",
atkFX="ATK FX level",
fullscreen="Fullscreen",
frame="draw FPS",
back=BK,
},
setting_sound={
game="←Game",
graphic="Graphic→",
sfx="SFX",
bgm="BGM",
vib="VIB",
voc="VOC",
stereo="Stereo",
back=BK,
},
setting_key={
back=BK,
},
setting_touch={
default="Defaults",
snap=function()return text.snapLevelName[sceneTemp.snap]end,
option="Option",
back=BK,
size="Size",
},
setting_touchSwitch={
b1= actName[1],b2=actName[2],b3=actName[3],b4=actName[4],
b5= actName[5],b6=actName[6],b7=actName[7],b8=actName[8],
b9= actName[9],b10=actName[10],b11=actName[11],b12=actName[12],
b13=actName[13],b14=actName[14],b15=actName[15],b16=actName[16],
b17=actName[17],b18=actName[18],b19=actName[19],b20=actName[20],
norm="Normal",
pro="Professioanl",
hide="Show Virtual Key",
track="Auto track",
icon="Icon",
tkset="Track setting",
alpha="Alpha",
back=BK,
},
setting_trackSetting={
VKDodge="Auto Dodge",
back=BK,
},
help={
his="History",
qq="Author's qq",
back=BK,
},
history={
prev="",
next="",
back=BK,
},
stat={
path="Open Data Folder",
back=BK,
},
}
}

146
list.lua
View File

@@ -1,146 +0,0 @@
actName={
"moveLeft","moveRight",
"rotRight","rotLeft","rotFlip",
"hardDrop","softDrop",
"hold","func",
"restart",
"insLeft","insRight","insDown","down1","down4","down10",
"dropLeft","dropRight","addLeft","addRight",--Super contorl system
}
color={
red={1,0,0},
green={0,1,0},
blue={.2,.2,1},
yellow={1,1,0},
magenta={1,0,1},
cyan={0,1,1},
grey={.6,.6,.6},
lightRed={1,.5,.5},
lightGreen={.5,1,.5},
lightBlue={.6,.6,1},
lightYellow={1,1,.5},
lightMagenta={1,.5,1},
lightCyan={.5,1,1},
lightGrey={.8,.8,.8},
darkRed={.6,0,0},
darkGreen={0,.6,0},
darkBlue={0,0,.6},
darkYellow={.6,.6,0},
darkMagenta={.6,0,.6},
darkCyan={0,.6,.6},
darkGrey={.3,.3,.3},
white={1,1,1},
bronze={.7,.4,0},
orange={1,.6,0},
lightOrange={1,.7,.3},
darkOrange={.6,.4,0},
purple={.5,0,1},
lightPurple={.8,.4,1},
darkPurple={.3,0,.6},
}
blockColor={
color.red,
color.green,
color.orange,
color.blue,
color.magenta,
color.yellow,
color.cyan,
color.darkGreen,
color.grey,
color.lightGrey,
color.darkPurple,
color.darkRed,
color.darkGreen,
}
voiceBank={}--{{srcs1},{srcs2},...}
voiceName={
"zspin","sspin","lspin","jspin","tspin","ospin","ispin",
"single","double","triple","techrash",
"mini","b2b","b3b","pc",
"win","lose",
"bye",
"nya",
"happy",
"doubt",
"sad",
"egg",
}
voiceList={
zspin={"zspin_1","zspin_2","zspin_3"},
sspin={"sspin_1","sspin_2","sspin_3","sspin_4","sspin_5","sspin_6"},
lspin={"lspin_1","lspin_2"},
jspin={"jspin_1","jspin_2","jspin_3","jspin_4"},
tspin={"tspin_1","tspin_2","tspin_3","tspin_4","tspin_5","tspin_6"},
ospin={"ospin_1","ospin_2","ospin_3"},
ispin={"ispin_1","ispin_2","ispin_3"},
single={"single_1","single_2","single_3","single_4","single_5","single_6","single_7"},
double={"double_1","double_2","double_3","double_4","double_5"},
triple={"triple_1","triple_2","triple_3","triple_4","triple_5","triple_6","triple_7"},
techrash={"techrash_1","techrash_2","techrash_3","techrash_4"},
mini={"mini_1","mini_2","mini_3"},
b2b={"b2b_1","b2b_2","b2b_3"},
b3b={"b3b_1","b3b_2"},
pc={"pc_1","pc_2"},
win={"win_1","win_2","win_3","win_4","win_5","win_6","win_6","win_7"},
lose={"lose_1","lose_2","lose_3"},
bye={"bye_1","bye_2"},
nya={"nya_1","nya_2","nya_3","nya_4"},
happy={"nya_happy_1","nya_happy_2","nya_happy_3","nya_happy_4"},
doubt={"nya_doubt_1","nya_doubt_2"},
sad={"nya_sad_1"},
egg={"egg_1","egg_2"},
}
musicID={
"blank",
"way",
"race",
"newera",
"push",
"reason",
"infinite",
"secret7th",
"secret8th",
"shining terminal",
"oxygen",
"distortion",
"rockblock",
"cruelty",
"final",
"8-bit happiness",
"end",
}
customID={
"drop","lock",
"wait","fall",
"next","hold",
"sequence","visible",
"target",
"freshLimit",
"opponent",
"bg","bgm",
}
customRange={
drop={1e99,180,60,40,30,25,20,18,16,14,12,10,9,8,7,6,5,4,3,2,1,.5,.25,.125,0},
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
wait={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
next={0,1,2,3,4,5,6},
hold={true,false,true},
sequence={"bag7","his4","rnd"},
visible={"show","time","fast","none"},
target={10,20,40,100,200,500,1000,1e99},
freshLimit={0,8,15,1e99},
opponent={0,1,2,3,4,5,11,12,13,14,15,16},
bg={"none","game1","game2","game3","strap","rgb","glow","matrix"},
bgm={"blank","way","race","newera","push","reason","infinite","secret7th","secret8th","rockblock"},
}
RCPB={10,33,200,33,105,5,105,60}
snapLevelValue={1,10,20,40,60,80}

1423
main.lua

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@ local sectionName={"M7","M8","M9","M","MK","MV","MO","MM","GM"}
local function score(P)
local F=false
if P.modeData.point<70 then--if Less then MM
local R=#P.cleared
local R=#P.clearedRow
if R==0 then return end
if R==4 then R=10 end
P.modeData.point=P.modeData.point+R
@@ -12,23 +12,10 @@ local function score(P)
end
return{
name={
"宗师",
"宗师",
"GrandMaster",
},
level={
"GM",
"GM",
"GM",
},
info={
"成为方块大师",
"成为方块大师",
"To be Grand Master",
},
color=color.lightBlue,
env={
noFly=true,
minarr=1,
_20G=true,
drop=0,lock=15,
wait=15,fall=6,
@@ -40,26 +27,25 @@ return{
if P.stat.time>=53.5 then
P.modeData.point=min(P.modeData.point+16,80)
P.modeData.event=sectionName[int(P.modeData.point*.1)+1]
Event.win(P,"finish")
P:win("finish")
end
end,
minarr=1,
bg="game3",bgm="shining terminal",
bg="aura",bgm="far",
},
slowMark=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
players[1].modeData.event="M7"
end,
mesDisp=function(P,dx,dy)
mDraw(drawableText.line,-82,300)
mDraw(drawableText.techrash,-82,420)
mDraw(drawableText.grade,-82,170)
mText(drawableText.line,-81,300)
mText(drawableText.techrash,-81,420)
mText(drawableText.grade,-81,170)
setFont(55)
mStr(P.modeData.event,-82,110)
mStr(P.modeData.event,-81,110)
setFont(75)
mStr(P.stat.row,-82,220)
mStr(P.stat.clear_4,-82,340)
mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340)
end,
score=function(P)return{P.modeData.point,P.stat.score}end,
scoreDisp=function(D)return sectionName[int(D[1]*.1)+1].." "..D[2]end,

View File

@@ -1,20 +1,5 @@
local int,rnd=math.floor,math.random
return{
name={
"进攻",
"进攻",
"Attacker",
},
level={
"困难",
"困难",
"HARD",
},
info={
"进攻练习",
"进攻练习",
"Attacking better then defending",
},
color=color.magenta,
env={
drop=30,lock=60,
@@ -22,7 +7,7 @@ return{
freshLimit=15,
pushSpeed=2,
task=function(P)
if not(P.control and scene.cur=="play")then return end
if not(P.control and SCN.cur=="play")then return end
if P.atkBuffer.sum==0 then
local p=#P.atkBuffer+1
local B,D=P.atkBuffer,P.modeData
@@ -42,10 +27,10 @@ return{
D.event=D.event+1
D.point=int(72e4/t)*.1
if D.event==20 then
P:showText(text.great,0,-140,100,"appear",.6)
P:showTextF(text.great,0,-140,100,"appear",.6)
P.gameEnv.pushSpeed=3
elseif D.event==50 then
P:showText(text.maxspeed,0,-140,100,"appear",.6)
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
end
end
end
@@ -54,20 +39,26 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(55)
mStr(P.modeData.event,-82,200)
mStr("24",-82,320)
mDraw(drawableText.wave,-82,260)
mDraw(drawableText.nextWave,-82,380)
mStr(P.modeData.event,-81,200)
mStr("24",-81,320)
mText(drawableText.wave,-81,260)
mText(drawableText.nextWave,-81,380)
end,
score=function(P)return{P.modeData.event,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..toTime(D[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)
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,
}

View File

@@ -1,27 +1,12 @@
local int,rnd=math.floor,math.random
return{
name={
"进攻",
"进攻",
"Attacker",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"进攻练习",
"进攻练习",
"Attacking better then defending",
},
color=color.lightYellow,
env={
drop=5,lock=60,
fall=8,
freshLimit=15,
task=function(P)
if not(P.control and scene.cur=="play")then return end
if not(P.control and SCN.cur=="play")then return end
if P.atkBuffer.sum<2 then
local p=#P.atkBuffer+1
local B,D=P.atkBuffer,P.modeData
@@ -48,13 +33,13 @@ return{
D.event=D.event+1
D.point=int(s*36e3/t)*.1
if D.event==10 then
P:showText(text.great,0,-140,100,"appear",.6)
P:showTextF(text.great,0,-140,100,"appear",.6)
P.gameEnv.pushSpeed=4
elseif D.event==20 then
P:showText(text.awesome,0,-140,100,"appear",.6)
P:showTextF(text.awesome,0,-140,100,"appear",.6)
P.gameEnv.pushSpeed=5
elseif D.event==30 then
P:showText(text.maxspeed,0,-140,100,"appear",.6)
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
end
end
end
@@ -63,24 +48,30 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(55)
mStr(P.modeData.event,-82,200)
mStr(P.modeData.event,-81,200)
mStr(
P.modeData.event<10 and 22
or P.modeData.event<20 and 25
or 28
,-82,320)
mDraw(drawableText.wave,-82,260)
mDraw(drawableText.nextWave,-82,380)
,-81,320)
mText(drawableText.wave,-81,260)
mText(drawableText.nextWave,-81,380)
end,
score=function(P)return{P.modeData.event,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..toTime(D[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)
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,
}

View File

@@ -4,35 +4,20 @@ local function getField()
return F
end
local function newField(P)
end
return{
name={
"大爆炸",
"大爆炸",
"Big Bang",
},
level={
"简单",
"简单",
"EASY",
},
info={
"All-spin 入门教程\n未制作完成,下块即通",
"All-spin 入门教程\n未制作完成,下块即通",
"All-spin Tutorial!\nUNFINISHED drop to win",
},
color=color.lightGrey,
env={
drop=1e99,lock=1e99,
hold=false,
dropPiece=Event.lose,
dropPiece=function(P)P:lose()end,
task=nil,
bg="game1",bgm="newera",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
end,

View File

@@ -1,39 +1,24 @@
local min=math.min
return{
name={
"隐形",
"隐形",
"Blind",
},
level={
"半隐",
"半隐",
"HALF",
},
info={
"最强大脑",
"最强大脑",
"Invisible board",
},
color=color.cyan,
env={
drop=30,lock=45,
visible="time",
dropPiece=Event.reach_winCheck,
dropPiece=PLY.reach_winCheck,
freshLimit=10,
target=200,
bg="glow",bgm="newera",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
mDraw(drawableText.line,-82,300)
mDraw(drawableText.techrash,-82,420)
mText(drawableText.line,-81,300)
mText(drawableText.techrash,-81,420)
setFont(75)
mStr(P.stat.row,-82,220)
mStr(P.stat.clear_4,-82,340)
mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340)
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,

View File

@@ -1,41 +1,29 @@
local gc=love.graphics
local min=math.min
return{
name={
"隐形",
"隐形",
"Blind",
},
level={
"瞬隐",
"瞬隐",
"SUDDEN",
},
info={
"最强大脑",
"最强大脑",
"Invisible board",
},
color=color.magenta,
env={
drop=15,lock=45,
fall=10,lock=60,
center=false,
visible="none",
dropPiece=Event.reach_winCheck,
dropPiece=PLY.reach_winCheck,
freshLimit=15,
target=200,
bg="rgb",bgm="secret7th",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
mDraw(drawableText.line,-82,300)
mDraw(drawableText.techrash,-82,420)
mText(drawableText.line,-81,300)
mText(drawableText.techrash,-81,420)
setFont(75)
mStr(P.stat.row,-82,220)
mStr(P.stat.clear_4,-82,340)
mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340)
gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6)
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,

View File

@@ -1,41 +1,30 @@
local gc=love.graphics
local min=math.min
return{
name={
"隐形",
"隐形",
"Blind",
},
level={
"瞬隐+",
"瞬隐+",
"SUDDEN+",
},
info={
"最强大脑",
"最强大脑",
"Invisible board",
},
color=color.red,
env={
drop=10,lock=60,
fall=5,
center=false,ghost=false,
dropFX=0,lockFX=0,
visible="none",
dropPiece=Event.reach_winCheck,
dropPiece=PLY.reach_winCheck,
freshLimit=15,
target=200,
bg="rgb",bgm="secret8th",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
mDraw(drawableText.line,-82,300)
mDraw(drawableText.techrash,-82,420)
mText(drawableText.line,-81,300)
mText(drawableText.techrash,-81,420)
setFont(75)
mStr(P.stat.row,-82,220)
mStr(P.stat.clear_4,-82,340)
mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340)
gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6)
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,

View File

@@ -1,40 +1,28 @@
local gc=love.graphics
local min=math.min
return{
name={
"隐形",
"隐形",
"Blind",
},
level={
"全隐",
"全隐",
"ALL",
},
info={
"最强大脑",
"最强大脑",
"Invisible board",
},
color=color.green,
env={
drop=15,lock=45,
freshLimit=10,
visible="fast",
dropPiece=Event.reach_winCheck,
dropPiece=PLY.reach_winCheck,
freshLimit=10,
target=200,
bg="glow",bgm="reason",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
mDraw(drawableText.line,-82,300)
mDraw(drawableText.techrash,-82,420)
mText(drawableText.line,-81,300)
mText(drawableText.techrash,-81,420)
setFont(75)
mStr(P.stat.row,-82,220)
mStr(P.stat.clear_4,-82,340)
mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340)
gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6)
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,
@@ -49,8 +37,8 @@ return{
3
else
return
L>=150 and 3 or
L>=100 and 2 or
L>=126 and 3 or
L>=80 and 2 or
L>=40 and 1 or
L>=1 and 0
end

View File

@@ -1,42 +1,31 @@
local gc=love.graphics
local min=math.min
return{
name={
"隐形",
"隐形",
"Blind",
},
level={
"啥都不剩隐",
"啥都不剩隐",
"NOTHING",
},
info={
"最强大脑",
"最强大脑",
"Invisible board",
},
color=color.red,
env={
drop=30,lock=60,
fall=5,
block=false,
center=false,ghost=false,
dropFX=0,lockFX=0,
visible="none",
dropPiece=Event.reach_winCheck,
dropPiece=PLY.reach_winCheck,
freshLimit=15,
target=200,
bg="rgb",bgm="secret7th",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
mDraw(drawableText.line,-82,300)
mDraw(drawableText.techrash,-82,420)
mText(drawableText.line,-81,300)
mText(drawableText.techrash,-81,420)
setFont(75)
mStr(P.stat.row,-82,220)
mStr(P.stat.clear_4,-82,340)
mStr(P.stat.row,-81,220)
mStr(P.stat.clear_S[4],-81,340)
gc.setColor(1,1,1,.2)
gc.draw(IMG.electric,-26,120,0,2.6)
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,

View File

@@ -1,38 +1,23 @@
local rnd,min=math.random,math.min
local function check_c4w(P)
for i=1,#P.cleared do
P.field[#P.field+1]=getNewRow(10)
P.visTime[#P.visTime+1]=getNewRow(20)
for i=1,#P.clearedRow do
P.field[#P.field+1]=freeRow.get(13)
P.visTime[#P.visTime+1]=freeRow.get(20)
for i=4,7 do P.field[#P.field][i]=0 end
end
if #P.cleared==0 then
Event.lose(P)
if #P.clearedRow==0 then
P:lose()
else
if P.combo>P.modeData.point then
P.modeData.point=P.combo
end
if P.stat.row>=100 then
Event.win(P,"finish")
P:win("finish")
end
end
end
return{
name={
"C4W练习",
"中四宽练习",
"C4W Train",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"无 限 连 击",
"无 限 连 击",
"Infinite combo",
},
color=color.red,
env={
drop=5,lock=30,
@@ -42,29 +27,29 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
local P=players[1]
local F=P.field
for i=1,24 do
F[i]=getNewRow(10)
P.visTime[i]=getNewRow(20)
F[i]=freeRow.get(13)
P.visTime[i]=freeRow.get(20)
for x=4,7 do F[i][x]=0 end
end
local r=rnd(6)
if r==1 then F[1][5],F[1][4],F[2][4]=10,10,10
elseif r==2 then F[1][6],F[1][7],F[2][7]=10,10,10
elseif r==3 then F[1][4],F[2][4],F[2][5]=10,10,10
elseif r==4 then F[1][7],F[2][7],F[2][6]=10,10,10
elseif r==5 then F[1][4],F[1][5],F[1][6]=10,10,10
elseif r==6 then F[1][7],F[1][6],F[1][5]=10,10,10
if r==1 then F[1][5],F[1][4],F[2][4]=13,13,13
elseif r==2 then F[1][6],F[1][7],F[2][7]=13,13,13
elseif r==3 then F[1][4],F[2][4],F[2][5]=13,13,13
elseif r==4 then F[1][7],F[2][7],F[2][6]=13,13,13
elseif r==5 then F[1][4],F[1][5],F[1][6]=13,13,13
elseif r==6 then F[1][7],F[1][6],F[1][5]=13,13,13
end
end,
mesDisp=function(P,dx,dy)
setFont(45)
mStr(P.combo,-82,310)
mStr(P.modeData.point,-82,400)
mDraw(drawableText.combo,-82,358)
mDraw(drawableText.mxcmb,-82,450)
mStr(P.combo,-81,310)
mStr(P.modeData.point,-81,400)
mText(drawableText.combo,-81,358)
mText(drawableText.mxcmb,-81,450)
end,
score=function(P)return{min(P.modeData.point,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Combo "..toTime(D[2])end,

View File

@@ -1,36 +1,21 @@
local rnd,min=math.random,math.min
local function check_c4w(P)
for i=1,#P.cleared do
P.field[#P.field+1]=getNewRow(10)
P.visTime[#P.visTime+1]=getNewRow(20)
for i=1,#P.clearedRow do
P.field[#P.field+1]=freeRow.get(13)
P.visTime[#P.visTime+1]=freeRow.get(20)
for i=4,7 do P.field[#P.field][i]=0 end
end
if #P.cleared>0 then
if #P.clearedRow>0 then
if P.combo>P.modeData.point then
P.modeData.point=P.combo
end
if P.stat.row>=100 then
Event.win(P,"finish")
P:win("finish")
end
end
end
return{
name={
"C4W练习",
"中四宽练习",
"C4W Train",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"无 限 连 击",
"无 限 连 击",
"Infinite combo",
},
color=color.green,
env={
drop=30,lock=60,oncehold=false,
@@ -40,29 +25,29 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
local P=players[1]
local F=P.field
for i=1,24 do
F[i]=getNewRow(10)
P.visTime[i]=getNewRow(20)
F[i]=freeRow.get(13)
P.visTime[i]=freeRow.get(20)
for x=4,7 do F[i][x]=0 end
end
local r=rnd(6)
if r==1 then F[1][5],F[1][4],F[2][4]=10,10,10
elseif r==2 then F[1][6],F[1][7],F[2][7]=10,10,10
elseif r==3 then F[1][4],F[2][4],F[2][5]=10,10,10
elseif r==4 then F[1][7],F[2][7],F[2][6]=10,10,10
elseif r==5 then F[1][4],F[1][5],F[1][6]=10,10,10
elseif r==6 then F[1][7],F[1][6],F[1][5]=10,10,10
if r==1 then F[1][5],F[1][4],F[2][4]=13,13,13
elseif r==2 then F[1][6],F[1][7],F[2][7]=13,13,13
elseif r==3 then F[1][4],F[2][4],F[2][5]=13,13,13
elseif r==4 then F[1][7],F[2][7],F[2][6]=13,13,13
elseif r==5 then F[1][4],F[1][5],F[1][6]=13,13,13
elseif r==6 then F[1][7],F[1][6],F[1][5]=13,13,13
end
end,
mesDisp=function(P,dx,dy)
setFont(45)
mStr(P.combo,-82,310)
mStr(P.modeData.point,-82,400)
mDraw(drawableText.combo,-82,358)
mDraw(drawableText.mxcmb,-82,450)
mStr(P.combo,-81,310)
mStr(P.modeData.point,-81,400)
mText(drawableText.combo,-81,358)
mText(drawableText.mxcmb,-81,450)
end,
score=function(P)return{min(P.modeData.point,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Combo "..toTime(D[2])end,

View File

@@ -12,46 +12,33 @@ local function check_LVup(P)
end
end
end
return{
name={
"高速经典",
"高速经典",
"Classic",
},
level={
"CTWC",
"锦标赛",
"CTWC",
},
info={
"高速经典",
"高速经典",
"Vintage car drag racing",
},
color=color.lightBlue,
env={
noFly=true,
das=16,arr=6,sddas=2,sdarr=2,
ghost=false,center=false,
drop=3,lock=3,wait=10,fall=25,
next=1,hold=false,
sequence="rnd",
freshLimit=0,
face={0,0,2,2,2,0,0},
target=10,dropPiece=check_LVup,
bg="rgb",bgm="rockblock",
},
slowMark=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(75)
local r=P.gameEnv.target*.1
mStr(r<11 and 18 or r<22 and r+8 or r==22 and"00"or r==23 and"0a"or format("%x",r*10-220),-82,210)
mDraw(drawableText.speedLV,-82,290)
mStr(r<11 and 18 or r<22 and r+8 or r==22 and"00"or r==23 and"0a"or format("%x",r*10-220),-81,210)
mText(drawableText.speedLV,-81,290)
setFont(45)
mStr(P.stat.row,-82,320)
mStr(P.gameEnv.target,-82,370)
mStr(P.stat.row,-81,320)
mStr(P.gameEnv.target,-81,370)
gc.rectangle("fill",-125,375,90,4)
end,
score=function(P)return{P.stat.score,P.stat.row}end,

View File

@@ -1,24 +1,9 @@
local gc=love.graphics
local int=math.floor
return{
name={
"自定义",
"自定义",
"Custom",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"画点什么然后把它消除!",
"画点什么然后把它消除!",
"Draw something then clear it!",
},
color=color.white,
env={
dropPiece=Event.reach_winCheck,
dropPiece=PLY.reach_winCheck,
},
load=function()
for i=1,#customID do
@@ -27,14 +12,14 @@ return{
end
modeEnv._20G=modeEnv.drop==0
modeEnv.oncehold=customSel[6]==1
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
local L=modeEnv.opponent
if L~=0 then
modeEnv.target=nil
if L<10 then
newPlayer(2,965,360,.5,AITemplate("9S",2*L))
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",2*L))
else
newPlayer(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
preField.h=20
@@ -50,10 +35,11 @@ return{
for _,P in next,players.alive do
local t=P.showTime*3
for y=1,preField.h do
P.field[y]=getNewRow(0)
P.visTime[y]=getNewRow(t)
P.field[y]=freeRow.get(0)
P.visTime[y]=freeRow.get(t)
for x=1,10 do P.field[y][x]=preField[y][x]end
end
P.garbageBeneath=preField.h
end
modeEnv.bg=customRange.bg[customSel[12]]
modeEnv.bgm=customRange.bgm[customSel[13]]
@@ -61,11 +47,11 @@ return{
mesDisp=function(P,dx,dy)
setFont(55)
if P.gameEnv.puzzle or P.gameEnv.target>1e10 then
mStr(P.stat.row,-82,225)
mDraw(drawableText.line,-82,290)
mStr(P.stat.row,-81,225)
mText(drawableText.line,-81,290)
else
local R=P.gameEnv.target-P.stat.row
mStr(R>=0 and R or 0,-82,240)
mStr(R>=0 and R or 0,-81,240)
end
if P.gameEnv.puzzle and P.modeData.event==0 then
local m=puzzleMark

View File

@@ -7,32 +7,17 @@ local function puzzleCheck(P)
local a,b=preField[y][x],L and L[x]or 0
if a~=0 then
if a==-1 then if b>0 then return end
elseif a<8 then if a~=b then return end
elseif a<12 then if a~=b then return end
elseif a>7 then if b==0 then return end
end
end
end
end
P.modeData.event=1
Event.win(P,"finish")
P:win("finish")
end
return{
name={
"自定义",
"自定义",
"Custom",
},
level={
"拼图",
"拼图",
"PUZZLE",
},
info={
"画点什么然后把它拼出来吧!",
"画点什么然后把它拼出来吧!",
"Draw something then stack it!",
},
color=color.white,
env={
puzzle=true,
@@ -47,14 +32,14 @@ return{
modeEnv._20G=modeEnv.drop==0
modeEnv.oncehold=customSel[6]==1
modeEnv.target=0
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
local L=modeEnv.opponent
if L~=0 then
modeEnv.target=nil
if L<10 then
newPlayer(2,965,360,.5,AITemplate("9S",2*L))
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",2*L))
else
newPlayer(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
preField.h=20
@@ -73,8 +58,8 @@ return{
mesDisp=function(P)
local dx,dy=P.fieldOff.x,P.fieldOff.y
setFont(55)
mStr(P.stat.row,-82,225)
mDraw(drawableText.line,-82,290)
mStr(P.stat.row,-81,225)
mText(drawableText.line,-81,290)
if P.gameEnv.puzzle and P.modeData.event==0 then
local m=puzzleMark
for y=1,preField.h do for x=1,10 do

View File

@@ -1,28 +1,14 @@
local int,rnd=math.floor,math.random
return{
name={
"防守",
"防守",
"Defender",
},
level={
"疯狂",
"疯狂",
"Lunatic",
},
info={
"防守练习",
"防守练习",
"Hand them!",
},
color=color.red,
env={
drop=5,lock=60,
fall=6,
next=3,
freshLimit=15,
pushSpeed=2,
task=function(P)
if not(P.control and scene.cur=="play")then return end
if not(P.control and SCN.cur=="play")then return end
P.modeData.counter=P.modeData.counter+1
local t=240-2*P.modeData.event
if P.modeData.counter>=t then
@@ -37,32 +23,32 @@ return{
D.event=D.event+1
D.point=int(144e3/(240-2*D.event))*.1
if D.event==25 then
P:showText(text.great,0,-140,100,"appear",.6)
P:showTextF(text.great,0,-140,100,"appear",.6)
P.gameEnv.pushSpeed=3
P.dropDelay,P.gameEnv.drop=4,4
elseif D.event==50 then
P:showText(text.awesome,0,-140,100,"appear",.6)
P:showTextF(text.awesome,0,-140,100,"appear",.6)
P.gameEnv.pushSpeed=4
P.dropDelay,P.gameEnv.drop=3,3
elseif D.event==75 then
P:showText(text.maxspeed,0,-140,100,"appear",.6)
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
P.dropDelay,P.gameEnv.drop=2,2
end
end
end
end,
bg="game4",bgm="way",
bg="game4",bgm="shining terminal",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(55)
mStr(P.modeData.event,-82,200)
mStr(P.modeData.point,-82,320)
mDraw(drawableText.wave,-82,260)
mDraw(drawableText.rpm,-82,380)
mStr(P.modeData.event,-81,200)
mStr(P.modeData.point,-81,320)
mText(drawableText.wave,-81,260)
mText(drawableText.rpm,-81,380)
end,
score=function(P)return{P.modeData.event,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
@@ -75,6 +61,6 @@ return{
W>=55 and 3 or
W>=30 and 2 or
W>=20 and 1 or
L>=5 and 0
W>=5 and 0
end,
}

View File

@@ -1,28 +1,14 @@
local int,rnd=math.floor,math.random
return{
name={
"防守",
"防守",
"Defender",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"防守练习",
"防守练习",
"Hand them!",
},
color=color.green,
env={
drop=30,lock=60,
fall=10,
next=3,
freshLimit=15,
pushSpeed=1,
task=function(P)
if not(P.control and scene.cur=="play")then return end
if not(P.control and SCN.cur=="play")then return end
P.modeData.counter=P.modeData.counter+1
local t=360-P.modeData.event*2
if P.modeData.counter>=t then
@@ -37,16 +23,16 @@ return{
D.event=D.event+1
D.point=int(108e3/(360-D.event*2))*.1
if D.event==25 then
P:showText(text.great,0,-140,100,"appear",.6)
P:showTextF(text.great,0,-140,100,"appear",.6)
P.gameEnv.pushSpeed=2
P.dropDelay,P.gameEnv.drop=20,20
elseif D.event==50 then
P:showText(text.awesome,0,-140,100,"appear",.6)
P:showTextF(text.awesome,0,-140,100,"appear",.6)
P.gameEnv.pushSpeed=3
P.dropDelay,P.gameEnv.drop=10,10
elseif D.event==90 then
P.dropDelay,P.gameEnv.drop=5,5
P:showText(text.maxspeed,0,-140,100,"appear",.6)
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
end
end
end
@@ -55,14 +41,14 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(55)
mStr(P.modeData.event,-82,200)
mStr(P.modeData.point,-82,320)
mDraw(drawableText.wave,-82,260)
mDraw(drawableText.rpm,-82,380)
mStr(P.modeData.event,-81,200)
mStr(P.modeData.point,-81,320)
mText(drawableText.wave,-81,260)
mText(drawableText.rpm,-81,380)
end,
score=function(P)return{P.modeData.event,P.stat.time}end,
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
@@ -75,6 +61,6 @@ return{
W>=70 and 3 or
W>=40 and 2 or
W>=10 and 1 or
L>=3 and 0
W>=3 and 0
end,
}

View File

@@ -1,31 +1,17 @@
local max,rnd=math.max,math.random
return{
name={
"挖掘",
"挖掘",
"Dig",
},
level={
"困难",
"困难",
"HARD",
},
info={
"挖掘练习",
"挖掘练习",
"Downstack!",
},
color=color.magenta,
env={
drop=60,lock=120,
fall=20,
freshLimit=15,
task=function(P)
if not(P.control and scene.cur=="play")then return end
if not(P.control and SCN.cur=="play")then return end
local D=P.modeData
D.counter=D.counter+1
if D.counter>=max(90,180-D.event)then
P:garbageRise(10,1,rnd(10))
P.stat.recv=P.stat.recv+1
D.counter=0
D.event=D.event+1
end
@@ -34,12 +20,12 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(65)
mStr(P.modeData.event,-82,310)
mDraw(drawableText.wave,-82,375)
mStr(P.modeData.event,-81,310)
mText(drawableText.wave,-81,375)
end,
score=function(P)return{P.modeData.event,P.stat.row}end,
scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
@@ -52,6 +38,6 @@ return{
W>=80 and 3 or
W>=50 and 2 or
W>=20 and 1 or
L>=5 and 0
P.stat.row>=5 and 0
end,
}

View File

@@ -1,30 +1,16 @@
local max,rnd=math.max,math.random
return{
name={
"挖掘",
"挖掘",
"Dig",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"挖掘练习",
"挖掘练习",
"Downstack!",
},
color=color.lightYellow,
env={
drop=10,lock=30,
freshLimit=15,
task=function(P)
if not(P.control and scene.cur=="play")then return end
if not(P.control and SCN.cur=="play")then return end
local D=P.modeData
D.counter=D.counter+1
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
D.counter=0
D.event=D.event+1
end
@@ -33,12 +19,12 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(65)
mStr(P.modeData.event,-82,310)
mDraw(drawableText.wave,-82,375)
mStr(P.modeData.event,-81,310)
mText(drawableText.wave,-81,375)
end,
score=function(P)return{P.modeData.event,P.stat.row}end,
scoreDisp=function(D)return D[1].." Waves "..D[2].." Lines"end,
@@ -51,6 +37,6 @@ return{
W>=80 and 3 or
W>=50 and 2 or
W>=20 and 1 or
L>=5 and 0
P.stat.row>=5 and 0
end,
}

View File

@@ -1,37 +1,101 @@
local min=math.min
local rnd,min,rem=math.random,math.min,table.remove
return{
name={
"干旱",
"干旱",
"Drought",
},
level={
"100L",
"100行",
"100L",
},
info={
"后 妈 发 牌",
"后 妈 发 牌",
"ERRSEQ flood attack",
},
color=color.red,
env={
drop=20,lock=60,
sequence="drought2",
target=100,dropPiece=Event.reach_winCheck,
sequence=function(P)
for i=1,3 do P:getNext(7)end
end,
freshMethod=function(P)
if not P.next[1] then
local height=freeRow.get(0)
local max=#P.field
for x=1,10 do
local h=max
while P.field[h][x]==0 and h>1 do
h=h-1
end
height[x]=h
end--get heights
height[11]=999
local res={1,1,2,2,3,4}
local d=0
local A
for i=1,10 do
d=d+height[i]
end
if d<40 or P.stat.row>2*42 then
A=#res+1
for i=A,A+5 do
res[i]=1
res[i+6]=2
end
goto END
end
--give I when no hole
d=-999--height difference
--A=hole mark
for x=2,11 do
local _=height[x]-height[x-1]
if d<-2 and _>2 then
A=true
end
d=_
end
if not A then
A=#res+1
res[A]=7
res[A+1]=7
res[A+2]=7
end
--give O when no d=0/give T when no d=1
d=0--d=0 count
A=0--d=1 count
for x=2,10 do
local _=height[x]-height[x-1]
if _==0 then
d=d+1
elseif _==1 or _==-1 then
A=A+1
end
end
if d<3 then
A=#res+1
res[A]=6
res[A+1]=6
res[A+2]=6
end
if A<3 then
A=#res+1
res[A]=5
res[A+1]=5
res[A+2]=5
res[A+3]=5
res[A+4]=5
end
::END::
freeRow.discard(height)
P:getNext(res[rnd(#res)])
end
end,
target=100,dropPiece=PLY.reach_winCheck,
next=1,hold=false,
ospin=false,
freshLimit=15,
bg="glow",bgm="reason",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(70)
local R=100-P.stat.row
mStr(R>=0 and R or 0,-82,280)
mStr(R>=0 and R or 0,-81,280)
end,
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
@@ -40,7 +104,7 @@ return{
local L=P.stat.row
if L>=100 then
local T=P.stat.time
return
return
T<=70 and 5 or
T<=110 and 4 or
T<=160 and 3 or

View File

@@ -1,37 +1,24 @@
local min=math.min
return{
name={
"干旱",
"干旱",
"Drought",
},
level={
"100L",
"100行",
"100L",
},
info={
"你I没了",
"你I没了",
"B a g 6",
},
color=color.green,
env={
drop=20,lock=60,
sequence="drought1",
target=100,dropPiece=Event.reach_winCheck,
sequence="bag",
bag={1,1,2,2,3,3,4,4,5,5,6,6},
target=100,dropPiece=PLY.reach_winCheck,
next=3,
ospin=false,
freshLimit=15,
bg="glow",bgm="reason",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(70)
local R=100-P.stat.row
mStr(R>=0 and R or 0,-82,280)
mStr(R>=0 and R or 0,-81,280)
end,
score=function(P)return{min(P.stat.row,100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
@@ -40,7 +27,7 @@ return{
local L=P.stat.row
if L>=100 then
local T=P.stat.time
return
return
T<=65 and 5 or
T<=100 and 4 or
T<=145 and 3 or

View File

@@ -1,29 +0,0 @@
return{
name={
"本地多人",
"本地多人",
"Hotseat",
},
level={
"2P",
"2P",
"2P",
},
info={
"友尽模式",
"友尽模式",
"End of friendship",
},
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,30 +0,0 @@
return{
name={
"本地多人",
"本地多人",
"Hotseat",
},
level={
"3P",
"3P",
"3P",
},
info={
"友尽模式",
"友尽模式",
"End of friendship",
},
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,31 +0,0 @@
return{
name={
"本地多人",
"本地多人",
"Hotseat",
},
level={
"4P",
"4P",
"4P",
},
info={
"友尽模式",
"友尽模式",
"End of friendship",
},
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

@@ -1,20 +1,5 @@
local format=string.format
return{
name={
"无尽",
"无尽",
"Infinite",
},
level={
"时间杀手 II",
"时间杀手 II",
"Time Killer II",
},
info={
"沙盒",
"沙盒",
"Sandbox",
},
color=color.lightGrey,
env={
drop=1e99,lock=1e99,
@@ -22,14 +7,14 @@ return{
bg="glow",bgm="infinite",
},
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(45)
mStr(P.stat.atk,-82,260)
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,370)
mDraw(drawableText.atk,-82,313)
mDraw(drawableText.eff,-82,425)
mStr(P.stat.atk,-81,260)
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,370)
mText(drawableText.atk,-81,313)
mText(drawableText.eff,-81,425)
end,
score=function(P)return{P.stat.score}end,
scoreDisp=function(D)return tostring(D[1])end,

View File

@@ -1,30 +1,13 @@
local format,rnd=string.format,math.random
local function check_rise(P)
local L=P.cleared
for i=1,#L do
if L[i]<6 then
P:garbageRise(10,1,rnd(10))
P.modeData.point=P.modeData.point+1
if #P.clearedRow==0 then
for i=1,8-P.garbageBeneath do
P:garbageRise(13,1,rnd(10))
end
end
end
return{
name={
"无尽:挖掘",
"无尽:挖掘",
"Infinite:dig",
},
level={
"时间杀手 III",
"时间杀手 III",
"Time Killer III",
},
info={
"挖呀挖呀挖",
"挖呀挖呀挖",
"Dig to Nether?",
},
color=color.white,
env={
drop=1e99,lock=1e99,
@@ -34,25 +17,25 @@ return{
bg="glow",bgm="infinite",
},
load=function()
newPlayer(1,340,15)
for _=1,5 do
players[1]:garbageRise(10,1,rnd(10))
PLY.newPlayer(1,340,15)
for _=1,8 do
players[1]:garbageRise(13,1,rnd(10))
end
end,
mesDisp=function(P,dx,dy)
setFont(45)
mStr(P.modeData.point,-82,190)
mStr(P.stat.atk,-82,310)
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
mDraw(drawableText.line,-82,243)
mDraw(drawableText.atk,-82,363)
mDraw(drawableText.eff,-82,475)
mStr(P.stat.dig,-81,190)
mStr(P.stat.atk,-81,310)
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
mText(drawableText.line,-81,243)
mText(drawableText.atk,-81,363)
mText(drawableText.eff,-81,475)
end,
score=function(P)return{P.modeData.point}end,
score=function(P)return{P.stat.dig}end,
scoreDisp=function(D)return D[1].." Lines"end,
comp=function(a,b)return a[1]>b[1]end,
getRank=function(P)
local L=P.modeData.point
local L=P.stat.dig
return
L>=626 and 5 or
L>=400 and 4 or

View File

@@ -9,43 +9,29 @@ local function check(P)
P.gameEnv._20G=true
P.gameEnv.target=200
else
Event.win(P,"finish")
P:win("finish")
end
end
end
return{
name={
"马拉松",
"马拉松",
"Marathon",
},
level={
"困难",
"困难",
"HARD",
},
info={
"200行20G马拉松",
"200行20G马拉松",
"200L marathon in 20G",
},
color=color.magenta,
env={
drop=.5,fall=30,
target=50,dropPiece=check,
noFly=true,
mindas=7,minarr=1,minsdarr=1,
bg="strap",bgm="race",
drop=.5,wait=8,fall=20,
target=50,dropPiece=check,
bg="strap",bgm="push",
},
pauseLimit=true,
slowMark=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(45)
mStr(P.stat.row,-82,320)
mStr(P.gameEnv.target,-82,370)
mStr(P.stat.row,-81,320)
mStr(P.gameEnv.target,-81,370)
gc.rectangle("fill",-125,375,90,4)
end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,

View File

@@ -4,7 +4,7 @@ local function check_LVup(P)
local T=P.modeData.point+10
if P.stat.row>=T then
if T==200 then
Event.win(P,"finish")
P:win("finish")
else
P.gameEnv.drop=dropSpeed[T/10]
P.modeData.point=T
@@ -14,38 +14,24 @@ local function check_LVup(P)
end
return{
name={
"马拉松",
"马拉松",
"Marathon",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"200行变速马拉松",
"200行变速马拉松",
"200L marathon with acceleration",
},
color=color.green,
env={
fall=30,
noFly=true,
minsdarr=1,
wait=8,fall=20,
target=10,dropPiece=check_LVup,
mindas=7,minarr=1,minsdarr=1,
minsdarr=1,
bg="strap",bgm="way",
bg="strap",bgm="push",
},
pauseLimit=true,
slowMark=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(45)
mStr(P.stat.row,-82,320)
mStr(P.modeData.point+10,-82,370)
mStr(P.stat.row,-81,320)
mStr(P.modeData.point+10,-81,370)
gc.rectangle("fill",-125,375,90,4)
end,
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
@@ -56,8 +42,8 @@ return{
if L>=200 then
local T=P.stat.time
return
T<=185 and 5 or
T<=250 and 4 or
T<=226 and 5 or
T<=262 and 4 or
3
else
return

View File

@@ -4,7 +4,7 @@ local death_lock={12,11,10,9,8}
local death_wait={10,9,8,7,6}
local death_fall={10,9,8,7,6}
local function score(P)
local c=#P.cleared
local c=#P.clearedRow
if c==0 and P.modeData.point%100==99 then return end
local s=c<3 and c+1 or c==3 and 5 or 7
if P.combo>7 then s=s+2
@@ -16,7 +16,7 @@ local function score(P)
elseif P.modeData.point>=100*(P.modeData.event+1)then
local s=P.modeData.event+1;P.modeData.event=s--level up!
local E=P.gameEnv
curBG=s==1 and"game3"or s==2 and"game4"or s==3 and"game5"or s==4 and"game6"or"game5"
BG.set(s==1 and"game3"or s==2 and"game4"or s==3 and"game5"or s==4 and"game6"or"game5")
E.lock=death_lock[s]
E.wait=death_wait[s]
E.fall=death_fall[s]
@@ -24,49 +24,35 @@ local function score(P)
if s==3 then P.gameEnv.bone=true end
if s==5 then
P.modeData.point,P.modeData.event=500,4
Event.win(P,"finish")
P:win("finish")
else
P:showText(text.stage(s),0,-120,80,"fly")
P:showTextF(text.stage(s),0,-120,80,"fly")
end
SFX.play("reach")
end
end
return{
name={
"大师",
"大师",
"Master",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"20G:上级者的挑战",
"20G:上级者的挑战",
"20G:For Pro",
},
color=color.red,
env={
noFly=true,
mindas=6,minarr=1,
_20G=true,
lock=death_lock[1],
wait=death_wait[1],
fall=death_fall[1],
dropPiece=score,
mindas=6,minarr=1,
freshLimit=15,
bg="game2",bgm="secret7th",
},
slowMark=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(45)
mStr(P.modeData.point,-82,320)
mStr((P.modeData.event+1)*100,-82,370)
mStr(P.modeData.point,-81,320)
mStr((P.modeData.event+1)*100,-81,370)
gc.rectangle("fill",-125,375,90,4)
end,
score=function(P)return{P.modeData.point,P.stat.row,P.stat.time}end,
@@ -77,7 +63,7 @@ return{
getRank=function(P)
local S=P.modeData.point
if S==500 then
local L=P.stat.clear_4
local L=P.stat.clear_S[4]
return
L>=30 and 5 or
L>=25 and 4 or

View File

@@ -3,7 +3,7 @@ local rush_lock={20,18,16,15,14}
local rush_wait={12,10,9,8,7}
local rush_fall={18,16,14,13,12}
local function score(P)
local c=#P.cleared
local c=#P.clearedRow
if c==0 and P.modeData.point%100==99 then return end
local s=c<3 and c+1 or c==3 and 5 or 7
if P.combo>7 then s=s+2
@@ -15,7 +15,7 @@ local function score(P)
elseif P.modeData.point>=100*(P.modeData.event+1)then
local s=P.modeData.event+1;P.modeData.event=s--level up!
local E=P.gameEnv
curBG=s==1 and"game1"or s==2 and"game2"or s==3 and"game3"or "game4"
BG.set(s==1 and"game1"or s==2 and"game2"or s==3 and"game3"or "game4")
E.lock=rush_lock[s]
E.wait=rush_wait[s]
E.fall=rush_fall[s]
@@ -28,49 +28,35 @@ local function score(P)
if s==5 then
P.modeData.point,P.modeData.event=500,4
Event.win(P,"finish")
P:win("finish")
else
P:showText(text.stage(s),0,-120,80,"fly")
P:showTextF(text.stage(s),0,-120,80,"fly")
end
SFX.play("reach")
end
end
return{
name={
"大师",
"大师",
"Master",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"20G:初心者适用",
"20G:初心者适用",
"20G:Proper to beginner",
},
color=color.red,
env={
noFly=true,
das=9,arr=3,
_20G=true,
lock=rush_lock[1],
wait=rush_wait[1],
fall=rush_fall[1],
dropPiece=score,
das=9,arr=3,
freshLimit=15,
bg="strap",bgm="secret8th",
},
slowMark=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(45)
mStr(P.modeData.point,-82,320)
mStr((P.modeData.event+1)*100,-82,370)
mStr(P.modeData.point,-81,320)
mStr((P.modeData.event+1)*100,-81,370)
gc.rectangle("fill",-125,375,90,4)
end,
score=function(P)return{P.modeData.point,P.stat.row,P.stat.time}end,
@@ -81,7 +67,7 @@ return{
getRank=function(P)
local S=P.modeData.point
if S==500 then
local L=P.stat.clear_4
local L=P.stat.clear_S[4]
return
L>=30 and 5 or
L>=25 and 4 or

View File

@@ -1,7 +1,7 @@
local gc=love.graphics
local int=math.floor
local function score(P)
local c=#P.cleared
local c=#P.clearedRow
if c==0 and P.modeData.point%100==99 then return end
local s=c<3 and c+1 or c==3 and 5 or 7
if P.combo>7 then s=s+2
@@ -12,7 +12,7 @@ local function score(P)
if MD.point%100==99 then SFX.play("blip_1")end
if int(MD.point*.01)>MD.event then
local s=MD.event+1;MD.event=s--level up!
P:showText(text.stage(s),0,-120,80,"fly")
P:showTextF(text.stage(s),0,-120,80,"fly")
local E=P.gameEnv
if s<4 then--first 300
if s~=1 then E.lock=E.lock-1 end
@@ -27,47 +27,33 @@ local function score(P)
end
else
MD.point,MD.event=1000,9
Event.win(P,"finish")
P:win("finish")
end
SFX.play("reach")
end
end
return{
name={
"大师",
"大师",
"Master",
},
level={
"终点",
"终点",
"FINAL",
},
info={
"究极20G:无法触及的终点",
"究极20G:无法触及的终点",
"Extreme 20G:Unreachable destination",
},
color=color.lightGrey,
env={
noFly=true,
mindas=5,minarr=1,
_20G=true,lock=12,
wait=10,fall=10,
dropPiece=score,
mindas=5,minarr=1,
freshLimit=15,
easyFresh=false,bone=true,
bg="none",bgm="distortion",
},
slowMark=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(45)
local MD=P.modeData
mStr(MD.point,-82,320)
mStr((MD.event+1)*100,-82,370)
mStr(MD.point,-81,320)
mStr((MD.event+1)*100,-81,370)
gc.rectangle("fill",-125,375,90,4)
end,
score=function(P)return{P.modeData.point,P.stat.time}end,

View File

@@ -1,47 +1,26 @@
local gc=love.graphics
return{
name={
"全清挑战",
"全清挑战",
"PC Challenge",
},
level={
"困难",
"困难",
"HARD",
},
info={
"100行内刷PC",
"100行内刷全清",
"More PCs in 100L",
},
color=color.magenta,
env={
drop=60,lock=120,
fall=10,
target=100,dropPiece=Event.reach_winCheck,
target=100,dropPiece=PLY.reach_winCheck,
freshLimit=15,
ospin=false,
bg="rgb",bgm="infinite",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(45)
local R=100-P.stat.row
mStr(R>=0 and R or 0,-82,250)
mStr(R>=0 and R or 0,-81,250)
setFont(75)
mStr(P.stat.pc,-82,350)
mDraw(drawableText.pc,-82,432)
gc.setColor(.5,.5,.5)
if frame>179 then
local y=72*(7-(P.stat.piece+(P.hd.id>0 and 2 or 1))%7)-36
gc.line(320,y,442,y)
end
mStr(P.stat.pc,-81,350)
mText(drawableText.pc,-81,432)
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,

View File

@@ -1,47 +1,26 @@
local gc=love.graphics
return{
name={
"全清挑战",
"全清挑战",
"PC Challenge",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"100行内刷PC",
"100行内刷全清",
"More PCs in 100L",
},
color=color.red,
env={
drop=20,lock=60,
fall=20,
target=100,dropPiece=Event.reach_winCheck,
target=100,dropPiece=PLY.reach_winCheck,
freshLimit=15,
ospin=false,
bg="rgb",bgm="infinite",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(45)
local R=100-P.stat.row
mStr(R>=0 and R or 0,-82,250)
mStr(R>=0 and R or 0,-81,250)
setFont(75)
mStr(P.stat.pc,-82,350)
mDraw(drawableText.pc,-82,432)
gc.setColor(.5,.5,.5)
if frame>179 then
local y=72*(7-(P.stat.piece+(P.hd.id>0 and 2 or 1))%7)-36
gc.line(320,y,442,y)
end
mStr(P.stat.pc,-81,350)
mText(drawableText.pc,-81,432)
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,

View File

@@ -1,46 +1,25 @@
local gc=love.graphics
return{
name={
"全清挑战",
"全清挑战",
"PC Challenge",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"100行内刷PC",
"100行内刷全清",
"More PCs in 100L",
},
color=color.green,
env={
oncehold=false,
drop=300,lock=1e99,
target=100,dropPiece=Event.reach_winCheck,
target=100,dropPiece=PLY.reach_winCheck,
ospin=false,
bg="rgb",bgm="newera",
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P,dx,dy)
setFont(45)
local R=100-P.stat.row
mStr(R>=0 and R or 0,-82,250)
mStr(R>=0 and R or 0,-81,250)
setFont(75)
mStr(P.stat.pc,-82,350)
mDraw(drawableText.pc,-82,432)
gc.setColor(.5,.5,.5)
if frame>179 then
local y=72*(7-(P.stat.piece+(P.hd.id>0 and 2 or 1))%7)-36
gc.line(320,y,442,y)
end
mStr(P.stat.pc,-81,350)
mText(drawableText.pc,-81,432)
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,

View File

@@ -5,79 +5,49 @@ local pc_lock={55,50,45,40,36,32,30}
local pc_fall={18,16,14,12,10,9,8,7,6}
local PCbase=require("parts/PCbase")
local PClist=require("parts/PClist")
local PCtype={[0]=1,2,1,3,2,3}
local function task_PC(P)
P.modeData.counter=P.modeData.counter+1
if P.modeData.counter==21 then
local t=P.stat.pc%2
for i=1,4 do
local r=getNewRow(0)
for j=1,10 do
r[j]=PCbase[4*t+i][j]
end
ins(P.field,1,r)
ins(P.visTime,1,getNewRow(20))
end
P.fieldBeneath=P.fieldBeneath+120
P.curY=P.curY+4
P:freshgho()
if P.modeData.counter==26 then
local base=PCbase[P.modeData.type]
P:pushLine(base[rnd(#base)],P.modeData.symmetry)
return true
end
end
local function newPC(P)
local r=P.field;r=r[#r]
if r then
local r=P.field
if r[1]then
r=r[#r]
local c=0
for i=1,10 do if r[i]>0 then c=c+1 end end
if c<5 then
Event.lose(P)
end
if c<5 then P:lose()end
end
if P.stat.piece%4==0 and #P.field==0 then
P.modeData.event=P.modeData.event==0 and 1 or 0
local r=rnd(#PClist)
local f=P.modeData.event==0
for i=1,4 do
local b=PClist[r][i]
if f then
if b<3 then b=3-b
elseif b<5 then b=7-b
end
end
P.next[#P.next+1]={bk=blocks[b][0],id=b,color=b,name=b}--P:newNext(b)'s simple version!
end
if #P.field==0 then
local type=PCtype[P.stat.pc]or rnd(2,3)
local L=PClist[type][rnd(#PClist[1])]
local symmetry=rnd()>.5
P.modeData.type=type
P.modeData.symmetry=symmetry
P:pushNext(L,symmetry)
P.modeData.counter=P.stat.piece==0 and 20 or 0
newTask(task_PC,P)
local s=P.stat.pc*.5
TASK.new(task_PC,P)
local s=P.stat.pc*.25
if int(s)==s and s>0 then
P.gameEnv.drop=pc_drop[s]or 10
P.gameEnv.lock=pc_lock[s]or 20
P.gameEnv.fall=pc_fall[s]or 5
if s==10 then
P:showText(text.maxspeed,0,-140,100,"appear",.6)
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
else
P:showText(text.speedup,0,-140,40,"appear",.8)
P:showTextF(text.speedup,0,-140,40,"appear",.8)
end
end
end
end
return{
name={
"全清训练",
"全清训练",
"PC Train",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"简易PC题库,熟悉全清定式的组合",
"简易全清题库,熟悉全清定式的组合",
"Let's learn some PCs",
},
color=color.red,
env={
next=4,
@@ -92,13 +62,13 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
newPC(players[1])
end,
mesDisp=function(P,dx,dy)
setFont(75)
mStr(P.stat.pc,-82,330)
mDraw(drawableText.pc,-82,412)
mStr(P.stat.pc,-81,330)
mText(drawableText.pc,-81,412)
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
@@ -106,11 +76,11 @@ return{
getRank=function(P)
local L=P.stat.pc
return
L>=50 and 5 or
L>=40 and 4 or
L>=30 and 3 or
L>=100 and 5 or
L>=70 and 4 or
L>=40 and 3 or
L>=20 and 2 or
L>=10 and 1 or
L>=1 and 0
L>=2 and 0
end,
}

View File

@@ -1,72 +1,51 @@
local rnd=math.random
local ins=table.insert
local PCbase=require("parts/PCbase")
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)
P.modeData.counter=P.modeData.counter+1
if P.modeData.counter==21 then
local t=P.stat.pc%2
for i=1,4 do
local r=getNewRow(0)
for j=1,10 do
r[j]=PCbase[4*t+i][j]
end
ins(P.field,1,r)
ins(P.visTime,1,getNewRow(20))
end
P.fieldBeneath=P.fieldBeneath+120
P.curY=P.curY+4
P:freshgho()
if P.modeData.counter==26 then
local base=PCbase[P.modeData.type]
P:pushLine(base[rnd(#base)],P.modeData.symmetry)
return true
end
end
local function newPC(P)
local r=P.field;r=r[#r]
if r then
local r=P.field
if r[1]then
r=r[#r]
local c=0
for i=1,10 do if r[i]>0 then c=c+1 end end
if c<5 then
Event.lose(P)
end
if c<5 then P:lose()end
end
if P.stat.piece%4==0 and #P.field==0 then
P.modeData.event=P.modeData.event==0 and 1 or 0
local r=rnd(#PClist)
local f=P.modeData.event==0
for i=1,4 do
local b=PClist[r][i]
if f then
if b<3 then b=3-b
elseif b<5 then b=7-b
end
end
P.next[#P.next+1]={bk=blocks[b][0],id=b,color=b,name=b}--P:newNext(b)'s simple version!
end
if #P.field==0 then
local type=PCtype[P.stat.pc]or rnd(2,3)
local L=PClist[type][rnd(#PClist[1])]
local symmetry=rnd()>.5
P.modeData.type=type
P.modeData.symmetry=symmetry
P:pushNext(L,symmetry)
P.modeData.counter=P.stat.piece==0 and 20 or 0
newTask(task_PC,P)
TASK.new(task_PC,P)
end
end
return{
name={
"全清训练",
"全清训练",
"PC Train",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"简易PC题库,熟悉全清定式的组合",
"简易全清题库,熟悉全清定式的组合",
"Let's learn some PCs",
},
color=color.green,
env={
next=4,
hold=false,
drop=150,lock=150,
drop=120,lock=180,
fall=20,
sequence="none",
dropPiece=newPC,
@@ -75,13 +54,13 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
newPC(players[1])
end,
mesDisp=function(P,dx,dy)
setFont(75)
mStr(P.stat.pc,-82,330)
mDraw(drawableText.pc,-82,412)
mStr(P.stat.pc,-81,330)
mText(drawableText.pc,-81,412)
end,
score=function(P)return{P.stat.pc,P.stat.time}end,
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
@@ -89,11 +68,11 @@ return{
getRank=function(P)
local L=P.stat.pc
return
L>=100 and 5 or
L>=60 and 4 or
L>=40 and 3 or
L>=25 and 2 or
L>=15 and 1 or
L>=1 and 0
L>=260 and 5 or
L>=126 and 4 or
L>=62 and 3 or
L>=26 and 2 or
L>=12 and 1 or
L>=2 and 0
end,
}

View File

@@ -11,21 +11,6 @@ local function update_round(P)
end
return{
name={
"回合制",
"回合制",
"Turn-Base",
},
level={
"简单",
"简单",
"EASY",
},
info={
"下棋模式",
"下棋模式",
"Chess?",
},
color=color.cyan,
env={
drop=1e99,lock=1e99,
@@ -34,8 +19,9 @@ return{
bg="game2",bgm="push",
},
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",10))
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,5000))
game.garbageSpeed=1e99
end,
mesDisp=function(P,dx,dy)
end,
@@ -46,7 +32,7 @@ return{
if P.result=="WIN"then
local T=P.stat.piece
return
T<=20 and 5 or
T<=23 and 5 or
T<=26 and 4 or
T<=40 and 3 or
T<=60 and 2 or

View File

@@ -11,21 +11,6 @@ local function update_round(P)
end
return{
name={
"回合制",
"回合制",
"Turn-Base",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"下棋模式",
"下棋模式",
"Chess?",
},
color=color.green,
env={
drop=1e99,lock=1e99,
@@ -34,8 +19,9 @@ return{
bg="game2",bgm="push",
},
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",10))
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,10000))
game.garbageSpeed=1e99
end,
mesDisp=function(P,dx,dy)
end,
@@ -46,10 +32,10 @@ return{
if P.result=="WIN"then
local T=P.stat.piece
return
T<=30 and 5 or
T<=40 and 4 or
T<=55 and 3 or
T<=70 and 2 or
T<=23 and 5 or
T<=26 and 4 or
T<=40 and 3 or
T<=60 and 2 or
1
end
end,

View File

@@ -11,21 +11,6 @@ local function update_round(P)
end
return{
name={
"回合制",
"回合制",
"Turn-Base",
},
level={
"困难",
"困难",
"HARD",
},
info={
"下棋模式",
"下棋模式",
"Chess?",
},
color=color.magenta,
env={
drop=1e99,lock=1e99,
@@ -34,8 +19,9 @@ return{
bg="game2",bgm="push",
},
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",10))
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,2,true,12600))
game.garbageSpeed=1e99
end,
mesDisp=function(P,dx,dy)
end,
@@ -46,10 +32,10 @@ return{
if P.result=="WIN"then
local T=P.stat.piece
return
T<=35 and 5 or
T<=45 and 4 or
T<=65 and 3 or
T<=85 and 2 or
T<=30 and 5 or
T<=40 and 4 or
T<=55 and 3 or
T<=75 and 2 or
1
end
end,

View File

@@ -11,21 +11,6 @@ local function update_round(P)
end
return{
name={
"回合制",
"回合制",
"Turn-Base",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"下棋模式",
"下棋模式",
"Chess?",
},
color=color.red,
env={
drop=1e99,lock=1e99,
@@ -34,8 +19,9 @@ return{
bg="game2",bgm="push",
},
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",10))
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,16260))
game.garbageSpeed=1e99
end,
mesDisp=function(P,dx,dy)
end,
@@ -46,10 +32,10 @@ return{
if P.result=="WIN"then
local T=P.stat.piece
return
T<=40 and 5 or
T<=50 and 4 or
T<=75 and 3 or
T<=100 and 2 or
T<=30 and 5 or
T<=40 and 4 or
T<=55 and 3 or
T<=75 and 2 or
1
end
end,

View File

@@ -11,21 +11,6 @@ local function update_round(P)
end
return{
name={
"回合制",
"回合制",
"Turn-Base",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"下棋模式",
"下棋模式",
"Chess?",
},
color=color.lightYellow,
env={
drop=1e99,lock=1e99,
@@ -34,8 +19,9 @@ return{
bg="game2",bgm="push",
},
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",10))
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,26000))
game.garbageSpeed=1e99
end,
mesDisp=function(P,dx,dy)
end,
@@ -46,10 +32,10 @@ return{
if P.result=="WIN"then
local T=P.stat.piece
return
T<=50 and 5 or
T<=60 and 4 or
T<=80 and 3 or
T<=100 and 2 or
T<=30 and 5 or
T<=40 and 4 or
T<=55 and 3 or
T<=75 and 2 or
1
end
end,

View File

@@ -1,19 +1,4 @@
return{
name={
"单挑",
"单挑",
"Battle",
},
level={
"简单",
"简单",
"EASY",
},
info={
"打败AI",
"打败电脑",
"Beat AI",
},
color=color.cyan,
env={
drop=60,lock=60,
@@ -22,8 +7,8 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",3))
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",3))
end,
mesDisp=function(P,dx,dy)
end,
@@ -34,10 +19,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=15 and 5 or
T<=20 and 5 or
T<=25 and 4 or
T<=40 and 3 or
T<=80 and 2 or
T<=35 and 3 or
T<=60 and 2 or
1
end
end,

View File

@@ -1,19 +1,4 @@
return{
name={
"单挑",
"单挑",
"Battle",
},
level={
"普通",
"普通",
"NORMAL",
},
info={
"打败AI",
"打败AI",
"Beat AI",
},
color=color.green,
env={
drop=60,lock=60,
@@ -22,8 +7,8 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",5))
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",5))
end,
mesDisp=function(P,dx,dy)
end,
@@ -34,10 +19,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=16 and 5 or
T<=28 and 4 or
T<=45 and 3 or
T<=90 and 2 or
T<=20 and 5 or
T<=25 and 4 or
T<=40 and 3 or
T<=62 and 2 or
1
end
end,

View File

@@ -1,19 +1,4 @@
return{
name={
"单挑",
"单挑",
"Battle",
},
level={
"困难",
"困难",
"HARD",
},
info={
"打败AI",
"打败AI",
"Beat AI",
},
color=color.magenta,
env={
drop=60,lock=60,
@@ -22,8 +7,8 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",7))
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",7))
end,
mesDisp=function(P,dx,dy)
end,
@@ -34,9 +19,9 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=17 and 5 or
T<=26 and 4 or
T<=45 and 3 or
T<=20 and 5 or
T<=25 and 4 or
T<=35 and 3 or
T<=60 and 2 or
1
end

View File

@@ -1,19 +1,4 @@
return{
name={
"单挑",
"单挑",
"Battle",
},
level={
"疯狂",
"疯狂",
"LUNATIC",
},
info={
"打败AI",
"打败AI",
"Beat AI",
},
color=color.red,
env={
drop=60,lock=60,
@@ -22,8 +7,8 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",8))
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",9,2,true,26000))
end,
mesDisp=function(P,dx,dy)
end,
@@ -34,10 +19,10 @@ return{
if P.result=="WIN"then
local T=P.stat.time
return
T<=18 and 5 or
T<=30 and 4 or
T<=50 and 3 or
T<=70 and 2 or
T<=20 and 5 or
T<=25 and 4 or
T<=35 and 3 or
T<=60 and 2 or
1
end
end,

View File

@@ -1,19 +1,4 @@
return{
name={
"单挑",
"单挑",
"Battle",
},
level={
"极限",
"极限",
"ULTIMATE",
},
info={
"打败AI",
"打败AI",
"Beat AI",
},
color=color.lightYellow,
env={
drop=60,lock=60,
@@ -22,8 +7,8 @@ return{
},
pauseLimit=true,
load=function()
newPlayer(1,340,15)
newPlayer(2,965,360,.5,AITemplate("9S",9))
PLY.newPlayer(1,340,15)
PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,50000))
end,
mesDisp=function(P,dx,dy)
end,
@@ -35,8 +20,8 @@ return{
local T=P.stat.time
return
T<=20 and 5 or
T<=30 and 4 or
T<=45 and 3 or
T<=25 and 4 or
T<=35 and 3 or
T<=60 and 2 or
1
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[2]>b[2]or a[2]==b[2]and a[1]<b[1]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

@@ -1,36 +1,21 @@
local gc=love.graphics
local rnd=math.random
return{
name={
"竞速",
"竞速",
"Sprint",
},
level={
"10L",
"10行",
"10L",
},
info={
"消除10行",
"消除10行",
"Clear 10 lines",
},
color=color.cyan,
env={
drop=60,lock=60,
target=10,dropPiece=Event.reach_winCheck,
target=10,dropPiece=PLY.reach_winCheck,
bg="strap",bgm="race",
},
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P)
local dx,dy=P.fieldOff.x,P.fieldOff.y
setFont(55)
local r=10-P.stat.row
if r<0 then r=0 end
mStr(r,-82,265)
mStr(r,-81,265)
if r<21 and r>0 then
gc.setLineWidth(4)
gc.setColor(1,r>10 and 0 or rnd(),.5)
@@ -43,7 +28,7 @@ return{
getRank=function(P)
if P.stat.row<10 then return end
local T=P.stat.time
return
return
T<=7 and 5 or
T<=10 and 4 or
T<=25 and 3 or

View File

@@ -1,36 +1,21 @@
local gc=love.graphics
local rnd=math.random
return{
name={
"竞速",
"竞速",
"Sprint",
},
level={
"100L",
"100行",
"100L",
},
info={
"消除100行",
"消除100行",
"Clear 100 lines",
},
color=color.orange,
env={
drop=60,lock=60,
target=100,dropPiece=Event.reach_winCheck,
target=100,dropPiece=PLY.reach_winCheck,
bg="strap",bgm="race",
},
load=function()
newPlayer(1,340,15)
PLY.newPlayer(1,340,15)
end,
mesDisp=function(P)
local dx,dy=P.fieldOff.x,P.fieldOff.y
setFont(55)
local r=100-P.stat.row
if r<0 then r=0 end
mStr(r,-82,265)
mStr(r,-81,265)
if r<21 and r>0 then
gc.setLineWidth(4)
gc.setColor(1,r>10 and 0 or rnd(),.5)
@@ -43,12 +28,12 @@ return{
getRank=function(P)
if P.stat.row<100 then return end
local T=P.stat.time
return
T<=60 and 5 or
return
T<=62 and 5 or
T<=90 and 4 or
T<=130 and 3 or
T<=200 and 2 or
T<=270 and 1 or
T<=360 and 1 or
0
end,
}

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