Compare commits

..

8 Commits

Author SHA1 Message Date
MrZ626
36de1c0751 版本推进 2021-12-02 01:40:01 +08:00
MrZ626
704341fd15 修正软降在sddas/sdarr很小的时候行为不正确 2021-12-02 01:33:50 +08:00
MrZ626
22b61bc9c3 修正暂停界面数据显示条件为>=180帧而不是>180帧
key控件微调
2021-12-02 00:30:21 +08:00
MrZ626
f4cbbc0a2a 修复cc看不到初始场地 2021-12-01 22:15:54 +08:00
MrZ626
dc99187b9d 修改三个音效名称 2021-12-01 22:03:22 +08:00
MrZ626
915598dec4 整理代码,SFX模块load时会提示缺失多少音效 2021-12-01 19:23:39 +08:00
MrZ626
e7b4518d73 【警告:需要测试】
调整玩家能hold/移动/旋转方块的条件
修复cc复活后小bug
整理代码
2021-12-01 15:46:12 +08:00
NOT_A_ROBOT
9603a78e87 Halved field height for Big mode (#520)
* Halved field height for big mode

Co-authored-by: MrZ_26 <1046101471@qq.com>
2021-12-01 09:29:57 +08:00
29 changed files with 146 additions and 120 deletions

View File

@@ -42,16 +42,28 @@ function SFX.init(list)
end
function SFX.load(path)
local c=0
local missing=0
for i=1,#sfxList do
local fullPath=path..sfxList[i]..'.ogg'
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')}
c=c+1
else
LOG("No SFX: "..sfxList[i]..'.ogg',.1)
missing=missing+1
end
end
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
function SFX.loadSample(pack)
assert(type(pack)=='table',"Usage: SFX.loadsample([table])")

View File

@@ -303,17 +303,6 @@ function key:draw()
local align=self.align
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
if self.fShade then
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)
end
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_rectangle('fill',x,y,w,h,3)
end
@@ -351,7 +350,7 @@ function key:press(_,_,k)
SFX.play('key')
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
local _={
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,
fShade= D.fShade,
noFrame=D.noFrame,
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
font= D.font or 30,
fType=D.fType,
fType= D.fType,
sound= D.sound~=false,
align= D.align or'M',
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,
smooth=false,
font= D.font or 30,
fType=D.fType,
fType= D.fType,
change=D.change,
disp= D.disp,
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,
fType=D.fType,
fType= D.fType,
secret=D.secret==true,
regex= D.regex,
limit= D.limit,

View File

@@ -23,8 +23,7 @@ local fs=love.filesystem
VERSION=require"version"
TIME=love.timer.getTime
YIELD=coroutine.yield
SYSTEM=love.system.getOS()
if SYSTEM=='OS X'then SYSTEM='macOS'end
SYSTEM=love.system.getOS()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
MOBILE=SYSTEM=='Android'or SYSTEM=='iOS'
SAVEDIR=fs.getSaveDirectory()

View File

@@ -25,8 +25,8 @@ function bot_cc:revive()
self.P:loadAI(self.data)
end
function bot_cc:pushNewNext(id)
self.ccBot:addNext(rem(self.nexts,1))
ins(self.nexts,id)
self.ccBot:addNext(rem(self.bufferedNexts,1))
ins(self.bufferedNexts,id)
end
function bot_cc:thread()
local P,keys=self.P,self.keys

View File

@@ -12,7 +12,7 @@ local baseBot={
function baseBot.update(bot)
local P=bot.P
local keys=bot.keys
if P.control and P.waiting==0 then
if P.control and P.cur then
bot.delay=bot.delay-1
if not keys[1]then
if bot.runningThread then
@@ -85,7 +85,7 @@ function BOT.new(P,data)
if data.type=="CC"then
P:setRS('SRS')
bot.keys={}
bot.nexts={}
bot.bufferedNexts={}
bot.delay=data.delay
bot.delay0=data.delay
if P.gameEnv.holdCount>1 then
@@ -109,20 +109,25 @@ function BOT.new(P,data)
return
self.ccBot[k]and function(_,...)self.ccBot[k](self.ccBot,...)end or
cc_lua[k]and function(_,...)cc_lua[k](self,...)end or
baseBot[k]and baseBot[k]or
error("No actions called "..k)
assert(baseBot[k],"No CC action called "..k)
end})
for i,B in next,P.nextQueue do
if i<=data.next then
local pushed=0
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)
pushed=pushed+1
else
ins(bot.nexts,B.id)
ins(bot.bufferedNexts,B.id)
end
end
bot.runningThread=coroutine.wrap(cc_lua.thread)
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(require"parts.bot.bot_9s",bot)
P:setRS('TRS')

