Compare commits
17 Commits
pre0.17.0-
...
pre0.17.0-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fdd1d4463a | ||
|
|
940ac3736c | ||
|
|
d38897b54d | ||
|
|
90848c6654 | ||
|
|
0220d5aefc | ||
|
|
f42032df07 | ||
|
|
05d7eb60bc | ||
|
|
942416317c | ||
|
|
576de945fb | ||
|
|
8b02084428 | ||
|
|
9f666d69db | ||
|
|
a4c52d9162 | ||
|
|
592b11366e | ||
|
|
07f50b9243 | ||
|
|
ec74d55686 | ||
|
|
4518513e87 | ||
|
|
7df4e2144f |
@@ -40,10 +40,17 @@ local function check_curFadeOut(task,code,src)
|
|||||||
return task.code==code and task.args[1]==src
|
return task.code==code and task.args[1]==src
|
||||||
end
|
end
|
||||||
local function _tryReleaseSources()
|
local function _tryReleaseSources()
|
||||||
|
local n=#lastLoaded
|
||||||
while #lastLoaded>maxLoadedCount do
|
while #lastLoaded>maxLoadedCount do
|
||||||
local n=lastLoaded[#lastLoaded]
|
local name=lastLoaded[n]
|
||||||
SourceObjList[n].source=SourceObjList[n].source:release()and nil
|
if SourceObjList[name].source:isPlaying()then
|
||||||
table.remove(lastLoaded)
|
n=n-1
|
||||||
|
if n<=0 then return end
|
||||||
|
else
|
||||||
|
SourceObjList[name].source=SourceObjList[name].source:release()and nil
|
||||||
|
table.remove(lastLoaded,n)
|
||||||
|
return
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function BGM.setDefault(bgm)
|
function BGM.setDefault(bgm)
|
||||||
@@ -57,8 +64,16 @@ function BGM.setChange(func)
|
|||||||
BGM.onChange=func
|
BGM.onChange=func
|
||||||
end
|
end
|
||||||
function BGM.setVol(v)
|
function BGM.setVol(v)
|
||||||
assert(type(v)=='number'and v>=0 and v<=1)
|
assert(type(v)=='number'and v>=0 and v<=1,'Wrong volume')
|
||||||
volume=v
|
volume=v
|
||||||
|
if BGM.playing then
|
||||||
|
if volume>0 then
|
||||||
|
BGM.playing:setVolume(volume)
|
||||||
|
BGM.playing:play()
|
||||||
|
elseif BGM.nowPlay then
|
||||||
|
BGM.playing:pause()
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
function BGM.init(list)
|
function BGM.init(list)
|
||||||
BGM.init=nil
|
BGM.init=nil
|
||||||
@@ -92,18 +107,6 @@ function BGM.init(list)
|
|||||||
LOG("No BGM: "..name,5)
|
LOG("No BGM: "..name,5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function BGM.setVol(v)
|
|
||||||
assert(type(v)=='number'and v>=0 and v<=1)
|
|
||||||
volume=v
|
|
||||||
if BGM.playing then
|
|
||||||
if volume>0 then
|
|
||||||
BGM.playing:setVolume(volume)
|
|
||||||
BGM.playing:play()
|
|
||||||
elseif BGM.nowPlay then
|
|
||||||
BGM.playing:pause()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function BGM.play(name)
|
function BGM.play(name)
|
||||||
name=name or BGM.default
|
name=name or BGM.default
|
||||||
if not _tryLoad(name)then return end
|
if not _tryLoad(name)then return end
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
NONE={}function NULL()end
|
NONE={}function NULL()end
|
||||||
EDITING=""
|
EDITING=""
|
||||||
LOADED=false
|
LOADED=false
|
||||||
ERRDATA={}
|
|
||||||
|
|
||||||
--Pure lua modules (basic)
|
--Pure lua modules (basic)
|
||||||
MATH= require'Zframework.mathExtend'
|
MATH= require'Zframework.mathExtend'
|
||||||
@@ -74,7 +73,8 @@ local xOy=SCR.xOy
|
|||||||
local ITP=xOy.inverseTransformPoint
|
local ITP=xOy.inverseTransformPoint
|
||||||
|
|
||||||
local mx,my,mouseShow=-20,-20,false
|
local mx,my,mouseShow=-20,-20,false
|
||||||
joysticks={}
|
local jsState={}--map, joystickID->axisStates: {axisName->axisVal}
|
||||||
|
local errData={}--list, each error create {mes={errMes strings},scene=sceneNameStr}
|
||||||
|
|
||||||
local devMode
|
local devMode
|
||||||
|
|
||||||
@@ -288,18 +288,75 @@ function love.textinput(texts)
|
|||||||
WIDGET.textinput(texts)
|
WIDGET.textinput(texts)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--analog sticks: -1, 0, 1 for neg, neutral, pos
|
||||||
|
--triggers: 0 for released, 1 for pressed
|
||||||
|
local jsAxisEventName={
|
||||||
|
leftx={'leftstick_left','leftstick_right'},
|
||||||
|
lefty={'leftstick_up','leftstick_down'},
|
||||||
|
rightx={'rightstick_left','rightstick_right'},
|
||||||
|
righty={'rightstick_up','rightstick_down'},
|
||||||
|
triggerleft='triggerleft',
|
||||||
|
triggerright='triggerright'
|
||||||
|
}
|
||||||
function love.joystickadded(JS)
|
function love.joystickadded(JS)
|
||||||
table.insert(joysticks,JS)
|
jsState[JS:getID()]={
|
||||||
|
_loveJSObj=JS,
|
||||||
|
leftx=0,lefty=0,
|
||||||
|
rightx=0,righty=0,
|
||||||
|
triggerleft=0,triggerright=0
|
||||||
|
}
|
||||||
MES.new('info',"Joystick added")
|
MES.new('info',"Joystick added")
|
||||||
end
|
end
|
||||||
function love.joystickremoved(JS)
|
function love.joystickremoved(JS)
|
||||||
local i=TABLE.find(joysticks,JS)
|
local js=jsState[JS:getID()]
|
||||||
if i then
|
if js then
|
||||||
table.remove(joysticks,i)
|
love.gamepadaxis(JS,'leftx',0)
|
||||||
|
love.gamepadaxis(JS,'lefty',0)
|
||||||
|
love.gamepadaxis(JS,'rightx',0)
|
||||||
|
love.gamepadaxis(JS,'righty',0)
|
||||||
|
love.gamepadaxis(JS,'triggerleft',-1)
|
||||||
|
love.gamepadaxis(JS,'triggerright',-1)
|
||||||
|
jsState[JS:getID()]=nil
|
||||||
MES.new('info',"Joystick removed")
|
MES.new('info',"Joystick removed")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local keyMirror={
|
|
||||||
|
function love.gamepadaxis(JS,axis,val)
|
||||||
|
local js=jsState[JS:getID()]
|
||||||
|
if js then
|
||||||
|
if axis=='leftx'or axis=='lefty'or axis=='rightx'or axis=='righty'then
|
||||||
|
local newVal=--range: [0,1]
|
||||||
|
val>.5 and 1 or
|
||||||
|
val<-.5 and -1 or
|
||||||
|
0
|
||||||
|
if newVal~=js[axis]then
|
||||||
|
if js[axis]==-1 then
|
||||||
|
love.gamepadreleased(JS,jsAxisEventName[axis][1])
|
||||||
|
elseif js[axis]~=0 then
|
||||||
|
love.gamepadreleased(JS,jsAxisEventName[axis][2])
|
||||||
|
end
|
||||||
|
if newVal==-1 then
|
||||||
|
love.gamepadpressed(JS,jsAxisEventName[axis][1])
|
||||||
|
elseif newVal==1 then
|
||||||
|
love.gamepadpressed(JS,jsAxisEventName[axis][2])
|
||||||
|
end
|
||||||
|
js[axis]=newVal
|
||||||
|
end
|
||||||
|
elseif axis=='triggerleft'or axis=='triggerright'then
|
||||||
|
local newVal=val>0 and 1 or 0--range: [-1,1]
|
||||||
|
if newVal~=js[axis]then
|
||||||
|
if newVal==1 then
|
||||||
|
love.gamepadpressed(JS,jsAxisEventName[axis])
|
||||||
|
else
|
||||||
|
love.gamepadreleased(JS,jsAxisEventName[axis])
|
||||||
|
end
|
||||||
|
js[axis]=newVal
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local dPadToKey={
|
||||||
dpup='up',
|
dpup='up',
|
||||||
dpdown='down',
|
dpdown='down',
|
||||||
dpleft='left',
|
dpleft='left',
|
||||||
@@ -311,39 +368,16 @@ function love.gamepadpressed(_,i)
|
|||||||
mouseShow=false
|
mouseShow=false
|
||||||
if SCN.swapping then return end
|
if SCN.swapping then return end
|
||||||
if SCN.gamepadDown then SCN.gamepadDown(i)
|
if SCN.gamepadDown then SCN.gamepadDown(i)
|
||||||
elseif SCN.keyDown then SCN.keyDown(keyMirror[i]or i)
|
elseif SCN.keyDown then SCN.keyDown(dPadToKey[i]or i)
|
||||||
elseif i=="back"then SCN.back()
|
elseif i=="back"then SCN.back()
|
||||||
else WIDGET.gamepadPressed(keyMirror[i]or i)
|
else WIDGET.gamepadPressed(dPadToKey[i]or i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function love.gamepadreleased(_,i)
|
function love.gamepadreleased(_,i)
|
||||||
if SCN.swapping then return end
|
if SCN.swapping then return end
|
||||||
if SCN.gamepadUp then SCN.gamepadUp(i)end
|
if SCN.gamepadUp then SCN.gamepadUp(i)end
|
||||||
end
|
end
|
||||||
--[[
|
|
||||||
function love.joystickpressed(JS,k)
|
|
||||||
mouseShow=false
|
|
||||||
if SCN.swapping then return end
|
|
||||||
if SCN.gamepadDown then SCN.gamepadDown(i)
|
|
||||||
elseif SCN.keyDown then SCN.keyDown(keyMirror[i]or i)
|
|
||||||
elseif i=="back"then SCN.back()
|
|
||||||
else WIDGET.gamepadPressed(i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function love.joystickreleased(JS,k)
|
|
||||||
if SCN.swapping then return end
|
|
||||||
if SCN.gamepadUp then SCN.gamepadUp(i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function love.joystickaxis(JS,axis,val)
|
|
||||||
|
|
||||||
end
|
|
||||||
function love.joystickhat(JS,hat,dir)
|
|
||||||
|
|
||||||
end
|
|
||||||
function love.sendData(data)end
|
|
||||||
function love.receiveData(id,data)end
|
|
||||||
]]
|
|
||||||
function love.filedropped(file)
|
function love.filedropped(file)
|
||||||
if SCN.fileDropped then SCN.fileDropped(file)end
|
if SCN.fileDropped then SCN.fileDropped(file)end
|
||||||
end
|
end
|
||||||
@@ -379,7 +413,7 @@ end
|
|||||||
function love.errorhandler(msg)
|
function love.errorhandler(msg)
|
||||||
if type(msg)~='string'then
|
if type(msg)~='string'then
|
||||||
msg="Unknown error"
|
msg="Unknown error"
|
||||||
elseif msg:find("Invaild UTF-8")and text then
|
elseif msg:find("Invalid UTF-8")and text then
|
||||||
msg=text.tryAnotherBuild
|
msg=text.tryAnotherBuild
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -403,20 +437,20 @@ function love.errorhandler(msg)
|
|||||||
love.audio.stop()
|
love.audio.stop()
|
||||||
gc.reset()
|
gc.reset()
|
||||||
|
|
||||||
if LOADED and #ERRDATA<3 then
|
if LOADED and #errData<3 then
|
||||||
BG.set('none')
|
BG.set('none')
|
||||||
local scn=SCN and SCN.cur or"NULL"
|
local scn=SCN and SCN.cur or"NULL"
|
||||||
table.insert(ERRDATA,{mes=err,scene=scn})
|
table.insert(errData,{mes=err,scene=scn})
|
||||||
|
|
||||||
--Write messages to log file
|
--Write messages to log file
|
||||||
love.filesystem.append('conf/error.log',
|
love.filesystem.append('conf/error.log',
|
||||||
os.date("%Y/%m/%d %A %H:%M:%S\n")..
|
os.date("%Y/%m/%d %A %H:%M:%S\n")..
|
||||||
#ERRDATA.." crash(es) "..love.system.getOS().."-"..VERSION.string.." scene: "..scn.."\n"..
|
#errData.." crash(es) "..love.system.getOS().."-"..VERSION.string.." scene: "..scn.."\n"..
|
||||||
table.concat(err,"\n",1,c-2).."\n\n"
|
table.concat(err,"\n",1,c-2).."\n\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
--Get screencapture
|
--Get screencapture
|
||||||
gc.captureScreenshot(function(_)ERRDATA[#ERRDATA].shot=gc.newImage(_)end)
|
gc.captureScreenshot(function(_)errData[#errData].shot=gc.newImage(_)end)
|
||||||
gc.present()
|
gc.present()
|
||||||
|
|
||||||
--Create a new mainLoop thread to keep game alive
|
--Create a new mainLoop thread to keep game alive
|
||||||
@@ -539,7 +573,7 @@ function love.run()
|
|||||||
--Scene Launch
|
--Scene Launch
|
||||||
while #SCN.stack>0 do SCN.pop()end
|
while #SCN.stack>0 do SCN.pop()end
|
||||||
SCN.push('quit','slowFade')
|
SCN.push('quit','slowFade')
|
||||||
SCN.init(#ERRDATA==0 and'load'or'error')
|
SCN.init(#errData==0 and'load'or'error')
|
||||||
|
|
||||||
return function()
|
return function()
|
||||||
local _
|
local _
|
||||||
@@ -703,6 +737,9 @@ end
|
|||||||
|
|
||||||
local Z={}
|
local Z={}
|
||||||
|
|
||||||
|
Z.js=jsState
|
||||||
|
Z.errData=errData
|
||||||
|
|
||||||
function Z.setIfPowerInfo(func)showPowerInfo=func end
|
function Z.setIfPowerInfo(func)showPowerInfo=func end
|
||||||
|
|
||||||
--[Warning] Color and line width is uncertain value, set it in the function.
|
--[Warning] Color and line width is uncertain value, set it in the function.
|
||||||
|
|||||||
@@ -72,11 +72,11 @@ function SFX.getCount()
|
|||||||
return #sfxList
|
return #sfxList
|
||||||
end
|
end
|
||||||
function SFX.setVol(v)
|
function SFX.setVol(v)
|
||||||
assert(type(v)=='number'and v>=0 and v<=1)
|
assert(type(v)=='number'and v>=0 and v<=1,'Wrong volume')
|
||||||
volume=v
|
volume=v
|
||||||
end
|
end
|
||||||
function SFX.setStereo(v)
|
function SFX.setStereo(v)
|
||||||
assert(type(v)=='number'and v>=0 and v<=1)
|
assert(type(v)=='number'and v>=0 and v<=1,'Wrong stereo')
|
||||||
stereo=v
|
stereo=v
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
local find=string.find
|
local find=string.find
|
||||||
|
local rem=table.remove
|
||||||
local next,type=next,type
|
local next,type=next,type
|
||||||
local TABLE={}
|
local TABLE={}
|
||||||
|
|
||||||
@@ -83,7 +84,7 @@ function TABLE.complete(new,old)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
--Remove positive integer index of table
|
--Remove [1~#] of table
|
||||||
function TABLE.cut(G)
|
function TABLE.cut(G)
|
||||||
for i=1,#G do
|
for i=1,#G do
|
||||||
G[i]=nil
|
G[i]=nil
|
||||||
@@ -97,16 +98,53 @@ function TABLE.clear(G)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--Remove duplicated value of [1~#]
|
||||||
|
function TABLE.trimDuplicate(org)
|
||||||
|
local cache={}
|
||||||
|
for i=1,#org,-1 do
|
||||||
|
if cache[org[i]]then
|
||||||
|
rem(org,i)
|
||||||
|
else
|
||||||
|
cache[org[i]]=true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--Discard duplicated value
|
||||||
|
function TABLE.remDuplicate(org)
|
||||||
|
local cache={}
|
||||||
|
for k,v in next,org do
|
||||||
|
if cache[v]then
|
||||||
|
org[k]=nil
|
||||||
|
else
|
||||||
|
cache[v]=true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--Reverse [1~#]
|
||||||
|
function TABLE.reverse(org)
|
||||||
|
local l=#org
|
||||||
|
for i=1,math.floor(l/2)do
|
||||||
|
org[i],org[l+1-i]=org[l+1-i],org[i]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
|
||||||
--Find value in [1~#]
|
--Find value in [1~#]
|
||||||
function TABLE.find(t,val)
|
function TABLE.find(t,val)
|
||||||
for i=1,#t do if t[i]==val then return i end end
|
for i=1,#t do if t[i]==val then return i end end
|
||||||
end
|
end
|
||||||
|
|
||||||
--Retuen next value of [1~#]
|
--Return next value of [1~#] (by value)
|
||||||
function TABLE.next(t,val)
|
function TABLE.next(t,val)
|
||||||
for i=1,#t do if t[i]==val then return t[i%#t+1]end end
|
for i=1,#t do if t[i]==val then return t[i%#t+1]end end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
|
||||||
--Find value in whole table
|
--Find value in whole table
|
||||||
function TABLE.search(t,val)
|
function TABLE.search(t,val)
|
||||||
for k,v in next,t do if v==val then return k end end
|
for k,v in next,t do if v==val then return k end end
|
||||||
@@ -121,6 +159,8 @@ function TABLE.reIndex(org)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
|
||||||
--Dump a simple lua table
|
--Dump a simple lua table
|
||||||
do--function TABLE.dump(L,t)
|
do--function TABLE.dump(L,t)
|
||||||
local tabs={
|
local tabs={
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
local rnd=math.random
|
||||||
|
local volume=1
|
||||||
|
local diversion=0
|
||||||
local VOC={
|
local VOC={
|
||||||
vol=1,
|
|
||||||
getCount=function()return 0 end,
|
getCount=function()return 0 end,
|
||||||
getQueueCount=function()return 0 end,
|
getQueueCount=function()return 0 end,
|
||||||
load=function()error("Cannot load before init!")end,
|
load=function()error("Cannot load before init!")end,
|
||||||
@@ -7,13 +9,16 @@ local VOC={
|
|||||||
play=NULL,
|
play=NULL,
|
||||||
update=NULL,
|
update=NULL,
|
||||||
}
|
}
|
||||||
|
function VOC.setDiversion(n)
|
||||||
|
assert(type(n)=='number'and n>0 and n<12,'Wrong div')
|
||||||
|
diversion=n
|
||||||
|
end
|
||||||
function VOC.setVol(v)
|
function VOC.setVol(v)
|
||||||
assert(type(v)=='number'and v>=0 and v<=1)
|
assert(type(v)=='number'and v>=0 and v<=1,'Wrong volume')
|
||||||
VOC.vol=v
|
volume=v
|
||||||
end
|
end
|
||||||
function VOC.init(list)
|
function VOC.init(list)
|
||||||
VOC.init=nil
|
VOC.init=nil
|
||||||
local rnd=math.random
|
|
||||||
local rem=table.remove
|
local rem=table.remove
|
||||||
local voiceQueue={free=0}
|
local voiceQueue={free=0}
|
||||||
local bank={}--{vocName1={SRC1s},vocName2={SRC2s},...}
|
local bank={}--{vocName1={SRC1s},vocName2={SRC2s},...}
|
||||||
@@ -72,7 +77,7 @@ function VOC.init(list)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function VOC.play(s,chn)
|
function VOC.play(s,chn)
|
||||||
if VOC.vol>0 then
|
if volume>0 then
|
||||||
local _=Source[s]
|
local _=Source[s]
|
||||||
if not _ then return end
|
if not _ then return end
|
||||||
if chn then
|
if chn then
|
||||||
@@ -95,13 +100,15 @@ function VOC.init(list)
|
|||||||
end
|
end
|
||||||
elseif Q.s==1 then--Waiting load source
|
elseif Q.s==1 then--Waiting load source
|
||||||
Q[1]=_getVoice(Q[1])
|
Q[1]=_getVoice(Q[1])
|
||||||
Q[1]:setVolume(VOC.vol)
|
Q[1]:setVolume(volume)
|
||||||
|
Q[1]:setPitch(1.0594630943592953^(diversion*(rnd()*2-1)))
|
||||||
Q[1]:play()
|
Q[1]:play()
|
||||||
Q.s=Q[2]and 2 or 4
|
Q.s=Q[2]and 2 or 4
|
||||||
elseif Q.s==2 then--Playing 1,ready 2
|
elseif Q.s==2 then--Playing 1,ready 2
|
||||||
if Q[1]:getDuration()-Q[1]:tell()<.08 then
|
if Q[1]:getDuration()-Q[1]:tell()<.08 then
|
||||||
Q[2]=_getVoice(Q[2])
|
Q[2]=_getVoice(Q[2])
|
||||||
Q[2]:setVolume(VOC.vol)
|
Q[2]:setVolume(volume)
|
||||||
|
Q[1]:setPitch(1.0594630943592953^(diversion*(rnd()*2-1)))
|
||||||
Q[2]:play()
|
Q[2]:play()
|
||||||
Q.s=3
|
Q.s=3
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -44,8 +44,8 @@ N3TWORK is a registered trademark of N3TWORK Inc. © 2021 N3TWORK Inc.
|
|||||||
|
|
||||||
GoldWave is a registered trademark of GoldWave, Inc.
|
GoldWave is a registered trademark of GoldWave, Inc.
|
||||||
|
|
||||||
Linux is a registered trademark of Linus Torvalds.
|
Linux is a registered trademark of Linus Torvalds.
|
||||||
|
|
||||||
Touhou Project © Team Shanghai Alice 2002-2021.
|
Touhou Project © Team Shanghai Alice 2002-2021.
|
||||||
|
|
||||||
All other trademarks, logos, and copyrights are the properties of their respective owners.
|
All other trademarks, logos, and copyrights are the properties of their respective owners.
|
||||||
|
|||||||
5
main.lua
5
main.lua
@@ -54,6 +54,7 @@ FONT.load('parts/fonts/proportional.ttf')
|
|||||||
SCR.setSize(1280,720)--Initialize Screen size
|
SCR.setSize(1280,720)--Initialize Screen size
|
||||||
BGM.setMaxSources(5)
|
BGM.setMaxSources(5)
|
||||||
BGM.setChange(function(name)MES.new('music',text.nowPlaying..name,5)end)
|
BGM.setChange(function(name)MES.new('music',text.nowPlaying..name,5)end)
|
||||||
|
VOC.setDiversion(1)
|
||||||
|
|
||||||
table.insert(_LOADTIMELIST_,("Load Zframework: %.3fs"):format(TIME()-_LOADTIME_))
|
table.insert(_LOADTIMELIST_,("Load Zframework: %.3fs"):format(TIME()-_LOADTIME_))
|
||||||
|
|
||||||
@@ -628,9 +629,9 @@ if TABLE.find(arg,'--test')then
|
|||||||
TASK.new(function()
|
TASK.new(function()
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
YIELD()
|
||||||
if ERRDATA[1]then break end
|
if Z.errData[1]then break end
|
||||||
end
|
end
|
||||||
LOG("\27[91m\27[1mAutomatic Test Failed :(\27[0m\nThe error message is:\n"..table.concat(ERRDATA[1].mes,"\n").."\27[91m\nAborting\27[0m")
|
LOG("\27[91m\27[1mAutomatic Test Failed :(\27[0m\nThe error message is:\n"..table.concat(Z.errData[1].mes,"\n").."\27[91m\nAborting\27[0m")
|
||||||
TEST.yieldN(60)
|
TEST.yieldN(60)
|
||||||
love.event.quit(1)
|
love.event.quit(1)
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ return{
|
|||||||
holdCount=1,
|
holdCount=1,
|
||||||
infHold=true,
|
infHold=true,
|
||||||
phyHold=false,
|
phyHold=false,
|
||||||
hang=0,
|
hang=5,
|
||||||
|
|
||||||
--Visual
|
--Visual
|
||||||
bone=false,
|
bone=false,
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
local function task_newBoard(P,init)
|
local function task_newBoard(P,init)
|
||||||
|
local targetLine
|
||||||
local F,L={},{1}
|
local F,L={},{1}
|
||||||
--TODO
|
--TODO
|
||||||
P:pushNextList(L)
|
P:pushNextList(L)
|
||||||
@@ -7,7 +8,7 @@ local function task_newBoard(P,init)
|
|||||||
if not init then for _=1,26 do YIELD()end end
|
if not init then for _=1,26 do YIELD()end end
|
||||||
P.control=true
|
P.control=true
|
||||||
|
|
||||||
P.gameEnv.heightLimit=#F
|
P.gameEnv.heightLimit=targetLine or #F
|
||||||
P:pushLineList(F)
|
P:pushLineList(F)
|
||||||
end
|
end
|
||||||
local function _check(P)
|
local function _check(P)
|
||||||
@@ -23,7 +24,7 @@ local function _check(P)
|
|||||||
end
|
end
|
||||||
return{
|
return{
|
||||||
sequence='none',
|
sequence='none',
|
||||||
RS="SRS",
|
RS="TRS",
|
||||||
pushSpeed=5,
|
pushSpeed=5,
|
||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
setFont(60)
|
setFont(60)
|
||||||
|
|||||||
@@ -611,6 +611,9 @@ return{
|
|||||||
reset="Reiniciar",
|
reset="Reiniciar",
|
||||||
invis="A ciegas",
|
invis="A ciegas",
|
||||||
},
|
},
|
||||||
|
app_arithmetic={
|
||||||
|
reset="Reiniciar",
|
||||||
|
},
|
||||||
savedata={
|
savedata={
|
||||||
export="Exportar al portapapeles",
|
export="Exportar al portapapeles",
|
||||||
import="Importar de portapapeles",
|
import="Importar de portapapeles",
|
||||||
|
|||||||
@@ -612,6 +612,9 @@ return{
|
|||||||
reset="Réinitialiser",
|
reset="Réinitialiser",
|
||||||
invis="Aveugler",
|
invis="Aveugler",
|
||||||
},
|
},
|
||||||
|
app_arithmetic={
|
||||||
|
reset="Réinitialiser",
|
||||||
|
},
|
||||||
savedata={
|
savedata={
|
||||||
-- export="Export to clipboard",
|
-- export="Export to clipboard",
|
||||||
-- import="Import from clipboard",
|
-- import="Import from clipboard",
|
||||||
|
|||||||
@@ -642,6 +642,9 @@ return{
|
|||||||
reset="Resetar",
|
reset="Resetar",
|
||||||
invis="Cego",
|
invis="Cego",
|
||||||
},
|
},
|
||||||
|
app_arithmetic={
|
||||||
|
reset="Resetar",
|
||||||
|
},
|
||||||
savedata={
|
savedata={
|
||||||
-- export="Export to clipboard",
|
-- export="Export to clipboard",
|
||||||
-- import="Import from clipboard",
|
-- import="Import from clipboard",
|
||||||
|
|||||||
@@ -656,6 +656,9 @@ return{
|
|||||||
reset="重置",
|
reset="重置",
|
||||||
invis="盲打",
|
invis="盲打",
|
||||||
},
|
},
|
||||||
|
app_arithmetic={
|
||||||
|
reset="重置",
|
||||||
|
},
|
||||||
savedata={
|
savedata={
|
||||||
export="导出到剪切板",
|
export="导出到剪切板",
|
||||||
import="从剪切板导入",
|
import="从剪切板导入",
|
||||||
@@ -948,6 +951,24 @@ return{
|
|||||||
"少女祈祷中",
|
"少女祈祷中",
|
||||||
"少玩点游戏,多注意眨眼和休息",
|
"少玩点游戏,多注意眨眼和休息",
|
||||||
"深降了解一下",
|
"深降了解一下",
|
||||||
|
"时间碎片[000] 2021/11/21开始tip加入这个版块",
|
||||||
|
"时间碎片[001] V0.7.9加入O-spin",
|
||||||
|
"时间碎片[002] V0.7.19加入语音系统",
|
||||||
|
"时间碎片[003] V0.7.22加入平滑下落",
|
||||||
|
"时间碎片[004] V0.8.5加入模式地图",
|
||||||
|
"时间碎片[005] V0.8.19加入五连块",
|
||||||
|
"时间碎片[006] V0.9.0加入自定义序列和模式",
|
||||||
|
"时间碎片[007] V0.10.0加入录像回放",
|
||||||
|
"时间碎片[008] V0.11.1加入小z词典",
|
||||||
|
"时间碎片[009] V0.12.2加入mod系统",
|
||||||
|
"时间碎片[010] V0.13.0联网对战测试",
|
||||||
|
"时间碎片[011] V0.13.2加入任意场地高度",
|
||||||
|
"时间碎片[012] V0.13.3加入控制台",
|
||||||
|
"时间碎片[013] V0.14.4加入第一首不是用Beepbox制作的BGM",
|
||||||
|
"时间碎片[014] V0.14.5加入第一首社区玩家自制BGM",
|
||||||
|
"时间碎片[015] V0.15.5加入录像回放菜单",
|
||||||
|
"时间碎片[016] V0.16.0应该是单次更新内容",
|
||||||
|
"时间碎片[017] V0.16.2加入打击垫样式的音效室",
|
||||||
"使用固定堆叠方法达成20TSD难度很低",
|
"使用固定堆叠方法达成20TSD难度很低",
|
||||||
"试试用跳舞毯打块",
|
"试试用跳舞毯打块",
|
||||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||||
|
|||||||
@@ -413,7 +413,6 @@ return{
|
|||||||
ihs="初始持有",
|
ihs="初始持有",
|
||||||
irs="初始旋转",
|
irs="初始旋转",
|
||||||
ims="初始运动",
|
ims="初始运动",
|
||||||
reset="重置",
|
|
||||||
},
|
},
|
||||||
setting_key={
|
setting_key={
|
||||||
a1="向左移动",
|
a1="向左移动",
|
||||||
@@ -614,7 +613,6 @@ return{
|
|||||||
revKB="逆转",
|
revKB="逆转",
|
||||||
},
|
},
|
||||||
app_schulteG={
|
app_schulteG={
|
||||||
reset="重置",
|
|
||||||
rank="大小",
|
rank="大小",
|
||||||
invis="英维斯",
|
invis="英维斯",
|
||||||
disappear="隐藏",
|
disappear="隐藏",
|
||||||
@@ -626,30 +624,25 @@ return{
|
|||||||
app_AtoZ={
|
app_AtoZ={
|
||||||
level="水平仪",
|
level="水平仪",
|
||||||
keyboard="键盘",
|
keyboard="键盘",
|
||||||
reset="重置",
|
|
||||||
},
|
},
|
||||||
app_2048={
|
app_2048={
|
||||||
reset="重置",
|
|
||||||
invis="英维斯",
|
invis="英维斯",
|
||||||
tapControl="抽头控制",
|
tapControl="抽头控制",
|
||||||
|
|
||||||
skip="跳转",
|
skip="跳转",
|
||||||
},
|
},
|
||||||
app_ten={
|
app_ten={
|
||||||
reset="重置",
|
|
||||||
next="下一个",
|
next="下一个",
|
||||||
invis="英维斯",
|
invis="英维斯",
|
||||||
fast="快速的",
|
fast="快速的",
|
||||||
},
|
},
|
||||||
app_dtw={
|
app_dtw={
|
||||||
reset="重置",
|
|
||||||
color="颜色",
|
color="颜色",
|
||||||
mode="模式",
|
mode="模式",
|
||||||
bgm="血糖监测",
|
bgm="血糖监测",
|
||||||
arcade="游乐中心",
|
arcade="游乐中心",
|
||||||
},
|
},
|
||||||
app_link={
|
app_link={
|
||||||
reset="重置",
|
|
||||||
invis="英维斯",
|
invis="英维斯",
|
||||||
},
|
},
|
||||||
savedata={
|
savedata={
|
||||||
|
|||||||
@@ -655,6 +655,9 @@ return{
|
|||||||
reset="重設",
|
reset="重設",
|
||||||
invis="盲打",
|
invis="盲打",
|
||||||
},
|
},
|
||||||
|
app_arithmetic={
|
||||||
|
reset="重設",
|
||||||
|
},
|
||||||
savedata={
|
savedata={
|
||||||
export="導出到剪貼板",
|
export="導出到剪貼板",
|
||||||
import="從剪貼板導入",
|
import="從剪貼板導入",
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ Gameplay:
|
|||||||
Play until the end or achieve the level's goal to win.
|
Play until the end or achieve the level's goal to win.
|
||||||
|
|
||||||
Rotation system:
|
Rotation system:
|
||||||
Uses Techmino's custom rotation system. Too lazy to write the details
|
Uses TRS (Techmino Rotation System) by default. The game allows players to choose other commonly used rotation systems (generally unnecessary)
|
||||||
|
|
||||||
Spin detection:
|
Spin detection:
|
||||||
Satisfies "3 corner" rule +2 points
|
Satisfies "3 corner" rule +2 points
|
||||||
@@ -87,4 +87,4 @@ Custom mode:
|
|||||||
empty cells can be in any state;
|
empty cells can be in any state;
|
||||||
regular colored cells have to be made of the corresponding block;
|
regular colored cells have to be made of the corresponding block;
|
||||||
garbage-colored cells can be any block but not air.
|
garbage-colored cells can be any block but not air.
|
||||||
Once you make the shape, you will win.
|
Once you make the shape, you will win.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
尝试存活更久,或者完成目标即胜利.
|
尝试存活更久,或者完成目标即胜利.
|
||||||
|
|
||||||
旋转系统:
|
旋转系统:
|
||||||
使用Techmino专属旋转系统,具体太复杂并且随时可能更改所以不写在这里,可以去parts/kicklist.lua看
|
默认使用Techmino专属旋转系统TRS,允许玩家自选其他较常用的旋转系统(一般不必要)
|
||||||
|
|
||||||
spin判定:
|
spin判定:
|
||||||
满足三角判定+2分
|
满足三角判定+2分
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ return{
|
|||||||
|
|
||||||
{name='strategy_e', x=-150, y=-1030, size=40,shape=3,icon="master"},
|
{name='strategy_e', x=-150, y=-1030, size=40,shape=3,icon="master"},
|
||||||
{name='strategy_h', x=-200, y=-1160, size=35,shape=3,icon="master"},
|
{name='strategy_h', x=-200, y=-1160, size=35,shape=3,icon="master"},
|
||||||
{name='strategy_u', x=-250, y=-1290, size=30,shape=3,icon="master"},
|
{name='strategy_u', x=-250, y=-1290, size=30,shape=2,icon="master"},
|
||||||
|
|
||||||
{name='blind_e', x=150, y=-700, size=40,shape=1,icon="hidden", unlock={'blind_n'}},
|
{name='blind_e', x=150, y=-700, size=40,shape=1,icon="hidden", unlock={'blind_n'}},
|
||||||
{name='blind_n', x=150, y=-800, size=40,shape=1,icon="hidden", unlock={'blind_h'}},
|
{name='blind_n', x=150, y=-800, size=40,shape=1,icon="hidden", unlock={'blind_h'}},
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
return{
|
return{
|
||||||
{font=100,name="☆★白羽★☆"},
|
{font=100,name="☆★白羽★☆"},
|
||||||
|
{font=100,name="[*浩]"},
|
||||||
|
|
||||||
{font=65,name="那没事了(T6300)"},
|
{font=65,name="那没事了(T6300)"},
|
||||||
{font=65,name="加油啊,钉钉动了的大哥哥(T3228)"},
|
{font=65,name="加油啊,钉钉动了的大哥哥(T3228)"},
|
||||||
@@ -28,6 +29,8 @@ return{
|
|||||||
{font=65,name="怀沙"},
|
{font=65,name="怀沙"},
|
||||||
{font=65,name="星街书婉"},
|
{font=65,name="星街书婉"},
|
||||||
{font=65,name="老板来两份薯条"},
|
{font=65,name="老板来两份薯条"},
|
||||||
|
{font=65,name="[**昆]"},
|
||||||
|
{font=65,name="[**浩]"},
|
||||||
|
|
||||||
{font=25,name="八零哥"},
|
{font=25,name="八零哥"},
|
||||||
{font=25,name="蕴空之灵"},
|
{font=25,name="蕴空之灵"},
|
||||||
@@ -121,4 +124,6 @@ return{
|
|||||||
{font=25,name="小丘"},
|
{font=25,name="小丘"},
|
||||||
{font=25,name="Techtris"},
|
{font=25,name="Techtris"},
|
||||||
{font=25,name="费尔特林"},
|
{font=25,name="费尔特林"},
|
||||||
|
{font=25,name="零醇丘卡"},
|
||||||
|
{font=25,name="Hathtiz"},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ 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=0,FTLock=true,
|
hang=5,FTLock=true,
|
||||||
|
|
||||||
ghostType='gray',
|
ghostType='gray',
|
||||||
block=true,ghost=.3,center=1,
|
block=true,ghost=.3,center=1,
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ end
|
|||||||
--------------------------<Method>--------------------------
|
--------------------------<Method>--------------------------
|
||||||
function Player:newTask(code,...)
|
function Player:newTask(code,...)
|
||||||
local thread=coroutine.create(code)
|
local thread=coroutine.create(code)
|
||||||
resume(thread,self,...)
|
assert(resume(thread,self,...))
|
||||||
if status(thread)~='dead'then
|
if status(thread)~='dead'then
|
||||||
ins(self.tasks,{
|
ins(self.tasks,{
|
||||||
thread=thread,
|
thread=thread,
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ local rnd=math.random
|
|||||||
local int,ceil=math.floor,math.ceil
|
local int,ceil=math.floor,math.ceil
|
||||||
local char=string.char
|
local char=string.char
|
||||||
|
|
||||||
|
local timing,time
|
||||||
|
|
||||||
local function b2(i)
|
local function b2(i)
|
||||||
if i==0 then return 0 end
|
if i==0 then return 0 end
|
||||||
local s=""
|
local s=""
|
||||||
@@ -114,17 +116,27 @@ local levels={
|
|||||||
local a=rnd(17,int(s/2))
|
local a=rnd(17,int(s/2))
|
||||||
return{COLOR.J,b16(a),COLOR.Z,"+",COLOR.J,b16(s-a)},s
|
return{COLOR.J,b16(a),COLOR.Z,"+",COLOR.J,b16(s-a)},s
|
||||||
end,nil,nil,
|
end,nil,nil,
|
||||||
function()return "Coming S∞n"..(rnd()<.5 and""or" "),1e99 end,
|
function()timing=false return "Coming S∞n"..(rnd()<.5 and""or" "),1e99 end,
|
||||||
}setmetatable(levels,{__index=function(self,k)return self[k-1]end})
|
}setmetatable(levels,{__index=function(self,k)return self[k-1]end})
|
||||||
|
|
||||||
local level
|
local level
|
||||||
|
|
||||||
local input,inputTime=0,0
|
local input,inputTime=0,0
|
||||||
local question,answer
|
local question,answer
|
||||||
|
|
||||||
local function newQuestion(lv)
|
local function newQuestion(lv)
|
||||||
return levels[lv]()
|
return levels[lv]()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function reset()
|
||||||
|
timing=true
|
||||||
|
time=0
|
||||||
|
input=""
|
||||||
|
inputTime=0
|
||||||
|
level=1
|
||||||
|
question,answer=newQuestion(1)
|
||||||
|
end
|
||||||
|
|
||||||
local function check(val)
|
local function check(val)
|
||||||
if val==answer then
|
if val==answer then
|
||||||
level=level+1
|
level=level+1
|
||||||
@@ -142,10 +154,7 @@ end
|
|||||||
local scene={}
|
local scene={}
|
||||||
|
|
||||||
function scene.sceneInit()
|
function scene.sceneInit()
|
||||||
input=""
|
reset()
|
||||||
inputTime=0
|
|
||||||
level=1
|
|
||||||
question,answer=newQuestion(1)
|
|
||||||
BGM.play('truth')
|
BGM.play('truth')
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -173,14 +182,15 @@ function scene.keyDown(key,isRep)
|
|||||||
elseif key=="backspace"then
|
elseif key=="backspace"then
|
||||||
input=""
|
input=""
|
||||||
inputTime=0
|
inputTime=0
|
||||||
elseif key=="s"then
|
elseif key=="r"then
|
||||||
check(answer)
|
reset()
|
||||||
elseif key=="escape"then
|
elseif key=="escape"then
|
||||||
SCN.back()
|
SCN.back()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function scene.update(dt)
|
function scene.update(dt)
|
||||||
|
if timing then time=time+dt end
|
||||||
if inputTime>0 then
|
if inputTime>0 then
|
||||||
inputTime=inputTime-dt
|
inputTime=inputTime-dt
|
||||||
if inputTime<=0 then
|
if inputTime<=0 then
|
||||||
@@ -189,8 +199,11 @@ function scene.update(dt)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function scene.draw()
|
function scene.draw()
|
||||||
FONT.set(35)
|
|
||||||
gc.setColor(COLOR.Z)
|
gc.setColor(COLOR.Z)
|
||||||
|
FONT.set(45)
|
||||||
|
gc.print(("%.3f"):format(time),1026,70)
|
||||||
|
|
||||||
|
FONT.set(35)
|
||||||
GC.mStr("["..level.."]",640,30)
|
GC.mStr("["..level.."]",640,30)
|
||||||
|
|
||||||
FONT.set(100)
|
FONT.set(100)
|
||||||
@@ -203,6 +216,7 @@ function scene.draw()
|
|||||||
end
|
end
|
||||||
|
|
||||||
scene.widgetList={
|
scene.widgetList={
|
||||||
|
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=40,code=pressKey"r"},
|
||||||
WIDGET.newKey{name='X',x=540,y=620,w=90,font=60,fText="X",code=pressKey"backspace"},
|
WIDGET.newKey{name='X',x=540,y=620,w=90,font=60,fText="X",code=pressKey"backspace"},
|
||||||
WIDGET.newKey{name='0',x=640,y=620,w=90,font=60,fText="0",code=pressKey"0"},
|
WIDGET.newKey{name='0',x=640,y=620,w=90,font=60,fText="0",code=pressKey"0"},
|
||||||
WIDGET.newKey{name='-',x=740,y=620,w=90,font=60,fText="-",code=pressKey"-"},
|
WIDGET.newKey{name='-',x=740,y=620,w=90,font=60,fText="-",code=pressKey"-"},
|
||||||
|
|||||||
@@ -115,8 +115,9 @@ function scene.keyDown(key)
|
|||||||
for _=1,12 do scene.keyDown("up")end
|
for _=1,12 do scene.keyDown("up")end
|
||||||
elseif key=="right"or key=="pagedown"then
|
elseif key=="right"or key=="pagedown"then
|
||||||
for _=1,12 do scene.keyDown("down")end
|
for _=1,12 do scene.keyDown("down")end
|
||||||
elseif key=="link"then
|
elseif key=="application"then
|
||||||
love.system.openURL(_getList()[selected].url)
|
local url=_getList()[selected].url
|
||||||
|
if url then love.system.openURL(url)end
|
||||||
elseif key=="delete"then
|
elseif key=="delete"then
|
||||||
if inputBox:hasText()then
|
if inputBox:hasText()then
|
||||||
_clearResult()
|
_clearResult()
|
||||||
@@ -213,7 +214,7 @@ scene.widgetList={
|
|||||||
WIDGET.newText{name='book', x=20,y=15,font=70,align='L',fText=CHAR.icon.zBook},
|
WIDGET.newText{name='book', x=20,y=15,font=70,align='L',fText=CHAR.icon.zBook},
|
||||||
WIDGET.newText{name='title', x=100,y=15,font=70,align='L'},
|
WIDGET.newText{name='title', x=100,y=15,font=70,align='L'},
|
||||||
inputBox,
|
inputBox,
|
||||||
WIDGET.newKey{name='link', x=1120,y=655,w=80,font=55,fText=CHAR.icon.globe, code=pressKey"link",hideF=function()return not _getList()[selected].url end},
|
WIDGET.newKey{name='link', x=1120,y=655,w=80,font=55,fText=CHAR.icon.globe, code=pressKey"application",hideF=function()return not _getList()[selected].url end},
|
||||||
WIDGET.newKey{name='copy', x=1210,y=655,w=80,font=50,fText=CHAR.icon.copy, code=pressKey"cC"},
|
WIDGET.newKey{name='copy', x=1210,y=655,w=80,font=50,fText=CHAR.icon.copy, code=pressKey"cC"},
|
||||||
WIDGET.newKey{name='up', x=1120,y=475,w=80,font=50,fText=CHAR.key.up, code=pressKey"up",hide=not MOBILE},
|
WIDGET.newKey{name='up', x=1120,y=475,w=80,font=50,fText=CHAR.key.up, code=pressKey"up",hide=not MOBILE},
|
||||||
WIDGET.newKey{name='down', x=1120,y=565,w=80,font=50,fText=CHAR.key.down, code=pressKey"down",hide=not MOBILE},
|
WIDGET.newKey{name='down', x=1120,y=565,w=80,font=50,fText=CHAR.key.down, code=pressKey"down",hide=not MOBILE},
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ local scene={}
|
|||||||
|
|
||||||
function scene.sceneInit()
|
function scene.sceneInit()
|
||||||
BGcolor=rnd()>.026 and{.3,.5,.9}or{.62,.3,.926}
|
BGcolor=rnd()>.026 and{.3,.5,.9}or{.62,.3,.926}
|
||||||
stateInfo=SYSTEM.."-"..VERSION.string.." scene:"..ERRDATA[#ERRDATA].scene
|
stateInfo=SYSTEM.."-"..VERSION.string.." scene:"..Z.errData[#Z.errData].scene
|
||||||
errorText=LOADED and text.errorMsg or"An error has occurred during loading.\nError info has been created, and you can send it to the author."
|
errorText=LOADED and text.errorMsg or"An error has occurred during loading.\nError info has been created, and you can send it to the author."
|
||||||
errorShot,errorInfo=ERRDATA[#ERRDATA].shot,ERRDATA[#ERRDATA].mes
|
errorShot,errorInfo=Z.errData[#Z.errData].shot,Z.errData[#Z.errData].mes
|
||||||
NET.wsclose_app()
|
NET.wsclose_app()
|
||||||
NET.wsclose_user()
|
NET.wsclose_user()
|
||||||
NET.wsclose_play()
|
NET.wsclose_play()
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ function scene.update()
|
|||||||
if kb.isDown("down","s")then dy=dy-10 F=true end
|
if kb.isDown("down","s")then dy=dy-10 F=true end
|
||||||
if kb.isDown("left","a")then dx=dx+10 F=true end
|
if kb.isDown("left","a")then dx=dx+10 F=true end
|
||||||
if kb.isDown("right","d")then dx=dx-10 F=true end
|
if kb.isDown("right","d")then dx=dx-10 F=true end
|
||||||
local js1=joysticks[1]
|
local js1=Z.js[1]
|
||||||
if js1 then
|
if js1 then
|
||||||
local dir=js1:getAxis(1)
|
local dir=js1:getAxis(1)
|
||||||
if dir~="c"then
|
if dir~="c"then
|
||||||
|
|||||||
@@ -14,15 +14,19 @@ return[=[
|
|||||||
0.17.0: 硬着陆 Hard Landing
|
0.17.0: 硬着陆 Hard Landing
|
||||||
新增:
|
新增:
|
||||||
新模式:大爆炸
|
新模式:大爆炸
|
||||||
新模式:策略堆叠(原版设计来自Cambridge游戏, by NOT_A_ROBOT)
|
新模式:策略堆叠(原设计来自游戏Cambridge, by NOT_A_ROBOT)
|
||||||
添加lockout判负规则(默认关闭)
|
添加lockout判负规则(默认关闭)
|
||||||
|
全局默认使用5帧窒息延迟
|
||||||
|
尝试支持摇杆和扳机
|
||||||
改动:
|
改动:
|
||||||
TRS的S/Z添加四个踢墙防止在一些地方卡死
|
TRS的S/Z添加四个踢墙防止在一些地方卡死
|
||||||
生成位置预览开启后hold的生成位置也可见 #453
|
生成位置预览开启后hold的生成位置也可见 #453
|
||||||
优化pc训练模式体验,添加胜利条件,不再无尽
|
优化pc训练模式体验,添加胜利条件,不再无尽
|
||||||
堆积模式添加15帧的窒息延迟 #465
|
堆积模式添加15帧的窒息延迟 #465
|
||||||
|
小程序arm加入计时器和重置按钮
|
||||||
代码:
|
代码:
|
||||||
bgm模块可限制最大加载数,不容易达到上限导致没声 #447
|
bgm模块可限制最大加载数,不容易达到上限导致没声 #447
|
||||||
|
语音模块支持设置轻微随机音调偏移半径(游戏内固定使用1)
|
||||||
修复:
|
修复:
|
||||||
机翻语言超级消除无行数显示 #462
|
机翻语言超级消除无行数显示 #462
|
||||||
竞速-效率左侧信息颜色问题
|
竞速-效率左侧信息颜色问题
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
return{
|
return{
|
||||||
["apkCode"]=405,
|
["apkCode"]=406,
|
||||||
["code"]=1700,
|
["code"]=1700,
|
||||||
["string"]="V0.17.0",
|
["string"]="V0.17.0",
|
||||||
["room"]="ver A-1",
|
["room"]="ver A-2",
|
||||||
["name"]="硬着陆 Hard Landing",
|
["name"]="硬着陆 Hard Landing",
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user