Compare commits
8 Commits
pre0.17.0-
...
pre0.17.0-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36de1c0751 | ||
|
|
704341fd15 | ||
|
|
22b61bc9c3 | ||
|
|
f4cbbc0a2a | ||
|
|
dc99187b9d | ||
|
|
915598dec4 | ||
|
|
e7b4518d73 | ||
|
|
9603a78e87 |
@@ -42,16 +42,28 @@ function SFX.init(list)
|
|||||||
end
|
end
|
||||||
function SFX.load(path)
|
function SFX.load(path)
|
||||||
local c=0
|
local c=0
|
||||||
|
local missing=0
|
||||||
for i=1,#sfxList do
|
for i=1,#sfxList do
|
||||||
local fullPath=path..sfxList[i]..'.ogg'
|
local fullPath=path..sfxList[i]..'.ogg'
|
||||||
if love.filesystem.getInfo(fullPath)then
|
if love.filesystem.getInfo(fullPath)then
|
||||||
|
if Sources[sfxList[i]]then
|
||||||
|
for j=1,#Sources[sfxList[i]]do
|
||||||
|
Sources[sfxList[i]][j]:release()
|
||||||
|
end
|
||||||
|
end
|
||||||
Sources[sfxList[i]]={love.audio.newSource(fullPath,'static')}
|
Sources[sfxList[i]]={love.audio.newSource(fullPath,'static')}
|
||||||
c=c+1
|
c=c+1
|
||||||
else
|
else
|
||||||
LOG("No SFX: "..sfxList[i]..'.ogg',.1)
|
LOG("No SFX: "..sfxList[i]..'.ogg',.1)
|
||||||
|
missing=missing+1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
LOG(c.."/"..#sfxList.." SFX files loaded")
|
LOG(c.."/"..#sfxList.." SFX files loaded")
|
||||||
|
LOG(missing.." SFX files missing")
|
||||||
|
if missing>0 then
|
||||||
|
MES.new('info',missing.." SFX files missing")
|
||||||
|
end
|
||||||
|
collectgarbage()
|
||||||
end
|
end
|
||||||
function SFX.loadSample(pack)
|
function SFX.loadSample(pack)
|
||||||
assert(type(pack)=='table',"Usage: SFX.loadsample([table])")
|
assert(type(pack)=='table',"Usage: SFX.loadsample([table])")
|
||||||
|
|||||||
@@ -303,17 +303,6 @@ function key:draw()
|
|||||||
local align=self.align
|
local align=self.align
|
||||||
local r,g,b=c[1],c[2],c[3]
|
local r,g,b=c[1],c[2],c[3]
|
||||||
|
|
||||||
--Background
|
|
||||||
gc_setColor(0,0,0,.3)
|
|
||||||
gc_rectangle('fill',x,y,w,h,4)
|
|
||||||
|
|
||||||
--Frame
|
|
||||||
if not self.noFrame then
|
|
||||||
gc_setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7)
|
|
||||||
gc_setLineWidth(2)
|
|
||||||
gc_rectangle('line',x,y,w,h,3)
|
|
||||||
end
|
|
||||||
|
|
||||||
--Fill
|
--Fill
|
||||||
if self.fShade then
|
if self.fShade then
|
||||||
gc_setColor(r,g,b,ATV*.25)
|
gc_setColor(r,g,b,ATV*.25)
|
||||||
@@ -325,6 +314,16 @@ function key:draw()
|
|||||||
gc_draw(self.fShade,x+w-self.edge-self.fShade:getWidth(),y+h*.5-self.fShade:getHeight()*.5)
|
gc_draw(self.fShade,x+w-self.edge-self.fShade:getWidth(),y+h*.5-self.fShade:getHeight()*.5)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
--Background
|
||||||
|
gc_setColor(0,0,0,.3)
|
||||||
|
gc_rectangle('fill',x,y,w,h,4)
|
||||||
|
|
||||||
|
--Frame
|
||||||
|
gc_setColor(.2+r*.8,.2+g*.8,.2+b*.8,.7)
|
||||||
|
gc_setLineWidth(2)
|
||||||
|
gc_rectangle('line',x,y,w,h,3)
|
||||||
|
|
||||||
|
--Shade
|
||||||
gc_setColor(1,1,1,ATV*.05)
|
gc_setColor(1,1,1,ATV*.05)
|
||||||
gc_rectangle('fill',x,y,w,h,3)
|
gc_rectangle('fill',x,y,w,h,3)
|
||||||
end
|
end
|
||||||
@@ -351,7 +350,7 @@ function key:press(_,_,k)
|
|||||||
SFX.play('key')
|
SFX.play('key')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,fShade][,noFrame][,color][,font=30][,fType][,sound=true][,align='M'][,edge=0][,code][,hideF][,hide]
|
function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,fShade][,color][,font=30][,fType][,sound=true][,align='M'][,edge=0][,code][,hideF][,hide]
|
||||||
if not D.h then D.h=D.w end
|
if not D.h then D.h=D.w end
|
||||||
local _={
|
local _={
|
||||||
name= D.name or"_",
|
name= D.name or"_",
|
||||||
@@ -371,10 +370,9 @@ function WIDGET.newKey(D)--name,x,y,w[,h][,fText][,fShade][,noFrame][,color][,fo
|
|||||||
|
|
||||||
fText= D.fText,
|
fText= D.fText,
|
||||||
fShade= D.fShade,
|
fShade= D.fShade,
|
||||||
noFrame=D.noFrame,
|
|
||||||
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
||||||
font= D.font or 30,
|
font= D.font or 30,
|
||||||
fType=D.fType,
|
fType= D.fType,
|
||||||
sound= D.sound~=false,
|
sound= D.sound~=false,
|
||||||
align= D.align or'M',
|
align= D.align or'M',
|
||||||
edge= D.edge or 0,
|
edge= D.edge or 0,
|
||||||
@@ -635,7 +633,7 @@ function WIDGET.newSlider(D)--name,x,y,w[,lim][,fText][,color][,unit][,smooth][,
|
|||||||
unit= D.unit or 1,
|
unit= D.unit or 1,
|
||||||
smooth=false,
|
smooth=false,
|
||||||
font= D.font or 30,
|
font= D.font or 30,
|
||||||
fType=D.fType,
|
fType= D.fType,
|
||||||
change=D.change,
|
change=D.change,
|
||||||
disp= D.disp,
|
disp= D.disp,
|
||||||
code= D.code or NULL,
|
code= D.code or NULL,
|
||||||
@@ -951,7 +949,7 @@ function WIDGET.newInputBox(D)--name,x,y,w[,h][,font=30][,fType][,secret][,regex
|
|||||||
},
|
},
|
||||||
|
|
||||||
font= D.font or int(D.h/7-1)*5,
|
font= D.font or int(D.h/7-1)*5,
|
||||||
fType=D.fType,
|
fType= D.fType,
|
||||||
secret=D.secret==true,
|
secret=D.secret==true,
|
||||||
regex= D.regex,
|
regex= D.regex,
|
||||||
limit= D.limit,
|
limit= D.limit,
|
||||||
|
|||||||
3
main.lua
3
main.lua
@@ -23,8 +23,7 @@ local fs=love.filesystem
|
|||||||
VERSION=require"version"
|
VERSION=require"version"
|
||||||
TIME=love.timer.getTime
|
TIME=love.timer.getTime
|
||||||
YIELD=coroutine.yield
|
YIELD=coroutine.yield
|
||||||
SYSTEM=love.system.getOS()
|
SYSTEM=love.system.getOS()if SYSTEM=='OS X'then SYSTEM='macOS'end
|
||||||
if SYSTEM=='OS X'then SYSTEM='macOS'end
|
|
||||||
FNSF=SYSTEM:find'\79\83'--What does FNSF stand for? IDK so don't ask me lol
|
FNSF=SYSTEM:find'\79\83'--What does FNSF stand for? IDK so don't ask me lol
|
||||||
MOBILE=SYSTEM=='Android'or SYSTEM=='iOS'
|
MOBILE=SYSTEM=='Android'or SYSTEM=='iOS'
|
||||||
SAVEDIR=fs.getSaveDirectory()
|
SAVEDIR=fs.getSaveDirectory()
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ function bot_cc:revive()
|
|||||||
self.P:loadAI(self.data)
|
self.P:loadAI(self.data)
|
||||||
end
|
end
|
||||||
function bot_cc:pushNewNext(id)
|
function bot_cc:pushNewNext(id)
|
||||||
self.ccBot:addNext(rem(self.nexts,1))
|
self.ccBot:addNext(rem(self.bufferedNexts,1))
|
||||||
ins(self.nexts,id)
|
ins(self.bufferedNexts,id)
|
||||||
end
|
end
|
||||||
function bot_cc:thread()
|
function bot_cc:thread()
|
||||||
local P,keys=self.P,self.keys
|
local P,keys=self.P,self.keys
|
||||||
|
|||||||
@@ -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==0 then
|
if P.control and P.cur 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
|
||||||
@@ -85,7 +85,7 @@ function BOT.new(P,data)
|
|||||||
if data.type=="CC"then
|
if data.type=="CC"then
|
||||||
P:setRS('SRS')
|
P:setRS('SRS')
|
||||||
bot.keys={}
|
bot.keys={}
|
||||||
bot.nexts={}
|
bot.bufferedNexts={}
|
||||||
bot.delay=data.delay
|
bot.delay=data.delay
|
||||||
bot.delay0=data.delay
|
bot.delay0=data.delay
|
||||||
if P.gameEnv.holdCount>1 then
|
if P.gameEnv.holdCount>1 then
|
||||||
@@ -109,20 +109,25 @@ function BOT.new(P,data)
|
|||||||
return
|
return
|
||||||
self.ccBot[k]and function(_,...)self.ccBot[k](self.ccBot,...)end or
|
self.ccBot[k]and function(_,...)self.ccBot[k](self.ccBot,...)end or
|
||||||
cc_lua[k]and function(_,...)cc_lua[k](self,...)end or
|
cc_lua[k]and function(_,...)cc_lua[k](self,...)end or
|
||||||
baseBot[k]and baseBot[k]or
|
assert(baseBot[k],"No CC action called "..k)
|
||||||
error("No actions called "..k)
|
|
||||||
end})
|
end})
|
||||||
|
|
||||||
for i,B in next,P.nextQueue do
|
local pushed=0
|
||||||
if i<=data.next then
|
if P.cur then
|
||||||
|
bot:addNext(P.cur.id)
|
||||||
|
pushed=pushed+1
|
||||||
|
end
|
||||||
|
for _,B in next,P.nextQueue do
|
||||||
|
if pushed<=data.next then
|
||||||
bot:addNext(B.id)
|
bot:addNext(B.id)
|
||||||
|
pushed=pushed+1
|
||||||
else
|
else
|
||||||
ins(bot.nexts,B.id)
|
ins(bot.bufferedNexts,B.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
bot.runningThread=coroutine.wrap(cc_lua.thread)
|
bot.runningThread=coroutine.wrap(cc_lua.thread)
|
||||||
bot.runningThread(bot)
|
bot.runningThread(bot)
|
||||||
elseif data.type=="9S"or true then--9s or else
|
else--if data.type=="9S"then--9s or else
|
||||||
TABLE.cover(baseBot,bot)
|
TABLE.cover(baseBot,bot)
|
||||||
TABLE.cover(require"parts.bot.bot_9s",bot)
|
TABLE.cover(require"parts.bot.bot_9s",bot)
|
||||||
P:setRS('TRS')
|
P:setRS('TRS')
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ return
|
|||||||
drop=1,
|
drop=1,
|
||||||
wait=8,
|
wait=8,
|
||||||
fall=20,
|
fall=20,
|
||||||
|
fieldH=10,
|
||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||||
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ return
|
|||||||
drop=120,
|
drop=120,
|
||||||
wait=8,
|
wait=8,
|
||||||
fall=20,
|
fall=20,
|
||||||
|
fieldH=10,
|
||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||||
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
PLY.draw.drawTargetLine(P,200-P.stat.row)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ return{
|
|||||||
end
|
end
|
||||||
setField(P,D.finished+1)
|
setField(P,D.finished+1)
|
||||||
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.6,.8,.6)
|
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.6,.8,.6)
|
||||||
SFX.play('blip_1')
|
SFX.play('warn_1')
|
||||||
else
|
else
|
||||||
P:win('finish')
|
P:win('finish')
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -41,15 +41,15 @@ return{
|
|||||||
if D.target==110 then
|
if D.target==110 then
|
||||||
P.gameEnv.drop,P.gameEnv.lock=5,5
|
P.gameEnv.drop,P.gameEnv.lock=5,5
|
||||||
P.gameEnv.sddas,P.gameEnv.sdarr=5,5
|
P.gameEnv.sddas,P.gameEnv.sdarr=5,5
|
||||||
SFX.play('blip_2',.7)
|
SFX.play('warn_2',.7)
|
||||||
elseif D.target==140 then
|
elseif D.target==140 then
|
||||||
P.gameEnv.drop,P.gameEnv.lock=4,4
|
P.gameEnv.drop,P.gameEnv.lock=4,4
|
||||||
P.gameEnv.sddas,P.gameEnv.sdarr=4,4
|
P.gameEnv.sddas,P.gameEnv.sdarr=4,4
|
||||||
SFX.play('blip_2',.7)
|
SFX.play('warn_2',.7)
|
||||||
elseif D.target==170 then
|
elseif D.target==170 then
|
||||||
P.gameEnv.drop,P.gameEnv.lock=3,3
|
P.gameEnv.drop,P.gameEnv.lock=3,3
|
||||||
P.gameEnv.sddas,P.gameEnv.sdarr=3,3
|
P.gameEnv.sddas,P.gameEnv.sdarr=3,3
|
||||||
SFX.play('blip_2',.7)
|
SFX.play('warn_2',.7)
|
||||||
elseif D.target==200 then
|
elseif D.target==200 then
|
||||||
P:win('finish')
|
P:win('finish')
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ return{
|
|||||||
if D.target==110 then
|
if D.target==110 then
|
||||||
P.gameEnv.drop,P.gameEnv.lock=2,2
|
P.gameEnv.drop,P.gameEnv.lock=2,2
|
||||||
P.gameEnv.sddas,P.gameEnv.sdarr=2,2
|
P.gameEnv.sddas,P.gameEnv.sdarr=2,2
|
||||||
SFX.play('blip_1')
|
SFX.play('warn_1')
|
||||||
elseif D.target==200 then
|
elseif D.target==200 then
|
||||||
P:win('finish')
|
P:win('finish')
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ return{
|
|||||||
D.pt=D.pt+s
|
D.pt=D.pt+s
|
||||||
|
|
||||||
if D.pt%100==99 then
|
if D.pt%100==99 then
|
||||||
SFX.play('blip_1')
|
SFX.play('warn_1')
|
||||||
elseif D.pt>=D.target then--Level up!
|
elseif D.pt>=D.target then--Level up!
|
||||||
s=D.target/100--range from 1 to 9
|
s=D.target/100--range from 1 to 9
|
||||||
local E=P.gameEnv
|
local E=P.gameEnv
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ return{
|
|||||||
D.pt=D.pt+s
|
D.pt=D.pt+s
|
||||||
|
|
||||||
if D.pt%100==99 then
|
if D.pt%100==99 then
|
||||||
SFX.play('blip_1')
|
SFX.play('warn_1')
|
||||||
elseif D.pt>=D.target then--Level up!
|
elseif D.pt>=D.target then--Level up!
|
||||||
s=D.target/100
|
s=D.target/100
|
||||||
local E=P.gameEnv
|
local E=P.gameEnv
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ return{
|
|||||||
D.pt=D.pt+s
|
D.pt=D.pt+s
|
||||||
|
|
||||||
if D.pt%100==99 then
|
if D.pt%100==99 then
|
||||||
SFX.play('blip_1')
|
SFX.play('warn_1')
|
||||||
elseif D.pt>=D.target then--Level up!
|
elseif D.pt>=D.target then--Level up!
|
||||||
s=D.target/100
|
s=D.target/100
|
||||||
local E=P.gameEnv
|
local E=P.gameEnv
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ return
|
|||||||
|
|
||||||
P.modeData.target=260
|
P.modeData.target=260
|
||||||
p=260
|
p=260
|
||||||
SFX.play('blip_2')
|
SFX.play('warn_2')
|
||||||
SFX.play('reach')
|
SFX.play('reach')
|
||||||
else
|
else
|
||||||
p=260
|
p=260
|
||||||
|
|||||||
@@ -818,7 +818,7 @@ do--function checkWarning()
|
|||||||
end
|
end
|
||||||
GAME.warnLVL=_
|
GAME.warnLVL=_
|
||||||
if GAME.warnLVL>1.126 and P1.frameRun%30==0 then
|
if GAME.warnLVL>1.126 and P1.frameRun%30==0 then
|
||||||
SFX.fplay('warning',SETTING.sfx_warn)
|
SFX.fplay('warn_beep',SETTING.sfx_warn)
|
||||||
end
|
end
|
||||||
elseif GAME.warnLVL>0 then
|
elseif GAME.warnLVL>0 then
|
||||||
GAME.warnLVL=max(GAME.warnLVL-.026,0)
|
GAME.warnLVL=max(GAME.warnLVL-.026,0)
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ function NETPLY.setJoinMode(uid,ready)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
SFX.play('blip_2',.5)
|
SFX.play('warn_2',.5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ local function _newEmptyPlayer(id,mini)
|
|||||||
}
|
}
|
||||||
P.newNext=false--Warped coroutine to get new next, loaded in applyGameEnv()
|
P.newNext=false--Warped coroutine to get new next, loaded in applyGameEnv()
|
||||||
]]
|
]]
|
||||||
P.movDir,P.moving,P.downing=0,0,0--Last move key,DAS charging,downDAS charging
|
P.movDir,P.moving,P.downing=0,0,-1--Last move key,DAS charging,downDAS charging
|
||||||
P.dropDelay,P.lockDelay=0,0
|
P.dropDelay,P.lockDelay=0,0
|
||||||
P.waiting,P.falling=0,0
|
P.waiting,P.falling=0,0
|
||||||
P.freshTime=0
|
P.freshTime=0
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ function Player:act_moveLeft(auto)
|
|||||||
self.ctrlCount=self.ctrlCount+1
|
self.ctrlCount=self.ctrlCount+1
|
||||||
end
|
end
|
||||||
self.movDir=-1
|
self.movDir=-1
|
||||||
if self.control and self.waiting==0 then
|
if self.cur then
|
||||||
if self.cur and not self:ifoverlap(self.cur.bk,self.curX-1,self.curY)then
|
if self.cur and not self:ifoverlap(self.cur.bk,self.curX-1,self.curY)then
|
||||||
self:createMoveFX('left')
|
self:createMoveFX('left')
|
||||||
self.curX=self.curX-1
|
self.curX=self.curX-1
|
||||||
@@ -241,7 +241,7 @@ function Player:act_moveRight(auto)
|
|||||||
self.ctrlCount=self.ctrlCount+1
|
self.ctrlCount=self.ctrlCount+1
|
||||||
end
|
end
|
||||||
self.movDir=1
|
self.movDir=1
|
||||||
if self.control and self.waiting==0 then
|
if self.cur then
|
||||||
if self.cur and not self:ifoverlap(self.cur.bk,self.curX+1,self.curY)then
|
if self.cur and not self:ifoverlap(self.cur.bk,self.curX+1,self.curY)then
|
||||||
self:createMoveFX('right')
|
self:createMoveFX('right')
|
||||||
self.curX=self.curX+1
|
self.curX=self.curX+1
|
||||||
@@ -258,21 +258,21 @@ function Player:act_moveRight(auto)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function Player:act_rotRight()
|
function Player:act_rotRight()
|
||||||
if self.control and self.cur then
|
if self.cur then
|
||||||
self.ctrlCount=self.ctrlCount+1
|
self.ctrlCount=self.ctrlCount+1
|
||||||
self:spin(1)
|
self:spin(1)
|
||||||
self.keyPressing[3]=false
|
self.keyPressing[3]=false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function Player:act_rotLeft()
|
function Player:act_rotLeft()
|
||||||
if self.control and self.cur then
|
if self.cur then
|
||||||
self.ctrlCount=self.ctrlCount+1
|
self.ctrlCount=self.ctrlCount+1
|
||||||
self:spin(3)
|
self:spin(3)
|
||||||
self.keyPressing[4]=false
|
self.keyPressing[4]=false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function Player:act_rot180()
|
function Player:act_rot180()
|
||||||
if self.control and self.cur then
|
if self.cur then
|
||||||
self.ctrlCount=self.ctrlCount+2
|
self.ctrlCount=self.ctrlCount+2
|
||||||
self:spin(2)
|
self:spin(2)
|
||||||
self.keyPressing[5]=false
|
self.keyPressing[5]=false
|
||||||
@@ -280,7 +280,7 @@ function Player:act_rot180()
|
|||||||
end
|
end
|
||||||
function Player:act_hardDrop()
|
function Player:act_hardDrop()
|
||||||
local ENV=self.gameEnv
|
local ENV=self.gameEnv
|
||||||
if self.control and self.cur then
|
if self.cur then
|
||||||
if self.lastPiece.autoLock and self.frameRun-self.lastPiece.frame<ENV.dropcut then
|
if self.lastPiece.autoLock and self.frameRun-self.lastPiece.frame<ENV.dropcut then
|
||||||
SFX.play('drop_cancel',.3)
|
SFX.play('drop_cancel',.3)
|
||||||
else
|
else
|
||||||
@@ -304,12 +304,19 @@ function Player:act_hardDrop()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function Player:act_softDrop()
|
function Player:act_softDrop()
|
||||||
self.downing=1
|
self.downing=0
|
||||||
if self.control and self.cur then
|
if self.cur then
|
||||||
if self.curY>self.ghoY then
|
if self.curY>self.ghoY then
|
||||||
self.curY=self.curY-1
|
if self.gameEnv.sddas==0 then
|
||||||
self:freshBlock('fresh')
|
if self.gameEnv.sdarr==0 then
|
||||||
self.spinLast=false
|
self:act_insDown()
|
||||||
|
else
|
||||||
|
self:act_down1()
|
||||||
|
self:act_down1()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
self:act_down1()
|
||||||
|
end
|
||||||
self:checkTouchSound()
|
self:checkTouchSound()
|
||||||
elseif self.gameEnv.deepdrop then
|
elseif self.gameEnv.deepdrop then
|
||||||
self:_deepdrop()
|
self:_deepdrop()
|
||||||
@@ -317,7 +324,7 @@ function Player:act_softDrop()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function Player:act_hold()
|
function Player:act_hold()
|
||||||
if self.control and self.cur then
|
if self.cur then
|
||||||
if self:hold()then
|
if self:hold()then
|
||||||
self.keyPressing[8]=false
|
self.keyPressing[8]=false
|
||||||
end
|
end
|
||||||
@@ -819,7 +826,7 @@ function Player:receive(A,send,time,line)
|
|||||||
self.atkBufferSum=self.atkBufferSum+send
|
self.atkBufferSum=self.atkBufferSum+send
|
||||||
self.stat.recv=self.stat.recv+send
|
self.stat.recv=self.stat.recv+send
|
||||||
if self.sound then
|
if self.sound then
|
||||||
SFX.play(send<4 and'blip_1'or'blip_2',min(send+1,5)*.1)
|
SFX.play(send<4 and'warn_1'or'warn_2',min(send+1,5)*.1)
|
||||||
end
|
end
|
||||||
if send>=2 then
|
if send>=2 then
|
||||||
self:shakeField(send/2)
|
self:shakeField(send/2)
|
||||||
@@ -889,7 +896,7 @@ function Player:freshBlock(mode,ifTele)--string mode: push/move/fresh/newBlock
|
|||||||
if(mode=='move'or mode=='newBlock'or mode=='push')and self.cur then
|
if(mode=='move'or mode=='newBlock'or mode=='push')and self.cur then
|
||||||
local CB=self.cur.bk
|
local CB=self.cur.bk
|
||||||
self.ghoY=min(#self.field+1,self.curY)
|
self.ghoY=min(#self.field+1,self.curY)
|
||||||
if self._20G or ENV.sdarr==0 and self.keyPressing[7]and self.downing>ENV.sddas then
|
if self._20G or ENV.sdarr==0 and self.keyPressing[7]and self.downing>=ENV.sddas then
|
||||||
local _=self.ghoY
|
local _=self.ghoY
|
||||||
|
|
||||||
--Move ghost to bottom
|
--Move ghost to bottom
|
||||||
@@ -1325,7 +1332,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.falling==0 and self.waiting==0)then
|
if self.holdTime>0 and(self.cur or ifpre)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
|
||||||
@@ -2048,7 +2055,7 @@ do
|
|||||||
return _cc,_gbcc
|
return _cc,_gbcc
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function Player:loadAI(data)--Load AI params
|
function Player:loadAI(data)--Load AI with params
|
||||||
self.bot=BOT.new(self,data)
|
self.bot=BOT.new(self,data)
|
||||||
self.bot.data=data
|
self.bot.data=data
|
||||||
end
|
end
|
||||||
@@ -2301,6 +2308,9 @@ local function update_alive(P)
|
|||||||
P.control=true
|
P.control=true
|
||||||
P.timing=true
|
P.timing=true
|
||||||
P:popNext()
|
P:popNext()
|
||||||
|
if P.bot then
|
||||||
|
P.bot:updateField()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if P.movDir~=0 then
|
if P.movDir~=0 then
|
||||||
if P.moving<P.gameEnv.das then
|
if P.moving<P.gameEnv.das then
|
||||||
@@ -2413,8 +2423,7 @@ local function update_alive(P)
|
|||||||
--Drop pressed
|
--Drop pressed
|
||||||
if P.keyPressing[7]then
|
if P.keyPressing[7]then
|
||||||
P.downing=P.downing+1
|
P.downing=P.downing+1
|
||||||
local d=P.downing-ENV.sddas
|
if P.downing>=ENV.sddas then
|
||||||
if d>1 then
|
|
||||||
if ENV.sdarr==0 then
|
if ENV.sdarr==0 then
|
||||||
P:act_insDown()
|
P:act_insDown()
|
||||||
end
|
end
|
||||||
@@ -2423,7 +2432,7 @@ local function update_alive(P)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
P.downing=0
|
P.downing=-1
|
||||||
end
|
end
|
||||||
|
|
||||||
local stopAtFalling
|
local stopAtFalling
|
||||||
@@ -2457,7 +2466,7 @@ local function update_alive(P)
|
|||||||
local dist--Drop distance
|
local dist--Drop distance
|
||||||
if D>1 then
|
if D>1 then
|
||||||
D=D-1
|
D=D-1
|
||||||
if P.downing>ENV.sddas then
|
if P.keyPressing[7]and P.downing>=ENV.sddas then
|
||||||
D=D-ceil(ENV.drop/ENV.sdarr)
|
D=D-ceil(ENV.drop/ENV.sdarr)
|
||||||
end
|
end
|
||||||
if D<=0 then
|
if D<=0 then
|
||||||
@@ -2468,7 +2477,7 @@ local function update_alive(P)
|
|||||||
goto THROW_stop
|
goto THROW_stop
|
||||||
end
|
end
|
||||||
elseif D==1 then--We don't know why dropDelay is 1, so checking ENV.drop>1 is neccessary
|
elseif D==1 then--We don't know why dropDelay is 1, so checking ENV.drop>1 is neccessary
|
||||||
if ENV.drop>1 and P.downing>ENV.sddas and(P.downing-ENV.sddas)%ENV.sdarr==0 then
|
if ENV.drop>1 and P.downing>=ENV.sddas and(P.downing-ENV.sddas)%ENV.sdarr==0 then
|
||||||
dist=2
|
dist=2
|
||||||
else
|
else
|
||||||
dist=1
|
dist=1
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ function scene.update(dt)
|
|||||||
speed=speed+.2
|
speed=speed+.2
|
||||||
end
|
end
|
||||||
level=level+1
|
level=level+1
|
||||||
SFX.play('blip_1')
|
SFX.play('warn_1')
|
||||||
end
|
end
|
||||||
sunH=sunH+.01
|
sunH=sunH+.01
|
||||||
elseif menu==1 then
|
elseif menu==1 then
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ function scene.keyDown(key)
|
|||||||
elseif key=='n'then
|
elseif key=='n'then
|
||||||
ins(FIELD,page+1,DATA.newBoard(FIELD[page]))
|
ins(FIELD,page+1,DATA.newBoard(FIELD[page]))
|
||||||
page=page+1
|
page=page+1
|
||||||
SFX.play('blip_1',.8)
|
SFX.play('warn_1',.8)
|
||||||
SYSFX.newShade(3,200,60,300,600,.5,1,.5)
|
SYSFX.newShade(3,200,60,300,600,.5,1,.5)
|
||||||
elseif key=='m'then
|
elseif key=='m'then
|
||||||
rem(FIELD,page)
|
rem(FIELD,page)
|
||||||
@@ -438,32 +438,32 @@ scene.widgetList={
|
|||||||
WIDGET.newText{name='title', x=1020,y=5,font=70,align='R'},
|
WIDGET.newText{name='title', x=1020,y=5,font=70,align='R'},
|
||||||
WIDGET.newText{name='subTitle', x=1030,y=50,font=35,align='L',color='H'},
|
WIDGET.newText{name='subTitle', x=1030,y=50,font=35,align='L',color='H'},
|
||||||
|
|
||||||
WIDGET.newButton{name='b1', x=580, y=130,w=76,fText="",color='R',code=_setPen(1)},--B1
|
WIDGET.newButton{name='b1', x=580, y=130,w=73,fText="",color='R',code=_setPen(1)},--B1
|
||||||
WIDGET.newButton{name='b2', x=660, y=130,w=76,fText="",color='F',code=_setPen(2)},--B2
|
WIDGET.newButton{name='b2', x=660, y=130,w=73,fText="",color='F',code=_setPen(2)},--B2
|
||||||
WIDGET.newButton{name='b3', x=740, y=130,w=76,fText="",color='O',code=_setPen(3)},--B3
|
WIDGET.newButton{name='b3', x=740, y=130,w=73,fText="",color='O',code=_setPen(3)},--B3
|
||||||
WIDGET.newButton{name='b4', x=820, y=130,w=76,fText="",color='Y',code=_setPen(4)},--B4
|
WIDGET.newButton{name='b4', x=820, y=130,w=73,fText="",color='Y',code=_setPen(4)},--B4
|
||||||
WIDGET.newButton{name='b5', x=900, y=130,w=76,fText="",color='L',code=_setPen(5)},--B5
|
WIDGET.newButton{name='b5', x=900, y=130,w=73,fText="",color='L',code=_setPen(5)},--B5
|
||||||
WIDGET.newButton{name='b6', x=980, y=130,w=76,fText="",color='J',code=_setPen(6)},--B6
|
WIDGET.newButton{name='b6', x=980, y=130,w=73,fText="",color='J',code=_setPen(6)},--B6
|
||||||
WIDGET.newButton{name='b7', x=1060,y=130,w=76,fText="",color='G',code=_setPen(7)},--B7
|
WIDGET.newButton{name='b7', x=1060,y=130,w=73,fText="",color='G',code=_setPen(7)},--B7
|
||||||
WIDGET.newButton{name='b8', x=1140,y=130,w=76,fText="",color='A',code=_setPen(8)},--B8
|
WIDGET.newButton{name='b8', x=1140,y=130,w=73,fText="",color='A',code=_setPen(8)},--B8
|
||||||
|
|
||||||
WIDGET.newButton{name='b9', x=580, y=210,w=76,fText="",color='C',code=_setPen(9)},--B9
|
WIDGET.newButton{name='b9', x=580, y=210,w=73,fText="",color='C',code=_setPen(9)},--B9
|
||||||
WIDGET.newButton{name='b10', x=660, y=210,w=76,fText="",color='N',code=_setPen(10)},--B10
|
WIDGET.newButton{name='b10', x=660, y=210,w=73,fText="",color='N',code=_setPen(10)},--B10
|
||||||
WIDGET.newButton{name='b11', x=740, y=210,w=76,fText="",color='S',code=_setPen(11)},--B11
|
WIDGET.newButton{name='b11', x=740, y=210,w=73,fText="",color='S',code=_setPen(11)},--B11
|
||||||
WIDGET.newButton{name='b12', x=820, y=210,w=76,fText="",color='B',code=_setPen(12)},--B12
|
WIDGET.newButton{name='b12', x=820, y=210,w=73,fText="",color='B',code=_setPen(12)},--B12
|
||||||
WIDGET.newButton{name='b13', x=900, y=210,w=76,fText="",color='V',code=_setPen(13)},--B13
|
WIDGET.newButton{name='b13', x=900, y=210,w=73,fText="",color='V',code=_setPen(13)},--B13
|
||||||
WIDGET.newButton{name='b14', x=980, y=210,w=76,fText="",color='P',code=_setPen(14)},--B14
|
WIDGET.newButton{name='b14', x=980, y=210,w=73,fText="",color='P',code=_setPen(14)},--B14
|
||||||
WIDGET.newButton{name='b15', x=1060,y=210,w=76,fText="",color='M',code=_setPen(15)},--B15
|
WIDGET.newButton{name='b15', x=1060,y=210,w=73,fText="",color='M',code=_setPen(15)},--B15
|
||||||
WIDGET.newButton{name='b16', x=1140,y=210,w=76,fText="",color='W',code=_setPen(16)},--B16
|
WIDGET.newButton{name='b16', x=1140,y=210,w=73,fText="",color='W',code=_setPen(16)},--B16
|
||||||
|
|
||||||
WIDGET.newButton{name='b17', x=580, y=290,w=76,font=40,fText=CHAR.icon.bone, color='dH',code=_setPen(17)},--BONE
|
WIDGET.newButton{name='b17', x=580, y=290,w=73,font=40,fText=CHAR.icon.bone, color='dH',code=_setPen(17)},--BONE
|
||||||
WIDGET.newButton{name='b18', x=660, y=290,w=76,font=40,fText=CHAR.icon.invis, color='D', code=_setPen(18)},--HIDE
|
WIDGET.newButton{name='b18', x=660, y=290,w=73,font=40,fText=CHAR.icon.invis, color='D', code=_setPen(18)},--HIDE
|
||||||
WIDGET.newButton{name='b19', x=740, y=290,w=76,font=40,fText=CHAR.icon.bomb, color='lY',code=_setPen(19)},--BOMB
|
WIDGET.newButton{name='b19', x=740, y=290,w=73,font=40,fText=CHAR.icon.bomb, color='lY',code=_setPen(19)},--BOMB
|
||||||
WIDGET.newButton{name='b20', x=820, y=290,w=76,font=40,fText=CHAR.icon.garbage,color='H', code=_setPen(20)},--GB1
|
WIDGET.newButton{name='b20', x=820, y=290,w=73,font=40,fText=CHAR.icon.garbage,color='H', code=_setPen(20)},--GB1
|
||||||
WIDGET.newButton{name='b21', x=900, y=290,w=76,font=40,fText=CHAR.icon.garbage,color='lH',code=_setPen(21)},--GB2
|
WIDGET.newButton{name='b21', x=900, y=290,w=73,font=40,fText=CHAR.icon.garbage,color='lH',code=_setPen(21)},--GB2
|
||||||
WIDGET.newButton{name='b22', x=980, y=290,w=76,font=40,fText=CHAR.icon.garbage,color='dV',code=_setPen(22)},--GB3
|
WIDGET.newButton{name='b22', x=980, y=290,w=73,font=40,fText=CHAR.icon.garbage,color='dV',code=_setPen(22)},--GB3
|
||||||
WIDGET.newButton{name='b23', x=1060,y=290,w=76,font=40,fText=CHAR.icon.garbage,color='dR',code=_setPen(23)},--GB4
|
WIDGET.newButton{name='b23', x=1060,y=290,w=73,font=40,fText=CHAR.icon.garbage,color='dR',code=_setPen(23)},--GB4
|
||||||
WIDGET.newButton{name='b24', x=1140,y=290,w=76,font=40,fText=CHAR.icon.garbage,color='dG',code=_setPen(24)},--GB5
|
WIDGET.newButton{name='b24', x=1140,y=290,w=73,font=40,fText=CHAR.icon.garbage,color='dG',code=_setPen(24)},--GB5
|
||||||
|
|
||||||
WIDGET.newButton{name='any', x=600, y=400,w=120,color='lH', font=40,code=_setPen(0)},
|
WIDGET.newButton{name='any', x=600, y=400,w=120,color='lH', font=40,code=_setPen(0)},
|
||||||
WIDGET.newButton{name='space', x=730, y=400,w=120,color='H', font=55,code=_setPen(-1),fText=CHAR.icon.cross_thick},
|
WIDGET.newButton{name='space', x=730, y=400,w=120,color='H', font=55,code=_setPen(-1),fText=CHAR.icon.cross_thick},
|
||||||
|
|||||||
@@ -53,12 +53,12 @@ pad={x=140,y=65,page=1,
|
|||||||
{samp={tag='clear_7',func=function()playClearSFX(7)end}},
|
{samp={tag='clear_7',func=function()playClearSFX(7)end}},
|
||||||
{samp={tag='clear_10',func=function()playClearSFX(10)end}},
|
{samp={tag='clear_10',func=function()playClearSFX(10)end}},
|
||||||
},
|
},
|
||||||
{{sfx='prerotate'}, {sfx='rotate'}, {sfx='rotatekick'}, {}, {voc='single'}, {voc='double'}, {voc='triple'}, {voc='techrash'}},
|
{{sfx='prerotate'}, {sfx='rotate'}, {sfx='rotatekick'}, {}, {voc='single'}, {voc='double'}, {voc='triple'}, {voc='techrash'}},
|
||||||
{{sfx='finesseError'},{sfx='finesseError_long'},{sfx='drop_cancel'},{}, {sfx='spin_0'}, {sfx='spin_1'}, {sfx='spin_2'}, {sfx='spin_3'}},
|
{{sfx='finesseError'},{sfx='finesseError_long'},{sfx='drop_cancel'},{}, {sfx='spin_0'}, {sfx='spin_1'}, {sfx='spin_2'}, {sfx='spin_3'}},
|
||||||
{{sfx='ren_1'}, {sfx='ren_2'}, {sfx='ren_3'}, {sfx='ren_4'}, {}, {sfx='warning'},{sfx='reach'}, {sfx='pc'}},
|
{{sfx='ren_1'}, {sfx='ren_2'}, {sfx='ren_3'}, {sfx='ren_4'}, {}, {sfx='warn_beep'},{sfx='reach'}, {sfx='pc'}},
|
||||||
{{sfx='ren_5'}, {sfx='ren_6'}, {sfx='ren_7'}, {sfx='ren_8'}, {}, {sfx='collect'},{sfx='emit'}, {sfx='blip_1'}},
|
{{sfx='ren_5'}, {sfx='ren_6'}, {sfx='ren_7'}, {sfx='ren_8'}, {}, {sfx='collect'}, {sfx='emit'}, {sfx='warn_1'}},
|
||||||
{{sfx='ren_9'}, {sfx='ren_10'}, {sfx='ren_11'}, {sfx='ren_mega'},{voc='win'}, {voc='lose'}, {sfx='win'}, {sfx='fail'}},
|
{{sfx='ren_9'}, {sfx='ren_10'}, {sfx='ren_11'}, {sfx='ren_mega'},{voc='win'}, {voc='lose'}, {sfx='win'}, {sfx='fail'}},
|
||||||
{{sfx='spawn_1'}, {sfx='spawn_2'}, {sfx='spawn_3'}, {sfx='spawn_4'}, {sfx='spawn_5'},{sfx='spawn_6'},{sfx='spawn_7'},{}},
|
{{sfx='spawn_1'}, {sfx='spawn_2'}, {sfx='spawn_3'}, {sfx='spawn_4'}, {sfx='spawn_5'},{sfx='spawn_6'}, {sfx='spawn_7'},{}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{{voc='mini'}, {voc='b2b'}, {voc='b3b'}, {voc='perfect_clear'},{voc='half_clear'},{}, {}, {}},
|
{{voc='mini'}, {voc='b2b'}, {voc='b3b'}, {voc='perfect_clear'},{voc='half_clear'},{}, {}, {}},
|
||||||
@@ -90,8 +90,8 @@ pad={x=140,y=65,page=1,
|
|||||||
{{voc='mini'}, {voc='b2b'}, {voc='b3b'}, {voc='perfect_clear'}, {voc='half_clear'}, {sfx='finesseError'}, {sfx='finesseError_long'}, {sfx='drop_cancel'},},
|
{{voc='mini'}, {voc='b2b'}, {voc='b3b'}, {voc='perfect_clear'}, {voc='half_clear'}, {sfx='finesseError'}, {sfx='finesseError_long'}, {sfx='drop_cancel'},},
|
||||||
{{voc='zspin'}, {voc='sspin'}, {voc='jspin'}, {voc='lspin'}, {voc='tspin'}, {voc='ospin'}, {voc='ispin'}, {}},
|
{{voc='zspin'}, {voc='sspin'}, {voc='jspin'}, {voc='lspin'}, {voc='tspin'}, {voc='ospin'}, {voc='ispin'}, {}},
|
||||||
{{voc='single'}, {voc='double'}, {voc='triple'},{voc='techrash'}, {sfx='ren_mega', vol=0.25},{sfx='ren_mega', vol=0.5},{sfx='ren_mega', vol=0.75},{sfx='ren_mega'}},
|
{{voc='single'}, {voc='double'}, {voc='triple'},{voc='techrash'}, {sfx='ren_mega', vol=0.25},{sfx='ren_mega', vol=0.5},{sfx='ren_mega', vol=0.75},{sfx='ren_mega'}},
|
||||||
{{sfx='ren_1'}, {sfx='ren_2'}, {sfx='ren_3'}, {sfx='ren_4'}, {sfx='blip_1'}, {sfx='warning'}, {sfx='reach'}, {sfx='pc'}},
|
{{sfx='ren_1'}, {sfx='ren_2'}, {sfx='ren_3'}, {sfx='ren_4'}, {sfx='warn_1'}, {sfx='warn_beep'}, {sfx='reach'}, {sfx='pc'}},
|
||||||
{{sfx='ren_5'}, {sfx='ren_6'}, {sfx='ren_7'}, {sfx='ren_8'}, {sfx='blip_2'}, {sfx='collect'}, {sfx='emit'}, {}},
|
{{sfx='ren_5'}, {sfx='ren_6'}, {sfx='ren_7'}, {sfx='ren_8'}, {sfx='warn_2'}, {sfx='collect'}, {sfx='emit'}, {}},
|
||||||
{{sfx='ren_9'}, {sfx='ren_10'}, {sfx='ren_11'},{sfx='ren_mega'}, {voc='win'}, {voc='lose'}, {sfx='win'}, {sfx='fail'}},
|
{{sfx='ren_9'}, {sfx='ren_10'}, {sfx='ren_11'},{sfx='ren_mega'}, {voc='win'}, {voc='lose'}, {sfx='win'}, {sfx='fail'}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ function scene.socketRead(cmd,d)
|
|||||||
COLOR.dY,"#"..d.uid.." ",
|
COLOR.dY,"#"..d.uid.." ",
|
||||||
COLOR.Y,text.joinRoom,
|
COLOR.Y,text.joinRoom,
|
||||||
}
|
}
|
||||||
SFX.play('click')
|
SFX.play('warn_1')
|
||||||
elseif cmd=='leave'then
|
elseif cmd=='leave'then
|
||||||
textBox:push{
|
textBox:push{
|
||||||
COLOR.lR,d.username,
|
COLOR.lR,d.username,
|
||||||
|
|||||||
@@ -222,7 +222,7 @@ function scene.draw()
|
|||||||
end
|
end
|
||||||
|
|
||||||
--Big info frame
|
--Big info frame
|
||||||
if PLAYERS[1].frameRun>180 then
|
if PLAYERS[1].frameRun>=180 then
|
||||||
gc.push('transform')
|
gc.push('transform')
|
||||||
gc.translate(560,205)
|
gc.translate(560,205)
|
||||||
gc.setLineWidth(2)
|
gc.setLineWidth(2)
|
||||||
@@ -349,12 +349,12 @@ scene.widgetList={
|
|||||||
WIDGET.newKey{name='setting', x=290,y=440,w=300,h=70,code=pressKey's',hideF=function()return GAME.fromRepMenu end},
|
WIDGET.newKey{name='setting', x=290,y=440,w=300,h=70,code=pressKey's',hideF=function()return GAME.fromRepMenu end},
|
||||||
WIDGET.newKey{name='quit', x=290,y=540,w=300,h=70,code=pressKey'q'},
|
WIDGET.newKey{name='quit', x=290,y=540,w=300,h=70,code=pressKey'q'},
|
||||||
WIDGET.newKey{name='tas', x=290,y=620,w=240,h=50,code=pressKey't',hideF=function()return not SETTING.allowTAS or GAME.tasUsed or GAME.result or GAME.replaying end},
|
WIDGET.newKey{name='tas', x=290,y=620,w=240,h=50,code=pressKey't',hideF=function()return not SETTING.allowTAS or GAME.tasUsed or GAME.result or GAME.replaying end},
|
||||||
WIDGET.newKey{name='page_prev',x=500,y=390,w=70,code=pressKey'tab',noFrame=true,
|
WIDGET.newKey{name='page_prev',x=500,y=390,w=70,code=pressKey'tab',
|
||||||
fText=GC.DO{70,70,{'setLW',2}, {'dRPol',33,35,32,3,6,3.142},{'dRPol',45,35,32,3,6,3.142}},
|
fText=GC.DO{70,70,{'setLW',2}, {'dRPol',33,35,32,3,6,3.142},{'dRPol',45,35,32,3,6,3.142}},
|
||||||
fShade=GC.DO{70,70,{'setCL',1,1,1,.4},{'draw',GC.DO{70,70,{'setCL',1,1,1,1},{'fRPol',33,35,32,3,6,3.142},{'fRPol',45,35,32,3,6,3.142}}}},
|
fShade=GC.DO{70,70,{'setCL',1,1,1,.4},{'draw',GC.DO{70,70,{'setCL',1,1,1,1},{'fRPol',33,35,32,3,6,3.142},{'fRPol',45,35,32,3,6,3.142}}}},
|
||||||
hideF=function()return PLAYERS[1].frameRun<=180 end,
|
hideF=function()return PLAYERS[1].frameRun<=180 end,
|
||||||
},
|
},
|
||||||
WIDGET.newKey{name='page_next',x=1230,y=390,w=70,code=pressKey'Stab',noFrame=true,
|
WIDGET.newKey{name='page_next',x=1230,y=390,w=70,code=pressKey'Stab',
|
||||||
fText=GC.DO{70,70,{'setLW',2}, {'dRPol',37,35,32,3,6},{'dRPol',25,35,32,3,6}},
|
fText=GC.DO{70,70,{'setLW',2}, {'dRPol',37,35,32,3,6},{'dRPol',25,35,32,3,6}},
|
||||||
fShade=GC.DO{70,70,{'setCL',1,1,1,.4},{'draw',GC.DO{70,70,{'setCL',1,1,1,1},{'fRPol',37,35,32,3,6},{'fRPol',25,35,32,3,6}}}},
|
fShade=GC.DO{70,70,{'setCL',1,1,1,.4},{'draw',GC.DO{70,70,{'setCL',1,1,1,1},{'fRPol',37,35,32,3,6},{'fRPol',25,35,32,3,6}}}},
|
||||||
hideF=function()return PLAYERS[1].frameRun<=180 end,
|
hideF=function()return PLAYERS[1].frameRun<=180 end,
|
||||||
|
|||||||
@@ -81,10 +81,10 @@ scene.widgetList={
|
|||||||
|
|
||||||
WIDGET.newSlider{name='mainVol', x=300, y=170,w=420,lim=220,color='lG',disp=SETval('mainVol'), code=function(v)SETTING.mainVol=v love.audio.setVolume(SETTING.mainVol)end},
|
WIDGET.newSlider{name='mainVol', x=300, y=170,w=420,lim=220,color='lG',disp=SETval('mainVol'), code=function(v)SETTING.mainVol=v love.audio.setVolume(SETTING.mainVol)end},
|
||||||
WIDGET.newSlider{name='bgm', x=300, y=240,w=420,lim=220,color='lG',disp=SETval('bgm'), code=function(v)SETTING.bgm=v BGM.setVol(SETTING.bgm)end},
|
WIDGET.newSlider{name='bgm', x=300, y=240,w=420,lim=220,color='lG',disp=SETval('bgm'), code=function(v)SETTING.bgm=v BGM.setVol(SETTING.bgm)end},
|
||||||
WIDGET.newSlider{name='sfx', x=300, y=310,w=420,lim=220,color='lC',disp=SETval('sfx'), code=function(v)SETTING.sfx=v SFX.setVol(SETTING.sfx)end, change=function()SFX.play('blip_1')end},
|
WIDGET.newSlider{name='sfx', x=300, y=310,w=420,lim=220,color='lC',disp=SETval('sfx'), code=function(v)SETTING.sfx=v SFX.setVol(SETTING.sfx)end, change=function()SFX.play('warn_1')end},
|
||||||
WIDGET.newSlider{name='stereo', x=300, y=380,w=420,lim=220,color='lC',disp=SETval('stereo'), code=function(v)SETTING.stereo=v SFX.setStereo(SETTING.stereo)end,change=function()SFX.play('move',1,-1)SFX.play('lock',1,1)end,hideF=function()return SETTING.sfx==0 end},
|
WIDGET.newSlider{name='stereo', x=300, y=380,w=420,lim=220,color='lC',disp=SETval('stereo'), code=function(v)SETTING.stereo=v SFX.setStereo(SETTING.stereo)end,change=function()SFX.play('move',1,-1)SFX.play('lock',1,1)end,hideF=function()return SETTING.sfx==0 end},
|
||||||
WIDGET.newSlider{name='spawn', x=300, y=450,w=420,lim=220,color='lC',disp=SETval('sfx_spawn'), code=function(v)SETTING.sfx_spawn=v end, change=function()SFX.fplay('spawn_'..math.random(7),SETTING.sfx_spawn)end,},
|
WIDGET.newSlider{name='spawn', x=300, y=450,w=420,lim=220,color='lC',disp=SETval('sfx_spawn'), code=function(v)SETTING.sfx_spawn=v end, change=function()SFX.fplay('spawn_'..math.random(7),SETTING.sfx_spawn)end,},
|
||||||
WIDGET.newSlider{name='warn', x=300, y=520,w=420,lim=220,color='lC',disp=SETval('sfx_warn'), code=function(v)SETTING.sfx_warn=v end, change=function()SFX.fplay('warning',SETTING.sfx_warn)end},
|
WIDGET.newSlider{name='warn', x=300, y=520,w=420,lim=220,color='lC',disp=SETval('sfx_warn'), code=function(v)SETTING.sfx_warn=v end, change=function()SFX.fplay('warn_beep',SETTING.sfx_warn)end},
|
||||||
WIDGET.newSlider{name='vib', x=300, y=590,w=420,lim=220,color='lN',disp=SETval('vib'),unit=10,code=function(v)SETTING.vib=v end, change=function()if SETTING.vib>0 then VIB(SETTING.vib+2)end end},
|
WIDGET.newSlider{name='vib', x=300, y=590,w=420,lim=220,color='lN',disp=SETval('vib'),unit=10,code=function(v)SETTING.vib=v end, change=function()if SETTING.vib>0 then VIB(SETTING.vib+2)end end},
|
||||||
WIDGET.newSlider{name='voc', x=300, y=660,w=420,lim=220,color='lN',disp=SETval('voc'), code=function(v)SETTING.voc=v VOC.setVol(SETTING.voc)end, change=function()VOC.play('test')end},
|
WIDGET.newSlider{name='voc', x=300, y=660,w=420,lim=220,color='lN',disp=SETval('voc'), code=function(v)SETTING.voc=v VOC.setVol(SETTING.voc)end, change=function()VOC.play('test')end},
|
||||||
|
|
||||||
|
|||||||
@@ -19,35 +19,35 @@ return[=[
|
|||||||
新机制:出块延迟打断(ARE打断)(默认关闭) #471
|
新机制:出块延迟打断(ARE打断)(默认关闭) #471
|
||||||
新机制:锁定在外判负(lockout)(默认关闭)
|
新机制:锁定在外判负(lockout)(默认关闭)
|
||||||
新机制:全局默认使用5帧窒息延迟
|
新机制:全局默认使用5帧窒息延迟
|
||||||
|
新功能:没有键盘全支持的场景可以用方向键控制光标操作 #329
|
||||||
新功能:自定义图片背景功能(可调透明度)(目前仅电脑可用)
|
新功能:自定义图片背景功能(可调透明度)(目前仅电脑可用)
|
||||||
新功能:支持摇杆和扳机(参数暂时不能调整)
|
新功能:支持摇杆和扳机(参数暂时不能调整)
|
||||||
新功能:没有键盘全支持的场景可以用方向键控制光标操作 #329
|
|
||||||
新BGM:malate(暂未使用)
|
|
||||||
新小程序:Memorize,Triple
|
新小程序:Memorize,Triple
|
||||||
改动:
|
新BGM:malate(暂未使用)
|
||||||
关闭背景的灰底亮度可调 #119
|
玩法改动:
|
||||||
美化各种控件样式
|
出块/消行延迟逻辑修正,现在真的是0延迟,不再有一帧等待了(可以比原来更滑一点)
|
||||||
调整游戏大logo为正体字
|
|
||||||
软降n格的键也可以触发深降
|
|
||||||
普通消1不再有single语音
|
|
||||||
优化键位设置菜单各种键的显示
|
|
||||||
优化大量菜单的背景颜色细节
|
|
||||||
修改默认和zday节日的主菜单BGM
|
|
||||||
平滑马拉松-普通和混战模式的速度曲线
|
|
||||||
三个高难隐形使用不同模式图标 #493
|
|
||||||
修改按钮音效,给复选框和选择器添加新音效
|
|
||||||
ultra模式计时器改为秒表,重开的时候会重播bgm
|
|
||||||
出块/消行延迟逻辑修正,现在真的是0延迟,不再有一帧等待了(略微影响手感,更滑)
|
|
||||||
大改重力和软降的结算逻辑,两个值接近的时候不会看起来不自然了 #438
|
大改重力和软降的结算逻辑,两个值接近的时候不会看起来不自然了 #438
|
||||||
Ospin变O后操作序列清空,变远端朝下JL时允许水平可移动
|
Ospin变O后操作序列清空,变远端朝下JL时允许水平可移动
|
||||||
生成位置预览开启后hold的生成位置也可见 #453
|
生成位置预览开启后hold的生成位置也可见 #453
|
||||||
|
ultra模式计时器改为秒表,重开的时候会重播bgm
|
||||||
TRS的S/Z添加四个踢墙防止在一些地方卡死
|
TRS的S/Z添加四个踢墙防止在一些地方卡死
|
||||||
优化pc训练模式体验,添加胜利条件,不再无尽
|
优化pc训练模式体验,添加胜利条件,不再无尽
|
||||||
|
平滑马拉松-普通和混战模式的速度曲线
|
||||||
堆积模式添加15帧的窒息延迟 #465
|
堆积模式添加15帧的窒息延迟 #465
|
||||||
|
软降n格的键也可以触发深降
|
||||||
|
系统改动:
|
||||||
|
美化各种控件样式
|
||||||
|
调整游戏大logo为正体字
|
||||||
|
优化大量菜单的背景颜色细节
|
||||||
|
普通消1不再有single语音
|
||||||
|
优化键位设置菜单各种键的显示
|
||||||
修改部分不常用设置时会显示警告
|
修改部分不常用设置时会显示警告
|
||||||
两种按钮上的文本也会挤压绘制了
|
关闭背景的灰底亮度可调 #119
|
||||||
|
修改默认和zday节日的主菜单BGM
|
||||||
|
修改按钮音效,给复选框和选择器添加新音效
|
||||||
|
三个高难隐形使用不同模式图标 #493
|
||||||
小程序arm加入计时器和重置按钮
|
小程序arm加入计时器和重置按钮
|
||||||
控制台使用等宽字体,更有味道(
|
控制台使用等宽字体,更对味
|
||||||
美化控制台help命令列表
|
美化控制台help命令列表
|
||||||
代码:
|
代码:
|
||||||
BGM模块可限制最大加载数,不容易达到上限导致没声 #447
|
BGM模块可限制最大加载数,不容易达到上限导致没声 #447
|
||||||
@@ -58,6 +58,7 @@ return[=[
|
|||||||
扩展字符串扩展模块
|
扩展字符串扩展模块
|
||||||
THEME模块移出框架
|
THEME模块移出框架
|
||||||
修复:
|
修复:
|
||||||
|
软降在sddas/sdarr很小的时候行为不正确
|
||||||
机翻语言超级消除无行数显示 #462
|
机翻语言超级消除无行数显示 #462
|
||||||
竞速-效率左侧信息颜色问题
|
竞速-效率左侧信息颜色问题
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
return{
|
return{
|
||||||
["apkCode"]=415,
|
["apkCode"]=416,
|
||||||
["code"]=1700,
|
["code"]=1700,
|
||||||
["string"]="V0.17.0",
|
["string"]="V0.17.0",
|
||||||
["room"]="ver A-2",
|
["room"]="ver A-2",
|
||||||
|
|||||||
Reference in New Issue
Block a user