Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2768fa748b | ||
|
|
00026bc46b | ||
|
|
7d63386410 | ||
|
|
e88553bc00 | ||
|
|
4652be7067 | ||
|
|
ed0f8031d0 | ||
|
|
15df07ae3f | ||
|
|
57857ceb67 | ||
|
|
527352ce15 | ||
|
|
b8f57f5a1c | ||
|
|
d02048f0dc | ||
|
|
4da080c6f5 | ||
|
|
5f62127f28 | ||
|
|
f6835c2118 | ||
|
|
3155bc48ef | ||
|
|
c1b334963b | ||
|
|
0dbdc9fe42 | ||
|
|
324435d51a | ||
|
|
1c384ca51a | ||
|
|
e196790e2c | ||
|
|
659a50300d |
BIN
BGM/distortion.ogg
Normal file
BIN
BGM/oxygen.ogg
Normal file
BIN
SFX/click.ogg
Normal file
BIN
SFX/enter.ogg
Normal file
BIN
SFX/error.ogg
BIN
SFX/finesseError.ogg
Normal file
BIN
SFX/virtualKey.ogg
Normal file
BIN
SFX/welcome.ogg
BIN
SFX/welcome_sfx.ogg
Normal file
BIN
VOICE/egg_1.ogg
Normal file
BIN
VOICE/egg_2.ogg
Normal file
BIN
VOICE/nya_31.ogg
BIN
VOICE/nya_happy_4.ogg
Normal file
BIN
VOICE/nya_sad_1.ogg
Normal file
BIN
VOICE/welcome_voc.ogg
Normal file
1231
callback.lua
Normal file
165
class.lua
@@ -1,165 +0,0 @@
|
||||
local gc=love.graphics
|
||||
local rem=table.remove
|
||||
local format=string.format
|
||||
Task={}
|
||||
function newTask(code,P,data)
|
||||
Task[#Task+1]={
|
||||
code=code,
|
||||
P=P,
|
||||
data=data,
|
||||
}
|
||||
end
|
||||
function clearTask(opt)
|
||||
if opt=="all"then
|
||||
local i=#Task
|
||||
while i>0 do
|
||||
Task[i]=nil
|
||||
i=i-1
|
||||
end
|
||||
elseif opt=="play"then
|
||||
for i=#Task,1,-1 do
|
||||
if Task[i].P then
|
||||
rem(Task,i)
|
||||
end
|
||||
end
|
||||
else--Player table
|
||||
for i=#Task,1,-1 do
|
||||
if Task[i].P==opt then
|
||||
rem(Task,i)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local button={type="button"}
|
||||
function newButton(x,y,w,h,color,font,code,hide,N)
|
||||
local _={
|
||||
x=x-w*.5,y=y-h*.5,
|
||||
w=w,h=h,
|
||||
color=color,
|
||||
font=font,
|
||||
code=code,
|
||||
hide=hide,
|
||||
next=N,
|
||||
}for k,v in next,button do _[k]=v end return _
|
||||
end
|
||||
function button:isAbove(x,y)
|
||||
return x>self.x and x<self.x+self.w and y>self.y and y<self.y+self.h
|
||||
end
|
||||
function button:FX()
|
||||
sysFX[#sysFX+1]={0,0,10,self.x,self.y,self.w,self.h}
|
||||
--[0=ripple],timer,duration,x,y,w,h
|
||||
end
|
||||
function button:draw()
|
||||
local C=self.color
|
||||
gc.setColor(C)
|
||||
gc.setLineWidth(3)gc.rectangle("line",self.x,self.y,self.w,self.h,4)
|
||||
gc.setColor(C[1],C[2],C[3],.4)
|
||||
gc.setLineWidth(5)gc.rectangle("line",self.x,self.y,self.w,self.h,4)
|
||||
if self==widget_sel then
|
||||
gc.rectangle("fill",self.x,self.y,self.w,self.h,4)
|
||||
end--Highlight when Selected
|
||||
local t=self.text
|
||||
if t then
|
||||
if type(t)=="function"then t=t()end
|
||||
setFont(self.font)
|
||||
local y0=self.y+self.h*.5-self.font*.7
|
||||
gc.printf(t,self.x-2,y0-1,self.w,"center")
|
||||
gc.setColor(C)
|
||||
gc.printf(t,self.x,y0,self.w,"center")
|
||||
end
|
||||
end
|
||||
function button:getInfo()
|
||||
print(format("x=%d,y=%d,w=%d,h=%d,font=%d",self.x+self.w*.5,self.y+self.h*.5,self.w,self.h,self.font))
|
||||
end
|
||||
|
||||
local switch={type="switch"}
|
||||
function newSwitch(x,y,font,disp,code,hide,N)
|
||||
local _={
|
||||
x=x,y=y,font=font,
|
||||
disp=disp,
|
||||
code=code,
|
||||
hide=hide,
|
||||
next=N,
|
||||
}for k,v in next,switch do _[k]=v end return _
|
||||
end
|
||||
function switch:isAbove(x,y)
|
||||
return x>self.x and x<self.x+100 and y>self.y-20 and y<self.y+20
|
||||
end
|
||||
function switch:FX()
|
||||
sysFX[#sysFX+1]=self.disp()and
|
||||
{1,0,15,1,.4,.4,self.x,self.y-20,50,40,0}--Switched on
|
||||
or{1,0,15,.4,1,.4,self.x+50,self.y-20,50,40,0}--Switched off
|
||||
--[1=square fade],timer,duration,r,g,b,x,y,w,h
|
||||
end
|
||||
function switch:draw()
|
||||
local x,y=self.x,self.y-20
|
||||
if self.disp()then
|
||||
gc.setColor(.6,1,.6)
|
||||
gc.rectangle("fill",x+50,y,50,40,3)
|
||||
--ON
|
||||
else
|
||||
gc.setColor(1,.6,.6)
|
||||
gc.rectangle("fill",x,y,50,40,3)
|
||||
--OFF
|
||||
end--switch
|
||||
gc.setColor(1,1,1,self==widget_sel and 1 or .6)
|
||||
gc.setLineWidth(3)gc.rectangle("line",x-3,y-3,106,46,5)
|
||||
--frame
|
||||
local t=self.text
|
||||
if t then
|
||||
gc.setColor(1,1,1)
|
||||
setFont(self.font)
|
||||
gc.printf(t,x-412,y+20-self.font*.7,400,"right")
|
||||
end
|
||||
end
|
||||
function switch:getInfo()
|
||||
print(format("x=%d,y=%d,font=%d",self.x,self.y,self.font))
|
||||
end
|
||||
|
||||
local slider={type="slider"}
|
||||
function newSlider(x,y,w,unit,font,change,disp,code,hide,N)
|
||||
local _={
|
||||
x=x,y=y,
|
||||
w=w,unit=unit,
|
||||
font=font,
|
||||
change=change,
|
||||
disp=disp,
|
||||
code=code,
|
||||
hide=hide,
|
||||
next=N,
|
||||
}for k,v in next,slider do _[k]=v end return _
|
||||
end
|
||||
function slider:isAbove(x,y)
|
||||
return x>self.x-10 and x<self.x+self.w+10 and y>self.y-20 and y<self.y+20
|
||||
end
|
||||
function slider:FX(pos)
|
||||
sysFX[#sysFX+1]={1,0,10,1,1,1,self.x+self.w*pos/self.unit-8,self.y-15,17,30}
|
||||
--[1=square fade],timer,duration,r,g,b,x,y,w,h
|
||||
end
|
||||
function slider:draw()
|
||||
local S=self==widget_sel
|
||||
gc.setColor(1,1,1,S and 1 or .5)
|
||||
gc.setLineWidth(2)
|
||||
local x1,x2=self.x,self.x+self.w
|
||||
for p=0,self.unit do
|
||||
local x=x1+(x2-x1)*p/self.unit
|
||||
gc.line(x,self.y+7,x,self.y-7)
|
||||
end
|
||||
--units
|
||||
gc.setLineWidth(5)
|
||||
gc.line(x1,self.y,x2,self.y)
|
||||
--axis
|
||||
gc.setColor(1,1,1)
|
||||
gc.rectangle("fill",x1+(x2-x1)*self.disp()/self.unit-8,self.y-15,17,30)
|
||||
--block
|
||||
local t=self.text
|
||||
if t then
|
||||
gc.setColor(1,1,1)
|
||||
setFont(self.font)
|
||||
gc.printf(t,self.x-312,self.y-self.font*.7,300,"right")
|
||||
end
|
||||
end
|
||||
function slider:getInfo()
|
||||
print(format("x=%d,y=%d,w=%d",self.x,self.y,self.w))
|
||||
end
|
||||
43
conf.lua
@@ -1,36 +1,35 @@
|
||||
math.randomseed(os.time())
|
||||
gameVersion="Alpha V0.7.35"
|
||||
gameVersion="Alpha V0.8.18"
|
||||
function love.conf(t)
|
||||
t.identity="Techmino"--Save directory name
|
||||
t.identity="Techmino"--SaveDir name
|
||||
t.version="11.1"
|
||||
t.console=X
|
||||
t.gammacorrect=X
|
||||
t.appendidentity=X--If search files in source before save directory
|
||||
t.accelerometerjoystick=X--If exposing accelerometer on iOS and Android as a Joystick
|
||||
t.audio.mixwithsystem=true--Switch on to keep sysBGM
|
||||
t.console=false
|
||||
t.gammacorrect=false
|
||||
t.appendidentity=true--Search files in source before save directory
|
||||
t.accelerometerjoystick=false--ios/android加速度计=摇杆
|
||||
t.audio.mixwithsystem=true
|
||||
|
||||
local W=t.window
|
||||
W.title="Techmino "..gameVersion
|
||||
W.icon="/image/icon.png"
|
||||
W.width,W.height=1280,720
|
||||
W.minwidth,W.minheight=640,360
|
||||
W.borderless=X
|
||||
W.resizable=1
|
||||
W.borderless=false
|
||||
W.resizable=true
|
||||
W.fullscreentype="desktop"--"exclusive"
|
||||
W.fullscreen=X
|
||||
W.vsync=0--0→∞fps
|
||||
W.msaa=X--The number of samples to use with multi-sampled antialiasing (number)
|
||||
W.depth=X--Bits per sample in the depth buffer
|
||||
W.stencil=1--The number of bits per sample in the stencil buffer
|
||||
W.fullscreen=false
|
||||
W.vsync=0--∞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=X--Enable high-dpi mode for the window on a Retina display (boolean)
|
||||
W.highdpi=false--High-dpi mode for the window on a Retina display
|
||||
W.x,W.y=nil
|
||||
|
||||
local M=t.modules
|
||||
M.window,M.system,M.event=1,1,1
|
||||
M.audio,M.sound=1,1
|
||||
M.math,M.data=1,1
|
||||
M.timer,M.graphics,M.font,M.image=1,1,1,1
|
||||
M.mouse,M.touch,M.keyboard,M.joystick=1,1,1,1
|
||||
M.physics,M.thread,M.video=X
|
||||
M.window,M.system,M.event=true,true,true
|
||||
M.audio,M.sound=true,true
|
||||
M.math,M.data=true,true
|
||||
M.timer,M.graphics,M.font,M.image=true,true,true,true
|
||||
M.mouse,M.touch,M.keyboard,M.joystick=true,true,true,true
|
||||
M.physics,M.thread,M.video=false,false,false
|
||||
end
|
||||
1722
dataList.lua
132
default_data.lua
@@ -1,88 +1,96 @@
|
||||
setting={
|
||||
das=10,arr=2,
|
||||
sddas=0,sdarr=2,
|
||||
quickR=true,swap=true,
|
||||
ihs=true,irs=true,ims=true,
|
||||
reTime=4,
|
||||
maxNext=6,
|
||||
quickR=true,
|
||||
swap=true,
|
||||
fine=false,
|
||||
autoPause=true,
|
||||
|
||||
lang=1,
|
||||
skinSet=1,
|
||||
skin={1,5,2,8,10,3,7},
|
||||
face={0,0,0,0,0,0,0},
|
||||
--game
|
||||
|
||||
ghost=true,center=true,
|
||||
smo=true,grid=false,
|
||||
smooth=true,grid=false,
|
||||
bagLine=false,
|
||||
lockFX=2,
|
||||
dropFX=3,
|
||||
shakeFX=1,
|
||||
shakeFX=2,
|
||||
atkFX=3,
|
||||
frameMul=100,
|
||||
--
|
||||
|
||||
text=true,
|
||||
fullscreen=false,
|
||||
bg=true,
|
||||
bgblock=true,
|
||||
lang=1,
|
||||
skin=1,
|
||||
--graphic
|
||||
|
||||
sfx=10,bgm=7,
|
||||
vib=3,voc=0,
|
||||
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=true,
|
||||
VKTrack=true,--If tracked
|
||||
VKDodge=false,--If repel
|
||||
VKTchW=3,--Touch Weight
|
||||
VKCurW=4,--CurPos Weight
|
||||
VKIcon=true,
|
||||
VKSFX=3,--SFX volume
|
||||
VKVIB=0,--VIB
|
||||
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={
|
||||
version=gameVersion,
|
||||
run=0,game=0,time=0,
|
||||
key=0,rotate=0,hold=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,
|
||||
piece=0,row=0,dig=0,
|
||||
atk=0,digatk=0,send=0,recv=0,pend=0,
|
||||
clear_S={0,0,0,0},clear_B={0,0,0,0,0,0,0},
|
||||
spin_S={0,0,0,0},spin_B={0,0,0,0,0,0,0},
|
||||
clear={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},
|
||||
spin={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},
|
||||
pc=0,hpc=0,b2b=0,b3b=0,score=0,
|
||||
lastPlay=1,--last played mode ID
|
||||
}
|
||||
--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
|
||||
keyMap={
|
||||
{"left","right","x","z","c","up","down","space","tab","r"},
|
||||
{},{},{},{},{},{},{},
|
||||
--keyboard
|
||||
{"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","x","leftshoulder"},
|
||||
{},{},{},{},{},{},{},
|
||||
--joystick
|
||||
}
|
||||
virtualkey={}
|
||||
for i=1,#VK_org do
|
||||
virtualkey[i]={}
|
||||
end
|
||||
for i=1,#keyMap do for j=1,20 do
|
||||
if not keyMap[i][j]then keyMap[i][j]=""end
|
||||
end end
|
||||
|
||||
VK_org={--Original virtualkey set,for restore VKs' position before each game
|
||||
{ava=true, x=80, y=720-200, r=80},--moveLeft
|
||||
{ava=true, x=320, y=720-200, r=80},--moveRight
|
||||
{ava=true, x=1280-80, y=720-200, r=80},--rotRight
|
||||
{ava=true, x=1280-200, y=720-80, r=80},--rotLeft
|
||||
{ava=true, x=1280-200, y=720-320, r=80},--rot180
|
||||
{ava=true, x=200, y=720-320, r=80},--hardDrop
|
||||
{ava=true, x=200, y=720-80, r=80},--softDrop
|
||||
{ava=true, x=1280-320, y=720-200, r=80},--hold
|
||||
{ava=true, x=1280-80, y=280, r=80},--func
|
||||
{ava=true, x=80, y=280, r=80},--restart
|
||||
{ava=false, x=100, y=50, r=80},--insLeft
|
||||
{ava=false, x=200, y=50, r=80},--insRight
|
||||
{ava=false, x=300, y=50, r=80},--insDown
|
||||
{ava=false, x=400, y=50, r=80},--down1
|
||||
{ava=false, x=500, y=50, r=80},--down4
|
||||
{ava=false, x=600, y=50, r=80},--down10
|
||||
{ava=false, x=700, y=50, r=80},--dropLeft
|
||||
{ava=false, x=800, y=50, r=80},--dropRight
|
||||
{ava=false, x=900, y=50, r=80},--addToLeft
|
||||
{ava=false, x=1000, y=50, r=80},--addToRight
|
||||
}
|
||||
virtualkey={}for i=1,#VK_org do virtualkey[i]={}end
|
||||
111
document.txt
@@ -1,89 +1,56 @@
|
||||
游戏方法:
|
||||
控制系统提供的一个个方块,每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话)
|
||||
完成当前游戏模式中的目标或者是活到最后即算胜利.
|
||||
系统会提供的一个个四联骨牌("方块",总共7种),玩家需要控制(左右移动和旋转90,180,270度),每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话)
|
||||
活到最后或者完成目标即胜利.
|
||||
|
||||
旋转系统:
|
||||
使用Techmino专属旋转系统,细节不赘述
|
||||
使用Techmino专属旋转系统,细节懒得写(
|
||||
|
||||
spin判定:
|
||||
结合了不可移动判定和三角判定,是否为mini也与这二者有关,细节不赘述
|
||||
结合了不可移动判定和三角判定,是否为mini也与判定过程数据有关,细节也懒得写(
|
||||
|
||||
攻击系统:
|
||||
消1/2/3/4攻击0/1/2/4
|
||||
spin1/2/3攻击2/4/6,若mini则减半
|
||||
b2b:增加1~2(tetris)/1~3(spin)攻击
|
||||
b3b:满b2b效果+1额外抵挡
|
||||
PC:其它攻击与6~8(本局内递增)取高+2额外抵挡
|
||||
连击:0,0,1,1,2,2,3,3,4,4,3……
|
||||
普通消除:
|
||||
消1/2/3/4攻击0.25/1.25/2.25/4
|
||||
特殊消除:
|
||||
spin1/2/3攻击2/4/6,若mini则减半
|
||||
B2B:加1(techrash/spin1/spin2)或2(spin3)攻击
|
||||
B3B:在B2B效果之上消四再加1,spin再加0.5*消行数攻击,二者都+1额外抵挡
|
||||
连击:0,0,1,1,2,2,3,3,4,4,3,2,3,2,3,2,3…(后面都是2)
|
||||
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
|
||||
半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+2,额外抵挡+2
|
||||
全消:将上述伤害之和开根号,再+6~12(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
|
||||
根据上述规则计算后,向下取整,攻击打出
|
||||
|
||||
back to back(B2B)点数说明:
|
||||
B2B点数的范围在0~1200
|
||||
在40及以上特殊消除时B2B,在1000以上特殊消除时B3B,1200封顶
|
||||
消四+100
|
||||
空spin加20,不超过1000
|
||||
spin1~3+50/100/180 (mini*.5)
|
||||
普通消除-250
|
||||
1000以上空放一块-40(不减到低于1000)
|
||||
分数系统:
|
||||
操作越牛逼得分越高嗷(
|
||||
|
||||
攻击延迟:
|
||||
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢
|
||||
b2b或者b3b增加攻击力的同时也会减缓一点生效速度,mini大幅减缓生效速度
|
||||
B2B或者B3B增加攻击力的同时也会减缓一点生效速度,mini大幅减缓生效速度
|
||||
|
||||
抵消逻辑:
|
||||
发动攻击时,若缓冲条有攻击则先用额外抵挡再用攻击力1:1抵消最先受到的攻击
|
||||
没有用上的额外抵挡会被丢弃,最后剩下的攻击力会发送给对手
|
||||
|
||||
back to back(B2B)点数说明:
|
||||
B2B点数的范围在0~1200,在点数>=40时进行特殊消除为B2B,>1000时特殊消除为B3B
|
||||
普通消除-250
|
||||
spin1/2/3:+50/100/180(mini变为原来40%)
|
||||
消四:+100
|
||||
空spin:+20,此法得到的点数不能超过1000
|
||||
当点数在1000以上时空放一块-40(不减到低于1000)
|
||||
|
||||
模式说明:
|
||||
竞速:
|
||||
用你最快的速度消除40行(据难度而定)吧!
|
||||
马拉松:
|
||||
根据总消行数,速度会逐渐加快,消除两百行吧!(easy和hard就是normal开始和结束的速度,消除200行不加速)
|
||||
大师:
|
||||
马拉松进化版,如果觉得马拉松太简单了久玩这个吧,每一个难度都是一层境界,L难度和U难度攒到500点数通关,final难度为上级者专属游戏模式,不建议游玩.
|
||||
经典:
|
||||
使用低速控制设置在高速下落时尽可能消除更多的行,没有通关目标.(到90有"彩蛋")
|
||||
禅:
|
||||
闲得无聊,只是想单纯地打打块地时候可以玩此模式,无重力消除200行.
|
||||
无尽:
|
||||
无尽模式,边上会显示玩家的消行数和攻击效率,适合科研(术语).
|
||||
单挑:
|
||||
和一个电脑玩家单挑,带加号的和最后一个模式是超强机器人(仅限Windows平台),试试你能稳定打败多难的对手吧!
|
||||
回合制:
|
||||
玩法同单挑模式,只不过只有当一个人放下一个方块后另一个人才能放下一块.
|
||||
仅TSD:
|
||||
这个模式中,玩家必须用TSD(T spin double)的方式消除,否则直接判负,你能连续打出多少个TSD呢?
|
||||
隐形:
|
||||
根据不同难度,场地内(甚至当前方块)会隐形,看看你能活多久吧!(GM难度为类似TGM3的GM Roll,用于上级者练习)
|
||||
挖掘:
|
||||
每隔一定时间,系统会向场地的低端添加一行垃圾行,间隔会随着波数增加而越来越短,你能顶住几波呢?
|
||||
生存:
|
||||
每隔一定时间,系统会向玩家的垃圾缓冲槽中添加垃圾行,释放速度和间隔会随着波数增加而越来越短,玩家可以将其抵消也可以让其释放,尽可能活更久的时间.
|
||||
防守:
|
||||
系统会向玩家的垃圾缓冲槽中添加难消除的垃圾行,释放速度和间隔会随着波数增加而越来越短,玩家要尽量抵消他们来让自己存活更久.
|
||||
进攻:
|
||||
当玩家的攻击缓冲槽空时,系统会向玩家的垃圾缓冲槽中添加大量的垃圾行(高难度下后期甚至会远超过20),释放速度和间隔都会随着波数增加而越来越短,垃圾上涨速度也会提升.赶紧在其释放之前将攻击抵消到不会一下致命的量!
|
||||
科研:
|
||||
玩家只被允许做特殊消除(spin/全消/消四),在带+的难度中不允许消四,U难度下玩家甚至只被允许每一个方块都使用最简操作控制,任何违反规则的行为都会判负.
|
||||
C4W练习:(或者说是4w练习)
|
||||
系统直接提供给玩家"留4列"的场地,玩家可以自由练习4w消除,该技巧在某些时候实战很有用.(需要学会spin,否则意义不是很大)
|
||||
全清训练:
|
||||
系统会连续给玩家提供"标准开局PC套路"的场地和四个方块(不允许使用hold),玩家需要一直完成PC,否则判负.
|
||||
全清挑战:
|
||||
在消除一百行的限制内,你能全清几次?
|
||||
49人混战:
|
||||
许多玩家同时进行一局游戏(其它的是AI,不是真人).随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加.淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力.
|
||||
玩家可选四个攻击模式:
|
||||
1.随机:每次攻击后10%随机挑选一个玩家锁定
|
||||
2.最多徽章:攻击后或者锁定玩家死亡时锁定徽章最多的玩家
|
||||
3.最高:攻击后或者锁定玩家死亡时锁定场地最高的玩家(每秒刷新)
|
||||
4.反击:攻击所有锁定自己的玩家(AOE),若无则伏击随机玩家
|
||||
坚持到最后的玩家就是胜利者.
|
||||
99人混战:
|
||||
同49人混战,只是增加到了99名玩家,难度系数也有调整,对设备的要求也较高.
|
||||
干旱:
|
||||
系统提供的方块序列变得奇怪了!你能消除100行不死吗,或者,多快?
|
||||
多人:
|
||||
使用键盘或者多个手柄(也许?)
|
||||
自定义:
|
||||
玩家可以自由调整下落速度等等几乎大多数设置(不包括上述各种游戏模式的特殊效果),也可以画一个场地去消除或者是作为提示模板来玩方块拼图.在拼图模式下,按功能键切换是否显示提示模板.其中打"X"的格子不允许有方块,空的格子可以是任何状态,玩家能获得的七种普通方块必须完全符合,垃圾行方块的为止只要有方块就可以,但是不能是空气,玩家拼出自己画的图后就会判定胜利.
|
||||
混战模式说明:
|
||||
许多玩家同时进行一局游戏(对手都是AI,不是真人).随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加.淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力.
|
||||
玩家可选四个攻击模式:
|
||||
1.随机:每次攻击后10%随机挑选一个玩家锁定
|
||||
2.最多徽章:攻击后或者锁定玩家死亡时锁定徽章最多的玩家
|
||||
3.最高:攻击后或者锁定玩家死亡时锁定场地最高的玩家(每秒刷新)
|
||||
4.反击:攻击所有锁定自己的玩家(攻击AOE),若未被任何人锁定则攻击随机玩家(不锁定)
|
||||
坚持到最后的玩家就是胜利者.
|
||||
|
||||
自定义模式说明:
|
||||
玩家可以自由调整大多数参数(不包括上述各种游戏模式的特殊效果),也可以画一个场地去消除或者是作为提示模板来进行拼图模式.
|
||||
在拼图模式下,按功能键切换是否展示提示.其中打"X"的格子不允许有方块,空的格子可以是任何状态,普通的七种彩色方块必须颜色对应,垃圾行方块的为止只要有方块就可以,但是不能是空气,玩家拼出自己画的图后就会判定胜利.
|
||||
附录:
|
||||
ZXC的Ospin地图:XY0BCgAwCAIR7v9vHtUSt8AS0xKqgpnNGyXkrmFNePf6qi3BbQPrHT2Owxe6D66NeKi86dwB
|
||||
BIN
image/BG/bg1.jpg
|
Before Width: | Height: | Size: 6.3 KiB |
BIN
image/BG/bg1.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
image/BG/bg2.png
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 227 B |
BIN
image/block.png
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 140 B |
BIN
image/mess/ctrlSpeedLimit.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 31 KiB |
BIN
image/mess/pay1.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
image/mess/pay2.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 147 B After Width: | Height: | Size: 155 B |
BIN
image/mess/speedLimit.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
image/miya/ch.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
image/miya/f1.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
image/miya/f2.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
image/miya/f3.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
image/miya/f4.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
image/skin/ball(shaw).png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
image/skin/colored_bone(mrz).png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
image/skin/contrast(mrz).png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
image/skin/glow(mrz).png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
image/skin/jelly(miya).png
Normal file
|
After Width: | Height: | Size: 9.5 KiB |
BIN
image/skin/normal(mrz).png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
image/skin/plastic(mrz).png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
image/skin/pure(mrz).png
Normal file
|
After Width: | Height: | Size: 578 B |
BIN
image/skin/smooth(mrz).png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
image/skin/steel(kulumi).png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
image/skin/text_bone(mrz).png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
image/skin/white_bone(mrz).png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
349
language/chi.lua
@@ -1,349 +0,0 @@
|
||||
local BK="返回"
|
||||
local actName={
|
||||
"左移:","右移:",
|
||||
"顺时针旋转:","逆时针旋转:","180°旋转:",
|
||||
"硬降:","软降:",
|
||||
"暂存:","功能键:",
|
||||
"重新开始:",
|
||||
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
|
||||
"落在最左:","落在最右:","列在最左:","列在最右:",
|
||||
}
|
||||
return{
|
||||
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="胜利",
|
||||
lose="失败",
|
||||
pause="暂停",
|
||||
finish="结束",
|
||||
pauseCount="暂停统计",
|
||||
|
||||
custom="自定义游戏",
|
||||
customOption={
|
||||
drop="下落延迟:",
|
||||
lock="锁定延迟:",
|
||||
wait="放块延迟:",
|
||||
fall="消行延迟:",
|
||||
next="序列数量:",
|
||||
hold="暂存:",
|
||||
sequence="序列:",
|
||||
visible="可见性:",
|
||||
target="目标行数:",
|
||||
freshLimit="锁延刷新次数:",
|
||||
opponent="对手速度等级:",
|
||||
bg="背景:",
|
||||
bgm="背景音乐:",
|
||||
},
|
||||
customVal={
|
||||
drop={"[20G]",1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
||||
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="正在播放:",
|
||||
VKTchW="触摸点权重",
|
||||
VKOrgW="原始点权重",
|
||||
VKCurW="当前点权重",
|
||||
|
||||
actName=actName,
|
||||
modeName={
|
||||
[0]="自定义",
|
||||
"竞速","马拉松","大师","经典","禅","无尽","单挑","回合制","仅TSD","隐形",
|
||||
"挖掘","生存","防守","进攻","科研",
|
||||
"C4W练习","全清训练","全清挑战","49人混战","99人混战","干旱","多人",
|
||||
},
|
||||
modeInfo={
|
||||
sprint="挑战世界纪录",
|
||||
marathon="尝试坚持到最后",
|
||||
master="成为方块大师",
|
||||
classic="高速经典",
|
||||
zen="无重力消除200行",
|
||||
infinite="科研沙盒",
|
||||
solo="打败AI",
|
||||
round="下棋",
|
||||
tsd="尽可能做TSD",
|
||||
blind="最强大脑",
|
||||
dig="核能挖掘机",
|
||||
survivor="你能存活多久?",
|
||||
defender="防守练习",
|
||||
attacker="进攻练习",
|
||||
tech="尽可能不要普通消除",
|
||||
c4wtrain="无 限 连 击",
|
||||
pctrain="熟悉全清定式的组合",
|
||||
pcchallenge="100行内尽可能多PC",
|
||||
techmino49="49人混战",
|
||||
techmino99="99人混战",
|
||||
drought="异常序列",
|
||||
hotseat="友尽模式",
|
||||
},
|
||||
|
||||
load={"加载语音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={
|
||||
lang="文-Lang",
|
||||
qplay="快速开始",
|
||||
play="开始",
|
||||
setting="设置",
|
||||
music="音乐室",
|
||||
stat="统计信息",
|
||||
help="帮助",
|
||||
quit="退出",
|
||||
},
|
||||
mode={
|
||||
up="↑",
|
||||
down="↓",
|
||||
left="←",
|
||||
right="→",
|
||||
start="开始",
|
||||
custom="自定义(C)",
|
||||
back=BK,
|
||||
},
|
||||
music={
|
||||
bgm="BGM",
|
||||
up="↑",
|
||||
play="播放",
|
||||
down="↓",
|
||||
back=BK,
|
||||
},
|
||||
custom={
|
||||
up="↑",
|
||||
down="↓",
|
||||
left="←",
|
||||
right="→",
|
||||
start1="消除开始",
|
||||
start2="拼图开始",
|
||||
draw="画图(D)",
|
||||
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="清除",
|
||||
back=BK,
|
||||
},
|
||||
play={
|
||||
pause="暂停",
|
||||
},
|
||||
pause={
|
||||
resume= "继续",
|
||||
restart="重新开始",
|
||||
setting="设置",
|
||||
quit= "退出",
|
||||
},
|
||||
setting_game={
|
||||
graphic="←画面设置",
|
||||
sound="声音设置→",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
quickR="快速重新开始",
|
||||
swap="组合键切换攻击模式",
|
||||
fine="极简操作提示音",
|
||||
ctrl="键位设置",
|
||||
touch="触屏设置",
|
||||
back=BK,
|
||||
},
|
||||
setting_graphic={
|
||||
sound="←声音设置",
|
||||
game="游戏设置→",
|
||||
ghost="阴影",
|
||||
grid="网格",
|
||||
center="旋转中心",
|
||||
skin="皮肤",
|
||||
bg="背景",
|
||||
bgblock="背景动画",
|
||||
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={
|
||||
hide="显示虚拟按键",
|
||||
track="按键自动跟踪",
|
||||
tkset="跟踪设置",
|
||||
default="默认组合",
|
||||
snap=function()return text.snapLevelName[snapLevel]end,
|
||||
alpha=function()return setting.VKAlpha.."0%"end,
|
||||
icon="图标",
|
||||
size="大小",
|
||||
toggle="开关",
|
||||
back=BK,
|
||||
},
|
||||
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="专业",
|
||||
back=BK,
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge="自动避让",
|
||||
back=BK,
|
||||
},
|
||||
help={
|
||||
his="历史",
|
||||
qq="作者QQ",
|
||||
back=BK,
|
||||
},
|
||||
history={
|
||||
prev="↑",
|
||||
next="↓",
|
||||
back=BK,
|
||||
},
|
||||
stat={
|
||||
path="打开存储目录",
|
||||
back=BK,
|
||||
},
|
||||
},
|
||||
}--文
|
||||
@@ -1,350 +0,0 @@
|
||||
local BK="返回"
|
||||
local actName={
|
||||
"左移:","右移:",
|
||||
"顺时针旋转:","逆时针旋转:","180°旋转:",
|
||||
"硬降:","软降:",
|
||||
"暂存:","功能键:",
|
||||
"重新开始:",
|
||||
"左瞬移:","右瞬移:","软降到底:","软降一格:","软降四格:","软降十格:",
|
||||
"落在最左:","落在最右:","列在最左:","列在最右:",
|
||||
}
|
||||
return{
|
||||
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="胜利",
|
||||
lose="失败",
|
||||
pause="暂停",
|
||||
finish="结束",
|
||||
pauseCount="暂停统计",
|
||||
|
||||
custom="自定义游戏",
|
||||
customOption={
|
||||
drop="下落延迟:",
|
||||
lock="锁定延迟:",
|
||||
wait="放块延迟:",
|
||||
fall="消行延迟:",
|
||||
next="序列数量:",
|
||||
hold="暂存:",
|
||||
sequence="序列:",
|
||||
visible="可见性:",
|
||||
target="目标行数:",
|
||||
freshLimit="锁延刷新次数:",
|
||||
opponent="对手速度等级:",
|
||||
bg="背景:",
|
||||
bgm="背景音乐:",
|
||||
},
|
||||
customVal={
|
||||
drop={"[20G]",1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
||||
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="正在播放:",
|
||||
VKTchW="触摸点权重",
|
||||
VKOrgW="原始点权重",
|
||||
VKCurW="当前点权重",
|
||||
|
||||
actName=actName,
|
||||
modeName={
|
||||
[0]="自定义",
|
||||
"竞速","马拉松","大师","经典","禅","无尽","单挑","回合制","仅TSD","隐形",
|
||||
"挖掘","生存","防守","进攻","科研",
|
||||
"C4W练习","全清训练","全清挑战","49人混战","99人混战","干旱","多人",
|
||||
},
|
||||
modeInfo={
|
||||
sprint="挑战世界纪录",
|
||||
marathon="尝试坚持到最后",
|
||||
master="成为方块大师",
|
||||
classic="高速经典",
|
||||
zen="无重力消除200行",
|
||||
infinite="科研沙盒",
|
||||
solo="打败AI",
|
||||
round="下棋",
|
||||
tsd="尽可能做T旋双清",
|
||||
blind="最强大脑",
|
||||
dig="核能挖掘机",
|
||||
survivor="你能存活多久?",
|
||||
defender="防守练习",
|
||||
attacker="进攻练习",
|
||||
tech="尽可能不要普通消除!",
|
||||
c4wtrain="无 限 连 击",
|
||||
pctrain="熟悉全清定式的组合",
|
||||
pcchallenge="100行内尽可能多全清",
|
||||
techmino49="49人混战",
|
||||
techmino99="99人混战",
|
||||
drought="异常序列",
|
||||
hotseat="友尽模式",
|
||||
},
|
||||
|
||||
load={"加载语音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={
|
||||
lang="全-Lang",
|
||||
qplay="快速开始",
|
||||
play="开始",
|
||||
setting="设置",
|
||||
music="音乐室",
|
||||
stat="统计信息",
|
||||
help="帮助",
|
||||
quit="退出",
|
||||
},
|
||||
mode={
|
||||
up="↑",
|
||||
down="↓",
|
||||
left="←",
|
||||
right="→",
|
||||
start="开始",
|
||||
custom="自定义(C)",
|
||||
back=BK,
|
||||
},
|
||||
music={
|
||||
bgm="BGM",
|
||||
up="↑",
|
||||
play="播放",
|
||||
down="↓",
|
||||
back=BK,
|
||||
},
|
||||
custom={
|
||||
up="↑",
|
||||
down="↓",
|
||||
left="←",
|
||||
right="→",
|
||||
start1="消除开始",
|
||||
start2="拼图开始",
|
||||
draw="画图(D)",
|
||||
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="清除",
|
||||
back=BK,
|
||||
},
|
||||
play={
|
||||
pause="暂停",
|
||||
},
|
||||
pause={
|
||||
resume= "继续",
|
||||
restart="重新开始",
|
||||
setting="设置",
|
||||
quit= "退出",
|
||||
},
|
||||
|
||||
setting_game={
|
||||
graphic="←画面设置",
|
||||
sound="声音设置→",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
quickR="快速重新开始",
|
||||
swap="组合键切换攻击模式",
|
||||
fine="极简操作提示音",
|
||||
ctrl="键位设置",
|
||||
touch="触屏设置",
|
||||
back=BK,
|
||||
},
|
||||
setting_graphic={
|
||||
sound="←声音设置",
|
||||
game="游戏设置→",
|
||||
ghost="阴影",
|
||||
grid="网格",
|
||||
center="旋转中心",
|
||||
skin="皮肤",
|
||||
bg="背景",
|
||||
bgblock="背景动画",
|
||||
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={
|
||||
hide="显示虚拟按键",
|
||||
track="按键自动跟踪",
|
||||
tkset="跟踪设置",
|
||||
default="默认组合",
|
||||
snap=function()return text.snapLevelName[snapLevel]end,
|
||||
alpha=function()return setting.VKAlpha.."0%"end,
|
||||
icon="图标",
|
||||
size="大小",
|
||||
toggle="开关",
|
||||
back=BK,
|
||||
},
|
||||
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="专业",
|
||||
back=BK,
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge="自动避让",
|
||||
back=BK,
|
||||
},
|
||||
help={
|
||||
his="历史",
|
||||
qq="作者QQ",
|
||||
back=BK,
|
||||
},
|
||||
history={
|
||||
prev="↑",
|
||||
next="↓",
|
||||
back=BK,
|
||||
},
|
||||
stat={
|
||||
path="打开存储目录",
|
||||
back=BK,
|
||||
},
|
||||
},
|
||||
}
|
||||
348
language/eng.lua
@@ -1,348 +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{
|
||||
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",
|
||||
lose="LOSE",
|
||||
pause="PAUSE",
|
||||
finish="FINISH",
|
||||
pauseCount="Pause Count",
|
||||
|
||||
custom="Custom Game",
|
||||
customOption={
|
||||
drop="Drop delay:",
|
||||
lock="Lock delay:",
|
||||
wait="Next piece delay:",
|
||||
fall="Clear row delay:",
|
||||
next="Next count:",
|
||||
hold="Hold:",
|
||||
sequence="Sequence:",
|
||||
visible="Visible:",
|
||||
target="Line limit:",
|
||||
freshLimit="Lock fresh limit:",
|
||||
opponent="Opponent speed:",
|
||||
bg="Background:",
|
||||
bgm="BGM:",
|
||||
},
|
||||
customVal={
|
||||
drop={"[20G]",1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
||||
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:",
|
||||
VKTchW="Touch weight",
|
||||
VKOrgW="Origion weight",
|
||||
VKCurW="CurPos weight",
|
||||
|
||||
actName=actName,
|
||||
modeName={
|
||||
[0]="Custom",
|
||||
"Sprint","Marathon","Master","Classic","Zen","Infinite","1v1","Round","TSD-only","Blind",
|
||||
"Dig","Survivor","Defender","Attacker","Tech",
|
||||
"C4W Train","PC Train","PC Challenge","Techmino49","Techmino99","Drought","Hotseat",
|
||||
},
|
||||
modeInfo={
|
||||
sprint="Speed run",
|
||||
marathon="Survive and reach target",
|
||||
master="To be Grand Master",
|
||||
classic="Vintage car drag racing",
|
||||
zen="Clear 200 Lines without gravity",
|
||||
infinite="Infinite game,infinite happiness",
|
||||
solo="Beat AI",
|
||||
round="Chess?",
|
||||
tsd="Make more T-spin-doubles",
|
||||
blind="Invisible board",
|
||||
dig="Downstack!",
|
||||
survivor="Survive Longer!",
|
||||
defender="Hand them!",
|
||||
attacker="Attacking better then defending",
|
||||
tech="Don't do normal clear",
|
||||
c4wtrain="Infinite combo",
|
||||
pctrain="Let's learn some PCs",
|
||||
pcchallenge="Make PCs in 100 Lines",
|
||||
techmino49="Melee fight with 48 AIs",
|
||||
techmino99="Melee fight with 98 AIs",
|
||||
drought="ERRSEQ flood attack",
|
||||
hotseat="",
|
||||
},
|
||||
|
||||
load={"Loading VOICE","Loading BGM","Loading SFX","Finished",},
|
||||
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",
|
||||
"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 DISTRIBUTE",
|
||||
WidgetText={
|
||||
main={
|
||||
lang="文-Lang",
|
||||
qplay="Qplay",
|
||||
play="Play",
|
||||
setting="Settings",
|
||||
music="Music room",
|
||||
stat="Statistics",
|
||||
help="Help",
|
||||
quit="Quit",
|
||||
},
|
||||
mode={
|
||||
up="↑",
|
||||
down="↓",
|
||||
left="←",
|
||||
right="→",
|
||||
start="Start",
|
||||
custom="Custom(C)",
|
||||
back=BK,
|
||||
},
|
||||
music={
|
||||
bgm="BGM",
|
||||
up="↑",
|
||||
play="Play",
|
||||
down="↓",
|
||||
back=BK,
|
||||
},
|
||||
custom={
|
||||
up="↑",
|
||||
down="↓",
|
||||
left="←",
|
||||
right="→",
|
||||
start1="Clear Start",
|
||||
start2="Puzzle Start",
|
||||
draw="Draw(D)",
|
||||
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",
|
||||
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="+",
|
||||
quickR="Quick restart",
|
||||
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",
|
||||
bgblock="BG animation",
|
||||
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={
|
||||
hide="Show Virtual Key",
|
||||
track="Auto track",
|
||||
tkset="Track setting",
|
||||
default="Defaults",
|
||||
snap=function()return text.snapLevelName[snapLevel]end,
|
||||
alpha=function()return setting.VKAlpha.."0%"end,
|
||||
icon="Icon",
|
||||
size="Size",
|
||||
toggle="Toggle",
|
||||
back=BK,
|
||||
},
|
||||
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",
|
||||
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,
|
||||
},
|
||||
}
|
||||
}
|
||||
581
list.lua
@@ -1,581 +0,0 @@
|
||||
local mobile=system=="Android"or system=="iOS"
|
||||
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},
|
||||
orange={1,.6,0},
|
||||
lightOrange={1,.7,.3},
|
||||
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,
|
||||
}
|
||||
sfx={
|
||||
"welcome",
|
||||
"error","error_long",
|
||||
--Stereo sfxs(cannot set position)
|
||||
"button","swipe",
|
||||
"ready","start","win","fail","collect",
|
||||
"move","rotate","rotatekick","hold",
|
||||
"prerotate","prehold",
|
||||
"lock","drop","fall",
|
||||
"reach",
|
||||
"ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11","ren_mega",
|
||||
"clear_1","clear_2","clear_3","clear_4",
|
||||
"spin_0","spin_1","spin_2","spin_3",
|
||||
"emit","blip_1","blip_2",
|
||||
"perfectclear",
|
||||
--Mono sfxs
|
||||
}
|
||||
bgm={
|
||||
"blank",
|
||||
"way",
|
||||
"race",
|
||||
"newera",
|
||||
"push",
|
||||
"reason",
|
||||
"infinite",
|
||||
"cruelty",
|
||||
"final",
|
||||
"secret7th",
|
||||
"secret8th",
|
||||
"rockblock",
|
||||
"8-bit happiness",
|
||||
"shining terminal",
|
||||
"end",
|
||||
}
|
||||
voiceBank={}
|
||||
voiceName={
|
||||
"zspin","sspin","lspin","jspin","tspin","ospin","ispin",
|
||||
"single","double","triple","techrash",
|
||||
"mini","b2b","b3b","pc",
|
||||
"win","lose",
|
||||
"bye",
|
||||
"nya","voc_nya",
|
||||
}
|
||||
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"},
|
||||
voc_nya={"nya_11","nya_12","nya_13","nya_21","nya_22"},
|
||||
}
|
||||
|
||||
musicID={
|
||||
"blank",
|
||||
"way",
|
||||
"race",
|
||||
"newera",
|
||||
"push",
|
||||
"reason",
|
||||
"infinite",
|
||||
"secret7th",
|
||||
"secret8th",
|
||||
"shining terminal",
|
||||
"rockblock",
|
||||
"8-bit happiness",
|
||||
"cruelty",
|
||||
"final",
|
||||
"end",
|
||||
}
|
||||
customID={
|
||||
"drop","lock",
|
||||
"wait","fall",
|
||||
"next","hold",
|
||||
"sequence","visible",
|
||||
"target",
|
||||
"freshLimit",
|
||||
"opponent",
|
||||
"bg","bgm",
|
||||
}
|
||||
customRange={
|
||||
drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99},
|
||||
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}
|
||||
up0to4={[0]="000%UP","025%UP","050%UP","075%UP","100%UP",}
|
||||
modeID={
|
||||
[0]="custom",
|
||||
"sprint","marathon","master","classic","zen","infinite","solo","round","tsd","blind",
|
||||
"dig","survivor","defender","attacker","tech",
|
||||
"c4wtrain","pctrain","pcchallenge","techmino49","techmino99","drought","hotseat",
|
||||
}
|
||||
local O,_=true,false
|
||||
blocks={
|
||||
{[0]={{_,O,O},{O,O,_}},{{O,_},{O,O},{_,O}}},
|
||||
{[0]={{O,O,_},{_,O,O}},{{_,O},{O,O},{O,_}}},
|
||||
{[0]={{O,O,O},{_,_,O}},{{O,O},{O,_},{O,_}},{{O,_,_},{O,O,O}},{{_,O},{_,O},{O,O}}},
|
||||
{[0]={{O,O,O},{O,_,_}},{{O,_},{O,_},{O,O}},{{_,_,O},{O,O,O}},{{O,O},{_,O},{_,O}}},
|
||||
{[0]={{O,O,O},{_,O,_}},{{O,_},{O,O},{O,_}},{{_,O,_},{O,O,O}},{{_,O},{O,O},{_,O}}},
|
||||
{[0]={{O,O},{O,O}},{{O,O},{O,O}}},
|
||||
{[0]={{O,O,O,O}},{{O},{O},{O},{O}}},
|
||||
}
|
||||
local l={1,2,6,7}for i=1,4 do blocks[l[i]][2],blocks[l[i]][3]=blocks[l[i]][0],blocks[l[i]][1]end
|
||||
for i=1,7 do blocks[i+7]=blocks[i]end
|
||||
|
||||
local virtualkeySet={
|
||||
{
|
||||
{1, 80, 720-200, 80},--moveLeft
|
||||
{2, 320, 720-200, 80},--moveRight
|
||||
{3, 1280-80, 720-200, 80},--rotRight
|
||||
{4, 1280-200, 720-80, 80},--rotLeft
|
||||
{5, 1280-200, 720-320, 80},--rotFlip
|
||||
{6, 200, 720-320, 80},--hardDrop
|
||||
{7, 200, 720-80, 80},--softDrop
|
||||
{8, 1280-320, 720-200, 80},--hold
|
||||
{9, 1280-80, 280, 80},--func
|
||||
{10,80, 280, 80},--restart
|
||||
},--Farter's set,thanks
|
||||
{
|
||||
{1, 1280-320, 720-200, 80},--moveLeft
|
||||
{2, 1280-80, 720-200, 80},--moveRight
|
||||
{3, 200, 720-80, 80},--rotRight
|
||||
{4, 80, 720-200, 80},--rotLeft
|
||||
{5, 200, 720-320, 80},--rotFlip
|
||||
{6, 1280-200, 720-320, 80},--hardDrop
|
||||
{7, 1280-200, 720-80, 80},--softDrop
|
||||
{8, 320, 720-200, 80},--hold
|
||||
{9, 80, 280, 80},--func
|
||||
{10,1280-80, 280, 80},--restart
|
||||
|
||||
},--Mirrored farter's set,sknaht
|
||||
{
|
||||
{1, 80, 720-80, 80},--moveLeft
|
||||
{2, 240, 720-80, 80},--moveRight
|
||||
{3, 1280-240, 720-80, 80},--rotRight
|
||||
{4, 1280-400, 720-80, 80},--rotLeft
|
||||
{5, 1280-240, 720-240, 80},--rotFlip
|
||||
{6, 1280-80, 720-80, 80},--hardDrop
|
||||
{7, 1280-80, 720-240, 80},--softDrop
|
||||
{8, 1280-80, 720-400, 80},--hold
|
||||
{9, 80, 360, 80},--func
|
||||
{10,80, 80, 80},--restart
|
||||
},--Author's set,not recommend
|
||||
{
|
||||
{1, 1280-400, 720-80, 80},--moveLeft
|
||||
{2, 1280-80, 720-80, 80},--moveRight
|
||||
{3, 240, 720-80, 80},--rotRight
|
||||
{4, 80, 720-80, 80},--rotLeft
|
||||
{5, 240, 720-240, 80},--rotFlip
|
||||
{6, 1280-240, 720-240, 80},--hardDrop
|
||||
{7, 1280-240, 720-80, 80},--softDrop
|
||||
{8, 1280-80, 720-240, 80},--hold
|
||||
{9, 80, 720-240, 80},--func
|
||||
{10,80, 320, 80},--restart
|
||||
},--Keyboard set
|
||||
{
|
||||
{10,70, 50,27},--restart
|
||||
{9, 130, 50,27},--func
|
||||
{4, 190, 50,27},--rotLeft
|
||||
{3, 250, 50,27},--rotRight
|
||||
{5, 310, 50,27},--rotFlip
|
||||
{1, 370, 50,27},--moveLeft
|
||||
{2, 430, 50,27},--moveRight
|
||||
{8, 490, 50,27},--hold
|
||||
{7, 550, 50,27},--softDrop1
|
||||
{6, 610, 50,27},--hardDrop
|
||||
{11,670, 50,27},--insLeft
|
||||
{12,730, 50,27},--insRight
|
||||
{13,790, 50,27},--insDown
|
||||
{14,850, 50,27},--down1
|
||||
{15,910, 50,27},--down4
|
||||
{16,970, 50,27},--down10
|
||||
{17,1030, 50,27},--dropLeft
|
||||
{18,1090, 50,27},--dropRight
|
||||
{19,1150, 50,27},--addLeft
|
||||
{20,1210, 50,27},--addRight
|
||||
},--PC key feedback(top&in a row)
|
||||
}
|
||||
local customSet={
|
||||
{20,20,1,1,7,1,1,1,3,4,1,2,3},
|
||||
{18,20,1,1,7,1,1,1,8,3,8,3,3},
|
||||
{22,22,1,1,7,3,1,1,8,4,1,7,7},
|
||||
{20,20,1,1,7,1,1,3,8,3,1,7,8},
|
||||
{1,11,8,11,4,1,2,1,8,3,1,4,9},
|
||||
}
|
||||
local function useDefaultSet(n)
|
||||
for i=1,#customSet[n]do
|
||||
customSel[i]=customSet[n][i]
|
||||
end
|
||||
curBG=customRange.bg[customSel[12]]
|
||||
BGM(customRange.bgm[customSel[13]])
|
||||
end
|
||||
|
||||
--λFuncs for widgets
|
||||
local function SETdisp(k)
|
||||
return function()
|
||||
return setting[k]
|
||||
end
|
||||
end
|
||||
local function SETsto(k)
|
||||
return function(i)setting[k]=i end
|
||||
end
|
||||
local function SETrev(k)
|
||||
return function()
|
||||
setting[k]=not setting[k]
|
||||
end
|
||||
end
|
||||
local function pressKey(k)
|
||||
return function()
|
||||
love.keypressed(k)
|
||||
end
|
||||
end
|
||||
local function setPen(i)
|
||||
return function()
|
||||
pen=i
|
||||
end
|
||||
end
|
||||
local function VKAdisp(n)
|
||||
return function()
|
||||
return VK_org[n].ava
|
||||
end
|
||||
end
|
||||
local function VKAcode(n)
|
||||
return function()
|
||||
VK_org[n].ava=not VK_org[n].ava
|
||||
end
|
||||
end
|
||||
local C=color
|
||||
-- T1,T2=0,0
|
||||
Widget={
|
||||
load={},intro={},quit={},
|
||||
main={
|
||||
play= newButton(150,280,200,160,C.red, 60,function()scene.push()scene.swapTo("mode")end, nil,"setting"),
|
||||
setting=newButton(370,280,200,160,C.lightBlue, 50,function()scene.push()scene.swapTo("setting_game")end, nil,"music"),
|
||||
music= newButton(590,280,200,160,C.lightPurple,37,function()scene.push()scene.swapTo("music")end, nil,"help"),
|
||||
help= newButton(150,460,200,160,C.yellow, 55,function()scene.push()scene.swapTo("help")end, nil,"stat"),
|
||||
stat= newButton(370,460,200,160,C.cyan, 48,function()scene.push()scene.swapTo("stat")end, nil,"qplay"),
|
||||
qplay= newButton(540,415,100,70,C.lightGreen, 28,function()scene.push()loadGame(modeSel,levelSel)end, nil,"lang"),
|
||||
lang= newButton(590,505,200,70,C.lightRed, 50,function()
|
||||
setting.lang=setting.lang%#langName+1
|
||||
swapLanguage(setting.lang)
|
||||
end,nil,"quit"),
|
||||
-- S1= newSlider(520,550,380,10,10,nil,function()return T1 end,function(i)T1=i end),
|
||||
-- S2= newSlider(520,590,380,10,10,nil,function()return T2 end,function(i)T2=i end),
|
||||
quit= newButton(370,620,280,100,C.lightGrey, 60,function()VOICE("bye")scene.swapTo("quit","slowFade")end,nil,"play"),
|
||||
},
|
||||
mode={
|
||||
up= newButton(1000, 210,200,140,C.white, 80,pressKey("up"), function()return modeSel==1 end),
|
||||
down= newButton(1000, 430,200,140,C.white, 80,pressKey("down"), function()return modeSel==#modeID end),
|
||||
left= newButton(190, 160,100,80, C.white, 40,pressKey("left"), function()return levelSel==1 end),
|
||||
right= newButton(350, 160,100,80, C.white, 40,pressKey("right"), function()return levelSel==#modes[modeID[modeSel]].level end),
|
||||
start= newButton(1000, 600,250,100,C.green, 50,function()scene.push()loadGame(modeSel,levelSel)end),
|
||||
custom= newButton(275, 420,200,90, C.yellow, 40,function()scene.push()scene.swapTo("custom")end),
|
||||
back= newButton(640, 630,230,90, C.white, 45,scene.back),
|
||||
},
|
||||
music={
|
||||
bgm= newSlider(760, 80,400,10,40,nil,SETdisp("bgm"),function(i)setting.bgm=i;BGM(bgmPlaying)end),
|
||||
up= newButton(1100, 200,120,120,C.white,60,pressKey("up")),
|
||||
play= newButton(1100, 340,120,120,C.white,40,pressKey("space"),function()return setting.bgm==0 end),
|
||||
down= newButton(1100, 480,120,120,C.white,60,pressKey("down")),
|
||||
back= newButton(640, 630,230,90, C.white,45,scene.back),
|
||||
},
|
||||
custom={
|
||||
up= newButton(1000, 220,100,100,C.white, 50,function()sel=(sel-2)%#customID+1 end),
|
||||
down= newButton(1000, 460,100,100,C.white, 50,function()sel=sel%#customID+1 end),
|
||||
left= newButton(880, 340,100,100,C.white, 50,pressKey("left")),
|
||||
right= newButton(1120, 340,100,100,C.white, 50,pressKey("right")),
|
||||
start1= newButton(880, 580,220,70, C.green, 40,function()scene.push()loadGame(0,1)end),
|
||||
start2= newButton(1120, 580,220,70, C.lightPurple, 40,function()scene.push()loadGame(0,2)end),
|
||||
draw= newButton(1000, 90, 190,85, C.cyan, 40,function()scene.push()scene.swapTo("draw")end),
|
||||
set1= newButton(640, 160,240,75, C.lightRed, 40,function()useDefaultSet(1)end),
|
||||
set2= newButton(640, 250,240,75, C.lightRed, 40,function()useDefaultSet(2)end),
|
||||
set3= newButton(640, 340,240,75, C.lightRed, 40,function()useDefaultSet(3)end),
|
||||
set4= newButton(640, 430,240,75, C.lightRed, 40,function()useDefaultSet(4)end),
|
||||
set5= newButton(640, 520,240,75, C.lightRed, 40,function()useDefaultSet(5)end),
|
||||
back= newButton(640, 630,180,60, C.white, 40,scene.back),
|
||||
},
|
||||
draw={
|
||||
block1= newButton(920, 80, 120,120,C.red, 65,setPen(1)),
|
||||
block2= newButton(1060, 80, 120,120,C.green, 65,setPen(2)),
|
||||
block3= newButton(1200, 80, 120,120,C.orange, 65,setPen(3)),
|
||||
block4= newButton(920, 220,120,120,C.blue, 65,setPen(4)),
|
||||
block5= newButton(1060, 220,120,120,C.magenta, 65,setPen(5)),
|
||||
block6= newButton(1200, 220,120,120,C.yellow, 65,setPen(6)),
|
||||
block7= newButton(920, 360,120,120,C.cyan, 65,setPen(7)),
|
||||
gb1= newButton(1060, 360,120,120,C.darkGrey, 65,setPen(9)),
|
||||
gb2= newButton(1200, 360,120,120,C.grey, 65,setPen(10)),
|
||||
gb3= newButton(920, 500,120,120,C.darkPurple, 65,setPen(11)),
|
||||
gb4= newButton(1060, 500,120,120,C.darkRed, 65,setPen(12)),
|
||||
gb5= newButton(1200, 500,120,120,C.darkGreen, 65,setPen(13)),
|
||||
clear= newButton(780, 80, 120,120,C.white, 45,pressKey("delete")),
|
||||
any= newButton(780, 220,120,120,C.lightGrey, 45,setPen(0)),
|
||||
space= newButton(780, 360,120,120,C.grey, 70,setPen(-1)),
|
||||
back= newButton(1200, 640,120,120,C.white, 40,scene.back),
|
||||
},
|
||||
play={
|
||||
pause= newButton(1235,45,80,80,C.white,30,pauseGame),
|
||||
},
|
||||
pause={
|
||||
resume= newButton(640,290,240,100,C.white,50,resumeGame),
|
||||
restart=newButton(640,445,240,100,C.white,50,function()
|
||||
clearTask("play")
|
||||
updateStat()
|
||||
resetGameData()
|
||||
scene.swapTo("play","none")
|
||||
end),
|
||||
setting=newButton(1150,80,200,100,C.yellow,45,function()
|
||||
scene.push()
|
||||
scene.swapTo("setting_sound")
|
||||
end),
|
||||
quit= newButton(640,600,240,100,C.white,50,scene.back),
|
||||
},
|
||||
setting_game={
|
||||
graphic=newButton(200,80,240,80,C.lightGreen,40,function()scene.swapTo("setting_graphic")end, nil,"sound"),
|
||||
sound= newButton(1080,80,240,80,C.lightGreen,40,function()scene.swapTo("setting_sound")end, nil,"dasD"),
|
||||
dasD= newButton(180,230,50,50,C.white,40,function()
|
||||
setting.das=(setting.das-1)%31
|
||||
if setting.arr>setting.das then
|
||||
setting.arr=setting.das
|
||||
Widget.setting_game.arrD:FX()
|
||||
SFX("blip_1",.4)
|
||||
end
|
||||
end,nil,"dasU"),
|
||||
dasU= newButton(400,230,50,50,C.white,40,function()
|
||||
setting.das=(setting.das+1)%31
|
||||
if setting.arr>setting.das then
|
||||
setting.das=setting.arr
|
||||
Widget.setting_game.arrD:FX()
|
||||
SFX("blip_1",.4)
|
||||
end
|
||||
end,nil,"arrD"),
|
||||
arrD= newButton(500,230,50,50,C.white,40,function()
|
||||
setting.arr=(setting.arr-1)%16
|
||||
if setting.arr>setting.das then
|
||||
setting.das=setting.arr
|
||||
Widget.setting_game.dasU:FX()
|
||||
SFX("blip_1",.4)
|
||||
end
|
||||
end,nil,"arrU"),
|
||||
arrU= newButton(720,230,50,50,C.white,40,function()
|
||||
setting.arr=(setting.arr+1)%16
|
||||
if setting.arr>setting.das then
|
||||
setting.das=setting.arr
|
||||
Widget.setting_game.dasU:FX()
|
||||
SFX("blip_1",.4)
|
||||
end
|
||||
end,nil,"sddasD"),
|
||||
sddasD= newButton(180,340,50,50,C.white,40, function()setting.sddas=(setting.sddas-1)%11 end, nil,"sddasU"),
|
||||
sddasU= newButton(400,340,50,50,C.white,40, function()setting.sddas=(setting.sddas+1)%11 end, nil,"sdarrD"),
|
||||
sdarrD= newButton(500,340,50,50,C.white,40, function()setting.sdarr=(setting.sdarr-1)%4 end, nil,"sdarrU"),
|
||||
sdarrU= newButton(720,340,50,50,C.white,40, function()setting.sdarr=(setting.sdarr+1)%4 end, nil,"quickR"),
|
||||
quickR= newSwitch(560,430,40,SETdisp("quickR"), SETrev("quickR"), nil,"swap"),
|
||||
swap= newSwitch(560,510,25,SETdisp("swap"), SETrev("swap"), nil,"fine"),
|
||||
fine= newSwitch(560,590,25,SETdisp("fine"), SETrev("fine"), nil,"ctrl"),
|
||||
ctrl= newButton(1020,230,320,80,C.white,40,function()scene.push()scene.swapTo("setting_key")end, nil,"touch"),
|
||||
touch= newButton(1020,340,320,80,C.white,40,function()scene.push()scene.swapTo("setting_touch")end,nil,"back"),
|
||||
back= newButton(1160,600,160,160,C.white,55,scene.back,nil,"graphic"),
|
||||
},
|
||||
setting_graphic={
|
||||
sound= newButton(200,80,240,80,C.lightGreen,40,function()scene.swapTo("setting_sound")end, nil,"game"),
|
||||
game= newButton(1080,80,240,80,C.lightGreen,40,function()scene.swapTo("setting_game")end, nil,"ghost"),
|
||||
ghost= newSwitch(310,180,40,SETdisp("ghost"), SETdisp("ghost"), nil,"center"),
|
||||
center= newSwitch(580,180,40,SETdisp("center"), SETdisp("center"), nil,"smo"),
|
||||
smo= newSwitch(310,260,25,SETdisp("smo"), SETdisp("smo"), nil,"grid"),
|
||||
grid= newSwitch(580,260,40,SETdisp("grid"), SETdisp("grid"), nil,"dropFX"),
|
||||
dropFX= newSlider(310,350,373,3,40,nil,SETdisp("dropFX"), SETsto("dropFX"), nil,"shakeFX"),
|
||||
shakeFX=newSlider(310,430,373,3,40,nil,SETdisp("shakeFX"), SETsto("shakeFX"), nil,"atkFX"),
|
||||
atkFX= newSlider(310,510,373,3,40,nil,SETdisp("atkFX"), SETsto("atkFX"), nil,"frame"),
|
||||
frame= newSlider(310,590,373,10,40,nil,function()return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4 end,function(i)setting.frameMul=i<5 and 5*i+20 or 10*i end,nil,"fullscreen"),
|
||||
fullscreen=newSwitch(990,180,40,SETdisp("fullscreen"),function()
|
||||
setting.fullscreen=not setting.fullscreen
|
||||
love.window.setFullscreen(setting.fullscreen)
|
||||
if not setting.fullscreen then
|
||||
love.resize(love.graphics.getWidth(),love.graphics.getHeight())
|
||||
end
|
||||
end,nil,"bg"),
|
||||
bg= newSwitch(990,250,40,SETdisp("bg"),SETrev("bg"),nil,"bgblock"),
|
||||
bgblock=newSwitch(990,330,40,SETdisp("bgblock"),SETrev("bgblock"),nil,"skin"),--if not setting.bgblock then for i=1,16 do FX_BGblock.list[i].v=3*FX_BGblock.list[i].v end end
|
||||
skin= newButton(860,470,120,60,C.white,40,function()
|
||||
setting.skin=setting.skin%8+1
|
||||
changeBlockSkin(setting.skin)
|
||||
end,nil,"back"),
|
||||
back= newButton(1160,600,160,160,C.white,55,scene.back,nil,"sound"),
|
||||
},
|
||||
setting_sound={
|
||||
game= newButton(200,80,240,80,C.lightGreen,40,function()scene.swapTo("setting_game")end, nil,"graphic"),
|
||||
graphic=newButton(1080,80,240,80,C.lightGreen,40,function()scene.swapTo("setting_graphic")end, nil,"sfx"),
|
||||
sfx= newSlider(180,250,400,10,40,function()SFX("blip_1")end, SETdisp("sfx"), SETsto("sfx"), nil,"bgm"),
|
||||
bgm= newSlider(750,250,400,10,40,function()BGM(bgmPlaying or"blank")end, SETdisp("bgm"), SETsto("bgm"), nil,"vib"),
|
||||
vib= newSlider(180,440,400,5,40, function()VIB(1)end, SETdisp("vib"), SETsto("vib"), nil,"voc"),
|
||||
voc= newSlider(750,440,400,10,40,function()VOICE("nya")end, SETdisp("voc"), SETsto("voc"), nil,"stereo"),
|
||||
stereo= newSlider(180,630,400,10,40,function()SFX("move",1,-1)SFX("lock",1,1)end, SETdisp("stereo"), SETsto("stereo"),nil,"back"),
|
||||
back=newButton(1160,600,160,160,C.white,55,scene.back,nil,"game"),
|
||||
},
|
||||
setting_key={
|
||||
back=newButton(1140,650,200,80,C.white,50,scene.back),
|
||||
},
|
||||
setting_touch={
|
||||
hide= newSwitch(810,140,45,SETdisp("VKSwitch"),SETrev("VKSwitch")),
|
||||
track= newSwitch(810,220,45,SETdisp("VKTrack"),SETrev("VKTrack")),
|
||||
tkset= newButton(450,220,170,80,C.white,30,function()
|
||||
scene.push()
|
||||
scene.swapTo("setting_trackSetting")
|
||||
end,function()return not setting.VKTrack end),
|
||||
default=newButton(450,320,170,80,C.white,40,function()
|
||||
local D=virtualkeySet[defaultSel]
|
||||
for i=1,#VK_org do
|
||||
VK_org[i].ava=false
|
||||
end
|
||||
for n=1,#D do
|
||||
local T=D[n]
|
||||
if T[1]then
|
||||
local B=VK_org[n]
|
||||
B.ava=true
|
||||
B.x,B.y,B.r=T[2],T[3],T[4]
|
||||
end
|
||||
end--Replace keys
|
||||
defaultSel=defaultSel%5+1
|
||||
end),
|
||||
snap= newButton(640,320,170,80,C.white,40,function()
|
||||
snapLevel=snapLevel%6+1
|
||||
end),
|
||||
--VK=T,70,50,27/T,130,50,27/T,190,50,27/T,250,50,27/T,310,50,27/T,370,50,27/T,430,50,27/T,490,50,27/T,550,50,27/T,610,50,27/T,670,50,27/T,730,50,27/T,790,50,27/T,850,50,27/T,910,50,27/T,970,50,27/T,739,789,897/T,1090,50,27/T,1150,50,27/T,1210,50,27
|
||||
alpha= newButton(830,320,170,80,C.white,45,function()
|
||||
setting.VKAlpha=(setting.VKAlpha+1)%11
|
||||
--Adjust virtualkey alpha
|
||||
end),
|
||||
icon= newButton(495,420,260,80,C.white,45,SETrev("VKIcon")),
|
||||
--Switch virtualkey icon
|
||||
size= newButton(785,420,260,80,C.white,45,function()
|
||||
if sel then
|
||||
local B=VK_org[sel]
|
||||
B.r=B.r+10
|
||||
if B.r>=150 then B.r=B.r-110 end
|
||||
end
|
||||
end),
|
||||
toggle= newButton(495,520,260,80,C.white,45,function()
|
||||
scene.push()
|
||||
scene.swapTo("setting_touchSwitch")
|
||||
end),
|
||||
back= newButton(785,520,260,80,C.white,45,scene.back),
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= newSwitch(300,80, 40,VKAdisp(1),VKAcode(1)),
|
||||
b2= newSwitch(300,140, 40,VKAdisp(2),VKAcode(2)),
|
||||
b3= newSwitch(300,200, 40,VKAdisp(3),VKAcode(3)),
|
||||
b4= newSwitch(300,260, 40,VKAdisp(4),VKAcode(4)),
|
||||
b5= newSwitch(300,320, 40,VKAdisp(5),VKAcode(5)),
|
||||
b6= newSwitch(300,380, 40,VKAdisp(6),VKAcode(6)),
|
||||
b7= newSwitch(300,440, 40,VKAdisp(7),VKAcode(7)),
|
||||
b8= newSwitch(300,500, 40,VKAdisp(8),VKAcode(8)),
|
||||
b9= newSwitch(300,560, 40,VKAdisp(9),VKAcode(9)),
|
||||
b10= newSwitch(300,620, 40,VKAdisp(10),VKAcode(10)),
|
||||
b11= newSwitch(760,80, 40,VKAdisp(11),VKAcode(11)),
|
||||
b12= newSwitch(760,140, 40,VKAdisp(12),VKAcode(12)),
|
||||
b13= newSwitch(760,200, 40,VKAdisp(13),VKAcode(13)),
|
||||
b14= newSwitch(760,260, 40,VKAdisp(14),VKAcode(14)),
|
||||
b15= newSwitch(760,320, 40,VKAdisp(15),VKAcode(15)),
|
||||
b16= newSwitch(760,380, 40,VKAdisp(16),VKAcode(16)),
|
||||
b17= newSwitch(760,440, 40,VKAdisp(17),VKAcode(17)),
|
||||
b18= newSwitch(760,500, 40,VKAdisp(18),VKAcode(18)),
|
||||
b19= newSwitch(760,560, 40,VKAdisp(19),VKAcode(19)),
|
||||
b20= newSwitch(760,620, 40,VKAdisp(20),VKAcode(20)),
|
||||
norm= newButton(1080,150,240,80,C.white,50,function()for i=1,20 do VK_org[i].ava=i<11 end end),
|
||||
pro= newButton(1080,300,240,80,C.white,40,function()for i=1,20 do VK_org[i].ava=true end end),
|
||||
back= newButton(1080,600,240,80,C.white,50,scene.back),
|
||||
},
|
||||
setting_trackSetting={
|
||||
VKDodge= newSwitch(400,200, 40,SETdisp("VKDodge"),SETrev("VKDodge")),
|
||||
VKTchW= newSlider(140,310,1000,10,40,nil,SETdisp("VKTchW"),function(i)setting.VKTchW=i;setting.VKCurW=math.max(setting.VKCurW,i)end),
|
||||
VKCurW= newSlider(140,370,1000,10,40,nil,SETdisp("VKCurW"),function(i)setting.VKCurW=i;setting.VKTchW=math.min(setting.VKTchW,i)end),
|
||||
back= newButton(1080,600,240,80,C.white,50,scene.back),
|
||||
},
|
||||
help={
|
||||
his= newButton(1050,520,230,60,C.white,40,function()scene.push()scene.swapTo("history")end,nil,"back"),
|
||||
qq= newButton(1050,600,230,60,C.white,40,function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end, function()return mobile end,"his"),
|
||||
back= newButton(640, 600,180,60,C.white,40,scene.back,nil,"qq"),
|
||||
},
|
||||
history={
|
||||
prev= newButton(1155,170,180,180,C.white,70,pressKey("up"),function()return sel==1 end),
|
||||
next= newButton(1155,400,180,180,C.white,70,pressKey("down"),function()return sel==#updateLog-22 end),
|
||||
back= newButton(1155,600,180,90,C.white,40,scene.back),
|
||||
},
|
||||
stat={
|
||||
path= newButton(980,620,250,60,C.white,30,function()love.system.openURL(love.filesystem.getSaveDirectory())end,function()return mobile end,"back"),
|
||||
back= newButton(640,620,180,60,C.white,40,scene.back,nil,"path"),
|
||||
},
|
||||
}
|
||||
for _,L in next,Widget do
|
||||
for _,W in next,L do
|
||||
if W.next then
|
||||
W.next,L[W.next].prev=L[W.next],W
|
||||
end
|
||||
end
|
||||
end
|
||||
widget_sel=nil--selected widget object
|
||||
57
modes/GM.lua
Normal file
@@ -0,0 +1,57 @@
|
||||
local int,max,min=math.floor,math.max,math.min
|
||||
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.clearedRow
|
||||
if R==0 then return end
|
||||
if R==4 then R=10 end
|
||||
P.modeData.point=P.modeData.point+R
|
||||
P.modeData.event=sectionName[int(P.modeData.point*.1)+1]
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=color.lightBlue,
|
||||
env={
|
||||
noFly=true,
|
||||
minarr=1,
|
||||
_20G=true,
|
||||
drop=0,lock=15,
|
||||
wait=15,fall=6,
|
||||
next=3,
|
||||
visible="fast",
|
||||
freshLimit=15,
|
||||
dropPiece=score,
|
||||
task=function(P)
|
||||
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]
|
||||
P:win("finish")
|
||||
end
|
||||
end,
|
||||
bg="game3",bgm="shining terminal",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
players[1].modeData.event="M7"
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mText(drawableText.line,-81,300)
|
||||
mText(drawableText.techrash,-81,420)
|
||||
mText(drawableText.grade,-81,170)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,-81,110)
|
||||
setFont(75)
|
||||
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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]end,
|
||||
getRank=function(P)
|
||||
local P=P.modeData.point
|
||||
return P==80 and 5 or P>=70 and 4 or P>=60 and 3 or P>=40 and 2 or P>=20 and 1 or P>=5 and 0
|
||||
end,
|
||||
}
|
||||
58
modes/attacker_hard.lua
Normal file
@@ -0,0 +1,58 @@
|
||||
local int,rnd=math.floor,math.random
|
||||
return{
|
||||
color=color.magenta,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
fall=12,
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
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
|
||||
local t
|
||||
if D.event<20 then
|
||||
t=1500-30*D.event--1500~900
|
||||
B[p]= {pos=rnd(4,7),amount=12,countdown=t,cd0=t,time=0,sent=false,lv=3}
|
||||
B[p+1]= {pos=rnd(3,8),amount=10,countdown=t,cd0=t,time=0,sent=false,lv=4}
|
||||
else
|
||||
t=900-10*(D.event-20)--900~600
|
||||
B[p]= {pos=rnd(10),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=4}
|
||||
B[p+1]= {pos=rnd(4,7),amount=8,countdown=t,cd0=t,time=0,sent=false,lv=5}
|
||||
end
|
||||
B.sum=B.sum+22
|
||||
P.stat.recv=P.stat.recv+22
|
||||
if D.event<50 then
|
||||
D.event=D.event+1
|
||||
D.point=int(72e4/t)*.1
|
||||
if D.event==20 then
|
||||
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=3
|
||||
elseif D.event==50 then
|
||||
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="game3",bgm="push",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
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
|
||||
end,
|
||||
}
|
||||
71
modes/attacker_ultimate.lua
Normal file
@@ -0,0 +1,71 @@
|
||||
local int,rnd=math.floor,math.random
|
||||
return{
|
||||
color=color.lightYellow,
|
||||
env={
|
||||
drop=5,lock=60,
|
||||
fall=8,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
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
|
||||
local s,t
|
||||
if D.event<10 then
|
||||
t=1000-20*D.event--1000~800
|
||||
B[p]= {pos=rnd(5,6),amount=10,countdown=t,cd0=t,time=0,sent=false,lv=3}
|
||||
B[p+1]= {pos=rnd(4,7),amount=12,countdown=t,cd0=t,time=0,sent=false,lv=4}
|
||||
s=22
|
||||
elseif D.event<20 then
|
||||
t=800-20*(D.event-15)--800~600
|
||||
B[p]= {pos=rnd(3,8),amount=11,countdown=t,cd0=t,time=0,sent=false,lv=4}
|
||||
B[p+1]= {pos=rnd(4,7),amount=14,countdown=t,cd0=t,time=0,sent=false,lv=5}
|
||||
s=25
|
||||
else
|
||||
t=600-15*(D.event-30)--600~450
|
||||
B[p]= {pos=rnd(2)*9-8,amount=12,countdown=t,cd0=t,time=0,sent=false,lv=5}
|
||||
B[p+1]= {pos=rnd(3,8),amount=16,countdown=t,cd0=t,time=0,sent=false,lv=5}
|
||||
s=28
|
||||
end
|
||||
B.sum=B.sum+s
|
||||
P.stat.recv=P.stat.recv+s
|
||||
if D.event<45 then
|
||||
D.event=D.event+1
|
||||
D.point=int(s*36e3/t)*.1
|
||||
if D.event==10 then
|
||||
P:showTextF(text.great,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=4
|
||||
elseif D.event==20 then
|
||||
P:showTextF(text.awesome,0,-140,100,"appear",.6)
|
||||
P.gameEnv.pushSpeed=5
|
||||
elseif D.event==30 then
|
||||
P:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="game4",bgm="shining terminal",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,-81,200)
|
||||
mStr(
|
||||
P.modeData.event<10 and 22
|
||||
or P.modeData.event<20 and 25
|
||||
or 28
|
||||
,-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
|
||||
end,
|
||||
}
|
||||
37
modes/bigbang.lua
Normal file
@@ -0,0 +1,37 @@
|
||||
local format=string.format
|
||||
local function getField()
|
||||
local F={}
|
||||
return F
|
||||
end
|
||||
local function newField(P)
|
||||
|
||||
end
|
||||
return{
|
||||
color=color.lightGrey,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
hold=false,
|
||||
dropPiece=player.lose,
|
||||
task=nil,
|
||||
bg="game1",bgm="newera",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.extraRate}end,
|
||||
scoreDisp=function(D)return D[1].."Stage "..format("%.2f",D[2]).."%"end,
|
||||
comp=function(a,b)return a[1]>b[1]end,
|
||||
getRank=function(P)
|
||||
local W=P.modeData.event
|
||||
return
|
||||
W>=150 and 5 or
|
||||
W>=100 and 4 or
|
||||
W>=70 and 3 or
|
||||
W>=40 and 2 or
|
||||
W>=20 and 1 or
|
||||
1
|
||||
end,
|
||||
}
|
||||
42
modes/blind_easy.lua
Normal file
@@ -0,0 +1,42 @@
|
||||
local min=math.min
|
||||
return{
|
||||
color=color.cyan,
|
||||
env={
|
||||
drop=30,lock=45,
|
||||
visible="time",
|
||||
dropPiece=player.reach_winCheck,
|
||||
freshLimit=10,
|
||||
target=200,
|
||||
bg="glow",bgm="newera",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mText(drawableText.line,-81,300)
|
||||
mText(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=140 and 5 or
|
||||
T<=200 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
44
modes/blind_hard.lua
Normal file
@@ -0,0 +1,44 @@
|
||||
local min=math.min
|
||||
return{
|
||||
color=color.magenta,
|
||||
env={
|
||||
drop=15,lock=45,
|
||||
fall=10,lock=60,
|
||||
center=false,
|
||||
visible="none",
|
||||
dropPiece=player.reach_winCheck,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
bg="rgb",bgm="secret7th",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mText(drawableText.line,-81,300)
|
||||
mText(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=150 and 5 or
|
||||
T<=210 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=90 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
45
modes/blind_lunatic.lua
Normal file
@@ -0,0 +1,45 @@
|
||||
local min=math.min
|
||||
return{
|
||||
color=color.red,
|
||||
env={
|
||||
drop=10,lock=60,
|
||||
fall=5,
|
||||
center=false,ghost=false,
|
||||
dropFX=0,lockFX=0,
|
||||
visible="none",
|
||||
dropPiece=player.reach_winCheck,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
bg="rgb",bgm="secret8th",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mText(drawableText.line,-81,300)
|
||||
mText(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=180 and 5 or
|
||||
T<=240 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
43
modes/blind_normal.lua
Normal file
@@ -0,0 +1,43 @@
|
||||
local min=math.min
|
||||
return{
|
||||
color=color.green,
|
||||
env={
|
||||
drop=15,lock=45,
|
||||
freshLimit=10,
|
||||
visible="fast",
|
||||
dropPiece=player.reach_winCheck,
|
||||
freshLimit=10,
|
||||
target=200,
|
||||
bg="glow",bgm="reason",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mText(drawableText.line,-81,300)
|
||||
mText(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=150 and 5 or
|
||||
T<=210 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=126 and 3 or
|
||||
L>=80 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
40
modes/blind_ultimate.lua
Normal file
@@ -0,0 +1,40 @@
|
||||
local min=math.min
|
||||
return{
|
||||
color=color.red,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
fall=5,
|
||||
block=false,
|
||||
center=false,ghost=false,
|
||||
dropFX=0,lockFX=0,
|
||||
visible="none",
|
||||
dropPiece=player.reach_winCheck,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
bg="rgb",bgm="secret7th",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mText(drawableText.line,-81,300)
|
||||
mText(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=200 and 5 or
|
||||
L>=100 and 4 or
|
||||
L>=50 and 3 or
|
||||
L>=26 and 2 or
|
||||
L>=10 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
73
modes/c4wtrain_lunatic.lua
Normal file
@@ -0,0 +1,73 @@
|
||||
local rnd,min=math.random,math.min
|
||||
local function check_c4w(P)
|
||||
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.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
|
||||
P:win("finish")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=color.red,
|
||||
env={
|
||||
drop=5,lock=30,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg="rgb",bgm="oxygen",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
local P=players[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
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]=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,-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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.modeData.point
|
||||
if L==100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=40 and 5 or
|
||||
T<=60 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=70 and 3 or
|
||||
L>=40 and 2 or
|
||||
L>=20 and 1 or
|
||||
L>=5 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
71
modes/c4wtrain_normal.lua
Normal file
@@ -0,0 +1,71 @@
|
||||
local rnd,min=math.random,math.min
|
||||
local function check_c4w(P)
|
||||
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.clearedRow>0 then
|
||||
if P.combo>P.modeData.point then
|
||||
P.modeData.point=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
P:win("finish")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=color.green,
|
||||
env={
|
||||
drop=30,lock=60,oncehold=false,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg="rgb",bgm="oxygen",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
local P=players[1]
|
||||
local F=P.field
|
||||
for i=1,24 do
|
||||
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]=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,-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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L==100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=30 and 5 or
|
||||
T<=50 and 4 or
|
||||
T<=80 and 3 or
|
||||
2
|
||||
else
|
||||
return
|
||||
L>=60 and 2 or
|
||||
L>=30 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
57
modes/classic_fast.lua
Normal file
@@ -0,0 +1,57 @@
|
||||
local gc=love.graphics
|
||||
local function check_LVup(P)
|
||||
if P.stat.row>=P.gameEnv.target then
|
||||
P.gameEnv.target=P.gameEnv.target+10
|
||||
if P.gameEnv.target==110 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=2,2
|
||||
elseif P.gameEnv.target==200 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=1,1
|
||||
end
|
||||
if P.gameEnv.target>100 then
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
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)
|
||||
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),-81,210)
|
||||
mText(drawableText.speedLV,-81,290)
|
||||
setFont(45)
|
||||
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,
|
||||
scoreDisp=function(D)return D[1].." "..D[2].." Lines"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 L=P.stat.row
|
||||
return
|
||||
L>=200 and 5 or
|
||||
L>=191 and 4 or
|
||||
L>=110 and 3 or
|
||||
L>=50 and 2 or
|
||||
L>=5 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
66
modes/custom_clear.lua
Normal file
@@ -0,0 +1,66 @@
|
||||
local gc=love.graphics
|
||||
local int=math.floor
|
||||
return{
|
||||
color=color.white,
|
||||
env={
|
||||
dropPiece=player.reach_winCheck,
|
||||
},
|
||||
load=function()
|
||||
for i=1,#customID do
|
||||
local k=customID[i]
|
||||
modeEnv[k]=customRange[k][customSel[i]]
|
||||
end
|
||||
modeEnv._20G=modeEnv.drop==0
|
||||
modeEnv.oncehold=customSel[6]==1
|
||||
newPlayer(1,340,15)
|
||||
local L=modeEnv.opponent
|
||||
if L~=0 then
|
||||
modeEnv.target=nil
|
||||
if L<10 then
|
||||
newAIPlayer(2,965,360,.5,AITemplate("9S",2*L))
|
||||
else
|
||||
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
|
||||
repeat
|
||||
for i=1,10 do
|
||||
if preField[preField.h][i]>0 then
|
||||
goto L
|
||||
end
|
||||
end
|
||||
preField.h=preField.h-1
|
||||
until preField.h==0
|
||||
::L::
|
||||
for _,P in next,players.alive do
|
||||
local t=P.showTime*3
|
||||
for y=1,preField.h do
|
||||
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]]
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
if P.gameEnv.puzzle or P.gameEnv.target>1e10 then
|
||||
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,-81,240)
|
||||
end
|
||||
if P.gameEnv.puzzle and P.modeData.event==0 then
|
||||
local m=puzzleMark
|
||||
for y=1,preField.h do for x=1,10 do
|
||||
local T=preField[y][x]
|
||||
if T~=0 then
|
||||
gc.draw(m[T],30*x-30+dx,600-30*y+dy)
|
||||
end
|
||||
end end
|
||||
end
|
||||
end,
|
||||
}
|
||||
73
modes/custom_puzzle.lua
Normal file
@@ -0,0 +1,73 @@
|
||||
local gc=love.graphics
|
||||
local int=math.floor
|
||||
local function puzzleCheck(P)
|
||||
for y=1,20 do
|
||||
local L=P.field[y]
|
||||
for x=1,10 do
|
||||
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<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
|
||||
P:win("finish")
|
||||
end
|
||||
|
||||
return{
|
||||
color=color.white,
|
||||
env={
|
||||
puzzle=true,
|
||||
Fkey=function(P)P.modeData.event=1-P.modeData.event end,
|
||||
dropPiece=puzzleCheck,
|
||||
},
|
||||
load=function()
|
||||
for i=1,#customID do
|
||||
local k=customID[i]
|
||||
modeEnv[k]=customRange[k][customSel[i]]
|
||||
end
|
||||
modeEnv._20G=modeEnv.drop==0
|
||||
modeEnv.oncehold=customSel[6]==1
|
||||
modeEnv.target=0
|
||||
newPlayer(1,340,15)
|
||||
local L=modeEnv.opponent
|
||||
if L~=0 then
|
||||
modeEnv.target=nil
|
||||
if L<10 then
|
||||
newAIPlayer(2,965,360,.5,AITemplate("9S",2*L))
|
||||
else
|
||||
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
|
||||
repeat
|
||||
for i=1,10 do
|
||||
if preField[preField.h][i]~=0 then
|
||||
goto L
|
||||
end
|
||||
end
|
||||
preField.h=preField.h-1
|
||||
until preField.h==0
|
||||
::L::
|
||||
modeEnv.bg=customRange.bg[customSel[12]]
|
||||
modeEnv.bgm=customRange.bgm[customSel[13]]
|
||||
end,
|
||||
mesDisp=function(P)
|
||||
local dx,dy=P.fieldOff.x,P.fieldOff.y
|
||||
setFont(55)
|
||||
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
|
||||
local T=preField[y][x]
|
||||
if T~=0 then
|
||||
gc.draw(m[T],30*x-30+dx,600-30*y+dy)
|
||||
end
|
||||
end end
|
||||
end
|
||||
end,
|
||||
}
|
||||
66
modes/defender_lunatic.lua
Normal file
@@ -0,0 +1,66 @@
|
||||
local int,rnd=math.floor,math.random
|
||||
return{
|
||||
color=color.red,
|
||||
env={
|
||||
drop=5,lock=60,
|
||||
fall=6,
|
||||
next=3,
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
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
|
||||
P.modeData.counter=0
|
||||
for _=1,4 do
|
||||
P.atkBuffer[#P.atkBuffer+1]={pos=rnd(10),amount=1,countdown=5*t,cd0=5*t,time=0,sent=false,lv=2}
|
||||
end
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+4
|
||||
P.stat.recv=P.stat.recv+4
|
||||
local D=P.modeData
|
||||
if D.event<75 then
|
||||
D.event=D.event+1
|
||||
D.point=int(144e3/(240-2*D.event))*.1
|
||||
if D.event==25 then
|
||||
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: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:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||
P.dropDelay,P.gameEnv.drop=2,2
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="game4",bgm="shining terminal",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
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,
|
||||
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 5 or
|
||||
W>=80 and 4 or
|
||||
W>=55 and 3 or
|
||||
W>=30 and 2 or
|
||||
W>=20 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
}
|
||||
66
modes/defender_normal.lua
Normal file
@@ -0,0 +1,66 @@
|
||||
local int,rnd=math.floor,math.random
|
||||
return{
|
||||
color=color.green,
|
||||
env={
|
||||
drop=30,lock=60,
|
||||
fall=10,
|
||||
next=3,
|
||||
freshLimit=15,
|
||||
pushSpeed=1,
|
||||
task=function(P)
|
||||
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
|
||||
P.modeData.counter=0
|
||||
for _=1,3 do
|
||||
P.atkBuffer[#P.atkBuffer+1]={pos=rnd(2,9),amount=1,countdown=2*t,cd0=2*t,time=0,sent=false,lv=1}
|
||||
end
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+3
|
||||
P.stat.recv=P.stat.recv+3
|
||||
local D=P.modeData
|
||||
if D.event<90 then
|
||||
D.event=D.event+1
|
||||
D.point=int(108e3/(360-D.event*2))*.1
|
||||
if D.event==25 then
|
||||
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: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:showTextF(text.maxspeed,0,-140,100,"appear",.6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="game3",bgm="way",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
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,
|
||||
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>=120 and 5 or
|
||||
W>=100 and 4 or
|
||||
W>=70 and 3 or
|
||||
W>=40 and 2 or
|
||||
W>=10 and 1 or
|
||||
W>=3 and 0
|
||||
end,
|
||||
}
|
||||
43
modes/dig_hard.lua
Normal file
@@ -0,0 +1,43 @@
|
||||
local max,rnd=math.max,math.random
|
||||
return{
|
||||
color=color.magenta,
|
||||
env={
|
||||
drop=60,lock=120,
|
||||
fall=20,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
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
|
||||
end,
|
||||
bg="game2",bgm="push",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(65)
|
||||
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,
|
||||
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>=150 and 5 or
|
||||
W>=110 and 4 or
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1 or
|
||||
P.stat.row>=5 and 0
|
||||
end,
|
||||
}
|
||||
42
modes/dig_ultimate.lua
Normal file
@@ -0,0 +1,42 @@
|
||||
local max,rnd=math.max,math.random
|
||||
return{
|
||||
color=color.lightYellow,
|
||||
env={
|
||||
drop=10,lock=30,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
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.stat.recv=P.stat.recv+1
|
||||
D.counter=0
|
||||
D.event=D.event+1
|
||||
end
|
||||
end,
|
||||
bg="game2",bgm="secret7th",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(65)
|
||||
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,
|
||||
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>=150 and 5 or
|
||||
W>=110 and 4 or
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1 or
|
||||
P.stat.row>=5 and 0
|
||||
end,
|
||||
}
|
||||
119
modes/drought_lunatic.lua
Normal file
@@ -0,0 +1,119 @@
|
||||
local rnd,min,rem=math.random,math.min,table.remove
|
||||
return{
|
||||
color=color.red,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
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 Δ=0/give T when no Δ=1
|
||||
d=0--Δ=0
|
||||
A=0--Δ=1
|
||||
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=player.reach_winCheck,
|
||||
next=1,hold=false,
|
||||
ospin=false,
|
||||
freshLimit=15,
|
||||
bg="glow",bgm="reason",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
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,-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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=70 and 5 or
|
||||
T<=110 and 4 or
|
||||
T<=160 and 3 or
|
||||
T<=240 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
42
modes/drought_normal.lua
Normal file
@@ -0,0 +1,42 @@
|
||||
local min=math.min
|
||||
return{
|
||||
color=color.green,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
sequence="bag",
|
||||
bag={1,1,2,2,3,3,4,4,5,5,6,6},
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
next=3,
|
||||
ospin=false,
|
||||
freshLimit=15,
|
||||
bg="glow",bgm="reason",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
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,-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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L>=100 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=65 and 5 or
|
||||
T<=100 and 4 or
|
||||
T<=145 and 3 or
|
||||
T<=220 and 2 or
|
||||
1
|
||||
else
|
||||
return
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
14
modes/hotseat_2P.lua
Normal file
@@ -0,0 +1,14 @@
|
||||
return{
|
||||
color=color.white,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
freshLimit=15,
|
||||
bg="none",bgm="way",
|
||||
},
|
||||
load=function()
|
||||
newPlayer(1,20,15)
|
||||
newPlayer(2,650,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
end,
|
||||
}
|
||||
15
modes/hotseat_3P.lua
Normal file
@@ -0,0 +1,15 @@
|
||||
return{
|
||||
color=color.white,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
freshLimit=15,
|
||||
bg="none",bgm="way",
|
||||
},
|
||||
load=function()
|
||||
newPlayer(1,20,100,.65)
|
||||
newPlayer(2,435,100,.65)
|
||||
newPlayer(3,850,100,.65)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
end,
|
||||
}
|
||||
16
modes/hotseat_4P.lua
Normal file
@@ -0,0 +1,16 @@
|
||||
return{
|
||||
color=color.white,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
freshLimit=15,
|
||||
bg="none",bgm="way",
|
||||
},
|
||||
load=function()
|
||||
newPlayer(1,25,160,.5)
|
||||
newPlayer(2,335,160,.5)
|
||||
newPlayer(3,645,160,.5)
|
||||
newPlayer(4,955,160,.5)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
end,
|
||||
}
|
||||
32
modes/infinite.lua
Normal file
@@ -0,0 +1,32 @@
|
||||
local format=string.format
|
||||
return{
|
||||
color=color.lightGrey,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
bg="glow",bgm="infinite",
|
||||
},
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
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,
|
||||
comp=function(a,b)return a[1]>b[1]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
return
|
||||
L>=2600 and 5 or
|
||||
L>=1500 and 4 or
|
||||
L>=1000 and 3 or
|
||||
L>=500 and 2 or
|
||||
L>=100 and 1 or
|
||||
L>=20 and 0
|
||||
end,
|
||||
}
|
||||
47
modes/infinite_dig.lua
Normal file
@@ -0,0 +1,47 @@
|
||||
local format,rnd=string.format,math.random
|
||||
local function check_rise(P)
|
||||
if #P.clearedRow==0 then
|
||||
for i=1,8-P.garbageBeneath do
|
||||
P:garbageRise(13,1,rnd(10))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=color.white,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=check_rise,
|
||||
pushSpeed=1,
|
||||
bg="glow",bgm="infinite",
|
||||
},
|
||||
load=function()
|
||||
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.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.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.stat.dig
|
||||
return
|
||||
L>=626 and 5 or
|
||||
L>=400 and 4 or
|
||||
L>=200 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=40 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
}
|
||||
55
modes/marathon_hard.lua
Normal file
@@ -0,0 +1,55 @@
|
||||
local gc=love.graphics
|
||||
local function check(P)
|
||||
if P.stat.row>=P.gameEnv.target then
|
||||
local T=P.gameEnv.target
|
||||
if T==50 then
|
||||
P.gameEnv.drop=.25
|
||||
P.gameEnv.target=100
|
||||
elseif T==100 then
|
||||
P.gameEnv._20G=true
|
||||
P.gameEnv.target=200
|
||||
else
|
||||
P:win("finish")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=color.magenta,
|
||||
env={
|
||||
noFly=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
drop=.5,wait=8,fall=20,
|
||||
target=50,dropPiece=check,
|
||||
bg="strap",bgm="push",
|
||||
},
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
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,
|
||||
scoreDisp=function(D)return D[1].." Lines "..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 L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=200 and 5 or
|
||||
T<=270 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
55
modes/marathon_normal.lua
Normal file
@@ -0,0 +1,55 @@
|
||||
local gc=love.graphics
|
||||
local dropSpeed={[0]=60,50,40,30,25,20,15,12,9,7,5,4,3,2,1,1,.5,.5,.25,.25}
|
||||
local function check_LVup(P)
|
||||
local T=P.modeData.point+10
|
||||
if P.stat.row>=T then
|
||||
if T==200 then
|
||||
P:win("finish")
|
||||
else
|
||||
P.gameEnv.drop=dropSpeed[T/10]
|
||||
P.modeData.point=T
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=color.green,
|
||||
env={
|
||||
noFly=true,
|
||||
minsdarr=1,
|
||||
wait=8,fall=20,
|
||||
target=10,dropPiece=check_LVup,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
bg="strap",bgm="push",
|
||||
},
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
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,
|
||||
scoreDisp=function(D)return D[1].." Lines "..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 L=P.stat.row
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=185 and 5 or
|
||||
T<=250 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 2 or
|
||||
L>=100 and 1 or
|
||||
L>=20 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
79
modes/master_adavnce.lua
Normal file
@@ -0,0 +1,79 @@
|
||||
local gc=love.graphics
|
||||
local int=math.floor
|
||||
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.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
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
P.modeData.point=P.modeData.point+s
|
||||
if P.modeData.point%100==99 then
|
||||
SFX.play("blip_1")
|
||||
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
|
||||
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]
|
||||
E.das=int(6.9-s*.4)
|
||||
if s==3 then P.gameEnv.bone=true end
|
||||
if s==5 then
|
||||
P.modeData.point,P.modeData.event=500,4
|
||||
P:win("finish")
|
||||
else
|
||||
P:showTextF(text.stage(s),0,-120,80,"fly")
|
||||
end
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
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,
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="secret7th",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
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,
|
||||
scoreDisp=function(D)return D[1].."P "..D[2].."L "..toTime(D[3])end,
|
||||
comp=function(a,b)
|
||||
return a[1]>b[1]or(a[1]==b[1]and(a[2]<b[2]or a[2]==b[2]and a[3]<b[3]))
|
||||
end,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.point
|
||||
if S==500 then
|
||||
local L=P.stat.clear_S[4]
|
||||
return
|
||||
L>=30 and 5 or
|
||||
L>=25 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
S>=426 and 3 or
|
||||
S>=326 and 2 or
|
||||
S>=226 and 1 or
|
||||
S>=50 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
83
modes/master_beginner.lua
Normal file
@@ -0,0 +1,83 @@
|
||||
local gc=love.graphics
|
||||
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.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
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
P.modeData.point=P.modeData.point+s
|
||||
if P.modeData.point%100==99 then
|
||||
SFX.play("blip_1")
|
||||
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
|
||||
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]
|
||||
E.das=10-s
|
||||
if s==2 then
|
||||
P.gameEnv.arr=2
|
||||
elseif s==4 then
|
||||
P.gameEnv.bone=true
|
||||
end
|
||||
|
||||
if s==5 then
|
||||
P.modeData.point,P.modeData.event=500,4
|
||||
P:win("finish")
|
||||
else
|
||||
P:showTextF(text.stage(s),0,-120,80,"fly")
|
||||
end
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
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,
|
||||
freshLimit=15,
|
||||
bg="strap",bgm="secret8th",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
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,
|
||||
scoreDisp=function(D)return D[1].."P "..D[2].."L "..toTime(D[3])end,
|
||||
comp=function(a,b)
|
||||
return a[1]>b[1]or(a[1]==b[1]and(a[2]<b[2]or a[2]==b[2]and a[3]<b[3]))
|
||||
end,
|
||||
getRank=function(P)
|
||||
local S=P.modeData.point
|
||||
if S==500 then
|
||||
local L=P.stat.clear_S[4]
|
||||
return
|
||||
L>=30 and 5 or
|
||||
L>=25 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
S>=420 and 3 or
|
||||
S>=250 and 2 or
|
||||
S>=120 and 1 or
|
||||
S>=30 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
72
modes/master_final.lua
Normal file
@@ -0,0 +1,72 @@
|
||||
local gc=love.graphics
|
||||
local int=math.floor
|
||||
local function score(P)
|
||||
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
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
local MD=P.modeData
|
||||
MD.point=MD.point+s
|
||||
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: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
|
||||
if s~=2 then E.wait=E.wait-1 end
|
||||
if s~=3 then E.fall=E.fall-1 end
|
||||
elseif s<10 then
|
||||
if s==4 or s==7 then E.das=E.das-1 end
|
||||
s=s%3
|
||||
if s==0 then E.lock=E.lock-1
|
||||
elseif s==1 then E.wait=E.wait-1
|
||||
elseif s==2 then E.fall=E.fall-1
|
||||
end
|
||||
else
|
||||
MD.point,MD.event=1000,9
|
||||
P:win("finish")
|
||||
end
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
color=color.lightGrey,
|
||||
env={
|
||||
noFly=true,
|
||||
mindas=5,minarr=1,
|
||||
_20G=true,lock=12,
|
||||
wait=10,fall=10,
|
||||
dropPiece=score,
|
||||
freshLimit=15,
|
||||
easyFresh=false,bone=true,
|
||||
bg="none",bgm="distortion",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
local MD=P.modeData
|
||||
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,
|
||||
scoreDisp=function(D)return D[1].."P "..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 S=P.modeData.point
|
||||
return
|
||||
S>=1000 and 5 or
|
||||
S>=800 and 4 or
|
||||
S>=600 and 3 or
|
||||
S>=400 and 2 or
|
||||
S>=200 and 1 or
|
||||
S>=50 and 0
|
||||
end,
|
||||
}
|
||||
38
modes/pcchallenge_hard.lua
Normal file
@@ -0,0 +1,38 @@
|
||||
local gc=love.graphics
|
||||
return{
|
||||
color=color.magenta,
|
||||
env={
|
||||
drop=60,lock=120,
|
||||
fall=10,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
freshLimit=15,
|
||||
ospin=false,
|
||||
bg="rgb",bgm="infinite",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
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,-81,250)
|
||||
|
||||
setFont(75)
|
||||
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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=16 and 5 or
|
||||
L>=13 and 4 or
|
||||
L>=10 and 3 or
|
||||
L>=7 and 2 or
|
||||
L>=4 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
38
modes/pcchallenge_lunatic.lua
Normal file
@@ -0,0 +1,38 @@
|
||||
local gc=love.graphics
|
||||
return{
|
||||
color=color.red,
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
fall=20,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
freshLimit=15,
|
||||
ospin=false,
|
||||
bg="rgb",bgm="infinite",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
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,-81,250)
|
||||
|
||||
setFont(75)
|
||||
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,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local L=P.stat.pc
|
||||
return
|
||||
L>=15 and 5 or
|
||||
L>=12 and 4 or
|
||||
L>=9 and 3 or
|
||||
L>=6 and 2 or
|
||||
L>=3 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||