View File

@@ -3,6 +3,7 @@ return
drop=1,
wait=8,
fall=20,
fieldH=10,
mesDisp=function(P)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
PLY.draw.drawTargetLine(P,200-P.stat.row)

View File

@@ -5,6 +5,7 @@ return
drop=120,
wait=8,
fall=20,
fieldH=10,
mesDisp=function(P)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
PLY.draw.drawTargetLine(P,200-P.stat.row)

View File

@@ -10,7 +10,7 @@ return{
end
setField(P,D.finished+1)
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
P:win('finish')
end

View File

@@ -41,15 +41,15 @@ return{
if D.target==110 then
P.gameEnv.drop,P.gameEnv.lock=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
P.gameEnv.drop,P.gameEnv.lock=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
P.gameEnv.drop,P.gameEnv.lock=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
P:win('finish')
return

View File

@@ -40,7 +40,7 @@ return{
if D.target==110 then
P.gameEnv.drop,P.gameEnv.lock=2,2
P.gameEnv.sddas,P.gameEnv.sdarr=2,2
SFX.play('blip_1')
SFX.play('warn_1')
elseif D.target==200 then
P:win('finish')
return

View File

@@ -20,7 +20,7 @@ return{
D.pt=D.pt+s
if D.pt%100==99 then
SFX.play('blip_1')
SFX.play('warn_1')
elseif D.pt>=D.target then--Level up!
s=D.target/100--range from 1 to 9
local E=P.gameEnv

View File

@@ -24,7 +24,7 @@ return{
D.pt=D.pt+s
if D.pt%100==99 then
SFX.play('blip_1')
SFX.play('warn_1')
elseif D.pt>=D.target then--Level up!
s=D.target/100
local E=P.gameEnv

View File

@@ -24,7 +24,7 @@ return{
D.pt=D.pt+s
if D.pt%100==99 then
SFX.play('blip_1')
SFX.play('warn_1')
elseif D.pt>=D.target then--Level up!
s=D.target/100
local E=P.gameEnv

View File

@@ -147,7 +147,7 @@ return
P.modeData.target=260
p=260
SFX.play('blip_2')
SFX.play('warn_2')
SFX.play('reach')
else
p=260

View File

@@ -818,7 +818,7 @@ do--function checkWarning()
end
GAME.warnLVL=_
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
elseif GAME.warnLVL>0 then
GAME.warnLVL=max(GAME.warnLVL-.026,0)

View File

@@ -157,7 +157,7 @@ function NETPLY.setJoinMode(uid,ready)
return
end
end
SFX.play('blip_2',.5)
SFX.play('warn_2',.5)
end
end
return

View File

@@ -136,7 +136,7 @@ local function _newEmptyPlayer(id,mini)
}
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.waiting,P.falling=0,0
P.freshTime=0

View File

@@ -220,7 +220,7 @@ function Player:act_moveLeft(auto)
self.ctrlCount=self.ctrlCount+1
end
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
self:createMoveFX('left')
self.curX=self.curX-1
@@ -241,7 +241,7 @@ function Player:act_moveRight(auto)
self.ctrlCount=self.ctrlCount+1
end
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
self:createMoveFX('right')
self.curX=self.curX+1
@@ -258,21 +258,21 @@ function Player:act_moveRight(auto)
end
end
function Player:act_rotRight()
if self.control and self.cur then
if 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.cur then
if 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.cur then
if self.cur then
self.ctrlCount=self.ctrlCount+2
self:spin(2)
self.keyPressing[5]=false
@@ -280,7 +280,7 @@ function Player:act_rot180()
end
function Player:act_hardDrop()
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
SFX.play('drop_cancel',.3)
else
@@ -304,12 +304,19 @@ function Player:act_hardDrop()
end
end
function Player:act_softDrop()
self.downing=1
if self.control and self.cur then
self.downing=0
if self.cur then
if self.curY>self.ghoY then
self.curY=self.curY-1
self:freshBlock('fresh')
self.spinLast=false
if self.gameEnv.sddas==0 then
if self.gameEnv.sdarr==0 then
self:act_insDown()
else
self:act_down1()
self:act_down1()
end
else
self:act_down1()
end
self:checkTouchSound()
elseif self.gameEnv.deepdrop then
self:_deepdrop()
@@ -317,7 +324,7 @@ function Player:act_softDrop()
end
end
function Player:act_hold()
if self.control and self.cur then
if self.cur then
if self:hold()then
self.keyPressing[8]=false
end
@@ -819,7 +826,7 @@ function Player:receive(A,send,time,line)
self.atkBufferSum=self.atkBufferSum+send
self.stat.recv=self.stat.recv+send
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
if send>=2 then
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
local CB=self.cur.bk
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
--Move ghost to bottom
@@ -1325,7 +1332,7 @@ function Player:hold_swap(ifpre)
self.stat.hold=self.stat.hold+1
end
function Player:hold(ifpre)
if self.holdTime>0 and(ifpre or self.falling==0 and self.waiting==0)then
if self.holdTime>0 and(self.cur or ifpre)then
if self.gameEnv.holdMode=='hold'then
self:hold_norm(ifpre)
elseif self.gameEnv.holdMode=='swap'then
@@ -2048,7 +2055,7 @@ do
return _cc,_gbcc
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.data=data
end
@@ -2301,6 +2308,9 @@ local function update_alive(P)
P.control=true
P.timing=true
P:popNext()
if P.bot then
P.bot:updateField()
end
end
if P.movDir~=0 then
if P.moving<P.gameEnv.das then
@@ -2413,8 +2423,7 @@ local function update_alive(P)
--Drop pressed
if P.keyPressing[7]then
P.downing=P.downing+1
local d=P.downing-ENV.sddas
if d>1 then
if P.downing>=ENV.sddas then
if ENV.sdarr==0 then
P:act_insDown()
end
@@ -2423,7 +2432,7 @@ local function update_alive(P)
end
end
else
P.downing=0
P.downing=-1
end
local stopAtFalling
@@ -2457,7 +2466,7 @@ local function update_alive(P)
local dist--Drop distance
if D>1 then
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)
end
if D<=0 then
@@ -2468,7 +2477,7 @@ local function update_alive(P)
goto THROW_stop
end
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
else
dist=1

View File

@@ -187,7 +187,7 @@ function scene.update(dt)
speed=speed+.2
end
level=level+1
SFX.play('blip_1')
SFX.play('warn_1')
end
sunH=sunH+.01
elseif menu==1 then

View File

@@ -209,7 +209,7 @@ function scene.keyDown(key)
elseif key=='n'then
ins(FIELD,page+1,DATA.newBoard(FIELD[page]))
page=page+1
SFX.play('blip_1',.8)
SFX.play('warn_1',.8)
SYSFX.newShade(3,200,60,300,600,.5,1,.5)
elseif key=='m'then
rem(FIELD,page)
@@ -438,32 +438,32 @@ scene.widgetList={
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.newButton{name='b1', x=580, y=130,w=76,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='b3', x=740, y=130,w=76,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='b5', x=900, y=130,w=76,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='b7', x=1060,y=130,w=76,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='b1', x=580, y=130,w=73,fText="",color='R',code=_setPen(1)},--B1
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=73,fText="",color='O',code=_setPen(3)},--B3
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=73,fText="",color='L',code=_setPen(5)},--B5
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=73,fText="",color='G',code=_setPen(7)},--B7
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='b10', x=660, y=210,w=76,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='b12', x=820, y=210,w=76,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='b14', x=980, y=210,w=76,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='b16', x=1140,y=210,w=76,fText="",color='W',code=_setPen(16)},--B16
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=73,fText="",color='N',code=_setPen(10)},--B10
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=73,fText="",color='B',code=_setPen(12)},--B12
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=73,fText="",color='P',code=_setPen(14)},--B14
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=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='b18', x=660, y=290,w=76,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='b20', x=820, y=290,w=76,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='b22', x=980, y=290,w=76,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='b24', x=1140,y=290,w=76,font=40,fText=CHAR.icon.garbage,color='dG',code=_setPen(24)},--GB5
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=73,font=40,fText=CHAR.icon.invis, color='D', code=_setPen(18)},--HIDE
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=73,font=40,fText=CHAR.icon.garbage,color='H', code=_setPen(20)},--GB1
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=73,font=40,fText=CHAR.icon.garbage,color='dV',code=_setPen(22)},--GB3
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=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='space', x=730, y=400,w=120,color='H', font=55,code=_setPen(-1),fText=CHAR.icon.cross_thick},

