【警告:可能有bug,需要测试】
较大规模整理玩家相关代码 较大规模整理玩家相关代码,重构出块延迟和消行延迟逻辑,现在0是真的无延迟,不再有1帧等待了 添加出块延迟打断(即ARE打断)(不包括消行延迟,默认为打断至无穷大,相当于无此功能) 自定义游戏和自定义房间ui跟进 close #471
This commit is contained in:
@@ -12,7 +12,7 @@ local baseBot={
|
|||||||
function baseBot.update(bot)
|
function baseBot.update(bot)
|
||||||
local P=bot.P
|
local P=bot.P
|
||||||
local keys=bot.keys
|
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
|
bot.delay=bot.delay-1
|
||||||
if not keys[1]then
|
if not keys[1]then
|
||||||
if bot.runningThread then
|
if bot.runningThread then
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ return{
|
|||||||
lock=1e99,
|
lock=1e99,
|
||||||
wait=0,
|
wait=0,
|
||||||
fall=0,
|
fall=0,
|
||||||
|
hang=5,
|
||||||
|
hurry=1e99,
|
||||||
|
|
||||||
--Control
|
--Control
|
||||||
nextCount=6,
|
nextCount=6,
|
||||||
@@ -13,7 +15,6 @@ return{
|
|||||||
holdCount=1,
|
holdCount=1,
|
||||||
infHold=true,
|
infHold=true,
|
||||||
phyHold=false,
|
phyHold=false,
|
||||||
hang=5,
|
|
||||||
|
|
||||||
--Visual
|
--Visual
|
||||||
bone=false,
|
bone=false,
|
||||||
|
|||||||
@@ -536,13 +536,12 @@ do--Game data tables
|
|||||||
ROOMENV={
|
ROOMENV={
|
||||||
--Room config
|
--Room config
|
||||||
capacity=10,
|
capacity=10,
|
||||||
|
FTLock=true,
|
||||||
|
|
||||||
--Basic
|
--Basic
|
||||||
drop=30,
|
drop=30,lock=60,
|
||||||
lock=60,
|
wait=0,fall=0,
|
||||||
wait=0,
|
hang=5,hurry=1e99,
|
||||||
fall=0,
|
|
||||||
FTLock=true,
|
|
||||||
|
|
||||||
--Control
|
--Control
|
||||||
nextCount=6,
|
nextCount=6,
|
||||||
|
|||||||
@@ -296,6 +296,8 @@ return{
|
|||||||
lock="Lock Delay",
|
lock="Lock Delay",
|
||||||
wait="Entry Delay",
|
wait="Entry Delay",
|
||||||
fall="Line Delay",
|
fall="Line Delay",
|
||||||
|
hang="Death Delay",
|
||||||
|
hurry="ARE Interruption",
|
||||||
|
|
||||||
capacity="Capacity",
|
capacity="Capacity",
|
||||||
create="Create",
|
create="Create",
|
||||||
@@ -480,6 +482,7 @@ return{
|
|||||||
wait="Entry Delay",
|
wait="Entry Delay",
|
||||||
fall="Line Delay",
|
fall="Line Delay",
|
||||||
hang="Death Delay",
|
hang="Death Delay",
|
||||||
|
hurry="ARE Interruption",
|
||||||
|
|
||||||
bg="Background",
|
bg="Background",
|
||||||
bgm="Music",
|
bgm="Music",
|
||||||
|
|||||||
@@ -262,6 +262,8 @@ return{
|
|||||||
lock="Retraso de Bloqueo",
|
lock="Retraso de Bloqueo",
|
||||||
wait="Retraso de Spawneo",
|
wait="Retraso de Spawneo",
|
||||||
fall="Retraso de Línea",
|
fall="Retraso de Línea",
|
||||||
|
-- hang="Death Delay",
|
||||||
|
-- hurry="ARE Interruption",
|
||||||
|
|
||||||
capacity="Capacidad",
|
capacity="Capacidad",
|
||||||
create="Crear",
|
create="Crear",
|
||||||
@@ -445,6 +447,7 @@ return{
|
|||||||
wait="Retraso de Spawneo",
|
wait="Retraso de Spawneo",
|
||||||
fall="Retraso de Línea",
|
fall="Retraso de Línea",
|
||||||
-- hang="Death Delay",
|
-- hang="Death Delay",
|
||||||
|
-- hurry="ARE Interruption",
|
||||||
|
|
||||||
bg="Fondo",
|
bg="Fondo",
|
||||||
bgm="Música",
|
bgm="Música",
|
||||||
|
|||||||
@@ -258,6 +258,8 @@ return{
|
|||||||
lock="Délai de verrouillage",
|
lock="Délai de verrouillage",
|
||||||
wait="Délai d'apparition",
|
wait="Délai d'apparition",
|
||||||
fall="Délai de ligne",
|
fall="Délai de ligne",
|
||||||
|
-- hang="Death Delay",
|
||||||
|
-- hurry="ARE Interruption",
|
||||||
|
|
||||||
-- capacity="Capacity",
|
-- capacity="Capacity",
|
||||||
-- create="Create",
|
-- create="Create",
|
||||||
@@ -446,6 +448,7 @@ return{
|
|||||||
wait="Délai d'apparition",
|
wait="Délai d'apparition",
|
||||||
fall="Délai de ligne",
|
fall="Délai de ligne",
|
||||||
-- hang="Death Delay",
|
-- hang="Death Delay",
|
||||||
|
-- hurry="ARE Interruption",
|
||||||
|
|
||||||
bg="Arrière-plan",
|
bg="Arrière-plan",
|
||||||
bgm="Musique",
|
bgm="Musique",
|
||||||
|
|||||||
@@ -284,6 +284,8 @@ return{
|
|||||||
lock="Delay Trava",
|
lock="Delay Trava",
|
||||||
wait="Delay Entrada",
|
wait="Delay Entrada",
|
||||||
fall="Delay Linha",
|
fall="Delay Linha",
|
||||||
|
-- hang="Death Delay",
|
||||||
|
-- hurry="ARE Interruption",
|
||||||
|
|
||||||
-- capacity="Capacity",
|
-- capacity="Capacity",
|
||||||
-- create="Create",
|
-- create="Create",
|
||||||
@@ -468,6 +470,7 @@ return{
|
|||||||
wait="Delay Entrada",
|
wait="Delay Entrada",
|
||||||
fall="Delay Linha",
|
fall="Delay Linha",
|
||||||
-- hang="Death Delay",
|
-- hang="Death Delay",
|
||||||
|
-- hurry="ARE Interruption",
|
||||||
|
|
||||||
bg="Fundo",
|
bg="Fundo",
|
||||||
bgm="Música",
|
bgm="Música",
|
||||||
|
|||||||
@@ -190,6 +190,8 @@ return{
|
|||||||
lock="↓_",
|
lock="↓_",
|
||||||
wait="→=",
|
wait="→=",
|
||||||
fall="↓=",
|
fall="↓=",
|
||||||
|
hang=":(=",
|
||||||
|
hurry="_x",
|
||||||
|
|
||||||
capacity="<0/?>",
|
capacity="<0/?>",
|
||||||
create=">",
|
create=">",
|
||||||
@@ -373,6 +375,7 @@ return{
|
|||||||
wait="→=",
|
wait="→=",
|
||||||
fall="↓=",
|
fall="↓=",
|
||||||
hang=":(=",
|
hang=":(=",
|
||||||
|
hurry="_x",
|
||||||
|
|
||||||
bg="{~}",
|
bg="{~}",
|
||||||
bgm="(~)",
|
bgm="(~)",
|
||||||
|
|||||||
@@ -296,6 +296,8 @@ return{
|
|||||||
lock="锁定延迟",
|
lock="锁定延迟",
|
||||||
wait="出块等待",
|
wait="出块等待",
|
||||||
fall="消行延迟",
|
fall="消行延迟",
|
||||||
|
hang="窒息延迟",
|
||||||
|
hurry="ARE打断",
|
||||||
|
|
||||||
capacity="房间容量",
|
capacity="房间容量",
|
||||||
create="创建",
|
create="创建",
|
||||||
@@ -479,6 +481,7 @@ return{
|
|||||||
wait="出块等待",
|
wait="出块等待",
|
||||||
fall="消行延迟",
|
fall="消行延迟",
|
||||||
hang="窒息延迟",
|
hang="窒息延迟",
|
||||||
|
hurry="ARE打断",
|
||||||
|
|
||||||
bg="背景",
|
bg="背景",
|
||||||
bgm="音乐",
|
bgm="音乐",
|
||||||
|
|||||||
@@ -294,6 +294,8 @@ return{
|
|||||||
lock="锁定延迟",
|
lock="锁定延迟",
|
||||||
wait="进入延迟",
|
wait="进入延迟",
|
||||||
fall="线路延迟",
|
fall="线路延迟",
|
||||||
|
hang="毁灭延迟",
|
||||||
|
hurry="是打扰吗",
|
||||||
|
|
||||||
capacity="容量",
|
capacity="容量",
|
||||||
create="创造",
|
create="创造",
|
||||||
@@ -477,6 +479,7 @@ return{
|
|||||||
wait="进入延迟",
|
wait="进入延迟",
|
||||||
fall="线路延迟",
|
fall="线路延迟",
|
||||||
hang="毁灭延迟",
|
hang="毁灭延迟",
|
||||||
|
hurry="是打扰吗",
|
||||||
|
|
||||||
bg="背景",
|
bg="背景",
|
||||||
bgm="音乐",
|
bgm="音乐",
|
||||||
@@ -753,7 +756,7 @@ return{
|
|||||||
['infinite_dig']= {"无限:挖掘", "", "挖,挖,挖"},
|
['infinite_dig']= {"无限:挖掘", "", "挖,挖,挖"},
|
||||||
['marathon_inf']= {"马拉松", "无尽", "无尽马拉松"},
|
['marathon_inf']= {"马拉松", "无尽", "无尽马拉松"},
|
||||||
|
|
||||||
['custom_clear']= {"习俗", "正常"} ,
|
['custom_clear']= {"习俗", "正常"},
|
||||||
['custom_puzzle']= {"习俗", "令人费解的"},
|
['custom_puzzle']= {"习俗", "令人费解的"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -295,6 +295,8 @@ return{
|
|||||||
lock="鎖定延遲",
|
lock="鎖定延遲",
|
||||||
wait="方塊生成等待",
|
wait="方塊生成等待",
|
||||||
fall="行清除延遲",
|
fall="行清除延遲",
|
||||||
|
hang="死亡延遲",
|
||||||
|
hurry="ARE打斷",
|
||||||
|
|
||||||
capacity="房間容量",
|
capacity="房間容量",
|
||||||
create="創建",
|
create="創建",
|
||||||
@@ -478,6 +480,7 @@ return{
|
|||||||
wait="方塊生成等待",
|
wait="方塊生成等待",
|
||||||
fall="行清除延遲",
|
fall="行清除延遲",
|
||||||
hang="死亡延遲",
|
hang="死亡延遲",
|
||||||
|
hurry="ARE打斷",
|
||||||
|
|
||||||
bg="背景",
|
bg="背景",
|
||||||
bgm="音樂",
|
bgm="音樂",
|
||||||
|
|||||||
@@ -170,7 +170,7 @@ local function _drawField(P,showInvis)
|
|||||||
local V,F=P.visTime,P.field
|
local V,F=P.visTime,P.field
|
||||||
local start=int((P.fieldBeneath+P.fieldUp)/30+1)
|
local start=int((P.fieldBeneath+P.fieldUp)/30+1)
|
||||||
local texture=P.skinLib
|
local texture=P.skinLib
|
||||||
if P.falling==-1 then--Blocks only
|
if P.falling==0 then--Blocks only
|
||||||
if ENV.upEdge then
|
if ENV.upEdge then
|
||||||
gc_setShader(shader_lighter)
|
gc_setShader(shader_lighter)
|
||||||
gc_translate(0,-4)
|
gc_translate(0,-4)
|
||||||
@@ -782,7 +782,7 @@ function draw.norm(P,repMode)
|
|||||||
_drawFXs(P)
|
_drawFXs(P)
|
||||||
|
|
||||||
--Draw current block
|
--Draw current block
|
||||||
if P.cur and P.waiting==-1 then
|
if P.cur and P.waiting==0 then
|
||||||
local C=P.cur
|
local C=P.cur
|
||||||
local curColor=C.color
|
local curColor=C.color
|
||||||
|
|
||||||
@@ -997,7 +997,7 @@ function draw.demo(P)
|
|||||||
gc_translate(0,600)
|
gc_translate(0,600)
|
||||||
_drawField(P)
|
_drawField(P)
|
||||||
_drawFXs(P)
|
_drawFXs(P)
|
||||||
if P.cur and P.waiting==-1 then
|
if P.cur and P.waiting==0 then
|
||||||
if ENV.ghost then
|
if ENV.ghost then
|
||||||
drawGhost[ENV.ghostType](P.cur.bk,P.curX,P.ghoY,ENV.ghost,P.skinLib,curColor)
|
drawGhost[ENV.ghostType](P.cur.bk,P.curX,P.ghoY,ENV.ghost,P.skinLib,curColor)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ return{
|
|||||||
dascut=0,dropcut=0,
|
dascut=0,dropcut=0,
|
||||||
sddas=2,sdarr=2,
|
sddas=2,sdarr=2,
|
||||||
ihs=true,irs=true,ims=true,
|
ihs=true,irs=true,ims=true,
|
||||||
hang=5,FTLock=true,
|
|
||||||
|
|
||||||
ghostType='gray',
|
ghostType='gray',
|
||||||
block=true,ghost=.3,center=1,
|
block=true,ghost=.3,center=1,
|
||||||
@@ -30,6 +29,7 @@ return{
|
|||||||
|
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
wait=0,fall=0,
|
wait=0,fall=0,
|
||||||
|
hang=5,hurry=1e99,
|
||||||
bone=false,
|
bone=false,
|
||||||
lockout=false,
|
lockout=false,
|
||||||
fieldH=20,heightLimit=1e99,
|
fieldH=20,heightLimit=1e99,
|
||||||
@@ -69,4 +69,5 @@ return{
|
|||||||
|
|
||||||
bg='none',bgm='race',
|
bg='none',bgm='race',
|
||||||
allowMod=true,
|
allowMod=true,
|
||||||
|
FTLock=true,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,54 +36,6 @@ local function _getNewStatTable()
|
|||||||
end
|
end
|
||||||
return T
|
return T
|
||||||
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
|
|
||||||
}
|
|
||||||
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 function _newEmptyPlayer(id,mini)
|
||||||
local P={id=id}
|
local P={id=id}
|
||||||
PLAYERS[id]=P
|
PLAYERS[id]=P
|
||||||
@@ -92,15 +44,6 @@ local function _newEmptyPlayer(id,mini)
|
|||||||
--Inherit functions of Player class
|
--Inherit functions of Player class
|
||||||
for k,v in next,Player do P[k]=v end
|
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
|
--Field position
|
||||||
P.swingOffset={--Shake FX
|
P.swingOffset={--Shake FX
|
||||||
x=0,y=0,
|
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.movDir,P.moving,P.downing=0,0,0--Last move key,DAS charging,downDAS charging
|
||||||
P.dropDelay,P.lockDelay=0,0
|
P.dropDelay,P.lockDelay=0,0
|
||||||
P.waiting,P.falling=-1,-1
|
P.waiting,P.falling=0,0
|
||||||
P.freshTime=0
|
P.freshTime=0
|
||||||
P.spinLast=false
|
P.spinLast=false
|
||||||
P.ctrlCount=0--Key press time, for finesse check
|
P.ctrlCount=0--Key press time, for finesse check
|
||||||
|
|||||||
@@ -200,7 +200,301 @@ function Player:createBeam(R,send)
|
|||||||
end
|
end
|
||||||
--------------------------</FX>--------------------------
|
--------------------------</FX>--------------------------
|
||||||
|
|
||||||
|
--------------------------<Action>--------------------------
|
||||||
|
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.frame<ENV.dropcut then
|
||||||
|
SFX.play('drop_cancel',.3)
|
||||||
|
else
|
||||||
|
if self.curY>self.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
|
||||||
|
--------------------------</Action>--------------------------
|
||||||
|
|
||||||
--------------------------<Method>--------------------------
|
--------------------------<Method>--------------------------
|
||||||
|
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,...)
|
function Player:newTask(code,...)
|
||||||
local thread=coroutine.create(code)
|
local thread=coroutine.create(code)
|
||||||
assert(resume(thread,self,...))
|
assert(resume(thread,self,...))
|
||||||
@@ -719,6 +1013,16 @@ function Player:_removeClearedLines()
|
|||||||
FREEROW.discard(rem(self.visTime,h))
|
FREEROW.discard(rem(self.visTime,h))
|
||||||
end
|
end
|
||||||
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()
|
function Player:removeTopClearingFX()
|
||||||
for i=#self.clearingRow,1,-1 do
|
for i=#self.clearingRow,1,-1 do
|
||||||
if self.clearingRow[i]>#self.field then
|
if self.clearingRow[i]>#self.field then
|
||||||
@@ -728,7 +1032,7 @@ function Player:removeTopClearingFX()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if self.clearingRow[1]then
|
if self.clearingRow[1]then
|
||||||
self.falling=self.gameEnv.fall
|
self:_updateFalling(self.gameEnv.fall)
|
||||||
return false
|
return false
|
||||||
else
|
else
|
||||||
return true
|
return true
|
||||||
@@ -1004,7 +1308,7 @@ function Player:hold_swap(ifpre)
|
|||||||
self.stat.hold=self.stat.hold+1
|
self.stat.hold=self.stat.hold+1
|
||||||
end
|
end
|
||||||
function Player:hold(ifpre)
|
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
|
if self.gameEnv.holdMode=='hold'then
|
||||||
self:hold_norm(ifpre)
|
self:hold_norm(ifpre)
|
||||||
elseif self.gameEnv.holdMode=='swap'then
|
elseif self.gameEnv.holdMode=='swap'then
|
||||||
@@ -1039,9 +1343,9 @@ function Player:popNext(ifhold)--Pop nextQueue to hand
|
|||||||
self.spinLast=false
|
self.spinLast=false
|
||||||
self.ctrlCount=0
|
self.ctrlCount=0
|
||||||
|
|
||||||
self.cur=rem(self.nextQueue,1)
|
if self.nextQueue[1]then
|
||||||
self.newNext()
|
self.cur=rem(self.nextQueue,1)
|
||||||
if self.cur then
|
self.newNext()
|
||||||
self.pieceCount=self.pieceCount+1
|
self.pieceCount=self.pieceCount+1
|
||||||
|
|
||||||
local pressing=self.keyPressing
|
local pressing=self.keyPressing
|
||||||
@@ -1251,8 +1555,6 @@ do
|
|||||||
piece.centX,piece.centY=self.curX+sc[2],self.curY+sc[1]
|
piece.centX,piece.centY=self.curX+sc[2],self.curY+sc[1]
|
||||||
piece.frame,piece.autoLock=self.frameRun,autoLock
|
piece.frame,piece.autoLock=self.frameRun,autoLock
|
||||||
|
|
||||||
self.waiting=ENV.wait
|
|
||||||
|
|
||||||
--Tri-corner spin check
|
--Tri-corner spin check
|
||||||
if self.spinLast then
|
if self.spinLast then
|
||||||
if C.id<6 then
|
if C.id<6 then
|
||||||
@@ -1637,6 +1939,9 @@ do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Fresh ARE
|
||||||
|
self.waiting=ENV.wait
|
||||||
|
|
||||||
--Prevent sudden death if hang>0
|
--Prevent sudden death if hang>0
|
||||||
if ENV.hang>ENV.wait and self.nextQueue[1]then
|
if ENV.hang>ENV.wait and self.nextQueue[1]then
|
||||||
local B=self.nextQueue[1]
|
local B=self.nextQueue[1]
|
||||||
@@ -1699,6 +2004,8 @@ do
|
|||||||
else
|
else
|
||||||
self:_triggerEvent('hook_drop')
|
self:_triggerEvent('hook_drop')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if self.waiting==0 then self:popNext()end
|
||||||
end
|
end
|
||||||
|
|
||||||
function Player:clearFilledLines(start,height)
|
function Player:clearFilledLines(start,height)
|
||||||
@@ -1708,7 +2015,7 @@ do
|
|||||||
self:showText(text.clear[min(_cc,21)],0,0,75,'beat',.4)
|
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
|
if _cc>6 then self:showText(text.cleared:gsub("$1",_cc),0,55,30,'zoomout',.4)end
|
||||||
self:_removeClearedLines()
|
self:_removeClearedLines()
|
||||||
self.falling=self.gameEnv.fall
|
self:_updateFalling(self.gameEnv.fall)
|
||||||
self.stat.row=self.stat.row+_cc
|
self.stat.row=self.stat.row+_cc
|
||||||
self.stat.dig=self.stat.dig+_gbcc
|
self.stat.dig=self.stat.dig+_gbcc
|
||||||
self.stat.score=self.stat.score+clearSCR[_cc]
|
self.stat.score=self.stat.score+clearSCR[_cc]
|
||||||
@@ -2014,7 +2321,7 @@ local function update_alive(P)
|
|||||||
if P.movDir~=0 then
|
if P.movDir~=0 then
|
||||||
local das,arr=ENV.das,ENV.arr
|
local das,arr=ENV.das,ENV.arr
|
||||||
local mov=P.moving
|
local mov=P.moving
|
||||||
if P.waiting==-1 then
|
if P.waiting==0 then
|
||||||
if P.movDir==1 then
|
if P.movDir==1 then
|
||||||
if P.keyPressing[2]then
|
if P.keyPressing[2]then
|
||||||
if arr>0 then
|
if arr>0 then
|
||||||
@@ -2099,25 +2406,19 @@ local function update_alive(P)
|
|||||||
end
|
end
|
||||||
|
|
||||||
--Falling animation
|
--Falling animation
|
||||||
if P.falling>=0 then
|
if P.falling>0 then
|
||||||
P.falling=P.falling-1
|
P:_updateFalling(P.falling-1)
|
||||||
if P.falling>=0 then
|
if P.falling>0 then
|
||||||
goto THROW_stop
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
--Update block state
|
--Update block state
|
||||||
if P.control then
|
if P.control then
|
||||||
--Try spawn new block
|
--Try spawn new block
|
||||||
if P.waiting>=0 then
|
if P.waiting>0 then
|
||||||
P.waiting=P.waiting-1
|
P.waiting=P.waiting-1
|
||||||
if P.waiting<0 then
|
if P.waiting<=0 then
|
||||||
P:popNext()
|
P:popNext()
|
||||||
end
|
end
|
||||||
goto THROW_stop
|
goto THROW_stop
|
||||||
@@ -2238,15 +2539,8 @@ local function update_dead(P)
|
|||||||
P.swappingAtkMode=min(P.swappingAtkMode+2,30)
|
P.swappingAtkMode=min(P.swappingAtkMode+2,30)
|
||||||
end
|
end
|
||||||
|
|
||||||
if P.falling>=0 then
|
if P.falling>0 then
|
||||||
P.falling=P.falling-1
|
P:_updateFalling(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
|
|
||||||
end
|
end
|
||||||
if P.b2b1>0 then
|
if P.b2b1>0 then
|
||||||
P.b2b1=max(0,P.b2b1*.92-1)
|
P.b2b1=max(0,P.b2b1*.92-1)
|
||||||
@@ -2466,254 +2760,4 @@ function Player:lose(force)
|
|||||||
end
|
end
|
||||||
--------------------------<\Event>--------------------------
|
--------------------------<\Event>--------------------------
|
||||||
|
|
||||||
--------------------------<Action>--------------------------
|
|
||||||
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.frame<ENV.dropcut then
|
|
||||||
SFX.play('drop_cancel',.3)
|
|
||||||
else
|
|
||||||
if self.curY>self.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
|
|
||||||
--------------------------</Action>--------------------------
|
|
||||||
return Player
|
return Player
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ local sList={
|
|||||||
wait={0,1,2,3,4,5,6,7,8,10,15,20,30,60},
|
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},
|
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},
|
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,
|
eventSet=EVENTSETS,
|
||||||
holdMode={'hold','swap'},
|
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='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='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='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
|
--Copy / Paste / Start
|
||||||
WIDGET.newButton{name='copy', x=1070,y=300,w=310,h=70,color='lR',font=25,code=pressKey"cC"},
|
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"},
|
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=pressKey"escape"},
|
||||||
|
|
||||||
--Rule set
|
--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
|
--Special rules
|
||||||
WIDGET.newSwitch{name='ospin', x=850, y=820 ,lim=210,disp=CUSval('ospin'), code=CUSrev('ospin')},
|
WIDGET.newSwitch{name='ospin', x=850, y=830, 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='fineKill', x=850, y=890, 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='b2bKill', x=850, y=950, 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='lockout', x=850, y=1010,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='easyFresh', x=1170,y=830, 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='deepDrop', x=1170,y=890, 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='bone', x=1170,y=950, lim=250,disp=CUSval('bone'), code=CUSrev('bone')},
|
||||||
|
|
||||||
--Next & Hold
|
--Next & Hold
|
||||||
WIDGET.newSelector{name='holdMode', x=310, y=890, w=300,color='lY',list=sList.holdMode,disp=CUSval('holdMode'),code=CUSsto('holdMode')},
|
WIDGET.newSelector{name='holdMode', x=310, y=890, w=300,color='lY',list=sList.holdMode,disp=CUSval('holdMode'),code=CUSsto('holdMode')},
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ local dict--Dict list
|
|||||||
local result--Result Lable
|
local result--Result Lable
|
||||||
|
|
||||||
local lastTickInput
|
local lastTickInput
|
||||||
local waiting--Searching animation timer
|
local searchWait--Searching animation timer
|
||||||
local selected--Selected option
|
local selected--Selected option
|
||||||
local scrollPos--Scroll down length
|
local scrollPos--Scroll down length
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ local function _clearResult()
|
|||||||
TABLE.cut(result)
|
TABLE.cut(result)
|
||||||
selected=1
|
selected=1
|
||||||
scrollPos=0
|
scrollPos=0
|
||||||
waiting,lastSearch=0,false
|
searchWait,lastSearch=0,false
|
||||||
scene.widgetList.copy.hide=false
|
scene.widgetList.copy.hide=false
|
||||||
end
|
end
|
||||||
local function _search()
|
local function _search()
|
||||||
@@ -82,7 +82,7 @@ function scene.sceneInit()
|
|||||||
inputBox:clear()
|
inputBox:clear()
|
||||||
result={}
|
result={}
|
||||||
|
|
||||||
waiting=0
|
searchWait=0
|
||||||
selected=1
|
selected=1
|
||||||
scrollPos=0
|
scrollPos=0
|
||||||
|
|
||||||
@@ -153,13 +153,13 @@ function scene.update(dt)
|
|||||||
if #input==0 then
|
if #input==0 then
|
||||||
_clearResult()
|
_clearResult()
|
||||||
else
|
else
|
||||||
waiting=.8
|
searchWait=.8
|
||||||
end
|
end
|
||||||
lastTickInput=input
|
lastTickInput=input
|
||||||
end
|
end
|
||||||
if waiting>0 then
|
if searchWait>0 then
|
||||||
waiting=waiting-dt
|
searchWait=searchWait-dt
|
||||||
if waiting<=0 then
|
if searchWait<=0 then
|
||||||
if #input>0 and input~=lastSearch then
|
if #input>0 and input~=lastSearch then
|
||||||
_search()
|
_search()
|
||||||
end
|
end
|
||||||
@@ -202,7 +202,7 @@ function scene.draw()
|
|||||||
gc.rectangle('line',300,180,958,526,5)
|
gc.rectangle('line',300,180,958,526,5)
|
||||||
gc.rectangle('line',20,180,280,526,5)
|
gc.rectangle('line',20,180,280,526,5)
|
||||||
|
|
||||||
if waiting>0 then
|
if searchWait>0 then
|
||||||
local r=TIME()*2
|
local r=TIME()*2
|
||||||
local R=int(r)%7+1
|
local R=int(r)%7+1
|
||||||
gc.setColor(1,1,1,1-abs(r%1*2-1))
|
gc.setColor(1,1,1,1-abs(r%1*2-1))
|
||||||
|
|||||||
@@ -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},
|
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},
|
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},
|
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,
|
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='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='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='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
|
--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')},
|
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},
|
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||||
|
|
||||||
--Special rules
|
--Special rules
|
||||||
WIDGET.newSwitch{name='ospin', x=850, y=760 ,lim=210,disp=ROOMval('ospin'), code=ROOMrev('ospin')},
|
WIDGET.newSwitch{name='ospin', x=850, y=850, 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='fineKill', x=850, y=910, 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='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='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='easyFresh', x=1170,y=850, 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='deepDrop', x=1170,y=910, 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='bone', x=1170,y=970, lim=250,disp=ROOMval('bone'), code=ROOMrev('bone')},
|
||||||
|
|
||||||
--Rule set
|
--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
|
--Next & Hold
|
||||||
WIDGET.newSlider{name='nextCount', x=140, y=960, lim=130,w=200,unit=6,disp=ROOMval('nextCount'),code=ROOMsto('nextCount')},
|
WIDGET.newSlider{name='nextCount', x=140, y=960, lim=130,w=200,unit=6,disp=ROOMval('nextCount'),code=ROOMsto('nextCount')},
|
||||||
|
|||||||
@@ -31,24 +31,24 @@ function scene.draw()
|
|||||||
end
|
end
|
||||||
|
|
||||||
scene.widgetList={
|
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='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='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='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='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.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.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='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.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='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='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='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='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.newSwitch{name='simpMode', x=960, y=640, lim=480, disp=SETval('simpMode'),
|
||||||
code=function()
|
code=function()
|
||||||
SETTING.simpMode=not SETTING.simpMode
|
SETTING.simpMode=not SETTING.simpMode
|
||||||
for i=1,#SCN.stack,2 do
|
for i=1,#SCN.stack,2 do
|
||||||
@@ -58,7 +58,7 @@ scene.widgetList={
|
|||||||
end
|
end
|
||||||
end
|
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
|
return scene
|
||||||
|
|||||||
Reference in New Issue
Block a user