diff --git a/parts/eventsets/stack_100.lua b/parts/eventsets/stack_100.lua index c9fdfedc..7725fbb2 100644 --- a/parts/eventsets/stack_100.lua +++ b/parts/eventsets/stack_100.lua @@ -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 diff --git a/parts/eventsets/stack_50.lua b/parts/eventsets/stack_50.lua index dac236b8..b9d3ba02 100644 --- a/parts/eventsets/stack_50.lua +++ b/parts/eventsets/stack_50.lua @@ -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) diff --git a/parts/gameFuncs.lua b/parts/gameFuncs.lua index 59d6db54..97c4257d 100644 --- a/parts/gameFuncs.lua +++ b/parts/gameFuncs.lua @@ -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 diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index 02e3aa6e..bf84feaa 100644 --- a/parts/language/lang_en.lua +++ b/parts/language/lang_en.lua @@ -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]", diff --git a/parts/language/lang_es.lua b/parts/language/lang_es.lua index 8b39efdf..5161ce07 100644 --- a/parts/language/lang_es.lua +++ b/parts/language/lang_es.lua @@ -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]", diff --git a/parts/language/lang_fr.lua b/parts/language/lang_fr.lua index 0ef5cff6..ef338684 100644 --- a/parts/language/lang_fr.lua +++ b/parts/language/lang_fr.lua @@ -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]", diff --git a/parts/language/lang_pt.lua b/parts/language/lang_pt.lua index b15be115..f852be6a 100644 --- a/parts/language/lang_pt.lua +++ b/parts/language/lang_pt.lua @@ -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]", diff --git a/parts/language/lang_symbol.lua b/parts/language/lang_symbol.lua index d326b076..d27053ea 100644 --- a/parts/language/lang_symbol.lua +++ b/parts/language/lang_symbol.lua @@ -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]", diff --git a/parts/language/lang_yygq.lua b/parts/language/lang_yygq.lua index deaf12a0..0a826eb3 100644 --- a/parts/language/lang_yygq.lua +++ b/parts/language/lang_yygq.lua @@ -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="不错的", diff --git a/parts/language/lang_zh.lua b/parts/language/lang_zh.lua index 87e0021a..15960a7d 100644 --- a/parts/language/lang_zh.lua +++ b/parts/language/lang_zh.lua @@ -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="[回放]", diff --git a/parts/language/lang_zh_full.lua b/parts/language/lang_zh_full.lua index 5f36f6da..715efc97 100644 --- a/parts/language/lang_zh_full.lua +++ b/parts/language/lang_zh_full.lua @@ -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="场地半清", diff --git a/parts/language/lang_zh_grass.lua b/parts/language/lang_zh_grass.lua index adc511a3..831f3413 100644 --- a/parts/language/lang_zh_grass.lua +++ b/parts/language/lang_zh_grass.lua @@ -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="[重播]", diff --git a/parts/player/player.lua b/parts/player/player.lua index 89f805c5..d6416ee9 100644 --- a/parts/player/player.lua +++ b/parts/player/player.lua @@ -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) diff --git a/parts/scenes/load.lua b/parts/scenes/load.lua index 3ef6400e..64ee82b6 100644 --- a/parts/scenes/load.lua +++ b/parts/scenes/load.lua @@ -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