消除所有填满行的函数整理为玩家类的clearFilledLines方法

添加消7~20和20+的消除文本与消除音效
播放消n音效打包为函数移至gameFuncs文件
This commit is contained in:
MrZ626
2021-11-02 16:30:00 +08:00
parent aa01ab07f7
commit bd260b2c6f
14 changed files with 63 additions and 43 deletions

View File

@@ -2,16 +2,10 @@ return{
fillClear=false,
dropPiece=function(P)
if #P.field>P.gameEnv.fieldH then
local cc=P:checkClear(P.field,P.garbageBeneath+1,#P.field-P.garbageBeneath)
if cc>0 then
SFX.play('clear_'..math.min(cc,6))
P:showText(text.clear[cc]or cc.."-crash",0,0,60,'beat',.4)
P:removeClearedLines()
P.falling=P.gameEnv.fall
P.stat.row=P.stat.row+cc
end
if P.gameEnv.fieldH-cc-P.garbageBeneath>0 then
P:garbageRise(21,P.gameEnv.fieldH-cc-P.garbageBeneath,2e10-1)
local cc=P:clearFilledLines(P.garbageBeneath+1,#P.field-P.garbageBeneath)
local h=P.gameEnv.fieldH-cc-P.garbageBeneath
if h>0 then
P:garbageRise(21,h,2e10-1)
if P.garbageBeneath>=P.gameEnv.fieldH then
P:lose()
end

View File

@@ -2,14 +2,7 @@ return{
fillClear=false,
dropPiece=function(P)
if #P.field>P.gameEnv.fieldH then
local cc=P:checkClear(P.field,P.garbageBeneath+1,#P.field-P.garbageBeneath)
if cc>0 then
SFX.play('clear_'..math.min(cc,6))
P:showText(text.clear[cc]or cc.."-crash",0,0,60,'beat',.4)
P:removeClearedLines()
P.falling=P.gameEnv.fall
P.stat.row=P.stat.row+cc
end
local cc=P:clearFilledLines(P.garbageBeneath+1,#P.field-P.garbageBeneath)
local h=math.ceil((P.gameEnv.fieldH-cc-P.garbageBeneath)/2)
if h>0 then
P:garbageRise(21,h,2e10-1)

View File

@@ -10,6 +10,7 @@ local int,rnd=math.floor,math.random
local SETTING,GAME,SCR=SETTING,GAME,SCR
local PLAYERS=PLAYERS
local playSFX=SFX.play
@@ -173,6 +174,28 @@ function royaleLevelup()
end
end
end
--Sound shortcuts
function playClearSFX(cc)
if cc<=0 or cc%1~=0 then return end
if cc<=4 then
playSFX('clear_'..cc)
elseif cc<=6 then
playSFX('clear_5')
else
playSFX('clear_6',.4)
if cc<=9 then Snd('bass','A3','E4')
elseif cc<=12 then Snd('bass','A3','E4','A4')
elseif cc<=14 then Snd('bass',.8,'A3','E4')Snd('lead','A4','E5')
elseif cc<=16 then Snd('bass',.8,'A3','G4')Snd('lead','B4','G5')
elseif cc==17 then Snd('bass',.8,'A3','A4')Snd('lead','E5','G5')
elseif cc==18 then Snd('bass',.7,'A4')Snd('lead',.8,'C4','G5')Snd('bell','D5')
elseif cc==19 then Snd('bass',.7,'A4')Snd('lead',.8,'A4','E5')Snd('bell','B5')
elseif cc==20 then Snd('bass',.7,'A4')Snd('lead',.8,'A4','E4')Snd('bell','D5','B5','G6')
else Snd('bass',.7,'A4')Snd('lead',.8,'A4','E4')Snd('bell','B5','E6','A6')
end
end
end
function playReadySFX(i)
if i==3 then
Snd('bass','A3')
@@ -364,7 +387,7 @@ function loadGame(mode,ifQuickPlay,ifNet)--Load a mode and go to game scene
local modeText=text.modes[mode]or{"["..MODES[mode].name.."]",""}
TEXTOBJ.modeName:set(modeText[1].." "..modeText[2])
SCN.go('game',ifQuickPlay and'swipeD'or'fade_togame')
SFX.play('enter')
playSFX('enter')
end
end
end
@@ -428,7 +451,7 @@ function gameOver()--Save record
P:_showText(text.newRecord,0,-100,100,'beat',.5)
if SETTING.autoSave and DATA.saveReplay()then
GAME.saved=true
SFX.play('connected')
playSFX('connected')
MES.new('check',text.saveDone)
end
end

View File

@@ -21,7 +21,7 @@ return{
powerUp={[0]="+000%","+025%","+050%","+075%","+100%"},
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
spin="-spin",
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash"},
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
mini="Mini",b2b="B2B ",b3b="B2B2B ",
PC="Perfect Clear",HPC="Hemi-Perfect Clear",
replaying="[Replay]",

View File

@@ -10,7 +10,7 @@ return{
royale_remain="$1 Jugadores Restantes",
cmb={nil,"Combo de 1","Combo de 2","Combo de 3","Combo de 4","Combo de 5","Combo de 6","Combo de 7","Combo de 8","Combo de 9","¡Combo de 10!","¡Combo de 11!","¡Combo de 12!","¡Combo de 13!","¡Combo de 14!","¡Combo de 15!","¡Combo de 16!","¡Combo de 17!","¡Combo de 18!","¡Combo de 19!","MEGACOMBO"},
spin="-spin",
clear={"Single","Doble","Triple","Techrash","Pentacrash","Hexacrash"},
clear={"Single","Doble","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
mini="Mini",b2b="B2B ",b3b="B2B2B ",
PC="Perfect Clear",HPC="Half Clear",
replaying="[Repetición]",

View File

@@ -10,7 +10,7 @@ return{
royale_remain="$1 Joueurs restants",
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
spin="-spin",
clear={"Simple","Double","Triple","Techrash","Pentacrash","Hexacrash"},
clear={"Simple","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
mini="Mini",b2b="B2B ",b3b="B2B2B ",
PC="Perfect Clear",HPC="Clear",
replaying="[Replay]",

View File

@@ -11,7 +11,7 @@ return{
royale_remain="$1 Jogadores restantes",
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
spin="-spin",
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash"},
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
mini="Mini",b2b="B2B ",b3b="B2B2B ",
PC="Perfect Clear",HPC="Clear",
replaying="[Replay]",

View File

@@ -5,7 +5,7 @@ return{
royale_remain="$1 ~",
cmb={nil,"!","!!","!!!","!!!!","!!!!!","!!!!!!","!!!!!!!","!!!!!!!!","!!!!!!!!!","!!!!!!!!!!","!!!!!!!!!!!","!!!!!!!!!!!!","!!!!!!!!!!!!!","!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!!!!",},
spin=" ~",
clear={"1","2","3","4","5","6"},
clear={"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","20+"},
mini="v",b2b="^ ",b3b="^^ ",
PC="#<>#",HPC="<>",
replaying="[R]",

View File

@@ -15,8 +15,7 @@ return{fallback='zh',
royale_remain="剩 $1 人",
cmb={nil,"1连","2连","3连","4连","5连","6连","7连","8连","9连","10连!","11连!","12连!","13连!","14连!","15连!","16连!","17连!","18连!","19连!","Very 连"},
spin="",
clear={"消一","消二","消三","消四","卧槽","离谱"},
mini="",b2b="牛逼",b3b="很牛逼",
clear={"消一","消二","消三","消四","消五","消六","消七","消八","消九","消十","消十一","消十二","消十三","消十四","消十五","消十六","消十七","消十八","消十九","消二十","消超二十"}, mini="",b2b="牛逼",b3b="很牛逼",
PC="消干净了",HPC="消了半截",
great="不错的",

View File

@@ -21,7 +21,7 @@ return{
powerUp={[0]="000%UP","025%UP","050%UP","075%UP","100%UP"},
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo","11 Combo","12 Combo","13 Combo","14 Combo","15 Combo","16 Combo","17 Combo","18 Combo","19 Combo","MEGACMB"},
spin="-spin",
clear={"single","double","triple","Techrash","Pentacrash","Hexacrash"},
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
mini="Mini",b2b="B2B ",b3b="B2B2B ",
PC="Perfect Clear",HPC="Half Clear",
replaying="[回放]",

View File

@@ -1,7 +1,7 @@
return{
cmb={nil,"1连击","2连击","3连击","4连击","5连击","6连击","7连击","8连击","9连击","10连击!","11连击!","12连击!","13连击!","14连击!","15连击!","16连击!","17连击!","18连击!","19连击!","巨型连击"},
spin="型回旋",
clear={"单清","双清","三清","四清","五清","六清"},
clear={"单清","双清","三清","四清","五清","六清","七清","八清","九清","十清","十一清","十二清","十三清","十四清","十五清","十六清","十七清","十八清","十九清","二十清","超二十清"},
mini="迷你",b2b="满贯",b3b="大满贯",
PC="场地全清",HPC="场地半清",

View File

@@ -22,7 +22,7 @@ return{
powerUp={[0]="+000%","+025%","+050%","+075%","+100%"},
cmb={nil,"1连击","2连击","3连击","4连击","5连击","6连击","7连击","8连击","9连击","10连击","11连击","12连击","13连击","14连击","15连击","16连击","17连击","18连击","19连击","巨大连击"},
spin="-旋转",
clear={"单身的","双重的","三倍的","技术崩溃","五角碰撞","六面体碎裂"},
clear={"单身的","双重的","三倍的","技术崩溃","五角碰撞","六面体碎裂","七冲击","八度碰撞","非碰撞","十点崩溃","不祥","十二面体碰撞","三十年代的崩溃","十四烷","十五烷碰撞","十六进制","七烷酸","十八进制崩溃","非十进制碰撞","超级崩溃","冒牌货"},
mini="迷你",b2b="背靠背",b3b="背靠背靠背",
PC="清清楚楚",HPC="半完美清晰",
replaying="[重播]",

View File

@@ -621,7 +621,7 @@ function Player:lock()
end
end
function Player:checkClear(field,start,height,CB,CX)
function Player:_checkClear(field,start,height,CB,CX)
local cc,gbcc=0,0
for i=1,height do
local h=start+i-2
@@ -653,7 +653,7 @@ function Player:checkClear(field,start,height,CB,CX)
end
return cc,gbcc
end
function Player:roofCheck()
function Player:_roofCheck()
local CB=self.cur.bk
for x=1,#CB[1]do
local y=#CB
@@ -672,7 +672,7 @@ function Player:roofCheck()
end
return false
end
function Player:removeClearedLines()
function Player:_removeClearedLines()
for i=#self.clearedRow,1,-1 do
local h=self.clearedRow[i]
if self.field[h].garbage then
@@ -682,6 +682,18 @@ function Player:removeClearedLines()
FREEROW.discard(rem(self.visTime,h))
end
end
function Player:clearFilledLines(start,height)
local _cc,_gbcc=self:_checkClear(self.field,start,height)
if _cc>0 then
playClearSFX(_cc)
self:showText(text.clear[min(_cc,21)],0,0,60,'beat',.4)
self:_removeClearedLines()
self.falling=self.gameEnv.fall
self.stat.row=self.stat.row+_cc
self.stat.dig=self.stat.dig+_gbcc
end
return _cc,_gbcc
end
function Player:removeTopClearingFX()
for i=#self.clearingRow,1,-1 do
if self.clearingRow[i]>#self.field then
@@ -710,7 +722,7 @@ function Player:checkMission(piece,mission)
return false
end
local spawnSFX_name={}for i=1,7 do spawnSFX_name[i]='spawn_'..i end
local spawnSFX_name={'spawn_1','spawn_2','spawn_3','spawn_4','spawn_5','spawn_6','spawn_7'}
function Player:resetBlock()--Reset Block's position and execute I*S
local C=self.cur
local sc=C.RS.centerPos[C.id][C.dir]
@@ -1083,7 +1095,6 @@ do--Player.drop(self)--Place piece
local spinVoice={'zspin','sspin','jspin','lspin','tspin','ospin','ispin','zspin','sspin','pspin','qspin','fspin','espin','tspin','uspin','vspin','wspin','xspin','jspin','lspin','rspin','yspin','nspin','hspin','ispin','ispin','cspin','ispin','ospin'}
local clearVoice={'single','double','triple','techrash','pentacrash','hexacrash'}
local spinSFX={[0]='spin_0','spin_1','spin_2'}
local clearSFX={'clear_1','clear_2','clear_3','clear_4','clear_5','clear_6'}
local renSFX={}for i=1,11 do renSFX[i]='ren_'..i end
local finesseList={
{
@@ -1241,7 +1252,7 @@ do--Player.drop(self)--Place piece
--Check line clear
if self.gameEnv.fillClear then
local _cc,_gbcc=self:checkClear(self.field,CY,#CB,CB,CX)
local _cc,_gbcc=self:_checkClear(self.field,CY,#CB,CB,CX)
cc,gbcc=cc+_cc,gbcc+_gbcc
end
@@ -1272,10 +1283,10 @@ do--Player.drop(self)--Place piece
end
--Finesse: roof check
local finesse=CY>ENV.fieldH-2 or self:roofCheck()
local finesse=CY>ENV.fieldH-2 or self:_roofCheck()
--Remove rows need to be cleared
self:removeClearedLines()
self:_removeClearedLines()
--Cancel top clearing FX & get clear flag
clear=self:removeTopClearingFX()
@@ -1519,7 +1530,7 @@ do--Player.drop(self)--Place piece
--SFX & Vibrate
if self.sound then
SFX.play(clearSFX[cc])
playClearSFX(cc)
SFX.play(renSFX[min(cmb,11)],.75)
if cmb>14 then
SFX.play('ren_mega',(cmb-10)*.1)
@@ -2283,7 +2294,7 @@ function Player:revive()
SYSFX.newShade(1.4,self.fieldX,self.fieldY,300*self.size,610*self.size)
SYSFX.newRectRipple(2,self.fieldX,self.fieldY,300*self.size,610*self.size)
SYSFX.newRipple(2,self.x+(475+25*(self.life<3 and self.life or 0)+12)*self.size,self.y+(595+12)*self.size,20)
SFX.play('clear_3')
playClearSFX(3)
SFX.play('emit')
end
function Player:win(result)

View File

@@ -23,9 +23,9 @@ local loadingThread=coroutine.wrap(function()
end
YIELD()
YIELD('loadSFX')SFX.load('media/effect/'..SETTING.sfxPack..'/')
YIELD('loadSample')SFX.loadSample{name='bass',path='media/sample/bass',base='A2'}
YIELD('loadSample')SFX.loadSample{name='lead',path='media/sample/lead',base='A3'}
YIELD('loadSample')SFX.loadSample{name='bell',path='media/sample/bell',base='A4'}
YIELD('loadSample')SFX.loadSample{name='bass',path='media/sample/bass',base='A2'}--A2~A4
YIELD('loadSample')SFX.loadSample{name='lead',path='media/sample/lead',base='A3'}--A3~A5
YIELD('loadSample')SFX.loadSample{name='bell',path='media/sample/bell',base='A4'}--A4~A6
YIELD('loadVoice')VOC.load('media/vocal/'..SETTING.vocPack..'/')
YIELD('loadFont')for i=1,17 do getFont(15+5*i)end