Compare commits

...

2 Commits

Author SHA1 Message Date
MrZ_26
fd5fac4e8a 0.7.32α 2020-02-04 19:37:53 +08:00
MrZ_26
1641440886 0.7.31+α 2020-02-04 19:37:41 +08:00
30 changed files with 635 additions and 558 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -108,7 +108,6 @@ function switch:draw()
--frame
local t=self.text
if t then
if type(t)=="function"then t=t()end
gc.setColor(1,1,1)
setFont(self.font)
gc.printf(t,x-412,y+20-self.font*.7,400,"right")

View File

@@ -1,5 +1,5 @@
math.randomseed(os.time())
gameVersion="Alpha V0.7.30"
gameVersion="Alpha V0.7.32"
function love.conf(t)
t.identity="Techmino"--Save directory name
t.version="11.1"
@@ -23,7 +23,7 @@ function love.conf(t)
W.resizable=1
W.fullscreentype="desktop"--"exclusive"
W.fullscreen=X
W.vsync=X--0→∞fps
W.vsync=0--0→∞fps
W.msaa=X--The number of samples to use with multi-sampled antialiasing (number)
W.depth=X--Bits per sample in the depth buffer
W.stencil=1--The number of bits per sample in the stencil buffer

File diff suppressed because it is too large Load Diff

View File