View File

@@ -53,12 +53,12 @@ pad={x=140,y=65,page=1,
{samp={tag='clear_7',func=function()playClearSFX(7)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='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_5'}, {sfx='ren_6'}, {sfx='ren_7'}, {sfx='ren_8'}, {}, {sfx='collect'},{sfx='emit'}, {sfx='blip_1'}},
{{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='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='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='warn_1'}},
{{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'},{}},
},
{
{{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='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'}},
{{sfx='ren_1'}, {sfx='ren_2'}, {sfx='ren_3'}, {sfx='ren_4'}, {sfx='blip_1'}, {sfx='warning'}, {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_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='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'}},
},
{

View File

@@ -200,7 +200,7 @@ function scene.socketRead(cmd,d)
COLOR.dY,"#"..d.uid.." ",
COLOR.Y,text.joinRoom,
}
SFX.play('click')
SFX.play('warn_1')
elseif cmd=='leave'then
textBox:push{
COLOR.lR,d.username,

View File

@@ -222,7 +222,7 @@ function scene.draw()
end
--Big info frame
if PLAYERS[1].frameRun>180 then
if PLAYERS[1].frameRun>=180 then
gc.push('transform')
gc.translate(560,205)
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='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='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}},
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,
},
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}},
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,

View File

@@ -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='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='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='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},

