diff --git a/parts/bot/init.lua b/parts/bot/init.lua index 39a386d4..27d9e60b 100644 --- a/parts/bot/init.lua +++ b/parts/bot/init.lua @@ -12,7 +12,7 @@ local baseBot={ function baseBot.update(bot) local P=bot.P local keys=bot.keys - if P.control and P.waiting==-1 then + if P.control and P.waiting==0 then bot.delay=bot.delay-1 if not keys[1]then if bot.runningThread then diff --git a/parts/customEnv0.lua b/parts/customEnv0.lua index 6e50499c..075304d0 100644 --- a/parts/customEnv0.lua +++ b/parts/customEnv0.lua @@ -6,6 +6,8 @@ return{ lock=1e99, wait=0, fall=0, + hang=5, + hurry=1e99, --Control nextCount=6, @@ -13,7 +15,6 @@ return{ holdCount=1, infHold=true, phyHold=false, - hang=5, --Visual bone=false, diff --git a/parts/gameTables.lua b/parts/gameTables.lua index 4230c27e..48e325dc 100644 --- a/parts/gameTables.lua +++ b/parts/gameTables.lua @@ -536,13 +536,12 @@ do--Game data tables ROOMENV={ --Room config capacity=10, + FTLock=true, --Basic - drop=30, - lock=60, - wait=0, - fall=0, - FTLock=true, + drop=30,lock=60, + wait=0,fall=0, + hang=5,hurry=1e99, --Control nextCount=6, diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index 21c39b49..40d09f13 100644 --- a/parts/language/lang_en.lua +++ b/parts/language/lang_en.lua @@ -296,6 +296,8 @@ return{ lock="Lock Delay", wait="Entry Delay", fall="Line Delay", + hang="Death Delay", + hurry="ARE Interruption", capacity="Capacity", create="Create", @@ -480,6 +482,7 @@ return{ wait="Entry Delay", fall="Line Delay", hang="Death Delay", + hurry="ARE Interruption", bg="Background", bgm="Music", diff --git a/parts/language/lang_es.lua b/parts/language/lang_es.lua index 72122ff6..5817a83b 100644 --- a/parts/language/lang_es.lua +++ b/parts/language/lang_es.lua @@ -262,6 +262,8 @@ return{ lock="Retraso de Bloqueo", wait="Retraso de Spawneo", fall="Retraso de Línea", + -- hang="Death Delay", + -- hurry="ARE Interruption", capacity="Capacidad", create="Crear", @@ -445,6 +447,7 @@ return{ wait="Retraso de Spawneo", fall="Retraso de Línea", -- hang="Death Delay", + -- hurry="ARE Interruption", bg="Fondo", bgm="Música", diff --git a/parts/language/lang_fr.lua b/parts/language/lang_fr.lua index 72625b21..69c13597 100644 --- a/parts/language/lang_fr.lua +++ b/parts/language/lang_fr.lua @@ -258,6 +258,8 @@ return{ lock="Délai de verrouillage", wait="Délai d'apparition", fall="Délai de ligne", + -- hang="Death Delay", + -- hurry="ARE Interruption", -- capacity="Capacity", -- create="Create", @@ -446,6 +448,7 @@ return{ wait="Délai d'apparition", fall="Délai de ligne", -- hang="Death Delay", + -- hurry="ARE Interruption", bg="Arrière-plan", bgm="Musique", diff --git a/parts/language/lang_pt.lua b/parts/language/lang_pt.lua index a5fe6506..75e67a90 100644 --- a/parts/language/lang_pt.lua +++ b/parts/language/lang_pt.lua @@ -284,6 +284,8 @@ return{ lock="Delay Trava", wait="Delay Entrada", fall="Delay Linha", + -- hang="Death Delay", + -- hurry="ARE Interruption", -- capacity="Capacity", -- create="Create", @@ -468,6 +470,7 @@ return{ wait="Delay Entrada", fall="Delay Linha", -- hang="Death Delay", + -- hurry="ARE Interruption", bg="Fundo", bgm="Música", diff --git a/parts/language/lang_symbol.lua b/parts/language/lang_symbol.lua index b7f5bb0e..b3b6bb44 100644 --- a/parts/language/lang_symbol.lua +++ b/parts/language/lang_symbol.lua @@ -190,6 +190,8 @@ return{ lock="↓_", wait="→=", fall="↓=", + hang=":(=", + hurry="_x", capacity="<0/?>", create=">", @@ -373,6 +375,7 @@ return{ wait="→=", fall="↓=", hang=":(=", + hurry="_x", bg="{~}", bgm="(~)", diff --git a/parts/language/lang_zh.lua b/parts/language/lang_zh.lua index 9f281e33..c7b2d9f7 100644 --- a/parts/language/lang_zh.lua +++ b/parts/language/lang_zh.lua @@ -296,6 +296,8 @@ return{ lock="锁定延迟", wait="出块等待", fall="消行延迟", + hang="窒息延迟", + hurry="ARE打断", capacity="房间容量", create="创建", @@ -479,6 +481,7 @@ return{ wait="出块等待", fall="消行延迟", hang="窒息延迟", + hurry="ARE打断", bg="背景", bgm="音乐", diff --git a/parts/language/lang_zh_grass.lua b/parts/language/lang_zh_grass.lua index b72f08d8..d74cdb03 100644 --- a/parts/language/lang_zh_grass.lua +++ b/parts/language/lang_zh_grass.lua @@ -294,6 +294,8 @@ return{ lock="锁定延迟", wait="进入延迟", fall="线路延迟", + hang="毁灭延迟", + hurry="是打扰吗", capacity="容量", create="创造", @@ -477,6 +479,7 @@ return{ wait="进入延迟", fall="线路延迟", hang="毁灭延迟", + hurry="是打扰吗", bg="背景", bgm="音乐", @@ -753,7 +756,7 @@ return{ ['infinite_dig']= {"无限:挖掘", "", "挖,挖,挖"}, ['marathon_inf']= {"马拉松", "无尽", "无尽马拉松"}, - ['custom_clear']= {"习俗", "正常"} , + ['custom_clear']= {"习俗", "正常"}, ['custom_puzzle']= {"习俗", "令人费解的"}, }, } diff --git a/parts/language/lang_zh_trad.lua b/parts/language/lang_zh_trad.lua index 6bd5caab..197e9a0c 100644 --- a/parts/language/lang_zh_trad.lua +++ b/parts/language/lang_zh_trad.lua @@ -295,6 +295,8 @@ return{ lock="鎖定延遲", wait="方塊生成等待", fall="行清除延遲", + hang="死亡延遲", + hurry="ARE打斷", capacity="房間容量", create="創建", @@ -478,6 +480,7 @@ return{ wait="方塊生成等待", fall="行清除延遲", hang="死亡延遲", + hurry="ARE打斷", bg="背景", bgm="音樂", diff --git a/parts/player/draw.lua b/parts/player/draw.lua index 369d2bf2..1e46f12d 100644 --- a/parts/player/draw.lua +++ b/parts/player/draw.lua @@ -170,7 +170,7 @@ local function _drawField(P,showInvis) local V,F=P.visTime,P.field local start=int((P.fieldBeneath+P.fieldUp)/30+1) local texture=P.skinLib - if P.falling==-1 then--Blocks only + if P.falling==0 then--Blocks only if ENV.upEdge then gc_setShader(shader_lighter) gc_translate(0,-4) @@ -782,7 +782,7 @@ function draw.norm(P,repMode) _drawFXs(P) --Draw current block - if P.cur and P.waiting==-1 then + if P.cur and P.waiting==0 then local C=P.cur local curColor=C.color @@ -997,7 +997,7 @@ function draw.demo(P) gc_translate(0,600) _drawField(P) _drawFXs(P) - if P.cur and P.waiting==-1 then + if P.cur and P.waiting==0 then if ENV.ghost then drawGhost[ENV.ghostType](P.cur.bk,P.curX,P.ghoY,ENV.ghost,P.skinLib,curColor) end diff --git a/parts/player/gameEnv0.lua b/parts/player/gameEnv0.lua index 435e90fc..daf56b06 100644 --- a/parts/player/gameEnv0.lua +++ b/parts/player/gameEnv0.lua @@ -3,7 +3,6 @@ return{ dascut=0,dropcut=0, sddas=2,sdarr=2, ihs=true,irs=true,ims=true, - hang=5,FTLock=true, ghostType='gray', block=true,ghost=.3,center=1, @@ -30,6 +29,7 @@ return{ drop=60,lock=60, wait=0,fall=0, + hang=5,hurry=1e99, bone=false, lockout=false, fieldH=20,heightLimit=1e99, @@ -69,4 +69,5 @@ return{ bg='none',bgm='race', allowMod=true, + FTLock=true, } diff --git a/parts/player/init.lua b/parts/player/init.lua index ff3163bc..d9df0a3f 100644 --- a/parts/player/init.lua +++ b/parts/player/init.lua @@ -36,54 +36,6 @@ local function _getNewStatTable() end return T end -local playerActions={ - Player.act_moveLeft, --1 - Player.act_moveRight, --2 - Player.act_rotRight, --3 - Player.act_rotLeft, --4 - Player.act_rot180, --5 - Player.act_hardDrop, --6 - Player.act_softDrop, --7 - Player.act_hold, --8 - Player.act_func1, --9 - Player.act_func2, --10 - Player.act_insLeft, --11 - Player.act_insRight, --12 - Player.act_insDown, --13 - Player.act_down1, --14 - Player.act_down4, --15 - Player.act_down10, --16 - Player.act_dropLeft, --17 - Player.act_dropRight, --18 - Player.act_zangiLeft, --19 - Player.act_zangiRight,--20 -} -local function _pressKey(P,keyID) - if P.keyAvailable[keyID]and P.alive then - P.keyPressing[keyID]=true - playerActions[keyID](P) - P.stat.key=P.stat.key+1 - end -end -local function _releaseKey(P,keyID) - P.keyPressing[keyID]=false -end -local function _pressKey_Rec(P,keyID) - if P.keyAvailable[keyID]and P.alive then - local L=GAME.rep - ins(L,P.frameRun) - ins(L,keyID) - P.keyPressing[keyID]=true - playerActions[keyID](P) - P.stat.key=P.stat.key+1 - end -end -local function _releaseKey_Rec(P,keyID) - local L=GAME.rep - ins(L,P.frameRun) - ins(L,32+keyID) - P.keyPressing[keyID]=false -end local function _newEmptyPlayer(id,mini) local P={id=id} PLAYERS[id]=P @@ -92,15 +44,6 @@ local function _newEmptyPlayer(id,mini) --Inherit functions of Player class for k,v in next,Player do P[k]=v end - --Set key/timer event - if P.id==1 and GAME.recording then - P.pressKey=_pressKey_Rec - P.releaseKey=_releaseKey_Rec - else - P.pressKey=_pressKey - P.releaseKey=_releaseKey - end - --Field position P.swingOffset={--Shake FX x=0,y=0, @@ -195,7 +138,7 @@ local function _newEmptyPlayer(id,mini) ]] P.movDir,P.moving,P.downing=0,0,0--Last move key,DAS charging,downDAS charging P.dropDelay,P.lockDelay=0,0 - P.waiting,P.falling=-1,-1 + P.waiting,P.falling=0,0 P.freshTime=0 P.spinLast=false P.ctrlCount=0--Key press time, for finesse check diff --git a/parts/player/player.lua b/parts/player/player.lua index 3da7ed95..d4d66db6 100644 --- a/parts/player/player.lua +++ b/parts/player/player.lua @@ -200,7 +200,301 @@ function Player:createBeam(R,send) end ---------------------------------------------------- +---------------------------------------------------- +function Player:act_moveLeft(auto) + if not auto then + self.ctrlCount=self.ctrlCount+1 + end + self.movDir=-1 + if self.control and self.waiting==0 then + if self.cur and not self:ifoverlap(self.cur.bk,self.curX-1,self.curY)then + self:createMoveFX('left') + self.curX=self.curX-1 + self:freshBlock('move') + if not auto then + self.moving=0 + end + self.spinLast=false + else + self.moving=self.gameEnv.das + end + else + self.moving=0 + end +end +function Player:act_moveRight(auto) + if not auto then + self.ctrlCount=self.ctrlCount+1 + end + self.movDir=1 + if self.control and self.waiting==0 then + if self.cur and not self:ifoverlap(self.cur.bk,self.curX+1,self.curY)then + self:createMoveFX('right') + self.curX=self.curX+1 + self:freshBlock('move') + if not auto then + self.moving=0 + end + self.spinLast=false + else + self.moving=self.gameEnv.das + end + else + self.moving=0 + end +end +function Player:act_rotRight() + if self.control and self.waiting==0 and self.cur then + self.ctrlCount=self.ctrlCount+1 + self:spin(1) + self.keyPressing[3]=false + end +end +function Player:act_rotLeft() + if self.control and self.waiting==0 and self.cur then + self.ctrlCount=self.ctrlCount+1 + self:spin(3) + self.keyPressing[4]=false + end +end +function Player:act_rot180() + if self.control and self.waiting==0 and self.cur then + self.ctrlCount=self.ctrlCount+2 + self:spin(2) + self.keyPressing[5]=false + end +end +function Player:act_hardDrop() + local ENV=self.gameEnv + if self.control and self.waiting==0 and self.cur then + if self.lastPiece.autoLock and self.frameRun-self.lastPiece.frameself.ghoY then + self:createDropFX() + self.curY=self.ghoY + self.spinLast=false + if self.sound then + SFX.play('drop',nil,self:getCenterX()*.15) + if SETTING.vib>0 then VIB(SETTING.vib+1)end + end + end + if ENV.shakeFX then + self.swingOffset.vy=.6 + self.swingOffset.va=self.swingOffset.va+self:getCenterX()*6e-4 + end + self.lockDelay=-1 + self.keyPressing[6]=false + self:drop() + end + end +end +function Player:act_softDrop() + local ENV=self.gameEnv + self.downing=1 + if self.control and self.waiting==0 and self.cur then + if self.curY>self.ghoY then + self.curY=self.curY-1 + self:freshBlock('fresh') + self.spinLast=false + self:checkTouchSound() + elseif ENV.deepDrop then + local CB=self.cur.bk + local y=self.curY-1 + while self:ifoverlap(CB,self.curX,y)and y>0 do + y=y-1 + end + if y>0 then + self.ghoY=y + self:createDropFX() + self.curY=y + self:freshBlock('move') + SFX.play('swipe') + end + end + end +end +function Player:act_hold() + if self.control and self.waiting==0 then + self:hold() + self.keyPressing[8]=false + end +end +function Player:act_func1() + self.gameEnv.fkey1(self) +end +function Player:act_func2() + self.gameEnv.fkey2(self) +end + +function Player:act_insLeft(auto) + if not self.cur then + return + end + local x0=self.curX + while not self:ifoverlap(self.cur.bk,self.curX-1,self.curY)do + self:createMoveFX('left') + self.curX=self.curX-1 + self:freshBlock('move',true) + end + if self.curX~=x0 then + self.spinLast=false + self:checkTouchSound() + end + if self.gameEnv.shakeFX then + self.swingOffset.vx=-1.5 + end + if auto then + if self.ctrlCount==0 then + self.ctrlCount=1 + end + else + self.ctrlCount=self.ctrlCount+1 + end +end +function Player:act_insRight(auto) + if not self.cur then + return + end + local x0=self.curX + while not self:ifoverlap(self.cur.bk,self.curX+1,self.curY)do + self:createMoveFX('right') + self.curX=self.curX+1 + self:freshBlock('move',true) + end + if self.curX~=x0 then + self.spinLast=false + self:checkTouchSound() + end + if self.gameEnv.shakeFX then + self.swingOffset.vx=1.5 + end + if auto then + if self.ctrlCount==0 then + self.ctrlCount=1 + end + else + self.ctrlCount=self.ctrlCount+1 + end +end +function Player:act_insDown() + if self.cur and self.curY>self.ghoY then + local ENV=self.gameEnv + self:createDropFX() + if ENV.shakeFX then + self.swingOffset.vy=.5 + end + self.curY=self.ghoY + self.lockDelay=ENV.lock + self.spinLast=false + self:freshBlock('fresh') + self:checkTouchSound() + end +end +function Player:act_down1() + if self.cur and self.curY>self.ghoY then + self:createMoveFX('down') + self.curY=self.curY-1 + self:freshBlock('fresh') + self.spinLast=false + end +end +function Player:act_down4() + if self.cur and self.curY>self.ghoY then + local ghoY0=self.ghoY + self.ghoY=max(self.curY-4,self.ghoY) + self:createDropFX() + self.curY,self.ghoY=self.ghoY,ghoY0 + self:freshBlock('fresh') + self.spinLast=false + end +end +function Player:act_down10() + if self.cur and self.curY>self.ghoY then + local ghoY0=self.ghoY + self.ghoY=max(self.curY-10,self.ghoY) + self:createDropFX() + self.curY,self.ghoY=self.ghoY,ghoY0 + self:freshBlock('fresh') + self.spinLast=false + end +end +function Player:act_dropLeft() + if self.cur then + self:act_insLeft() + self:act_hardDrop() + end +end +function Player:act_dropRight() + if self.cur then + self:act_insRight() + self:act_hardDrop() + end +end +function Player:act_zangiLeft() + if self.cur then + self:act_insLeft() + self:act_insDown() + self:act_insRight() + self:act_hardDrop() + end +end +function Player:act_zangiRight() + if self.cur then + self:act_insRight() + self:act_insDown() + self:act_insLeft() + self:act_hardDrop() + end +end +---------------------------------------------------- + ---------------------------------------------------- +local playerActions={ + Player.act_moveLeft, --1 + Player.act_moveRight, --2 + Player.act_rotRight, --3 + Player.act_rotLeft, --4 + Player.act_rot180, --5 + Player.act_hardDrop, --6 + Player.act_softDrop, --7 + Player.act_hold, --8 + Player.act_func1, --9 + Player.act_func2, --10 + Player.act_insLeft, --11 + Player.act_insRight, --12 + Player.act_insDown, --13 + Player.act_down1, --14 + Player.act_down4, --15 + Player.act_down10, --16 + Player.act_dropLeft, --17 + Player.act_dropRight, --18 + Player.act_zangiLeft, --19 + Player.act_zangiRight,--20 +}function Player:pressKey(keyID) + if self.keyAvailable[keyID]and self.alive then + if self.waiting>self.gameEnv.hurry then + self.waiting=self.gameEnv.hurry + if self.waiting==0 then self:popNext()end + end + self.keyPressing[keyID]=true + playerActions[keyID](self) + self.stat.key=self.stat.key+1 + if self.id==1 and GAME.recording then + local L=GAME.rep + ins(L,self.frameRun) + ins(L,keyID) + end + end +end +function Player:releaseKey(keyID) + self.keyPressing[keyID]=false + if self.id==1 and GAME.recording then + local L=GAME.rep + ins(L,self.frameRun) + ins(L,32+keyID) + end +end function Player:newTask(code,...) local thread=coroutine.create(code) assert(resume(thread,self,...)) @@ -719,6 +1013,16 @@ function Player:_removeClearedLines() FREEROW.discard(rem(self.visTime,h)) end end +function Player:_updateFalling(val) + self.falling=val + if self.falling==0 then + local L=#self.clearingRow + if self.sound and self.gameEnv.fall>0 and #self.field+L>self.clearingRow[L]then + SFX.play('fall') + end + TABLE.cut(self.clearingRow) + end +end function Player:removeTopClearingFX() for i=#self.clearingRow,1,-1 do if self.clearingRow[i]>#self.field then @@ -728,7 +1032,7 @@ function Player:removeTopClearingFX() end end if self.clearingRow[1]then - self.falling=self.gameEnv.fall + self:_updateFalling(self.gameEnv.fall) return false else return true @@ -1004,7 +1308,7 @@ function Player:hold_swap(ifpre) self.stat.hold=self.stat.hold+1 end function Player:hold(ifpre) - if self.holdTime>0 and(ifpre or self.waiting==-1)then + if self.holdTime>0 and(ifpre or self.waiting==0)then if self.gameEnv.holdMode=='hold'then self:hold_norm(ifpre) elseif self.gameEnv.holdMode=='swap'then @@ -1039,9 +1343,9 @@ function Player:popNext(ifhold)--Pop nextQueue to hand self.spinLast=false self.ctrlCount=0 - self.cur=rem(self.nextQueue,1) - self.newNext() - if self.cur then + if self.nextQueue[1]then + self.cur=rem(self.nextQueue,1) + self.newNext() self.pieceCount=self.pieceCount+1 local pressing=self.keyPressing @@ -1251,8 +1555,6 @@ do piece.centX,piece.centY=self.curX+sc[2],self.curY+sc[1] piece.frame,piece.autoLock=self.frameRun,autoLock - self.waiting=ENV.wait - --Tri-corner spin check if self.spinLast then if C.id<6 then @@ -1637,6 +1939,9 @@ do end end + --Fresh ARE + self.waiting=ENV.wait + --Prevent sudden death if hang>0 if ENV.hang>ENV.wait and self.nextQueue[1]then local B=self.nextQueue[1] @@ -1699,6 +2004,8 @@ do else self:_triggerEvent('hook_drop') end + + if self.waiting==0 then self:popNext()end end function Player:clearFilledLines(start,height) @@ -1708,7 +2015,7 @@ do self:showText(text.clear[min(_cc,21)],0,0,75,'beat',.4) if _cc>6 then self:showText(text.cleared:gsub("$1",_cc),0,55,30,'zoomout',.4)end self:_removeClearedLines() - self.falling=self.gameEnv.fall + self:_updateFalling(self.gameEnv.fall) self.stat.row=self.stat.row+_cc self.stat.dig=self.stat.dig+_gbcc self.stat.score=self.stat.score+clearSCR[_cc] @@ -2014,7 +2321,7 @@ local function update_alive(P) if P.movDir~=0 then local das,arr=ENV.das,ENV.arr local mov=P.moving - if P.waiting==-1 then + if P.waiting==0 then if P.movDir==1 then if P.keyPressing[2]then if arr>0 then @@ -2099,25 +2406,19 @@ local function update_alive(P) end --Falling animation - if P.falling>=0 then - P.falling=P.falling-1 - if P.falling>=0 then + if P.falling>0 then + P:_updateFalling(P.falling-1) + if P.falling>0 then goto THROW_stop - else - local L=#P.clearingRow - if P.sound and ENV.fall>0 and #P.field+L>P.clearingRow[L]then - SFX.play('fall') - end - P.clearingRow={} end end --Update block state if P.control then --Try spawn new block - if P.waiting>=0 then + if P.waiting>0 then P.waiting=P.waiting-1 - if P.waiting<0 then + if P.waiting<=0 then P:popNext() end goto THROW_stop @@ -2238,15 +2539,8 @@ local function update_dead(P) P.swappingAtkMode=min(P.swappingAtkMode+2,30) end - if P.falling>=0 then - P.falling=P.falling-1 - if P.falling<0 then - local L=#P.clearingRow - if P.sound and P.gameEnv.fall>0 and #P.field+L>P.clearingRow[L]then - SFX.play('fall') - end - P.clearingRow={} - end + if P.falling>0 then + P:_updateFalling(P.falling-1) end if P.b2b1>0 then P.b2b1=max(0,P.b2b1*.92-1) @@ -2466,254 +2760,4 @@ function Player:lose(force) end --------------------------<\Event>-------------------------- ----------------------------------------------------- -function Player:act_moveLeft(auto) - if not auto then - self.ctrlCount=self.ctrlCount+1 - end - self.movDir=-1 - if self.control and self.waiting==-1 then - if self.cur and not self:ifoverlap(self.cur.bk,self.curX-1,self.curY)then - self:createMoveFX('left') - self.curX=self.curX-1 - self:freshBlock('move') - if not auto then - self.moving=0 - end - self.spinLast=false - else - self.moving=self.gameEnv.das - end - else - self.moving=0 - end -end -function Player:act_moveRight(auto) - if not auto then - self.ctrlCount=self.ctrlCount+1 - end - self.movDir=1 - if self.control and self.waiting==-1 then - if self.cur and not self:ifoverlap(self.cur.bk,self.curX+1,self.curY)then - self:createMoveFX('right') - self.curX=self.curX+1 - self:freshBlock('move') - if not auto then - self.moving=0 - end - self.spinLast=false - else - self.moving=self.gameEnv.das - end - else - self.moving=0 - end -end -function Player:act_rotRight() - if self.control and self.waiting==-1 and self.cur then - self.ctrlCount=self.ctrlCount+1 - self:spin(1) - self.keyPressing[3]=false - end -end -function Player:act_rotLeft() - if self.control and self.waiting==-1 and self.cur then - self.ctrlCount=self.ctrlCount+1 - self:spin(3) - self.keyPressing[4]=false - end -end -function Player:act_rot180() - if self.control and self.waiting==-1 and self.cur then - self.ctrlCount=self.ctrlCount+2 - self:spin(2) - self.keyPressing[5]=false - end -end -function Player:act_hardDrop() - local ENV=self.gameEnv - if self.control and self.waiting==-1 and self.cur then - if self.lastPiece.autoLock and self.frameRun-self.lastPiece.frameself.ghoY then - self:createDropFX() - self.curY=self.ghoY - self.spinLast=false - if self.sound then - SFX.play('drop',nil,self:getCenterX()*.15) - if SETTING.vib>0 then VIB(SETTING.vib+1)end - end - end - if ENV.shakeFX then - self.swingOffset.vy=.6 - self.swingOffset.va=self.swingOffset.va+self:getCenterX()*6e-4 - end - self.lockDelay=-1 - self:drop() - self.keyPressing[6]=false - end - end -end -function Player:act_softDrop() - local ENV=self.gameEnv - self.downing=1 - if self.control and self.waiting==-1 and self.cur then - if self.curY>self.ghoY then - self.curY=self.curY-1 - self:freshBlock('fresh') - self.spinLast=false - self:checkTouchSound() - elseif ENV.deepDrop then - local CB=self.cur.bk - local y=self.curY-1 - while self:ifoverlap(CB,self.curX,y)and y>0 do - y=y-1 - end - if y>0 then - self.ghoY=y - self:createDropFX() - self.curY=y - self:freshBlock('move') - SFX.play('swipe') - end - end - end -end -function Player:act_hold() - if self.control then - if self.waiting==-1 then - self:hold() - self.keyPressing[8]=false - end - end -end -function Player:act_func1() - self.gameEnv.fkey1(self) -end -function Player:act_func2() - self.gameEnv.fkey2(self) -end - -function Player:act_insLeft(auto) - if not self.cur then - return - end - local x0=self.curX - while not self:ifoverlap(self.cur.bk,self.curX-1,self.curY)do - self:createMoveFX('left') - self.curX=self.curX-1 - self:freshBlock('move',true) - end - if self.curX~=x0 then - self.spinLast=false - self:checkTouchSound() - end - if self.gameEnv.shakeFX then - self.swingOffset.vx=-1.5 - end - if auto then - if self.ctrlCount==0 then - self.ctrlCount=1 - end - else - self.ctrlCount=self.ctrlCount+1 - end -end -function Player:act_insRight(auto) - if not self.cur then - return - end - local x0=self.curX - while not self:ifoverlap(self.cur.bk,self.curX+1,self.curY)do - self:createMoveFX('right') - self.curX=self.curX+1 - self:freshBlock('move',true) - end - if self.curX~=x0 then - self.spinLast=false - self:checkTouchSound() - end - if self.gameEnv.shakeFX then - self.swingOffset.vx=1.5 - end - if auto then - if self.ctrlCount==0 then - self.ctrlCount=1 - end - else - self.ctrlCount=self.ctrlCount+1 - end -end -function Player:act_insDown() - if self.cur and self.curY>self.ghoY then - local ENV=self.gameEnv - self:createDropFX() - if ENV.shakeFX then - self.swingOffset.vy=.5 - end - self.curY=self.ghoY - self.lockDelay=ENV.lock - self.spinLast=false - self:freshBlock('fresh') - self:checkTouchSound() - end -end -function Player:act_down1() - if self.cur and self.curY>self.ghoY then - self:createMoveFX('down') - self.curY=self.curY-1 - self:freshBlock('fresh') - self.spinLast=false - end -end -function Player:act_down4() - if self.cur and self.curY>self.ghoY then - local ghoY0=self.ghoY - self.ghoY=max(self.curY-4,self.ghoY) - self:createDropFX() - self.curY,self.ghoY=self.ghoY,ghoY0 - self:freshBlock('fresh') - self.spinLast=false - end -end -function Player:act_down10() - if self.cur and self.curY>self.ghoY then - local ghoY0=self.ghoY - self.ghoY=max(self.curY-10,self.ghoY) - self:createDropFX() - self.curY,self.ghoY=self.ghoY,ghoY0 - self:freshBlock('fresh') - self.spinLast=false - end -end -function Player:act_dropLeft() - if self.cur then - self:act_insLeft() - self:act_hardDrop() - end -end -function Player:act_dropRight() - if self.cur then - self:act_insRight() - self:act_hardDrop() - end -end -function Player:act_zangiLeft() - if self.cur then - self:act_insLeft() - self:act_insDown() - self:act_insRight() - self:act_hardDrop() - end -end -function Player:act_zangiRight() - if self.cur then - self:act_insRight() - self:act_insDown() - self:act_insLeft() - self:act_hardDrop() - end -end ----------------------------------------------------- return Player diff --git a/parts/scenes/customGame.lua b/parts/scenes/customGame.lua index 2844dbb5..930190a6 100644 --- a/parts/scenes/customGame.lua +++ b/parts/scenes/customGame.lua @@ -17,6 +17,7 @@ local sList={ wait={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, hang={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, + hurry={0,1,2,3,4,5,6,7,8,10,1e99}, eventSet=EVENTSETS, holdMode={'hold','swap'}, } @@ -212,7 +213,8 @@ scene.widgetList={ WIDGET.newSelector{name='lock', x=730,y=410,w=260,color='O',list=sList.lock,disp=CUSval('lock'),code=CUSsto('lock')}, WIDGET.newSelector{name='wait', x=730,y=520,w=260,color='G',list=sList.wait,disp=CUSval('wait'),code=CUSsto('wait')}, WIDGET.newSelector{name='fall', x=730,y=600,w=260,color='G',list=sList.fall,disp=CUSval('fall'),code=CUSsto('fall')}, - WIDGET.newSelector{name='hang', x=730,y=680,w=260,color='G',list=sList.hang,disp=CUSval('hang'),code=CUSsto('hang')}, + WIDGET.newSelector{name='hurry', x=730,y=680,w=260,color='G',list=sList.hurry,disp=CUSval('hurry'),code=CUSsto('hurry')}, + WIDGET.newSelector{name='hang', x=730,y=760,w=260,color='G',list=sList.hang,disp=CUSval('hang'),code=CUSsto('hang')}, --Copy / Paste / Start WIDGET.newButton{name='copy', x=1070,y=300,w=310,h=70,color='lR',font=25,code=pressKey"cC"}, @@ -222,16 +224,16 @@ scene.widgetList={ WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=pressKey"escape"}, --Rule set - WIDGET.newSelector{name='eventSet', x=1050,y=740,w=340,color='H',list=sList.eventSet,disp=CUSval('eventSet'),code=CUSsto('eventSet')}, + WIDGET.newSelector{name='eventSet', x=1050,y=760,w=340,color='H',list=sList.eventSet,disp=CUSval('eventSet'),code=CUSsto('eventSet')}, --Special rules - WIDGET.newSwitch{name='ospin', x=850, y=820 ,lim=210,disp=CUSval('ospin'), code=CUSrev('ospin')}, - WIDGET.newSwitch{name='fineKill', x=850, y=880 ,lim=210,disp=CUSval('fineKill'), code=CUSrev('fineKill')}, - WIDGET.newSwitch{name='b2bKill', x=850, y=940 ,lim=210,disp=CUSval('b2bKill'), code=CUSrev('b2bKill')}, - WIDGET.newSwitch{name='lockout', x=850, y=1000,lim=210,disp=CUSval('lockout'), code=CUSrev('lockout')}, - WIDGET.newSwitch{name='easyFresh', x=1170,y=820 ,lim=250,disp=CUSval('easyFresh'),code=CUSrev('easyFresh')}, - WIDGET.newSwitch{name='deepDrop', x=1170,y=880 ,lim=250,disp=CUSval('deepDrop'), code=CUSrev('deepDrop')}, - WIDGET.newSwitch{name='bone', x=1170,y=940 ,lim=250,disp=CUSval('bone'), code=CUSrev('bone')}, + WIDGET.newSwitch{name='ospin', x=850, y=830, lim=210,disp=CUSval('ospin'), code=CUSrev('ospin')}, + WIDGET.newSwitch{name='fineKill', x=850, y=890, lim=210,disp=CUSval('fineKill'), code=CUSrev('fineKill')}, + WIDGET.newSwitch{name='b2bKill', x=850, y=950, lim=210,disp=CUSval('b2bKill'), code=CUSrev('b2bKill')}, + WIDGET.newSwitch{name='lockout', x=850, y=1010,lim=210,disp=CUSval('lockout'), code=CUSrev('lockout')}, + WIDGET.newSwitch{name='easyFresh', x=1170,y=830, lim=250,disp=CUSval('easyFresh'),code=CUSrev('easyFresh')}, + WIDGET.newSwitch{name='deepDrop', x=1170,y=890, lim=250,disp=CUSval('deepDrop'), code=CUSrev('deepDrop')}, + WIDGET.newSwitch{name='bone', x=1170,y=950, lim=250,disp=CUSval('bone'), code=CUSrev('bone')}, --Next & Hold WIDGET.newSelector{name='holdMode', x=310, y=890, w=300,color='lY',list=sList.holdMode,disp=CUSval('holdMode'),code=CUSsto('holdMode')}, diff --git a/parts/scenes/dict.lua b/parts/scenes/dict.lua index 97deb070..f3e5c7a7 100644 --- a/parts/scenes/dict.lua +++ b/parts/scenes/dict.lua @@ -12,7 +12,7 @@ local dict--Dict list local result--Result Lable local lastTickInput -local waiting--Searching animation timer +local searchWait--Searching animation timer local selected--Selected option local scrollPos--Scroll down length @@ -53,7 +53,7 @@ local function _clearResult() TABLE.cut(result) selected=1 scrollPos=0 - waiting,lastSearch=0,false + searchWait,lastSearch=0,false scene.widgetList.copy.hide=false end local function _search() @@ -82,7 +82,7 @@ function scene.sceneInit() inputBox:clear() result={} - waiting=0 + searchWait=0 selected=1 scrollPos=0 @@ -153,13 +153,13 @@ function scene.update(dt) if #input==0 then _clearResult() else - waiting=.8 + searchWait=.8 end lastTickInput=input end - if waiting>0 then - waiting=waiting-dt - if waiting<=0 then + if searchWait>0 then + searchWait=searchWait-dt + if searchWait<=0 then if #input>0 and input~=lastSearch then _search() end @@ -202,7 +202,7 @@ function scene.draw() gc.rectangle('line',300,180,958,526,5) gc.rectangle('line',20,180,280,526,5) - if waiting>0 then + if searchWait>0 then local r=TIME()*2 local R=int(r)%7+1 gc.setColor(1,1,1,1-abs(r%1*2-1)) diff --git a/parts/scenes/net_newRoom.lua b/parts/scenes/net_newRoom.lua index 8878dc97..39da4ad4 100644 --- a/parts/scenes/net_newRoom.lua +++ b/parts/scenes/net_newRoom.lua @@ -20,6 +20,8 @@ local sList={ lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99}, wait={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, fall={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, + hang={0,1,2,3,4,5,6,7,8,10,15,20,30,60}, + hurry={0,1,2,3,4,5,6,7,8,10,1e99}, eventSet=EVENTSETS, } @@ -87,6 +89,8 @@ scene.widgetList={ WIDGET.newSelector{name='lock', x=730,y=410,w=260,color='O',list=sList.lock,disp=ROOMval('lock'),code=ROOMsto('lock')}, WIDGET.newSelector{name='wait', x=730,y=520,w=260,color='G',list=sList.wait,disp=ROOMval('wait'),code=ROOMsto('wait')}, WIDGET.newSelector{name='fall', x=730,y=600,w=260,color='G',list=sList.fall,disp=ROOMval('fall'),code=ROOMsto('fall')}, + WIDGET.newSelector{name='hurry', x=730,y=680,w=260,color='G',list=sList.hurry,disp=ROOMval('hurry'),code=ROOMval('hurry')}, + WIDGET.newSelector{name='hang', x=730,y=760,w=260,color='G',list=sList.hang,disp=ROOMval('hang'),code=ROOMval('hang')}, --Capacity & Create & Back WIDGET.newSelector{name='capacity', x=1070,y=330,w=310,color='lY',list={2,3,4,5,7,10,17,31,49,99},disp=ROOMval('capacity'),code=ROOMsto('capacity')}, @@ -94,16 +98,16 @@ scene.widgetList={ WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene}, --Special rules - WIDGET.newSwitch{name='ospin', x=850, y=760 ,lim=210,disp=ROOMval('ospin'), code=ROOMrev('ospin')}, - WIDGET.newSwitch{name='fineKill', x=850, y=850 ,lim=210,disp=ROOMval('fineKill'), code=ROOMrev('fineKill')}, - WIDGET.newSwitch{name='b2bKill', x=850, y=940 ,lim=210,disp=ROOMval('b2bKill'), code=ROOMrev('b2bKill')}, + WIDGET.newSwitch{name='ospin', x=850, y=850, lim=210,disp=ROOMval('ospin'), code=ROOMrev('ospin')}, + WIDGET.newSwitch{name='fineKill', x=850, y=910, lim=210,disp=ROOMval('fineKill'), code=ROOMrev('fineKill')}, + WIDGET.newSwitch{name='b2bKill', x=850, y=970, lim=210,disp=ROOMval('b2bKill'), code=ROOMrev('b2bKill')}, WIDGET.newSwitch{name='lockout', x=850, y=1030,lim=210,disp=ROOMval('lockout'), code=ROOMval('lockout')}, - WIDGET.newSwitch{name='easyFresh', x=1170,y=760 ,lim=250,disp=ROOMval('easyFresh'),code=ROOMrev('easyFresh')}, - WIDGET.newSwitch{name='deepDrop', x=1170,y=850 ,lim=250,disp=ROOMval('deepDrop'), code=ROOMrev('deepDrop')}, - WIDGET.newSwitch{name='bone', x=1170,y=940 ,lim=250,disp=ROOMval('bone'), code=ROOMrev('bone')}, + WIDGET.newSwitch{name='easyFresh', x=1170,y=850, lim=250,disp=ROOMval('easyFresh'),code=ROOMrev('easyFresh')}, + WIDGET.newSwitch{name='deepDrop', x=1170,y=910, lim=250,disp=ROOMval('deepDrop'), code=ROOMrev('deepDrop')}, + WIDGET.newSwitch{name='bone', x=1170,y=970, lim=250,disp=ROOMval('bone'), code=ROOMrev('bone')}, --Rule set - WIDGET.newSelector{name='eventSet', x=310,y=880,w=360,color='H',list=sList.eventSet,disp=ROOMval('eventSet'),code=ROOMsto('eventSet')}, + WIDGET.newSelector{name='eventSet', x=1050,y=760,w=340,color='H',list=sList.eventSet,disp=ROOMval('eventSet'),code=ROOMval('eventSet')}, --Next & Hold WIDGET.newSlider{name='nextCount', x=140, y=960, lim=130,w=200,unit=6,disp=ROOMval('nextCount'),code=ROOMsto('nextCount')}, diff --git a/parts/scenes/setting_game.lua b/parts/scenes/setting_game.lua index e481c336..690f0b7f 100644 --- a/parts/scenes/setting_game.lua +++ b/parts/scenes/setting_game.lua @@ -31,24 +31,24 @@ function scene.draw() end scene.widgetList={ - WIDGET.newText{name='title', x=640,y=15,font=80}, + WIDGET.newText{name='title', x=640,y=15,font=80}, - WIDGET.newButton{name='graphic', x=200, y=80, w=240,h=80,color='lC',font=35,code=swapScene('setting_video','swipeR')}, - WIDGET.newButton{name='sound', x=1080, y=80, w=240,h=80,color='lC',font=35,code=swapScene('setting_sound','swipeL')}, + WIDGET.newButton{name='graphic', x=200, y=80, w=240,h=80,color='lC',font=35,code=swapScene('setting_video','swipeR')}, + WIDGET.newButton{name='sound', x=1080, y=80, w=240,h=80,color='lC',font=35,code=swapScene('setting_sound','swipeL')}, - WIDGET.newButton{name='layout', x=250, y=540, w=200,h=70,font=35,code=goScene'setting_skin'}, + WIDGET.newButton{name='layout', x=250, y=540, w=200,h=70,font=35,code=goScene'setting_skin'}, - WIDGET.newButton{name='ctrl', x=290, y=220, w=320,h=80,font=35,code=goScene'setting_control'}, - WIDGET.newButton{name='key', x=640, y=220, w=320,h=80,color=MOBILE and'dH',font=35,code=goScene'setting_key'}, - WIDGET.newButton{name='touch', x=990, y=220, w=320,h=80,color=not MOBILE and'dH',font=35,code=goScene'setting_touch'}, - WIDGET.newSlider{name='reTime', x=330, y=320, w=300,lim=180,unit=10,disp=SETval('reTime'), code=SETsto('reTime'),show=function(S)return(.5+S.disp()*.25).."s"end}, - WIDGET.newSelector{name='RS', x=300, y=420, w=300,color='S', disp=SETval('RS'), code=SETsto('RS'),list={'TRS','SRS','SRS_plus','SRS_X','BiRS','ARS_Z','ASC','ASC_plus','C2','C2_sym','Classic','Classic_plus','None','None_plus'}}, - WIDGET.newSelector{name='menuPos', x=980, y=320, w=300,color='O', disp=SETval('menuPos'), code=SETsto('menuPos'),list={'left','middle','right'}}, - WIDGET.newSwitch{name='sysCursor' ,x=1060, y=390, lim=580, disp=SETval('sysCursor'),code=function()SETTING.sysCursor=not SETTING.sysCursor applyCursor()end}, - WIDGET.newSwitch{name='autoPause', x=1060, y=450, lim=580, disp=SETval('autoPause'),code=SETrev('autoPause')}, - WIDGET.newSwitch{name='autoSave', x=1060, y=500, lim=580, disp=SETval('autoSave'), code=SETrev('autoSave')}, - WIDGET.newSwitch{name='autoLogin', x=960, y=580, lim=480, disp=SETval('autoLogin'),code=SETrev('autoLogin')}, - WIDGET.newSwitch{name='simpMode', x=960, y=640, lim=480, disp=SETval('simpMode'), + WIDGET.newButton{name='ctrl', x=290, y=220, w=320,h=80,font=35,code=goScene'setting_control'}, + WIDGET.newButton{name='key', x=640, y=220, w=320,h=80,color=MOBILE and'dH',font=35,code=goScene'setting_key'}, + WIDGET.newButton{name='touch', x=990, y=220, w=320,h=80,color=not MOBILE and'dH',font=35,code=goScene'setting_touch'}, + WIDGET.newSlider{name='reTime', x=330, y=320, w=300,lim=180,unit=10,disp=SETval('reTime'), code=SETsto('reTime'),show=function(S)return(.5+S.disp()*.25).."s"end}, + WIDGET.newSelector{name='RS', x=300, y=420, w=300,color='S', disp=SETval('RS'), code=SETsto('RS'),list={'TRS','SRS','SRS_plus','SRS_X','BiRS','ARS_Z','ASC','ASC_plus','C2','C2_sym','Classic','Classic_plus','None','None_plus'}}, + WIDGET.newSelector{name='menuPos',x=980, y=320, w=300,color='O', disp=SETval('menuPos'), code=SETsto('menuPos'),list={'left','middle','right'}}, + WIDGET.newSwitch{name='sysCursor',x=1060, y=390, lim=580, disp=SETval('sysCursor'),code=function()SETTING.sysCursor=not SETTING.sysCursor applyCursor()end}, + WIDGET.newSwitch{name='autoPause',x=1060, y=450, lim=580, disp=SETval('autoPause'),code=SETrev('autoPause')}, + WIDGET.newSwitch{name='autoSave', x=1060, y=500, lim=580, disp=SETval('autoSave'), code=SETrev('autoSave')}, + WIDGET.newSwitch{name='autoLogin',x=960, y=580, lim=480, disp=SETval('autoLogin'),code=SETrev('autoLogin')}, + WIDGET.newSwitch{name='simpMode', x=960, y=640, lim=480, disp=SETval('simpMode'), code=function() SETTING.simpMode=not SETTING.simpMode for i=1,#SCN.stack,2 do @@ -58,7 +58,7 @@ scene.widgetList={ end end end}, - WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene}, + WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene}, } return scene