@@ -19,8 +19,9 @@ setting={
skin=1,
--graphic
sfx=8,bgm=6,
sfx=10,bgm=7,
vib=3,voc=0,
stereo=6,
--sound
keyMap={
@@ -33,6 +34,7 @@ setting={
},
VKSwitch=true,
VKTrack=true,--If tracked
VKDodge=false,--If repel
VKTchW=3,--Touch Weight
VKCurW=4,--CurPos Weight
VKIcon=true,

BIN
font.ttf

Binary file not shown.

View File

@@ -192,7 +192,7 @@ return{
warning="禁 止 私 自 传 播",
WidgetText={
main={
lang="",
lang="-Lang",
qplay="快速开始",
play="开始",
setting="设置",
@@ -256,6 +256,7 @@ return{
pause={
resume= "继续",
restart="重新开始",
setting="设置",
quit= "退出",
},
setting_game={
@@ -324,6 +325,7 @@ return{
back=BK,
},
setting_trackSetting={
VKDodge="自动避让",
back=BK,
},
help={

View File

@@ -192,7 +192,7 @@ return{
warning="禁 止 私 自 传 播",
WidgetText={
main={
lang="全中",
lang="-Lang",
qplay="快速开始",
play="开始",
setting="设置",
@@ -256,6 +256,7 @@ return{
pause={
resume= "继续",
restart="重新开始",
setting="设置",
quit= "退出",
},
@@ -325,6 +326,7 @@ return{
back=BK,
},
setting_trackSetting={
VKDodge="自动避让",
back=BK,
},
help={
@@ -342,4 +344,4 @@ return{
back=BK,
},
},
}--部分译文
}

View File

@@ -191,7 +191,7 @@ Lib used:
warning="DO NOT DISTRIBUTE",
WidgetText={
main={
lang="English",
lang="文-Lang",
qplay="Qplay",
play="Play",
setting="Settings",
@@ -255,6 +255,7 @@ Lib used:
pause={
resume="Resume",
restart="Restart",
setting="Setting",
quit="Quit",
},
setting_game={
@@ -323,6 +324,7 @@ Lib used:
back=BK,
},
setting_trackSetting={
VKDodge="Auto Dodge",
back=BK,
},
help={

View File

@@ -57,17 +57,20 @@ blockColor={
}
sfx={
"welcome",
"error","error_long",
--Stereo sfxs
"button","swipe",
"ready","start","win","fail","collect",
"move","rotate","rotatekick","hold",
"prerotate","prehold",
"lock","drop","fall",
"error","error_long","reach",
"reach",
"ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11","ren_mega",
"clear_1","clear_2","clear_3","clear_4",
"spin_0","spin_1","spin_2","spin_3",
"emit","blip_1","blip_2",
"perfectclear",
--mono sfxs
}
bgm={
"blank",
@@ -163,7 +166,7 @@ customRange={
RCPB={10,33,200,33,105,5,105,60}
snapLevelValue={1,10,20,40,60,80}
up0to4={[0]="000%UP","025%UP","050%UP","075%UP","100%UP",}
sectionName={"M7","M8","M9","M","MK","MV","MO","MM","GM"}
modeID={
[0]="custom",
"sprint","marathon","master","classic","zen","infinite","solo","round","tsd","blind",
@@ -330,7 +333,7 @@ Widget={
back= newButton(640, 630,230,90, color.white, 45,scene.back),
},
music={
bgm= newSlider(760, 80,400,8,40,nil,function()return setting.bgm end,function(i)setting.bgm=i;BGM(bgmPlaying)end),
bgm= newSlider(760, 80,400,10,40,nil,function()return setting.bgm end,function(i)setting.bgm=i;BGM(bgmPlaying)end),
up= newButton(1100, 200,120,120,color.white,60,function()love.keypressed("up")end),
play= newButton(1100, 340,120,120,color.white,40,function()love.keypressed("space")end,function()return setting.bgm==0 end),
down= newButton(1100, 480,120,120,color.white,60,function()love.keypressed("down")end),
@@ -380,6 +383,10 @@ Widget={
resetGameData()
scene.swapTo("play","none")
end),
setting=newButton(1150,80,200,100,color.yellow,45,function()
scene.push()
scene.swapTo("setting_sound")
end),
quit= newButton(640,600,240,100,color.white,50,scene.back),
},
setting_game={
@@ -445,10 +452,10 @@ Widget={
setting_sound={
game= newButton(200,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_game")end, nil,"graphic"),
graphic=newButton(1080,80,240,80,color.lightGreen,40,function()scene.swapTo("setting_graphic")end, nil,"sfx"),
sfx=newSlider(180,250,400,8,40,function()SFX("blip_1")end, function()return setting.sfx end,function(i)setting.sfx=i end,nil,"bgm"),
bgm=newSlider(750,250,400,8,40,function()BGM(bgmPlaying or"blank")end, function()return setting.bgm end,function(i)setting.bgm=i end,nil,"vib"),
sfx=newSlider(180,250,400,10,40,function()SFX("blip_1")end, function()return setting.sfx end,function(i)setting.sfx=i end,nil,"bgm"),
bgm=newSlider(750,250,400,10,40,function()BGM(bgmPlaying or"blank")end, function()return setting.bgm end,function(i)setting.bgm=i end,nil,"vib"),
vib=newSlider(180,440,400,5,40,function()VIB(1)end, function()return setting.vib end,function(i)setting.vib=i end,nil,"voc"),
voc=newSlider(750,440,400,8,40,function()VOICE("nya")end, function()return setting.voc end,function(i)setting.voc=i end,nil,"back"),
voc=newSlider(750,440,400,10,40,function()VOICE("nya")end, function()return setting.voc end,function(i)setting.voc=i end,nil,"back"),
back=newButton(1160,600,160,160,color.white,55,scene.back,nil,"game"),
},
setting_key={
@@ -527,6 +534,7 @@ Widget={
back= newButton(1080,600,240,80,color.white,50,scene.back),
},
setting_trackSetting={
VKDodge= newSwitch(400,200, 40,function()return setting.VKDodge end,function()setting.VKDodge=not setting.VKDodge end),
VKTchW= newSlider(140,310,1000,10,40,nil,function()return setting.VKTchW end,function(i)setting.VKTchW=i;setting.VKCurW=math.max(setting.VKCurW,i)end),
VKCurW= newSlider(140,370,1000,10,40,nil,function()return setting.VKCurW end,function(i)setting.VKCurW=i;setting.VKTchW=math.min(setting.VKTchW,i)end),
back= newButton(1080,600,240,80,color.white,50,scene.back),

View File

@@ -121,13 +121,15 @@ local function getNewBlock()
return t
end
local function onVirtualkey(x,y)
local d1,nearest,distance
local dist,nearest=1e15
for K=1,#virtualkey do
local b=virtualkey[K]
d1=(x-b.x)^2+(y-b.y)^2
if d1<b.r^2 then
if not nearest or d1<distance then
nearest,distance=K,d1
if b.ava then
local d1=(x-b.x)^2+(y-b.y)^2
if d1<b.r^2 then
if d1<dist then
nearest,dist=K,d1
end
end
end
end
@@ -497,15 +499,17 @@ function touchDown.play(id,x,y)
players[1]:pressKey(t)
if setting.VKTrack then
local B=virtualkey[t]
for i=1,#virtualkey do
local b=virtualkey[i]
local d=B.r+b.r-((B.x-b.x)^2+(B.y-b.y)^2)^.5--碰撞深度(负数=间隔距离)
if d>0 then
b.x=b.x+(b.x-B.x)*d*b.r*.00005
b.y=b.y+(b.y-B.y)*d*b.r*.00005
--按钮软碰撞(做不来hhh随便做一个,效果还行!)
if setting.VKDodge then
for i=1,#virtualkey do
local b=virtualkey[i]
local d=B.r+b.r-((B.x-b.x)^2+(B.y-b.y)^2)^.5--碰撞深度(负数=间隔距离)
if d>0 then
b.x=b.x+(b.x-B.x)*d*b.r*.00005
b.y=b.y+(b.y-B.y)*d*b.r*.00005
end
end
end
--按钮软碰撞(做不来hhh随便做一个,效果还行!)
local O=VK_org[t]
local _FW,_CW=setting.VKTchW*.1,1-setting.VKCurW*.1
local _OW=1-_FW-_CW
@@ -930,7 +934,7 @@ function love.update(dt)
end
end
Q[1]=L[n]
Q[1]:setVolume(setting.voc*.125)
Q[1]:setVolume(setting.voc*.1)
Q[1]:play()
--load voice with string
end

View File

@@ -11,6 +11,7 @@ local scr=scr--screen camera
local gameEnv0={
das=10,arr=2,
sddas=2,sdarr=2,
quickR=true,swap=true,
ghost=true,center=true,
grid=false,swap=true,
_20G=false,bone=false,
@@ -286,9 +287,8 @@ local mesDisp={
classic=function(P)
setFont(80)
local r=P.gameEnv.target*.1
mStr(r<11 and 19+r or r==11 and"00"or r==12 and"0a"or format("%x",r*10-110),-82,210)
setFont(20)
mStr("speed level",-82,290)
mStr(r<11 and 18 or r<22 and r+8 or r==22 and"00"or r==23 and"0a"or format("%x",r*10-220),-82,210)
mDraw(drawableText.speedLV,-82,290)
setFont(50)
mStr(P.stat.row,-82,320)
mStr(P.gameEnv.target,-82,370)
@@ -302,24 +302,21 @@ local mesDisp={
setFont(50)
mStr(P.stat.atk,-82,310)
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
setFont(20)
mStr("Attack",-82,363)
mStr("Efficiency",-82,475)
mDraw(drawableText.atk,-82,363)
mDraw(drawableText.eff,-82,475)
end,
tsd=function(P)
setFont(35)
mStr("TSD",-82,407)
setFont(80)
mStr(P.modeData.event,-82,330)
mDraw(drawableText.tsd,-82,407)
end,
blind=function(P)
setFont(25)
mStr("Lines",-82,300)
mStr("Techrash",-82,420)
mDraw(drawableText.line,-82,300)
mDraw(drawableText.techrash,-82,420)
if curMode.lv==6 then
mStr("Point",-82,170)
mDraw(drawableText.grade,-82,170)
setFont(60)
mStr(P.modeData.point*.1,-82,110)
mStr(P.modeData.event,-82,110)
end
setFont(80)
mStr(P.stat.row,-82,220)
@@ -328,57 +325,51 @@ local mesDisp={
dig=function(P)
setFont(70)
mStr(P.modeData.event,-82,310)
setFont(30)
mStr("Wave",-82,375)
mDraw(drawableText.wave,-82,375)
end,
survivor=function(P)
setFont(70)
mStr(P.modeData.event,-82,310)
setFont(30)
mStr("Wave",-82,375)
mDraw(drawableText.wave,-82,375)
end,
defender=function(P)
setFont(60)
mStr(P.modeData.point,-82,315)
setFont(30)
mStr("RPM",-82,375)
mDraw(drawableText.rpm,-82,375)
end,
attacker=function(P)
setFont(60)
mStr(P.modeData.point,-82,315)
setFont(30)
mStr("RPM",-82,375)
mDraw(drawableText.rpm,-82,375)
end,
tech=function(P)
setFont(50)
mStr(P.stat.atk,-82,310)
mStr(format("%.2f",P.stat.atk/P.stat.row),-82,420)
setFont(20)
mStr("Attack",-82,363)
mStr("Efficiency",-82,475)
mDraw(drawableText.atk,-82,363)
mDraw(drawableText.eff,-82,475)
end,
c4wtrain=function(P)
setFont(50)
mStr(max(100-P.stat.row,0),-82,220)
mStr(P.combo,-82,310)
mStr(P.modeData.point,-82,400)
setFont(20)
mStr("combo",-82,358)
mStr("max combo",-82,450)
mDraw(drawableText.combo,-82,358)
mDraw(drawableText.mxcmb,-82,450)
end,
pctrain=function(P)
setFont(22)
mStr("Perfect Clear",-82,412)
setFont(80)
mStr(P.stat.pc,-82,330)
mDraw(drawableText.pc,-82,412)
end,
pcchallenge=function(P)
setFont(22)
mStr("Perfect Clear",-82,432)
setFont(80)
mStr(P.stat.pc,-82,350)
setFont(50)
mStr(max(100-P.stat.row,0),-82,250)
setFont(80)
mStr(P.stat.pc,-82,350)
mDraw(drawableText.pc,-82,432)
gc.setColor(.5,.5,.5)
if frame>179 then
local y=72*(7-(P.stat.piece+(P.hd.id>0 and 2 or 1))%7)-36
@@ -389,8 +380,8 @@ local mesDisp={
setFont(40)
mStr(#players.alive.."/49",-82,175)
mStr(P.ko,-70,215)
gc.draw(drawableText.ko,-127,225)
setFont(25)
gc.print("KO",-127,225)
gc.setColor(1,.5,0,.6)
gc.print(P.badge,-47,227)
gc.setColor(1,1,1)
@@ -404,8 +395,8 @@ local mesDisp={
setFont(40)
mStr(#players.alive.."/99",-82,175)
mStr(P.ko,-70,215)
gc.draw(drawableText.ko,-127,225)
setFont(25)
gc.print("KO",-127,225)
gc.setColor(1,.5,0,.6)
gc.print(P.badge,-47,227)
gc.setColor(1,1,1)
@@ -421,10 +412,9 @@ local mesDisp={
end,
custom=function(P)
if P.gameEnv.puzzle or P.gameEnv.target>1e10 then
setFont(25)
mStr("Lines",-82,290)
setFont(60)
mStr(P.stat.row,-82,225)
mDraw(drawableText.line,-82,290)
else
setFont(60)
mStr(max(P.gameEnv.target-P.stat.row,0),-82,240)
@@ -554,7 +544,7 @@ function newDemoPlayer(id,x,y,size)
P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
P.moving,P.downing=0,0
P.waiting,P.falling=-1,-1
P.clearing={}
P.clearing,P.cleared={},{}
P.combo,P.b2b=0,0
P.fieldBeneath=0
P.shade={}
@@ -703,7 +693,7 @@ function newPlayer(id,x,y,size,AIdata)
P.keyPressing={}for i=1,12 do P.keyPressing[i]=false end
P.moving,P.downing=0,0
P.waiting,P.falling=-1,-1
P.clearing={}
P.clearing,P.cleared={},{}
P.combo,P.b2b=0,0
P.fieldBeneath=0
@@ -804,9 +794,7 @@ function player.update(P,dt)
else
local L=#P.clearing
if P.human and P.gameEnv.fall>0 and #P.field+L>P.clearing[L]then SFX("fall")end
for i=1,L do
P.clearing[i]=nil
end
P.clearing,P.cleared={},{}
end
end
if not P.control then goto stop end
@@ -865,9 +853,7 @@ function player.update(P,dt)
else
local L=#P.clearing
if P.human and P.gameEnv.fall>0 and #P.field+L>P.clearing[L]then SFX("fall")end
for i=1,L do
P.clearing[i]=nil
end
P.clearing,P.cleared={},{}
end
end::stop::
if P.endCounter<40 then
@@ -1383,6 +1369,7 @@ local function checkrow(P,start,height)--(cy,r)
for i=1,height do
if ckfull(P,h)then
ins(P.clearing,h)
ins(P.cleared,h+c)
removeRow(P.field,h)
removeRow(P.visTime,h)
c=c+1
@@ -1410,6 +1397,9 @@ local function solid(P,x,y)
if y>#P.field then return false end
return P.field[y][x]>0
end
local function getBlockDirection(P)
return(P.curX+P.sc[2]-6.5)*.15
end
function player:fineError(rate)
self.stat.extraPiece=self.stat.extraPiece+1
@@ -1697,7 +1687,7 @@ function player:spin(d,ifpre)
self.spinLast=2
self.stat.rotate=self.stat.rotate+1
self:freshgho()
SFX("rotatekick")
SFX("rotatekick",nil,getBlockDirection(self))
return
end
else
@@ -1705,7 +1695,7 @@ function player:spin(d,ifpre)
end
end
if self.human then
SFX(ifpre and"prerotate"or"rotate")
SFX(ifpre and"prerotate"or"rotate",nil,getBlockDirection(self))
end
return
end
@@ -1736,9 +1726,8 @@ function player:spin(d,ifpre)
if not ifpre then self:freshgho()end
if self.gameEnv.easyFresh or y0>self.curY then self:freshLockDelay()end
if self.human then
SFX(ifpre and"prerotate"or ifoverlap(self,self.cur.bk,self.curX,self.curY+1)and ifoverlap(self,self.cur.bk,self.curX-1,self.curY)and ifoverlap(self,self.cur.bk,self.curX+1,self.curY)and"rotatekick"or"rotate")
SFX(ifpre and"prerotate"or ifoverlap(self,self.cur.bk,self.curX,self.curY+1)and ifoverlap(self,self.cur.bk,self.curX-1,self.curY)and ifoverlap(self,self.cur.bk,self.curX+1,self.curY)and"rotatekick"or"rotate",nil,getBlockDirection(self))
end
self.ctrlCount=self.ctrlCount+(d==2 and 2 or 1)
self.stat.rotate=self.stat.rotate+1
end
function player:hold(ifpre)
@@ -1810,7 +1799,7 @@ function player:resetblock()
self:freshgho()
if self.keyPressing[6]then self.act.hardDrop(self)self.keyPressing[6]=false end
end
function player:drop()--(Place piece)
function player:drop()--Place piece
self.dropTime[11]=ins(self.dropTime,1,frame)--update speed dial
self.waiting=self.gameEnv.wait
local dospin=0
@@ -2086,7 +2075,7 @@ function player:drop()--(Place piece)
self:garbageSend(T,send,sendTime,1,self.cur.color,self.lastClear,dospin,mini,self.combo)
end
self.stat.send=self.stat.send+send
if self.human and send>3 then SFX("emit",min(send,8)*.125)end
if self.human and send>3 then SFX("emit",min(send,8)*.1)end
end
end
else
@@ -2111,7 +2100,7 @@ function player:drop()--(Place piece)
self.stat.score=self.stat.score+cscore
self.stat.piece,self.stat.row=self.stat.piece+1,self.stat.row+cc
Event[self.gameEnv.dropPiece](self)
if self.human then SFX("lock")end
if self.human then SFX("lock",nil,getBlockDirection(self))end
end
function player:pressKey(i)
self.keyPressing[i]=true
@@ -2136,8 +2125,11 @@ end
-------------------------<Controls>-------------------------
player.act={}
function player.act.moveLeft(P,auto)
if not auto then
P.ctrlCount=P.ctrlCount+1
end
if P.keyPressing[9]then
if setting.swap then
if P.gameEnv.swap then
P:changeAtkMode(1)
end
elseif P.control and P.waiting==-1 then
@@ -2150,7 +2142,6 @@ function player.act.moveLeft(P,auto)
P.spinLast=false
if not auto then
P.moving=-1
P.ctrlCount=P.ctrlCount+1
end
else
P.moving=-P.gameEnv.das-1
@@ -2160,8 +2151,11 @@ function player.act.moveLeft(P,auto)
end
end
function player.act.moveRight(P,auto)
if not auto then
P.ctrlCount=P.ctrlCount+1
end
if P.keyPressing[9]then
if setting.swap then
if P.gameEnv.swap then
P:changeAtkMode(2)
end
elseif P.control and P.waiting==-1 then
@@ -2174,7 +2168,6 @@ function player.act.moveRight(P,auto)
P.spinLast=false
if not auto then
P.moving=1
P.ctrlCount=P.ctrlCount+1
end
else
P.moving=P.gameEnv.das+1
@@ -2185,25 +2178,28 @@ function player.act.moveRight(P,auto)
end
function player.act.rotRight(P)
if P.control and P.waiting==-1 then
P.ctrlCount=P.ctrlCount+1
P:spin(1)
P.keyPressing[3]=false
end
end
function player.act.rotLeft(P)
if P.control and P.waiting==-1 then
P.ctrlCount=P.ctrlCount+1
P:spin(3)
P.keyPressing[4]=false
end
end
function player.act.rotFlip(P)
if P.control and P.waiting==-1 then
P.ctrlCount=P.ctrlCount+2
P:spin(2)
P.keyPressing[5]=false
end
end
function player.act.hardDrop(P)
if P.keyPressing[9]then
if setting.swap then
if P.gameEnv.swap then
P:changeAtkMode(3)
end
P.keyPressing[6]=false
@@ -2220,7 +2216,7 @@ function player.act.hardDrop(P)
P.curY=P.y_img
P.spinLast=false
if P.human then
SFX("drop")
SFX("drop",nil,getBlockDirection(P))
VIB(1)
end
end
@@ -2231,7 +2227,7 @@ function player.act.hardDrop(P)
end
function player.act.softDrop(P)
if P.keyPressing[9]then
if setting.swap then
if P.gameEnv.swap then
P:changeAtkMode(4)
end
else
@@ -2253,7 +2249,7 @@ function player.act.func(P)
P.gameEnv.Fkey(P)
end
function player.act.restart(P)
if setting.quickR or frame<180 then
if P.gameEnv.quickR or frame<180 then
clearTask("play")
resetPartGameData()
end
@@ -2359,5 +2355,4 @@ function player.act.addRight(P)
P.act.insLeft(P)
P.act.hardDrop(P)
end
-------------------------</Controls>-------------------------

View File

@@ -66,13 +66,23 @@ local sceneInit={
if needResetGameData then
resetGameData()
needResetGameData=nil
else
BGM(modeEnv.bgm)
end
curBG=modeEnv.bg
end,
pause=function()
curBG=modeEnv.bg
end,
setting_game=function()
curBG="none"
end,
setting_graphic=function()
curBG="none"
end,
setting_sound=function()
curBG="none"
end,
setting_key=function()
curBoard=1
keyboardSet=1
@@ -170,6 +180,9 @@ function scene.push(tar,style)
scene.seq[m+2]=style or"fade"
end
end
function scene.pop()
scene.seq={}
end
function scene.swapTo(tar,style)
local S=scene.swap
if not scene.swapping and tar~=scene.cur then

View File

@@ -64,6 +64,19 @@ payCode=N("/image/mess/paycode.png")
drawableText={
question=T(100,"?"),
bpm=T(15,"BPM"),kpm=T(15,"KPM"),
speedLV=T(20,"speed level"),
atk=T(20,"Attack"),
eff=T(20,"Efficiency"),
tsd=T(35,"TSD"),
line=T(25,"Lines"),
techrash=T(25,"Techrash"),
grade=T(25,"Grade"),
wave=T(30,"Wave"),
rpm=T(35,"RPM"),
combo=T(20,"Combo"),
mxcmb=T(20,"Max Combo"),
pc=T(22,"Perfect Clear"),
ko=T(25,"KO"),
modeName=T(30),levelName=T(30),
next=T(40),hold=T(40),

View File

@@ -129,19 +129,29 @@ function VIB(t)
love.system.vibrate(vibrateLevel[setting.vib+t])
end
end
function SFX(s,v)
function SFX(s,v,pos)
if setting.sfx>0 then
local S=sfx[s]--AU_Queue
local n=1
while sfx[s][n]:isPlaying()do
while S[n]:isPlaying()do
n=n+1
if not sfx[s][n]then
sfx[s][n]=sfx[s][n-1]:clone()
sfx[s][n]:seek(0)
if not S[n]then
S[n]=S[n-1]:clone()
S[n]:seek(0)
break
end
end
sfx[s][n]:setVolume((v or 1)*setting.sfx*.125)
sfx[s][n]:play()
S=S[n]--AU_SRC
if S:getChannelCount()==1 then
if pos then
pos=pos*setting.stereo*.1
S:setPosition(pos,1-pos^2,0)
else
S:setPosition(0,0,0)
end
end
S:setVolume((v or 1)*setting.sfx*.1)
S:play()
end
end
function getFreeVoiceChannel()
@@ -182,7 +192,7 @@ function BGM(s)
bgmPlaying=s
else
if bgmPlaying then
local v=setting.bgm*.125
local v=setting.bgm*.1
bgm[bgmPlaying]:setVolume(v)
if v>0 then
bgm[bgmPlaying]:play()
@@ -330,7 +340,7 @@ function resetGameData()
pauseTime=0--Time paused
pauseCount=0--Times paused
destroyPlayers()
local E=defaultModeEnv[curMode.id]
local E=defModeEnv[curMode.id]
modeEnv=E[curMode.lv]or E[1]
loadmode[curMode.id]()--bg/bgm need redefine in custom,so up here
if modeEnv.task then
@@ -436,23 +446,27 @@ function loadSetting()
local p=find(t[i],"=")
if p then
local t,v=sub(t[i],1,p-1),sub(t[i],p+1)
if t=="sfx"or t=="bgm"or t=="voc"then
setting[t]=toN(v:match("[012345678]"))or setting[t]
if
--声音
t=="sfx"or t=="bgm"or t=="voc"or t=="stereo"or
--三个触摸设置项
t=="VKTchW"or t=="VKCurW"or t=="VKAlpha"
then
v=toN(v)
if v==int(v)and v>=0 and v<=10 then
setting[t]=v
end
elseif t=="vib"then
setting.vib=toN(v:match("[012345]"))or 0
elseif t=="fullscreen"then
setting.fullscreen=v=="true"
love.window.setFullscreen(setting.fullscreen)
elseif
--三个触摸设置项
t=="VKTchW"or t=="VKCurW"or t=="VKAlpha"
then
setting.VKTchW=min(int(abs(toN(v))),10)
elseif
--开关设置们
t=="bg"or
t=="ghost"or t=="center"or t=="grid"or t=="swap"or
t=="quickR"or t=="fine"or t=="bgblock"or t=="smo"or
t=="VKSwitch"or t=="VKTrack"or t=="VKIcon"
t=="VKSwitch"or t=="VKTrack"or t=="VKDodge"or t=="VKIcon"
then
setting[t]=v=="true"
elseif t=="frameMul"then
@@ -511,9 +525,11 @@ local saveOpt={
"sfx","bgm",
"vib","voc",
"stereo",
"VKSwitch",
"VKTrack",
"VKDodge",
"VKIcon",
"VKAlpha",
}

View File

@@ -4,7 +4,6 @@ Patron(rmb10+):
[D*a]?
Future outlook:
Normal Things:
in-game setting(scene-sequence system)
powerinfo switch
splashing block
ajustable next count
@@ -24,7 +23,17 @@ Future outlook:
infinite 1v1
square mode
more FXs & 3d features & animations
0.7.29:
0.7.32:
Blind-GM now show section directly
easier&more standard classic mode
can switch Virtualkey's auto dodging
in-game setting
code optimized
bug fixed
0.7.31:
stereo system
fixed a problem in finesse calculating
0.7.30:
auto-tracking virtual key,adjustable parameters!
can switch on/off virtuakeys
add 7 more key