View File

@@ -19,35 +19,35 @@ return[=[
新机制:出块延迟打断(ARE打断)(默认关闭) #471
新机制:锁定在外判负(lockout)(默认关闭)
新机制:全局默认使用5帧窒息延迟
新功能:没有键盘全支持的场景可以用方向键控制光标操作 #329
新功能:自定义图片背景功能(可调透明度)(目前仅电脑可用)
新功能:支持摇杆和扳机(参数暂时不能调整)
新功能:没有键盘全支持的场景可以用方向键控制光标操作 #329
新BGM:malate(暂未使用)
新小程序:Memorize,Triple
改动:
关闭背景的灰底亮度可调 #119
美化各种控件样式
调整游戏大logo为正体字
软降n格的键也可以触发深降
普通消1不再有single语音
优化键位设置菜单各种键的显示
优化大量菜单的背景颜色细节
修改默认和zday节日的主菜单BGM
平滑马拉松-普通和混战模式的速度曲线
三个高难隐形使用不同模式图标 #493
修改按钮音效,给复选框和选择器添加新音效
ultra模式计时器改为秒表,重开的时候会重播bgm
出块/消行延迟逻辑修正,现在真的是0延迟,不再有一帧等待了(略微影响手感,更滑)
新BGM:malate(暂未使用)
玩法改动:
出块/消行延迟逻辑修正,现在真的是0延迟,不再有一帧等待了(可以比原来更滑一点)
大改重力和软降的结算逻辑,两个值接近的时候不会看起来不自然了 #438
Ospin变O后操作序列清空,变远端朝下JL时允许水平可移动
生成位置预览开启后hold的生成位置也可见 #453
ultra模式计时器改为秒表,重开的时候会重播bgm
TRS的S/Z添加四个踢墙防止在一些地方卡死
优化pc训练模式体验,添加胜利条件,不再无尽
平滑马拉松-普通和混战模式的速度曲线
堆积模式添加15帧的窒息延迟 #465
软降n格的键也可以触发深降
系统改动:
美化各种控件样式
调整游戏大logo为正体字
优化大量菜单的背景颜色细节
普通消1不再有single语音
优化键位设置菜单各种键的显示
修改部分不常用设置时会显示警告
两种按钮上的文本也会挤压绘制了
关闭背景的灰底亮度可调 #119
修改默认和zday节日的主菜单BGM
修改按钮音效,给复选框和选择器添加新音效
三个高难隐形使用不同模式图标 #493
小程序arm加入计时器和重置按钮
控制台使用等宽字体,更有味道(
控制台使用等宽字体,更对味
美化控制台help命令列表
代码:
BGM模块可限制最大加载数,不容易达到上限导致没声 #447
@@ -58,6 +58,7 @@ return[=[
扩展字符串扩展模块
THEME模块移出框架
修复:
软降在sddas/sdarr很小的时候行为不正确
机翻语言超级消除无行数显示 #462
竞速-效率左侧信息颜色问题

View File

@@ -1,5 +1,5 @@
return{
["apkCode"]=415,
["apkCode"]=416,
["code"]=1700,
["string"]="V0.17.0",
["room"]="ver A-2",