Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1fa7bf9c27 | ||
|
|
b50e01e4cf | ||
|
|
7abf9b0d0c | ||
|
|
504c6f46c3 | ||
|
|
78b1dcc949 | ||
|
|
9b0c859593 | ||
|
|
c9a3075d0a | ||
|
|
953b17ee88 | ||
|
|
95bc979da7 | ||
|
|
622b1a5e25 | ||
|
|
0c66ca1bdc | ||
|
|
67323c4d93 | ||
|
|
e2b0069947 | ||
|
|
5697a201ef | ||
|
|
c6115e3417 | ||
|
|
0ad122ce01 |
@@ -50,7 +50,7 @@ function BGM.init(list)
|
|||||||
Sources[list[i]]:setLooping(true)
|
Sources[list[i]]:setLooping(true)
|
||||||
Sources[list[i]]:setVolume(0)
|
Sources[list[i]]:setVolume(0)
|
||||||
else
|
else
|
||||||
LOG.print("No BGM file: "..list[i],5,COLOR.O)
|
LOG.print("No BGM file: "..list[i],5,'warn')
|
||||||
end
|
end
|
||||||
if not skip and i~=count then
|
if not skip and i~=count then
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ function FILE.load(name)
|
|||||||
return s
|
return s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
LOG.print(name.." "..text.loadError,COLOR.R)
|
LOG.print(name.." "..text.loadError,'error')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function FILE.save(data,name,mode)
|
function FILE.save(data,name,mode)
|
||||||
@@ -50,7 +50,7 @@ function FILE.save(data,name,mode)
|
|||||||
F:flush()F:close()
|
F:flush()F:close()
|
||||||
if success then
|
if success then
|
||||||
if not mode:find'q'then
|
if not mode:find'q'then
|
||||||
LOG.print(text.saveDone,COLOR.G)
|
LOG.print(text.saveDone,'message')
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
LOG.print(text.saveError..(mes or"unknown error"),'error')
|
LOG.print(text.saveError..(mes or"unknown error"),'error')
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ local function noDevkeyPressed(key)
|
|||||||
if key=="f1"then
|
if key=="f1"then
|
||||||
PROFILE.switch()
|
PROFILE.switch()
|
||||||
elseif key=="f2"then
|
elseif key=="f2"then
|
||||||
LOG.print(("System:%s[%s]\nluaVer:%s\njitVer:%s\njitVerNum:%s"):format(SYSTEM,jit.arch,_VERSION,jit.version,jit.version_num))
|
LOG.print(("System:%s[%s]\nluaVer:%s\njitVer:%s\njitVerNum:%s"):format(SYSTEM,jit.arch,_VERSION,jit.version,jit.version_num),'message')
|
||||||
elseif key=="f3"then
|
elseif key=="f3"then
|
||||||
for _=1,8 do
|
for _=1,8 do
|
||||||
local P=PLY_ALIVE[rnd(#PLY_ALIVE)]
|
local P=PLY_ALIVE[rnd(#PLY_ALIVE)]
|
||||||
@@ -217,11 +217,11 @@ local function noDevkeyPressed(key)
|
|||||||
elseif key=="f5"then if WIDGET.sel then print(WIDGET.sel)end
|
elseif key=="f5"then if WIDGET.sel then print(WIDGET.sel)end
|
||||||
elseif key=="f6"then for k,v in next,_G do print(k,v)end
|
elseif key=="f6"then for k,v in next,_G do print(k,v)end
|
||||||
elseif key=="f7"then if love._openConsole then love._openConsole()end
|
elseif key=="f7"then if love._openConsole then love._openConsole()end
|
||||||
elseif key=="f8"then devMode=nil LOG.print("DEBUG OFF",COLOR.Y)
|
elseif key=="f8"then devMode=nil LOG.print("DEBUG OFF")
|
||||||
elseif key=="f9"then devMode=1 LOG.print("DEBUG 1",COLOR.Y)
|
elseif key=="f9"then devMode=1 LOG.print("DEBUG 1")
|
||||||
elseif key=="f10"then devMode=2 LOG.print("DEBUG 2",COLOR.Y)
|
elseif key=="f10"then devMode=2 LOG.print("DEBUG 2")
|
||||||
elseif key=="f11"then devMode=3 LOG.print("DEBUG 3",COLOR.Y)
|
elseif key=="f11"then devMode=3 LOG.print("DEBUG 3")
|
||||||
elseif key=="f12"then devMode=4 LOG.print("DEBUG 4",COLOR.Y)
|
elseif key=="f12"then devMode=4 LOG.print("DEBUG 4")
|
||||||
elseif key=="\\"then _G["\100\114\97\119\70\87\77"]=NULL
|
elseif key=="\\"then _G["\100\114\97\119\70\87\77"]=NULL
|
||||||
elseif devMode==2 then
|
elseif devMode==2 then
|
||||||
if WIDGET.sel then
|
if WIDGET.sel then
|
||||||
@@ -251,7 +251,7 @@ function love.keypressed(key)
|
|||||||
return
|
return
|
||||||
elseif key=="f8"then
|
elseif key=="f8"then
|
||||||
devMode=1
|
devMode=1
|
||||||
LOG.print("DEBUG ON",COLOR.Y)
|
LOG.print("DEBUG ON")
|
||||||
elseif key=="f11"then
|
elseif key=="f11"then
|
||||||
switchFullscreen()
|
switchFullscreen()
|
||||||
elseif not SCN.swapping then
|
elseif not SCN.swapping then
|
||||||
@@ -278,12 +278,13 @@ end
|
|||||||
|
|
||||||
function love.joystickadded(JS)
|
function love.joystickadded(JS)
|
||||||
ins(joysticks,JS)
|
ins(joysticks,JS)
|
||||||
|
LOG.print("Joystick added",'message')
|
||||||
end
|
end
|
||||||
function love.joystickremoved(JS)
|
function love.joystickremoved(JS)
|
||||||
local i=TABLE.find(joysticks,JS)
|
local i=TABLE.find(joysticks,JS)
|
||||||
if i then
|
if i then
|
||||||
rem(joysticks,i)
|
rem(joysticks,i)
|
||||||
LOG.print("Joystick removed",COLOR.Y)
|
LOG.print("Joystick removed",'message')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local keyMirror={
|
local keyMirror={
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ return function(name,libName)
|
|||||||
if r1 and r2 then
|
if r1 and r2 then
|
||||||
return r2
|
return r2
|
||||||
else
|
else
|
||||||
LOG.print("Cannot load "..name..": "..(r2 or r3),'warn',COLOR.R)
|
LOG.print("Cannot load "..name..": "..(r2 or r3),'warn')
|
||||||
end
|
end
|
||||||
elseif SYSTEM=="Android"then
|
elseif SYSTEM=="Android"then
|
||||||
local fs=love.filesystem
|
local fs=love.filesystem
|
||||||
@@ -12,35 +12,35 @@ return function(name,libName)
|
|||||||
|
|
||||||
local libFunc=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc)
|
local libFunc=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc)
|
||||||
if libFunc then
|
if libFunc then
|
||||||
LOG.print(name.." lib loaded",'warn',COLOR.G)
|
LOG.print(name.." lib loaded",'message')
|
||||||
else
|
else
|
||||||
for i=1,#platform do
|
for i=1,#platform do
|
||||||
local soFile=fs.read('data',"libAndroid/"..platform[i].."/"..libName.Android)
|
local soFile,_,_,mes1=fs.read('data',"libAndroid/"..platform[i].."/"..libName.Android)
|
||||||
if soFile then
|
if soFile then
|
||||||
local success,message=fs.write("lib/"..libName.Android,soFile)
|
local success,mes2=fs.write("lib/"..libName.Android,soFile)
|
||||||
if success then
|
if success then
|
||||||
libFunc,message=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc)
|
libFunc,mes2=package.loadlib(SAVEDIR.."/lib/"..libName.Android,libName.libFunc)
|
||||||
if libFunc then
|
if libFunc then
|
||||||
LOG.print(name.." lib loaded",'warn',COLOR.G)
|
LOG.print(name.." lib loaded",'message')
|
||||||
break
|
break
|
||||||
else
|
else
|
||||||
LOG.print("Cannot load "..name..": "..message,'warn',COLOR.R)
|
LOG.print("Cannot load "..name..": "..mes2,'error')
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
LOG.print("Write "..name.."-"..platform[i].." to saving failed: "..message,'warn',COLOR.R)
|
LOG.print(("Write %s-%s to saving failed: %s"):format(name,platform[i],mes2),'error')
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
LOG.print("Read "..name.."-"..platform[i].." failed",'warn',COLOR.R)
|
LOG.print(("Read %s-%s to saving failed: %s"):format(name,platform[i],mes1),'error')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not libFunc then
|
if not libFunc then
|
||||||
LOG.print("Cannot load "..name,'warn',COLOR.R)
|
LOG.print("Cannot load "..name,'error')
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return libFunc()
|
return libFunc()
|
||||||
else
|
else
|
||||||
LOG.print("No "..name.." for "..SYSTEM,'warn',COLOR.R)
|
LOG.print("No "..name.." for "..SYSTEM,'error')
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
|
|||||||
@@ -35,36 +35,26 @@ function LOG.draw()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function LOG.print(text,T,C)--text,type/time/color,color
|
function LOG.print(text,T)--text,type/time/color,color
|
||||||
local time
|
local color=COLOR.Z
|
||||||
local his
|
local time,his
|
||||||
if T=='warn'then
|
if T=='message'then
|
||||||
C=C or COLOR.Y
|
color=COLOR.N
|
||||||
his=true
|
his,time=true,180
|
||||||
time=180
|
elseif T=='warn'then
|
||||||
|
color=COLOR.Y
|
||||||
|
his,time=true,180
|
||||||
elseif T=='error'then
|
elseif T=='error'then
|
||||||
C=C or COLOR.R
|
color=COLOR.R
|
||||||
his=true
|
his,time=true,210
|
||||||
time=210
|
|
||||||
elseif T=='message'then
|
|
||||||
C=C or COLOR.N
|
|
||||||
his=true
|
|
||||||
elseif type(T)=='number'then
|
elseif type(T)=='number'then
|
||||||
C=C or COLOR.Z
|
|
||||||
time=T
|
time=T
|
||||||
elseif type(T)=='table'then
|
|
||||||
C=T
|
|
||||||
elseif not C then
|
|
||||||
C=COLOR.Z
|
|
||||||
end
|
end
|
||||||
if his then
|
if his then ins(debugMesHistory,SCN.cur..": "..tostring(text))end
|
||||||
ins(debugMesHistory,SCN.cur..": "..tostring(text))
|
ins(debugMesList,{text=tostring(text),r=color[1],g=color[2],b=color[3],blink=30,time=time or 120})
|
||||||
end
|
|
||||||
ins(debugMesList,{text=tostring(text),r=C[1],g=C[2],b=C[3],blink=30,time=time or 120})
|
|
||||||
end
|
end
|
||||||
function LOG.copy()
|
function LOG.copy()
|
||||||
local str=table.concat(debugMesHistory,"\n")
|
love.system.setClipboardText(table.concat(debugMesHistory,"\n"))
|
||||||
love.system.setClipboardText(str)
|
LOG.print("Log copied",'message')
|
||||||
LOG.print("Log copied",COLOR.B)
|
|
||||||
end
|
end
|
||||||
return LOG
|
return LOG
|
||||||
@@ -141,10 +141,10 @@ function profile.switch()
|
|||||||
profile.stop()
|
profile.stop()
|
||||||
love.system.setClipboardText(PROFILE.report())
|
love.system.setClipboardText(PROFILE.report())
|
||||||
PROFILE.reset()
|
PROFILE.reset()
|
||||||
LOG.print("profile report copied!")
|
LOG.print("profile report copied!",'message')
|
||||||
else
|
else
|
||||||
PROFILE.start()
|
PROFILE.start()
|
||||||
LOG.print("profile start!")
|
LOG.print("profile start!",'message')
|
||||||
end
|
end
|
||||||
switch=not switch
|
switch=not switch
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ function SFX.init(list)
|
|||||||
if love.filesystem.getInfo(N)then
|
if love.filesystem.getInfo(N)then
|
||||||
Sources[list[i]]={love.audio.newSource(N,'static')}
|
Sources[list[i]]={love.audio.newSource(N,'static')}
|
||||||
else
|
else
|
||||||
LOG.print("No SFX file: "..N,5,COLOR.O)
|
LOG.print("No SFX file: "..N,5)
|
||||||
end
|
end
|
||||||
if not skip and i~=count then
|
if not skip and i~=count then
|
||||||
coroutine.yield()
|
coroutine.yield()
|
||||||
|
|||||||
@@ -16,6 +16,12 @@ do--function STRING.shiftChar(c)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function STRING.trim(str)
|
||||||
|
if not str:find("%S")then return""end
|
||||||
|
str=str:sub((str:find("%S"))):reverse()
|
||||||
|
return str:sub((str:find("%S"))):reverse()
|
||||||
|
end
|
||||||
|
|
||||||
function STRING.split(s,sep,regex)
|
function STRING.split(s,sep,regex)
|
||||||
local L={}
|
local L={}
|
||||||
local p1,p2=1--start,target
|
local p1,p2=1--start,target
|
||||||
|
|||||||
@@ -48,15 +48,15 @@ function THEME.set(theme)
|
|||||||
elseif theme=='xmas'then
|
elseif theme=='xmas'then
|
||||||
BG.setDefault('snow')
|
BG.setDefault('snow')
|
||||||
BGM.setDefault('xmas')
|
BGM.setDefault('xmas')
|
||||||
LOG.print("==============",COLOR.R)
|
LOG.print("==============")
|
||||||
LOG.print("Merry Christmas!",COLOR.Z)
|
LOG.print("Merry Christmas!")
|
||||||
LOG.print("==============",COLOR.R)
|
LOG.print("==============")
|
||||||
elseif theme=='sprfes'then
|
elseif theme=='sprfes'then
|
||||||
BG.setDefault('firework')
|
BG.setDefault('firework')
|
||||||
BGM.setDefault("spring festival")
|
BGM.setDefault("spring festival")
|
||||||
LOG.print(" ★☆☆★",COLOR.R)
|
LOG.print(" ★☆☆★")
|
||||||
LOG.print("新年快乐!",COLOR.Z)
|
LOG.print("新年快乐!")
|
||||||
LOG.print(" ★☆☆★",COLOR.R)
|
LOG.print(" ★☆☆★")
|
||||||
elseif theme=='zday1'then
|
elseif theme=='zday1'then
|
||||||
BG.setDefault('lanterns')
|
BG.setDefault('lanterns')
|
||||||
BGM.setDefault("empty")
|
BGM.setDefault("empty")
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ function VOC.init(list)
|
|||||||
|
|
||||||
if n==1 then
|
if n==1 then
|
||||||
if not loadVoiceFile(list[i],list[i])then
|
if not loadVoiceFile(list[i],list[i])then
|
||||||
LOG.print("No VOICE file: "..list[i],5,COLOR.O)
|
LOG.print("No VOICE file: "..list[i],5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not Source[list[i]][1]then Source[list[i]]=nil end
|
if not Source[list[i]][1]then Source[list[i]]=nil end
|
||||||
|
|||||||
@@ -896,7 +896,7 @@ function textBox:update()
|
|||||||
end
|
end
|
||||||
function textBox:push(t)
|
function textBox:push(t)
|
||||||
ins(self.texts,t)
|
ins(self.texts,t)
|
||||||
if self.scrollPos==#self.texts-1 and not self.hide then
|
if self.scrollPos==#self.texts-1 then
|
||||||
self.scrollPos=#self.texts
|
self.scrollPos=#self.texts
|
||||||
else
|
else
|
||||||
self.new=true
|
self.new=true
|
||||||
|
|||||||
6
conf.lua
6
conf.lua
@@ -1,7 +1,7 @@
|
|||||||
VERSION={
|
VERSION={
|
||||||
code=1407,
|
code=1408,
|
||||||
string="Alpha V0.14.7",
|
string="Alpha V0.14.8",
|
||||||
name="烈日 Burn",
|
name="冰激凌 Icecream",
|
||||||
}
|
}
|
||||||
function love.conf(t)
|
function love.conf(t)
|
||||||
t.identity='Techmino'--Saving folder
|
t.identity='Techmino'--Saving folder
|
||||||
|
|||||||
4
main.lua
4
main.lua
@@ -167,7 +167,7 @@ SFX.init((function()
|
|||||||
if fs.getRealDirectory("media/SFX/"..v)~=SAVEDIR then
|
if fs.getRealDirectory("media/SFX/"..v)~=SAVEDIR then
|
||||||
table.insert(L,v:sub(1,-5))
|
table.insert(L,v:sub(1,-5))
|
||||||
else
|
else
|
||||||
LOG.print("Dangerous file : %SAVE%/media/SFX/"..v)
|
LOG.print("Dangerous file : %SAVE%/media/SFX/"..v,'warn')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return L
|
return L
|
||||||
@@ -178,7 +178,7 @@ BGM.init((function()
|
|||||||
if fs.getRealDirectory("media/BGM/"..v)~=SAVEDIR then
|
if fs.getRealDirectory("media/BGM/"..v)~=SAVEDIR then
|
||||||
table.insert(L,v:sub(1,-5))
|
table.insert(L,v:sub(1,-5))
|
||||||
else
|
else
|
||||||
LOG.print("Dangerous file : %SAVE%/media/BGM/"..v)
|
LOG.print("Dangerous file : %SAVE%/media/BGM/"..v,'warn')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return L
|
return L
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ local int=math.floor
|
|||||||
local char,byte=string.char,string.byte
|
local char,byte=string.char,string.byte
|
||||||
local ins=table.insert
|
local ins=table.insert
|
||||||
|
|
||||||
|
local BAG,FIELD,MISSION,CUSTOMENV,GAME=BAG,FIELD,MISSION,CUSTOMENV,GAME
|
||||||
|
|
||||||
local DATA={}
|
local DATA={}
|
||||||
--Sep symbol: 33 (!)
|
--Sep symbol: 33 (!)
|
||||||
--Safe char: 34~126
|
--Safe char: 34~126
|
||||||
@@ -14,7 +16,6 @@ local DATA={}
|
|||||||
Example: "abcdefg" is [SZJLTOI], "a^aDb)" is [Z*63,Z*37,S*10]
|
Example: "abcdefg" is [SZJLTOI], "a^aDb)" is [Z*63,Z*37,S*10]
|
||||||
]]
|
]]
|
||||||
function DATA.copySequence()
|
function DATA.copySequence()
|
||||||
local BAG=BAG
|
|
||||||
local str=""
|
local str=""
|
||||||
|
|
||||||
local count=1
|
local count=1
|
||||||
@@ -111,24 +112,22 @@ function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
|
|||||||
if not page then page=1 end
|
if not page then page=1 end
|
||||||
if not FIELD[page]then FIELD[page]=DATA.newBoard()end
|
if not FIELD[page]then FIELD[page]=DATA.newBoard()end
|
||||||
local F=FIELD[page]
|
local F=FIELD[page]
|
||||||
local _,__
|
|
||||||
|
|
||||||
--Decode
|
--Decode
|
||||||
if not str:find("%S")then return end
|
local res
|
||||||
str=str:sub((str:find("%S"))):reverse()
|
str=STRING.trim(str)
|
||||||
str=str:sub((str:find("%S"))):reverse()
|
res,str=pcall(data.decode,'string','base64',str)
|
||||||
_,str=pcall(data.decode,'string','base64',str)
|
if not res then return end
|
||||||
if not _ then return end
|
res,str=pcall(data.decompress,'string','zlib',str)
|
||||||
_,str=pcall(data.decompress,'string','zlib',str)
|
if not res then return end
|
||||||
if not _ then return end
|
|
||||||
|
|
||||||
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
|
local fX,fY=1,1--*ptr for Field(r*10+(c-1))
|
||||||
local p=1
|
local p=1
|
||||||
while true do
|
while true do
|
||||||
_=byte(str,p)--1byte
|
local b=byte(str,p)--1byte
|
||||||
|
|
||||||
--Str end
|
--Str end
|
||||||
if not _ then
|
if not b then
|
||||||
if fX~=1 then
|
if fX~=1 then
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
@@ -136,11 +135,11 @@ function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
__=_%32-1--Block id
|
local id=b%32-1--Block id
|
||||||
if __>26 then return end--Illegal blockid
|
if id>26 then return end--Illegal blockid
|
||||||
_=int(_/32)--Mode id
|
b=int(b/32)--Mode id
|
||||||
|
|
||||||
F[fY][fX]=__
|
F[fY][fX]=id
|
||||||
if fX<10 then
|
if fX<10 then
|
||||||
fX=fX+1
|
fX=fX+1
|
||||||
else
|
else
|
||||||
@@ -178,7 +177,6 @@ end
|
|||||||
]]
|
]]
|
||||||
function DATA.copyMission()
|
function DATA.copyMission()
|
||||||
local _
|
local _
|
||||||
local MISSION=MISSION
|
|
||||||
local str=""
|
local str=""
|
||||||
|
|
||||||
local count=1
|
local count=1
|
||||||
@@ -364,7 +362,7 @@ do--function DATA.saveRecording()
|
|||||||
--Filtering modes that cannot be saved
|
--Filtering modes that cannot be saved
|
||||||
for _,v in next,noRecList do
|
for _,v in next,noRecList do
|
||||||
if GAME.curModeName:find(v)then
|
if GAME.curModeName:find(v)then
|
||||||
LOG.print("Cannot save recording of this mode now!",COLOR.N)
|
LOG.print("Cannot save recording of this mode now!",'warn')
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -388,7 +386,7 @@ do--function DATA.saveRecording()
|
|||||||
FILE.save(REPLAY,'conf/replay')
|
FILE.save(REPLAY,'conf/replay')
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
LOG.print("Save failed: File already exists")
|
LOG.print("Save failed: File already exists",'error')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -245,7 +245,6 @@ function loadGame(M,ifQuickPlay,ifNet)--Load a mode and go to game scene
|
|||||||
end
|
end
|
||||||
function gameOver()--Save record
|
function gameOver()--Save record
|
||||||
if GAME.replaying then return end
|
if GAME.replaying then return end
|
||||||
FILE.save(STAT,'conf/data')
|
|
||||||
local M=GAME.curMode
|
local M=GAME.curMode
|
||||||
local R=M.getRank
|
local R=M.getRank
|
||||||
if R then
|
if R then
|
||||||
@@ -434,9 +433,10 @@ do--function resetGameData(args)
|
|||||||
end
|
end
|
||||||
function resetGameData(args,seed)
|
function resetGameData(args,seed)
|
||||||
if not args then args=""end
|
if not args then args=""end
|
||||||
if PLAYERS[1]and not GAME.replaying and(PLAYERS[1].frameRun>400 or GAME.result)then
|
if PLAYERS[1]and not GAME.replaying and(PLAYERS[1].frameRun>300 or GAME.result)then
|
||||||
mergeStat(STAT,PLAYERS[1].stat)
|
mergeStat(STAT,PLAYERS[1].stat)
|
||||||
STAT.todayTime=STAT.todayTime+PLAYERS[1].stat.time
|
STAT.todayTime=STAT.todayTime+PLAYERS[1].stat.time
|
||||||
|
FILE.save(STAT,'conf/data','q')
|
||||||
end
|
end
|
||||||
|
|
||||||
GAME.result=false
|
GAME.result=false
|
||||||
|
|||||||
@@ -282,9 +282,9 @@ SETTING={--Settings
|
|||||||
text=true,
|
text=true,
|
||||||
score=true,
|
score=true,
|
||||||
warn=true,
|
warn=true,
|
||||||
bufferWarn=false,
|
bufferWarn=true,
|
||||||
highCam=false,
|
highCam=true,
|
||||||
nextPos=false,
|
nextPos=true,
|
||||||
fullscreen=true,
|
fullscreen=true,
|
||||||
bg=true,
|
bg=true,
|
||||||
powerInfo=false,
|
powerInfo=false,
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ return{
|
|||||||
loginFailed="Failed to log in.",
|
loginFailed="Failed to log in.",
|
||||||
accessSuccessed="Access Granted.",
|
accessSuccessed="Access Granted.",
|
||||||
accessFailed="Access Denied.",
|
accessFailed="Access Denied.",
|
||||||
|
|
||||||
|
wsConnecting="Websocket: Connecting",
|
||||||
wsSuccessed="WebSocket: Connected.",
|
wsSuccessed="WebSocket: Connected.",
|
||||||
wsFailed="WebSocket: Connection Failed.",
|
wsFailed="WebSocket: Connection Failed.",
|
||||||
wsClose="WebSocket Closed: ",
|
wsClose="WebSocket Closed: ",
|
||||||
@@ -106,7 +108,8 @@ return{
|
|||||||
joinRoom="has joined the room.",
|
joinRoom="has joined the room.",
|
||||||
leaveRoom="has left the room.",
|
leaveRoom="has left the room.",
|
||||||
ready="READY",
|
ready="READY",
|
||||||
set="SET",
|
connStream="CONNECTING",
|
||||||
|
waitStream="WAITING",
|
||||||
champion="$1 won",
|
champion="$1 won",
|
||||||
chatRemain="Online",
|
chatRemain="Online",
|
||||||
chatStart="------Beginning of log------",
|
chatStart="------Beginning of log------",
|
||||||
@@ -694,7 +697,7 @@ return{
|
|||||||
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines."},
|
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines."},
|
||||||
['dig_1000l']= {"Dig", "1000L", "Dig 1000 garbage lines."},
|
['dig_1000l']= {"Dig", "1000L", "Dig 1000 garbage lines."},
|
||||||
['drought_n']= {"Drought", "100L", "There are no I-pieces."},
|
['drought_n']= {"Drought", "100L", "There are no I-pieces."},
|
||||||
['drought_l']= {"Drought", "100L", "W T F"},
|
['drought_l']= {"Drought+", "100L", "W T F"},
|
||||||
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with accelerating speed."},
|
||||||
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon."},
|
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon."},
|
||||||
['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
|
['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
|
||||||
@@ -747,6 +750,7 @@ return{
|
|||||||
['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
||||||
['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
||||||
['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
||||||
|
['pc_inf']= {"Infinite PC Challenge","", "Get PCs as much as you can"},
|
||||||
['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
|
['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
|
||||||
['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only."},
|
['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only."},
|
||||||
['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
|
['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ return{
|
|||||||
loginFailed="Erreur de connexion",
|
loginFailed="Erreur de connexion",
|
||||||
accessSuccessed="Autorisé avec succès !",
|
accessSuccessed="Autorisé avec succès !",
|
||||||
accessFailed="Autorisation échouée",
|
accessFailed="Autorisation échouée",
|
||||||
|
|
||||||
|
-- wsConnecting="Websocket: Connecting",
|
||||||
wsSuccessed="WebSocket: connecté",
|
wsSuccessed="WebSocket: connecté",
|
||||||
wsFailed="WebSocket: connection échouée",
|
wsFailed="WebSocket: connection échouée",
|
||||||
-- wsClose="WebSocket Closed: ",
|
-- wsClose="WebSocket Closed: ",
|
||||||
@@ -106,7 +108,8 @@ return{
|
|||||||
joinRoom="a rejoint le salon.",
|
joinRoom="a rejoint le salon.",
|
||||||
leaveRoom="a quitté le salon.",
|
leaveRoom="a quitté le salon.",
|
||||||
-- ready="READY",
|
-- ready="READY",
|
||||||
-- set="SET",
|
-- connStream="CONNECTING",
|
||||||
|
-- waitStream="WAITING",
|
||||||
champion="$1 a gagné",
|
champion="$1 a gagné",
|
||||||
chatRemain="En ligne : ",
|
chatRemain="En ligne : ",
|
||||||
chatStart="--------Début des logs--------",
|
chatStart="--------Début des logs--------",
|
||||||
@@ -605,7 +608,7 @@ return{
|
|||||||
['dig_400l']= {"Dig", "400L", "Creusez 400 lines"},
|
['dig_400l']= {"Dig", "400L", "Creusez 400 lines"},
|
||||||
['dig_1000l']= {"Dig", "1000L", "Creusez 1000 lines"},
|
['dig_1000l']= {"Dig", "1000L", "Creusez 1000 lines"},
|
||||||
['drought_n']= {"Drought", "100L", "Pas de pièce I !"},
|
['drought_n']= {"Drought", "100L", "Pas de pièce I !"},
|
||||||
['drought_l']= {"Drought", "100L", "WTF ??!!"},
|
['drought_l']= {"Drought+", "100L", "WTF ??!!"},
|
||||||
['marathon_n']= {"Marathon", "NORMAL", "Marathon de 200 lignes."},
|
['marathon_n']= {"Marathon", "NORMAL", "Marathon de 200 lignes."},
|
||||||
['marathon_h']= {"Marathon", "DIFFICILE", "Marathon de 200 lignes à très haute vitesse"},
|
['marathon_h']= {"Marathon", "DIFFICILE", "Marathon de 200 lignes à très haute vitesse"},
|
||||||
['solo_e']= {"Battle", "FACILE", "Battez l'IA !"},
|
['solo_e']= {"Battle", "FACILE", "Battez l'IA !"},
|
||||||
@@ -658,6 +661,7 @@ return{
|
|||||||
['pc_n']= {"PC Challenge", "NORMAL", "Obtenez un PC dans les prochaines 100 lignes !"},
|
['pc_n']= {"PC Challenge", "NORMAL", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||||
['pc_h']= {"PC Challenge", "DIFFICILE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
['pc_h']= {"PC Challenge", "DIFFICILE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||||
['pc_l']= {"PC Challenge", "LUNATIQUE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
['pc_l']= {"PC Challenge", "LUNATIQUE", "Obtenez un PC dans les prochaines 100 lignes !"},
|
||||||
|
['pc_inf']= {"Infinite PC Challenge","", "Get PCs as much as you can"},--TODO
|
||||||
['tech_n']= {"Tech", "NORMAL", "Gardez le B2B !"},
|
['tech_n']= {"Tech", "NORMAL", "Gardez le B2B !"},
|
||||||
['tech_n_plus']= {"Tech", "NORMAL+", "Spin & PC uniquement"},
|
['tech_n_plus']= {"Tech", "NORMAL+", "Spin & PC uniquement"},
|
||||||
['tech_h']= {"Tech", "DIFFICILE", "Gardez le B2B !"},
|
['tech_h']= {"Tech", "DIFFICILE", "Gardez le B2B !"},
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ return{
|
|||||||
loginFailed="Falha na autenticação",
|
loginFailed="Falha na autenticação",
|
||||||
accessSuccessed="Autorizado com sucesso!",
|
accessSuccessed="Autorizado com sucesso!",
|
||||||
accessFailed="Falha na autorização",
|
accessFailed="Falha na autorização",
|
||||||
|
|
||||||
|
-- wsConnecting="Websocket: Connecting",
|
||||||
wsSuccessed="WebSocket: conectado",
|
wsSuccessed="WebSocket: conectado",
|
||||||
wsFailed="WebSocket: falha na conexão",
|
wsFailed="WebSocket: falha na conexão",
|
||||||
wsClose="WebSocket closed: ",
|
wsClose="WebSocket closed: ",
|
||||||
@@ -106,7 +108,8 @@ return{
|
|||||||
joinRoom="Entrou a sala.",
|
joinRoom="Entrou a sala.",
|
||||||
leaveRoom="Saiu da sala.",
|
leaveRoom="Saiu da sala.",
|
||||||
-- ready="READY",
|
-- ready="READY",
|
||||||
-- set="SET",
|
-- connStream="CONNECTING",
|
||||||
|
-- waitStream="WAITING",
|
||||||
-- champion="$1 won",
|
-- champion="$1 won",
|
||||||
chatRemain="Online",
|
chatRemain="Online",
|
||||||
chatStart="------Começo do log------",
|
chatStart="------Começo do log------",
|
||||||
@@ -690,7 +693,7 @@ return{
|
|||||||
['dig_400l']= {"Cave", "400L", "Cave 400 linhas de lixo."},
|
['dig_400l']= {"Cave", "400L", "Cave 400 linhas de lixo."},
|
||||||
['dig_1000l']= {"Cave", "1000L", "Cave 1000 linhas de lixo."},
|
['dig_1000l']= {"Cave", "1000L", "Cave 1000 linhas de lixo."},
|
||||||
['drought_n']= {"Drought", "100L", "Sem peça I !"},
|
['drought_n']= {"Drought", "100L", "Sem peça I !"},
|
||||||
['drought_l']= {"Drought", "100L", "WTF"},
|
['drought_l']= {"Drought+", "100L", "WTF"},
|
||||||
['marathon_n']= {"Maratona", "NORMAL", "200-line Maratona com velocidade aumentando."},
|
['marathon_n']= {"Maratona", "NORMAL", "200-line Maratona com velocidade aumentando."},
|
||||||
['marathon_h']= {"Maratona", "DIFÍCIL", "200-line Maratona com velocidade alta."},
|
['marathon_h']= {"Maratona", "DIFÍCIL", "200-line Maratona com velocidade alta."},
|
||||||
['solo_e']= {"Batalha", "FÁCIL", "Derrote a inteligência!"},
|
['solo_e']= {"Batalha", "FÁCIL", "Derrote a inteligência!"},
|
||||||
@@ -743,6 +746,7 @@ return{
|
|||||||
['pc_n']= {"Desafio PC", "NORMAL", "Obtenha PCs em 100 linhas!"},
|
['pc_n']= {"Desafio PC", "NORMAL", "Obtenha PCs em 100 linhas!"},
|
||||||
['pc_h']= {"Desafio PC", "DIFÍCIL", "Obtenha PCs em 100 linhas!"},
|
['pc_h']= {"Desafio PC", "DIFÍCIL", "Obtenha PCs em 100 linhas!"},
|
||||||
['pc_l']= {"Desafio PC", "LUNÁTICO", "Obteha PCs em 100 linhas!"},
|
['pc_l']= {"Desafio PC", "LUNÁTICO", "Obteha PCs em 100 linhas!"},
|
||||||
|
['pc_inf']= {"Infinite PC Challenge","", "Get PCs as much as you can"},--TODO
|
||||||
['tech_n']= {"Tech", "NORMAL", "Não quebre o B2B!"},
|
['tech_n']= {"Tech", "NORMAL", "Não quebre o B2B!"},
|
||||||
['tech_n_plus']= {"Tech", "NORMAL+", "Apenas spins e PC"},
|
['tech_n_plus']= {"Tech", "NORMAL+", "Apenas spins e PC"},
|
||||||
['tech_h']= {"Tech", "HARD", "Keep the B2B chain!"},
|
['tech_h']= {"Tech", "HARD", "Keep the B2B chain!"},
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ return{
|
|||||||
loginFailed="Error al ingresar",
|
loginFailed="Error al ingresar",
|
||||||
accessSuccessed="¡Autorizado exitoso!",
|
accessSuccessed="¡Autorizado exitoso!",
|
||||||
accessFailed="Error al autorizar",
|
accessFailed="Error al autorizar",
|
||||||
|
|
||||||
|
-- wsConnecting="Websocket: Connecting",
|
||||||
wsSuccessed="WebSocket: conectado",
|
wsSuccessed="WebSocket: conectado",
|
||||||
wsFailed="WebSocket: conexión fallida",
|
wsFailed="WebSocket: conexión fallida",
|
||||||
wsClose="WebSocket cerrado: ",
|
wsClose="WebSocket cerrado: ",
|
||||||
@@ -106,7 +108,8 @@ return{
|
|||||||
joinRoom="entró a la sala.",
|
joinRoom="entró a la sala.",
|
||||||
leaveRoom="salió de la sala.",
|
leaveRoom="salió de la sala.",
|
||||||
-- ready="READY",
|
-- ready="READY",
|
||||||
-- set="SET",
|
-- connStream="CONNECTING",
|
||||||
|
-- waitStream="WAITING",
|
||||||
champion="$1 ganó!",
|
champion="$1 ganó!",
|
||||||
chatRemain="Usuarios en línea: ",
|
chatRemain="Usuarios en línea: ",
|
||||||
chatStart="------Comienzo del historial------",
|
chatStart="------Comienzo del historial------",
|
||||||
@@ -603,7 +606,7 @@ return{
|
|||||||
['dig_400l']= {"Queso", "400L", "Limpia 400 líneas de queso."},
|
['dig_400l']= {"Queso", "400L", "Limpia 400 líneas de queso."},
|
||||||
['dig_1000l']= {"Queso", "1000L", "Limpia 1000 líneas de queso."},
|
['dig_1000l']= {"Queso", "1000L", "Limpia 1000 líneas de queso."},
|
||||||
['drought_n']= {"Sequía", "100L", "¡Sin piezas I!"},
|
['drought_n']= {"Sequía", "100L", "¡Sin piezas I!"},
|
||||||
['drought_l']= {"Sequía", "100L", "Guat de foc..."},
|
['drought_l']= {"Sequía+", "100L", "Guat de foc..."},
|
||||||
['marathon_n']= {"Maratón", "Normal", "Maratón de 200 líneas con velocidad en aumento."},
|
['marathon_n']= {"Maratón", "Normal", "Maratón de 200 líneas con velocidad en aumento."},
|
||||||
['marathon_h']= {"Maratón", "Difícil", "Maratón de 200 líneas a velocidad máxima."},
|
['marathon_h']= {"Maratón", "Difícil", "Maratón de 200 líneas a velocidad máxima."},
|
||||||
['solo_e']= {"VS.", "Fácil", "¡Derrota a la CPU!"},
|
['solo_e']= {"VS.", "Fácil", "¡Derrota a la CPU!"},
|
||||||
@@ -655,6 +658,7 @@ return{
|
|||||||
['pc_n']= {"Desafío de PCs", "Normal", "¡Consigue los PCs que puedas en 100 líneas!"},
|
['pc_n']= {"Desafío de PCs", "Normal", "¡Consigue los PCs que puedas en 100 líneas!"},
|
||||||
['pc_h']= {"Desafío de PCs", "Difícil", "¡Consigue los PCs que puedas en 100 líneas!"},
|
['pc_h']= {"Desafío de PCs", "Difícil", "¡Consigue los PCs que puedas en 100 líneas!"},
|
||||||
['pc_l']= {"Desafío de PCs", "Lunático", "¡Consigue los PCs que puedas en 100 líneas!"},
|
['pc_l']= {"Desafío de PCs", "Lunático", "¡Consigue los PCs que puedas en 100 líneas!"},
|
||||||
|
['pc_inf']= {"Infinite PC Challenge","", "Get PCs as much as you can"},--TODO
|
||||||
['tech_n']= {"Tech", "Normal", "¡Mantén el B2B!"},
|
['tech_n']= {"Tech", "Normal", "¡Mantén el B2B!"},
|
||||||
['tech_n_plus']= {"Tech", "Normal+", "¡Sólo se permiten Spins y PCs!"},
|
['tech_n_plus']= {"Tech", "Normal+", "¡Sólo se permiten Spins y PCs!"},
|
||||||
['tech_h']= {"Tech", "Difícil", "¡Mantén el B2B!"},
|
['tech_h']= {"Tech", "Difícil", "¡Mantén el B2B!"},
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ return{
|
|||||||
['dig_400l']= {"挖掘", "400L", "挖400行"},
|
['dig_400l']= {"挖掘", "400L", "挖400行"},
|
||||||
['dig_1000l']= {"挖掘", "1000L", "挖1000行"},
|
['dig_1000l']= {"挖掘", "1000L", "挖1000行"},
|
||||||
['drought_n']= {"干旱", "100L", "放轻松,简单得很"},
|
['drought_n']= {"干旱", "100L", "放轻松,简单得很"},
|
||||||
['drought_l']= {"干旱", "100L", "有趣的要来了"},
|
['drought_l']= {"干旱+", "100L", "有趣的要来了"},
|
||||||
['marathon_n']= {"马拉松", "普通", "休闲模式"},
|
['marathon_n']= {"马拉松", "普通", "休闲模式"},
|
||||||
['marathon_h']= {"马拉松", "困难", "休闲模式"},
|
['marathon_h']= {"马拉松", "困难", "休闲模式"},
|
||||||
['solo_e']= {"单挑", "简单", "鲨AI"},
|
['solo_e']= {"单挑", "简单", "鲨AI"},
|
||||||
@@ -257,6 +257,7 @@ return{
|
|||||||
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
||||||
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
||||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||||
|
['pc_inf']= {"无尽全清挑战", "", "你这水平还是先别玩了"},
|
||||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||||
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
||||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||||
@@ -275,44 +276,11 @@ return{
|
|||||||
['zen']= {"禅", "200", "不限时200行"},
|
['zen']= {"禅", "200", "不限时200行"},
|
||||||
['ultra']= {"限时打分", "挑战", "2分钟刷分"},
|
['ultra']= {"限时打分", "挑战", "2分钟刷分"},
|
||||||
['infinite']= {"无尽", "", "真的有人会玩这个?"},
|
['infinite']= {"无尽", "", "真的有人会玩这个?"},
|
||||||
['infinite_dig']= {"无尽:挖掘", "", "闲得慌的话来挖"},
|
['infinite_dig']= {"无尽:挖掘", "", "闲得慌就来挖"},
|
||||||
['sprintFix']= {"竞速", "无移动"},
|
['sprintFix']= {"竞速", "无移动"},
|
||||||
['sprintLock']= {"竞速", "无旋转"},
|
['sprintLock']= {"竞速", "无旋转"},
|
||||||
['marathon_bfmax']= {"马拉松", "极限"},
|
['marathon_bfmax']= {"马拉松", "极限"},
|
||||||
['custom_clear']= {"自定义", "普通"},
|
['custom_clear']= {"自定义", "普通"},
|
||||||
['custom_puzzle']= {"自定义", "拼图"},
|
['custom_puzzle']= {"自定义", "拼图"},
|
||||||
},
|
},
|
||||||
getTip={refuseCopy=true,
|
|
||||||
"100apm?你倒是不用开局定式连续打几把",
|
|
||||||
"10连pc不是随手?",
|
|
||||||
"20G很难?是个人都能玩吧。",
|
|
||||||
"20TSD不难吧。",
|
|
||||||
"3pps不是人均水平?",
|
|
||||||
"40行还要40多秒,就这?",
|
|
||||||
"别会个c4w就以为自己多强,这是基本功罢了。",
|
|
||||||
"别人只用一只手都能玩,你呢?",
|
|
||||||
"不会吧不会吧,真的还有人不能随手Tspin?",
|
|
||||||
"除了雨宫太阳你还认识谁?Jonas知道吗?Ajanba听过吗?",
|
|
||||||
"还搁这玩手机呢,作业做完了?",
|
|
||||||
"极限20G不是随手通?",
|
|
||||||
"叫你多练就多练,想着几天变神仙,当自己是谁?",
|
|
||||||
"先练基础不听,现在速度没有,Tspin完地形一塌糊涂,开心吗?",
|
|
||||||
"经典块跟现代块是两个游戏,别拿多少年前水平秀优越,请从头练起。",
|
|
||||||
"卖弱不是谦虚,请看场合。",
|
|
||||||
"卖弱是要遭报应的",
|
|
||||||
"满口PCDT信天翁,还会点别的么?",
|
|
||||||
"没那水平别天天整什么花里胡哨的,人玩几年你想几天赶上?",
|
|
||||||
"全隐40行全消四很难吗??",
|
|
||||||
"少玩点,多眨眨眼,不听瞎了别怪我没提醒你",
|
|
||||||
"设置都看过一遍了吗?明明都有还嫌功能少,谁的问题?",
|
|
||||||
"谁说一定要强的人才叫卖弱?不是最菜就一定在有人眼中是卖弱",
|
|
||||||
"双旋和极简尽早学起来…懒得学以后亏的是自己",
|
|
||||||
"天天催更催更,你咋不来帮忙开发啊,真以为作者很强催催啥都有?",
|
|
||||||
"天天卖弱,你一定把把150apm吧?",
|
|
||||||
"问怎么练就好好问,别就一句话怎么变强,鬼知道你现在什么水平",
|
|
||||||
"一口一个wtcl还不赶紧去练,你是不思进取还是不想好好说话?",
|
|
||||||
"隐形很难?上电视那个水平一般都打成那样,属实自己不行看不起别人",
|
|
||||||
"隐形哪难了,你练了吗?没练几个小时在这里说难是嫌葡萄酸?",
|
|
||||||
"这不是休闲游戏…别怪关卡要求太高,就是你菜,请多练。",
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
@@ -93,6 +93,8 @@ return{
|
|||||||
loginFailed="登录失败",
|
loginFailed="登录失败",
|
||||||
accessSuccessed="身份验证成功",
|
accessSuccessed="身份验证成功",
|
||||||
accessFailed="身份验证失败",
|
accessFailed="身份验证失败",
|
||||||
|
|
||||||
|
wsConnecting="正在连接WS",
|
||||||
wsSuccessed="WS连接成功",
|
wsSuccessed="WS连接成功",
|
||||||
wsFailed="WS连接失败",
|
wsFailed="WS连接失败",
|
||||||
wsClose="WS被断开: ",
|
wsClose="WS被断开: ",
|
||||||
@@ -106,7 +108,8 @@ return{
|
|||||||
joinRoom="进入房间",
|
joinRoom="进入房间",
|
||||||
leaveRoom="离开房间",
|
leaveRoom="离开房间",
|
||||||
ready="各就各位!",
|
ready="各就各位!",
|
||||||
set="预备!",
|
connStream="正在连接",
|
||||||
|
waitStream="等待其他人连接",
|
||||||
champion="$1 获胜",
|
champion="$1 获胜",
|
||||||
chatRemain="人数:",
|
chatRemain="人数:",
|
||||||
chatStart="------消息的开头------",
|
chatStart="------消息的开头------",
|
||||||
@@ -695,7 +698,7 @@ return{
|
|||||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||||
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
||||||
['drought_n']= {"干旱", "100L", "你I没了"},
|
['drought_n']= {"干旱", "100L", "你I没了"},
|
||||||
['drought_l']= {"干旱", "100L", "后 妈 发 牌"},
|
['drought_l']= {"干旱+", "100L", "后 妈 发 牌"},
|
||||||
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
||||||
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
||||||
['solo_e']= {"单挑", "简单", "打败AI"},
|
['solo_e']= {"单挑", "简单", "打败AI"},
|
||||||
@@ -748,6 +751,7 @@ return{
|
|||||||
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
||||||
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
||||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||||
|
['pc_inf']= {"无尽全清挑战", "", "你能连续做多少PC?"},
|
||||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||||
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
||||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||||
@@ -806,15 +810,14 @@ return{
|
|||||||
"6next 1hold!",
|
"6next 1hold!",
|
||||||
"6next 6hold?!",
|
"6next 6hold?!",
|
||||||
"7宽三SZ架空捐了解一下",
|
"7宽三SZ架空捐了解一下",
|
||||||
"9999in1",
|
"626in1",
|
||||||
"按钮风格进化史",
|
"按钮风格进化史",
|
||||||
"把手机调到特殊的日期也许会发生什么",
|
"把手机调到特殊的日期也许会发生什么",
|
||||||
"报时机器人:新的一天开始了",
|
"报时机器人:新的一天开始了",
|
||||||
"背景影响游玩?可以去设置关闭",
|
"背景影响游玩?可以去设置关闭",
|
||||||
"本游戏不是产品,是作品(至少目前是…)",
|
"本游戏不是产品,是作品(至少目前是,嗯…)",
|
||||||
"本游戏的一部分内容是国际合作的!",
|
"本游戏的一部分内容是国际合作的!",
|
||||||
"本游戏的B2B是气槽机制,和传统的开关机制不一样哦",
|
"本游戏的B2B是气槽机制,和传统的开关机制不一样哦",
|
||||||
"本游戏可不是休闲游戏。",
|
|
||||||
"本游戏内置了几个休(ying)闲(he)小游戏哦~入口就藏在这个菜单",
|
"本游戏内置了几个休(ying)闲(he)小游戏哦~入口就藏在这个菜单",
|
||||||
"本游戏在设计的时候受到了大量其他块游甚至一些音游的启发",
|
"本游戏在设计的时候受到了大量其他块游甚至一些音游的启发",
|
||||||
"必须要软降才能到达的位置都会判定为极简操作",
|
"必须要软降才能到达的位置都会判定为极简操作",
|
||||||
@@ -828,7 +831,7 @@ return{
|
|||||||
"彩色消除即将到来!",
|
"彩色消除即将到来!",
|
||||||
"草(日本语)",
|
"草(日本语)",
|
||||||
"成就系统在做了!",
|
"成就系统在做了!",
|
||||||
"触发游戏报错后日志文件会越来越大(不过顶多几十K)",
|
"触发游戏报错后日志文件会越来越大(不过顶多几百K)",
|
||||||
"触摸板打osu也很好!",
|
"触摸板打osu也很好!",
|
||||||
"凑数tip什么时候能站起来!",
|
"凑数tip什么时候能站起来!",
|
||||||
"打好块跟学习一样没有捷径,多练。",
|
"打好块跟学习一样没有捷径,多练。",
|
||||||
@@ -857,6 +860,7 @@ return{
|
|||||||
"感觉自己速度到上限了?试着把das调低一点",
|
"感觉自己速度到上限了?试着把das调低一点",
|
||||||
"感谢群友帮忙想tip",
|
"感谢群友帮忙想tip",
|
||||||
"感谢Orzmic为这个tip显示框提出意见",
|
"感谢Orzmic为这个tip显示框提出意见",
|
||||||
|
"感谢Phigros提供部分tip模板(",
|
||||||
"刚接触方块的话多玩玩就行,40行两分钟以外没啥好针对性练习的",
|
"刚接触方块的话多玩玩就行,40行两分钟以外没啥好针对性练习的",
|
||||||
"刚开始练全隐形可以尽量堆平,留一列消四",
|
"刚开始练全隐形可以尽量堆平,留一列消四",
|
||||||
"隔断消除即将到来!",
|
"隔断消除即将到来!",
|
||||||
@@ -865,7 +869,6 @@ return{
|
|||||||
"更小的DAS和ARR拥有更高的操作上限(能控制得了的话)",
|
"更小的DAS和ARR拥有更高的操作上限(能控制得了的话)",
|
||||||
"更新内容在游戏里和群公告都有写!",
|
"更新内容在游戏里和群公告都有写!",
|
||||||
"攻击生效速度(从快到慢):消二/三,消四,spin,高连击",
|
"攻击生效速度(从快到慢):消二/三,消四,spin,高连击",
|
||||||
"官网在做了",
|
|
||||||
"还能写些什么tip呢",
|
"还能写些什么tip呢",
|
||||||
"好像还没人能用脚打块打到一定水平",
|
"好像还没人能用脚打块打到一定水平",
|
||||||
"好像可以把手机倒过来打场地旋转180...那还是不建议违反规则",
|
"好像可以把手机倒过来打场地旋转180...那还是不建议违反规则",
|
||||||
@@ -897,6 +900,7 @@ return{
|
|||||||
"你可以从统计页面打开游戏存档目录",
|
"你可以从统计页面打开游戏存档目录",
|
||||||
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
|
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
|
||||||
"你说彩蛋?嗯…算是有,可以找找",
|
"你说彩蛋?嗯…算是有,可以找找",
|
||||||
|
"你有一个好",
|
||||||
"你知道吗:看主页机器人玩可能比较费电",
|
"你知道吗:看主页机器人玩可能比较费电",
|
||||||
"你知道吗:全程不使用任何旋转键完成40行模式是有可能的",
|
"你知道吗:全程不使用任何旋转键完成40行模式是有可能的",
|
||||||
"你知道吗:全程不使用左右移动键完成40行模式是有可能的",
|
"你知道吗:全程不使用左右移动键完成40行模式是有可能的",
|
||||||
@@ -966,6 +970,7 @@ return{
|
|||||||
"作者40行sub26了",
|
"作者40行sub26了",
|
||||||
"作者电脑上装了10个方块",
|
"作者电脑上装了10个方块",
|
||||||
"作者浏览器收藏夹里有6个方块",
|
"作者浏览器收藏夹里有6个方块",
|
||||||
|
"做,做碌鸠啊做,打块先啦!",
|
||||||
"做点击特效的时候真没想抄Phigros!想法另有出处,做完了才突然发现好像(",
|
"做点击特效的时候真没想抄Phigros!想法另有出处,做完了才突然发现好像(",
|
||||||
"ALLSPIN!",
|
"ALLSPIN!",
|
||||||
"Am G F G",
|
"Am G F G",
|
||||||
@@ -1010,6 +1015,7 @@ return{
|
|||||||
"sin2α=2SαCα",
|
"sin2α=2SαCα",
|
||||||
"sofunhowtoget",
|
"sofunhowtoget",
|
||||||
"Staff名单里飘过的是赞助榜单,喜欢本游戏的话可以给我们打赞助支持开发哦~",
|
"Staff名单里飘过的是赞助榜单,喜欢本游戏的话可以给我们打赞助支持开发哦~",
|
||||||
|
"STSD必死",
|
||||||
"SΔABC=√(h(h-a)(h-b)(h-c)), h=(a+b+c)/2",
|
"SΔABC=√(h(h-a)(h-b)(h-c)), h=(a+b+c)/2",
|
||||||
"Techmino = Technique + tetromino",
|
"Techmino = Technique + tetromino",
|
||||||
"Techmino 好玩!",
|
"Techmino 好玩!",
|
||||||
@@ -1063,19 +1069,13 @@ return{
|
|||||||
{C.G,"快捷键: Ctrl+W=关闭当前标签页"},
|
{C.G,"快捷键: Ctrl+W=关闭当前标签页"},
|
||||||
{C.G,"快捷键: shift+del=永久删除文件 (技术人员别杠)"},
|
{C.G,"快捷键: shift+del=永久删除文件 (技术人员别杠)"},
|
||||||
{C.G,"GREEN"},
|
{C.G,"GREEN"},
|
||||||
{C.H,"感谢Phigros提供部分tip模板("},
|
|
||||||
{C.H,"暂定段位:9"},
|
{C.H,"暂定段位:9"},
|
||||||
{C.H,"REGRET!!"},
|
{C.H,"REGRET!!"},
|
||||||
{C.J,"JADE"},
|
{C.J,"JADE"},
|
||||||
{C.L,"LIME"},
|
{C.L,"LIME"},
|
||||||
{C.lC,"26连T2来一个?"},
|
{C.lC,"26连T2来一个?"},
|
||||||
{C.lC,"Xspin",C.Z,"是啥"},
|
{C.lC,"Xspin",C.Z,"是啥"},
|
||||||
{C.lH,"腱鞘炎警告"},
|
{C.lP,"秘密数字:626"},
|
||||||
{C.lH,"没学过编曲,音乐都是自己瞎写的,觉得不好听就去设置关了吧"},
|
|
||||||
{C.lH,"秘密数字:626"},
|
|
||||||
{C.lH,"你有一个好"},
|
|
||||||
{C.lH,"STSD必死"},
|
|
||||||
{C.lH,"Techmino没有抽卡没有氪金,太良心了"},
|
|
||||||
{C.lP,"Naki",C.Z," 可爱!"},
|
{C.lP,"Naki",C.Z," 可爱!"},
|
||||||
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
|
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
|
||||||
{C.lS,"茶娘",C.Z," 可爱!"},
|
{C.lS,"茶娘",C.Z," 可爱!"},
|
||||||
@@ -1116,5 +1116,41 @@ return{
|
|||||||
{C.Z,"效率药水",C.H," 效率提升 (8:00)"},
|
{C.Z,"效率药水",C.H," 效率提升 (8:00)"},
|
||||||
{C.Z,"协调药水",C.H," MD减少 II(1:30)"},
|
{C.Z,"协调药水",C.H," MD减少 II(1:30)"},
|
||||||
-- "Z酱 可爱!",
|
-- "Z酱 可爱!",
|
||||||
|
{C.dH,"100apm?你倒是不用开局定式连续打几把"},
|
||||||
|
{C.dH,"10连pc不是随手?"},
|
||||||
|
{C.dH,"20G很难?是个人练练都能玩吧。"},
|
||||||
|
{C.dH,"20TSD不是轻松?"},
|
||||||
|
{C.dH,"3pps不是人均水平?"},
|
||||||
|
{C.dH,"40行还要40多秒,就这?"},
|
||||||
|
{C.dH,"别动不动大惊小怪,就你没见过"},
|
||||||
|
{C.dH,"别会个c4w就以为自己多强,基本功罢了。"},
|
||||||
|
{C.dH,"别人用跳舞毯打得都比你好"},
|
||||||
|
{C.dH,"别人只用一只手都能玩,你呢?"},
|
||||||
|
{C.dH,"除了雨宫太阳你还认识谁?Jonas知道吗?Ajanba听过吗?"},
|
||||||
|
{C.dH,"还搁这玩手机呢,作业做完了?"},
|
||||||
|
{C.dH,"极限20G不是随手通?"},
|
||||||
|
{C.dH,"腱鞘炎警告"},
|
||||||
|
{C.dH,"叫你多练就多练,想着几天变神仙,当自己是谁?"},
|
||||||
|
{C.dH,"经典块跟现代块是两个游戏,别拿多少年前水平秀优越,请从头练起。"},
|
||||||
|
{C.dH,"卖弱不是谦虚,请看场合。"},
|
||||||
|
{C.dH,"卖弱是要遭报应的"},
|
||||||
|
{C.dH,"满口PCDT信天翁,还会点别的么?"},
|
||||||
|
{C.dH,"没那水平别天天整什么花里胡哨的,人家玩了几年你想几天赶上?"},
|
||||||
|
{C.dH,"没学过编曲,音乐都是自己瞎写的,觉得不好听就去设置关了吧"},
|
||||||
|
{C.dH,"全隐40行全消四很难吗??"},
|
||||||
|
{C.dH,"少玩点游戏,多注意眨眼和休息,瞎了别怪我没提醒你"},
|
||||||
|
{C.dH,"设置都看过一遍了吗?明明都有还在那嫌弃,谁的问题?"},
|
||||||
|
{C.dH,"谁说一定要强的人才叫卖弱?不是最菜就一定在有人眼中是卖弱"},
|
||||||
|
{C.dH,"双旋和极简尽早学起来…懒得学以后亏的是自己"},
|
||||||
|
{C.dH,"天天催更催更,你咋不来帮忙开发啊,真以为作者很强催啥都能有?"},
|
||||||
|
{C.dH,"天天卖弱,你一定把把150apm吧?"},
|
||||||
|
{C.dH,"问怎么练就好好问,别就一句话怎么变强,鬼知道你现在什么水平"},
|
||||||
|
{C.dH,"先练基础不听,现在速度没有,Tspin完地形一塌糊涂,开心吗?"},
|
||||||
|
{C.dH,"一口一个wtcl还不赶紧去练,你是不思进取还是不想好好说话?"},
|
||||||
|
{C.dH,"隐形很难?上电视那个水平一般都打成那样,属实自己不行看不起别人"},
|
||||||
|
{C.dH,"隐形哪难了,你练了吗?没专门练几个小时就说难也太没耐心了吧"},
|
||||||
|
{C.dH,"有问题建议先找找是不是自己的问题,那么多人怎么就你事多?"},
|
||||||
|
{C.dH,"这不是休闲游戏…别怪关卡要求太高,就是你菜,请多练。"},
|
||||||
|
{C.dH,"Techmino没有抽卡没有氪金没有逼肝,良不良心自己没点数?"},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -153,7 +153,7 @@ return{
|
|||||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||||
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
['dig_1000l']= {"挖掘", "1000L", "挖掘1000行"},
|
||||||
['drought_n']= {"干旱", "100行", "你I没了"},
|
['drought_n']= {"干旱", "100行", "你I没了"},
|
||||||
['drought_l']= {"干旱", "100行", "后 妈 发 牌"},
|
['drought_l']= {"干旱+", "100行", "后 妈 发 牌"},
|
||||||
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
||||||
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
['marathon_h']= {"马拉松", "困难", "200行高速马拉松"},
|
||||||
['solo_e']= {"单挑", "简单", "打败机器人"},
|
['solo_e']= {"单挑", "简单", "打败机器人"},
|
||||||
@@ -206,6 +206,7 @@ return{
|
|||||||
['pc_n']= {"全清挑战", "普通", "100行内刷全清"},
|
['pc_n']= {"全清挑战", "普通", "100行内刷全清"},
|
||||||
['pc_h']= {"全清挑战", "困难", "100行内刷全清"},
|
['pc_h']= {"全清挑战", "困难", "100行内刷全清"},
|
||||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷全清"},
|
['pc_l']= {"全清挑战", "疯狂", "100行内刷全清"},
|
||||||
|
['pc_inf']= {"无尽全清挑战", "", "你能连续做多少PC?"},
|
||||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||||
['tech_n_plus']= {"科研", "普通+", "仅允许回旋与全清"},
|
['tech_n_plus']= {"科研", "普通+", "仅允许回旋与全清"},
|
||||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||||
|
|||||||
@@ -77,12 +77,13 @@ return{
|
|||||||
{name='c4wtrain_n', x=700, y=-400, size=40,shape=1,icon="pc",unlock={'c4wtrain_l'}},
|
{name='c4wtrain_n', x=700, y=-400, size=40,shape=1,icon="pc",unlock={'c4wtrain_l'}},
|
||||||
{name='c4wtrain_l', x=900, y=-400, size=40,shape=1,icon="pc"},
|
{name='c4wtrain_l', x=900, y=-400, size=40,shape=1,icon="pc"},
|
||||||
|
|
||||||
{name='pctrain_n', x=700, y=-220, size=40,shape=1,icon="pc", unlock={'pctrain_l','pc_n'}},
|
{name='pctrain_n', x=700, y=-250, size=40,shape=1,icon="pc", unlock={'pctrain_l','pc_n'}},
|
||||||
{name='pctrain_l', x=900, y=-220, size=40,shape=1,icon="pc"},
|
{name='pctrain_l', x=900, y=-250, size=40,shape=1,icon="pc"},
|
||||||
|
|
||||||
{name='pc_n', x=800, y=-100, size=40,shape=1,icon="pc", unlock={'pc_h'}},
|
{name='pc_n', x=800, y=-110, size=40,shape=1,icon="pc", unlock={'pc_h'}},
|
||||||
{name='pc_h', x=1000, y=-100, size=40,shape=3,icon="pc", unlock={'pc_l'}},
|
{name='pc_h', x=950, y=-110, size=40,shape=3,icon="pc", unlock={'pc_l','pc_inf'}},
|
||||||
{name='pc_l', x=1200, y=-100, size=40,shape=2,icon="pc"},
|
{name='pc_l', x=1100, y=-110, size=40,shape=3,icon="pc"},
|
||||||
|
{name='pc_inf', x=1100, y=-250, size=40,shape=2,icon="pc"},
|
||||||
|
|
||||||
{name='tech_n', x=400, y=-150, size=40,shape=1,icon="tech", unlock={'tech_n_plus','tech_h','tech_finesse'}},
|
{name='tech_n', x=400, y=-150, size=40,shape=1,icon="tech", unlock={'tech_n_plus','tech_h','tech_finesse'}},
|
||||||
{name='tech_n_plus', x=600, y=160, size=40,shape=3,icon="tech", unlock={'tsd_e','backfire_n'}},
|
{name='tech_n_plus', x=600, y=160, size=40,shape=3,icon="tech", unlock={'tsd_e','backfire_n'}},
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ return{
|
|||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1)
|
PLY.newPlayer(1)
|
||||||
if SETTING.sfx_spawn==0 then
|
if SETTING.sfx_spawn==0 then
|
||||||
LOG.print(text.switchSpawnSFX,COLOR.Y)
|
LOG.print(text.switchSpawnSFX,'warn')
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ return{
|
|||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
setFont(45)
|
setFont(45)
|
||||||
local R=100-P.stat.row
|
local R=100-P.stat.row
|
||||||
mStr(R>=0 and R or 0,69,250)
|
mStr(R>=0 and R or 0,69,220)
|
||||||
|
|
||||||
setFont(75)
|
setFont(70)
|
||||||
mStr(P.stat.pc,69,350)
|
mStr(P.stat.pc,69,300)
|
||||||
mText(drawableText.pc,69,432)
|
mText(drawableText.pc,69,380)
|
||||||
end,
|
end,
|
||||||
score=function(P)return{P.stat.pc,P.stat.time}end,
|
score=function(P)return{P.stat.pc,P.stat.time}end,
|
||||||
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
||||||
|
|||||||
46
parts/modes/pc_inf.lua
Normal file
46
parts/modes/pc_inf.lua
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
return{
|
||||||
|
color=COLOR.red,
|
||||||
|
env={
|
||||||
|
drop=20,lock=60,
|
||||||
|
fall=10,
|
||||||
|
dropPiece=function(P)
|
||||||
|
if P.lastPiece.pc then
|
||||||
|
P.gameEnv.heightLimit=4
|
||||||
|
if P.stat.pc%10==0 then
|
||||||
|
P.gameEnv.drop=math.max(P.gameEnv.drop-1,1)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
P.gameEnv.heightLimit=P.gameEnv.heightLimit-P.lastPiece.row
|
||||||
|
end
|
||||||
|
if #P.field>P.gameEnv.heightLimit then
|
||||||
|
P:lose()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
freshLimit=8,
|
||||||
|
heightLimit=4,
|
||||||
|
ospin=false,
|
||||||
|
bg='rgb',bgm='truth',
|
||||||
|
},
|
||||||
|
pauseLimit=true,
|
||||||
|
load=function()
|
||||||
|
PLY.newPlayer(1)
|
||||||
|
end,
|
||||||
|
mesDisp=function(P)
|
||||||
|
setFont(70)
|
||||||
|
mStr(P.stat.pc,69,300)
|
||||||
|
mText(drawableText.pc,69,380)
|
||||||
|
end,
|
||||||
|
score=function(P)return{P.stat.pc,P.stat.time}end,
|
||||||
|
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
||||||
|
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||||
|
getRank=function(P)
|
||||||
|
local L=P.stat.pc
|
||||||
|
return
|
||||||
|
L>=100 and 5 or
|
||||||
|
L>=70 and 4 or
|
||||||
|
L>=40 and 3 or
|
||||||
|
L>=20 and 2 or
|
||||||
|
L>=10 and 1 or
|
||||||
|
L>=5 and 0
|
||||||
|
end,
|
||||||
|
}
|
||||||
@@ -15,11 +15,11 @@ return{
|
|||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
setFont(45)
|
setFont(45)
|
||||||
local R=100-P.stat.row
|
local R=100-P.stat.row
|
||||||
mStr(R>=0 and R or 0,69,250)
|
mStr(R>=0 and R or 0,69,220)
|
||||||
|
|
||||||
setFont(75)
|
setFont(70)
|
||||||
mStr(P.stat.pc,69,350)
|
mStr(P.stat.pc,69,300)
|
||||||
mText(drawableText.pc,69,432)
|
mText(drawableText.pc,69,380)
|
||||||
end,
|
end,
|
||||||
score=function(P)return{P.stat.pc,P.stat.time}end,
|
score=function(P)return{P.stat.pc,P.stat.time}end,
|
||||||
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
||||||
|
|||||||
@@ -13,11 +13,11 @@ return{
|
|||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
setFont(45)
|
setFont(45)
|
||||||
local R=100-P.stat.row
|
local R=100-P.stat.row
|
||||||
mStr(R>=0 and R or 0,69,250)
|
mStr(R>=0 and R or 0,69,220)
|
||||||
|
|
||||||
setFont(75)
|
setFont(70)
|
||||||
mStr(P.stat.pc,69,350)
|
mStr(P.stat.pc,69,300)
|
||||||
mText(drawableText.pc,69,432)
|
mText(drawableText.pc,69,380)
|
||||||
end,
|
end,
|
||||||
score=function(P)return{P.stat.pc,P.stat.time}end,
|
score=function(P)return{P.stat.pc,P.stat.time}end,
|
||||||
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
||||||
|
|||||||
@@ -63,9 +63,9 @@ return{
|
|||||||
check(PLAYERS[1])
|
check(PLAYERS[1])
|
||||||
end,
|
end,
|
||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
setFont(75)
|
setFont(70)
|
||||||
mStr(P.stat.pc,69,330)
|
mStr(P.stat.pc,69,300)
|
||||||
mText(drawableText.pc,69,412)
|
mText(drawableText.pc,69,380)
|
||||||
end,
|
end,
|
||||||
score=function(P)return{P.stat.pc,P.stat.time}end,
|
score=function(P)return{P.stat.pc,P.stat.time}end,
|
||||||
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
||||||
|
|||||||
@@ -54,9 +54,9 @@ return{
|
|||||||
check(PLAYERS[1])
|
check(PLAYERS[1])
|
||||||
end,
|
end,
|
||||||
mesDisp=function(P)
|
mesDisp=function(P)
|
||||||
setFont(75)
|
setFont(70)
|
||||||
mStr(P.stat.pc,69,330)
|
mStr(P.stat.pc,69,300)
|
||||||
mText(drawableText.pc,69,412)
|
mText(drawableText.pc,69,380)
|
||||||
end,
|
end,
|
||||||
score=function(P)return{P.stat.pc,P.stat.time}end,
|
score=function(P)return{P.stat.pc,P.stat.time}end,
|
||||||
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
scoreDisp=function(D)return D[1].." PCs "..STRING.time(D[2])end,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ return{
|
|||||||
color=COLOR.magenta,
|
color=COLOR.magenta,
|
||||||
env={
|
env={
|
||||||
drop=30,lock=60,
|
drop=30,lock=60,
|
||||||
freshLimit=10,
|
freshLimit=5,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
YIELD()
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ return{
|
|||||||
color=COLOR.red,
|
color=COLOR.red,
|
||||||
env={
|
env={
|
||||||
drop=30,lock=60,
|
drop=30,lock=60,
|
||||||
freshLimit=10,
|
freshLimit=5,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
YIELD()
|
||||||
|
|||||||
@@ -20,8 +20,9 @@ local NET={
|
|||||||
},
|
},
|
||||||
allReady=false,
|
allReady=false,
|
||||||
connectingStream=false,
|
connectingStream=false,
|
||||||
streamRoomID=false,
|
waitingStream=false,
|
||||||
serverGaming=false,
|
serverGaming=false,
|
||||||
|
streamRoomID=false,
|
||||||
|
|
||||||
UserCount="_",
|
UserCount="_",
|
||||||
PlayCount="_",
|
PlayCount="_",
|
||||||
@@ -298,21 +299,21 @@ function NET.updateWS_app()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if VERSION.code<res.newestCode then
|
if VERSION.code<res.newestCode then
|
||||||
LOG.print(text.oldVersion:gsub("$1",res.newestName),180,COLOR.N)
|
LOG.print(text.oldVersion:gsub("$1",res.newestName),180,'message')
|
||||||
end
|
end
|
||||||
LOG.print(res.notice,300,COLOR.N)
|
LOG.print(res.notice,300,'message')
|
||||||
elseif res.action==0 then--Get new version info
|
elseif res.action==0 then--Get new version info
|
||||||
--?
|
--?
|
||||||
elseif res.action==1 then--Get notice
|
elseif res.action==1 then--Get notice
|
||||||
--?
|
--?
|
||||||
elseif res.action==2 then--Register
|
elseif res.action==2 then--Register
|
||||||
if res.type=='Self'or res.type=='Server'then
|
if res.type=='Self'or res.type=='Server'then
|
||||||
LOG.print(res.data.message,300,COLOR.N)
|
LOG.print(res.data.message,300,'message')
|
||||||
if SCN.cur=='register'then
|
if SCN.cur=='register'then
|
||||||
SCN.back()
|
SCN.back()
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
LOG.print(res.reason or"Registration failed",300,COLOR.N)
|
LOG.print(res.reason or"Registration failed",300,'message')
|
||||||
end
|
end
|
||||||
NET.unlock('register')
|
NET.unlock('register')
|
||||||
elseif res.action==3 then--Get player counts
|
elseif res.action==3 then--Get player counts
|
||||||
@@ -351,14 +352,14 @@ function NET.updateWS_user()
|
|||||||
FILE.save(USER,'conf/user','q')
|
FILE.save(USER,'conf/user','q')
|
||||||
if SCN.cur=='login'then SCN.back()end
|
if SCN.cur=='login'then SCN.back()end
|
||||||
end
|
end
|
||||||
LOG.print(text.loginSuccessed)
|
LOG.print(text.loginSuccessed,'message')
|
||||||
|
|
||||||
--Get self infos
|
--Get self infos
|
||||||
NET.getUserInfo(USER.uid)
|
NET.getUserInfo(USER.uid)
|
||||||
NET.unlock('wsc_user')
|
NET.unlock('wsc_user')
|
||||||
elseif res.action==0 then--Get accessToken
|
elseif res.action==0 then--Get accessToken
|
||||||
NET.accessToken=res.accessToken
|
NET.accessToken=res.accessToken
|
||||||
LOG.print(text.accessSuccessed)
|
LOG.print(text.accessSuccessed,'message')
|
||||||
NET.wsconn_play()
|
NET.wsconn_play()
|
||||||
elseif res.action==1 then--Get userInfo
|
elseif res.action==1 then--Get userInfo
|
||||||
USERS.updateUserData(res.data)
|
USERS.updateUserData(res.data)
|
||||||
@@ -482,14 +483,18 @@ function NET.updateWS_stream()
|
|||||||
local d=res.data
|
local d=res.data
|
||||||
if res.type=='Connect'then
|
if res.type=='Connect'then
|
||||||
NET.unlock('wsc_stream')
|
NET.unlock('wsc_stream')
|
||||||
elseif res.action==0 then--Game start
|
|
||||||
NET.connectingStream=false
|
NET.connectingStream=false
|
||||||
|
NET.waitingStream=true
|
||||||
|
netPLY.setConnect(USER.uid)
|
||||||
|
netPLY.freshStreamConn(res.data.connected)
|
||||||
|
elseif res.action==0 then--Game start
|
||||||
|
NET.waitingStream=false
|
||||||
if SCN.socketRead then SCN.socketRead('go',d)end
|
if SCN.socketRead then SCN.socketRead('go',d)end
|
||||||
NET.roomInfo.start=true
|
NET.roomInfo.start=true
|
||||||
elseif res.action==1 then--Game finished
|
elseif res.action==1 then--Game finished
|
||||||
--?
|
--?
|
||||||
elseif res.action==2 then--Player join
|
elseif res.action==2 then--Player join
|
||||||
--?
|
netPLY.setConnect(d.uid)
|
||||||
elseif res.action==3 then--Player leave
|
elseif res.action==3 then--Player leave
|
||||||
--?
|
--?
|
||||||
elseif res.action==4 then--Player died
|
elseif res.action==4 then--Player died
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ end
|
|||||||
|
|
||||||
function netPLY.clear()for _=1,netPLY.getCount()do rem(PLY)end end
|
function netPLY.clear()for _=1,netPLY.getCount()do rem(PLY)end end
|
||||||
function netPLY.add(p)
|
function netPLY.add(p)
|
||||||
|
p.connected=false
|
||||||
ins(PLY,p.uid==USER.uid and 1 or #PLY+1,p)
|
ins(PLY,p.uid==USER.uid and 1 or #PLY+1,p)
|
||||||
local a=rnd()*6.2832
|
local a=rnd()*6.2832
|
||||||
p.x,p.y,p.w,p.h=640+2600*cos(a),360+2600*sin(a),47,47
|
p.x,p.y,p.w,p.h=640+2600*cos(a),360+2600*sin(a),47,47
|
||||||
@@ -101,7 +102,6 @@ function netPLY.rawgetPLY(i)return PLY[i]end
|
|||||||
function netPLY.getUsername(uid)return getPLY(uid).username end
|
function netPLY.getUsername(uid)return getPLY(uid).username end
|
||||||
function netPLY.getSID(uid)return getPLY(uid).sid end
|
function netPLY.getSID(uid)return getPLY(uid).sid end
|
||||||
function netPLY.getSelfReady()return PLY[1].ready end
|
function netPLY.getSelfReady()return PLY[1].ready end
|
||||||
|
|
||||||
function netPLY.setPlayerObj(ply,p)ply.p=p end
|
function netPLY.setPlayerObj(ply,p)ply.p=p end
|
||||||
function netPLY.setConf(uid,config)getPLY(uid).config=config end
|
function netPLY.setConf(uid,config)getPLY(uid).config=config end
|
||||||
function netPLY.setReady(uid,ready)
|
function netPLY.setReady(uid,ready)
|
||||||
@@ -126,9 +126,23 @@ function netPLY.setReady(uid,ready)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function netPLY.resetReady()
|
function netPLY.setConnect(uid)
|
||||||
|
for _,p in next,PLY do
|
||||||
|
if p.uid==uid then
|
||||||
|
p.connected=true
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function netPLY.freshStreamConn(list)
|
||||||
|
for _,p in next,list do
|
||||||
|
getPLY(p.uid).connected=true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function netPLY.resetState()
|
||||||
for i=1,#PLY do
|
for i=1,#PLY do
|
||||||
PLY[i].ready=false
|
PLY[i].ready=false
|
||||||
|
PLY[i].connected=false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -165,7 +179,7 @@ function netPLY.draw()
|
|||||||
local p=PLY[i]
|
local p=PLY[i]
|
||||||
gc.translate(p.x,p.y)
|
gc.translate(p.x,p.y)
|
||||||
--Rectangle
|
--Rectangle
|
||||||
gc.setColor(COLOR[p.ready and'G'or'Z'])
|
gc.setColor(COLOR[p.connected and"N"or p.ready and'A'or'Z'])
|
||||||
gc.setLineWidth(2)
|
gc.setLineWidth(2)
|
||||||
gc.rectangle('line',0,0,p.w,p.h)
|
gc.rectangle('line',0,0,p.w,p.h)
|
||||||
|
|
||||||
|
|||||||
@@ -116,16 +116,16 @@ local function tapBoard(x,y,key)
|
|||||||
if checkBoard(b)then
|
if checkBoard(b)then
|
||||||
state=2
|
state=2
|
||||||
time=TIME()-startTime
|
time=TIME()-startTime
|
||||||
if time<1 then LOG.print("不是人",COLOR.lB)
|
if time<1 then LOG.print("不是人")
|
||||||
elseif time<2 then LOG.print("还是人",COLOR.lB)
|
elseif time<2 then LOG.print("还是人")
|
||||||
elseif time<3 then LOG.print("神仙",COLOR.lB)
|
elseif time<3 then LOG.print("神仙")
|
||||||
elseif time<5 then LOG.print("太强了",COLOR.lB)
|
elseif time<5 then LOG.print("太强了")
|
||||||
elseif time<7.5 then LOG.print("很强",COLOR.lB)
|
elseif time<7.5 then LOG.print("很强")
|
||||||
elseif time<10 then LOG.print("可以的",COLOR.lB)
|
elseif time<10 then LOG.print("可以的")
|
||||||
elseif time<20 then LOG.print("马上入门了",COLOR.lB)
|
elseif time<20 then LOG.print("马上入门了")
|
||||||
elseif time<30 then LOG.print("入门不远了",COLOR.lB)
|
elseif time<30 then LOG.print("入门不远了")
|
||||||
elseif time<60 then LOG.print("多加练习",COLOR.lB)
|
elseif time<60 then LOG.print("多加练习")
|
||||||
else LOG.print("第一次玩?加油",COLOR.lB)
|
else LOG.print("第一次玩?加油")
|
||||||
end
|
end
|
||||||
SFX.play('win')
|
SFX.play('win')
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ function scene.keyDown(key)
|
|||||||
str=str.."!"
|
str=str.."!"
|
||||||
if #MISSION>0 then str=str..DATA.copyMission()end
|
if #MISSION>0 then str=str..DATA.copyMission()end
|
||||||
sys.setClipboardText(str.."!"..DATA.copyBoards().."!")
|
sys.setClipboardText(str.."!"..DATA.copyBoards().."!")
|
||||||
LOG.print(text.exportSuccess,COLOR.G)
|
LOG.print(text.exportSuccess,'message')
|
||||||
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
|
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
|
||||||
local str=sys.getClipboardText()
|
local str=sys.getClipboardText()
|
||||||
local args=STRING.split(str:sub((str:find(":")or 0)+1),"!")
|
local args=STRING.split(str:sub((str:find(":")or 0)+1),"!")
|
||||||
@@ -98,9 +98,9 @@ function scene.keyDown(key)
|
|||||||
if args[i]:find("%S")and not DATA.pasteBoard(args[i],i-3)and i<#args then goto THROW_fail end
|
if args[i]:find("%S")and not DATA.pasteBoard(args[i],i-3)and i<#args then goto THROW_fail end
|
||||||
end
|
end
|
||||||
freshMiniFieldVisible()
|
freshMiniFieldVisible()
|
||||||
LOG.print(text.importSuccess,COLOR.G)
|
LOG.print(text.importSuccess,'message')
|
||||||
do return end
|
do return end
|
||||||
::THROW_fail::LOG.print(text.dataCorrupted,COLOR.R)
|
::THROW_fail::LOG.print(text.dataCorrupted,'error')
|
||||||
elseif key=="escape"then
|
elseif key=="escape"then
|
||||||
FILE.save(CUSTOMENV,'conf/customEnv','q')
|
FILE.save(CUSTOMENV,'conf/customEnv','q')
|
||||||
SCN.back()
|
SCN.back()
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
local sList={
|
local sList={
|
||||||
visible={"show","easy","slow","medium","fast","none"},
|
visible={"show","easy","slow","medium","fast","none"},
|
||||||
freshLimit={0,8,15,1e99},
|
freshLimit={0,1,2,4,6,8,10,12,15,30,1e99},
|
||||||
opponent={"X","9S Lv.1","9S Lv.2","9S Lv.3","9S Lv.4","9S Lv.5","CC Lv.1","CC Lv.2","CC Lv.3","CC Lv.4","CC Lv.5"},
|
opponent={"X","9S Lv.1","9S Lv.2","9S Lv.3","9S Lv.4","9S Lv.5","CC Lv.1","CC Lv.2","CC Lv.3","CC Lv.4","CC Lv.5"},
|
||||||
life={0,1,2,3,5,10,15,26,42,87,500},
|
life={0,1,2,3,5,10,15,26,42,87,500},
|
||||||
pushSpeed={1,2,3,5,15},
|
pushSpeed={1,2,3,5,15},
|
||||||
|
|||||||
@@ -216,21 +216,21 @@ function scene.keyDown(key)
|
|||||||
SFX.play('fall',.8)
|
SFX.play('fall',.8)
|
||||||
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
|
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
|
||||||
sys.setClipboardText("Techmino Field:"..DATA.copyBoard(page))
|
sys.setClipboardText("Techmino Field:"..DATA.copyBoard(page))
|
||||||
LOG.print(text.exportSuccess,COLOR.G)
|
LOG.print(text.exportSuccess,'message')
|
||||||
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
|
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
|
||||||
local str=sys.getClipboardText()
|
local str=sys.getClipboardText()
|
||||||
local p=str:find(":")--ptr*
|
local p=str:find(":")--ptr*
|
||||||
if p then
|
if p then
|
||||||
if not str:sub(1,p-1):find("Field")then
|
if not str:sub(1,p-1):find("Field")then
|
||||||
LOG.print(text.pasteWrongPlace)
|
LOG.print(text.pasteWrongPlace,'warn')
|
||||||
end
|
end
|
||||||
str=str:sub(p+1)
|
str=str:sub(p+1)
|
||||||
end
|
end
|
||||||
if DATA.pasteBoard(str,page)then
|
if DATA.pasteBoard(str,page)then
|
||||||
LOG.print(text.importSuccess,COLOR.G)
|
LOG.print(text.importSuccess,'message')
|
||||||
else
|
else
|
||||||
print(text.dataCorrupted)
|
print(text.dataCorrupted)
|
||||||
LOG.print(text.dataCorrupted,COLOR.R)
|
LOG.print(text.dataCorrupted,'error')
|
||||||
end
|
end
|
||||||
elseif key=="pageup"then
|
elseif key=="pageup"then
|
||||||
page=max(page-1,1)
|
page=max(page-1,1)
|
||||||
|
|||||||
@@ -71,22 +71,22 @@ function scene.keyDown(key)
|
|||||||
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
|
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
|
||||||
if #MISSION>0 then
|
if #MISSION>0 then
|
||||||
sys.setClipboardText("Techmino Target:"..DATA.copyMission())
|
sys.setClipboardText("Techmino Target:"..DATA.copyMission())
|
||||||
LOG.print(text.exportSuccess,COLOR.G)
|
LOG.print(text.exportSuccess,'message')
|
||||||
end
|
end
|
||||||
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
|
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
|
||||||
local str=sys.getClipboardText()
|
local str=sys.getClipboardText()
|
||||||
local p=str:find(":")--ptr*
|
local p=str:find(":")--ptr*
|
||||||
if p then
|
if p then
|
||||||
if not str:sub(1,p-1):find("Target")then
|
if not str:sub(1,p-1):find("Target")then
|
||||||
LOG.print(text.pasteWrongPlace)
|
LOG.print(text.pasteWrongPlace,'warn')
|
||||||
end
|
end
|
||||||
str=str:sub(p+1)
|
str=str:sub(p+1)
|
||||||
end
|
end
|
||||||
if DATA.pasteMission(str)then
|
if DATA.pasteMission(str)then
|
||||||
LOG.print(text.importSuccess,COLOR.G)
|
LOG.print(text.importSuccess,'message')
|
||||||
cur=#MISSION
|
cur=#MISSION
|
||||||
else
|
else
|
||||||
LOG.print(text.dataCorrupted,COLOR.R)
|
LOG.print(text.dataCorrupted,'error')
|
||||||
end
|
end
|
||||||
elseif key=="escape"then
|
elseif key=="escape"then
|
||||||
SCN.back()
|
SCN.back()
|
||||||
|
|||||||
@@ -85,22 +85,22 @@ function scene.keyDown(key)
|
|||||||
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
|
elseif key=="c"and kb.isDown("lctrl","rctrl")or key=="cC"then
|
||||||
if #BAG>0 then
|
if #BAG>0 then
|
||||||
sys.setClipboardText("Techmino SEQ:"..DATA.copySequence())
|
sys.setClipboardText("Techmino SEQ:"..DATA.copySequence())
|
||||||
LOG.print(text.exportSuccess,COLOR.G)
|
LOG.print(text.exportSuccess,'message')
|
||||||
end
|
end
|
||||||
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
|
elseif key=="v"and kb.isDown("lctrl","rctrl")or key=="cV"then
|
||||||
local str=sys.getClipboardText()
|
local str=sys.getClipboardText()
|
||||||
local p=str:find(":")--ptr*
|
local p=str:find(":")--ptr*
|
||||||
if p then
|
if p then
|
||||||
if not str:sub(1,p-1):find("SEQ")then
|
if not str:sub(1,p-1):find("SEQ")then
|
||||||
LOG.print(text.pasteWrongPlace)
|
LOG.print(text.pasteWrongPlace,'warn')
|
||||||
end
|
end
|
||||||
str=str:sub(p+1)
|
str=str:sub(p+1)
|
||||||
end
|
end
|
||||||
if DATA.pasteSequence(str)then
|
if DATA.pasteSequence(str)then
|
||||||
LOG.print(text.importSuccess,COLOR.G)
|
LOG.print(text.importSuccess,'message')
|
||||||
cur=#BAG
|
cur=#BAG
|
||||||
else
|
else
|
||||||
LOG.print(text.dataCorrupted,COLOR.R)
|
LOG.print(text.dataCorrupted,'error')
|
||||||
end
|
end
|
||||||
elseif key=="escape"then
|
elseif key=="escape"then
|
||||||
SCN.back()
|
SCN.back()
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ local savePW=false
|
|||||||
local function login()
|
local function login()
|
||||||
local email,password=emailBox:getText(),passwordBox:getText()
|
local email,password=emailBox:getText(),passwordBox:getText()
|
||||||
if not STRING.simpEmailCheck(email)then
|
if not STRING.simpEmailCheck(email)then
|
||||||
LOG.print(text.wrongEmail)return
|
LOG.print(text.wrongEmail,'warn')return
|
||||||
elseif #password==0 then
|
elseif #password==0 then
|
||||||
LOG.print(text.noPassword)return
|
LOG.print(text.noPassword,'warn')return
|
||||||
end
|
end
|
||||||
NET.wsconn_user_pswd(email,password)
|
NET.wsconn_user_pswd(email,password)
|
||||||
if savePW then
|
if savePW then
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ function scene.keyDown(key)
|
|||||||
else
|
else
|
||||||
TEXT.show(text.noInternet,640,450,60,'flicker')
|
TEXT.show(text.noInternet,640,450,60,'flicker')
|
||||||
NET.wsconn_app()
|
NET.wsconn_app()
|
||||||
|
LOG.print(text.wsConnecting,'message')
|
||||||
SFX.play('finesseError')
|
SFX.play('finesseError')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ function scene.touchDown(x,y)
|
|||||||
end
|
end
|
||||||
function scene.touchUp(x,y)
|
function scene.touchUp(x,y)
|
||||||
if not playing or noTouch then return end
|
if not playing or noTouch then return end
|
||||||
|
|
||||||
local n=VK.on(x,y)
|
local n=VK.on(x,y)
|
||||||
if n then
|
if n then
|
||||||
PLAYERS[1]:releaseKey(n)
|
PLAYERS[1]:releaseKey(n)
|
||||||
@@ -54,7 +53,7 @@ function scene.touchUp(x,y)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function scene.touchMove(x,y)
|
function scene.touchMove(x,y)
|
||||||
if not playing then netPLY.mouseMove(x,y)end
|
if not playing then netPLY.mouseMove(x,y)return end
|
||||||
if touchMoveLastFrame or noTouch then return end
|
if touchMoveLastFrame or noTouch then return end
|
||||||
touchMoveLastFrame=true
|
touchMoveLastFrame=true
|
||||||
|
|
||||||
@@ -83,7 +82,7 @@ function scene.keyDown(key)
|
|||||||
NET.signal_quit()
|
NET.signal_quit()
|
||||||
else
|
else
|
||||||
lastBackTime=TIME()
|
lastBackTime=TIME()
|
||||||
LOG.print(text.sureQuit,COLOR.O)
|
LOG.print(text.sureQuit,'warn')
|
||||||
end
|
end
|
||||||
elseif key=="return"then
|
elseif key=="return"then
|
||||||
if inputBox.hide then
|
if inputBox.hide then
|
||||||
@@ -92,7 +91,7 @@ function scene.keyDown(key)
|
|||||||
TASK.new(function()YIELD()WIDGET.sel=inputBox end)
|
TASK.new(function()YIELD()WIDGET.sel=inputBox end)
|
||||||
enableTextInput()
|
enableTextInput()
|
||||||
else
|
else
|
||||||
local mes=inputBox:getText():match"%S+"
|
local mes=STRING.trim(inputBox:getText())
|
||||||
if mes and #mes>0 then
|
if mes and #mes>0 then
|
||||||
NET.sendMessage(mes)
|
NET.sendMessage(mes)
|
||||||
inputBox:clear()
|
inputBox:clear()
|
||||||
@@ -107,7 +106,7 @@ function scene.keyDown(key)
|
|||||||
WIDGET.sel=inputBox
|
WIDGET.sel=inputBox
|
||||||
WIDGET.keyPressed(key)
|
WIDGET.keyPressed(key)
|
||||||
elseif playing then
|
elseif playing then
|
||||||
if noKey then return end
|
if not playing or noKey then return end
|
||||||
local k=keyMap.keyboard[key]
|
local k=keyMap.keyboard[key]
|
||||||
if k and k>0 then
|
if k and k>0 then
|
||||||
PLAYERS[1]:pressKey(k)
|
PLAYERS[1]:pressKey(k)
|
||||||
@@ -124,7 +123,7 @@ function scene.keyDown(key)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function scene.keyUp(key)
|
function scene.keyUp(key)
|
||||||
if noKey then return end
|
if not playing or noKey then return end
|
||||||
local k=keyMap.keyboard[key]
|
local k=keyMap.keyboard[key]
|
||||||
if k and k>0 then
|
if k and k>0 then
|
||||||
PLAYERS[1]:releaseKey(k)
|
PLAYERS[1]:releaseKey(k)
|
||||||
@@ -133,13 +132,9 @@ function scene.keyUp(key)
|
|||||||
end
|
end
|
||||||
function scene.gamepadDown(key)
|
function scene.gamepadDown(key)
|
||||||
if key=="back"then
|
if key=="back"then
|
||||||
if TIME()-lastBackTime<1 then
|
scene.keyDown("escape")
|
||||||
NET.signal_quit()
|
|
||||||
else
|
|
||||||
lastBackTime=TIME()
|
|
||||||
LOG.print(text.sureQuit,COLOR.O)
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
|
if not playing then return end
|
||||||
local k=keyMap.joystick[key]
|
local k=keyMap.joystick[key]
|
||||||
if k and k>0 then
|
if k and k>0 then
|
||||||
PLAYERS[1]:pressKey(k)
|
PLAYERS[1]:pressKey(k)
|
||||||
@@ -148,6 +143,7 @@ function scene.gamepadDown(key)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
function scene.gamepadUp(key)
|
function scene.gamepadUp(key)
|
||||||
|
if not playing then return end
|
||||||
local k=keyMap.joystick[key]
|
local k=keyMap.joystick[key]
|
||||||
if k and k>0 then
|
if k and k>0 then
|
||||||
PLAYERS[1]:releaseKey(k)
|
PLAYERS[1]:releaseKey(k)
|
||||||
@@ -179,13 +175,13 @@ function scene.socketRead(cmd,d)
|
|||||||
if not playing then
|
if not playing then
|
||||||
playing=true
|
playing=true
|
||||||
love.keyboard.setKeyRepeat(false)
|
love.keyboard.setKeyRepeat(false)
|
||||||
netPLY.resetReady()
|
netPLY.resetState()
|
||||||
netPLY.mouseMove(0,0)
|
netPLY.mouseMove(0,0)
|
||||||
lastUpstreamTime=0
|
lastUpstreamTime=0
|
||||||
upstreamProgress=1
|
upstreamProgress=1
|
||||||
resetGameData('n',d.seed)
|
resetGameData('n',d.seed)
|
||||||
else
|
else
|
||||||
LOG.print("Redundant [Go]",30,COLOR.G)
|
LOG.print("Redundant [Go]",'warn')
|
||||||
end
|
end
|
||||||
elseif cmd=='finish'then
|
elseif cmd=='finish'then
|
||||||
playing=false
|
playing=false
|
||||||
@@ -208,7 +204,7 @@ function scene.socketRead(cmd,d)
|
|||||||
if res then
|
if res then
|
||||||
DATA.pumpRecording(stream,P.stream)
|
DATA.pumpRecording(stream,P.stream)
|
||||||
else
|
else
|
||||||
LOG.print("Bad stream from "..P.username.."#"..P.uid)
|
LOG.print("Bad stream from "..P.username.."#"..P.uid,30)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -269,12 +265,16 @@ function scene.draw()
|
|||||||
netPLY.draw()
|
netPLY.draw()
|
||||||
|
|
||||||
--Ready & Set mark
|
--Ready & Set mark
|
||||||
gc.setColor(.1,1,0,.9)
|
setFont(50)
|
||||||
setFont(60)
|
if NET.allReady then
|
||||||
if NET.connectingStream then
|
gc.setColor(0,1,.5,.9)
|
||||||
mStr(text.set,640,10)
|
mStr(text.ready,640,15)
|
||||||
elseif NET.allReady then
|
elseif NET.connectingStream then
|
||||||
mStr(text.ready,640,10)
|
gc.setColor(.1,1,.8,.9)
|
||||||
|
mStr(text.connStream,640,15)
|
||||||
|
elseif NET.waitingStream then
|
||||||
|
gc.setColor(0,.8,1,.9)
|
||||||
|
mStr(text.waitStream,640,15)
|
||||||
end
|
end
|
||||||
|
|
||||||
--Room info.
|
--Room info.
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ scene.widgetList={
|
|||||||
SCN.back()
|
SCN.back()
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
LOG.print(text.sureQuit,COLOR.O)
|
LOG.print(text.sureQuit,'warn')
|
||||||
lastLogoutTime=TIME()
|
lastLogoutTime=TIME()
|
||||||
end
|
end
|
||||||
end},
|
end},
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ function scene.sceneInit()
|
|||||||
BG.set()
|
BG.set()
|
||||||
NET.allReady=false
|
NET.allReady=false
|
||||||
NET.connectingStream=false
|
NET.connectingStream=false
|
||||||
|
NET.waitingStream=false
|
||||||
scrollPos=0
|
scrollPos=0
|
||||||
selected=1
|
selected=1
|
||||||
fetchRoom()
|
fetchRoom()
|
||||||
@@ -74,7 +75,7 @@ function scene.keyDown(k)
|
|||||||
elseif k=="return"then
|
elseif k=="return"then
|
||||||
if NET.getlock('fetchRoom')or not NET.roomList[selected]then return end
|
if NET.getlock('fetchRoom')or not NET.roomList[selected]then return end
|
||||||
if NET.roomList[selected].private then
|
if NET.roomList[selected].private then
|
||||||
LOG.print("Can't enter private room now")
|
LOG.print("Can't enter private room now",'message')
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
NET.enterRoom(NET.roomList[selected])--,password
|
NET.enterRoom(NET.roomList[selected])--,password
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ function scene.sceneBack()
|
|||||||
STAT.todayTime=STAT.todayTime+PLAYERS[1].stat.time
|
STAT.todayTime=STAT.todayTime+PLAYERS[1].stat.time
|
||||||
if not GAME.replaying and(PLAYERS[1].frameRun>400 or GAME.result)and not GAME.result then
|
if not GAME.replaying and(PLAYERS[1].frameRun>400 or GAME.result)and not GAME.result then
|
||||||
mergeStat(STAT,PLAYERS[1].stat)
|
mergeStat(STAT,PLAYERS[1].stat)
|
||||||
FILE.save(STAT,'conf/data')
|
FILE.save(STAT,'conf/data','q')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -6,13 +6,13 @@ local function register()
|
|||||||
local password= WIDGET.active.password:getText()
|
local password= WIDGET.active.password:getText()
|
||||||
local password2=WIDGET.active.password2:getText()
|
local password2=WIDGET.active.password2:getText()
|
||||||
if #username==0 then
|
if #username==0 then
|
||||||
LOG.print(text.noUsername)return
|
LOG.print(text.noUsername,'warn')return
|
||||||
elseif not STRING.simpEmailCheck(email)then
|
elseif not STRING.simpEmailCheck(email)then
|
||||||
LOG.print(text.wrongEmail)return
|
LOG.print(text.wrongEmail,'warn')return
|
||||||
elseif #password==0 or #password2==0 then
|
elseif #password==0 or #password2==0 then
|
||||||
LOG.print(text.noPassword)return
|
LOG.print(text.noPassword,'warn')return
|
||||||
elseif password~=password2 then
|
elseif password~=password2 then
|
||||||
LOG.print(text.diffPassword)return
|
LOG.print(text.diffPassword,'warn')return
|
||||||
end
|
end
|
||||||
NET.register(username,email,password)
|
NET.register(username,email,password)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ local function dumpCB(T)
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
LOG.print(text.exportSuccess)
|
LOG.print(text.exportSuccess,'message')
|
||||||
end
|
end
|
||||||
local function parseCB()
|
local function parseCB()
|
||||||
local _
|
local _
|
||||||
@@ -18,9 +18,9 @@ local function parseCB()
|
|||||||
|
|
||||||
--Decode
|
--Decode
|
||||||
_,s=pcall(love.data.decode,'string','base64',s)
|
_,s=pcall(love.data.decode,'string','base64',s)
|
||||||
if not _ then LOG.print(text.dataCorrupted,COLOR.R)return end
|
if not _ then LOG.print(text.dataCorrupted,'error')return end
|
||||||
_,s=pcall(love.data.decompress,'string','zlib',s)
|
_,s=pcall(love.data.decompress,'string','zlib',s)
|
||||||
if not _ then LOG.print(text.dataCorrupted,COLOR.R)return end
|
if not _ then LOG.print(text.dataCorrupted,'error')return end
|
||||||
|
|
||||||
s=loadstring(s)
|
s=loadstring(s)
|
||||||
if s then
|
if s then
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ scene.widgetList={
|
|||||||
B.x,B.y,B.r=T[2],T[3],T[4]
|
B.x,B.y,B.r=T[2],T[3],T[4]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
LOG.print(("[ %d ]"):format(defaultSetSelect))
|
LOG.print(("==[ %d ]=="):format(defaultSetSelect))
|
||||||
defaultSetSelect=defaultSetSelect%5+1
|
defaultSetSelect=defaultSetSelect%5+1
|
||||||
selected=false
|
selected=false
|
||||||
end},
|
end},
|
||||||
|
|||||||
@@ -18,12 +18,25 @@ return STRING.split([=[
|
|||||||
区分各种消除(隔断/架空/混合/彩色/穿墙)
|
区分各种消除(隔断/架空/混合/彩色/穿墙)
|
||||||
更复杂的垃圾行(数量/等待时间/抵消倍率/洞数/连接/炸弹/厚度)
|
更复杂的垃圾行(数量/等待时间/抵消倍率/洞数/连接/炸弹/厚度)
|
||||||
可调场地宽度; 左右三按键; 手势操作; 特殊控件(虚拟摇杆等); 切换高低镜头键
|
可调场地宽度; 左右三按键; 手势操作; 特殊控件(虚拟摇杆等); 切换高低镜头键
|
||||||
DAS系统和Deepdrop系统更细节的选项; spike计数器; 攻击总缓冲显示
|
DAS系统和Deepdrop系统更细节的选项; spike计数器
|
||||||
成就系统; 更强的主题系统; 多方块; 3D背景; TGM3的开局无限hold调整序列
|
成就系统; 更强的主题系统; 多方块; 3D背景
|
||||||
工程编译到字节码; task-Z(新AI); 开房机制修改
|
工程编译到字节码; task-Z(新AI); 开房机制修改
|
||||||
等级系统; 旁观; 收集向抽奖玩法
|
等级系统; 旁观; 收集向抽奖玩法
|
||||||
录像回放菜单; 跳帧开关; 教学关; 超60帧; 热更新
|
录像回放菜单; 跳帧开关; 教学关; 超60帧; 热更新
|
||||||
|
|
||||||
|
0.14.8: 冰激凌 Icecream
|
||||||
|
新增:
|
||||||
|
新增无尽pc挑战模式
|
||||||
|
联网对战游戏开始前可以显示其他玩家的连接状态
|
||||||
|
改动:
|
||||||
|
增加自定义游戏锁延刷新次数挡位
|
||||||
|
减少生存模式最高两个难度的锁延刷新次数
|
||||||
|
代码:
|
||||||
|
简化LOG模块用法
|
||||||
|
textBox控件在隐藏时也会自动滚动
|
||||||
|
修复:
|
||||||
|
聊天窗带空格的消息会被截断
|
||||||
|
|
||||||
0.14.7: 烈日 Burn
|
0.14.7: 烈日 Burn
|
||||||
新增:
|
新增:
|
||||||
屏幕下方版本号常驻显示
|
屏幕下方版本号常驻显示
|
||||||
@@ -51,6 +64,7 @@ return STRING.split([=[
|
|||||||
控制台支持滚轮和键盘导航
|
控制台支持滚轮和键盘导航
|
||||||
缩短联网ping间隔和自我认定掉线时间
|
缩短联网ping间隔和自我认定掉线时间
|
||||||
调整rnd出块算法的一些细节
|
调整rnd出块算法的一些细节
|
||||||
|
更新naki立绘
|
||||||
代码:
|
代码:
|
||||||
控件系统hide机制大改
|
控件系统hide机制大改
|
||||||
场景模块支持拖拽文件(夹)事件
|
场景模块支持拖拽文件(夹)事件
|
||||||
|
|||||||
Reference in New Issue
Block a user