Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4652be7067 | ||
|
|
ed0f8031d0 | ||
|
|
15df07ae3f | ||
|
|
57857ceb67 | ||
|
|
527352ce15 | ||
|
|
b8f57f5a1c | ||
|
|
d02048f0dc | ||
|
|
4da080c6f5 |
BIN
BGM/distortion.ogg
Normal file
BIN
BGM/oxygen.ogg
Normal file
BIN
SFX/error.ogg
BIN
SFX/finesseError.ogg
Normal file
22
ai.lua
@@ -72,7 +72,7 @@ function CC_switch20G(P)
|
||||
P.r,P.c=#P.cur.bk,#P.cur.bk[1]
|
||||
P.curX,P.curY=blockPos[P.cur.id],21+ceil(P.fieldBeneath/30)-P.r+min(int(#P.field*.2),2)
|
||||
|
||||
P:freshNext()
|
||||
P:newNext()
|
||||
BOT.addNext(P.AI_bot,CCblockID[P.next[P.AIdata.next].id])
|
||||
collectgarbage()
|
||||
end
|
||||
@@ -120,11 +120,12 @@ local function ifoverlapAI(f,bk,x,y)
|
||||
end end
|
||||
end
|
||||
local function resetField(f0,f,start)
|
||||
while f[start]do
|
||||
removeRow(f,start)
|
||||
for _=#f,start,-1 do
|
||||
freeRow.discard(f[_])
|
||||
f[_]=nil
|
||||
end
|
||||
for i=start,#f0 do
|
||||
f[i]=getNewRow(0)
|
||||
f[i]=freeRow.get(0)
|
||||
for j=1,10 do
|
||||
f[i][j]=f0[i][j]
|
||||
end
|
||||
@@ -133,7 +134,7 @@ end
|
||||
local function getScore(field,cb,cy)
|
||||
local score=0
|
||||
local highest=0
|
||||
local height=getNewRow(0)
|
||||
local height=freeRow.get(0)
|
||||
local clear=0
|
||||
local hole=0
|
||||
|
||||
@@ -141,7 +142,7 @@ local function getScore(field,cb,cy)
|
||||
for j=1,10 do
|
||||
if field[i][j]==0 then goto L end
|
||||
end
|
||||
removeRow(field,i)
|
||||
freeRow.discard(rem(field,i))
|
||||
clear=clear+1
|
||||
::L::
|
||||
end
|
||||
@@ -174,8 +175,7 @@ local function getScore(field,cb,cy)
|
||||
end
|
||||
sdh=sdh+min(dh^1.6,20)
|
||||
end
|
||||
freeRow[#freeRow+1]=height
|
||||
freeRow.L=freeRow.L+1
|
||||
freeRow.discard(height)
|
||||
score=
|
||||
-#field*30
|
||||
-#cb*15
|
||||
@@ -201,7 +201,7 @@ AI_think={
|
||||
local Tfield={}--test field
|
||||
local field_org=P.field
|
||||
for i=1,#field_org do
|
||||
Tfield[i]=getNewRow(0)
|
||||
Tfield[i]=freeRow.get(0)
|
||||
for j=1,10 do
|
||||
Tfield[i][j]=field_org[i][j]
|
||||
end
|
||||
@@ -218,7 +218,7 @@ AI_think={
|
||||
end--move to bottom
|
||||
for i=1,#cb do
|
||||
local y=cy+i-1
|
||||
if not Tfield[y]then Tfield[y]=getNewRow(0)end
|
||||
if not Tfield[y]then Tfield[y]=freeRow.get(0)end
|
||||
for j=1,#cb[1]do
|
||||
if cb[i][j]then
|
||||
Tfield[y][cx+j-1]=1
|
||||
@@ -236,7 +236,7 @@ AI_think={
|
||||
|
||||
::L::
|
||||
if #Tfield>0 then
|
||||
removeRow(Tfield,1)
|
||||
freeRow.discard(rem(Tfield,1))
|
||||
goto L
|
||||
end--Release cache
|
||||
local p=#ctrl+1
|
||||
|
||||
36
conf.lua
@@ -1,10 +1,10 @@
|
||||
gameVersion="Alpha V0.8.6"
|
||||
gameVersion="Alpha V0.8.14"
|
||||
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--Search files in source before save directory
|
||||
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
|
||||
|
||||
@@ -13,23 +13,23 @@ function love.conf(t)
|
||||
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.fullscreen=false
|
||||
W.vsync=0--0:∞fps
|
||||
W.msaa=X--The number of samples to use with multi-sampled antialiasing (number)
|
||||
W.depth=0--Bits per sample in the depth buffer
|
||||
W.stencil=1--Bits per sample in the stencil buffer
|
||||
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
|
||||
348
dataList.lua
@@ -1,348 +0,0 @@
|
||||
local int,rnd,max,min=math.floor,math.random,math.max,math.min
|
||||
local format=string.format
|
||||
local ins,rem=table.insert,table.remove
|
||||
local gc=love.graphics
|
||||
|
||||
local AISpeed={60,50,45,35,25,15,9,6,4,2}
|
||||
function AITemplate(type,speedLV,next,hold,node)
|
||||
if type=="CC"then
|
||||
return{
|
||||
type="CC",
|
||||
next=next,
|
||||
hold=hold,--hold,-------------!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
delta=AISpeed[speedLV],
|
||||
node=node,
|
||||
}
|
||||
elseif type=="9S"then
|
||||
return{
|
||||
type="9S",
|
||||
delta=int(AISpeed[speedLV]*.5),
|
||||
}
|
||||
end
|
||||
end
|
||||
-------------------------<Events>-------------------------
|
||||
local function gameOver()
|
||||
local M=curMode
|
||||
local R=M.getRank
|
||||
if R then
|
||||
local P=players[1]
|
||||
R=R(P)--new rank
|
||||
if R then
|
||||
local r=modeRanks[M.id]--old rank
|
||||
if R>r then
|
||||
modeRanks[M.id]=R
|
||||
if r==0 then
|
||||
for i=1,#M.unlock do
|
||||
local m=M.unlock[i]
|
||||
modeRanks[m]=modes[m].score and 0 or 6
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local D=M.score(P)
|
||||
local L=M.records
|
||||
local p=#L--排名数-1
|
||||
if p>0 then
|
||||
::L::
|
||||
if M.comp(D,L[p])then--是否靠前
|
||||
p=p-1
|
||||
if p>0 then
|
||||
goto L
|
||||
end
|
||||
end
|
||||
end
|
||||
if p<10 then
|
||||
if p==0 then
|
||||
P:showText(text.newRecord,0,-100,100,"beat",.5)
|
||||
end
|
||||
ins(L,p+1,D)
|
||||
if L[11]then L[11]=nil end
|
||||
saveRecord(M.saveFileName,L)
|
||||
end
|
||||
end
|
||||
end--Save record
|
||||
local function die(P)--Same thing when win/lose,not really die!
|
||||
P.alive=false
|
||||
P.control=false
|
||||
P.timing=false
|
||||
P.waiting=1e99
|
||||
P.b2b=0
|
||||
clearTask(P)
|
||||
for i=1,#P.atkBuffer do
|
||||
P.atkBuffer[i].sent=true
|
||||
P.atkBuffer[i].time=0
|
||||
end
|
||||
for i=1,#P.field do
|
||||
for j=1,10 do
|
||||
P.visTime[i][j]=min(P.visTime[i][j],20)
|
||||
end
|
||||
end
|
||||
end
|
||||
Event={}
|
||||
function Event.reach_winCheck(P)
|
||||
if P.stat.row>=P.gameEnv.target then
|
||||
Event.win(P,"finish")
|
||||
end
|
||||
end
|
||||
function Event.win(P,result)
|
||||
die(P)
|
||||
P.result="WIN"
|
||||
if modeEnv.royaleMode then
|
||||
P.rank=1
|
||||
P:changeAtk()
|
||||
end
|
||||
if P.human then
|
||||
gameResult=result or"win"
|
||||
SFX("win")
|
||||
VOICE("win")
|
||||
if modeEnv.royaleMode then
|
||||
BGM("8-bit happiness")
|
||||
end
|
||||
end
|
||||
newTask(Event_task.finish,P)
|
||||
if curMode.id=="custom_puzzle"then
|
||||
P:showText(text.win,0,0,90,"beat",.4)
|
||||
else
|
||||
P:showText(text.win,0,0,90,"beat",.5,.2)
|
||||
end
|
||||
if P.human then
|
||||
gameOver()
|
||||
end
|
||||
end
|
||||
function Event.lose(P)
|
||||
if P.invincible then
|
||||
while P.field[1]do
|
||||
removeRow(P.field)
|
||||
removeRow(P.visTime)
|
||||
end
|
||||
if P.AI_mode=="CC"then
|
||||
P.AI_needFresh=true
|
||||
end
|
||||
return
|
||||
end
|
||||
die(P)
|
||||
for i=1,#players.alive do
|
||||
if players.alive[i]==P then
|
||||
rem(players.alive,i)
|
||||
break
|
||||
end
|
||||
end
|
||||
P.result="K.O."
|
||||
if modeEnv.royaleMode then
|
||||
P:changeAtk()
|
||||
P.rank=#players.alive+1
|
||||
P:showText(P.rank,0,-120,60,"appear",1,12)
|
||||
P.strength=0
|
||||
if P.lastRecv then
|
||||
local A,i=P,0
|
||||
repeat
|
||||
A,i=A.lastRecv,i+1
|
||||
until not A or A.alive or A==P or i==3
|
||||
if A and A.alive then
|
||||
if P.id==1 or A.id==1 then
|
||||
P.killMark=A.id==1
|
||||
end
|
||||
A.ko,A.badge=A.ko+1,A.badge+P.badge+1
|
||||
for i=A.strength+1,4 do
|
||||
if A.badge>=royaleData.powerUp[i]then
|
||||
A.strength=i
|
||||
end
|
||||
end
|
||||
P.lastRecv=A
|
||||
if P.id==1 or A.id==1 then
|
||||
newTask(Event_task.throwBadge,A,{P,max(3,P.badge)*4})
|
||||
end
|
||||
freshMostBadge()
|
||||
end
|
||||
else
|
||||
P.badge=-1
|
||||
end
|
||||
freshMostDangerous()
|
||||
for i=1,#players.alive do
|
||||
if players.alive[i].atking==P then
|
||||
players.alive[i]:freshTarget()
|
||||
end
|
||||
end
|
||||
if #players.alive==royaleData.stage[gameStage]then
|
||||
royaleLevelup()
|
||||
end
|
||||
end
|
||||
P.gameEnv.keepVisible=P.gameEnv.visible~="show"
|
||||
P:showText(text.lose,0,0,90,"appear",.5,.2)
|
||||
if P.human then
|
||||
gameResult="lose"
|
||||
SFX("fail")
|
||||
VOICE("lose")
|
||||
if modeEnv.royaleMode then BGM("end")end
|
||||
end
|
||||
if #players.alive==1 then
|
||||
Event.win(players.alive[1])
|
||||
end
|
||||
if #players==1 or(P.human and not players[2].human)then
|
||||
gameOver()
|
||||
end
|
||||
newTask(#players>1 and Event_task.lose or Event_task.finish,P)
|
||||
end
|
||||
-------------------------</Events>-------------------------
|
||||
|
||||
-------------------------<Tasks>-------------------------
|
||||
Event_task={}
|
||||
function Event_task.finish(P)
|
||||
if scene.cur~="play"then return true end
|
||||
P.endCounter=P.endCounter+1
|
||||
if P.endCounter>120 then pauseGame()end
|
||||
end
|
||||
function Event_task.lose(P)
|
||||
P.endCounter=P.endCounter+1
|
||||
if P.endCounter>80 then
|
||||
for i=1,#P.field do
|
||||
for j=1,10 do
|
||||
if P.visTime[i][j]>0 then
|
||||
P.visTime[i][j]=P.visTime[i][j]-1
|
||||
end
|
||||
end
|
||||
end
|
||||
if P.endCounter==120 then
|
||||
while P.field[1]do
|
||||
removeRow(P.field)
|
||||
removeRow(P.visTime)
|
||||
end
|
||||
if #players==1 and scene=="play"then
|
||||
pauseGame()
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
function Event_task.throwBadge(A,data)
|
||||
data[2]=data[2]-1
|
||||
if data[2]%4==0 then
|
||||
local S,R=data[1],data[1].lastRecv
|
||||
local x1,y1,x2,y2
|
||||
if S.small then
|
||||
x1,y1=S.centerX,S.centerY
|
||||
else
|
||||
x1,y1=S.x+308*S.size,S.y+450*S.size
|
||||
end
|
||||
if R.small then
|
||||
x2,y2=R.centerX,R.centerY
|
||||
else
|
||||
x2,y2=R.x+66*R.size,R.y+344*R.size
|
||||
end
|
||||
FX_badge[#FX_badge+1]={x1,y1,x2,y2,t=0}
|
||||
--generate badge object
|
||||
|
||||
if not A.ai and data[2]%8==0 then
|
||||
SFX("collect")
|
||||
end
|
||||
end
|
||||
if data[2]<=0 then return true end
|
||||
end
|
||||
function Event_task.bgmFadeOut(_,id)
|
||||
local v=bgm[id]:getVolume()-.025*setting.bgm*.1
|
||||
bgm[id]:setVolume(v>0 and v or 0)
|
||||
if v<=0 then
|
||||
bgm[id]:stop()
|
||||
return true
|
||||
end
|
||||
end
|
||||
function Event_task.bgmFadeIn(_,id)
|
||||
local v=min(bgm[id]:getVolume()+.025*setting.bgm*.1,setting.bgm*.1)
|
||||
bgm[id]:setVolume(v)
|
||||
if v>=setting.bgm*.1 then return true end
|
||||
end
|
||||
-------------------------</Tasks>-------------------------
|
||||
-------------------------<Modes>--------------------------
|
||||
modes={
|
||||
{"sprint_10", id=1, x=0, y=0, shape=1,size=35,unlock={2,3}},
|
||||
{"sprint_20", id=2, x=-300, y=0, shape=1,size=45,unlock={73,74,75}},
|
||||
{"sprint_40", id=3, x=0, y=-400, shape=1,size=55,unlock={4,9}},
|
||||
{"sprint_100", id=4, x=-200, y=-400, shape=1,size=45,unlock={5,7}},
|
||||
{"sprint_400", id=5, x=-400, y=-400, shape=1,size=35,unlock={6}},
|
||||
{"sprint_1000", id=6, x=-600, y=-400, shape=1,size=35,unlock={}},
|
||||
{"drought_normal", id=7, x=-400, y=-200, shape=1,size=35,unlock={8}},
|
||||
{"drought_lunatic", id=8, x=-600, y=-200, shape=1,size=35,unlock={}},
|
||||
{"marathon_normal", id=9, x=0, y=-600, shape=1,size=55,unlock={10,11,22,31,36,37,48,68,71,72}},
|
||||
{"marathon_hard", id=10, x=0, y=-800, shape=1,size=45,unlock={27}},
|
||||
{"solo_1", id=11, x=-300, y=-1000, shape=1,size=35,unlock={12}},
|
||||
{"solo_2", id=12, x=-500, y=-1000, shape=1,size=35,unlock={13}},
|
||||
{"solo_3", id=13, x=-700, y=-1000, shape=1,size=35,unlock={14,16}},
|
||||
{"solo_4", id=14, x=-900, y=-1000, shape=1,size=35,unlock={15}},
|
||||
{"solo_5", id=15, x=-1100, y=-1000, shape=1,size=35,unlock={}},
|
||||
{"techmino49_easy", id=16, x=-900, y=-1200, shape=1,size=35,unlock={17,19}},
|
||||
{"techmino49_hard", id=17, x=-900, y=-1400, shape=1,size=35,unlock={18}},
|
||||
{"techmino49_ultimate", id=18, x=-900, y=-1600, shape=1,size=35,unlock={}},
|
||||
|
||||
{"techmino99_easy", id=19, x=-1100, y=-1400, shape=1,size=35,unlock={20}},
|
||||
{"techmino99_hard", id=20, x=-1100, y=-1600, shape=1,size=35,unlock={21}},
|
||||
{"techmino99_ultimate", id=21, x=-1100, y=-1800, shape=1,size=35,unlock={}},
|
||||
{"round_1", id=22, x=-300, y=-800, shape=1,size=35,unlock={23}},
|
||||
{"round_2", id=23, x=-500, y=-800, shape=1,size=35,unlock={24}},
|
||||
{"round_3", id=24, x=-700, y=-800, shape=1,size=35,unlock={25}},
|
||||
{"round_4", id=25, x=-900, y=-800, shape=1,size=35,unlock={26}},
|
||||
{"round_5", id=26, x=-1100, y=-800, shape=1,size=35,unlock={}},
|
||||
|
||||
{"master_beginner", id=27, x=0, y=-1000, shape=1,size=35,unlock={28}},
|
||||
{"master_adavnce", id=28, x=0, y=-1200, shape=1,size=35,unlock={29,30}},
|
||||
{"master_final", id=29, x=0, y=-1400, shape=1,size=35,unlock={}},
|
||||
{"GM", id=30, x=150, y=-1500, shape=1,size=35,unlock={}},
|
||||
|
||||
{"blind_easy", id=31, x=150, y=-700, shape=1,size=35,unlock={32}},
|
||||
{"blind_normal", id=32, x=150, y=-800, shape=1,size=35,unlock={33}},
|
||||
{"blind_hard", id=33, x=150, y=-900, shape=1,size=35,unlock={34}},
|
||||
{"blind_lunatic", id=34, x=150, y=-1000, shape=1,size=35,unlock={35}},
|
||||
{"blind_ultimate", id=35, x=150, y=-1100, shape=1,size=35,unlock={}},
|
||||
|
||||
{"classic_fast", id=36, x=-300, y=-1200, shape=1,size=35,unlock={}},
|
||||
|
||||
{"survivor_easy", id=37, x=300, y=-600, shape=1,size=35,unlock={38}},
|
||||
{"survivor_normal", id=38, x=500, y=-600, shape=1,size=35,unlock={39,42,44,46}},
|
||||
{"survivor_hard", id=39, x=700, y=-600, shape=1,size=35,unlock={40}},
|
||||
{"survivor_lunatic", id=40, x=900, y=-600, shape=1,size=35,unlock={41}},
|
||||
{"survivor_ultimate", id=41, x=1100, y=-600, shape=1,size=35,unlock={}},
|
||||
{"attacker_hard", id=42, x=300, y=-800, shape=1,size=35,unlock={43}},
|
||||
{"attacker_ultimate", id=43, x=300, y=-1000, shape=1,size=35,unlock={}},
|
||||
|
||||
{"defender_normal", id=44, x=500, y=-800, shape=1,size=35,unlock={45}},
|
||||
{"defender_lunatic", id=45, x=500, y=-1000, shape=1,size=35,unlock={}},
|
||||
|
||||
{"dig_hard", id=46, x=700, y=-800, shape=1,size=35,unlock={47}},
|
||||
{"dig_ultimate", id=47, x=700, y=-1000, shape=1,size=35,unlock={}},
|
||||
|
||||
{"bigbang", id=48, x=400, y=-400, shape=1,size=55,unlock={49,51,56}},
|
||||
{"c4wtrain_normal", id=49, x=700, y=-400, shape=1,size=35,unlock={50}},
|
||||
{"c4wtrain_lunatic", id=50, x=900, y=-400, shape=1,size=35,unlock={}},
|
||||
|
||||
{"pctrain_normal", id=51, x=700, y=-200, shape=1,size=35,unlock={52,53}},
|
||||
{"pctrain_lunatic", id=52, x=900, y=-200, shape=1,size=35,unlock={}},
|
||||
{"pcchallenge_normal", id=53, x=800, y=-100, shape=1,size=35,unlock={54}},
|
||||
{"pcchallenge_hard", id=54, x=1000, y=-100, shape=1,size=35,unlock={55}},
|
||||
{"pcchallenge_lunatic", id=55, x=1200, y=-100, shape=1,size=35,unlock={}},
|
||||
{"tech_normal", id=56, x=400, y=-100, shape=1,size=35,unlock={57,58}},
|
||||
{"tech_normal+", id=57, x=650, y=150, shape=1,size=35,unlock={64,67}},
|
||||
{"tech_hard", id=58, x=400, y=50, shape=1,size=35,unlock={59,60}},
|
||||
{"tech_hard+", id=59, x=250, y=50, shape=1,size=35,unlock={}},
|
||||
{"tech_lunatic", id=60, x=400, y=200, shape=1,size=35,unlock={61,62}},
|
||||
{"tech_lunatic+", id=61, x=250, y=200, shape=1,size=35,unlock={}},
|
||||
{"tech_ultimate", id=62, x=400, y=350, shape=1,size=35,unlock={63}},
|
||||
{"tech_ultimate+", id=63, x=250, y=350, shape=1,size=35,unlock={}},
|
||||
{"tsd_easy", id=64, x=800, y=200, shape=1,size=35,unlock={65}},
|
||||
{"tsd_hard", id=65, x=1000, y=200, shape=1,size=35,unlock={66}},
|
||||
{"tsd_ultimate", id=66, x=1200, y=200, shape=1,size=35,unlock={}},
|
||||
|
||||
{"ultra", id=67, x=650, y=400, shape=1,size=35,unlock={}},
|
||||
{"zen", id=68, x=-900, y=-600, shape=1,size=35,unlock={69,70}},
|
||||
{"infinite", id=69, x=-900, y=-400, shape=1,size=35,unlock={}},
|
||||
{"infinite_dig", id=70, x=-1100, y=-600, shape=1,size=35,unlock={}},
|
||||
{"custom_clear", id=71, x=200, y=-350, shape=2,size=45,unlock={}},
|
||||
{"custom_puzzle", id=72, x=200, y=-200, shape=2,size=45,unlock={}},
|
||||
{"hotseat_2P", id=73, x=-300, y=200, shape=2,size=45,unlock={}},
|
||||
{"hotseat_3P", id=74, x=-450, y=200, shape=2,size=45,unlock={}},
|
||||
{"hotseat_4P", id=75, x=-600, y=200, shape=2,size=45,unlock={}},
|
||||
}
|
||||
modeRanks={}
|
||||
for i=1,#modes do
|
||||
modeRanks[i]=false
|
||||
assert(i==modes[i].id,"ModeID error:"..i)
|
||||
end
|
||||
modeRanks[1]=0
|
||||
103
default_data.lua
@@ -1,12 +1,18 @@
|
||||
setting={
|
||||
das=10,arr=2,
|
||||
sddas=0,sdarr=2,
|
||||
quickR=true,swap=true,
|
||||
reTime=10,
|
||||
maxNext=6,
|
||||
quickR=true,
|
||||
swap=true,
|
||||
fine=false,
|
||||
autoPause=true,
|
||||
face={0,0,0,0,0,0,0},
|
||||
--game
|
||||
|
||||
ghost=true,center=true,
|
||||
smo=true,grid=false,
|
||||
smooth=true,grid=false,
|
||||
lockFX=2,
|
||||
dropFX=3,
|
||||
shakeFX=2,
|
||||
atkFX=3,
|
||||
@@ -14,41 +20,26 @@ setting={
|
||||
|
||||
fullscreen=false,
|
||||
bg=true,
|
||||
bgblock=true,
|
||||
bgspace=true,
|
||||
lang=1,
|
||||
skin=1,
|
||||
skinSet=1,
|
||||
skin={1,5,2,8,10,3,7},
|
||||
--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,
|
||||
VKSwitch=false,--if disp
|
||||
VKTrack=false,--if tracked
|
||||
VKDodge=false,--if dodge
|
||||
VKTchW=3,--Touch-Pos Weight
|
||||
VKCurW=4,--Cur-Pos Weight
|
||||
VKIcon=true,--if disp icon
|
||||
VKAlpha=3,
|
||||
--control
|
||||
}
|
||||
local L=setting.keyMap
|
||||
for i=1,#L do
|
||||
for j=1,20 do
|
||||
if not L[i][j]then
|
||||
L[i][j]=""
|
||||
end
|
||||
end
|
||||
end
|
||||
stat={
|
||||
run=0,game=0,time=0,
|
||||
extraPiece=0,extraRate=0,
|
||||
@@ -57,32 +48,40 @@ stat={
|
||||
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,
|
||||
lastPlay=1,--last played mode ID
|
||||
}
|
||||
keyMap={
|
||||
{"left","right","x","z","c","up","down","space","tab","r"},
|
||||
{},{},{},{},{},{},{},
|
||||
--keyboard
|
||||
{"dpleft","dpright","a","b","y","dpup","dpdown","rightshoulder","x","leftshoulder"},
|
||||
{},{},{},{},{},{},{},
|
||||
--joystick
|
||||
}
|
||||
for i=1,#keyMap do for j=1,20 do
|
||||
if not keyMap[i][j]then keyMap[i][j]=""end
|
||||
end end
|
||||
--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
|
||||
{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
|
||||
virtualkey={}for i=1,#VK_org do virtualkey[i]={}end
|
||||
36
document.txt
@@ -1,22 +1,29 @@
|
||||
游戏方法:
|
||||
控制系统提供的一个个四联方块(左右移动和旋转90,180,270度),每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话)
|
||||
系统会提供的一个个四联骨牌("方块",总共7种),玩家需要控制(左右移动和旋转90,180,270度),每填满场地的一行就会将其消除,根据消除方式会给对手攻击(如果有对手的话)
|
||||
活到最后或者完成目标即胜利.
|
||||
|
||||
旋转系统:
|
||||
使用Techmino专属旋转系统
|
||||
细节不赘述
|
||||
细节懒得写(?)
|
||||
|
||||
spin判定:
|
||||
结合了不可移动判定和三角判定,是否为mini也与判定过程数据有关
|
||||
细节不赘述
|
||||
细节也懒得写(?)
|
||||
|
||||
攻击系统:
|
||||
消1/2/3/4攻击0/1/2/4
|
||||
spin1/2/3攻击2/4/6,若mini则减半
|
||||
B2B:增加1~2(techrash)/1~3(spin)攻击
|
||||
B3B:满B2B效果+1额外抵挡
|
||||
PC:将其它的伤害之和开根号后向上取整,再+6~10(本局内递增)+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,2,3,3,4,3,2…(后面都是2)
|
||||
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
|
||||
PC:将上述伤害之和开根号,再+6~10(本局内递增)+2额外抵挡(注:本局消行数>4时会将B2B点数拉满)
|
||||
根据上述规则计算后,向下取整,攻击打出
|
||||
|
||||
分数系统:
|
||||
操作越牛逼得分越高嗷(
|
||||
|
||||
攻击延迟:
|
||||
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢
|
||||
@@ -27,13 +34,12 @@ spin判定:
|
||||
没有用上的额外抵挡会被丢弃,最后剩下的攻击力会发送给对手
|
||||
|
||||
back to back(B2B)点数说明:
|
||||
B2B点数的范围在0~1200
|
||||
在40及以上特殊消除时B2B,在1000以上特殊消除时B3B,1200封顶
|
||||
消四+100
|
||||
空spin加20,不超过1000
|
||||
spin1~3+50/100/180 (mini*.5)
|
||||
B2B点数的范围在0~1200,在点数>=40时进行特殊消除为B2B,>1000时特殊消除为B3B
|
||||
普通消除-250
|
||||
1000以上空放一块-40(不减到低于1000)
|
||||
spin1/2/3:+50/100/180(mini减半)
|
||||
消四:+100
|
||||
空spin:+20,此法得到的点数不能超过1000
|
||||
当点数在1000以上时空放一块-40(不减到低于1000)
|
||||
|
||||
混战模式说明:
|
||||
许多玩家同时进行一局游戏(对手都是AI,不是真人).随着玩家数量的减少,方块下落/垃圾生效速度/垃圾升起速度都会增加.淘汰其它玩家后可以获得一个徽章和该玩家持有的徽章,增强自己的攻击力.
|
||||
|
||||
223
file.lua
Normal file
@@ -0,0 +1,223 @@
|
||||
local fs=love.filesystem
|
||||
local int,max,min=math.floor,math.max,math.min
|
||||
local sub,find=string.sub,string.find
|
||||
local toN,toS=tonumber,tostring
|
||||
local concat=table.concat
|
||||
local FILE={
|
||||
data= fs.newFile("data.dat"),
|
||||
setting=fs.newFile("setting.dat"),
|
||||
VK= fs.newFile("virtualkey.dat"),
|
||||
keyMap= fs.newFile("key.dat"),
|
||||
unlock= fs.newFile("unlock.dat"),
|
||||
}
|
||||
local function splitS(s,sep)
|
||||
local t,n={},1
|
||||
repeat
|
||||
local p=find(s,sep)or #s+1
|
||||
t[n]=sub(s,1,p-1)
|
||||
n=n+1
|
||||
s=sub(s,p+#sep)
|
||||
until #s==0
|
||||
return t
|
||||
end
|
||||
|
||||
local tabs={
|
||||
[0]="",
|
||||
"\t",
|
||||
"\t\t",
|
||||
"\t\t\t",
|
||||
"\t\t\t\t",
|
||||
"\t\t\t\t\t",
|
||||
}
|
||||
local function dumpTable(L,t)
|
||||
local s
|
||||
if t then
|
||||
s="{\n"
|
||||
else
|
||||
s="return{\n"
|
||||
t=1
|
||||
end
|
||||
local count=1
|
||||
for k,v in next,L do
|
||||
local T=type(k)
|
||||
if T=="number"then
|
||||
if k==count then
|
||||
k="";count=count+1
|
||||
else
|
||||
k="["..k.."]="
|
||||
end
|
||||
elseif T=="string"then k=k.."="
|
||||
elseif T=="boolean"then k="["..k.."]="
|
||||
else error("Error key type!")
|
||||
end
|
||||
T=type(v)
|
||||
if T=="number"then v=tostring(v)
|
||||
elseif T=="string"then v="\""..v.."\""
|
||||
elseif T=="table"then v=dumpTable(v,t+1)
|
||||
elseif T=="boolean"then v=tostring(v)
|
||||
else error("Error data type!")
|
||||
end
|
||||
s=s..tabs[t]..k..v..",\n"
|
||||
end
|
||||
return s..tabs[t-1].."}"
|
||||
end
|
||||
local function addToTable(G,base)--push all values to base
|
||||
for k,v in next,G do
|
||||
if type(v)=="table"and type(base[k])=="table"then
|
||||
addToTable(v,base[k])
|
||||
else
|
||||
base[k]=v
|
||||
end
|
||||
end
|
||||
end
|
||||
function loadRecord(N)
|
||||
local F=fs.newFile(N..".dat")
|
||||
if F:open("r")then
|
||||
local s=loadstring(F:read())
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
return s()
|
||||
else
|
||||
return{}
|
||||
end
|
||||
end
|
||||
end
|
||||
function saveRecord(N,L)
|
||||
local F=fs.newFile(N..".dat")
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(L))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
TEXT(text.recSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
function delRecord(N)
|
||||
fs.remove(N..".dat")
|
||||
end
|
||||
|
||||
function loadUnlock()
|
||||
local F=FILE.unlock
|
||||
if F:open("r")then
|
||||
local s=F:read()
|
||||
if s:sub(1,6)~="return"then s="return{"..s.."}"end
|
||||
s=loadstring(s)
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
modeRanks=s()
|
||||
end
|
||||
end
|
||||
end
|
||||
function saveUnlock()
|
||||
local F=FILE.unlock
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(modeRanks))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
TEXT(text.unlockSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
function loadData()
|
||||
local F=FILE.data
|
||||
if F:open("r")then
|
||||
local s=F:read()
|
||||
if s:sub(1,6)~="return"then
|
||||
s="return{"..s:gsub("\n",",").."}"
|
||||
end
|
||||
s=loadstring(s)
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),stat)
|
||||
end
|
||||
end
|
||||
end
|
||||
function saveData()
|
||||
local F=FILE.data
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(stat))
|
||||
F:flush()F:close()
|
||||
if not _ then
|
||||
TEXT(text.statSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
function loadSetting()
|
||||
local F=FILE.setting
|
||||
if F:open("r")then
|
||||
local s=F:read()
|
||||
if s:sub(1,6)~="return"then
|
||||
s="return{"..s:gsub("\n",",").."}"
|
||||
end
|
||||
s=loadstring(s)
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),setting)
|
||||
end
|
||||
end
|
||||
end
|
||||
function saveSetting()
|
||||
local F=FILE.setting
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(setting))
|
||||
F:flush()F:close()
|
||||
if _ then TEXT(text.settingSaved,1140,650,40,"sudden",.5)
|
||||
else TEXT(text.settingSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
function loadKeyMap()
|
||||
local F=FILE.keyMap
|
||||
if F:open("r")then
|
||||
local s=loadstring(F:read())
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),keyMap)
|
||||
end
|
||||
end
|
||||
end
|
||||
function saveKeyMap()
|
||||
local F=FILE.keyMap
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(keyMap))
|
||||
F:flush()F:close()
|
||||
if _ then TEXT(text.keyMapSaved,1140,650,26,"sudden",.5)
|
||||
else TEXT(text.keyMapSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
function loadVK()
|
||||
local F=FILE.VK
|
||||
if F:open("r")then
|
||||
local s=loadstring(F:read())
|
||||
F:close()
|
||||
if s then
|
||||
setfenv(s,{})
|
||||
addToTable(s(),VK_org)
|
||||
end
|
||||
end
|
||||
end
|
||||
function saveVK()
|
||||
local F=FILE.VK
|
||||
F:open("w")
|
||||
local _,mes=F:write(dumpTable(VK_org))
|
||||
F:flush()F:close()
|
||||
if _ then TEXT(text.VKSaved,1140,650,26,"sudden",.5)
|
||||
else TEXT(text.VKSavingError..mes,1140,650,20,"sudden",.5)
|
||||
end
|
||||
end
|
||||
|
||||
if fs.getInfo("unlock.dat")then loadUnlock()end
|
||||
if fs.getInfo("data.dat")then loadData()end
|
||||
if fs.getInfo("key.dat")then loadKeyMap()end
|
||||
if fs.getInfo("virtualkey.dat")then loadVK()end
|
||||
if fs.getInfo("setting.dat")then loadSetting()
|
||||
elseif system=="Android"or system=="iOS" then
|
||||
setting.VKSwitch=true
|
||||
setting.swap=false
|
||||
setting.vib=2
|
||||
end
|
||||
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 |
BIN
image/mess/ctrlSpeedLimit.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 28 KiB |
BIN
image/mess/speedLimit.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
image/skin/ball(shaw).png
Normal file
|
After Width: | Height: | Size: 2.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 |
172
language/chi.lua
@@ -39,7 +39,7 @@ return{
|
||||
|
||||
custom="自定义游戏",
|
||||
customOption={
|
||||
drop="下落延迟:",
|
||||
drop="下落速度:",
|
||||
lock="锁定延迟:",
|
||||
wait="放块延迟:",
|
||||
fall="消行延迟:",
|
||||
@@ -54,7 +54,7 @@ return{
|
||||
bgm="背景音乐:",
|
||||
},
|
||||
customVal={
|
||||
drop={"[20G]",1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
||||
drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
|
||||
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
||||
wait=nil,
|
||||
fall=nil,
|
||||
@@ -68,19 +68,29 @@ return{
|
||||
},
|
||||
softdropdas="软降DAS:",
|
||||
softdroparr="软降ARR:",
|
||||
snapLevelName={"任意摆放","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
|
||||
keyboard="键盘",joystick="手柄",
|
||||
space="空格",enter="回车",
|
||||
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
|
||||
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
|
||||
setting_game="游戏设置",
|
||||
setting_graphic="画面设置",
|
||||
setting_sound="声音设置",
|
||||
setting_control="控制设置",
|
||||
setting_skin="外观设置",
|
||||
preview="预览",
|
||||
keyboard="键盘",joystick="手柄",
|
||||
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
|
||||
musicRoom="音乐室",
|
||||
nowPlaying="正在播放:",
|
||||
recSavingError="纪录保存失败:",
|
||||
|
||||
settingSaved="设置已保存",
|
||||
settingSavingError="设置保存失败:",
|
||||
statSavingError="数据保存失败:",
|
||||
keyMapSaved="键位设置已保存",
|
||||
keyMapSavingError="键位保存失败:",
|
||||
VKSaved="虚拟按键设置已保存",
|
||||
VKSavingError="虚拟按键保存失败:",
|
||||
statSavingError="统计保存失败:",
|
||||
unlockSavingError="解锁保存失败:",
|
||||
recSavingError="纪录保存失败:",
|
||||
|
||||
needRestart="重新开始以生效",
|
||||
copySuccess="已复制到剪切板",
|
||||
dataCorrupted="数据损坏",
|
||||
VKTchW="触摸点权重",
|
||||
@@ -89,43 +99,26 @@ return{
|
||||
noScore="暂无成绩",
|
||||
highScore="最佳成绩",
|
||||
newRecord="打破纪录",
|
||||
errorMsg="Techmino遇到了问题,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
|
||||
|
||||
actName=actName,
|
||||
|
||||
load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载模式ing","加载乱七八糟的东西ing"},
|
||||
tips={
|
||||
"不是动画,真的在加载!",
|
||||
"大满贯10连击消四全清!",
|
||||
"<方块研究所>有一个Nspire-CX版本!",
|
||||
"B2B2B???",
|
||||
"B2B2B2B存在吗?",
|
||||
"MEGACMB!",
|
||||
"ALLSPIN!",
|
||||
"O spin triple!",
|
||||
"Miya:喵!",
|
||||
"225238922 哔哩哔哩 干杯~",
|
||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||
"合群了就会消失,但是消失不代表没有意义",
|
||||
"学会使用两个旋转键,三个更好",
|
||||
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
|
||||
"注意到\"旋转\"到底对方块做了些什么吗?",
|
||||
"20G本质是一套全新的游戏规则",
|
||||
"不要在上课时玩游戏!",
|
||||
"本游戏难度上限很高,做好心理准备",
|
||||
"本游戏可不是休闲游戏",
|
||||
"调到特殊的日期也不会发生什么的",
|
||||
"3.1415926535897932384",
|
||||
"2.7182818284590452353",
|
||||
"Let-The-Bass-Kick!",
|
||||
"使用love2d引擎制作",
|
||||
"有疑问?先看设置有没有你想要的",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"不要按F8",
|
||||
"秘密数字:626",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
"(第一次才准)今日幸运数字:"..math.random(100,626),
|
||||
pauseStat={
|
||||
"时间:",
|
||||
"按键/旋转/暂存:",
|
||||
"使用方块:",
|
||||
"消行数:",
|
||||
"攻击数:",
|
||||
"发送数:",
|
||||
"接收数:",
|
||||
"直接消除数:",
|
||||
"旋转消除数:",
|
||||
"满贯数:",
|
||||
"全清数:",
|
||||
"效率:",
|
||||
"多余操作方块:",
|
||||
"最简操作率:",
|
||||
},
|
||||
stat={
|
||||
"游戏运行次数:",
|
||||
@@ -133,32 +126,33 @@ return{
|
||||
"游戏时间:",
|
||||
"按键数:",
|
||||
"旋转数:",
|
||||
"Hold次数:",
|
||||
"方块使用数:",
|
||||
"暂存数:",
|
||||
"方块使用:",
|
||||
"消行数:",
|
||||
"攻击数:",
|
||||
"发送数:",
|
||||
"攻击(发送)数:",
|
||||
"接收数:",
|
||||
"上涨数:",
|
||||
"消除数:",
|
||||
"Spin数:",
|
||||
"B2B数:",
|
||||
"PC数:",
|
||||
"直接消除数:",
|
||||
"旋转消除数:",
|
||||
"满贯数:",
|
||||
"全清数:",
|
||||
"效率:",
|
||||
"多余操作:",
|
||||
"最简操作率:",
|
||||
},
|
||||
help={
|
||||
"好像也没啥好帮助的吧?就当是关于了",
|
||||
"这只是一个普通的方块游戏,请勿称此游戏为某某某方块",
|
||||
"不过就当成TOP/C2/KOS/TGM3/JS玩好了",
|
||||
"游戏还在测试阶段,请 勿 外 传",
|
||||
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
|
||||
"",
|
||||
"使用LOVE2D引擎",
|
||||
"作者:MrZ 邮箱:1046101471@qq.com",
|
||||
"程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:Miya",
|
||||
"特别感谢:Farter,Flyz,196,Teatube,T830,[所有测试人员]和 你!",
|
||||
"错误或者建议请附带相关信息发送到作者邮箱~",
|
||||
"特别感谢:Flyz,Farter,196,Teatube,T830,[所有内测人员]和 你!",
|
||||
"",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"仅通过唯一内测群1057456078进行免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/植入病毒的风险,程序只申请了震动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
},
|
||||
used=[[
|
||||
使用工具:
|
||||
@@ -171,20 +165,20 @@ return{
|
||||
]],
|
||||
support="支持作者",
|
||||
group="官方QQ群",
|
||||
warning="禁 止 私 自 传 播",
|
||||
WidgetText={
|
||||
main={
|
||||
lang="言/A",
|
||||
play="开始",
|
||||
setting="设置",
|
||||
music="音乐室",
|
||||
stat="统计信息",
|
||||
help="帮助",
|
||||
qplay="快速开始",
|
||||
lang="言/A",
|
||||
quit="退出",
|
||||
},
|
||||
mode={
|
||||
draw="画图(Q)",
|
||||
setting="参数(E)",
|
||||
custom="参数(E)",
|
||||
start="开始",
|
||||
back=BK,
|
||||
},
|
||||
@@ -209,21 +203,9 @@ return{
|
||||
},
|
||||
draw={
|
||||
any="不定",
|
||||
block1="Z",
|
||||
block2="S",
|
||||
block3="L",
|
||||
block4="J",
|
||||
block5="T",
|
||||
block6="O",
|
||||
block7="I",
|
||||
gb1="■",
|
||||
gb2="■",
|
||||
gb3="■",
|
||||
gb4="■",
|
||||
gb5="■",
|
||||
space="×",
|
||||
clear="清除",
|
||||
demo="演示模式",
|
||||
demo="不显示×",
|
||||
copy="复制",
|
||||
paste="粘贴",
|
||||
back=BK,
|
||||
@@ -232,24 +214,25 @@ return{
|
||||
pause="暂停",
|
||||
},
|
||||
pause={
|
||||
resume= "继续",
|
||||
restart="重新开始",
|
||||
sfx="音效",
|
||||
bgm="音乐",
|
||||
quit= "退出",
|
||||
resume= "继续(空格)",
|
||||
restart="重新开始(R)",
|
||||
setting="设置(S)",
|
||||
quit= "退出(esc)",
|
||||
},
|
||||
setting_game={
|
||||
graphic="←画面设置",
|
||||
sound="声音设置→",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
ctrl="控制设置",
|
||||
reTime="开局等待时间",
|
||||
maxNext="最大预览数量",
|
||||
autoPause="自动暂停",
|
||||
layout="外观",
|
||||
key="键位设置",
|
||||
touch="触屏设置",
|
||||
quickR="快速重新开始",
|
||||
autoPause="自动暂停",
|
||||
swap="组合键切换攻击模式",
|
||||
fine="极简操作提示音",
|
||||
ctrl="键位设置",
|
||||
touch="触屏设置",
|
||||
back=BK,
|
||||
},
|
||||
setting_graphic={
|
||||
@@ -258,10 +241,10 @@ return{
|
||||
ghost="阴影",
|
||||
grid="网格",
|
||||
center="旋转中心",
|
||||
skin="皮肤",
|
||||
bg="背景",
|
||||
bgblock="背景动画",
|
||||
smo="平滑下落",
|
||||
bgspace="星空背景",
|
||||
smooth="平滑下落",
|
||||
lockFX="锁定特效等级",
|
||||
dropFX="下落特效等级",
|
||||
shakeFX="晃动特效等级",
|
||||
atkFX="攻击特效等级",
|
||||
@@ -279,9 +262,28 @@ return{
|
||||
stereo="立体声",
|
||||
back=BK,
|
||||
},
|
||||
setting_control={
|
||||
das="DAS",arr="ARR",
|
||||
sddas="软降DAS",sdarr="软降ARR",
|
||||
reset="重置",
|
||||
back=BK,
|
||||
},
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
setting_skin={
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="R",
|
||||
prev2="↑",next2="↓",spin2="R",
|
||||
prev3="↑",next3="↓",spin3="R",
|
||||
prev4="↑",next4="↓",spin4="R",
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
skinR="重置配色",
|
||||
faceR="重置方向",
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
default="默认组合",
|
||||
snap=function()return text.snapLevelName[sceneTemp.snap]end,
|
||||
|
||||
@@ -39,7 +39,7 @@ return{
|
||||
|
||||
custom="自定义游戏",
|
||||
customOption={
|
||||
drop="下落延迟:",
|
||||
drop="下落速度:",
|
||||
lock="锁定延迟:",
|
||||
wait="放块延迟:",
|
||||
fall="消行延迟:",
|
||||
@@ -54,7 +54,7 @@ return{
|
||||
bgm="背景音乐:",
|
||||
},
|
||||
customVal={
|
||||
drop={"[20G]",1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
||||
drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
|
||||
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
||||
wait=nil,
|
||||
fall=nil,
|
||||
@@ -66,21 +66,29 @@ return{
|
||||
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返回",
|
||||
snapLevelName={"无吸附","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"},
|
||||
setting_game="游戏设置",
|
||||
setting_graphic="画面设置",
|
||||
setting_sound="声音设置",
|
||||
setting_control="控制设置",
|
||||
setting_skin="外观设置",
|
||||
preview="预览",
|
||||
keyboard="键盘",joystick="手柄",
|
||||
ctrlSetHelp="方向键选择/翻页,回车修改,esc返回",
|
||||
musicRoom="音乐室",
|
||||
nowPlaying="正在播放:",
|
||||
recSavingError="纪录保存失败:",
|
||||
|
||||
settingSaved="设置已保存",
|
||||
settingSavingError="设置保存失败:",
|
||||
statSavingError="数据保存失败:",
|
||||
keyMapSaved="键位设置已保存",
|
||||
keyMapSavingError="键位保存失败:",
|
||||
VKSaved="虚拟按键设置已保存",
|
||||
VKSavingError="虚拟按键保存失败:",
|
||||
statSavingError="统计保存失败:",
|
||||
unlockSavingError="解锁保存失败:",
|
||||
recSavingError="纪录保存失败:",
|
||||
|
||||
needRestart="重新开始以生效",
|
||||
copySuccess="已复制到剪切板",
|
||||
dataCorrupted="数据损坏",
|
||||
VKTchW="触摸点权重",
|
||||
@@ -89,43 +97,26 @@ return{
|
||||
noScore="暂无成绩",
|
||||
highScore="最佳成绩",
|
||||
newRecord="打破纪录",
|
||||
errorMsg="Techmino遇到了问题,需要重新启动.\n我们已收集了一些错误信息,你可以向作者进行反馈.",
|
||||
|
||||
actName=actName,
|
||||
|
||||
load={[0]="加载完成","加载语音ing","加载音乐ing","加载音效ing","加载模式ing","加载乱七八糟的东西ing"},
|
||||
tips={
|
||||
"不是动画,真的在加载!",
|
||||
"大满贯10连击消四全清!",
|
||||
"<方块研究所>有一个Nspire-CX版本!",
|
||||
"B2B2B???",
|
||||
"B2B2B2B存在吗?",
|
||||
"MEGACMB!",
|
||||
"ALLSPIN!",
|
||||
"O型回旋三清!",
|
||||
"Miya:喵!",
|
||||
"225238922 哔哩哔哩 干杯~",
|
||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||
"合群了就会消失,但是消失不代表没有意义",
|
||||
"学会使用两个旋转键,三个更好",
|
||||
"更小的DAS和ARR拥有更高的操作上限(如果你还能控制得了的话)",
|
||||
"注意到\"旋转\"到底对方块做了些什么吗?",
|
||||
"20G本质是一套全新的游戏规则",
|
||||
"不要在上课时玩游戏!",
|
||||
"本游戏难度上限很高,做好心理准备",
|
||||
"本游戏可不是休闲游戏",
|
||||
"调到特殊的日期也不会发生什么的",
|
||||
"3.1415926535897932384",
|
||||
"2.7182818284590452353",
|
||||
"Let-The-Bass-Kick!",
|
||||
"使用love2d引擎制作",
|
||||
"有疑问?先看设置有没有你想要的",
|
||||
"有建议的话可以把信息反馈给作者~",
|
||||
"不要按F8",
|
||||
"秘密数字:626",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"戴上耳机以获得最佳体验",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
"(第一次才准)今日幸运数字:"..math.random(100,626),
|
||||
pauseStat={
|
||||
"时间:",
|
||||
"按键/旋转/暂存:",
|
||||
"使用方块:",
|
||||
"消行数:",
|
||||
"攻击数:",
|
||||
"发送数:",
|
||||
"接收数:",
|
||||
"直接消除数:",
|
||||
"旋转消除数:",
|
||||
"满贯数:",
|
||||
"全清数:",
|
||||
"效率:",
|
||||
"多余操作方块:",
|
||||
"最简操作率:",
|
||||
},
|
||||
stat={
|
||||
"游戏运行次数:",
|
||||
@@ -133,32 +124,33 @@ return{
|
||||
"游戏时间:",
|
||||
"按键数:",
|
||||
"旋转数:",
|
||||
"暂存次数:",
|
||||
"暂存数:",
|
||||
"方块使用:",
|
||||
"消行数:",
|
||||
"攻击行数:",
|
||||
"发送数:",
|
||||
"攻击(发送)数:",
|
||||
"接收数:",
|
||||
"上涨数:",
|
||||
"消除数:",
|
||||
"旋转消行数:",
|
||||
"直接消除数:",
|
||||
"旋转消除数:",
|
||||
"满贯数:",
|
||||
"全清数:",
|
||||
"效率:",
|
||||
"多余操作:",
|
||||
"最简操作率:",
|
||||
},
|
||||
help={
|
||||
"好像也没啥好帮助的吧?就当是关于了",
|
||||
"这只是一个普通的方块游戏,请勿称此游戏为某某某方块",
|
||||
"不过就当成TOP/C2/KOS/TGM3/JS玩好了",
|
||||
"游戏还在测试阶段,请 勿 外 传",
|
||||
"从TO/C2/KOS/TGM3/JS等方块获得过灵感",
|
||||
"",
|
||||
"使用LOVE2D引擎",
|
||||
"作者:MrZ 邮箱:1046101471@qq.com",
|
||||
"程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:Miya",
|
||||
"特别感谢:Farter,Flyz,196,Teatube,T830,[所有测试人员]和 你!",
|
||||
"错误或者建议请附带相关信息发送到作者邮箱~",
|
||||
"特别感谢:Flyz,Farter,196,Teatube,T830,[所有内测人员]和 你!",
|
||||
"",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"仅通过唯一内测群1057456078进行免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/植入病毒的风险,程序只申请了震动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)",
|
||||
"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
},
|
||||
used=[[
|
||||
使用工具:
|
||||
@@ -171,20 +163,20 @@ return{
|
||||
]],
|
||||
support="支持作者",
|
||||
group="官方QQ群",
|
||||
warning="禁 止 私 自 传 播",
|
||||
WidgetText={
|
||||
main={
|
||||
lang="言/A",
|
||||
play="开始",
|
||||
setting="设置",
|
||||
music="音乐室",
|
||||
stat="统计信息",
|
||||
help="帮助",
|
||||
qplay="快速开始",
|
||||
lang="言/A",
|
||||
quit="退出",
|
||||
},
|
||||
mode={
|
||||
draw="画图(Q)",
|
||||
setting="参数(E)",
|
||||
custon="参数(E)",
|
||||
start="开始",
|
||||
back=BK,
|
||||
},
|
||||
@@ -209,21 +201,9 @@ return{
|
||||
},
|
||||
draw={
|
||||
any="不定",
|
||||
block1="Z",
|
||||
block2="S",
|
||||
block3="L",
|
||||
block4="J",
|
||||
block5="T",
|
||||
block6="O",
|
||||
block7="I",
|
||||
gb1="■",
|
||||
gb2="■",
|
||||
gb3="■",
|
||||
gb4="■",
|
||||
gb5="■",
|
||||
space="×",
|
||||
clear="清除",
|
||||
demo="演示模式",
|
||||
demo="不显示×",
|
||||
copy="复制",
|
||||
paste="粘贴",
|
||||
back=BK,
|
||||
@@ -232,25 +212,24 @@ return{
|
||||
pause="暂停",
|
||||
},
|
||||
pause={
|
||||
resume= "继续",
|
||||
restart="重新开始",
|
||||
sfx="音效",
|
||||
bgm="音乐",
|
||||
quit= "退出",
|
||||
resume= "继续(空格)",
|
||||
restart="重新开始(R)",
|
||||
setting="设置(S)",
|
||||
quit= "退出(esc)",
|
||||
},
|
||||
|
||||
setting_game={
|
||||
graphic="←画面设置",
|
||||
sound="声音设置→",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
ctrl="控制设置",
|
||||
reTime="开局等待时间",
|
||||
maxNext="最大预览数量",
|
||||
autoPause="自动暂停",
|
||||
layout="外观",
|
||||
key="键位设置",
|
||||
touch="触屏设置",
|
||||
quickR="快速重新开始",
|
||||
swap="组合键切换攻击模式",
|
||||
fine="极简操作提示音",
|
||||
ctrl="键位设置",
|
||||
touch="触屏设置",
|
||||
back=BK,
|
||||
},
|
||||
setting_graphic={
|
||||
@@ -259,10 +238,10 @@ return{
|
||||
ghost="阴影",
|
||||
grid="网格",
|
||||
center="旋转中心",
|
||||
skin="皮肤",
|
||||
bg="背景",
|
||||
bgblock="背景动画",
|
||||
smo="平滑下落",
|
||||
bgspace="星空背景",
|
||||
smooth="平滑下落",
|
||||
lockFX="锁定特效等级",
|
||||
dropFX="下落特效等级",
|
||||
shakeFX="晃动特效等级",
|
||||
atkFX="攻击特效等级",
|
||||
@@ -280,9 +259,28 @@ return{
|
||||
stereo="立体声",
|
||||
back=BK,
|
||||
},
|
||||
setting_control={
|
||||
das="首次移动延迟",arr="移动重复延迟",
|
||||
sddas="首次软降延迟",sdarr="软降重复延迟",
|
||||
reset="重置",
|
||||
back=BK,
|
||||
},
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
setting_skin={
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="转",
|
||||
prev2="↑",next2="↓",spin2="转",
|
||||
prev3="↑",next3="↓",spin3="转",
|
||||
prev4="↑",next4="↓",spin4="转",
|
||||
prev5="↑",next5="↓",spin5="转",
|
||||
prev6="↑",next6="↓",spin6="转",
|
||||
prev7="↑",next7="↓",spin7="转",
|
||||
skinR="重置配色",
|
||||
faceR="重置方向",
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
default="默认组合",
|
||||
snap=function()return text.snapLevelName[sceneTemp.snap]end,
|
||||
|
||||
169
language/eng.lua
@@ -1,7 +1,7 @@
|
||||
local BK="Back"
|
||||
local actName={
|
||||
"Move Left:","Move Right:",
|
||||
"Rotate Right:","Rotate Left:","Rotate Flip:",
|
||||
"Rotate Right:","Rotate Left:","Rotate 180°:",
|
||||
"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:",
|
||||
@@ -37,7 +37,7 @@ return{
|
||||
|
||||
custom="Custom Game",
|
||||
customOption={
|
||||
drop="Drop delay:",
|
||||
drop="Drop speed:",
|
||||
lock="Lock delay:",
|
||||
wait="Next piece delay:",
|
||||
fall="Clear row delay:",
|
||||
@@ -52,7 +52,7 @@ return{
|
||||
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,"∞"},
|
||||
drop={"0G","1/180G","1/60G","1/40G","1/30G","1/25G","1/20G","1/18G","1/16G","1/14G","1/12G","1/10G","1/9G","1/8G","1/7G","1/6G","1/5G","1/4G","1/3G","1/2G","1G","2G","4G","8G","20G"},
|
||||
lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"},
|
||||
wait=nil,
|
||||
fall=nil,
|
||||
@@ -64,21 +64,29 @@ return{
|
||||
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",
|
||||
setting_control="Control Setting",
|
||||
setting_skin="Layout Setting",
|
||||
preview="Preview",
|
||||
keyboard="Keyboard",joystick="Joystick",
|
||||
ctrlSetHelp="Arrowkey to select/change slot,Enter to change,Esc back",
|
||||
musicRoom="Music Room",
|
||||
nowPlaying="Now Playing:",
|
||||
recSavingError="Failed to save record:",
|
||||
settingSaved="Setting saved",
|
||||
|
||||
settingSaved="Setting Saved",
|
||||
settingSavingError="Failed to save setting:",
|
||||
keyMapSaved="Key setting saved",
|
||||
keyMapSavingError="Failed to save key setting:",
|
||||
VKSaved="virtual key saved",
|
||||
VKSavingError="Failed to save virtual key:",
|
||||
statSavingError="Failed to save stat:",
|
||||
unlockSavingError="Failed to save unlock:",
|
||||
recSavingError="Failed to save record:",
|
||||
|
||||
needRestart="Effective after restart",
|
||||
copySuccess="Copy Success",
|
||||
dataCorrupted="Data Corrupted",
|
||||
VKTchW="Touch weight",
|
||||
@@ -87,44 +95,26 @@ return{
|
||||
noScore="No Score Yet",
|
||||
highScore="Highscore",
|
||||
newRecord="New Rocord",
|
||||
errorMsg="Techmino ran into a problem and needs to restart.\nWe collected some error info,and you can send them to author.",
|
||||
|
||||
actName=actName,
|
||||
|
||||
load={[0]="Finished","Loading VOICE","Loading BGM","Loading SFX","Loading modes","Loading other things"},
|
||||
tips={
|
||||
"Not animation,real loading!",
|
||||
"Back to Back 10 combo Techrash PC!",
|
||||
"Techmino has a Nspire-CX edition!",
|
||||
"B2B2B???",
|
||||
"Is B2B2B2B possible?",
|
||||
"MEGACMB!",
|
||||
"ALLSPIN!",
|
||||
"O spin triple!",
|
||||
"Miya:Nya!",
|
||||
"225238922 Bilibili cheers!",
|
||||
"Playing too much = taking drugs",
|
||||
"Disappearing doesn't mean useless",
|
||||
"Try to use two rotate button,three better",
|
||||
"Small DAS&ARR can make you faster,if you can control block correctly",
|
||||
"Have you noticed what does \"rotating\" do to block?",
|
||||
"20G actually is a brand new game rule",
|
||||
"Do not play game in class!",
|
||||
"This game can be very hard,be mentally perpared",
|
||||
"This in not a casual game",
|
||||
"Nothing will happen when some special day come",
|
||||
"3.1415926535897932384",
|
||||
"2.7182818284590452353",
|
||||
"Let-The-Bass-Kick!",
|
||||
"Powered by love2d",
|
||||
"Find out what's in the setting!",
|
||||
"Any suggestions to author!",
|
||||
"DO NOT PRESS F8",
|
||||
"Secret num:626",
|
||||
"Techmino=Technique+Tetromino",
|
||||
"CLASSIC SEXY RUSSIAN BLOCKS",
|
||||
"Headphones for better experience",
|
||||
"LrL,RlR LLr,RRl RRR/LLL F!!",--ZSLJTTI
|
||||
"(first effective)Your luck number today:"..math.random(100,626),
|
||||
pauseStat={
|
||||
"Time:",
|
||||
"Key/Rot./Hold:",
|
||||
"Block used:",
|
||||
"Lines:",
|
||||
"Attack:",
|
||||
"Send:",
|
||||
"Receive:",
|
||||
"Clear:",
|
||||
"Spin:",
|
||||
"B2B:",
|
||||
"PC:",
|
||||
"Efficiency:",
|
||||
"Finesse err:",
|
||||
"Finesse rate:",
|
||||
},
|
||||
stat={
|
||||
"Games run:",
|
||||
@@ -135,29 +125,30 @@ return{
|
||||
"Hold:",
|
||||
"Block used:",
|
||||
"Lines cleared:",
|
||||
"Attack:",
|
||||
"Sent:",
|
||||
"Attack(Sent):",
|
||||
"Receive:",
|
||||
"Pend:",
|
||||
"Clear:",
|
||||
"Spin:",
|
||||
"B2B:",
|
||||
"PC:",
|
||||
"Efficiency:",
|
||||
"Finesse error:",
|
||||
"Finesse rate:",
|
||||
},
|
||||
help={
|
||||
"I don't think you need \"help\".",
|
||||
"THIS IS ONLY A BLOCK GAME,not T****s",
|
||||
"But just play like playing TOP/C2/KOS/TGM3",
|
||||
"Game is not public now,so DO NOT DISTIRBUTE",
|
||||
"But just play like playing TO/C2/KOS/TGM3",
|
||||
"",
|
||||
"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.",
|
||||
"Special thanks:Flyz,Farter,196,Teatube,T830,[all test staff] and YOU!",
|
||||
"",
|
||||
"Any bugs/suggestions to my E-mail.(may with screenshot)",
|
||||
"Only released in test group for FREE",
|
||||
"Game downloaded from other way may implanted with virous",
|
||||
"Only network/vibrating permission applied",
|
||||
"Author is not responsible for any loss by eddited game",
|
||||
},
|
||||
used=[[
|
||||
Tool used:
|
||||
@@ -170,20 +161,20 @@ Lib used:
|
||||
]],
|
||||
support="Support Author",
|
||||
group="Official QQ Group",
|
||||
warning="DO NOT DISTRIBUTE",
|
||||
WidgetText={
|
||||
main={
|
||||
lang="言/A",
|
||||
play="Play",
|
||||
setting="Settings",
|
||||
music="Music room",
|
||||
stat="Statistics",
|
||||
help="Help",
|
||||
qplay="qPlay",
|
||||
lang="言/A",
|
||||
quit="Quit",
|
||||
},
|
||||
mode={
|
||||
draw="Draw(Q)",
|
||||
setting="Setting(E)",
|
||||
custom="Setting(E)",
|
||||
start="Start",
|
||||
back=BK,
|
||||
},
|
||||
@@ -207,22 +198,10 @@ Lib used:
|
||||
back=BK,
|
||||
},
|
||||
draw={
|
||||
any="ANY",
|
||||
block1="Z",
|
||||
block2="S",
|
||||
block3="L",
|
||||
block4="J",
|
||||
block5="T",
|
||||
block6="O",
|
||||
block7="I",
|
||||
gb1="■",
|
||||
gb2="■",
|
||||
gb3="■",
|
||||
gb4="■",
|
||||
gb5="■",
|
||||
any="Erase",
|
||||
space="×",
|
||||
clear="Clear",
|
||||
demo="Demo",
|
||||
demo="Don't show ×",
|
||||
copy="Copy",
|
||||
paste="Paste",
|
||||
back=BK,
|
||||
@@ -231,24 +210,25 @@ Lib used:
|
||||
pause="Pause",
|
||||
},
|
||||
pause={
|
||||
resume="Resume",
|
||||
restart="Restart",
|
||||
sfx="SFX",
|
||||
bgm="BGM",
|
||||
quit="Quit",
|
||||
resume="Resume(space)",
|
||||
restart="Restart(R)",
|
||||
setting="Setting(S)",
|
||||
quit="Quit(esc)",
|
||||
},
|
||||
setting_game={
|
||||
graphic="←Graphic",
|
||||
sound="Sound→",
|
||||
dasD="-",dasU="+",
|
||||
arrD="-",arrU="+",
|
||||
sddasD="-",sddasU="+",
|
||||
sdarrD="-",sdarrU="+",
|
||||
ctrl="Control setting",
|
||||
reTime="Delay before game",
|
||||
maxNext="Max next count",
|
||||
autoPause="Auto pause",
|
||||
layout="Layout",
|
||||
key="Key Setting",
|
||||
touch="Touch Setting",
|
||||
quickR="Quick restart",
|
||||
autoPause="Auto pause",
|
||||
swap="Combo key to change ATK mode",
|
||||
fine="Finesse error SFX",
|
||||
ctrl="Key Setting",
|
||||
touch="Touch Setting",
|
||||
back=BK,
|
||||
},
|
||||
setting_graphic={
|
||||
@@ -257,10 +237,10 @@ Lib used:
|
||||
ghost="Ghost",
|
||||
grid="Grid",
|
||||
center="Center",
|
||||
skin="Skin",
|
||||
bg="Background",
|
||||
bgblock="BG animation",
|
||||
smo="Smoooth drop",
|
||||
bgspace="BG space",
|
||||
smooth="Smooth drop",
|
||||
lockFX="Lock FX level",
|
||||
dropFX="Drop FX level",
|
||||
shakeFX="Shake FX level",
|
||||
atkFX="ATK FX level",
|
||||
@@ -273,14 +253,33 @@ Lib used:
|
||||
graphic="Graphic→",
|
||||
sfx="SFX",
|
||||
bgm="BGM",
|
||||
vib="VIB",
|
||||
voc="VOC",
|
||||
vib="Vibration",
|
||||
voc="Vocal",
|
||||
stereo="Stereo",
|
||||
back=BK,
|
||||
},
|
||||
setting_control={
|
||||
das="DAS",arr="ARR",
|
||||
sddas="softdrop DAS",sdarr="softdrop ARR",
|
||||
reset="Reset",
|
||||
back=BK,
|
||||
},
|
||||
setting_key={
|
||||
back=BK,
|
||||
},
|
||||
setting_skin={
|
||||
prev="←",next="→",
|
||||
prev1="↑",next1="↓",spin1="R",
|
||||
prev2="↑",next2="↓",spin2="R",
|
||||
prev3="↑",next3="↓",spin3="R",
|
||||
prev4="↑",next4="↓",spin4="R",
|
||||
prev5="↑",next5="↓",spin5="R",
|
||||
prev6="↑",next6="↓",spin6="R",
|
||||
prev7="↑",next7="↓",spin7="R",
|
||||
skinR="reset Color",
|
||||
faceR="reset Dir",
|
||||
back=BK,
|
||||
},
|
||||
setting_touch={
|
||||
default="Defaults",
|
||||
snap=function()return text.snapLevelName[sceneTemp.snap]end,
|
||||
|
||||
40
modes/GM.lua
@@ -3,7 +3,8 @@ local sectionName={"M7","M8","M9","M","MK","MV","MO","MM","GM"}
|
||||
local function score(P)
|
||||
local F=false
|
||||
if P.modeData.point<70 then--if Less then MM
|
||||
local R=#P.cleared
|
||||
local R=#P.clearedRow
|
||||
if R==0 then return end
|
||||
if R==4 then R=10 end
|
||||
P.modeData.point=P.modeData.point+R
|
||||
P.modeData.event=sectionName[int(P.modeData.point*.1)+1]
|
||||
@@ -12,14 +13,14 @@ end
|
||||
|
||||
return{
|
||||
name={
|
||||
"大师",
|
||||
"大师",
|
||||
"GM",
|
||||
"宗师",
|
||||
"宗师",
|
||||
"GrandMaster",
|
||||
},
|
||||
level={
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"GM",
|
||||
"GM",
|
||||
"GM",
|
||||
},
|
||||
info={
|
||||
"成为方块大师",
|
||||
@@ -28,9 +29,11 @@ return{
|
||||
},
|
||||
color=color.lightBlue,
|
||||
env={
|
||||
noFly=true,
|
||||
minarr=1,
|
||||
_20G=true,
|
||||
drop=0,lock=15,
|
||||
wait=10,fall=15,
|
||||
wait=15,fall=6,
|
||||
next=3,
|
||||
visible="fast",
|
||||
freshLimit=15,
|
||||
@@ -39,30 +42,31 @@ return{
|
||||
if P.stat.time>=53.5 then
|
||||
P.modeData.point=min(P.modeData.point+16,80)
|
||||
P.modeData.event=sectionName[int(P.modeData.point*.1)+1]
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
end,
|
||||
arr=1,
|
||||
bg="game3",bgm="shining terminal",
|
||||
},
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
players[1].modeData.event="M7"
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.grade,-82,170)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
mDraw(drawableText.grade,-81,170)
|
||||
setFont(55)
|
||||
mStr(P.modeData.event,-82,110)
|
||||
mStr(P.modeData.event,-81,110)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_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
|
||||
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,
|
||||
}
|
||||
@@ -22,7 +22,7 @@ return{
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
if P.atkBuffer.sum==0 then
|
||||
local p=#P.atkBuffer+1
|
||||
local B,D=P.atkBuffer,P.modeData
|
||||
@@ -52,21 +52,22 @@ return{
|
||||
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,-82,200)
|
||||
mStr("24",-82,320)
|
||||
mDraw(drawableText.wave,-82,260)
|
||||
mDraw(drawableText.nextWave,-82,380)
|
||||
mStr(P.modeData.event,-81,200)
|
||||
mStr("24",-81,320)
|
||||
mDraw(drawableText.wave,-81,260)
|
||||
mDraw(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
|
||||
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,
|
||||
}
|
||||
@@ -21,7 +21,7 @@ return{
|
||||
fall=8,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
if P.atkBuffer.sum<2 then
|
||||
local p=#P.atkBuffer+1
|
||||
local B,D=P.atkBuffer,P.modeData
|
||||
@@ -60,26 +60,27 @@ return{
|
||||
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,-82,200)
|
||||
mStr(P.modeData.event,-81,200)
|
||||
mStr(
|
||||
P.modeData.event<10 and 22
|
||||
or P.modeData.event<20 and 25
|
||||
or 28
|
||||
,-82,320)
|
||||
mDraw(drawableText.wave,-82,260)
|
||||
mDraw(drawableText.nextWave,-82,380)
|
||||
,-81,320)
|
||||
mDraw(drawableText.wave,-81,260)
|
||||
mDraw(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
|
||||
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,
|
||||
}
|
||||
@@ -18,24 +18,23 @@ return{
|
||||
"EASY",
|
||||
},
|
||||
info={
|
||||
"All-spin 入门教程",
|
||||
"All-spin 入门教程",
|
||||
"All-spin Tutorial!",
|
||||
"All-spin 入门教程\n未制作完成,下块即通",
|
||||
"All-spin 入门教程\n未制作完成,下块即通",
|
||||
"All-spin Tutorial!\nUNFINISHED,drop to win",
|
||||
},
|
||||
color=color.grey,
|
||||
color=color.lightGrey,
|
||||
env={
|
||||
drop=1e99,lock=1e99,
|
||||
hold=false,
|
||||
dropPiece=Event.lose,
|
||||
dropPiece=player.lose,
|
||||
task=nil,
|
||||
bg="game1",bgm="newera",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(50)
|
||||
mStr("UNFINISHED",150,100)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.extraRate}end,
|
||||
scoreDisp=function(D)return D[1].."Stage "..format("%.2f",D[2]).."%"end,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
local min=math.min
|
||||
return{
|
||||
name={
|
||||
"隐形",
|
||||
@@ -18,22 +19,23 @@ return{
|
||||
env={
|
||||
drop=30,lock=45,
|
||||
visible="time",
|
||||
dropPiece=Event.reach_winCheck,
|
||||
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)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
score=function(P)return{min(P.stat.row or 200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
@@ -48,7 +50,8 @@ return{
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=40 and 1
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
local min=math.min
|
||||
return{
|
||||
name={
|
||||
"隐形",
|
||||
@@ -20,22 +21,23 @@ return{
|
||||
fall=10,lock=60,
|
||||
center=false,
|
||||
visible="none",
|
||||
dropPiece=Event.reach_winCheck,
|
||||
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)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
score=function(P)return{min(P.stat.row or 200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
@@ -50,7 +52,8 @@ return{
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=90 and 2 or
|
||||
L>=40 and 1
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
local min=math.min
|
||||
return{
|
||||
name={
|
||||
"隐形",
|
||||
@@ -20,22 +21,23 @@ return{
|
||||
fall=5,
|
||||
center=false,ghost=false,
|
||||
visible="none",
|
||||
dropPiece=Event.reach_winCheck,
|
||||
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)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
score=function(P)return{min(P.stat.row or 200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
@@ -50,7 +52,8 @@ return{
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=40 and 1
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
local min=math.min
|
||||
return{
|
||||
name={
|
||||
"隐形",
|
||||
@@ -19,22 +20,23 @@ return{
|
||||
drop=15,lock=45,
|
||||
freshLimit=10,
|
||||
visible="fast",
|
||||
dropPiece=Event.reach_winCheck,
|
||||
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)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
score=function(P)return{min(P.stat.row or 200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
@@ -49,7 +51,8 @@ return{
|
||||
return
|
||||
L>=150 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=40 and 1
|
||||
L>=40 and 1 or
|
||||
L>=1 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
local min=math.min
|
||||
return{
|
||||
name={
|
||||
"隐形",
|
||||
@@ -21,22 +22,23 @@ return{
|
||||
block=false,
|
||||
center=false,ghost=false,
|
||||
visible="none",
|
||||
dropPiece=Event.reach_winCheck,
|
||||
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)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
mDraw(drawableText.line,-81,300)
|
||||
mDraw(drawableText.techrash,-81,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
mStr(P.stat.row,-81,220)
|
||||
mStr(P.stat.clear_4,-81,340)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
score=function(P)return{min(P.stat.row or 200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..toTime(D[2])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
@@ -46,6 +48,7 @@ return{
|
||||
L>=100 and 4 or
|
||||
L>=50 and 3 or
|
||||
L>=26 and 2 or
|
||||
L>=10 and 1
|
||||
L>=10 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,18 +1,18 @@
|
||||
local rnd=math.random
|
||||
local rnd,min=math.random,math.min
|
||||
local function check_c4w(P)
|
||||
for i=1,#P.cleared do
|
||||
P.field[#P.field+1]=getNewRow(10)
|
||||
P.visTime[#P.visTime+1]=getNewRow(20)
|
||||
for i=1,#P.clearedRow do
|
||||
P.field[#P.field+1]=freeRow.get(10)
|
||||
P.visTime[#P.visTime+1]=freeRow.get(20)
|
||||
for i=4,7 do P.field[#P.field][i]=0 end
|
||||
end
|
||||
if #P.cleared==0 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow==0 then
|
||||
P:lose()
|
||||
else
|
||||
if P.combo>P.modeData.point then
|
||||
P.modeData.point=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -21,7 +21,7 @@ return{
|
||||
name={
|
||||
"C4W练习",
|
||||
"中四宽练习",
|
||||
"C4W Train",
|
||||
"C4W Training",
|
||||
},
|
||||
level={
|
||||
"疯狂",
|
||||
@@ -38,15 +38,16 @@ return{
|
||||
drop=5,lock=30,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg="rgb",bgm="newera",
|
||||
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]=getNewRow(10)
|
||||
P.visTime[i]=getNewRow(20)
|
||||
F[i]=freeRow.get(10)
|
||||
P.visTime[i]=freeRow.get(20)
|
||||
for x=4,7 do F[i][x]=0 end
|
||||
end
|
||||
local r=rnd(6)
|
||||
@@ -60,12 +61,12 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.combo,-82,310)
|
||||
mStr(P.modeData.point,-82,400)
|
||||
mDraw(drawableText.combo,-82,358)
|
||||
mDraw(drawableText.mxcmb,-82,450)
|
||||
mStr(P.combo,-81,310)
|
||||
mStr(P.modeData.point,-81,400)
|
||||
mDraw(drawableText.combo,-81,358)
|
||||
mDraw(drawableText.mxcmb,-81,450)
|
||||
end,
|
||||
score=function(P)return{P.combo<=100 and P.combo or 100,P.stat.time}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)
|
||||
@@ -80,7 +81,8 @@ return{
|
||||
return
|
||||
L>=70 and 3 or
|
||||
L>=40 and 2 or
|
||||
L>=20 and 1
|
||||
L>=20 and 1 or
|
||||
L>=5 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,16 +1,16 @@
|
||||
local rnd=math.random
|
||||
local rnd,min=math.random,math.min
|
||||
local function check_c4w(P)
|
||||
for i=1,#P.cleared do
|
||||
P.field[#P.field+1]=getNewRow(10)
|
||||
P.visTime[#P.visTime+1]=getNewRow(20)
|
||||
for i=1,#P.clearedRow do
|
||||
P.field[#P.field+1]=freeRow.get(10)
|
||||
P.visTime[#P.visTime+1]=freeRow.get(20)
|
||||
for i=4,7 do P.field[#P.field][i]=0 end
|
||||
end
|
||||
if #P.cleared>0 then
|
||||
if #P.clearedRow>0 then
|
||||
if P.combo>P.modeData.point then
|
||||
P.modeData.point=P.combo
|
||||
end
|
||||
if P.stat.row>=100 then
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
name={
|
||||
"C4W练习",
|
||||
"中四宽练习",
|
||||
"C4W Train",
|
||||
"C4W Training",
|
||||
},
|
||||
level={
|
||||
"普通",
|
||||
@@ -36,15 +36,16 @@ return{
|
||||
drop=30,lock=60,oncehold=false,
|
||||
dropPiece=check_c4w,
|
||||
freshLimit=15,ospin=false,
|
||||
bg="rgb",bgm="newera",
|
||||
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]=getNewRow(10)
|
||||
P.visTime[i]=getNewRow(20)
|
||||
F[i]=freeRow.get(10)
|
||||
P.visTime[i]=freeRow.get(20)
|
||||
for x=4,7 do F[i][x]=0 end
|
||||
end
|
||||
local r=rnd(6)
|
||||
@@ -58,12 +59,12 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.combo,-82,310)
|
||||
mStr(P.modeData.point,-82,400)
|
||||
mDraw(drawableText.combo,-82,358)
|
||||
mDraw(drawableText.mxcmb,-82,450)
|
||||
mStr(P.combo,-81,310)
|
||||
mStr(P.modeData.point,-81,400)
|
||||
mDraw(drawableText.combo,-81,358)
|
||||
mDraw(drawableText.mxcmb,-81,450)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point<=100 and P.modeData.point or 100,P.stat.time}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)
|
||||
@@ -78,7 +79,8 @@ return{
|
||||
else
|
||||
return
|
||||
L>=60 and 2 or
|
||||
L>=30 and 1
|
||||
L>=30 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -8,7 +8,7 @@ local function check_LVup(P)
|
||||
P.gameEnv.drop,P.gameEnv.lock=1,1
|
||||
end
|
||||
if P.gameEnv.target>100 then
|
||||
SFX("reach")
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -31,31 +31,34 @@ 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),-82,210)
|
||||
mDraw(drawableText.speedLV,-82,290)
|
||||
mStr(r<11 and 18 or r<22 and r+8 or r==22 and"00"or r==23 and"0a"or format("%x",r*10-220),-81,210)
|
||||
mDraw(drawableText.speedLV,-81,290)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,-82,320)
|
||||
mStr(P.gameEnv.target,-82,370)
|
||||
mStr(P.stat.row,-81,320)
|
||||
mStr(P.gameEnv.target,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.stat.row,P.stat.score}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..D[2]end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]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
|
||||
@@ -63,6 +66,7 @@ return{
|
||||
L>=191 and 4 or
|
||||
L>=110 and 3 or
|
||||
L>=50 and 2 or
|
||||
L>=2 and 1
|
||||
L>=5 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -18,7 +18,7 @@ return{
|
||||
},
|
||||
color=color.white,
|
||||
env={
|
||||
dropPiece=Event.reach_winCheck,
|
||||
dropPiece=player.reach_winCheck,
|
||||
},
|
||||
load=function()
|
||||
for i=1,#customID do
|
||||
@@ -50,8 +50,8 @@ return{
|
||||
for _,P in next,players.alive do
|
||||
local t=P.showTime*3
|
||||
for y=1,preField.h do
|
||||
P.field[y]=getNewRow(0)
|
||||
P.visTime[y]=getNewRow(t)
|
||||
P.field[y]=freeRow.get(0)
|
||||
P.visTime[y]=freeRow.get(t)
|
||||
for x=1,10 do P.field[y][x]=preField[y][x]end
|
||||
end
|
||||
end
|
||||
@@ -61,11 +61,11 @@ return{
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(55)
|
||||
if P.gameEnv.puzzle or P.gameEnv.target>1e10 then
|
||||
mStr(P.stat.row,-82,225)
|
||||
mDraw(drawableText.line,-82,290)
|
||||
mStr(P.stat.row,-81,225)
|
||||
mDraw(drawableText.line,-81,290)
|
||||
else
|
||||
local R=P.gameEnv.target-P.stat.row
|
||||
mStr(R>=0 and R or 0,-82,240)
|
||||
mStr(R>=0 and R or 0,-81,240)
|
||||
end
|
||||
if P.gameEnv.puzzle and P.modeData.event==0 then
|
||||
local m=puzzleMark
|
||||
|
||||
@@ -7,14 +7,14 @@ local function puzzleCheck(P)
|
||||
local a,b=preField[y][x],L and L[x]or 0
|
||||
if a~=0 then
|
||||
if a==-1 then if b>0 then return end
|
||||
elseif a<8 then if a~=b then return end
|
||||
elseif a<12 then if a~=b then return end
|
||||
elseif a>7 then if b==0 then return end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
P.modeData.event=1
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
|
||||
return{
|
||||
@@ -73,8 +73,8 @@ return{
|
||||
mesDisp=function(P)
|
||||
local dx,dy=P.fieldOff.x,P.fieldOff.y
|
||||
setFont(55)
|
||||
mStr(P.stat.row,-82,225)
|
||||
mDraw(drawableText.line,-82,290)
|
||||
mStr(P.stat.row,-81,225)
|
||||
mDraw(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
|
||||
|
||||
@@ -22,7 +22,7 @@ return{
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.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
|
||||
@@ -51,17 +51,18 @@ return{
|
||||
end
|
||||
end
|
||||
end,
|
||||
bg="game4",bgm="way",
|
||||
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,-82,200)
|
||||
mStr(P.modeData.point,-82,320)
|
||||
mDraw(drawableText.wave,-82,260)
|
||||
mDraw(drawableText.rpm,-82,380)
|
||||
mStr(P.modeData.event,-81,200)
|
||||
mStr(P.modeData.point,-81,320)
|
||||
mDraw(drawableText.wave,-81,260)
|
||||
mDraw(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,
|
||||
@@ -73,6 +74,7 @@ return{
|
||||
W>=80 and 4 or
|
||||
W>=55 and 3 or
|
||||
W>=30 and 2 or
|
||||
W>=20 and 1
|
||||
W>=20 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -22,7 +22,7 @@ return{
|
||||
freshLimit=15,
|
||||
pushSpeed=1,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.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
|
||||
@@ -53,15 +53,16 @@ return{
|
||||
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,-82,200)
|
||||
mStr(P.modeData.point,-82,320)
|
||||
mDraw(drawableText.wave,-82,260)
|
||||
mDraw(drawableText.rpm,-82,380)
|
||||
mStr(P.modeData.event,-81,200)
|
||||
mStr(P.modeData.point,-81,320)
|
||||
mDraw(drawableText.wave,-81,260)
|
||||
mDraw(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,
|
||||
@@ -73,6 +74,7 @@ return{
|
||||
W>=100 and 4 or
|
||||
W>=70 and 3 or
|
||||
W>=40 and 2 or
|
||||
W>=10 and 1
|
||||
W>=10 and 1 or
|
||||
W>=3 and 0
|
||||
end,
|
||||
}
|
||||
@@ -21,23 +21,25 @@ return{
|
||||
fall=20,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(90,180-P.modeData.event)then
|
||||
P.modeData.counter=0
|
||||
if not(P.control and scene.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.modeData.event=P.modeData.event+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,-82,310)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(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,
|
||||
@@ -49,6 +51,7 @@ return{
|
||||
W>=110 and 4 or
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1
|
||||
W>=20 and 1 or
|
||||
P.stat.row>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -20,23 +20,25 @@ return{
|
||||
drop=10,lock=30,
|
||||
freshLimit=15,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(45,80-.3*P.modeData.event)then
|
||||
P.modeData.counter=0
|
||||
P:garbageRise(11+P.modeData.event%3,1,rnd(10))
|
||||
P.modeData.event=P.modeData.event+1
|
||||
if not(P.control and scene.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))
|
||||
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,-82,310)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(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,
|
||||
@@ -44,10 +46,11 @@ return{
|
||||
getRank=function(P)
|
||||
local W=P.modeData.event
|
||||
return
|
||||
W>=120 and 5 or
|
||||
W>=100 and 4 or
|
||||
W>=150 and 5 or
|
||||
W>=110 and 4 or
|
||||
W>=80 and 3 or
|
||||
W>=50 and 2 or
|
||||
W>=20 and 1
|
||||
W>=20 and 1 or
|
||||
P.stat.row>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
local min=math.min
|
||||
return{
|
||||
name={
|
||||
"干旱",
|
||||
@@ -18,30 +19,37 @@ return{
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
sequence="drought2",
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
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,-82,280)
|
||||
mStr(R>=0 and R or 0,-81,280)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}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)
|
||||
if P.stat.row<100 then return end
|
||||
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
|
||||
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,
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
local min=math.min
|
||||
return{
|
||||
name={
|
||||
"干旱",
|
||||
@@ -18,30 +19,37 @@ return{
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
sequence="drought1",
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
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,-82,280)
|
||||
mStr(R>=0 and R or 0,-81,280)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=100 and P.stat.row or 100,P.stat.time}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)
|
||||
if P.stat.row<100 then return end
|
||||
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
|
||||
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,
|
||||
}
|
||||
@@ -6,9 +6,9 @@ return{
|
||||
"Infinite",
|
||||
},
|
||||
level={
|
||||
"时间杀手 II",
|
||||
"时间杀手 II",
|
||||
"Time Killer II",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
},
|
||||
info={
|
||||
"沙盒",
|
||||
@@ -26,13 +26,13 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,370)
|
||||
mDraw(drawableText.atk,-82,313)
|
||||
mDraw(drawableText.eff,-82,425)
|
||||
mStr(P.stat.atk,-81,260)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,370)
|
||||
mDraw(drawableText.atk,-81,313)
|
||||
mDraw(drawableText.eff,-81,425)
|
||||
end,
|
||||
score=function(P)return{P.stat.score}end,
|
||||
scoreDisp=function(D)return D[1]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
|
||||
@@ -41,6 +41,7 @@ return{
|
||||
L>=1500 and 4 or
|
||||
L>=1000 and 3 or
|
||||
L>=500 and 2 or
|
||||
L>=100 and 1
|
||||
L>=100 and 1 or
|
||||
L>=20 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
local format,rnd=string.format,math.random
|
||||
local function check_rise(P)
|
||||
local L=P.cleared
|
||||
local L=P.clearedRow
|
||||
for i=1,#L do
|
||||
if L[i]<6 then
|
||||
P:garbageRise(10,1,rnd(10))
|
||||
@@ -16,9 +16,9 @@ return{
|
||||
"Infinite:dig",
|
||||
},
|
||||
level={
|
||||
"时间杀手 III",
|
||||
"时间杀手 III",
|
||||
"Time Killer III",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
},
|
||||
info={
|
||||
"挖呀挖呀挖",
|
||||
@@ -41,12 +41,12 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.modeData.point,-82,190)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.line,-82,243)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.modeData.point,-81,190)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.line,-81,243)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point}end,
|
||||
scoreDisp=function(D)return D[1].." Lines"end,
|
||||
@@ -58,6 +58,7 @@ return{
|
||||
L>=400 and 4 or
|
||||
L>=200 and 3 or
|
||||
L>=100 and 2 or
|
||||
L>=10 and 1
|
||||
L>=40 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,7 +1,16 @@
|
||||
local gc=love.graphics
|
||||
local function check(P)
|
||||
if P.stat.row>=200 then
|
||||
Event.win(P,"finish")
|
||||
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
|
||||
|
||||
@@ -17,23 +26,27 @@ return{
|
||||
"HARD",
|
||||
},
|
||||
info={
|
||||
"200行20G马拉松",
|
||||
"200行20G马拉松",
|
||||
"200L marathon in 20G",
|
||||
"200行高速马拉松",
|
||||
"200行高速马拉松",
|
||||
"200L marathon in high speed",
|
||||
},
|
||||
color=color.magenta,
|
||||
env={
|
||||
_20G=true,fall=15,
|
||||
dropPiece=check,
|
||||
noFly=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
drop=.5,fall=30,
|
||||
target=50,dropPiece=check,
|
||||
bg="strap",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,-82,320)
|
||||
mStr(200,-82,370)
|
||||
mStr(P.stat.row,-81,320)
|
||||
mStr(P.gameEnv.target,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
@@ -45,12 +58,13 @@ return{
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=200 and 5 or
|
||||
T<=260 and 4 or
|
||||
T<=270 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=100 and 2 or
|
||||
L>=50 and 1
|
||||
L>=50 and 1 or
|
||||
L>=10 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,15 +1,14 @@
|
||||
local gc=love.graphics
|
||||
local marathon_drop={[0]=60,48,40,30,24,18,15,12,10,8,7,6,5,4,3,2,1,1,0,0}
|
||||
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
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
else
|
||||
P.gameEnv.drop=marathon_drop[T/10]
|
||||
if T==180 then P.gameEnv._20G=true end
|
||||
SFX("reach")
|
||||
P.gameEnv.drop=dropSpeed[T/10]
|
||||
P.modeData.point=T
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -26,23 +25,28 @@ return{
|
||||
"NORMAL",
|
||||
},
|
||||
info={
|
||||
"200行变速马拉松",
|
||||
"200行变速马拉松",
|
||||
"200行加速马拉松",
|
||||
"200行加速马拉松",
|
||||
"200L marathon with acceleration",
|
||||
},
|
||||
color=color.green,
|
||||
env={
|
||||
drop=60,fall=20,
|
||||
noFly=true,
|
||||
minsdarr=1,
|
||||
fall=30,
|
||||
target=10,dropPiece=check_LVup,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
bg="strap",bgm="way",
|
||||
},
|
||||
pauseLimit=true,
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.row,-82,320)
|
||||
mStr(P.modeData.point+10,-82,370)
|
||||
mStr(P.stat.row,-81,320)
|
||||
mStr(P.modeData.point+10,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.stat.row<=200 and P.stat.row or 200,P.stat.time}end,
|
||||
@@ -53,13 +57,14 @@ return{
|
||||
if L>=200 then
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=180 and 5 or
|
||||
T<=240 and 4 or
|
||||
T<=185 and 5 or
|
||||
T<=250 and 4 or
|
||||
3
|
||||
else
|
||||
return
|
||||
L>=150 and 2 or
|
||||
L>=100 and 1
|
||||
L>=100 and 1 or
|
||||
L>=20 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -4,7 +4,7 @@ local death_lock={12,11,10,9,8}
|
||||
local death_wait={10,9,8,7,6}
|
||||
local death_fall={10,9,8,7,6}
|
||||
local function score(P)
|
||||
local c=#P.cleared
|
||||
local c=#P.clearedRow
|
||||
if c==0 and P.modeData.point%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
@@ -12,7 +12,7 @@ local function score(P)
|
||||
end
|
||||
P.modeData.point=P.modeData.point+s
|
||||
if P.modeData.point%100==99 then
|
||||
SFX("blip_1")
|
||||
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
|
||||
@@ -24,11 +24,11 @@ local function score(P)
|
||||
if s==3 then P.gameEnv.bone=true end
|
||||
if s==5 then
|
||||
P.modeData.point,P.modeData.event=500,4
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
else
|
||||
P:showText(text.stage(s),0,-120,80,"fly")
|
||||
end
|
||||
SFX("reach")
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -44,28 +44,30 @@ return{
|
||||
"ULTIMATE",
|
||||
},
|
||||
info={
|
||||
"进阶20G",
|
||||
"进阶20G",
|
||||
"Advanced 20G",
|
||||
"20G:上级者的挑战",
|
||||
"20G:上级者的挑战",
|
||||
"20G:For Pro",
|
||||
},
|
||||
color=color.red,
|
||||
env={
|
||||
noFly=true,
|
||||
mindas=6,minarr=1,
|
||||
_20G=true,
|
||||
lock=death_lock[1],
|
||||
wait=death_wait[1],
|
||||
fall=death_fall[1],
|
||||
dropPiece=score,
|
||||
das=6,arr=1,
|
||||
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,-82,320)
|
||||
mStr((P.modeData.event+1)*100,-82,370)
|
||||
mStr(P.modeData.point,-81,320)
|
||||
mStr((P.modeData.event+1)*100,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point,P.stat.row,P.stat.time}end,
|
||||
@@ -74,18 +76,19 @@ return{
|
||||
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 L=P.stat.row
|
||||
local S=P.modeData.point
|
||||
if S==500 then
|
||||
local L=P.stat.clear_4
|
||||
return
|
||||
L<=260 and 5 or
|
||||
L<=320 and 4 or
|
||||
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
|
||||
S>=226 and 1 or
|
||||
S>=50 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -3,7 +3,7 @@ local rush_lock={20,18,16,15,14}
|
||||
local rush_wait={12,10,9,8,7}
|
||||
local rush_fall={18,16,14,13,12}
|
||||
local function score(P)
|
||||
local c=#P.cleared
|
||||
local c=#P.clearedRow
|
||||
if c==0 and P.modeData.point%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
@@ -11,7 +11,7 @@ local function score(P)
|
||||
end
|
||||
P.modeData.point=P.modeData.point+s
|
||||
if P.modeData.point%100==99 then
|
||||
SFX("blip_1")
|
||||
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
|
||||
@@ -28,11 +28,11 @@ local function score(P)
|
||||
|
||||
if s==5 then
|
||||
P.modeData.point,P.modeData.event=500,4
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
else
|
||||
P:showText(text.stage(s),0,-120,80,"fly")
|
||||
end
|
||||
SFX("reach")
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -48,28 +48,30 @@ return{
|
||||
"LUNATIC",
|
||||
},
|
||||
info={
|
||||
"初心20G",
|
||||
"初心20G",
|
||||
"Beginner 20G",
|
||||
"20G:初心者适用",
|
||||
"20G:初心者适用",
|
||||
"20G:Back to beginner",
|
||||
},
|
||||
color=color.red,
|
||||
env={
|
||||
noFly=true,
|
||||
das=9,arr=3,
|
||||
_20G=true,
|
||||
lock=rush_lock[1],
|
||||
wait=rush_wait[1],
|
||||
fall=rush_fall[1],
|
||||
dropPiece=score,
|
||||
das=9,arr=3,
|
||||
freshLimit=15,
|
||||
bg="strap",bgm="secret8th",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.modeData.point,-82,320)
|
||||
mStr((P.modeData.event+1)*100,-82,370)
|
||||
mStr(P.modeData.point,-81,320)
|
||||
mStr((P.modeData.event+1)*100,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point,P.stat.row,P.stat.time}end,
|
||||
@@ -78,18 +80,19 @@ return{
|
||||
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 L=P.stat.row
|
||||
local S=P.modeData.point
|
||||
if S==500 then
|
||||
local L=P.stat.clear_4
|
||||
return
|
||||
L<=250 and 5 or
|
||||
L<=300 and 4 or
|
||||
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
|
||||
S>=120 and 1 or
|
||||
S>=30 and 0
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
local gc=love.graphics
|
||||
local int=math.floor
|
||||
local function score(P)
|
||||
local c=#P.cleared
|
||||
local c=#P.clearedRow
|
||||
if c==0 and P.modeData.point%100==99 then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
@@ -9,7 +9,7 @@ local function score(P)
|
||||
end
|
||||
local MD=P.modeData
|
||||
MD.point=MD.point+s
|
||||
if MD.point%100==99 then SFX("blip_1")end
|
||||
if MD.point%100==99 then SFX.play("blip_1")end
|
||||
if int(MD.point*.01)>MD.event then
|
||||
local s=MD.event+1;MD.event=s--level up!
|
||||
P:showText(text.stage(s),0,-120,80,"fly")
|
||||
@@ -27,9 +27,9 @@ local function score(P)
|
||||
end
|
||||
else
|
||||
MD.point,MD.event=1000,9
|
||||
Event.win(P,"finish")
|
||||
P:win("finish")
|
||||
end
|
||||
SFX("reach")
|
||||
SFX.play("reach")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -45,28 +45,30 @@ return{
|
||||
"FINAL",
|
||||
},
|
||||
info={
|
||||
"究极20G:无法到达的终点",
|
||||
"究极20G:无法到达的终点",
|
||||
"究极20G:无法触及的终点",
|
||||
"究极20G:无法触及的终点",
|
||||
"Extreme 20G:Unreachable destination",
|
||||
},
|
||||
color=color.lightGrey,
|
||||
env={
|
||||
noFly=true,
|
||||
mindas=5,minarr=1,
|
||||
_20G=true,lock=12,
|
||||
wait=10,fall=10,
|
||||
dropPiece=score,
|
||||
das=5,arr=1,
|
||||
freshLimit=15,
|
||||
easyFresh=false,bone=true,
|
||||
bg="none",bgm="shining terminal",
|
||||
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,-82,320)
|
||||
mStr((MD.event+1)*100,-82,370)
|
||||
mStr(MD.point,-81,320)
|
||||
mStr((MD.event+1)*100,-81,370)
|
||||
gc.rectangle("fill",-125,375,90,4)
|
||||
end,
|
||||
score=function(P)return{P.modeData.point,P.stat.time}end,
|
||||
@@ -79,6 +81,7 @@ return{
|
||||
S>=800 and 4 or
|
||||
S>=600 and 3 or
|
||||
S>=400 and 2 or
|
||||
S>=200 and 1
|
||||
S>=200 and 1 or
|
||||
S>=50 and 0
|
||||
end,
|
||||
}
|
||||
@@ -19,22 +19,23 @@ return{
|
||||
env={
|
||||
drop=60,lock=120,
|
||||
fall=10,
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
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,-82,250)
|
||||
mStr(R>=0 and R or 0,-81,250)
|
||||
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,-82,350)
|
||||
mDraw(drawableText.pc,-82,432)
|
||||
mStr(P.stat.pc,-81,350)
|
||||
mDraw(drawableText.pc,-81,432)
|
||||
|
||||
gc.setColor(.5,.5,.5)
|
||||
if frame>179 then
|
||||
@@ -52,6 +53,7 @@ return{
|
||||
L>=13 and 4 or
|
||||
L>=10 and 3 or
|
||||
L>=7 and 2 or
|
||||
L>=4 and 1
|
||||
L>=4 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -19,22 +19,23 @@ return{
|
||||
env={
|
||||
drop=20,lock=60,
|
||||
fall=20,
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
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,-82,250)
|
||||
mStr(R>=0 and R or 0,-81,250)
|
||||
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,-82,350)
|
||||
mDraw(drawableText.pc,-82,432)
|
||||
mStr(P.stat.pc,-81,350)
|
||||
mDraw(drawableText.pc,-81,432)
|
||||
|
||||
gc.setColor(.5,.5,.5)
|
||||
if frame>179 then
|
||||
@@ -52,6 +53,7 @@ return{
|
||||
L>=12 and 4 or
|
||||
L>=9 and 3 or
|
||||
L>=6 and 2 or
|
||||
L>=3 and 1
|
||||
L>=3 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -19,21 +19,22 @@ return{
|
||||
env={
|
||||
oncehold=false,
|
||||
drop=300,lock=1e99,
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
ospin=false,
|
||||
bg="rgb",bgm="newera",
|
||||
},
|
||||
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,-82,250)
|
||||
mStr(R>=0 and R or 0,-81,250)
|
||||
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,-82,350)
|
||||
mDraw(drawableText.pc,-82,432)
|
||||
mStr(P.stat.pc,-81,350)
|
||||
mDraw(drawableText.pc,-81,432)
|
||||
|
||||
gc.setColor(.5,.5,.5)
|
||||
if frame>179 then
|
||||
@@ -51,6 +52,7 @@ return{
|
||||
L>=20 and 4 or
|
||||
L>=16 and 3 or
|
||||
L>=13 and 2 or
|
||||
L>=10 and 1
|
||||
L>=10 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -10,12 +10,12 @@ local function task_PC(P)
|
||||
if P.modeData.counter==21 then
|
||||
local t=P.stat.pc%2
|
||||
for i=1,4 do
|
||||
local r=getNewRow(0)
|
||||
local r=freeRow.get(0)
|
||||
for j=1,10 do
|
||||
r[j]=PCbase[4*t+i][j]
|
||||
end
|
||||
ins(P.field,1,r)
|
||||
ins(P.visTime,1,getNewRow(20))
|
||||
ins(P.visTime,1,freeRow.get(20))
|
||||
end
|
||||
P.fieldBeneath=P.fieldBeneath+120
|
||||
P.curY=P.curY+4
|
||||
@@ -30,7 +30,7 @@ local function newPC(P)
|
||||
local c=0
|
||||
for i=1,10 do if r[i]>0 then c=c+1 end end
|
||||
if c<5 then
|
||||
Event.lose(P)
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
if P.stat.piece%4==0 and #P.field==0 then
|
||||
@@ -66,7 +66,7 @@ return{
|
||||
name={
|
||||
"全清训练",
|
||||
"全清训练",
|
||||
"PC Train",
|
||||
"PC Training",
|
||||
},
|
||||
level={
|
||||
"疯狂",
|
||||
@@ -88,16 +88,17 @@ return{
|
||||
freshLimit=15,
|
||||
dropPiece=newPC,
|
||||
ospin=false,
|
||||
bg="rgb",bgm="newera",
|
||||
bg="rgb",bgm="oxygen",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
newPC(players[1])
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,-82,330)
|
||||
mDraw(drawableText.pc,-82,412)
|
||||
mStr(P.stat.pc,-81,330)
|
||||
mDraw(drawableText.pc,-81,412)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
|
||||
@@ -109,6 +110,7 @@ return{
|
||||
L>=40 and 4 or
|
||||
L>=30 and 3 or
|
||||
L>=20 and 2 or
|
||||
L>=10 and 1
|
||||
L>=10 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -7,12 +7,12 @@ local function task_PC(P)
|
||||
if P.modeData.counter==21 then
|
||||
local t=P.stat.pc%2
|
||||
for i=1,4 do
|
||||
local r=getNewRow(0)
|
||||
local r=freeRow.get(0)
|
||||
for j=1,10 do
|
||||
r[j]=PCbase[4*t+i][j]
|
||||
end
|
||||
ins(P.field,1,r)
|
||||
ins(P.visTime,1,getNewRow(20))
|
||||
ins(P.visTime,1,freeRow.get(20))
|
||||
end
|
||||
P.fieldBeneath=P.fieldBeneath+120
|
||||
P.curY=P.curY+4
|
||||
@@ -26,7 +26,7 @@ local function newPC(P)
|
||||
local c=0
|
||||
for i=1,10 do if r[i]>0 then c=c+1 end end
|
||||
if c<5 then
|
||||
Event.lose(P)
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
if P.stat.piece%4==0 and #P.field==0 then
|
||||
@@ -50,7 +50,7 @@ return{
|
||||
name={
|
||||
"全清训练",
|
||||
"全清训练",
|
||||
"PC Train",
|
||||
"PC Training",
|
||||
},
|
||||
level={
|
||||
"普通",
|
||||
@@ -71,16 +71,17 @@ return{
|
||||
sequence="none",
|
||||
dropPiece=newPC,
|
||||
ospin=false,
|
||||
bg="rgb",bgm="newera",
|
||||
bg="rgb",bgm="oxygen",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
newPC(players[1])
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(75)
|
||||
mStr(P.stat.pc,-82,330)
|
||||
mDraw(drawableText.pc,-82,412)
|
||||
mStr(P.stat.pc,-81,330)
|
||||
mDraw(drawableText.pc,-81,412)
|
||||
end,
|
||||
score=function(P)return{P.stat.pc,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." PCs "..toTime(D[2])end,
|
||||
@@ -92,6 +93,7 @@ return{
|
||||
L>=60 and 4 or
|
||||
L>=40 and 3 or
|
||||
L>=25 and 2 or
|
||||
L>=15 and 1
|
||||
L>=15 and 1 or
|
||||
L>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
name={
|
||||
"回合制",
|
||||
"回合制",
|
||||
"Turn-Base",
|
||||
"Turn-Based",
|
||||
},
|
||||
level={
|
||||
"简单",
|
||||
@@ -28,7 +28,7 @@ return{
|
||||
},
|
||||
color=color.cyan,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=update_round,
|
||||
bg="game2",bgm="push",
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
name={
|
||||
"回合制",
|
||||
"回合制",
|
||||
"Turn-Base",
|
||||
"Turn-Based",
|
||||
},
|
||||
level={
|
||||
"普通",
|
||||
@@ -28,7 +28,7 @@ return{
|
||||
},
|
||||
color=color.green,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=update_round,
|
||||
bg="game2",bgm="push",
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
name={
|
||||
"回合制",
|
||||
"回合制",
|
||||
"Turn-Base",
|
||||
"Turn-Based",
|
||||
},
|
||||
level={
|
||||
"困难",
|
||||
@@ -28,7 +28,7 @@ return{
|
||||
},
|
||||
color=color.magenta,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=update_round,
|
||||
bg="game2",bgm="push",
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
name={
|
||||
"回合制",
|
||||
"回合制",
|
||||
"Turn-Base",
|
||||
"Turn-Based",
|
||||
},
|
||||
level={
|
||||
"疯狂",
|
||||
@@ -28,7 +28,7 @@ return{
|
||||
},
|
||||
color=color.red,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=update_round,
|
||||
bg="game2",bgm="push",
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
name={
|
||||
"回合制",
|
||||
"回合制",
|
||||
"Turn-Base",
|
||||
"Turn-Based",
|
||||
},
|
||||
level={
|
||||
"极限",
|
||||
@@ -28,7 +28,7 @@ return{
|
||||
},
|
||||
color=color.lightYellow,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
drop=1e99,lock=1e99,
|
||||
oncehold=false,
|
||||
dropPiece=update_round,
|
||||
bg="game2",bgm="push",
|
||||
|
||||
@@ -20,6 +20,7 @@ return{
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
newPlayer(2,965,360,.5,AITemplate("9S",3))
|
||||
|
||||
@@ -20,6 +20,7 @@ return{
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
newPlayer(2,965,360,.5,AITemplate("9S",5))
|
||||
|
||||
@@ -20,6 +20,7 @@ return{
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
newPlayer(2,965,360,.5,AITemplate("9S",7))
|
||||
|
||||
@@ -20,6 +20,7 @@ return{
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
newPlayer(2,965,360,.5,AITemplate("9S",8))
|
||||
|
||||
@@ -20,6 +20,7 @@ return{
|
||||
freshLimit=15,
|
||||
bg="game2",bgm="race",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
newPlayer(2,965,360,.5,AITemplate("9S",9))
|
||||
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.cyan,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=10,dropPiece=Event.reach_winCheck,
|
||||
target=10,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=10-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
@@ -48,6 +48,7 @@ return{
|
||||
T<=10 and 4 or
|
||||
T<=25 and 3 or
|
||||
T<=40 and 2 or
|
||||
T<=60 and 1
|
||||
T<=62 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.orange,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=100,dropPiece=Event.reach_winCheck,
|
||||
target=100,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=100-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
@@ -44,10 +44,11 @@ return{
|
||||
if P.stat.row<100 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=60 and 5 or
|
||||
T<=62 and 5 or
|
||||
T<=90 and 4 or
|
||||
T<=130 and 3 or
|
||||
T<=200 and 2 or
|
||||
T<=270 and 1
|
||||
T<=270 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.lightGrey,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=1000,dropPiece=Event.reach_winCheck,
|
||||
target=1000,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=1000-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
@@ -48,6 +48,7 @@ return{
|
||||
T<=1000 and 4 or
|
||||
T<=1400 and 3 or
|
||||
T<=2200 and 2 or
|
||||
T<=3000 and 1
|
||||
T<=3000 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.lightBlue,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=20,dropPiece=Event.reach_winCheck,
|
||||
target=20,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=20-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
@@ -47,7 +47,8 @@ return{
|
||||
T<=13 and 5 or
|
||||
T<=18 and 4 or
|
||||
T<=45 and 3 or
|
||||
T<=70 and 2 or
|
||||
T<=100 and 1
|
||||
T<=80 and 2 or
|
||||
T<=126 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.green,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=40,dropPiece=Event.reach_winCheck,
|
||||
target=40,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="race",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=40-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
@@ -44,10 +44,11 @@ return{
|
||||
if P.stat.row<40 then return end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=25 and 5 or
|
||||
T<=32 and 4 or
|
||||
T<=26 and 5 or
|
||||
T<=32.6 and 4 or
|
||||
T<=40 and 3 or
|
||||
T<=60 and 2 or
|
||||
T<=120 and 1
|
||||
T<=62 and 2 or
|
||||
T<=183 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -19,7 +19,7 @@ return{
|
||||
color=color.red,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
target=400,dropPiece=Event.reach_winCheck,
|
||||
target=400,dropPiece=player.reach_winCheck,
|
||||
bg="strap",bgm="push",
|
||||
},
|
||||
load=function()
|
||||
@@ -30,7 +30,7 @@ return{
|
||||
setFont(55)
|
||||
local r=400-P.stat.row
|
||||
if r<0 then r=0 end
|
||||
mStr(r,-82,265)
|
||||
mStr(r,-81,265)
|
||||
if r<21 and r>0 then
|
||||
gc.setLineWidth(4)
|
||||
gc.setColor(1,r>10 and 0 or rnd(),.5)
|
||||
@@ -48,6 +48,7 @@ return{
|
||||
T<=330 and 4 or
|
||||
T<=420 and 3 or
|
||||
T<=626 and 2 or
|
||||
T<=1000 and 1
|
||||
T<=1000 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
drop=30,lock=45,
|
||||
freshLimit=10,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(60,150-2*P.modeData.event)and P.atkBuffer.sum<4 then
|
||||
P.atkBuffer[#P.atkBuffer+1]={pos=rnd(10),amount=1,countdown=30,cd0=30,time=0,sent=false,lv=1}
|
||||
@@ -33,15 +33,14 @@ return{
|
||||
end,
|
||||
bg="glow",bgm="newera",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
@@ -53,6 +52,7 @@ return{
|
||||
W>=60 and 4 or
|
||||
W>=45 and 3 or
|
||||
W>=30 and 2 or
|
||||
W>=15 and 1
|
||||
W>=15 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
drop=30,lock=45,
|
||||
freshLimit=10,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(60,180-2*P.modeData.event)and P.atkBuffer.sum<15 then
|
||||
P.atkBuffer[#P.atkBuffer+1]=
|
||||
@@ -38,15 +38,14 @@ return{
|
||||
end,
|
||||
bg="glow",bgm="newera",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
@@ -58,6 +57,7 @@ return{
|
||||
W>=60 and 4 or
|
||||
W>=45 and 3 or
|
||||
W>=30 and 2 or
|
||||
W>=15 and 1
|
||||
W>=15 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
drop=30,lock=45,
|
||||
freshLimit=10,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(60,150-P.modeData.event)and P.atkBuffer.sum<20 then
|
||||
local t=max(60,90-P.modeData.event)
|
||||
@@ -34,15 +34,14 @@ return{
|
||||
end,
|
||||
bg="glow",bgm="newera",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
@@ -54,6 +53,7 @@ return{
|
||||
W>=80 and 4 or
|
||||
W>=55 and 3 or
|
||||
W>=30 and 2 or
|
||||
W>=15 and 1
|
||||
W>=15 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
drop=30,lock=45,
|
||||
freshLimit=10,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(90,180-2*P.modeData.event)and P.atkBuffer.sum<8 then
|
||||
local d=P.modeData.event+1
|
||||
@@ -38,15 +38,14 @@ return{
|
||||
end,
|
||||
bg="glow",bgm="newera",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
mDraw(drawableText.line,-82,300)
|
||||
mDraw(drawableText.techrash,-82,420)
|
||||
setFont(75)
|
||||
mStr(P.stat.row,-82,220)
|
||||
mStr(P.stat.clear_4,-82,340)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
@@ -58,6 +57,7 @@ return{
|
||||
W>=55 and 4 or
|
||||
W>=45 and 3 or
|
||||
W>=30 and 2 or
|
||||
W>=15 and 1
|
||||
W>=15 and 1 or
|
||||
W>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -22,7 +22,7 @@ return{
|
||||
freshLimit=15,
|
||||
pushSpeed=2,
|
||||
task=function(P)
|
||||
if not P.control then return end
|
||||
if not(P.control and scene.cur=="play")then return end
|
||||
P.modeData.counter=P.modeData.counter+1
|
||||
if P.modeData.counter>=max(300,600-10*P.modeData.event)and P.atkBuffer.sum<20 then
|
||||
local t=max(300,480-12*P.modeData.event)
|
||||
@@ -33,20 +33,21 @@ return{
|
||||
P.atkBuffer[p+3]={pos=rnd(10),amount=6,countdown=1.5*t,cd0=1.5*t,time=0,sent=false,lv=5}
|
||||
P.atkBuffer.sum=P.atkBuffer.sum+20
|
||||
P.stat.recv=P.stat.recv+20
|
||||
P.modeData.counter=0
|
||||
if P.modeData.event==31 then P:showText(text.maxspeed,0,-140,100,"appear",.6)end
|
||||
P.modeData.counter=0
|
||||
P.modeData.event=P.modeData.event+1
|
||||
end
|
||||
end,
|
||||
bg="rgb",bgm="secret7th",
|
||||
},
|
||||
pauseLimit=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(65)
|
||||
mStr(P.modeData.event,-82,310)
|
||||
mDraw(drawableText.wave,-82,375)
|
||||
mStr(P.modeData.event,-81,310)
|
||||
mDraw(drawableText.wave,-81,375)
|
||||
end,
|
||||
score=function(P)return{P.modeData.event,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Waves "..toTime(D[2])end,
|
||||
@@ -58,6 +59,7 @@ return{
|
||||
W>=26 and 4 or
|
||||
W>=20 and 3 or
|
||||
W>=10 and 2 or
|
||||
W>=5 and 1
|
||||
W>=5 and 1 or
|
||||
W>=1 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_ultimate(P)
|
||||
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,7 +26,7 @@ return{
|
||||
drop=30,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
dropPiece=tech_reach_ultimate,
|
||||
dropPiece=tech_check_ultimate,
|
||||
bg="matrix",bgm="secret8th",
|
||||
},
|
||||
load=function()
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
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,
|
||||
@@ -49,6 +49,7 @@ return{
|
||||
L>=126 and 4 or
|
||||
L>=90 and 3 or
|
||||
L>=60 and 2 or
|
||||
L>=30 and 1
|
||||
L>=30 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_easy(P)
|
||||
if #P.cleared>0 and P.b2b<40 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.b2b<40 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,7 +26,7 @@ return{
|
||||
drop=20,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
dropPiece=tech_reach_easy,
|
||||
dropPiece=tech_check_easy,
|
||||
bg="matrix",bgm="secret8th",
|
||||
},
|
||||
load=function()
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
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,
|
||||
@@ -49,6 +49,7 @@ return{
|
||||
L>=126 and 4 or
|
||||
L>=90 and 3 or
|
||||
L>=60 and 2 or
|
||||
L>=30 and 1
|
||||
L>=30 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_ultimate(P)
|
||||
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,7 +26,7 @@ return{
|
||||
_20G=true,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
dropPiece=tech_reach_ultimate,
|
||||
dropPiece=tech_check_ultimate,
|
||||
bg="matrix",bgm="secret7th",
|
||||
},
|
||||
load=function()
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
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,
|
||||
@@ -49,6 +49,7 @@ return{
|
||||
L>=140 and 4 or
|
||||
L>=90 and 3 or
|
||||
L>=60 and 2 or
|
||||
L>=30 and 1
|
||||
L>=30 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_hard(P)
|
||||
if #P.cleared>0 and P.lastClear<10 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -17,16 +17,16 @@ return{
|
||||
"LUNATIC",
|
||||
},
|
||||
info={
|
||||
"禁止断B2B",
|
||||
"禁止断满贯",
|
||||
"Keep B2B",
|
||||
"禁止普通消除",
|
||||
"禁止普通消除",
|
||||
"No normal clear",
|
||||
},
|
||||
color=color.red,
|
||||
env={
|
||||
_20G=true,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
dropPiece=tech_reach_hard,
|
||||
dropPiece=tech_check_hard,
|
||||
bg="matrix",bgm="secret7th",
|
||||
},
|
||||
load=function()
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
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,
|
||||
@@ -49,6 +49,7 @@ return{
|
||||
L>=140 and 4 or
|
||||
L>=90 and 3 or
|
||||
L>=60 and 2 or
|
||||
L>=30 and 1
|
||||
L>=30 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_ultimate(P)
|
||||
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -26,7 +26,7 @@ return{
|
||||
oncehold=false,
|
||||
drop=1e99,lock=1e99,
|
||||
target=200,
|
||||
dropPiece=tech_reach_ultimate,
|
||||
dropPiece=tech_check_ultimate,
|
||||
bg="matrix",bgm="newera",
|
||||
},
|
||||
load=function()
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
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,
|
||||
@@ -49,6 +49,7 @@ return{
|
||||
L>=126 and 4 or
|
||||
L>=80 and 3 or
|
||||
L>=50 and 2 or
|
||||
L>=20 and 1
|
||||
L>=20 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_easy(P)
|
||||
if #P.cleared>0 and P.b2b<40 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.b2b<40 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -34,10 +34,10 @@ return{
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
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,
|
||||
@@ -49,6 +49,7 @@ return{
|
||||
L>=126 and 4 or
|
||||
L>=80 and 3 or
|
||||
L>=50 and 2 or
|
||||
L>=20 and 1
|
||||
L>=20 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_ultimate(P)
|
||||
if #P.cleared>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 or P.lastClear==74 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -17,28 +17,30 @@ return{
|
||||
"ULTIMATE+",
|
||||
},
|
||||
info={
|
||||
"禁止普通消除,强制最简操作",
|
||||
"禁止普通消除,强制最简操作",
|
||||
"Don't do normal clear,no finesse error",
|
||||
"仅允许spin与PC,强制最简操作",
|
||||
"仅允许spin与全清,强制最简操作",
|
||||
"Spin&PC only,no finesse error",
|
||||
},
|
||||
color=color.grey,
|
||||
env={
|
||||
arr=0,
|
||||
drop=1e99,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
fineKill=true,
|
||||
dropPiece=tech_reach_ultimate,
|
||||
dropPiece=tech_check_ultimate,
|
||||
bg="flink",bgm="infinite",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
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,
|
||||
@@ -50,6 +52,7 @@ return{
|
||||
L>=150 and 4 or
|
||||
L>=100 and 3 or
|
||||
L>=70 and 2 or
|
||||
L>=40 and 1
|
||||
L>=40 and 1 or
|
||||
L>=10 and 0
|
||||
end,
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
local format=string.format
|
||||
local function tech_check_hard(P)
|
||||
if #P.cleared>0 and P.lastClear<10 then
|
||||
Event.lose(P)
|
||||
if #P.clearedRow>0 and P.lastClear<10 then
|
||||
P:lose()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -17,28 +17,30 @@ return{
|
||||
"ULTIMATE",
|
||||
},
|
||||
info={
|
||||
"仅允许spin与PC,强制最简操作",
|
||||
"仅允许spin与全清,强制最简操作",
|
||||
"Don't do normal clear,no finesse error",
|
||||
"禁止普通消除,强制最简操作",
|
||||
"禁止普通消除,强制最简操作",
|
||||
"No normal clear,no finesse error",
|
||||
},
|
||||
color=color.lightYellow,
|
||||
env={
|
||||
arr=0,
|
||||
drop=1e99,lock=60,
|
||||
freshLimit=15,
|
||||
target=200,
|
||||
fineKill=true,
|
||||
dropPiece=tech_reach_hard,
|
||||
dropPiece=tech_check_hard,
|
||||
bg="flink",bgm="infinite",
|
||||
},
|
||||
slowMark=true,
|
||||
load=function()
|
||||
newPlayer(1,340,15)
|
||||
end,
|
||||
mesDisp=function(P,dx,dy)
|
||||
setFont(45)
|
||||
mStr(P.stat.atk,-82,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
|
||||
mDraw(drawableText.atk,-82,363)
|
||||
mDraw(drawableText.eff,-82,475)
|
||||
mStr(P.stat.atk,-81,310)
|
||||
mStr(format("%.2f",P.stat.atk/P.stat.row),-81,420)
|
||||
mDraw(drawableText.atk,-81,363)
|
||||
mDraw(drawableText.eff,-81,475)
|
||||
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,
|
||||
@@ -50,6 +52,7 @@ return{
|
||||
L>=150 and 4 or
|
||||
L>=100 and 3 or
|
||||
L>=70 and 2 or
|
||||
L>=40 and 1
|
||||
L>=40 and 1 or
|
||||
L>=10 and 0
|
||||
end,
|
||||
}
|
||||