Compare commits
38 Commits
pre0.17.1-
...
pre0.17.1-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ad7443745 | ||
|
|
d3441628a9 | ||
|
|
0f83ae0f1b | ||
|
|
cdb19179f3 | ||
|
|
d1581b1efe | ||
|
|
511426356c | ||
|
|
282dc9bef2 | ||
|
|
b364d16b3d | ||
|
|
0a4a09479a | ||
|
|
29002f8465 | ||
|
|
1c5b7f1f9c | ||
|
|
05921c2c53 | ||
|
|
5615037fd5 | ||
|
|
786490c654 | ||
|
|
e6dc60afed | ||
|
|
939b32129d | ||
|
|
0ce3c7f9bc | ||
|
|
388a9fe418 | ||
|
|
75e44da055 | ||
|
|
6aedeff515 | ||
|
|
1bf6b887df | ||
|
|
fde80893ef | ||
|
|
b1fb9cc9f9 | ||
|
|
ceafcccc3b | ||
|
|
ac41690e76 | ||
|
|
b941399aa8 | ||
|
|
97eb434d5f | ||
|
|
ea76b618a7 | ||
|
|
89595aa0d8 | ||
|
|
df28ca4cc1 | ||
|
|
7ca83597c4 | ||
|
|
459d1e4c64 | ||
|
|
683d73b04c | ||
|
|
0e838f08a6 | ||
|
|
f8f115de10 | ||
|
|
b07c4dc53a | ||
|
|
6eeddba773 | ||
|
|
0cfe4df468 |
4
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_1.md
vendored
4
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_1.md
vendored
@@ -1,8 +1,8 @@
|
||||
---
|
||||
name: Bug report (bluescreen crash) Bug报告 (蓝屏报错)
|
||||
about: Create a report of problems which made the crash with a bluescreen
|
||||
about: Create a bug report which causes a bluescreen crash
|
||||
---
|
||||
Screenshot with crash information (*Image(s) Here*):
|
||||
|
||||
|
||||
If you can reproduce it, write the steps here. If you can't, try to describe the exactly time the game crash, like pressing which key or which button (*Details Here*)
|
||||
If you can reproduce it, write the steps here. If you can't, try to describe what causes the game to crash, like pressing a key/button (*Details Here*)
|
||||
|
||||
4
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_2.md
vendored
4
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_2.md
vendored
@@ -1,8 +1,8 @@
|
||||
---
|
||||
name: Bug report (unintended behaviors) Bug报告 (奇怪的现象)
|
||||
about: Create a report of unintended behaviors
|
||||
about: Create bug report that causes unintended behaviors
|
||||
---
|
||||
Screenshot with unintended behaviors (*Image(s) Here*):
|
||||
|
||||
|
||||
If you can reproduce it, write the steps here. If you can't, try to describe the exactly time the game crash, like pressing which key or which button (*Details Here*):
|
||||
If you can reproduce it, write the steps here. If you can't, try to describe what causes the unintended behavior, like pressing a key/button (*Details Here*):
|
||||
|
||||
4
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_3.md
vendored
4
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_3.md
vendored
@@ -2,3 +2,7 @@
|
||||
name: Feature Request 添加新功能
|
||||
about: Suggest an idea that may improve Techmino 提一些有意思的新想法,让Techmino越来越好!
|
||||
---
|
||||
### What feature do you want to suggest to the game?
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
.github/build/Linux/icon.png
vendored
BIN
.github/build/Linux/icon.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 50 KiB |
BIN
.github/build/Windows/icon.png
vendored
BIN
.github/build/Windows/icon.png
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 50 KiB |
BIN
.github/build/macOS/icon.icns
vendored
BIN
.github/build/macOS/icon.icns
vendored
Binary file not shown.
@@ -12,26 +12,6 @@ local BGM={
|
||||
--lastPlayed=[str:lastPlayed ID]
|
||||
}
|
||||
|
||||
function BGM.getList()return nameList end
|
||||
function BGM.getCount()return #nameList end
|
||||
local function _addFile(name,path)
|
||||
if not SourceObjList[name]then
|
||||
table.insert(nameList,name)
|
||||
SourceObjList[name]={path=path,source=false}
|
||||
end
|
||||
end
|
||||
function BGM.load(name,path)
|
||||
if type(name)=='table'then
|
||||
for k,v in next,name do
|
||||
_addFile(k,v)
|
||||
end
|
||||
else
|
||||
_addFile(name,path)
|
||||
end
|
||||
table.sort(nameList)
|
||||
LOG(BGM.getCount().." BGM files added")
|
||||
end
|
||||
|
||||
local function _tryReleaseSources()
|
||||
local n=#lastLoaded
|
||||
while #lastLoaded>maxLoadedCount do
|
||||
@@ -46,6 +26,27 @@ local function _tryReleaseSources()
|
||||
end
|
||||
end
|
||||
end
|
||||
local function _addFile(name,path)
|
||||
if not SourceObjList[name]then
|
||||
table.insert(nameList,name)
|
||||
SourceObjList[name]={path=path,source=false}
|
||||
end
|
||||
end
|
||||
|
||||
function BGM.getList()return nameList end
|
||||
function BGM.getCount()return #nameList end
|
||||
function BGM.load(name,path)
|
||||
if type(name)=='table'then
|
||||
for k,v in next,name do
|
||||
_addFile(k,v)
|
||||
end
|
||||
else
|
||||
_addFile(name,path)
|
||||
end
|
||||
table.sort(nameList)
|
||||
LOG(BGM.getCount().." BGM files added")
|
||||
end
|
||||
|
||||
function BGM.setDefault(bgm)
|
||||
BGM.default=bgm
|
||||
end
|
||||
@@ -72,10 +73,10 @@ end
|
||||
local function task_fadeOut(src)
|
||||
while true do
|
||||
coroutine.yield()
|
||||
local v=src:getVolume()-.025*volume
|
||||
local v=src:getVolume()-volume/40
|
||||
src:setVolume(v>0 and v or 0)
|
||||
if v<=0 then
|
||||
src:pause()
|
||||
src:stop()
|
||||
return true
|
||||
end
|
||||
end
|
||||
@@ -84,7 +85,7 @@ local function task_fadeIn(src)
|
||||
while true do
|
||||
coroutine.yield()
|
||||
local v=volume
|
||||
v=math.min(v,src:getVolume()+.025*v)
|
||||
v=math.min(v,src:getVolume()+v/40)
|
||||
src:setVolume(v)
|
||||
if v>=volume then
|
||||
return true
|
||||
@@ -143,7 +144,6 @@ function BGM.play(name,args)
|
||||
end
|
||||
SourceObjList[name].source:setLooping(not args:sArg('-noloop'))
|
||||
BGM.lastPlayed=BGM.nowPlay
|
||||
BGM.playing:seek(0)
|
||||
BGM.playing:play()
|
||||
BGM.onChange(name)
|
||||
end
|
||||
|
||||
@@ -639,6 +639,9 @@ local wsImg={}do
|
||||
}
|
||||
end
|
||||
|
||||
local debugInfos={
|
||||
{"Cache",gcinfo},
|
||||
}
|
||||
function love.run()
|
||||
local love=love
|
||||
|
||||
@@ -717,9 +720,9 @@ function love.run()
|
||||
|
||||
--Draw cursor
|
||||
if mouseShow then drawCursor(time,mx,my)end
|
||||
gc_replaceTransform(SCR.origin)
|
||||
gc_replaceTransform(SCR.xOy_ul)
|
||||
MES_draw()
|
||||
|
||||
gc_replaceTransform(SCR.origin)
|
||||
--Draw power info.
|
||||
if showPowerInfo then
|
||||
gc_setColor(1,1,1)
|
||||
@@ -747,11 +750,14 @@ function love.run()
|
||||
|
||||
--Debug info.
|
||||
if devMode then
|
||||
--Left-down infos
|
||||
--Debug infos at left-down
|
||||
gc_setColor(devColor[devMode])
|
||||
gc_print("MEM "..gcinfo(),safeX+5,-40)
|
||||
gc_print("Tasks "..TASK.getCount(),safeX+5,-60)
|
||||
gc_print("Voices "..VOC.getQueueCount(),safeX+5,-80)
|
||||
|
||||
--Text infos
|
||||
for i=1,#debugInfos do
|
||||
gc_print(debugInfos[i][1],safeX+5,-20-20*i)
|
||||
gc_print(debugInfos[i][2](),safeX+62.6,-20-20*i)
|
||||
end
|
||||
|
||||
--Update & draw frame time
|
||||
table.insert(frameTimeList,1,dt)table.remove(frameTimeList,126)
|
||||
@@ -851,14 +857,29 @@ function Z.setCursor(func)drawCursor=func end
|
||||
|
||||
--Change F1~F7 events of devmode (F8 mode)
|
||||
function Z.setOnFnKeys(list)
|
||||
assert(type(list)=='table',"Z.setOnFnKeys(list): list must be a table.")
|
||||
for i=1,7 do fnKey[i]=type(list[i])=='function'and list[i]or NULL end
|
||||
assert(type(list)=='table',"Z.setOnFnKeys(list): list must be a table")
|
||||
for i=1,7 do fnKey[i]=assert(type(list[i])=='function'and list[i])end
|
||||
end
|
||||
|
||||
function Z.setOnFocus(func)onFocus=assert(type(func)=='function'and func,"Z.setOnFocus(func): func must be a function")end
|
||||
function Z.setDebugInfo(list)
|
||||
assert(type(list)=='table',"Z.setDebugInfo(list): list must be a table")
|
||||
for i=1,#list do
|
||||
assert(type(list[i][1])=='string',"Z.setDebugInfo(list): list[i][1] must be a string")
|
||||
assert(type(list[i][2])=='function',"Z.setDebugInfo(list): list[i][2] must be a function")
|
||||
end
|
||||
debugInfos=list
|
||||
end
|
||||
|
||||
function Z.setOnResize(func)onResize=assert(type(func)=='function'and func,"Z.setOnResize(func): func must be a function")end
|
||||
function Z.setOnFocus(func)
|
||||
onFocus=assert(type(func)=='function'and func,"Z.setOnFocus(func): func must be a function")
|
||||
end
|
||||
|
||||
function Z.setOnQuit(func)onQuit=assert(type(func)=='function'and func,"Z.setOnQuit(func): func must be a function")end
|
||||
function Z.setOnResize(func)
|
||||
onResize=assert(type(func)=='function'and func,"Z.setOnResize(func): func must be a function")
|
||||
end
|
||||
|
||||
function Z.setOnQuit(func)
|
||||
onQuit=assert(type(func)=='function'and func,"Z.setOnQuit(func): func must be a function")
|
||||
end
|
||||
|
||||
return Z
|
||||
|
||||
@@ -77,11 +77,11 @@ end
|
||||
|
||||
function STRING.time(t)
|
||||
if t<60 then
|
||||
return format("%.3f\"",t)
|
||||
return format("%.3f″",t)
|
||||
elseif t<3600 then
|
||||
return format("%d'%05.2f\"",int(t/60),int(t%60*100)/100)
|
||||
return format("%d′%05.2f″",int(t/60),int(t%60*100)/100)
|
||||
else
|
||||
return format("%d:%.2d'%05.2f\"",int(t/3600),int(t/60%60),int(t%60*100)/100)
|
||||
return format("%d:%.2d′%05.2f″",int(t/3600),int(t/60%60),int(t%60*100)/100)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
local rnd=math.random
|
||||
local find=string.find
|
||||
local rem=table.remove
|
||||
local next,type=next,type
|
||||
@@ -58,7 +59,6 @@ function TABLE.coverR(new,old)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
--For all things in new if same type in old, push to old
|
||||
function TABLE.update(new,old)
|
||||
for k,v in next,new do
|
||||
@@ -84,6 +84,19 @@ function TABLE.complete(new,old)
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------
|
||||
|
||||
--Pop & return random [1~#] of table
|
||||
function TABLE.popRandom(t)
|
||||
local l=#t
|
||||
if l>0 then
|
||||
local r=rnd(l)
|
||||
r,t[r]=t[r],t[l]
|
||||
t[l]=nil
|
||||
return r
|
||||
end
|
||||
end
|
||||
|
||||
--Remove [1~#] of table
|
||||
function TABLE.cut(G)
|
||||
for i=1,#G do
|
||||
@@ -98,6 +111,8 @@ function TABLE.clear(G)
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------
|
||||
|
||||
--Remove duplicated value of [1~#]
|
||||
function TABLE.trimDuplicate(org)
|
||||
local cache={}
|
||||
@@ -122,6 +137,7 @@ function TABLE.remDuplicate(org)
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------
|
||||
|
||||
--Reverse [1~#]
|
||||
function TABLE.reverse(org)
|
||||
|
||||
@@ -529,7 +529,7 @@ function slider:isAbove(x,y)
|
||||
return x>self.x-10 and x<self.x+self.w+10 and y>self.y-25 and y<self.y+25
|
||||
end
|
||||
function slider:getCenter()
|
||||
return self.x+self.w*(self.pos/self.unit),self.y
|
||||
return self.x+self.w*((self.pos-self.rangeL)/(self.rangeR-self.rangeL)),self.y
|
||||
end
|
||||
function slider:update(dt)
|
||||
local ATV=self.ATV
|
||||
@@ -556,8 +556,8 @@ function slider:draw()
|
||||
--Units
|
||||
if not self.smooth then
|
||||
gc_setLineWidth(2)
|
||||
for p=0,self.unit do
|
||||
local X=x+(x2-x)*p/self.unit
|
||||
for p=self.rangeL,self.rangeR,self.unit do
|
||||
local X=x+(x2-x)*(p-self.rangeL)/(self.rangeR-self.rangeL)
|
||||
gc_line(X,y+7,X,y-7)
|
||||
end
|
||||
end
|
||||
@@ -567,7 +567,7 @@ function slider:draw()
|
||||
gc_line(x,y,x2,y)
|
||||
|
||||
--Block
|
||||
local cx=x+(x2-x)*self.pos/self.unit
|
||||
local cx=x+(x2-x)*(self.pos-self.rangeL)/(self.rangeR-self.rangeL)
|
||||
local bx,by,bw,bh=cx-10-ATV*.5,y-16-ATV,20+ATV,32+2*ATV
|
||||
gc_setColor(.8,.8,.8)
|
||||
gc_rectangle('fill',bx,by,bw,bh,3)
|
||||
@@ -602,13 +602,16 @@ end
|
||||
function slider:drag(x)
|
||||
if not x then return end
|
||||
x=x-self.x
|
||||
local p=self.disp()
|
||||
local P=x<0 and 0 or x>self.w and self.unit or x/self.w*self.unit
|
||||
if not self.smooth then
|
||||
P=int(P+.5)
|
||||
local newPos=MATH.interval(x/self.w,0,1)
|
||||
local newVal
|
||||
if not self.unit then
|
||||
newVal=(1-newPos)*self.rangeL+newPos*self.rangeR
|
||||
else
|
||||
newVal=newPos*(self.rangeR-self.rangeL)
|
||||
newVal=self.rangeL+newVal-newVal%self.unit
|
||||
end
|
||||
if p~=P then
|
||||
self.code(P)
|
||||
if newVal~=self.disp()then
|
||||
self.code(newVal)
|
||||
end
|
||||
if self.change and timer()-self.lastTime>.5 then
|
||||
self.lastTime=timer()
|
||||
@@ -621,8 +624,8 @@ function slider:release(x)
|
||||
end
|
||||
function slider:scroll(n)
|
||||
local p=self.disp()
|
||||
local u=self.smooth and .01 or 1
|
||||
local P=n==-1 and max(p-u,0)or min(p+u,self.unit)
|
||||
local u=self.unit or .01
|
||||
local P=MATH.interval(p+u*n,self.rangeL,self.rangeR)
|
||||
if p==P or not P then return end
|
||||
self.code(P)
|
||||
if self.change and timer()-self.lastTime>.18 then
|
||||
@@ -633,7 +636,13 @@ end
|
||||
function slider:arrowKey(k)
|
||||
self:scroll((k=='left'or k=='up')and -1 or 1)
|
||||
end
|
||||
function WIDGET.newSlider(D)--name,x,y,w[,lim][,fText][,color][,unit][,smooth][,font=30][,fType][,change],disp[,show][,code],hide
|
||||
function WIDGET.newSlider(D)--name,x,y,w[,lim][,fText][,color][,axis][,smooth][,font=30][,fType][,change],disp[,show][,code],hide
|
||||
if not D.axis then
|
||||
D.axis={0,1,false}
|
||||
D.smooth=true
|
||||
elseif not D.axis[3]then
|
||||
D.smooth=true
|
||||
end
|
||||
local _={
|
||||
name= D.name or"_",
|
||||
|
||||
@@ -652,8 +661,10 @@ function WIDGET.newSlider(D)--name,x,y,w[,lim][,fText][,color][,unit][,smooth][,
|
||||
|
||||
fText= D.fText,
|
||||
color= D.color and(COLOR[D.color]or D.color)or COLOR.Z,
|
||||
unit= D.unit or 1,
|
||||
smooth=false,
|
||||
rangeL=D.axis[1],
|
||||
rangeR=D.axis[2],
|
||||
unit= D.axis[3],
|
||||
smooth=D.smooth,
|
||||
font= D.font or 30,
|
||||
fType= D.fType,
|
||||
change=D.change,
|
||||
@@ -663,22 +674,17 @@ function WIDGET.newSlider(D)--name,x,y,w[,lim][,fText][,color][,unit][,smooth][,
|
||||
hide= D.hide,
|
||||
show= false,
|
||||
}
|
||||
if D.smooth~=nil then
|
||||
_.smooth=D.smooth
|
||||
else
|
||||
_.smooth=_.unit<=1
|
||||
end
|
||||
if D.show then
|
||||
if type(D.show)=='function'then
|
||||
_.show=D.show
|
||||
else
|
||||
_.show=sliderShowFunc[D.show]
|
||||
end
|
||||
elseif D.show~=false then
|
||||
if _.unit<=1 then
|
||||
_.show=sliderShowFunc.percent
|
||||
else
|
||||
elseif D.show~=false then--Use default if nil
|
||||
if _.unit and _.unit%1==0 then
|
||||
_.show=sliderShowFunc.int
|
||||
else
|
||||
_.show=sliderShowFunc.percent
|
||||
end
|
||||
end
|
||||
for k,v in next,slider do _[k]=v end
|
||||
@@ -1227,6 +1233,14 @@ function listBox:arrowKey(dir)
|
||||
end
|
||||
end
|
||||
end
|
||||
function listBox:select(i)
|
||||
self.selected=i
|
||||
if self.selected<int(self.scrollPos/self.lineH)+2 then
|
||||
self:drag(nil,nil,nil,1e99)
|
||||
elseif self.selected>int(self.scrollPos/self.lineH)+self.capacity-1 then
|
||||
self:drag(nil,nil,nil,-1e99)
|
||||
end
|
||||
end
|
||||
function listBox:draw()
|
||||
local x,y,w,h=self.x,self.y,self.w,self.h
|
||||
local list=self.list
|
||||
|
||||
11
main.lua
11
main.lua
@@ -24,7 +24,7 @@ VERSION=require"version"
|
||||
TIME=love.timer.getTime
|
||||
YIELD=coroutine.yield
|
||||
SYSTEM=love.system.getOS()if SYSTEM=='OS X'then SYSTEM='macOS'end
|
||||
FNNS=true or SYSTEM:find'\79\83'--What does FNSF stand for? IDK so don't ask me lol
|
||||
FNNS=SYSTEM:find'\79\83'--What does FNSF stand for? IDK so don't ask me lol
|
||||
MOBILE=SYSTEM=='Android'or SYSTEM=='iOS'
|
||||
SAVEDIR=fs.getSaveDirectory()
|
||||
|
||||
@@ -184,6 +184,12 @@ Z.setOnFnKeys({
|
||||
function()for k,v in next,_G do print(k,v)end end,
|
||||
function()if love['_openConsole']then love['_openConsole']()end end,
|
||||
})
|
||||
Z.setDebugInfo{
|
||||
{"Cache",gcinfo},
|
||||
{"Tasks",TASK.getCount},
|
||||
{"Voices",VOC.getQueueCount},
|
||||
{"Audios",love.audio.getSourceCount},
|
||||
}
|
||||
Z.setOnResize(function(w,_)
|
||||
SHADER.warning:send('w',w*SCR.dpi)
|
||||
end)
|
||||
@@ -366,8 +372,8 @@ LANG.init('zh',
|
||||
es=require'parts.language.lang_es',
|
||||
pt=require'parts.language.lang_pt',
|
||||
id=require'parts.language.lang_id',
|
||||
ja=require'parts.language.lang_ja',
|
||||
zh_grass=require'parts.language.lang_zh_grass',
|
||||
zh_yygq=require'parts.language.lang_yygq',
|
||||
symbol=require'parts.language.lang_symbol',
|
||||
--1. Add language file to LANG folder;
|
||||
--2. Require it;
|
||||
@@ -543,6 +549,7 @@ do
|
||||
if SETTING.cv then SETTING.vocPack,SETTING.cv=SETTING.cv end
|
||||
if type(SETTING.bg)~='string'then SETTING.bg='on'end
|
||||
if SETTING.skin[18]==10 then SETTING.skin[18]=4 end
|
||||
if SETTING.reTime>3 or SETTING.reTime<.5 then SETTING.reTime=2 end
|
||||
if RANKS.infinite then RANKS.infinite=0 end
|
||||
if RANKS.infinite_dig then RANKS.infinite_dig=0 end
|
||||
if not RANKS.sprint_10l then RANKS.sprint_10l=0 end
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
media/effect/chiptune/clear.ogg
Normal file
BIN
media/effect/chiptune/clear.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
media/effect/chiptune/uncheck .ogg
Normal file
BIN
media/effect/chiptune/uncheck .ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
media/music/lounge.ogg
Normal file
BIN
media/music/lounge.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -748,7 +748,7 @@ do--function resetGameData(args)
|
||||
GAME.recording=false
|
||||
GAME.replaying=true
|
||||
else
|
||||
GAME.frameStart=args:find'n'and 0 or 150-SETTING.reTime*15
|
||||
GAME.frameStart=args:find'n'and 0 or 180-SETTING.reTime*60
|
||||
GAME.seed=seed or math.random(1046101471,2662622626)
|
||||
GAME.pauseTime=0
|
||||
GAME.pauseCount=0
|
||||
|
||||
@@ -594,7 +594,7 @@ do--Userdata tables
|
||||
FTLock=true,
|
||||
|
||||
--System
|
||||
reTime=4,
|
||||
reTime=2,
|
||||
allowTAS=false,
|
||||
autoPause=true,
|
||||
menuPos='middle',
|
||||
|
||||
@@ -8,7 +8,7 @@ return{
|
||||
"https://github.com/26F-Studio/Techmino/blob/main/parts/language/dict_en.lua",
|
||||
},
|
||||
{"Official Website",
|
||||
"official website homepage mainpage",
|
||||
"homepage mainpage",
|
||||
"help",
|
||||
"The official website of Techmino!\nYou can modify your profile on it",
|
||||
"http://home.techmino.org",
|
||||
@@ -69,7 +69,7 @@ return{
|
||||
"https://discord.gg/harddrop"
|
||||
},
|
||||
{"Mew",
|
||||
"mew tieba forum reddit",
|
||||
"tieba forum reddit",
|
||||
"org",
|
||||
"The Mew forum owned by Chinese Tetris Research Community, and was founded in the second half of 2021. Mew is a Chinese social media that can be thought of a combination of Discord and Reddit, with many channels in a big community. Users can chat in the channels or submit posts to the channel. Mew also has a function called \"Library\" which allows storing documentations systematically. The Tetris Mew forum is currently under construction and not too much contents are available (2/Nov/2021).",
|
||||
"https://mew.fun/n/tetris",
|
||||
@@ -100,13 +100,13 @@ return{
|
||||
|
||||
--Games
|
||||
{"TTT",
|
||||
"ttt tetris trainer tres bien",
|
||||
"tetris trainer tres bien",
|
||||
"game",
|
||||
"Tetris Trainer Très-Bien. A hands-on tutorial of advanced techniques in modern Tetris.\nRecommended for players that can complete a 40-line Sprint with all Tetris line clears and no hold.\nCovered topics include T-Spin, finesse, SRS, and some battle setups.\nLink in Japanese.",
|
||||
"http://taninkona.web.fc2.com/ttt/",
|
||||
},
|
||||
{"TTPC",
|
||||
"ttpc tetris perfect clear challenge",
|
||||
"tetris perfect clear challenge",
|
||||
"game",
|
||||
"Tetris Perfect Clear Challenge. The PC opener tutorial for SRS and 7-Bag.\nRecommended for players that have completed TTT. You need to know SRS to play this.\nIncludes only the basic PC opener.\nLink translated to Simplified Chinese; originally in Japanese.",
|
||||
"http://teatube.ltd/ttpc",
|
||||
@@ -142,7 +142,7 @@ return{
|
||||
"https://tetralegends.app",
|
||||
},
|
||||
{"Ascension",
|
||||
"asc ascension ASC",
|
||||
"asc ASC",
|
||||
"game",
|
||||
"Browser Game | Singleplayer/Multiplayer\nOr ASC for short. It uses its own rotation system (also called ASC) and has many single-player modes. Battle modes are currently under beta testing (15/Dec/2021). The Stack mode in this game was also inspired by Ascension. ",
|
||||
"https://asc.winternebs.com",
|
||||
@@ -195,7 +195,7 @@ return{
|
||||
{"Techmino",
|
||||
"techmino",
|
||||
"game",
|
||||
"Cross-Platform | Singleplayer/Multiplayer\nOr Tech for short. A Tetris game developed using LÖVE. It has many single-player modes and many customizable parameters, and online multiplayer modes are gradually being developed.",
|
||||
"Cross-Platform | Singleplayer/Multiplayer\nOr Tech for short. A block stacker game developed using LÖVE. It has many single-player modes and many customizable parameters, and online multiplayer modes are gradually being developed.",
|
||||
},
|
||||
{"Falling Lightblocks",
|
||||
"fl fallinglightblocks",
|
||||
@@ -215,7 +215,7 @@ return{
|
||||
},
|
||||
|
||||
{"TGM",
|
||||
"tgm tetrisgrandmaster tetristhegrandmaster",
|
||||
"tetrisgrandmaster tetristhegrandmaster",
|
||||
"game",
|
||||
"Arcade | Singleplayer/Local Multiplayer\nTetris The Grand Master, an arcade Tetris series. Titles like S13 and GM come from this series.\n\nTGM3 is the most well-known game in this series.",
|
||||
},
|
||||
@@ -299,7 +299,7 @@ return{
|
||||
"iOS/Android | Singleplayer\nThe mobile Tetris game from N3TWORK Inc. It has a 3-minute ultra mode, a marathon mode and a 100-player Royale mode.\n[The UI is great but its controls are not so good.]",
|
||||
},
|
||||
{"Tetris Beat",
|
||||
"tetris beat n3twork rhythm",
|
||||
"n3twork rhythm",
|
||||
"game",
|
||||
"iOS | Singleplayer\nA mobile Tetris game from N3TWORK. It has a \"Beat\" mode besides the Marathon mode, but in this game you only have drop the blocks in rhythm with the BGM.\n[The effects are very heavy and the controls are not so good.]"
|
||||
},
|
||||
@@ -327,57 +327,57 @@ return{
|
||||
"Translator's note on those per-minute and per-second values\n\nNot all of them are commonly used in the communities, and not all terms mean the same thing across all contexts. They mostly apply to Techmino."
|
||||
},
|
||||
{"LPM",
|
||||
"lpm linesperminute speed",
|
||||
"linesperminute speed",
|
||||
"term",
|
||||
"Lines per minute\n\tReflects playing speed of a player.\nDifferent games calculate LPM differently. For example, Tetris Online calculates its LPM using PPS (see below), where 1PPS=24LPM. This basically ignores clearing garbage lines and makes it different from its literal meaning. In Techmino, this converted LPM value is marked \"L'PM\".",
|
||||
},
|
||||
{"PPS",
|
||||
"pps piecespersecond speed",
|
||||
"piecespersecond speed",
|
||||
"term",
|
||||
"Pieces per second\n\tReflects playing speed of a player.",
|
||||
},
|
||||
{"BPM",
|
||||
"bpm blocksperminute piecesperminute speed",
|
||||
"blocksperminute piecesperminute speed",
|
||||
"term",
|
||||
"Blocks per minute\n\tReflects playing speed of a player.\nAlso called PPM (to avoid confusing with the musical term).",
|
||||
},
|
||||
{"KPM",
|
||||
"kpm keysperminute keypressesperminute",
|
||||
"keysperminute keypressesperminute",
|
||||
"term",
|
||||
"Keypresses per minute\n\tReflects how fast the player presses keys or buttons.",
|
||||
},
|
||||
{"KPP",
|
||||
"kpp keysperpiece keypressesperpiece",
|
||||
"keysperpiece keypressesperpiece",
|
||||
"term",
|
||||
"Keypresses per piece\n\tReflects how efficient the player is with the controls. Reduce this number by learning to finesse.",
|
||||
},
|
||||
{"APM",
|
||||
"apm attackperminute",
|
||||
"attackperminute",
|
||||
"term",
|
||||
"Attack per minute\n\tReflects offensive power of a player.\nIn Techmino, the concept of \"attack\" sometimes includes the fractional lines of an attack. Since sending garbage rounds down before sending, this value can be higher than your actual attack power.",
|
||||
},
|
||||
{"SPM",
|
||||
"spm linessentperminute",
|
||||
"linessentperminute",
|
||||
"term",
|
||||
"[lines] Sent per minute\n\tReflects *actual* offensive power of a player. (does not count lines used for cancelling garbage in buffer.)",
|
||||
},
|
||||
{"RPM",
|
||||
"rpm receive jieshou",
|
||||
"receive jieshou",
|
||||
"term",
|
||||
"[lines] Receive per Minute\n\tReflects pressure applied to a player.",
|
||||
},
|
||||
{"DPM",
|
||||
"dpm digperminute defendperminute",
|
||||
"digperminute defendperminute",
|
||||
"term",
|
||||
"Dig/Defend per minute\n\tSometimes can reflect how well a player can survive garbage.",
|
||||
},
|
||||
{"ADPM",
|
||||
"adpm attackdigperminute vs",
|
||||
"attackdigperminute vs",
|
||||
"term",
|
||||
"Attack&Dig per minute\n\tUsed to compare skill differences between the two players within one match; slightly more accurate than APM.\n\"vs\" in TETR.IO is Atk+Dig per 100s",
|
||||
},
|
||||
{"APL",
|
||||
"apl attackperline efficiency",
|
||||
"attackperline efficiency",
|
||||
"term",
|
||||
"Attack per line (cleared)\n\tAlso known as \"efficiency\"; reflects the per-line efficiency of attacks. For example, Tetrises and T-spins have higher efficiency than doubles and triples.",
|
||||
},
|
||||
@@ -413,7 +413,7 @@ return{
|
||||
"Formerly known as Perfect Clear (PC). That is also still the term preferred by the communities and used in Techmino.\nClear all minoes on the field.",
|
||||
},
|
||||
{"HPC",
|
||||
"hpc hc clear halfperfectclear",
|
||||
"hc clear halfperfectclear",
|
||||
"term",
|
||||
"*Techmino-exclusive*\nHalf Perfect Clear\nExtension of an All Clear. Should a line clear resemble an All Clear when ignoring lines below the clear, the clear is a Half Perfect Clear, and sends a small extra amount of attack.",
|
||||
},
|
||||
@@ -439,27 +439,27 @@ return{
|
||||
"A spin performed using the T Tetromino.\nIn modern official games, T-Spins are detected using the 3-corner rule, i.e. if at least three of the four cells diagonal to the rotation center is occupied by minoes, it is considered as a T-Spin. Some games have extra rules to determine a T-Spin as a Mini T-Spin instead, which has reduced attacks/scores.",
|
||||
},
|
||||
{"TSS",
|
||||
"tss t1 tspinsingle",
|
||||
"t1 tspinsingle",
|
||||
"term",
|
||||
"T-Spin Single\nClear 1 line with a T-Spin.",
|
||||
},
|
||||
{"TSD",
|
||||
"tsd t2 tspindouble",
|
||||
"t2 tspindouble",
|
||||
"term",
|
||||
"T-Spin Double\nClear 2 lines with a T-Spin.",
|
||||
},
|
||||
{"TST",
|
||||
"tst t3 tspintriple",
|
||||
"t3 tspintriple",
|
||||
"term",
|
||||
"T-Spin Triple\nClear 3 lines with a T-Spin.",
|
||||
},
|
||||
{"MTSS",
|
||||
"mtss minitspinsingle tsms tspinminisingle",
|
||||
"minitspinsingle tsms tspinminisingle",
|
||||
"term",
|
||||
"Mini T-Spin Single\nFormerly known as T-Spin Mini Single (TSMS).\nClear 1 line with a Mini T-Spin.\nDifferent games have different ways to determine whether a T-Spin is a Mini.",
|
||||
},
|
||||
{"MTSD",
|
||||
"mtsd minitspindouble tsmd tspinminidouble",
|
||||
"minitspindouble tsmd tspinminidouble",
|
||||
"term",
|
||||
"Mini T-Spin Double\nFormerly known as T-Spin Mini Double (TSMD).\nClear 2 lines with a Mini T-Spin.\nDifferent games have different ways to determine whether a T-Spin is a Mini.\nIn addition, different games have different behaviors when clearing a Mini T-Spin Double: some games credit this move correctly, and some games use a different displayed text because they never programmed this in.",
|
||||
},
|
||||
@@ -474,12 +474,12 @@ return{
|
||||
"Systems that determine how the pieces rotate.\n\nIn modern Tetris games, tetrominoes can rotate on a specfic rotation center (but this may be absent in some games). If the minoes overlap with the walls or the field, the system would attempt to perform some offsets (a process known as \"wall-kicking\"). Wall kicks allow minoes to move into in specific-shaped holes.",
|
||||
},
|
||||
{"Orientation",
|
||||
"orientation direction 0r2l 02 20 rl lr",
|
||||
"direction 0r2l 02 20 rl lr",
|
||||
"term",
|
||||
"In SRS and SRS-like rotation systems, there are standard notations describing the orientations of the minoes:\n 0 for Original orientation; R for right, or 90° clockwise; L for left, or 90° counterclockwise; 2 for spin twice (180°). For example, 0→L means rotating counterclockwise from original orientation (0) to L; 0→R means rotating clockwise from original orientation (0) to R; 2→R means rotating counterclockwise from 2 (180°) to R.",
|
||||
},
|
||||
{"ARS",
|
||||
"ars arikrotationsystem atarirotationsystem",
|
||||
"arikrotationsystem atarirotationsystem",
|
||||
"term",
|
||||
"It can refer to two things:\nArika Rotation System, which is used in Tetris: The Grand Master games.\nAtari Rotation System, which aligns pieces to the top-left when rotating.",
|
||||
},
|
||||
@@ -489,12 +489,12 @@ return{
|
||||
"Rotation system used in the Tetris clone Ascension. All pieces use the same two kick tables (one for CW, one for CCW), and the kick range is approximately ± 2 blocks on both axis.\n\nIn Techmino, ASC+ is a modified version of Ascension's rotation system, adding kicks for 180° spins.",
|
||||
},
|
||||
{"BRS",
|
||||
"brs bulletproofsoftware",
|
||||
"bulletproofsoftware",
|
||||
"term",
|
||||
"BPS rotation system, the rotation system used in Tetris games by Bullet-Proof Software.",
|
||||
},
|
||||
{"BiRS",
|
||||
"birs biasrs biasrotationsystem",
|
||||
"biasrs biasrotationsystem",
|
||||
"term",
|
||||
"*Techmino exclusive*\n\nBias Rotation System, Techmino's original rotation system based on XRS and SRS.\nIt sets an offset to the rotation if you hold left/right/soft drop when you rotate.\nIf rotation fails when downwards offset is applied, it tries again without the downwards offset.\nThen it tries without left/right offset.\nIf it fails, then the rotation will not occur.\n\nCompared to XRS, BiRS only uses a single kick table, making it easier to memorize; also keeps the climb-over-terrain feature of SRS.\n\nThe final kick offset's euclidean distance can't be larger than √5; if there is a horizontal offset, the final kick offset can't be in the opposite direction.",
|
||||
},
|
||||
@@ -504,22 +504,22 @@ return{
|
||||
"Cultris II rotation system, a rotation system used in the Tetris clone Cultris II.\nAll rotations and all pieces share the same kick table (left, right, down, down-left, down-right, left 2, right 2), with left priortizing over right.\n\nIn Techmino, C2sym is a modification to this rotation system that chooses whether to check left or right first depending on the piece and rotation.",
|
||||
},
|
||||
{"DRS",
|
||||
"drs dtetrotationsystem",
|
||||
"dtetrotationsystem",
|
||||
"term",
|
||||
"DTET Rotation System\nThe rotation system used in DTET.",
|
||||
},
|
||||
{"NRS",
|
||||
"nrs nintendorotationsystem",
|
||||
"nintendorotationsystem",
|
||||
"term",
|
||||
"Nintendo Rotation System\nThe rotation system used in the Tetris games on the NES and Game Boy.\nIt has two mirrored versions; the left-handed version is used on Game Boy, and the right-handed version on the NES.",
|
||||
},
|
||||
{"SRS",
|
||||
"srs superrotationsystem",
|
||||
"superrotationsystem",
|
||||
"term",
|
||||
"Super Rotation System, the most widely used rotation system by modern Tetris games, and is the foundation of many self-made rotation systems. There are four orientations for each tetromino, and they can rotate clockwise or counterclockwise (But without 180° rotations). Should a Tetromino overlap with the wall, floor or other minoes on the field after rotation, a few offset positions will be checked, allowing pieces to kick off walls and floors. You can look up the details of the wall kick table on Tetris Wiki.",
|
||||
},
|
||||
{"TRS",
|
||||
"trs techminorotationsystem",
|
||||
"techminorotationsystem",
|
||||
"term",
|
||||
"*Techmino-exclusive*\nTechmino Rotation System\nThe rotation system used in Techmino, based on SRS.\nIt includes fixes on common cases where S/Z are locked from rotating and some extra useful kicks. Each pentomino also has a kick table roughly based on SRS logic.",
|
||||
},
|
||||
@@ -535,7 +535,7 @@ return{
|
||||
"Clearing 2 or more technical line clears (Spins and Tetrises) in a row (without introducing ordinary line clears) gives extra attack power.\nUnlike combos, placing pieces that do not clear lines does not affect Back to Back.",
|
||||
},
|
||||
{"B2B2B",
|
||||
"b2b2b b3b",
|
||||
"b3b",
|
||||
"term",
|
||||
"*Techmino-exclusive*\nClearing many Back to Backs to fill the Back to Back gauge, and eventually you will be able to perform a Back to Back to Back, giving more bonus attack. A.k.a. B3B.",
|
||||
},
|
||||
@@ -560,17 +560,17 @@ return{
|
||||
"Many modern Tetris games use the same color scheme for the tetrominoes. The colors are:\nZ–red, S–green, J–blue, L–orange, T–purple, O–yellow, and I–cyan.\n\nTechmino also uses this \"standard\" coloring for the tetrominoes.",
|
||||
},
|
||||
{"IRS",
|
||||
"irs initialrotationsystem",
|
||||
"initialrotationsystem",
|
||||
"term",
|
||||
"Initial Rotation System\nHolding a rotation key during spawn delay to spawn the piece pre-rotated. Sometimes prevents death.",
|
||||
},
|
||||
{"IHS",
|
||||
"ihs initialholdsystem",
|
||||
"initialholdsystem",
|
||||
"term",
|
||||
"Initial Hold System\nHolding the hold key during spawn delay to spawn the held piece (or Next piece in the Next queue if there is no held piece) instead of the current piece, and put the current piece in hold as if the player has performed the held before spawning. Sometimes prevents death.",
|
||||
},
|
||||
{"IMS",
|
||||
"ims initialmovesystem",
|
||||
"initialmovesystem",
|
||||
"term",
|
||||
"*Techmino-exclusive*\nInitial Movement System\nHolding a sideways movement key during spawn delay to spawn the piece one block off to the side. Sometimes prevents death.\nNote that DAS need to be full charged when new piece appear",
|
||||
},
|
||||
@@ -585,12 +585,12 @@ return{
|
||||
"Save your current piece for later use, and take out a previously held piece (or next piece in the next queue, if no piece was held) to place instead. You can only perform this once per piece in most cases.\n\nTechmino Exclusive: Techmino has a \"In-place hold\" feature. When enabled, pieces that spawn from the Hold queue will spawn at where your currently-controlling piece is, instead of at the top of the matrix.",
|
||||
},
|
||||
{"Swap",
|
||||
"swap hold",
|
||||
"hold",
|
||||
"term",
|
||||
"Like *hold*, swap your current piece and the first piece of next queue. You can also only perform this once per piece in most cases.",
|
||||
},
|
||||
{"Deepdrop",
|
||||
"deepdrop shenjiang",
|
||||
"shenjiang",
|
||||
"term",
|
||||
"*Techmino exclusive*\n\nA special function that allows minoes to teleport through the wall to enter a hole. When the mino hits the bottom, pressing the soft drop button again will enable the deep drop. if there is a hole that fits the shape of the mino, it will teleport into this hole immediately/nThis mechanism is especially useful for AI because it allows AI to disregard the differences between different rotation systems.",
|
||||
},
|
||||
@@ -610,7 +610,7 @@ return{
|
||||
"A sub-(number) time means the time is below a certain milestone. The unit of the time is often left out and inferred, for example, a \"sub-30\" time for a 40-line Sprint means below 30 seconds, and a \"sub-15\" time for a 1000-line Sprint means below 15 minutes.",
|
||||
},
|
||||
{"Donation",
|
||||
"donation donate",
|
||||
"donate",
|
||||
"term",
|
||||
"A method of \"plugging\" up the Tetris hole to send a T-Spin. After the T-Spin, the Tetris hole is opened up once again to allow the continuation of Tetris or downstacking.\n--Harddrop wiki",
|
||||
},
|
||||
@@ -680,7 +680,7 @@ return{
|
||||
"The stacking method where you leave a 4-block-wide well in the middle.\nThe infamous combo setup that not only makes a lot of combos but also abuses the death conditions and won't die even if you receive some garbage. This technique is often disliked by players due to how unbalanced it is.",
|
||||
},
|
||||
{"Residual",
|
||||
"residual c4w s4w",
|
||||
"c4w s4w",
|
||||
"term",
|
||||
"Refers to how many blocks to leave in the well of a 4-wide combo setup. The most common are 3-residual and 6-residual.\n3-residual has fewer variations and is easier to learn, with a pretty good chance of success, and it's pretty useful in combat.\n6-residual has more variables and is harder, but can be more consistent if you do it well. It can also be used for special challenges like getting 100 combos in an infinite 4-wide challenge.",
|
||||
},
|
||||
@@ -690,7 +690,7 @@ return{
|
||||
"A way of stacking where you have a 6-block-wide stack on the left, and a 3-block-wide stack on the right.\nFor a skilled player, this method of stacking might reduce the keypresses needed for stacking, and is a popular Sprint stacking method. The reason why it works has to do with the fact that pieces spawn with a bias to the left.",
|
||||
},
|
||||
{"Freestyle",
|
||||
"freestyle ziyou",
|
||||
"ziyou",
|
||||
"term",
|
||||
"This term is usually used in 20TSDs. Freestyle means finishing 20 TSDs without using static stacking modes. Freestyle 20TSDs is more difficult than static tsacking modes such as LST, and the performance can represent the T-spin skills a player has in battles.",
|
||||
},
|
||||
@@ -700,12 +700,12 @@ return{
|
||||
"Modern Tetris games have three different conditions in which the player tops out:\n1. Block out: when a piece spawned overlaps with the existing blocks in the field;\n2. Lock out: when a piece locks entirely above the skyline;\n3. Top out: when the stack exceeds 40 lines in height (often due to incoming garbage).\nTechmino does not check for locking out and topping out.",
|
||||
},
|
||||
{"Buffer zone",
|
||||
"buffer zone above super invisible disappear",
|
||||
"above super invisible disappear",
|
||||
"term",
|
||||
"Refers to 21st-40th lines above the visible field. Because the blocks in the field could go over the visible field (this usually happens when multiple garbage lines come in) so the buffer zone was created so those blocks could go back to the field when garbage lines are cleared. Also, the buffer zone is usually located at 21st-40th lines because this is sufficient for most cases. Refer to \"Vanish Zone\" to learn more.",
|
||||
},
|
||||
{"Vanish zone",
|
||||
"vanish zone disappear gone cut die",
|
||||
"disappear gone cut die",
|
||||
"term",
|
||||
"Refers to the area located above the 40th line. This is usually realised by combining c4w and multiple garbage lines. In many games, when any block reaches the vanish zone, the game is terminated immediately.\nHowever, this area can have different behaviours in different games. Some games are flawed because the game could crash when the blocks enter the vanish zone (e.g. Tetris Online). Wierd behaviours could also happen when the blocks enter the vanish zone (you can refer to this video, click on the globe icon to open the link).\n\nFurthermore, the vanish zone in Jstris is located above the 22nd line, and any blocks locked above the 21st line will disappear. ",
|
||||
"https://youtu.be/z4WtWISkrdU",
|
||||
@@ -716,7 +716,7 @@ return{
|
||||
"Falling speed is often described in terms of \"G\", i.e. how many lines the blocks fall in one frame (usually assuming 60 fps).\nG is a relatively large unit. The speed of Lv 1 in a regular Marathon (one second per line) is 1/60 G, and 1G is about Lv 13 speed. The highest speed of modern Tetris is 20G because the field height is 20 lines. In fact, the real meaning of 20G is \"Infinite falling speed\", and even when the field height is more than 20 lines, 20G modes force all the blocks to fall down to the bottom instantly. You can learn more about 20G at the \"20G\" entry.",
|
||||
},
|
||||
{"20G",
|
||||
"20g gravity instant",
|
||||
"gravity instant",
|
||||
"term",
|
||||
"The fastest falling speed of modern Tetris. In 20G modes, pieces appear instantly on the bottom of the field without the actual process of \"falling down\". This sometimes also limits a piece's sideways movements, as it is not always possible to make a piece climb over a bump or out of a well in 20G. You can learn more at the unit \"G\" at the \"falling speed\" entry. ",
|
||||
},
|
||||
@@ -726,17 +726,17 @@ return{
|
||||
"The delay between block touching the ground and locking down (i.e. can no longer be controlled, and the next piece spawns).\nModern Tetris games often have forgiving lockdown delay mechanics where you can reset this delay by moving or rotating (up to 15 times), and you can sometimes stall for time by doing this. Classic Tetris games often have a far less forgiving lockdown delay.",
|
||||
},
|
||||
{"ARE",
|
||||
"are spawn appearance delay",
|
||||
"spawn appearance delay",
|
||||
"term",
|
||||
"Sometimes called the Entry Delay. ARE refers to the delay between the lockdown of one piece and the spawn of another piece.",
|
||||
},
|
||||
{"Line ARE",
|
||||
"line are appearance delay",
|
||||
"appearance delay",
|
||||
"term",
|
||||
"The delay between the start of a line clear animation to the spawn of the next piece.",
|
||||
},
|
||||
{"Death ARE",
|
||||
"death are die delay",
|
||||
"die delay",
|
||||
"term",
|
||||
"(Techmino exclusive) When the spawn location of the next piece is blocked by an existing block in the field, a delay will be added in addition to the spawn ARE, and this delay is referred to as the death ARE. This mechanism can be used along with IHS and IRS to prevent death. \nOriginal idea by NOT_A_ROBOT",
|
||||
},
|
||||
@@ -781,7 +781,7 @@ return{
|
||||
"Techmino exclusive: this feature is designed to prevent mis-harddropping from pressing hard drop key shortly after the previous piece is naturally locked down.\nHard drop key can be disabled for a few frames (depending on the settings) after a natural lockdown.\n\nOther games may have a similar feature but may function differently.",
|
||||
},
|
||||
{"SDF",
|
||||
"sdf softdropfactor",
|
||||
"softdropfactor",
|
||||
"term",
|
||||
"Soft Drop Factor\n\nA way to define soft drop speed as a multiple of natural falling speed. In guideline games, the soft drop is usually 20x the speed of natural falling, i.e. it has an SDF of 20. Techmino does not use SDF to define soft drop speed.",
|
||||
},
|
||||
@@ -821,7 +821,7 @@ return{
|
||||
"Another method of fast-tapping in high-gravity (around 1G) modes (with slow DAS/ARR setting).\nWhen you perform rolling, you fix the position of one hand and the controller, and then tap the back of the controller with fingers on your other hand repeatedly. This method allows even faster moving speeds than hypertapping (see \"Hypertapping\" for more)and requires much less effort.\nThis method was first discovered by Cheez-fish and he has once achieved a tapping speed of more than 20 Hz.",
|
||||
},
|
||||
{"Passthrough",
|
||||
"passthrough pingthrough",
|
||||
"pingthrough",
|
||||
"term",
|
||||
"",--TODO
|
||||
},
|
||||
@@ -896,7 +896,7 @@ return{
|
||||
"A Tetris bot. Originally built for Puyo Puyo Tetris, thus can be less powerful on Techmino.",
|
||||
},
|
||||
{"ZZZbot",
|
||||
"zzzbot ai bot",
|
||||
"ai bot",
|
||||
"term",
|
||||
"A Tetris bot. Built by the Chinese Tetris player 奏之章 (Zou Zhi Zhang) and has decent performance in many games",
|
||||
},
|
||||
@@ -914,7 +914,7 @@ return{
|
||||
HDsearch.."dt",
|
||||
},
|
||||
{"DTPC",
|
||||
"dtpc dtcannon doubletriplecannon",
|
||||
"dtcannon doubletriplecannon",
|
||||
"setup",
|
||||
"A follow-up of the DT Cannon that ends with an All Clear"..HDwiki,
|
||||
HDsearch.."dt",
|
||||
@@ -926,7 +926,7 @@ return{
|
||||
HDsearch.."bt_cannon",
|
||||
},
|
||||
{"BTPC",
|
||||
"btpc btcannon betacannon",
|
||||
"btcannon betacannon",
|
||||
"setup",
|
||||
"A follow-up of the BT Cannon that ends with an All Clear."..HDwiki,
|
||||
HDsearch.."bt_cannon",
|
||||
@@ -1020,8 +1020,8 @@ return{
|
||||
{"LST stacking",
|
||||
"lst",
|
||||
"pattern",
|
||||
"An infinite T-Spin Double setup"..HDwiki,
|
||||
HDsearch.."st_stacking",
|
||||
"An infinite T-Spin Double setup",
|
||||
"https://four.lol/stacking/lst",
|
||||
},
|
||||
{"Hamburger",
|
||||
"hamburger",
|
||||
@@ -1058,7 +1058,7 @@ return{
|
||||
|
||||
--Savedata managing
|
||||
{"Console",
|
||||
"console cmd commamd minglinghang kongzhitai terminal",
|
||||
"cmd commamd minglinghang kongzhitai terminal",
|
||||
"command",
|
||||
"Techmino has a console that enables debugging/advanced features.\nTo access the console, repeatedly tap (or click) the Techmino logo or press the C key on the keyboard on the main menu.\n\nCareless actions in the console may result in corrupting or losing saved data. Proceed at your own risk.",
|
||||
},
|
||||
@@ -1100,12 +1100,12 @@ return{
|
||||
|
||||
--English
|
||||
{"SFX",
|
||||
"sfx soundeffects",
|
||||
"soundeffects",
|
||||
"english",
|
||||
"Acronym for \"Sound Effects\".",
|
||||
},
|
||||
{"BGM",
|
||||
"bgm backgroundmusic",
|
||||
"backgroundmusic",
|
||||
"english",
|
||||
"Acronym for \"Background Music\".",
|
||||
},
|
||||
@@ -1122,7 +1122,7 @@ return{
|
||||
|
||||
--Famous
|
||||
{"Hebomai",
|
||||
"hebomai hbm",
|
||||
"hbm",
|
||||
"name",
|
||||
"One of the top players.\nOnce Beat Wu Songhao (a Chinese player) on TV.",
|
||||
},
|
||||
@@ -1132,52 +1132,52 @@ return{
|
||||
"(あめみや たいよう)\n\nOne of the top players.\nWon champion on a game in Puyo Puyo Tetris's Swap mode.",
|
||||
},
|
||||
{"Ajanba",
|
||||
"ajanba ajb",
|
||||
"ajb",
|
||||
"name",
|
||||
"One of the top players.\nWon champion of JsCup.",
|
||||
},
|
||||
{"Blink",
|
||||
"blink",
|
||||
"",
|
||||
"name",
|
||||
"One of the top players.\nRuns the Tetris community, Hard Drop.",
|
||||
},
|
||||
{"Doremy",
|
||||
"doremy 123",
|
||||
"123",
|
||||
"name",
|
||||
"One of the top players.\nAmemiya once said he was the second-best player in the world.",
|
||||
},
|
||||
{"Firestorm",
|
||||
"firestorm fst",
|
||||
"fst",
|
||||
"name",
|
||||
"One of the top players.\nWon champion of JsCup.",
|
||||
},
|
||||
{"Furea",
|
||||
"furea fuleiya jk",
|
||||
"flare fuleiya jk",
|
||||
"name",
|
||||
"(ふれあ)\n\nOne of the top players.\nWorld record holder of Puyo Puyo Tetris's Ultra mode.",
|
||||
},
|
||||
{"Iljain",
|
||||
"iljain yijianlian",
|
||||
"yijianlian",
|
||||
"name",
|
||||
"One of the top players.\nAchieved Rank 1 in Cultris II.",
|
||||
},
|
||||
{"Jonas",
|
||||
"jonas",
|
||||
"",
|
||||
"name",
|
||||
"(1981-2021) One of the top players in Classic Tetris.\nFour-times-in-a-row champion of CTWC.",
|
||||
},
|
||||
{"Joseph",
|
||||
"joseph",
|
||||
"",
|
||||
"name",
|
||||
"One of the top players in Classic Tetris.\nTwice-in-a-row champion of CTWC. Also holds many world records of Tetris (NES, Nintendo).",
|
||||
},
|
||||
{"Kazu",
|
||||
"kazu mdking",
|
||||
"mdking",
|
||||
"name",
|
||||
"One of the top players.\nFamous for how he can turn misdrops into donation setups.\nA.k.a. \"GAMEOVER\", \"GAMAOVER\", \"GAME_OVER_RETRY\"",
|
||||
},
|
||||
{"Microblizz",
|
||||
"microblizz",
|
||||
"",
|
||||
"name",
|
||||
"One of the top players.\nFormer world record holder for Sprint.",
|
||||
},
|
||||
@@ -1192,7 +1192,7 @@ return{
|
||||
"One of the top players.\nFamously fond of using Center 4-Wide setups, thus having a bad reputation. However, he is undeniably skilled in other techniques as well.",
|
||||
},
|
||||
{"Yakine",
|
||||
"yakine heshui",
|
||||
"",
|
||||
"name",
|
||||
"One of the top players.\nFamous for fancy T-Spins. When in combat but not in danger, he could often pull off some fancy donations very high on the field. Third place on the speed leaderboards of Jstris's 20TSD mode, and didn't use setups (the first and second place both used LST setup).",
|
||||
},
|
||||
@@ -1202,7 +1202,7 @@ return{
|
||||
"Starting from here, all but one term are China-specific (the not-China term is Diao) and are less relevant for the global community.\n\"Virtual content creator\" refers to people who produce content online under a fictional persona, and appear as a motion-controlled animated character on screens. Basically \"Virtual YouTuber\" but not platform-specific."
|
||||
},
|
||||
{"TetroDictionary",
|
||||
"zictionary tetrodictionary littlez",
|
||||
"zictionary littlez",
|
||||
"name",
|
||||
"(or Zictionary for short) The name of this dictionary!\nIt includes brief introductions on many common terms in Tetris.\nIt used to be a chatbot in our QQ group, which was used to answer new player's FAQs. The entries in the Tetrodictionary were also inherited from the database in the chatbot.\nThe contents in the TetroDictionary was adapted from a variety of sources such as Tetris Wiki and Hard Drop Wiki.",
|
||||
},
|
||||
@@ -1214,25 +1214,25 @@ return{
|
||||
},
|
||||
|
||||
{"Circu1ation",
|
||||
"circu1ation",
|
||||
"",
|
||||
"name",
|
||||
"One of the top players. First one to achieve sub-20 40L Sprint in China, X rank on TETR.IO.",
|
||||
"https://space.bilibili.com/557547205",
|
||||
},
|
||||
{"Farter",
|
||||
"farteryhr",
|
||||
"",
|
||||
"name",
|
||||
"Tetris Research community member.\nPersonal bests: Sprint 26.193 seconds\nOne of the prestigious players in the Chinese Tetris community. Author of T-ex and Tetr.js Farter's Dig Mod.",
|
||||
"https://space.bilibili.com/132966",
|
||||
},
|
||||
{"Teatube",
|
||||
"teatube ttb chaguan chanaiye sifangchaye 022",
|
||||
"ttb chaguan chanaiye sifangchaye 022",
|
||||
"name",
|
||||
"Administrator of the Tetris Research community, Operator of the Tetris Online Study private server, chief editor of the Huiji wiki.\nPersonal bests: Sprint 33 seconds.",
|
||||
"https://space.bilibili.com/834903",
|
||||
},
|
||||
{"Sniraite",
|
||||
"sniraite",
|
||||
"",
|
||||
"name",
|
||||
"Tetris Research community member.\nPersonal bests: Sprint 23 seconds\nOne of the top players in China. Should be the fastest player in Mainland China.",
|
||||
"https://space.bilibili.com/561589",
|
||||
@@ -1243,7 +1243,7 @@ return{
|
||||
"Tetris Research community member.\nMain organizer for competitions in the community.",
|
||||
},
|
||||
{"Flyz",
|
||||
"flyz fxg",
|
||||
"fxg",
|
||||
"name",
|
||||
"Tetris Research community member.\nA technical player.",
|
||||
"https://space.bilibili.com/787096",
|
||||
@@ -1260,12 +1260,12 @@ return{
|
||||
"(Yùn Kōng Zhī Líng)Tetris Research community member.\nPersonal bests: Sprint 33 seconds.\nDecent efficiency. Can't eat spicy food. Often uses TKI 3, Albatross and PC opener.",
|
||||
"https://space.bilibili.com/9964553",
|
||||
},
|
||||
{"Mono",
|
||||
"mono dongxi",
|
||||
"name",
|
||||
"Tetris Research community member.\nWe seem to have lost some information about this individual, but you should still be able to find her in one of the voice packs in Techmino.",
|
||||
"https://space.bilibili.com/1048531896",
|
||||
},
|
||||
-- {"Mono",
|
||||
-- "dongxi",
|
||||
-- "name",
|
||||
-- "Tetris Research community member.\nWe seem to have lost some information about this individual, but you should still be able to find her in one of the voice packs in Techmino.",
|
||||
-- "https://space.bilibili.com/1048531896",
|
||||
-- },
|
||||
{"奏之章",
|
||||
"zzz zouzhizhang",
|
||||
"name",
|
||||
@@ -1291,31 +1291,31 @@ return{
|
||||
"https://space.bilibili.com/1471400",
|
||||
},
|
||||
{"Mifu",
|
||||
"mifu swl nanmaomao",
|
||||
"swl",
|
||||
"name",
|
||||
"Originally known as swl.\nPersonal bests: Sprint 28.445 seconds, Tetris Research community member.\nMiya's Tetris coach. Miya made an animated character art for him called Mifu, meaning \"Miya's Shifu\".",
|
||||
"https://space.bilibili.com/109356367",
|
||||
},
|
||||
{"ZXC",
|
||||
"zxc thtsod flag ctf",
|
||||
"thtsod flag ctf",
|
||||
"name",
|
||||
"Also known as ThTsOd.\nTetris Research community member.\nA technical player.",
|
||||
"https://space.bilibili.com/4610502",
|
||||
},
|
||||
{"Tinko",
|
||||
"tinko",
|
||||
"",
|
||||
"name",
|
||||
"Tetris Research community member.\nA technical player.",
|
||||
"https://tinko.moe",
|
||||
},
|
||||
{"T722",
|
||||
"722",
|
||||
{"T0722",
|
||||
"",
|
||||
"name",
|
||||
"Tetris Research community member.\nMusician.",
|
||||
"Tetris Research community member.\nMusic Composer.",
|
||||
"https://space.bilibili.com/30452985",
|
||||
},
|
||||
{"Diao",
|
||||
"diao",
|
||||
"",
|
||||
"name",
|
||||
"Tetris Research community member.\nOne of the top battle players. Won second place in JsCup, champion in TTT, champion in HDO XII.\nHas many former nicknames including nmdtql, diao, nanami.",
|
||||
"https://space.bilibili.com/471341780",
|
||||
@@ -1327,7 +1327,7 @@ return{
|
||||
"https://space.bilibili.com/403250559",
|
||||
},
|
||||
{"Particle_G",
|
||||
"particleg pg",
|
||||
"pg",
|
||||
"name",
|
||||
"Tetris Research community member.\nSprint 59.4 seconds\nThe developer of Techmino backend",
|
||||
"https://space.bilibili.com/3306106",
|
||||
@@ -1339,13 +1339,13 @@ return{
|
||||
"https://space.bilibili.com/263909369",
|
||||
},
|
||||
{"子心Koishi",
|
||||
"koishi",
|
||||
"",
|
||||
"name",
|
||||
"(Zǐ Xīn Koishi)\n\nTetris Research community member, Virtual content creator.\nA top Tetris 99 players known for his strategies.",
|
||||
"https://space.bilibili.com/147529",
|
||||
},
|
||||
{"ditoly",
|
||||
"ditoly icrem kuimei jk",
|
||||
"icrem kuimei jk",
|
||||
"name",
|
||||
"Tetris Research community member. The developer of Nanamino.",
|
||||
"https://space.bilibili.com/13014410",
|
||||
@@ -1356,7 +1356,7 @@ return{
|
||||
"(Lán Lǜ)\n\nTetris Research community member.\nParticipant of $1",--Techmino backend
|
||||
},
|
||||
{"喵田弥夜Miya",
|
||||
"miya miaotianmiye",
|
||||
"miaotianmiye",
|
||||
"name",
|
||||
"(Miāo Tián Mí Yè Miya)\n\nTetris Research community member, Virtual content creator.\nPractically the mascot of the community. Voice actress of Techmino.",
|
||||
"https://space.bilibili.com/846180",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -210,19 +210,99 @@ return{
|
||||
FNNS and"/"or"Check Zictionary for more",
|
||||
},
|
||||
staff={
|
||||
"Author: MrZ Email: 1046101471@qq.com",
|
||||
"Powered by LÖVE",
|
||||
"ORIGINALLY BY MrZ",
|
||||
"E-mail: 1046101471@qq.com",
|
||||
"",
|
||||
"Program: MrZ, Particle_G, [scdhh, FinnTenzor]",
|
||||
"Art: MrZ, Gnyar, C₂₉H₂₅N₃O₅, ScF, [旋律星萤, T0722]",
|
||||
"Music: MrZ, 柒栎流星, ERM, Trebor, C₂₉H₂₅N₃O₅, [T0722, Aether]",
|
||||
"Voice & Sound: Miya, Xiaoya, Mono, MrZ, Trebor",
|
||||
"Performance: 模电, HBM",
|
||||
"Translations: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
|
||||
"Programmed, Developed, And Designed By",
|
||||
"MrZ",
|
||||
"",
|
||||
"Special Thanks:",
|
||||
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
|
||||
"Farter, Teatube, 蕴空之灵, T9972, [All test staff]",
|
||||
"Music Made Using",
|
||||
"Beepbox",
|
||||
"FL Studio",
|
||||
"FL Mobile",
|
||||
"Logic Pro X",
|
||||
"",
|
||||
"[POWERED BY LÖVE]",
|
||||
"",
|
||||
"Programming",
|
||||
"MrZ",
|
||||
"ParticleG",
|
||||
"Gompyn",
|
||||
"Trebor",
|
||||
"(scdhh)",
|
||||
"(FinnTenzor)",
|
||||
"(NOT_A_ROBOT)",
|
||||
"(user670)",
|
||||
"",
|
||||
"GitHub CI, Packaging & Backend",
|
||||
"ParticleG",
|
||||
"Trebor",
|
||||
"LawrenceLiu",
|
||||
"Gompyn",
|
||||
"flaribbit",
|
||||
"scdhh",
|
||||
"",
|
||||
"Visual Designs, UI & UX",
|
||||
"MrZ",
|
||||
"Gnyar",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"ScF",
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"Musical Designs",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
"ERM",
|
||||
"Trebor",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"(T0722)",
|
||||
"(Aether)",
|
||||
"(Hailey)",
|
||||
"",
|
||||
"Sound Effects & Voice Packs",
|
||||
"Miya",
|
||||
"Xiaoya",
|
||||
"Mono",
|
||||
"MrZ",
|
||||
"Trebor",
|
||||
"",
|
||||
"Translations & Localizations",
|
||||
"User670",
|
||||
"MattMayuga",
|
||||
"Mizu",
|
||||
"Mr.Faq",
|
||||
"ScF",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"NOT_A_ROBOT",
|
||||
"sakurw",
|
||||
"",
|
||||
"Performances",
|
||||
"Electric283",
|
||||
"Hebomai",
|
||||
"",
|
||||
"Special Thanks to",
|
||||
"Flyz",
|
||||
"Big_True",
|
||||
"NOT_A_ROBOT",
|
||||
"思竣",
|
||||
"yuhao7370",
|
||||
"Farter",
|
||||
"Teatube",
|
||||
"蕴空之灵",
|
||||
"T9972",
|
||||
"No-Usernam8",
|
||||
"andrew4043",
|
||||
"smdbs-smdbs",
|
||||
"paoho",
|
||||
"Allustrate",
|
||||
"Haoran SUN",
|
||||
"Tianling Lyu",
|
||||
"huaji2369",
|
||||
"Lexitik",
|
||||
"Tourahi Anime",
|
||||
"[All other test staff]",
|
||||
"…And You!",
|
||||
},
|
||||
used=[[
|
||||
Tools used:
|
||||
|
||||
@@ -175,21 +175,7 @@ return{
|
||||
FNNS and"/"or"Por favor descarga las últimas versiones desde los sitios oficiales. El juego es gratuito",
|
||||
FNNS and"/"or"Ve el Zictionary (en inglés) para más info",
|
||||
},
|
||||
staff={
|
||||
"Autor:MrZ Email: 1046101471@qq.com",
|
||||
"Creado con LÖVE",
|
||||
"",
|
||||
"Programación: MrZ, Particle_G, [scdhh, FinnTenzor]",
|
||||
"Artistas: MrZ, Gnyar, C₂₉H₂₅N₃O₅, ScF, [旋律星萤, T0722]",
|
||||
"Música: MrZ, 柒栎流星, ERM, Trebor, C₂₉H₂₅N₃O₅, [T0722, Aether]",
|
||||
"Voces/Sonidos: Miya, Xiaoya, Mono, MrZ, Trebor",
|
||||
"Performance: 模电, HBM",
|
||||
"Traducción: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
|
||||
"",
|
||||
"Agradecimientos:",
|
||||
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
|
||||
"Farter, Teatube, 蕴空之灵, T9972, [Todo el Staff de Testeo]",
|
||||
},
|
||||
|
||||
used=[[
|
||||
Herramientas utilizadas:
|
||||
Beepbox
|
||||
|
||||
@@ -176,19 +176,99 @@ return{
|
||||
-- FNNS and"/"or"Check Zictionary for more",
|
||||
},
|
||||
staff={
|
||||
"Author: MrZ E-mail: 1046101471@qq.com",
|
||||
"Powered by LÖVE",
|
||||
"À L'ORIGINE PAR MrZ",
|
||||
"E-mail: 1046101471@qq.com",
|
||||
"",
|
||||
"Programme : MrZ, Particle_G, [scdhh, FinnTenzor]",
|
||||
"Art : MrZ, Gnyar, C₂₉H₂₅N₃O₅, ScF, [旋律星萤, T0722]",
|
||||
"Musique : MrZ, 柒栎流星, ERM, Trebor, C₂₉H₂₅N₃O₅, [T0722, Aether]",
|
||||
"Voix & Sons: Miya, Xiaoya, Mono, MrZ, Trebor",
|
||||
"Performance: 模电, HBM",
|
||||
"Traduction: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
|
||||
"Programmé, Développé et Conçu Par",
|
||||
"MrZ",
|
||||
"",
|
||||
"Merci à:",
|
||||
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
|
||||
"Farter, Teatube, 蕴空之灵, T9972, [All test staff]",
|
||||
"Musique Réalisée à L'aide de",
|
||||
"Beepbox",
|
||||
"FL Studio",
|
||||
"FL Mobile",
|
||||
"Logic Pro X",
|
||||
"",
|
||||
"[POWERED BY LÖVE]",
|
||||
"",
|
||||
"Programme",
|
||||
"MrZ",
|
||||
"ParticleG",
|
||||
"Gompyn",
|
||||
"Trebor",
|
||||
"(scdhh)",
|
||||
"(FinnTenzor)",
|
||||
"(NOT_A_ROBOT)",
|
||||
"(user670)",
|
||||
"",
|
||||
"GitHub CI, Emballage & back-end",
|
||||
"ParticleG",
|
||||
"Trebor",
|
||||
"LawrenceLiu",
|
||||
"Gompyn",
|
||||
"flaribbit",
|
||||
"scdhh",
|
||||
"",
|
||||
"Conceptions Visuelles, UI & UX",
|
||||
"MrZ",
|
||||
"Gnyar",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"ScF",
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"Conceptions Musicales",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
"ERM",
|
||||
"Trebor",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"(T0722)",
|
||||
"(Aether)",
|
||||
"(Hailey)",
|
||||
"",
|
||||
"Effets Sonores & Packs Vocaux",
|
||||
"Miya",
|
||||
"Xiaoya",
|
||||
"Mono",
|
||||
"MrZ",
|
||||
"Trebor",
|
||||
"",
|
||||
"Traductions & Localisations",
|
||||
"User670",
|
||||
"MattMayuga",
|
||||
"Mizu",
|
||||
"Mr.Faq",
|
||||
"ScF",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"NOT_A_ROBOT",
|
||||
"sakurw",
|
||||
"",
|
||||
"Performance",
|
||||
"Electric283",
|
||||
"Hebomai",
|
||||
"",
|
||||
"Merci à",
|
||||
"Flyz",
|
||||
"Big_True",
|
||||
"NOT_A_ROBOT",
|
||||
"思竣",
|
||||
"yuhao7370",
|
||||
"Farter",
|
||||
"Teatube",
|
||||
"蕴空之灵",
|
||||
"T9972",
|
||||
"No-Usernam8",
|
||||
"andrew4043",
|
||||
"smdbs-smdbs",
|
||||
"paoho",
|
||||
"Allustrate",
|
||||
"Haoran SUN",
|
||||
"Tianling Lyu",
|
||||
"huaji2369",
|
||||
"Lexitik",
|
||||
"Tourahi Anime",
|
||||
"[All other test staff]",
|
||||
"…And You!",
|
||||
},
|
||||
used=[[
|
||||
Outils utilisés:
|
||||
|
||||
@@ -211,19 +211,99 @@ return{
|
||||
-- FNNS and"/"or"Check Zictionary for more",
|
||||
},
|
||||
staff={
|
||||
"Pencipta: MrZ Email: 1046101471@qq.com",
|
||||
"Dipersembahkan oleh kerangka permainan LÖVE",
|
||||
"ASLI OLEH MrZ",
|
||||
"E-mail: 1046101471@qq.com",
|
||||
"",
|
||||
"Program: MrZ, Particle_G, [scdhh, FinnTenzor]",
|
||||
"Penggambar: MrZ, Gnyar, C₂₉H₂₅N₃O₅, ScF, [旋律星萤, T0722]",
|
||||
"Musik: MrZ, 柒栎流星, ERM, Trebor, C₂₉H₂₅N₃O₅, [T0722, Aether]",
|
||||
"Suara: Miya, Xiaoya, Mono, MrZ, Trebor",
|
||||
"Pertunjukan: 模电, HBM",
|
||||
"Translasi: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
|
||||
"Diprogram, Dikembangkan, Dan Dirancang Oleh",
|
||||
"MrZ",
|
||||
"",
|
||||
"Terima Kasih Khusus:",
|
||||
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
|
||||
"Farter, Teatube, 蕴空之灵, T9972, [All test staff]",
|
||||
"Musik Dibuat Menggunakan",
|
||||
"Beepbox",
|
||||
"FL Studio",
|
||||
"FL Mobile",
|
||||
"Logic Pro X",
|
||||
"",
|
||||
"[POWERED BY LÖVE]",
|
||||
"",
|
||||
"Pemrograman",
|
||||
"MrZ",
|
||||
"ParticleG",
|
||||
"Gompyn",
|
||||
"Trebor",
|
||||
"(scdhh)",
|
||||
"(FinnTenzor)",
|
||||
"(NOT_A_ROBOT)",
|
||||
"(user670)",
|
||||
"",
|
||||
"GitHub CI, Pengemasan & Backend",
|
||||
"ParticleG",
|
||||
"Trebor",
|
||||
"LawrenceLiu",
|
||||
"Gompyn",
|
||||
"flaribbit",
|
||||
"scdhh",
|
||||
"",
|
||||
"Desain Visual, UI & UX",
|
||||
"MrZ",
|
||||
"Gnyar",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"ScF",
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"Desain Musik",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
"ERM",
|
||||
"Trebor",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"(T0722)",
|
||||
"(Aether)",
|
||||
"(Hailey)",
|
||||
"",
|
||||
"Efek Suara & Pak Suara",
|
||||
"Miya",
|
||||
"Xiaoya",
|
||||
"Mono",
|
||||
"MrZ",
|
||||
"Trebor",
|
||||
"",
|
||||
"Terjemahan & Lokalisasi",
|
||||
"User670",
|
||||
"MattMayuga",
|
||||
"Mizu",
|
||||
"Mr.Faq",
|
||||
"ScF",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"NOT_A_ROBOT",
|
||||
"sakurw",
|
||||
"",
|
||||
"Pertunjukan",
|
||||
"Electric283",
|
||||
"Hebomai",
|
||||
"",
|
||||
"Terima Kasih Khusus",
|
||||
"Flyz",
|
||||
"Big_True",
|
||||
"NOT_A_ROBOT",
|
||||
"思竣",
|
||||
"yuhao7370",
|
||||
"Farter",
|
||||
"Teatube",
|
||||
"蕴空之灵",
|
||||
"T9972",
|
||||
"No-Usernam8",
|
||||
"andrew4043",
|
||||
"smdbs-smdbs",
|
||||
"paoho",
|
||||
"Allustrate",
|
||||
"Haoran SUN",
|
||||
"Tianling Lyu",
|
||||
"huaji2369",
|
||||
"Lexitik",
|
||||
"Tourahi Anime",
|
||||
"[All other test staff]",
|
||||
"…And You!",
|
||||
},
|
||||
used=[[
|
||||
Alat-alat yang digunakan:
|
||||
|
||||
987
parts/language/lang_ja.lua
Normal file
987
parts/language/lang_ja.lua
Normal file
@@ -0,0 +1,987 @@
|
||||
local C=COLOR
|
||||
return{
|
||||
fallback='en',
|
||||
loadText={
|
||||
loadSFX="Loading Sound Effects",
|
||||
loadSample="Loading Instrument Samples",
|
||||
loadVoice="Loading Voice Packs",
|
||||
loadFont="Loading Fonts",
|
||||
loadModeIcon="Loading Mode Icons",
|
||||
loadMode="Loading Modes",
|
||||
loadOther="Loading Other Assets",
|
||||
finish="Press Any Key to Start!",
|
||||
},
|
||||
sureQuit="終了するにはもう一度押してください",
|
||||
sureReset="リセットするにはもう一度押してください",
|
||||
sureDelete="削除するにはもう一度押してください",
|
||||
newDay="新しい1日、新しい始まりです!",
|
||||
playedLong="長時間プレイしています、適度に休憩を",
|
||||
playedTooMuch="かなり長くプレイしています! Techminoは楽しいですが、休憩を忘れずに!",
|
||||
settingWarn="注意: 通常ではない設定に変更しました!",
|
||||
|
||||
atkModeName={"ランダム","バッジ狙い","ととめうち","カウンター"},
|
||||
royale_remain="残り $1 人",
|
||||
powerUp={[0]="+000%","+025%","+050%","+075%","+100%"},
|
||||
cmb={nil,"1 REN","2 REN","3 REN","4 REN","5 REN","6 REN","7 REN","8 REN","9 REN","10 REN!","11 REN!","12 REN!","13 REN!","14 REN!!","15 REN!!","16 REN!!","17 REN!!!","18 REN!!!","19 REN!!!","MEGAREN"},
|
||||
spin="-spin",
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
cleared="$1 Lines",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
PC="Perfect Clear",HPC="Hemi-Perfect Clear",
|
||||
replaying="[Replay]",
|
||||
tasUsing="[TAS]",
|
||||
|
||||
stage="Stage $1 Cleared!",
|
||||
great="Great!",
|
||||
awesome="Awesome!",
|
||||
almost="Almost There!",
|
||||
continue="Keep Going!",
|
||||
maxspeed="MAX SPEED!",
|
||||
speedup="Speed Up!",
|
||||
missionFailed="Wrong Clear",
|
||||
|
||||
speedLV="Speed Level",
|
||||
piece="Piece",line="Lines",atk="火力",eff="効率",
|
||||
rpm="RPM",tsd="TSD",
|
||||
grade="Grade",techrash="Techrash",
|
||||
wave="Wave",nextWave="Next",
|
||||
combo="REN",maxcmb="Max REN",
|
||||
pc="Perfect Clear",ko="KOs",
|
||||
|
||||
win="Win!",
|
||||
lose="Lose",
|
||||
|
||||
finish="Finished",
|
||||
gamewin="You Won",
|
||||
gameover="Game Over",
|
||||
|
||||
pause="Pause",
|
||||
pauseCount="Pause回数",
|
||||
finesse_ap="All Perfect",
|
||||
finesse_fc="Full Combo",
|
||||
|
||||
page="Page:",
|
||||
|
||||
cc_fixed="CCは、固定されたミノ順には非対応です",
|
||||
cc_swap="ホールドがSwapの時、CCは非対応です",
|
||||
ai_prebag="AIはテトロミノではないものを含み、カスタムされたミノ順には非対応です",
|
||||
ai_mission="AIは、カスタムミッションに非対応です",
|
||||
switchSpawnSFX="ブロック出現時のSFXをONにしてください!",
|
||||
needRestart="すべての変更を適用するために再起動してください",
|
||||
|
||||
loadError_errorMode="'$1'の読み込みに失敗: ロードモード'$2'が存在しません",
|
||||
loadError_read="'$1'の読み込みに失敗: 読み込みに失敗しました",
|
||||
loadError_noFile="'$1'の読み込みに失敗: ファイルが存在しません",
|
||||
loadError_other="'$1'の読み込みに失敗: $2",
|
||||
loadError_unknown="'$1'の読み込みに失敗: 理由不明",
|
||||
|
||||
saveError_duplicate="'$1'の保存に失敗: 既に同じ名前のファイルがあります",
|
||||
saveError_encode="'$1'の保存に失敗: エンコードエラー",
|
||||
saveError_other="'$1'の保存に失敗: $2",
|
||||
saveError_unknown="'$1'の読み込みに失敗: 理由不明",
|
||||
|
||||
copyDone="コピーしました!",
|
||||
saveDone="データを保存しました!",
|
||||
exportSuccess="出力成功!",
|
||||
importSuccess="入力成功!",
|
||||
dataCorrupted="データが破損してます",
|
||||
pasteWrongPlace="貼り付ける位置が間違ってませんか?",
|
||||
noFile="ファイルがないです",
|
||||
|
||||
nowPlaying="Now playing:",
|
||||
|
||||
VKTchW="タッチ感度",
|
||||
VKOrgW="オリジナル感度",
|
||||
VKCurW="現在の配置",
|
||||
|
||||
noScore="No scores",
|
||||
modeLocked="Locked",
|
||||
unlockHint="Rank B以上を取得すると解放されます",
|
||||
highScore="High Scores",
|
||||
newRecord="New Record!",
|
||||
|
||||
replayBroken="リプレイが読み込めません",
|
||||
|
||||
dictNote="==TetroDictionaryからコピーしました==",
|
||||
|
||||
getNoticeFail="お知らせ情報が取得できませんでした",
|
||||
oldVersion="Version $1が取得できます",
|
||||
needUpdate="最新のVersionを取得してください!",
|
||||
versionNotMatch="Versionsが一致しません!",
|
||||
notFinished="工事中!",
|
||||
|
||||
jsonError="JSON Error",
|
||||
|
||||
noUsername="ユーザーネームを入力してください",
|
||||
wrongEmail="メールアドレスが無効です",
|
||||
noPassword="パスワードを入力してください",
|
||||
diffPassword="パスワードが一致しません",
|
||||
registerRequestSent="Sign Upリクエストを送信しました",
|
||||
registerSuccessed="Sign Up成功!",
|
||||
loginSuccessed="ログインしています!",
|
||||
accessSuccessed="アクセス権限を取得しました",
|
||||
|
||||
wsConnecting="Websocket connecting…",
|
||||
wsFailed="WebSocket Connection Failed",
|
||||
wsClose="WebSocket Closed:",
|
||||
netTimeout="接続がタイムアウトしました",
|
||||
|
||||
onlinePlayerCount="Online",
|
||||
createRoomSuccessed="部屋を建てました",
|
||||
started="Playing",
|
||||
joinRoom="が入室しました",
|
||||
leaveRoom="が退出しました",
|
||||
ready="Ready",
|
||||
connStream="接続中……",
|
||||
waitStream="待機中……",
|
||||
spectating="Spectating",
|
||||
chatRemain="Online",
|
||||
chatStart="------チャットの先頭------",
|
||||
chatHistory="------新しいメッセージ------",
|
||||
|
||||
keySettingInstruction="選択してキーを入力\nEscape: キャンセル\nBackspace: キーを削除",
|
||||
customBGhelp="カスタム背景にする画像ファイルをドロップ",
|
||||
customBGloadFailed="サポートされていないフォーマットのファイルです",
|
||||
|
||||
errorMsg="問題が発生しました、エラーログを開発者に送り、再起動してください",
|
||||
tryAnotherBuild="[Invalid UTF-8]使用しているOSがMicrosoft WindowsであればTechmino-win32かTechmino-win64をダウンロードしてください (現在使用しているものは違うものです)",
|
||||
|
||||
modInstruction="Modを選択してください!\nModはゲームの中身を変えます\nしかしゲームが破損することもあります\nModを使用した場合スコアは保存されません",
|
||||
modInfo={
|
||||
next="NEXT\nNEXTの個数を変更します",
|
||||
hold="HOLD\nHOLDの個数を変更します",
|
||||
hideNext="Hidden NEXT\n指定した数だけNEXTを隠します",
|
||||
infHold="InfiniHold\nHOLDできる回数を無限にします",
|
||||
hideBlock="Hide Current Piece:\n現在出現しているピースを隠します",
|
||||
hideGhost="No Ghost\nゴーストを消します",
|
||||
hidden="Hide Locked Pieces.\n設置されたピースが時間内に見えなくなります",
|
||||
hideBoard="Hide Board\n盤面の一部もしくは、全体を隠します",
|
||||
flipBoard="Flip Board\n盤面が回転もしくは滑ります",
|
||||
dropDelay="Gravity\n落下速度をフレーム単位で変更します",
|
||||
lockDelay="Lock Delay\n設置猶予をフレーム単位で変更します",
|
||||
waitDelay="Spawn Delay\nブロックの出現猶予をフレーム単位で変更します",
|
||||
fallDelay="Line Clear Delay\nLine消去時間をフレーム単位で変更します",
|
||||
life="Life\n残機数を変更します",
|
||||
forceB2B="B2B Only\nB2Bが途切れるとゲームオーバーです",
|
||||
forceFinesse="Finesse Only\n最適化を失敗するとゲームオーバーです",
|
||||
tele="Teleport\nDAS: 0, ARR: 0になります",
|
||||
noRotation="No Rotation\n回転出来なくなります",
|
||||
noMove="No Movement\n左右移動が出来なくなります",
|
||||
customSeq="Randomizer\nミノの出現法則を変更します",
|
||||
pushSpeed="Garbage Speed\n下穴がせり上がるまでに置けるブロック数を変更します (ブロック数/フレーム)",
|
||||
boneBlock="[ ]\n[ ]ブロックで遊ぼう",
|
||||
},
|
||||
pauseStat={
|
||||
"Time:",
|
||||
"入力/回転/Hold:",
|
||||
"Pieces:",
|
||||
"Row/Dig:",
|
||||
"Attack/DigAtk:",
|
||||
"Received:",
|
||||
"Line消去数:",
|
||||
"Spins:",
|
||||
"B2B/B3B/PC/HPC:",
|
||||
"最適化:",
|
||||
},
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={"DPM","ADPM","APM","SPM","LPM","DPM"},
|
||||
stat={
|
||||
"起動回数:",
|
||||
"プレイ回数:",
|
||||
"プレイ時間:",
|
||||
"入力/回転/Hold:",
|
||||
"Block/Row/Atk.:",
|
||||
"Recv./Res./Asc.:",
|
||||
"Dig/Dig Atk:",
|
||||
"Eff/Dig Eff:",
|
||||
"B2B/B3B:",
|
||||
"PC/HPC:",
|
||||
"最適化ミス/Rate:",
|
||||
},
|
||||
aboutTexts={
|
||||
"これは“ただの”落ちものパズルゲームです。本当ですよ",
|
||||
"Inspired by C2/IO/JS/WWC/KOS etc.",
|
||||
"",
|
||||
"Powered by LÖVE",
|
||||
"ご意見、ご感想、バグ報告など大歓迎です!",
|
||||
"ゲームは、必ず公式から入手してください",
|
||||
"他から入手した場合は、安全性を保証しません",
|
||||
"同時に作者は、責任を負いません",
|
||||
FNNS and"/"or"ゲーム自体は、無料ですが寄付をお願いします",
|
||||
FNNS and"/"or"詳しくはZictionaryをご覧ください",
|
||||
},
|
||||
staff={
|
||||
"ORIGINALLY BY MrZ",
|
||||
"E-Mail: 1046101471@qq.com",
|
||||
"",
|
||||
"プログラム、開発、デザイン",
|
||||
"MrZ",
|
||||
"",
|
||||
"楽曲作成ツール",
|
||||
"Beepbox",
|
||||
"FL Studio",
|
||||
"FL Mobile",
|
||||
"Logic Pro X",
|
||||
"",
|
||||
"[POWERED BY LÖVE]",
|
||||
"",
|
||||
"プログラミング",
|
||||
"MrZ",
|
||||
"ParticleG",
|
||||
"Gompyn",
|
||||
"Trebor",
|
||||
"(scdhh)",
|
||||
"(FinnTenzor)",
|
||||
"(NOT_A_ROBOT)",
|
||||
"(user670)",
|
||||
"",
|
||||
"GitHub CI、パッケージングとバックエンド",
|
||||
"ParticleG",
|
||||
"Trebor",
|
||||
"LawrenceLiu",
|
||||
"Gompyn",
|
||||
"flaribbit",
|
||||
"scdhh",
|
||||
"",
|
||||
"ビジュアルデザイン、UIとUX",
|
||||
"MrZ",
|
||||
"Gnyar",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"ScF",
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"ミュージカルデザイン",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
"ERM",
|
||||
"Trebor",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"(T0722)",
|
||||
"(Aether)",
|
||||
"(Hailey)",
|
||||
"",
|
||||
"SFXとボイスパック",
|
||||
"Miya",
|
||||
"Xiaoya",
|
||||
"Mono",
|
||||
"MrZ",
|
||||
"Trebor",
|
||||
"",
|
||||
"翻訳とローカリゼーション",
|
||||
"User670",
|
||||
"MattMayuga",
|
||||
"Mizu",
|
||||
"Mr.Faq",
|
||||
"ScF",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"NOT_A_ROBOT",
|
||||
"",
|
||||
"パフォーマンス",
|
||||
"Electric283",
|
||||
"Hebomai",
|
||||
"",
|
||||
"Special Thanks",
|
||||
"Flyz",
|
||||
"Big_True",
|
||||
"NOT_A_ROBOT",
|
||||
"思竣",
|
||||
"yuhao7370",
|
||||
"Farter",
|
||||
"Teatube",
|
||||
"蕴空之灵",
|
||||
"T9972",
|
||||
"No-Usernam8",
|
||||
"andrew4043",
|
||||
"smdbs-smdbs",
|
||||
"paoho",
|
||||
"Allustrate",
|
||||
"Haoran SUN",
|
||||
"Tianling Lyu",
|
||||
"huaji2369",
|
||||
"Lexitik",
|
||||
"Tourahi Anime",
|
||||
"[All other test staff]",
|
||||
"…And You!",
|
||||
},
|
||||
used=[[
|
||||
Tools used:
|
||||
BeepBox
|
||||
GoldWave
|
||||
GFIE
|
||||
FL Mobile
|
||||
Libs used:
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Support the Author",
|
||||
WidgetText={
|
||||
main={
|
||||
offline="ソロプレイ",
|
||||
qplay="続きから",
|
||||
online="マルチプレイ",
|
||||
custom="カスタムプレイ",
|
||||
setting="設定",
|
||||
stat="統計",
|
||||
dict="Zictionary",
|
||||
replays="リプレイ",
|
||||
},
|
||||
main_simple={
|
||||
sprint="Sprint",
|
||||
marathon="Marathon",
|
||||
},
|
||||
mode={
|
||||
mod="Mods (F1)",
|
||||
start="Start",
|
||||
},
|
||||
mod={
|
||||
title="Mods",
|
||||
reset="リセット (tab)",
|
||||
unranked="Unranked",
|
||||
},
|
||||
pause={
|
||||
setting="設定 (S)",
|
||||
replay="リプレイ (P)",
|
||||
save="保存 (O)",
|
||||
resume="再開 (esc)",
|
||||
restart="リスタート (R)",
|
||||
quit="終了 (Q)",
|
||||
tas="TAS (T)",
|
||||
},
|
||||
net_menu={
|
||||
league="リーグ",
|
||||
ffa="FFA",
|
||||
rooms="クラブ",
|
||||
logout="Log Out",
|
||||
},
|
||||
net_league={
|
||||
match="対戦相手を探す",
|
||||
},
|
||||
net_rooms={
|
||||
password="パスワード",
|
||||
refreshing="探索中",
|
||||
noRoom="部屋が存在しません",
|
||||
refresh="更新",
|
||||
new="部屋を建てる",
|
||||
join="参加",
|
||||
},
|
||||
net_newRoom={
|
||||
title="部屋設定",
|
||||
roomName="部屋名 (デフォルト: \"[username]'s room\")",
|
||||
password="パスワード",
|
||||
description="部屋説明",
|
||||
|
||||
life="残機数",
|
||||
pushSpeed="せり上がり速度",
|
||||
garbageSpeed="せり上がり猶予",
|
||||
visible="設置ミノの視認性",
|
||||
freshLimit="設置時間のリセット回数",
|
||||
|
||||
fieldH="盤面の高さ",
|
||||
bufferLimit="ダメージの保持上限",
|
||||
heightLimit="致死Lineの高さ",
|
||||
|
||||
drop="自然落下時間",
|
||||
lock="設置時間",
|
||||
wait="操作硬直時間",
|
||||
fall="Line消去時間",
|
||||
hang="死後硬直時間",
|
||||
hurry="AREキャンセル時間",
|
||||
|
||||
capacity="試合人数",
|
||||
create="作成",
|
||||
|
||||
ospin="O-spin",
|
||||
fineKill="最適化のみ",
|
||||
b2bKill="B2B継続",
|
||||
lockout="盤面内でのみ設置",
|
||||
easyFresh="通常の設置時間リセット",
|
||||
deepDrop="ディープドロップ",
|
||||
bone="骨ブロック",
|
||||
|
||||
eventSet="ルール設定",
|
||||
|
||||
holdMode="Hold設定",
|
||||
nextCount="Next",
|
||||
holdCount="Hold",
|
||||
infHold="Infinite Hold",
|
||||
phyHold="In-place Hold",
|
||||
},
|
||||
net_game={
|
||||
ready="Ready",
|
||||
spectate="Spectate",
|
||||
cancel="Cancel ready",
|
||||
},
|
||||
setting_game={
|
||||
title="Game設定",
|
||||
graphic="←Video",
|
||||
sound="Audio→",
|
||||
style="スタイル",
|
||||
|
||||
ctrl="チューニング",
|
||||
key="キーコンフィグ",
|
||||
touch="タッチ設定",
|
||||
showVK="入力キーの可視化",
|
||||
reTime="開始カウント",
|
||||
RS="回転法則",
|
||||
menuPos="メニューの位置",
|
||||
sysCursor="システムカーソル",
|
||||
autoPause="ゲーム中断時のオートポーズ",
|
||||
autoSave="オートセーブ",
|
||||
autoLogin="オートログイン",
|
||||
simpMode="シンプルなホーム画面",
|
||||
},
|
||||
setting_video={
|
||||
title="Video設定",
|
||||
sound="←Audio",
|
||||
game="Game→",
|
||||
|
||||
block="操作ブロックの描画",
|
||||
smooth="滑らかな自然落下",
|
||||
upEdge="3D Block",
|
||||
bagLine="7-Bagの境界線",
|
||||
|
||||
ghostType="ゴーストタイプ",
|
||||
ghost="ゴースト",
|
||||
center="ブロック中心の透明度",
|
||||
grid="グリッド",
|
||||
lineNum="行番号",
|
||||
|
||||
lockFX="設置演出",
|
||||
dropFX="落下演出",
|
||||
moveFX="左右移動演出",
|
||||
clearFX="Line消去演出",
|
||||
splashFX="消去時の弾ける演出",
|
||||
shakeFX="盤面移動演出",
|
||||
atkFX="攻撃演出",
|
||||
|
||||
frame="レンダリングフレームレート(%)",
|
||||
FTlock="フレームスキップ",
|
||||
|
||||
text="Line消去ポップ",
|
||||
score="スコアポップ",
|
||||
bufferWarn="ダメージアラート",
|
||||
showSpike="スパイクカウンター",
|
||||
nextPos="出現位置のプレビュー",
|
||||
highCam="画面のスクロール",
|
||||
warn="警告演出",
|
||||
|
||||
clickFX="クリック演出",
|
||||
power="バッテリー",
|
||||
clean="素早い描画",
|
||||
fullscreen="フルスクリーン",
|
||||
|
||||
bg_on="通常背景",
|
||||
bg_off="背景なし",
|
||||
bg_custom="カスタム背景",
|
||||
|
||||
blockSatur="ブロックデザイン",
|
||||
fieldSatur="設置ブロックデザイン",
|
||||
},
|
||||
setting_sound={
|
||||
title="Audio設定",
|
||||
|
||||
game="←Game",
|
||||
graphic="Video→",
|
||||
|
||||
mainVol="主音量",
|
||||
bgm="BGM",
|
||||
sfx="SFX",
|
||||
stereo="ステレオ",
|
||||
spawn="ブロックの出現音",
|
||||
warn="警告音",
|
||||
vib="振動",
|
||||
voc="ボイス",
|
||||
|
||||
autoMute="ゲーム中断時のオートミュート",
|
||||
fine="最適化失敗音",
|
||||
sfxPack="SFXパック",
|
||||
vocPack="ボイスパック",
|
||||
apply="適用",
|
||||
},
|
||||
setting_control={
|
||||
title="チューニング設定",
|
||||
preview="preview",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
dascut="DAS cut",
|
||||
dropcut="Auto-lock cut",
|
||||
sddas="Soft Drop DAS",sdarr="Soft Drop ARR",
|
||||
ihs="Initial Hold",
|
||||
irs="Initial Rotation",
|
||||
ims="Initial Movement",
|
||||
reset="リセット",
|
||||
},
|
||||
setting_key={
|
||||
a1="Move Left",
|
||||
a2="Move Right",
|
||||
a3="Rotate Right",
|
||||
a4="Rotate Left",
|
||||
a5="Rotate 180°",
|
||||
a6="Hard Drop",
|
||||
a7="Soft Drop",
|
||||
a8="Hold",
|
||||
a9="Function 1",
|
||||
a10="Function 2",
|
||||
a11="Instant Left",
|
||||
a12="Instant Right",
|
||||
a13="Sonic Drop",
|
||||
a14="Down 1",
|
||||
a15="Down 4",
|
||||
a16="Down 10",
|
||||
a17="Left Drop",
|
||||
a18="Right Drop",
|
||||
a19="Left Zangi",
|
||||
a20="Right Zangi",
|
||||
restart="Retry",
|
||||
},
|
||||
setting_skin={
|
||||
skinSet="ブロックスキン",
|
||||
title="スタイル設定",
|
||||
skinR="色をリセット",
|
||||
faceR="方向をリセット",
|
||||
},
|
||||
setting_touch={
|
||||
default="デフォルト",
|
||||
snap="グリッドにスナップ",
|
||||
size="サイズ",
|
||||
shape="シャープ",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= "Move Left:", b2="Move Right:", b3="Rotate Right:", b4="Rotate Left:",
|
||||
b5= "Rotate 180°:", b6="Hard Drop:", b7="Soft Drop:", b8="Hold:",
|
||||
b9= "Function 1:", b10="Function 2:", b11="Instant Left:", b12="Instant Right:",
|
||||
b13="Sonic Drop:", b14="Down 1:", b15="Down 4:", b16="Down 10:",
|
||||
b17="Left Drop:", b18="Right Drop:",b19="Left Zangi:", b20="Right Zangi:",
|
||||
|
||||
norm="Normal",
|
||||
pro="Advanced",
|
||||
icon="アイコン",
|
||||
sfx="SFX",
|
||||
vib="VIB",
|
||||
alpha="Alpha",
|
||||
|
||||
track="オートトラック",
|
||||
dodge="オートドッチ",
|
||||
},
|
||||
customGame={
|
||||
title="カスタムプレイ",
|
||||
defSeq="デフォルトのミノ順",
|
||||
noMsn="ミッションなし",
|
||||
|
||||
drop="自然落下時間",
|
||||
lock="設置時間",
|
||||
wait="操作硬直時間",
|
||||
fall="Line消去時間",
|
||||
hang="死後硬直時間",
|
||||
hurry="AREキャンセル時間",
|
||||
|
||||
bg="背景",
|
||||
bgm="音楽",
|
||||
|
||||
copy="盤面+ミノ順+ミッションをコピー",
|
||||
paste="盤面+ミノ順+ミッションを貼り付け",
|
||||
play_clear="スタート",
|
||||
play_puzzle="パズルをスタート",
|
||||
|
||||
reset="リセット (del)",
|
||||
advance="More (A)",
|
||||
mod="Mods (F1)",
|
||||
field="盤面編集 (F)",
|
||||
sequence="ミノ順編集 (S)",
|
||||
mission="ミッション編集 (M)",
|
||||
|
||||
eventSet="ルール設定",
|
||||
|
||||
holdMode="Hold設定",
|
||||
nextCount="Next",
|
||||
holdCount="Hold",
|
||||
infHold="Infinite Hold",
|
||||
phyHold="In-place Hold",
|
||||
|
||||
fieldH="盤面の高さ",
|
||||
visible="設置ミノの視認性",
|
||||
freshLimit="設置時間のリセット回数",
|
||||
opponent="相手",
|
||||
life="残機数",
|
||||
pushSpeed="せり上がり速度",
|
||||
garbageSpeed="せり上がり猶予",
|
||||
|
||||
bufferLimit="ダメージの保持上限",
|
||||
heightLimit="致死Lineの高さ",
|
||||
ospin="O-Spin",
|
||||
fineKill="最適化のみ",
|
||||
b2bKill="B2B継続",
|
||||
lockout="Fail on Lock Out",
|
||||
easyFresh="通常の設置時間リセット",
|
||||
deepDrop="Deep Drop",
|
||||
bone="骨ブロック",
|
||||
},
|
||||
custom_field={
|
||||
title="カスタムプレイ",
|
||||
subTitle="盤面",
|
||||
|
||||
any="消しゴム",
|
||||
smart="自動着色",
|
||||
|
||||
push="せり上がり (K)",
|
||||
del="Line消去 (L)",
|
||||
|
||||
demo="×を非表示",
|
||||
|
||||
newPg="ページ追加 (N)",
|
||||
delPg="ページ削除 (M)",
|
||||
prevPg="←",
|
||||
nextPg="→",
|
||||
},
|
||||
custom_sequence={
|
||||
title="カスタムプレイ",
|
||||
subTitle="ミノ順",
|
||||
sequence="巡法則",
|
||||
},
|
||||
custom_mission={
|
||||
title="カスタムプレイ",
|
||||
subTitle="ミッション",
|
||||
|
||||
_1="1",_2="2",_3="3",_4="4",
|
||||
any1="any1",any2="any2",any3="any3",any4="any4",
|
||||
PC="PC",
|
||||
Z1="Z1",S1="S1",J1="J1",L1="L1",T1="T1",O1="O1",I1="I1",
|
||||
Z2="Z2",S2="S2",J2="J2",L2="L2",T2="T2",O2="O2",I2="I2",
|
||||
Z3="Z3",S3="S3",J3="J3",L3="L3",T3="T3",O3="O3",I3="I3",
|
||||
O4="O4",I4="I4",
|
||||
mission="強制ミッション",
|
||||
},
|
||||
about={
|
||||
staff="staff",
|
||||
his="History",
|
||||
legals="Legals",
|
||||
},
|
||||
dict={
|
||||
title="TetroDictionary",
|
||||
},
|
||||
stat={
|
||||
path="データフォルダ読み込み",
|
||||
save="データ管理",
|
||||
},
|
||||
music={
|
||||
title="music room",
|
||||
arrow="→",
|
||||
now="Now Playing:",
|
||||
|
||||
bgm="BGM",
|
||||
sound="SFXs",
|
||||
},
|
||||
launchpad={
|
||||
title="SFX Room",
|
||||
bgm="BGM",
|
||||
sfx="SFX",
|
||||
voc="VOC",
|
||||
music="BGM",
|
||||
label="ラベル",
|
||||
},
|
||||
login={
|
||||
title="Sign In",
|
||||
register="Sign Up",
|
||||
email="Email Address",
|
||||
password="Password",
|
||||
keepPW="Remember me",
|
||||
login="Log In",
|
||||
},
|
||||
register={
|
||||
title="Sign Up",
|
||||
login="Sign In",
|
||||
username="ユーザーネーム",
|
||||
email="メールアドレス",
|
||||
password="パスワード",
|
||||
password2="パスワード",
|
||||
register="Sign Up",
|
||||
registering="応答待機中...",
|
||||
},
|
||||
account={
|
||||
title="アカウント",
|
||||
},
|
||||
app_15p={
|
||||
color="Color",
|
||||
invis="Invis",
|
||||
slide="Slide",
|
||||
pathVis="Show Path",
|
||||
revKB="Reverse",
|
||||
},
|
||||
app_schulteG={
|
||||
rank="Size",
|
||||
invis="Invis",
|
||||
disappear="Hide",
|
||||
tapFX="Tap FX",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="Level",
|
||||
keyboard="Keyboard",
|
||||
},
|
||||
app_2048={
|
||||
invis="Invis",
|
||||
tapControl="Tap controls",
|
||||
|
||||
skip="Skip Round",
|
||||
},
|
||||
app_ten={
|
||||
next="Next",
|
||||
invis="Invis",
|
||||
fast="Fast",
|
||||
},
|
||||
app_dtw={
|
||||
color="Color",
|
||||
mode="Mode",
|
||||
bgm="BGM",
|
||||
arcade="Arcade",
|
||||
},
|
||||
app_link={
|
||||
invis="Invis",
|
||||
},
|
||||
savedata={
|
||||
export="クリップボードにコピー",
|
||||
import="クリップボードからインポート",
|
||||
unlock="進捗",
|
||||
data="統計",
|
||||
setting="設定",
|
||||
vk="仮想キーレイアウト",
|
||||
|
||||
couldSave="クラウドに保存 (注意:テスト段階)",
|
||||
notLogin="[クラウドにアクセス中]",
|
||||
upload="アップロード",
|
||||
download="ダウンロード",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"Sprint", "10L", "10 Line消去!"},
|
||||
['sprint_20l']= {"Sprint", "20L", "20 Line消去!"},
|
||||
['sprint_40l']= {"Sprint", "40L", "40 Line消去!"},
|
||||
['sprint_100l']= {"Sprint", "100L", "100 Line消去!"},
|
||||
['sprint_400l']= {"Sprint", "400L", "400 Line消去!"},
|
||||
['sprint_1000l']= {"Sprint", "1,000L", "1,000 Line消去!"},
|
||||
['sprintPenta']= {"Sprint", "PENTOMINO", "ペントミノで40 Line消去!"},
|
||||
['sprintMPH']= {"Sprint", "MPH", "ミノ順なし\nNextなし\nHoldなし"},
|
||||
['dig_10l']= {"Dig", "10L", "10 Line下穴を消去"},
|
||||
['dig_40l']= {"Dig", "40L", "40 Line下穴を消去"},
|
||||
['dig_100l']= {"Dig", "100L", "100 Line下穴を消去"},
|
||||
['dig_400l']= {"Dig", "400L", "400 Line下穴を消去"},
|
||||
['drought_n']= {"Drought", "100L", "Iミノなし"},
|
||||
['drought_l']= {"Drought+", "100L", "W T F"},
|
||||
['marathon_n']= {"Marathon", "NORMAL", "速くなる中200 Lineのマラソン"},
|
||||
['marathon_h']= {"Marathon", "HARD", "速い中200 Lineのマラソン"},
|
||||
['solo_e']= {"Battle", "EASY", "AI討伐!"},
|
||||
['solo_n']= {"Battle", "NORMAL", "AI討伐!"},
|
||||
['solo_h']= {"Battle", "HARD", "AI討伐!"},
|
||||
['solo_l']= {"Battle", "LUNATIC", "AI討伐!"},
|
||||
['solo_u']= {"Battle", "ULTIMATE", "AI討伐!"},
|
||||
['techmino49_e']= {"Tech 49", "EASY", "49人で勝負\n最後の1人になれ!"},
|
||||
['techmino49_h']= {"Tech 49", "HARD", "49人で勝負\n最後の1人になれ!"},
|
||||
['techmino49_u']= {"Tech 49", "ULTIMATE", "49人で勝負\n最後の1人になれ!"},
|
||||
['techmino99_e']= {"Tech 99", "EASY", "99人で勝負\n最後の1人になれ!"},
|
||||
['techmino99_h']= {"Tech 99", "HARD", "99人で勝負\n最後の1人になれ!"},
|
||||
['techmino99_u']= {"Tech 99", "ULTIMATE", "99人で勝負\n最後の1人になれ!"},
|
||||
['round_e']= {"Turn-Based", "EASY", "ターン制のAIと勝負!"},
|
||||
['round_n']= {"Turn-Based", "NORMAL", "ターン制のAIと勝負!"},
|
||||
['round_h']= {"Turn-Based", "HARD", "ターン制のAIと勝負!"},
|
||||
['round_l']= {"Turn-Based", "LUNATIC", "ターン制のAIと勝負!"},
|
||||
['round_u']= {"Turn-Based", "ULTIMATE", "ターン制のAIと勝負!"},
|
||||
['master_n']= {"Master", "NORMAL", "20G 初心者方へ"},
|
||||
['master_h']= {"Master", "HARD", "20G プロの方へ"},
|
||||
['master_m']= {"Master", "M21", "20G マスターの方へ"},
|
||||
['master_final']= {"Master", "FINAL", "20G その先へ"},
|
||||
['master_ph']= {"Master", "PHANTASM", "???"},
|
||||
['master_ex']= {"GrandMaster", "EXTRA", "刹那よりも短い永遠"},
|
||||
['master_instinct']={"Master", "INSTINCT", "もしミノが見えなくなったら?"},
|
||||
['strategy_e']= {"Strategy", "EASY", "20Gでの素早い判断"},
|
||||
['strategy_h']= {"Strategy", "HARD", "20Gでの素早い判断"},
|
||||
['strategy_u']= {"Strategy", "ULTIMATE", "20Gでの素早い判断"},
|
||||
['strategy_e_plus']={"Strategy", "EASY+", "20Gでの素早い判断"},
|
||||
['strategy_h_plus']={"Strategy", "HARD+", "20Gでの素早い判断"},
|
||||
['strategy_u_plus']={"Strategy", "ULTIMATE+", "20Gでの素早い判断"},
|
||||
['blind_e']= {"Invisible", "HALF", "初心者用"},
|
||||
['blind_n']= {"Invisible", "ALL", "中級者用"},
|
||||
['blind_h']= {"Invisible", "SUDDEN", "上級者用"},
|
||||
['blind_l']= {"Invisible", "SUDDEN+", "プロフェッショナル用"},
|
||||
['blind_u']= {"Invisible", "?", "覚悟はいいかい?"},
|
||||
['blind_wtf']= {"Invisible", "WTF", "まだ覚悟が足りない"},
|
||||
['classic_e']= {"Classic", "EASY", "80年代を超低速で体験"},
|
||||
['classic_h']= {"Classic", "HARD", "80年代を通常速度で体験"},
|
||||
['classic_u']= {"Classic", "ULTIMATE", "80年代を超高速で体験"},
|
||||
['survivor_e']= {"Survival", "EASY", "どれだけ生き残れる?"},
|
||||
['survivor_n']= {"Survival", "NORMAL", "どれだけ生き残れる?"},
|
||||
['survivor_h']= {"Survival", "HARD", "どれだけ生き残れる?"},
|
||||
['survivor_l']= {"Survival", "LUNATIC", "どれだけ生き残れる?"},
|
||||
['survivor_u']= {"Survival", "ULTIMATE", "どれだけ生き残れる?"},
|
||||
['attacker_h']= {"Attacker", "HARD", "攻撃力を磨け!"},
|
||||
['attacker_u']= {"Attacker", "ULTIMATE", "攻撃力を磨け!"},
|
||||
['defender_n']= {"Defender", "NORMAL", "防御力を磨け!"},
|
||||
['defender_l']= {"Defender", "LUNATIC", "防御力を磨け!"},
|
||||
['dig_h']= {"Driller", "HARD", "回復力を磨け!"},
|
||||
['dig_u']= {"Driller", "ULTIMATE", "回復力を磨け!"},
|
||||
['clearRush']= {"Clear Rush", "NORMAL", "All-Spinチュートリアル!\n[開発中]"},
|
||||
['c4wtrain_n']= {"C4W Training", "NORMAL", "無限コンボ"},
|
||||
['c4wtrain_l']= {"C4W Training", "LUNATIC", "無限コンボ"},
|
||||
['pctrain_n']= {"PC Training", "NORMAL", "パフェ練習"},
|
||||
['pctrain_l']= {"PC Training", "LUNATIC", "もっと難しいパフェ練習"},
|
||||
['pc_n']= {"PC Challenge", "NORMAL", "100 Line以内にパフェをたくさん!"},
|
||||
['pc_h']= {"PC Challenge", "HARD", "100 Line以内にパフェをたくさん!"},
|
||||
['pc_l']= {"PC Challenge", "LUNATIC", "100 Line以内にパフェをたくさん!"},
|
||||
['pc_inf']= {"Inf. PC Challenge", "", "できる限りたくさんのパフェを"},
|
||||
['tech_n']= {"Tech", "NORMAL", "B2Bを繋げ続けよう!"},
|
||||
['tech_n_plus']= {"Tech", "NORMAL+", "回転入れとパフェだけ"},
|
||||
['tech_h']= {"Tech", "HARD", "B2Bを続けよう!"},
|
||||
['tech_h_plus']= {"Tech", "HARD+", "回転入れとパフェだけ"},
|
||||
['tech_l']= {"Tech", "LUNATIC", "回転入れとパフェだけ"},
|
||||
['tech_l_plus']= {"Tech", "LUNATIC+", "回転入れとパフェだけ"},
|
||||
['tech_finesse']= {"Tech", "FINESSE", "最適化!"},
|
||||
['tech_finesse_f']= {"Tech", "FINESSE+", "最適化はそのまま、普通のLine消去禁止!"},
|
||||
['tsd_e']= {"TSD Challenge", "EASY", "TSDだけ!"},
|
||||
['tsd_h']= {"TSD Challenge", "HARD", "TSDだけ!"},
|
||||
['tsd_u']= {"TSD Challenge", "ULTIMATE", "TSDだけ!"},
|
||||
['backfire_n']= {"Backfire", "NORMAL", "撃った火力が戻ってくる"},
|
||||
['backfire_h']= {"Backfire", "HARD", "撃った火力が戻ってくる"},
|
||||
['backfire_l']= {"Backfire", "LUNATIC", "撃った火力が戻ってくる"},
|
||||
['backfire_u']= {"Backfire", "ULTIMATE", "撃った火力が戻ってくる"},
|
||||
['sprintAtk']= {"Sprint", "100 Attack", "100 Line送れ!"},
|
||||
['sprintEff']= {"Sprint", "Efficiency", "40 Lineの間にできるだけ火力を出せ!"},
|
||||
['zen']= {'Zen', "200", "時間制限なしで200 Line消去"},
|
||||
['ultra']= {'Ultra', "EXTRA", "2分間のスコアアタック"},
|
||||
['infinite']= {"Infinite", "", "ただのサンドボックス"},
|
||||
['infinite_dig']= {"Infinite: Dig", "", "掘れ掘れ掘れ"},
|
||||
['marathon_inf']= {"Marathon", "INFINITE", "マラソン"},
|
||||
|
||||
['custom_clear']= {"Custom", "NORMAL"},
|
||||
['custom_puzzle']= {"Custom", "PUZZLE"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
":pog:",
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
"“Techmino.app”は、開発元を検証できないためあけません。",
|
||||
"“Techmino.app”を開くとコンピュータが破損します。ゴミ箱に入れる必要があります。",
|
||||
"\"TechminOS\"",
|
||||
"\\jezevec/\\jezevec/\\jezevec/",
|
||||
"\\osk/\\osk/\\osk/",
|
||||
"↑↑↓↓←→←→BA",
|
||||
"$include<studio.h>",
|
||||
"0next 0hold.",
|
||||
"100Line以内に23PC?",
|
||||
"1next 0hold",
|
||||
"1next 1hold!",
|
||||
"1next 6hold!",
|
||||
"20Gは全く新しい種類のゲームルールです!",
|
||||
"20PCって何?",
|
||||
"26TSDって何?",
|
||||
"2つの回転を使ってみよう、3つ使うとさらにいいです",
|
||||
"40-line Sprint WR: 14.915s by Reset_",
|
||||
"6next 1hold!",
|
||||
"6next 6hold?!",
|
||||
"低音を響かせろ!",
|
||||
"低いフレームレートはあなたの快適さを奪います",
|
||||
"複数のHoldを使ってみよう!",
|
||||
"回転がブロックにどう作用しているか気づいたかい?",
|
||||
"回転なしで40 Lineを完走できる?",
|
||||
"今、B2B2Bを見なかったかい?",
|
||||
"今日も全力で頑張ってください!",
|
||||
"警告: プログラマーアート",
|
||||
"君もGrand Masterだ!",
|
||||
"良いプレイには時間がかかります!",
|
||||
"全部で18種類のペントミノがあります",
|
||||
"全部で7種類のテトリミノがあります",
|
||||
"設定でキーコンフィグを変えられます!",
|
||||
"設定を確認しましょう!",
|
||||
"世界中の友達や敵ともうすぐ対戦できます",
|
||||
"私の心の中には確かにM@STERPIECEがあります",
|
||||
"素晴らしい! しかし次はもっと良くなる……",
|
||||
"統計からセーブフォルダを開くことができます",
|
||||
"偉大なるシステムが間もなく来ます!",
|
||||
"現代的で親しみやすいこの積みを使いこなせるかい?",
|
||||
"小さな不具合で一日を無駄にしないように!",
|
||||
"一人用モードを遊ぼう!",
|
||||
"音楽が煩わしい? 無音にすることができます",
|
||||
"英語のアプデ情報はDiscordで見られます",
|
||||
"左右移動なしで40 Lineを完走できる?",
|
||||
"ALL SPIN!",
|
||||
"Am G F G",
|
||||
"B2B2B???",
|
||||
"B2B2B2Bなんて存在するの?",
|
||||
"B2B2B2Bは存在しません",
|
||||
"B2B2B2Bは可能?",
|
||||
"Back-to-Back Techrash, 10 REN, PC!",
|
||||
"BGMやSFXの制作に協力いただける方は大歓迎です!",
|
||||
"Bridge Clearが間もなく実装されます!",
|
||||
"Color Clearが間もなく実装されます!",
|
||||
"DASとARRを低くすると、速くなるけど操作が難しくなる",
|
||||
"Hello World!",
|
||||
"I[R/H/M]Sは君を救うだろう",
|
||||
"I3とL3の2つだけはユニークなトリミノだ",
|
||||
"l-=-1",
|
||||
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
|
||||
"Lua No.1",
|
||||
"Mix Clearは間もなく実装されます!",
|
||||
"Nspire-CXのTechmino: 存在はしますが同じゲームではありません",
|
||||
"O-Spin Triple!",
|
||||
"OHHHHHHHHHHHHHH",
|
||||
"Powered by LÖVE",
|
||||
"Powered by Un…LÖVE",
|
||||
"Rank Xの条件は、上級者でも難しくなるように設定されています",
|
||||
"Split Clearが間もなく実装されます!",
|
||||
"sudo rm -rf /*",
|
||||
"Techmino rotation system(TRS)を楽しんで!",
|
||||
"Techmino楽しい!",
|
||||
"TechminoのDiscord鯖に入りましょう!",
|
||||
"Techminoは\"Technique\"と\"Tetromino\"を掛け合わせ造語です",
|
||||
"Techminoプレイヤーの未来はあなた達のものです",
|
||||
"TetroDictionary is now available in English.",
|
||||
"while(false)",
|
||||
"ZS JL T O I",
|
||||
"ゲーム内にはモード選択マップからじゃ入れない隠しモードがいくつかあります",
|
||||
"このゲームでは全てのSpinに火力補正があります",
|
||||
"このゲームのほとんどの楽曲はBeepboxを用いて作曲されました",
|
||||
"サーバーが不規則にダウンします",
|
||||
"スタッフロールの背景に流れている名前はスポンサーの名前です",
|
||||
"タブレットやスマホでもキーボードを接続できます(iOSにはそんな機能ないと思うけど)",
|
||||
"なにかアイデアがありますか? Discordで提案してください!",
|
||||
"なんだこの安っぽいUIと音楽は、呆れた",
|
||||
"バグを見つけた?GitHubのIssueに報告しよう!",
|
||||
"バグを直接見ないで!",
|
||||
"バトルロワイアルモード実装! 無料で遊べる落ちものパズルゲーム!",
|
||||
"ピースごとに出現する方向を変えられます",
|
||||
"フレームレートを上げればより快適に",
|
||||
"ヘッドフォンを付ければより快適に",
|
||||
"ほとんどのメニューアイコンはUnicode PUAにある自作Glyphsを用いて作られています",
|
||||
"マルチプレイで遊ぼう! あなたの常識が壊されるでしょう",
|
||||
"メニューをシンプルモードにした場合、イースターエッグがなくなります",
|
||||
"ローディング中! シーンチェンジの間だけじゃないです!",
|
||||
"Z推奨[01]東方プロジェクトをやってみよう!",
|
||||
"Z推奨[02]Minecraftをやってみよう!",
|
||||
"Z推奨[03]Osu!をやってみよう!",
|
||||
"Z推奨[04]Quatrackをやってみよう!",
|
||||
"Z推奨[05]Terrariaをやってみよう!",
|
||||
"Z推奨[06]Celesteをやってみよう!",
|
||||
"Z推奨[07]World of Gooをやってみよう!",
|
||||
"Z推奨[08]Orzmicをやってみよう!",
|
||||
"Z推奨[09]Puyo Puyoをやってみよう!",
|
||||
"Z推奨[10]Phigrosをやってみよう!",
|
||||
"Z推奨[11]VVVVVVをやってみよう!",
|
||||
"Z推奨[12]Ballanceをやってみよう!",
|
||||
"Z推奨[13]Zumaをやってみよう!",
|
||||
"Z推奨[14]ルービックキューブをやってみよう!",
|
||||
"Z推奨[15]15puzzleをやってみよう!",
|
||||
"Z推奨[16]Minesweeperをやってみよう!",
|
||||
{C.H,"REGRET!!"},
|
||||
{C.lP,"Secret Number: 626"},
|
||||
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
|
||||
{C.lY,"COOL!!"},
|
||||
{C.N,"Lua",C.Z," No.1"},
|
||||
{C.P,"T-spin!"},
|
||||
{C.R,"\"知的財産権関連法\""},
|
||||
{C.R,"\"DMCA濫用\""},
|
||||
{C.R,"DD",C.Z," Cannon=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"D",C.Z," Cannon"},
|
||||
{C.R,"DT",C.Z," Cannon=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"T",C.Z," Cannon"},
|
||||
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
|
||||
{C.Y,"O-Spin Triple!"},
|
||||
{C.Z,"What? ",C.lC,"X-Spin?"},
|
||||
}
|
||||
}
|
||||
@@ -198,19 +198,99 @@ return{
|
||||
-- FNNS and"/"or"Check Zictionary for more",
|
||||
},
|
||||
staff={
|
||||
"Author: MrZ E-mail: 1046101471@qq.com",
|
||||
"Powered by LÖVE",
|
||||
"ORIGINALMENTE POR MrZ",
|
||||
"E-mail: 1046101471@qq.com",
|
||||
"",
|
||||
"Programa: MrZ, Particle_G, [scdhh, FinnTenzor]",
|
||||
"Art: MrZ, Gnyar, C₂₉H₂₅N₃O₅, ScF, [旋律星萤, T0722]",
|
||||
"Music: MrZ, 柒栎流星, ERM, Trebor, C₂₉H₂₅N₃O₅, [T0722, Aether]",
|
||||
"Voice & Sound: Miya, Xiaoya, Mono, MrZ, Trebor",
|
||||
"Performance: 模电, HBM",
|
||||
"Traduzir: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
|
||||
"Programado, desenvolvido e projetado por",
|
||||
"MrZ",
|
||||
"",
|
||||
"Special Thanks:",
|
||||
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
|
||||
"Farter, Teatube, 蕴空之灵, T9972, [All test staff]",
|
||||
"Música feita com o",
|
||||
"Beepbox",
|
||||
"FL Studio",
|
||||
"FL Mobile",
|
||||
"Logic Pro X",
|
||||
"",
|
||||
"[POWERED BY LÖVE]",
|
||||
"",
|
||||
"Programa",
|
||||
"MrZ",
|
||||
"ParticleG",
|
||||
"Gompyn",
|
||||
"Trebor",
|
||||
"(scdhh)",
|
||||
"(FinnTenzor)",
|
||||
"(NOT_A_ROBOT)",
|
||||
"(user670)",
|
||||
"",
|
||||
"GitHub CI, embalagem & back-end",
|
||||
"ParticleG",
|
||||
"Trebor",
|
||||
"LawrenceLiu",
|
||||
"Gompyn",
|
||||
"flaribbit",
|
||||
"scdhh",
|
||||
"",
|
||||
"Projetos visuais, IU & UX",
|
||||
"MrZ",
|
||||
"Gnyar",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"ScF",
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"Desenhos Musicais",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
"ERM",
|
||||
"Trebor",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"(T0722)",
|
||||
"(Aether)",
|
||||
"(Hailey)",
|
||||
"",
|
||||
"Efeitos sonoros & pacotes de voz",
|
||||
"Miya",
|
||||
"Xiaoya",
|
||||
"Mono",
|
||||
"MrZ",
|
||||
"Trebor",
|
||||
"",
|
||||
"Traduções & localizações",
|
||||
"User670",
|
||||
"MattMayuga",
|
||||
"Mizu",
|
||||
"Mr.Faq",
|
||||
"ScF",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"NOT_A_ROBOT",
|
||||
"sakurw",
|
||||
"",
|
||||
"Performance",
|
||||
"Electric283",
|
||||
"Hebomai",
|
||||
"",
|
||||
"Agradecimentos especiais",
|
||||
"Flyz",
|
||||
"Big_True",
|
||||
"NOT_A_ROBOT",
|
||||
"思竣",
|
||||
"yuhao7370",
|
||||
"Farter",
|
||||
"Teatube",
|
||||
"蕴空之灵",
|
||||
"T9972",
|
||||
"No-Usernam8",
|
||||
"andrew4043",
|
||||
"smdbs-smdbs",
|
||||
"paoho",
|
||||
"Allustrate",
|
||||
"Haoran SUN",
|
||||
"Tianling Lyu",
|
||||
"huaji2369",
|
||||
"Lexitik",
|
||||
"Tourahi Anime",
|
||||
"[All other test staff]",
|
||||
"…And You!",
|
||||
},
|
||||
used=[[
|
||||
Ferramentas usadas:
|
||||
|
||||
@@ -1,293 +0,0 @@
|
||||
return{fallback='zh',
|
||||
loadText={
|
||||
loadSFX="音效",
|
||||
loadSample="乐器",
|
||||
loadVoice="语音",
|
||||
loadFont="字体",
|
||||
loadModeIcon="模式图标",
|
||||
loadMode="模式",
|
||||
loadOther="其他",
|
||||
finish="走你",
|
||||
},
|
||||
playedLong="玩很久了, 给我注意点",
|
||||
playedTooMuch="特么再敢玩眼睛瞎掉, 爬!",
|
||||
settingWarn="别乱动,小心点",
|
||||
|
||||
royale_remain="剩 $1 人",
|
||||
cmb={nil,"1连","2连","3连","4连","5连","6连","7连","8连","9连","10连!","11连!","12连!","13连!","14连!","15连!","16连!","17连!","18连!","19连!","Very 连"},
|
||||
spin="旋",
|
||||
clear={"消一","消二","消三","消四","消五","消六","消七","消八","消九","消十","消十一","消十二","消十三","消十四","消十五","消十六","消十七","消十八","消十九","消二十","消超二十"},
|
||||
cleared="",
|
||||
mini="矬",b2b="牛逼",b3b="很牛逼",
|
||||
PC="消干净了",HPC="消了半截",
|
||||
|
||||
great="不错的",
|
||||
awesome="您很强",
|
||||
almost="太舒服了",
|
||||
continue="您继续",
|
||||
maxspeed="速度封顶",
|
||||
missionFailed="任务不会看?",
|
||||
|
||||
|
||||
speedLV="速度等级",
|
||||
piece="块数",line="行数",atk="攻",eff="效",
|
||||
rpm="收每分",tsd="T2",
|
||||
grade="段位",techrash="消四",
|
||||
wave="波数",nextWave="下一波",
|
||||
combo="连击",maxcmb="最大连",
|
||||
pc="消干净了",ko="淘汰",
|
||||
|
||||
win="好了",
|
||||
lose="挂了",
|
||||
|
||||
finish="好厉害呀 真帅气呢",
|
||||
gamewin="成了",
|
||||
gameover="没了",
|
||||
|
||||
pause="歇会",
|
||||
pauseCount="歇多久了",
|
||||
finesse_ap="您",
|
||||
finesse_fc="全连",
|
||||
|
||||
switchSpawnSFX="不开音效玩个锤子",
|
||||
|
||||
noScore="没分",
|
||||
modeLocked="没解锁",
|
||||
unlockHint="B都打不到还想玩?",
|
||||
|
||||
noUsername="别闹。",
|
||||
wrongEmail="别乱输。",
|
||||
noPassword="注册会不会?",
|
||||
diffPassword="字不认识?",
|
||||
|
||||
createRoomSuccessed="创好了",
|
||||
started="开了",
|
||||
spectating="看戏中",
|
||||
|
||||
errorMsg="Techmino不想运行, 并丢下了一个蓝屏。\n我们已收集了一堆奇怪信息,你可以随时和作者对线。",
|
||||
tryAnotherBuild="自己电脑是32位还是64位都不知道?",
|
||||
|
||||
stat={
|
||||
"开了几次:",
|
||||
"玩了几把:",
|
||||
"玩了多久:",
|
||||
"按键/旋转/暂存:",
|
||||
"方块/消行/攻击:",
|
||||
"接收/抵消/上涨:",
|
||||
"挖掘/挖掘攻击:",
|
||||
"效率/挖掘效率:",
|
||||
"牛逼/很牛逼:",
|
||||
"消光/消半截:",
|
||||
"多余操作/极简率:",
|
||||
},
|
||||
|
||||
support="打钱",
|
||||
|
||||
|
||||
WidgetText={
|
||||
setting_game={
|
||||
title="改游戏",
|
||||
graphic="←改画面",
|
||||
sound="改声音→",
|
||||
|
||||
ctrl="改控制",
|
||||
key="改键位",
|
||||
touch="改触屏",
|
||||
},
|
||||
setting_video={
|
||||
title="改画面",
|
||||
sound="←改声音",
|
||||
game="改游戏→",
|
||||
|
||||
block="方块可见",
|
||||
ghost="阴影",
|
||||
center="中心",
|
||||
lineNum="行号",
|
||||
|
||||
text="招式名",
|
||||
score="跳分",
|
||||
warn="要死",
|
||||
highCam="拉镜",
|
||||
},
|
||||
setting_sound={
|
||||
title="改声音",
|
||||
|
||||
game="←改游戏",
|
||||
graphic="改画面→",
|
||||
|
||||
mainVol="总",
|
||||
bgm="曲",
|
||||
spawn="出块",
|
||||
warn="警告",
|
||||
vib="嗡嗡",
|
||||
sfxPack="啥",
|
||||
vocPack="谁",
|
||||
},
|
||||
setting_control={
|
||||
title="改控制",
|
||||
reset="重设",
|
||||
},
|
||||
setting_skin={
|
||||
skinSet="皮肤",
|
||||
title="改外观",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
basic="阳间",
|
||||
pro="阴间",
|
||||
},
|
||||
about={
|
||||
staff="游戏谁写的",
|
||||
his="黑历史",
|
||||
legals="正经人谁看啊",
|
||||
},
|
||||
register={
|
||||
password2="你懂的",
|
||||
registering="等",
|
||||
},
|
||||
app_15p={
|
||||
reset="打乱",
|
||||
color="彩",
|
||||
invis="盲",
|
||||
slide="滑动",
|
||||
pathVis="路径显示",
|
||||
revKB="键盘反向",
|
||||
},
|
||||
app_schulteG={
|
||||
rank="尺寸",
|
||||
invis="盲",
|
||||
disappear="消失",
|
||||
tapFX="动画",
|
||||
},
|
||||
app_2048={
|
||||
invis="盲",
|
||||
tapControl="点",
|
||||
skip="跳过",
|
||||
},
|
||||
app_ten={
|
||||
next="预览",
|
||||
invis="盲",
|
||||
fast="冲",
|
||||
},
|
||||
app_dtw={
|
||||
color="彩",
|
||||
bgm="曲",
|
||||
arcade="街机",
|
||||
},
|
||||
app_link={
|
||||
invis="盲",
|
||||
},
|
||||
savedata={
|
||||
export="复制走",
|
||||
import="粘贴到",
|
||||
unlock="地图",
|
||||
data="统计",
|
||||
setting="设置",
|
||||
vk="虚拟按键",
|
||||
|
||||
couldSave="云存档(测试,炸了别怪我)",
|
||||
notLogin="[不登录存个锤子]",
|
||||
upload="上传",
|
||||
download="下载",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"竞速", "10L", "消10行"},
|
||||
['sprint_20l']= {"竞速", "20L", "消20行"},
|
||||
['sprint_40l']= {"竞速", "40L", "消40行"},
|
||||
['sprint_100l']= {"竞速", "100L", "消100行"},
|
||||
['sprint_400l']= {"竞速", "400L", "消400行"},
|
||||
['sprint_1000l']= {"竞速", "1000L", "消1000行"},
|
||||
['sprintPenta']= {"竞速", "五连块", "离谱"},
|
||||
['sprintMPH']= {"竞速", "纯净", "听说你反应很快?"},
|
||||
['dig_10l']= {"挖掘", "10L", "挖10行"},
|
||||
['dig_40l']= {"挖掘", "40L", "挖40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖400行"},
|
||||
['drought_n']= {"干旱", "100L", "放轻松,简单得很"},
|
||||
['drought_l']= {"干旱+", "100L", "有趣的要来了"},
|
||||
['marathon_n']= {"马拉松", "普通", "休闲模式"},
|
||||
['marathon_h']= {"马拉松", "困难", "休闲模式"},
|
||||
['solo_e']= {"单挑", "简单", "鲨AI"},
|
||||
['solo_n']= {"单挑", "普通", "鲨AI"},
|
||||
['solo_h']= {"单挑", "困难", "鲨AI"},
|
||||
['solo_l']= {"单挑", "疯狂", "鲨AI"},
|
||||
['solo_u']= {"单挑", "极限", "鲨AI"},
|
||||
['techmino49_e']= {"49人混战", "简单", "这我岂不是乱鲨"},
|
||||
['techmino49_h']= {"49人混战", "困难", "这我岂不是乱鲨"},
|
||||
['techmino49_u']= {"49人混战", "极限", "你吃鸡率多少?"},
|
||||
['techmino99_e']= {"99人混战", "简单", "这我岂不是乱鲨"},
|
||||
['techmino99_h']= {"99人混战", "困难", "这我岂不是乱鲨"},
|
||||
['techmino99_u']= {"99人混战", "极限", "你吃鸡率多少?"},
|
||||
['round_e']= {"回合制", "简单", "下棋"},
|
||||
['round_n']= {"回合制", "普通", "下棋"},
|
||||
['round_h']= {"回合制", "困难", "下棋"},
|
||||
['round_l']= {"回合制", "疯狂", "下棋"},
|
||||
['round_u']= {"回合制", "极限", "下棋"},
|
||||
['master_n']= {"大师", "普通", "无脑20G"},
|
||||
['master_h']= {"大师", "困难", "简单20G"},
|
||||
['master_m']= {"大师", "M21", "一般20G"},
|
||||
['master_final']= {"大师", "终点", "真正的20G"},
|
||||
['master_ph']= {"大师", "虚幻", "好玩的20G"},
|
||||
['master_ex']= {"宗师", "EX", "考试20G"},
|
||||
['strategy_e']= {"策略堆叠", "简单", "有区别吗"},
|
||||
['strategy_h']= {"策略堆叠", "困难", "没区别吧"},
|
||||
['strategy_u']= {"策略堆叠", "极限", "没区别"},
|
||||
['strategy_e_plus']={"策略堆叠", "简单+", "有区别吗"},
|
||||
['strategy_h_plus']={"策略堆叠", "困难+", "没区别吧"},
|
||||
['strategy_u_plus']={"策略堆叠", "极限+", "没区别"},
|
||||
['blind_e']= {"隐形", "半隐", "谁都能玩"},
|
||||
['blind_n']= {"隐形", "全隐", "稍加练习即可"},
|
||||
['blind_h']= {"隐形", "瞬隐", "和上一个一样"},
|
||||
['blind_l']= {"隐形", "瞬隐+", "这个确实挺难的"},
|
||||
['blind_u']= {"隐形", "啊这", "你准备好了吗"},
|
||||
['blind_wtf']= {"隐形", "不会吧", "还没准备好"},
|
||||
['classic_e']= {"高速经典", "简单", "就这?简单"},
|
||||
['classic_h']= {"高速经典", "困难", "就这?一般"},
|
||||
['classic_u']= {"高速经典", "极限", "就这…算了"},
|
||||
['survivor_e']= {"生存", "简单", "这都玩不下去?不会吧"},
|
||||
['survivor_n']= {"生存", "普通", "呵,这都玩不过?"},
|
||||
['survivor_h']= {"生存", "困难", "所以呢?"},
|
||||
['survivor_l']= {"生存", "疯狂", "然后呢?"},
|
||||
['survivor_u']= {"生存", "极限", "舒服了"},
|
||||
['attacker_h']= {"进攻", "困难", "进攻练习"},
|
||||
['attacker_u']= {"进攻", "极限", "进攻练习"},
|
||||
['defender_n']= {"防守", "普通", "防守练习"},
|
||||
['defender_l']= {"防守", "疯狂", "防守练习"},
|
||||
['dig_h']= {"挖掘", "困难", "挖掘练习"},
|
||||
['dig_u']= {"挖掘", "极限", "挖掘练习"},
|
||||
['clearRush']= {"清版竞速", "普通", "舒服"},
|
||||
['c4wtrain_n']= {"C4W练习", "普通", "无 限 连 击"},
|
||||
['c4wtrain_l']= {"C4W练习", "疯狂", "无 限 连 击"},
|
||||
['pctrain_n']= {"全清训练", "普通", "随便打打"},
|
||||
['pctrain_l']= {"全清训练", "疯狂", "建议不打"},
|
||||
['pc_n']= {"全清挑战", "普通", "100行内刷PC"},
|
||||
['pc_h']= {"全清挑战", "困难", "100行内刷PC"},
|
||||
['pc_l']= {"全清挑战", "疯狂", "100行内刷PC"},
|
||||
['pc_inf']= {"无尽全清挑战", "", "你这水平还是先别玩了"},
|
||||
['tech_n']= {"科研", "普通", "禁止断B2B"},
|
||||
['tech_n_plus']= {"科研", "普通+", "仅允许spin与PC"},
|
||||
['tech_h']= {"科研", "困难", "禁止断B2B"},
|
||||
['tech_h_plus']= {"科研", "困难+", "仅允许spin与PC"},
|
||||
['tech_l']= {"科研", "疯狂", "禁止断B2B"},
|
||||
['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
|
||||
['tech_finesse']= {"科研", "极简", "强制最简操作"},
|
||||
['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
|
||||
['tsd_e']= {"TSD挑战", "简单", "刷T2"},
|
||||
['tsd_h']= {"TSD挑战", "困难", "刷T2"},
|
||||
['tsd_u']= {"TSD挑战", "极限", "刷T2"},
|
||||
['backfire_n']= {"自攻自受", "普通", "100攻击很少的,冲冲冲"},
|
||||
['backfire_h']= {"自攻自受", "困难", "你在害怕什么"},
|
||||
['backfire_l']= {"自攻自受", "疯狂", "别怂啊,打攻击呀"},
|
||||
['backfire_u']= {"自攻自受", "极限", "怎么可能会把自己玩死"},
|
||||
['sprintAtk']= {"竞速", "100攻击", "送100行"},
|
||||
['sprintEff']= {"竞速", "效率", "会打就多打点"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "2分钟刷分"},
|
||||
['infinite']= {"无尽", "", "真的有人会玩这个?"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "闲得慌就来挖"},
|
||||
['marathon_inf']= {"马拉松", "无尽", "无尽马拉松"},
|
||||
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
},
|
||||
}
|
||||
@@ -210,19 +210,98 @@ return{
|
||||
FNNS and"/"or"更多信息见小z词典",
|
||||
},
|
||||
staff={
|
||||
"作者:MrZ 邮箱:1046101471@qq.com",
|
||||
"使用LÖVE引擎",
|
||||
"原作者 MrZ",
|
||||
"邮箱: 1046101471@qq.com",
|
||||
"",
|
||||
"程序: MrZ,Particle_G,[scdhh,FinnTenzor]",
|
||||
"美术: MrZ,Gnyar,C₂₉H₂₅N₃O₅,ScF,[旋律星萤,T0722]",
|
||||
"音乐: MrZ,柒栎流星,ERM,Trebor,C₂₉H₂₅N₃O₅,[T0722,Aether]",
|
||||
"音效/语音: Miya,Xiaoya,Mono,MrZ,Trebor",
|
||||
"演出: 模电,HBM",
|
||||
"翻译: User670,MattMayuga,Mizu,Mr.Faq,ScF,C₂₉H₂₅N₃O₅,NOT_A_ROBOT",
|
||||
"程序, 开发和设计",
|
||||
"MrZ",
|
||||
"",
|
||||
"特别感谢:",
|
||||
"Flyz,Big_True,NOT_A_ROBOT,思竣,yuhao7370",
|
||||
"Farter,Teatube,蕴空之灵,T9972,[All test staff]",
|
||||
"音乐制作使用",
|
||||
"Beepbox",
|
||||
"FL Studio",
|
||||
"FL Mobile",
|
||||
"Logic Pro X",
|
||||
"",
|
||||
"[POWERED BY LÖVE]",
|
||||
"",
|
||||
"程序",
|
||||
"MrZ",
|
||||
"ParticleG",
|
||||
"Gompyn",
|
||||
"Trebor",
|
||||
"(scdhh)",
|
||||
"(FinnTenzor)",
|
||||
"(NOT_A_ROBOT)",
|
||||
"(user670)",
|
||||
"",
|
||||
"GitHub CI、封装和后端",
|
||||
"ParticleG",
|
||||
"Trebor",
|
||||
"LawrenceLiu",
|
||||
"Gompyn",
|
||||
"flaribbit",
|
||||
"schh",
|
||||
"",
|
||||
"视觉设计、UI和UX",
|
||||
"MrZ",
|
||||
"Gnyar",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"ScF",
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"音乐设计",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
"ERM",
|
||||
"Trebor",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"(T0722)",
|
||||
"(Aether)",
|
||||
"(Hailey)",
|
||||
"",
|
||||
"音效和语音包",
|
||||
"Miya",
|
||||
"Xiaoya",
|
||||
"Mono",
|
||||
"MrZ",
|
||||
"Trebor",
|
||||
"",
|
||||
"翻译和本地化",
|
||||
"User670",
|
||||
"MattMayuga",
|
||||
"Mizu",
|
||||
"Mr.Faq",
|
||||
"ScF",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"NOT_A_ROBOT",
|
||||
"",
|
||||
"Performances",
|
||||
"Electric283",
|
||||
"Hebomai",
|
||||
"",
|
||||
"特别感谢",
|
||||
"Flyz",
|
||||
"Big_True",
|
||||
"NOT_A_ROBOT",
|
||||
"思竣",
|
||||
"yuhao7370",
|
||||
"Farter",
|
||||
"Teatube",
|
||||
"蕴空之灵",
|
||||
"T9972",
|
||||
"No-Usernam8",
|
||||
"andrew4043",
|
||||
"smdbs-smdbs",
|
||||
"paoho",
|
||||
"Allustrate",
|
||||
"Haoran SUN",
|
||||
"Tianling Lyu",
|
||||
"huaji2369",
|
||||
"Lexitik",
|
||||
"Tourahi Anime",
|
||||
"[All other test staff]",
|
||||
"…And You!",
|
||||
},
|
||||
used=[[
|
||||
使用工具:
|
||||
@@ -807,8 +886,8 @@ return{
|
||||
"车万方块是一家(暴论",
|
||||
"吃键?真的吗?建议回放看看到底按没按到,按了多久",
|
||||
"凑数tip什么时候能站起来!",
|
||||
"打铁.png",
|
||||
"打铁",
|
||||
"打块多是一件美事啊",
|
||||
"打铁.mp4",
|
||||
"大概还是有人会看tip的",
|
||||
"大家认为的俄罗斯方块很可能不是你以为的俄罗斯方块,场合合适的时候可以适当提醒一下哦",
|
||||
"大满贯10连击消四全清!",
|
||||
@@ -1044,7 +1123,7 @@ return{
|
||||
"豆知识[078]为了保护玩家们的健康,本游戏有一个临时的简易防沉迷系统!(不过估计你也触发不了/笑)",
|
||||
"豆知识[079]为什么关卡那么少!因为前一模式成绩连B都没达到,再加把劲吧~",
|
||||
"豆知识[080]为数不多走向世界的国产方块游戏",
|
||||
"豆知识[081]向其他人询问练习方法最好提供自己的详细水平,最好录些视频,不然很难给出合适的建议",
|
||||
"豆知识[081]向其他人询问练习方法请说明自己的水平,最好录些视频,不然很难给出合适的建议",
|
||||
"豆知识[082]小心腱鞘炎",
|
||||
"豆知识[083]玄学研究显示,更换方块皮肤也许能帮助提升成绩",
|
||||
"豆知识[084]旋转不是变形!请尽量灵活利用顺逆时针两个旋转键",
|
||||
@@ -1076,6 +1155,7 @@ return{
|
||||
"健康小贴士[05]长期睡眠不足会引起不可逆的脑损伤(变傻)",
|
||||
"群友名言[001]“玩了Techmino之后发现打字速度变快了”",
|
||||
"群友名言[002]“我要陪伴着tech一步步成长,然后就可以疯狂的享受他”",
|
||||
"群友名言[003]“太super啦,不愧是guideline”",
|
||||
"Frt评[01]“成天被夸赞‘好玩’的”",
|
||||
"Frt评[02]“可以形成方块圈子小中心话题,同作者一起衍生一些概念与梗的”",
|
||||
"Frt评[03]“论方块的软工意义(就算这么小个范围内,各种取舍蒙混翻车现象都总会以很易懂的方式出现(”",
|
||||
@@ -1130,18 +1210,19 @@ return{
|
||||
"Z推[01]东方Project好玩!",
|
||||
"Z推[02]Minecraft好玩!",
|
||||
"Z推[03]Osu!好玩!",
|
||||
"Z推[04]Terraria好玩!",
|
||||
"Z推[05]Celeste好玩!",
|
||||
"Z推[06]World of goo好玩!",
|
||||
"Z推[07]Orzmic好玩!",
|
||||
"Z推[08]噗哟噗哟好玩!",
|
||||
"Z推[09]Phigros好玩!",
|
||||
"Z推[10]VVVVVV好玩!",
|
||||
"Z推[11]Ballance好玩!",
|
||||
"Z推[12]Zuma好玩!",
|
||||
"Z推[13]魔方好玩!",
|
||||
"Z推[14]15puzzle好玩!",
|
||||
"Z推[15]扫雷好玩!",
|
||||
"Z推[04]Quatrack好玩!",
|
||||
"Z推[05]Terraria好玩!",
|
||||
"Z推[06]Celeste好玩!",
|
||||
"Z推[07]World of goo好玩!",
|
||||
"Z推[08]Orzmic好玩!",
|
||||
"Z推[09]噗哟噗哟好玩!",
|
||||
"Z推[10]Phigros好玩!",
|
||||
"Z推[11]VVVVVV好玩!",
|
||||
"Z推[12]Ballance好玩!",
|
||||
"Z推[13]Zuma好玩!",
|
||||
"Z推[14]魔方好玩!",
|
||||
"Z推[15]15puzzle好玩!",
|
||||
"Z推[16]扫雷好玩!",
|
||||
{C.C,"<PURE ",C.P,"MEMORY>"},
|
||||
{C.H,"暂定段位:9"},
|
||||
{C.H,"REGRET!!"},
|
||||
|
||||
@@ -208,19 +208,98 @@ return{
|
||||
FNNS and"/"or"查看Zictionary以了解更多信息",
|
||||
},
|
||||
staff={
|
||||
"作者:Z先生 邮箱:1046101471@qq.com",
|
||||
"使用LÖVE引擎",
|
||||
"最初由Z先生",
|
||||
"电子邮件: 1046101471@qq.com",
|
||||
"",
|
||||
"程序: Z先生,粒子G,[呵呵,芬恩·坦佐]",
|
||||
"美术: Z先生,尼亚尔,氟化钪,蛋白激酶G抑制剂,[旋律星萤,T0722]",
|
||||
"音乐: Z先生,柒栎流星,ERM,特雷伯尔,蛋白激酶G抑制剂,[T0722,以太]",
|
||||
"音效/语音: 米娅,小亚,东西,Z先生,特雷伯尔",
|
||||
"演出: 模电,HBM",
|
||||
"翻译: 用户670,马特·马尤加,水,法克先生,氟化钪,蛋白激酶G抑制剂,不是机器人",
|
||||
"编程、开发和设计的",
|
||||
"Z先生",
|
||||
"",
|
||||
"特别感谢:",
|
||||
"飞天,大真,不是机器人,思竣,yuhao7370",
|
||||
"放屁者,茶管,蕴空之灵,T9972,[所有测试人员]",
|
||||
"使用了音乐",
|
||||
"蜂鸣器",
|
||||
"FL工作室",
|
||||
"FL移动",
|
||||
"逻辑专业X",
|
||||
"",
|
||||
"[POWERED BY LÖVE]",
|
||||
"",
|
||||
"程序",
|
||||
"Z先生",
|
||||
"粒子G",
|
||||
"皮恩",
|
||||
"特雷伯尔",
|
||||
"(呵呵)",
|
||||
"(芬恩·坦佐)",
|
||||
"(不是机器人)",
|
||||
"(用户670)",
|
||||
"",
|
||||
"集线器CI,外包装及后端",
|
||||
"粒子G",
|
||||
"特雷伯尔",
|
||||
"劳伦斯刘",
|
||||
"尼亚尔",
|
||||
"废话",
|
||||
"呵呵",
|
||||
"",
|
||||
"视觉设计,用户界面及用户体验",
|
||||
"Z先生",
|
||||
"尼亚尔",
|
||||
"蛋白激酶G抑制剂",
|
||||
"氟化钪",
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"音乐设计",
|
||||
"Z先生",
|
||||
"柒栎流星",
|
||||
"ERM",
|
||||
"特雷伯尔",
|
||||
"蛋白激酶G抑制剂",
|
||||
"(T0722)",
|
||||
"(以太)",
|
||||
"(黑利)",
|
||||
"",
|
||||
"音效和语音包",
|
||||
"米娅",
|
||||
"小亚",
|
||||
"东西",
|
||||
"Z先生",
|
||||
"特雷伯尔",
|
||||
"",
|
||||
"翻译和本土化",
|
||||
"用户670",
|
||||
"马特·马尤加",
|
||||
"水",
|
||||
"法克先生",
|
||||
"氟化钪",
|
||||
"蛋白激酶G抑制剂",
|
||||
"不是机器人",
|
||||
"",
|
||||
"性能",
|
||||
"电动283",
|
||||
"河北麦",
|
||||
"",
|
||||
"特别鸣谢",
|
||||
"飞天",
|
||||
"大真",
|
||||
"不是机器人",
|
||||
"思竣",
|
||||
"余浩7370",
|
||||
"放屁者",
|
||||
"茶管",
|
||||
"蕴空之灵",
|
||||
"T9972",
|
||||
"无用户名8",
|
||||
"安德鲁4043",
|
||||
"中小型银行-中小型银行",
|
||||
"泡霍",
|
||||
"暗示",
|
||||
"浩然太阳",
|
||||
"天灵刘",
|
||||
"滑稽2369",
|
||||
"伊提克",
|
||||
"拉希动漫",
|
||||
"[所有其他的测试人员]",
|
||||
"…和你!",
|
||||
},
|
||||
used=[[
|
||||
使用工具:
|
||||
|
||||
@@ -210,19 +210,99 @@ return{
|
||||
FNNS and"/"or"更多資訊見小z詞典"
|
||||
},
|
||||
staff={
|
||||
"作者:MrZ 電郵:1046101471@qq.com",
|
||||
"使用LÖVE引擎",
|
||||
"原作者 MrZ",
|
||||
"電郵: 1046101471@qq.com",
|
||||
"",
|
||||
"程序: MrZ,Particle_G,[scdhh,FinnTenzor]",
|
||||
"美術: MrZ,Gnyar,C₂₉H₂₅N₃O₅,ScF,[旋律星萤,T0722]",
|
||||
"音樂: MrZ,柒栎流星,ERM,Trebor,C₂₉H₂₅N₃O₅,[T0722,Aether]",
|
||||
"音效/語音: Miya,Xiaoya,Mono,MrZ,Trebor",
|
||||
"演出: 模电,HBM",
|
||||
"翻譯: User670,MattMayuga,Mizu,Mr.Faq,ScF,C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
|
||||
"程序, 開發和設計",
|
||||
"MrZ",
|
||||
"",
|
||||
"特別感謝:",
|
||||
"Flyz,Big_True,NOT_A_ROBOT,思竣,yuhao7370",
|
||||
"Farter,Teatube,蕴空之灵,T9972,[All test staff]",
|
||||
"音樂製作使用",
|
||||
"Beepbox",
|
||||
"FL Studio",
|
||||
"FL Mobile",
|
||||
"Logic Pro X",
|
||||
"",
|
||||
"[POWERED BY LÖVE]",
|
||||
"",
|
||||
"程序",
|
||||
"MrZ",
|
||||
"ParticleG",
|
||||
"Gompyn",
|
||||
"Trebor",
|
||||
"(scdhh)",
|
||||
"(FinnTenzor)",
|
||||
"(NOT_A_ROBOT)",
|
||||
"(user670)",
|
||||
"",
|
||||
"GitHub CI、包裝和後端",
|
||||
"ParticleG",
|
||||
"Trebor",
|
||||
"LawrenceLiu",
|
||||
"Gompyn",
|
||||
"flaribbit",
|
||||
"scdhh",
|
||||
"",
|
||||
"視覺設計、UI和UX",
|
||||
"MrZ",
|
||||
"Gnyar",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"ScF",
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"音樂設計",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
"ERM",
|
||||
"Trebor",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"(T0722)",
|
||||
"(Aether)",
|
||||
"(Hailey)",
|
||||
"",
|
||||
"音效和語音包",
|
||||
"Miya",
|
||||
"Xiaoya",
|
||||
"Mono",
|
||||
"MrZ",
|
||||
"Trebor",
|
||||
"",
|
||||
"翻譯和本地化",
|
||||
"User670",
|
||||
"MattMayuga",
|
||||
"Mizu",
|
||||
"Mr.Faq",
|
||||
"ScF",
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"NOT_A_ROBOT",
|
||||
"sakurw",
|
||||
"",
|
||||
"Performances",
|
||||
"Electric283",
|
||||
"Hebomai",
|
||||
"",
|
||||
"特別感謝",
|
||||
"Flyz",
|
||||
"Big_True",
|
||||
"NOT_A_ROBOT",
|
||||
"思竣",
|
||||
"yuhao7370",
|
||||
"Farter",
|
||||
"Teatube",
|
||||
"蕴空之灵",
|
||||
"T9972",
|
||||
"No-Usernam8",
|
||||
"andrew4043",
|
||||
"smdbs-smdbs",
|
||||
"paoho",
|
||||
"Allustrate",
|
||||
"Haoran SUN",
|
||||
"Tianling Lyu",
|
||||
"huaji2369",
|
||||
"Lexitik",
|
||||
"Tourahi Anime",
|
||||
"[All other test staff]",
|
||||
"…And You!",
|
||||
},
|
||||
used=[[
|
||||
使用工具:
|
||||
|
||||
@@ -86,7 +86,7 @@ local function _parseNotice(str)
|
||||
str[m:sub(1,m:find("=")-1)]=m:sub(m:find("=")+1)
|
||||
end
|
||||
end
|
||||
return str[SETTING.locale]or str[SETTING.locale:find'zh'and'zh'or'en']
|
||||
return str[SETTING.locale]or SETTING.locale:find'zh'and str.zh or str.en
|
||||
else
|
||||
return str
|
||||
end
|
||||
|
||||
@@ -223,7 +223,7 @@ function NETPLY.draw()
|
||||
gc_setLineWidth(2)
|
||||
gc_rectangle('line',0,0,p.w,p.h)
|
||||
if p.connected then
|
||||
local c=COLOR[p.mode==1 and'N'or'F']
|
||||
local c=p.mode==1 and COLOR.N or COLOR.F
|
||||
gc_setColor(c[1],c[2],c[3],.26)
|
||||
gc_rectangle('fill',0,0,p.w,p.h)
|
||||
end
|
||||
|
||||
@@ -31,6 +31,7 @@ return{
|
||||
{font=65,name="老板来两份薯条"},
|
||||
{font=65,name="[**昆]"},
|
||||
{font=65,name="[**浩]"},
|
||||
{font=65,name="sakurw"},
|
||||
|
||||
{font=25,name="八零哥"},
|
||||
{font=25,name="蕴空之灵"},
|
||||
|
||||
@@ -2683,7 +2683,6 @@ function Player:update(dt)
|
||||
_updateFX(self,dt)
|
||||
end
|
||||
function Player:revive()
|
||||
self.waiting=62
|
||||
local h=#self.field
|
||||
for _=h,1,-1 do
|
||||
FREEROW.discard(self.field[_])
|
||||
|
||||
@@ -652,6 +652,11 @@ local commands={}do
|
||||
scene='app_stopwatch',
|
||||
description="A stopwatch"
|
||||
},
|
||||
{
|
||||
code="mj",
|
||||
scene='app_mahjong',
|
||||
description="A simple mahjong game (1 player)"
|
||||
},
|
||||
{
|
||||
code="spin",
|
||||
scene='app_spin',
|
||||
|
||||
173
parts/scenes/app_mahjong.lua
Normal file
173
parts/scenes/app_mahjong.lua
Normal file
@@ -0,0 +1,173 @@
|
||||
local gc=love.graphics
|
||||
local gc_translate=gc.translate
|
||||
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
|
||||
local gc_rectangle=gc.rectangle
|
||||
local gc_print=gc.print
|
||||
|
||||
local max,min=math.max,math.min
|
||||
local ins,rem=table.insert,table.remove
|
||||
|
||||
local colorName={
|
||||
m={'一','二','三','四','五','六','七','八','九'},
|
||||
p={'①','②','③','④','⑤','⑥','⑦','⑧','⑨'},
|
||||
s={'1','2','3','4','5','6','7','8','9'},
|
||||
}
|
||||
local deck0={}
|
||||
local cardText={}
|
||||
for i=1,9 do
|
||||
for _=1,4 do
|
||||
ins(deck0,'m'..i)
|
||||
ins(deck0,'p'..i)
|
||||
ins(deck0,'s'..i)
|
||||
if i<=7 then ins(deck0,'z'..i)end
|
||||
end
|
||||
cardText['m'..i]={COLOR.lF,colorName.m[i]}
|
||||
cardText['p'..i]={COLOR.lB,colorName.p[i]}
|
||||
cardText['s'..i]={COLOR.lG,colorName.s[i]}
|
||||
end
|
||||
-- deck0[TABLE.find(deck0,'m5')]='m0'
|
||||
-- deck0[TABLE.find(deck0,'p5')]='p0'
|
||||
-- deck0[TABLE.find(deck0,'s5')]='s0'
|
||||
-- cardText['5m+']={COLOR.R,'五'}
|
||||
-- cardText['5p+']={COLOR.R,'⑤'}
|
||||
-- cardText['5s+']={COLOR.R,'5'}
|
||||
|
||||
cardText['z1']={COLOR.Z,'東'}
|
||||
cardText['z2']={COLOR.Z,'南'}
|
||||
cardText['z3']={COLOR.Z,'西'}
|
||||
cardText['z4']={COLOR.Z,'北'}
|
||||
cardText['z5']={COLOR.Z,' '}
|
||||
cardText['z6']={COLOR.G,'發'}
|
||||
cardText['z7']={COLOR.R,'中'}
|
||||
|
||||
local deck,hand,pool
|
||||
local selected
|
||||
|
||||
local function _getPoolCardArea(i)
|
||||
local row=math.floor((i-1)/10)
|
||||
local col=i-row*10
|
||||
return
|
||||
240+70*col,45+95*row,
|
||||
65,90
|
||||
end
|
||||
|
||||
local function _getHandCardArea(i)
|
||||
return
|
||||
20+70*i+(i==14 and 30 or 0),480,
|
||||
65,90
|
||||
end
|
||||
|
||||
local function _newGame()
|
||||
deck=TABLE.shift(deck0)
|
||||
hand={}
|
||||
pool={}
|
||||
for _=1,14 do ins(hand,(TABLE.popRandom(deck)))end
|
||||
table.sort(hand)
|
||||
end
|
||||
|
||||
local function _checkWin()
|
||||
if #hand==14 then
|
||||
--???
|
||||
end
|
||||
end
|
||||
|
||||
local function _throwCard()
|
||||
if hand[selected]and #pool<40 then
|
||||
ins(pool,rem(hand,selected))
|
||||
table.sort(hand)
|
||||
SFX.play('hold')
|
||||
SFX.play('lock')
|
||||
if #pool<40 then
|
||||
ins(hand,(TABLE.popRandom(deck)))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
_newGame()
|
||||
selected=false
|
||||
end
|
||||
|
||||
function scene.mouseMove(x,y)
|
||||
selected=false
|
||||
for i=1,#hand do
|
||||
local cx,cy,cw,ch=_getHandCardArea(i)
|
||||
if x>cx and x<cx+cw and y>cy and y<cy+ch then
|
||||
selected=i
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
function scene.mouseDown()
|
||||
_throwCard()
|
||||
end
|
||||
function scene.touchMove(x,y)scene.mouseMove(x,y)end
|
||||
function scene.touchDown(x,y)scene.mouseMove(x,y)end
|
||||
function scene.touchClick(x,y)scene.mouseDown(x,y)end
|
||||
function scene.keyDown(key)
|
||||
if key=='left'then
|
||||
if selected then
|
||||
selected=max(selected-1,1)
|
||||
else
|
||||
selected=1
|
||||
end
|
||||
elseif key=='right'then
|
||||
if selected then
|
||||
selected=min(selected+1,#hand)
|
||||
else
|
||||
selected=#hand
|
||||
end
|
||||
elseif key=='space'then
|
||||
_throwCard()
|
||||
elseif key=='r'then
|
||||
_newGame()
|
||||
elseif key=='return'then
|
||||
_checkWin()
|
||||
elseif key=='escape'then
|
||||
SCN.back()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
setFont(35)
|
||||
gc_setColor(COLOR.Z)
|
||||
gc_print('余: '..#deck,1060,30)
|
||||
|
||||
gc_setLineWidth(4)
|
||||
setFont(50)
|
||||
for i=1,#hand do
|
||||
local c=hand[i]
|
||||
local x,y,w,h=_getHandCardArea(i)
|
||||
if i==selected then
|
||||
gc_translate(0,-10)
|
||||
gc_setColor(1,1,1,.4)
|
||||
gc_rectangle('fill',x,y,w,h,5)
|
||||
end
|
||||
gc_setColor(COLOR.Z)
|
||||
gc_rectangle('line',x,y,w,h,5)
|
||||
gc_setColor(1,1,1)
|
||||
mStr(cardText[c],x+w/2,y+10)
|
||||
if i==selected then gc_translate(0,10)end
|
||||
end
|
||||
for i=1,#pool do
|
||||
local c=pool[i]
|
||||
local x,y,w,h=_getPoolCardArea(i)
|
||||
if selected and hand[selected]==c then
|
||||
gc_setColor(1,1,1,.4)
|
||||
gc_rectangle('fill',x,y,w,h,5)
|
||||
end
|
||||
gc_setColor(COLOR.Z)
|
||||
gc_rectangle('line',x,y,w,h,5)
|
||||
gc_setColor(1,1,1)
|
||||
mStr(cardText[c],x+w/2,y+10)
|
||||
end
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset',x=160, y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
|
||||
WIDGET.newKey{name="hu", x=1150,y=370,w=140,h=80,font=50,sound=false,fText='自摸',code=pressKey'return'},
|
||||
WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
return scene
|
||||
@@ -171,10 +171,10 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{name='reset', x=160,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'space',hideF=function()return state==0 end},
|
||||
WIDGET.newSlider{name='rank', x=130,y=250,lim=105,w=150,unit=3,show=false,font=40,disp=function()return rank-3 end,code=function(v)rank=v+3 end,hideF=function()return state>0 end},
|
||||
WIDGET.newSwitch{name='invis', x=240,y=330,lim=200,font=40,disp=function()return invis end, code=pressKey'q',hideF=function()return state==1 end},
|
||||
WIDGET.newSlider{name='rank', x=130,y=250,lim=105,w=150,axis={3,6,1},show=false,font=40,disp=function()return rank end,code=function(v)rank=v end,hideF=function()return state>0 end},
|
||||
WIDGET.newSwitch{name='invis', x=240,y=330,lim=200,font=40,disp=function()return invis end,code=pressKey'q',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='disappear',x=240,y=420,lim=200,font=40,disp=function()return disappear end,code=pressKey'w',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='tapFX', x=240,y=510,lim=200,font=40,disp=function()return tapFX end, code=pressKey'e',hideF=function()return state==1 end},
|
||||
WIDGET.newSwitch{name='tapFX', x=240,y=510,lim=200,font=40,disp=function()return tapFX end,code=pressKey'e',hideF=function()return state==1 end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
|
||||
@@ -226,10 +226,10 @@ scene.widgetList={
|
||||
|
||||
--Next & Hold
|
||||
WIDGET.newSelector{name='holdMode', x=310, y=890, w=300,color='lY',list=sList.holdMode,disp=CUSval('holdMode'),code=CUSsto('holdMode'),hideF=function()return CUSTOMENV.holdCount==0 end},
|
||||
WIDGET.newSlider{name='nextCount', x=140, y=960, lim=130,w=180,unit=6,disp=CUSval('nextCount'),code=CUSsto('nextCount')},
|
||||
WIDGET.newSlider{name='holdCount', x=140, y=1030,lim=130,w=180,unit=6,disp=CUSval('holdCount'),code=CUSsto('holdCount')},
|
||||
WIDGET.newSwitch{name='infHold', x=560, y=960, lim=200, disp=CUSval('infHold'),code=CUSrev('infHold'),hideF=function()return CUSTOMENV.holdCount==0 end},
|
||||
WIDGET.newSwitch{name='phyHold', x=560, y=1030,lim=200, disp=CUSval('phyHold'),code=CUSrev('phyHold'),hideF=function()return CUSTOMENV.holdCount==0 end},
|
||||
WIDGET.newSlider{name='nextCount', x=140, y=960, lim=130,w=180,axis={0,6,1},disp=CUSval('nextCount'),code=CUSsto('nextCount')},
|
||||
WIDGET.newSlider{name='holdCount', x=140, y=1030,lim=130,w=180,axis={0,6,1},disp=CUSval('holdCount'),code=CUSsto('holdCount')},
|
||||
WIDGET.newSwitch{name='infHold', x=560, y=960, lim=200, disp=CUSval('infHold'),code=CUSrev('infHold'),hideF=function()return CUSTOMENV.holdCount==0 end},
|
||||
WIDGET.newSwitch{name='phyHold', x=560, y=1030,lim=200, disp=CUSval('phyHold'),code=CUSrev('phyHold'),hideF=function()return CUSTOMENV.holdCount==0 end},
|
||||
|
||||
--BG & BGM
|
||||
WIDGET.newSelector{name='bg', x=840, y=1090,w=250,color='Y',list=BG.getList(),disp=CUSval('bg'),code=function(i)CUSTOMENV.bg=i BG.set(i)end},
|
||||
|
||||
@@ -61,7 +61,7 @@ local function _search()
|
||||
_clearResult()
|
||||
local first
|
||||
for i=1,#dict do
|
||||
local pos=find(dict[i].keywords,input,nil,true)
|
||||
local pos=find(dict[i].title:lower(),input,nil,true)or find(dict[i].keywords,input,nil,true)
|
||||
if pos==1 and not first then
|
||||
ins(result,1,dict[i])
|
||||
first=true
|
||||
|
||||
@@ -373,7 +373,7 @@ function scene.draw()
|
||||
if replaying or tas then
|
||||
setFont(20)
|
||||
gc_setColor(1,1,TIME()%.8>.4 and 1 or 0)
|
||||
mStr(text[replaying and'replaying'or'tasUsing'],770,6)
|
||||
mStr(replaying and text.replaying or text.tasUsing,770,6)
|
||||
gc_setColor(1,1,1,.8)
|
||||
mStr(("%s %sf"):format(repRateStrings[gameRate],PLAYERS[1].frameRun),770,31)
|
||||
end
|
||||
|
||||
@@ -7,8 +7,8 @@ local langList={
|
||||
es=" Español\n(Castellano)",
|
||||
pt="Português",
|
||||
id="Bahasa Indonesia",
|
||||
ja="日本語",
|
||||
zh_grass="机翻",
|
||||
zh_yygq="就这?",
|
||||
symbol="?????",
|
||||
}
|
||||
local languages={
|
||||
@@ -57,7 +57,7 @@ scene.widgetList={
|
||||
|
||||
WIDGET.newButton{x=637,y=210,w=346,h=100,font=40, fText=langList.pt, color='A',sound='click',code=function()_setLang('pt')end},
|
||||
WIDGET.newButton{x=637,y=329,w=346,h=100,font=40, fText=langList.symbol, color='G',sound='click',code=function()_setLang('symbol')end},
|
||||
WIDGET.newButton{x=637,y=449,w=346,h=100,font=40, fText=langList.zh_yygq, color='J',sound='click',code=function()_setLang('zh_yygq')end},
|
||||
WIDGET.newButton{x=637,y=449,w=346,h=100,font=40, fText=langList.ja, color='J',sound='click',code=function()_setLang('ja')end},
|
||||
WIDGET.newButton{x=637,y=568,w=346,h=100,font=40, fText=langList.zh_grass,color='L',sound='click',code=function()_setLang('zh_grass')end},
|
||||
|
||||
WIDGET.newButton{x=1003,y=210,w=346,h=100,font=40,fText=langList.zh, color='C',sound='click',code=function()_setLang('zh')end},
|
||||
|
||||
@@ -134,7 +134,7 @@ function scene.update(dt)
|
||||
end
|
||||
local L=scene.widgetList
|
||||
for i=1,8 do
|
||||
L[i].x=MATH.expApproach(L[i].x,(widgetX0[i]-400+(WIDGET.isFocus(L[i])and(i<5 and 100 or -100)or 0)),dt*12)
|
||||
L[i].x=MATH.expApproach(L[i].x,(widgetX0[i]-400+(WIDGET.isFocus(L[i])and(i<5 and 100 or -100)or 0)),dt*9)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ local author={
|
||||
sakura="ZUN & C₂₉H₂₅N₃O₅",
|
||||
["1980s"]="C₂₉H₂₅N₃O₅",
|
||||
malate="ZUN & C₂₉H₂₅N₃O₅",
|
||||
lounge="Hailey (cudsys) & MrZ",
|
||||
}
|
||||
|
||||
local scene={}
|
||||
@@ -124,9 +125,9 @@ scene.widgetList={
|
||||
hideF=function()return not BGM.nowPlay end
|
||||
},
|
||||
WIDGET.newSlider{name='bgm', x=760,y=80,w=400,disp=SETval('bgm'),code=function(v)SETTING.bgm=v BGM.setVol(SETTING.bgm)end},
|
||||
WIDGET.newButton{name='up', x=200,y=250,w=120,code=pressKey'up',hideF=function()return selected==1 end,font=60,fText=CHAR.key.up},
|
||||
WIDGET.newButton{name='play', x=200,y=390,w=120,code=pressKey'space',sound=false,font=65,fText=CHAR.icon.play_pause},
|
||||
WIDGET.newButton{name='down', x=200,y=530,w=120,code=pressKey'down',hideF=function()return selected==#bgmList end,font=60,fText=CHAR.key.down},
|
||||
WIDGET.newButton{name='up', x=200,y=250,w=120,sound=false,code=pressKey'up',hideF=function()return selected==1 end,font=60,fText=CHAR.key.up},
|
||||
WIDGET.newButton{name='play', x=200,y=390,w=120,sound=false,font=65,fText=CHAR.icon.play_pause,code=pressKey'space'},
|
||||
WIDGET.newButton{name='down', x=200,y=530,w=120,sound=false,code=pressKey'down',hideF=function()return selected==#bgmList end,font=60,fText=CHAR.key.down},
|
||||
WIDGET.newButton{name='sound',x=1140,y=540,w=170,h=80,font=40,code=pressKey'tab'},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
@@ -102,10 +102,10 @@ scene.widgetList={
|
||||
|
||||
--Next & Hold
|
||||
WIDGET.newSelector{name='holdMode', x=310, y=890, w=300,color='lY',list=sList.holdMode,disp=ROOMval('holdMode'),code=ROOMval('holdMode'),hideF=function()return CUSTOMENV.holdCount==0 end},
|
||||
WIDGET.newSlider{name='nextCount', x=140, y=960, lim=130,w=200,unit=6,disp=ROOMval('nextCount'),code=ROOMsto('nextCount')},
|
||||
WIDGET.newSlider{name='holdCount', x=140, y=1030,lim=130,w=200,unit=6,disp=ROOMval('holdCount'),code=ROOMsto('holdCount')},
|
||||
WIDGET.newSwitch{name='infHold', x=560, y=960, lim=200, disp=ROOMval('infHold'),code=ROOMrev('infHold'),hideF=function()return ROOMENV.holdCount==0 end},
|
||||
WIDGET.newSwitch{name='phyHold', x=560, y=1030,lim=200, disp=ROOMval('phyHold'),code=ROOMrev('phyHold'),hideF=function()return ROOMENV.holdCount==0 end},
|
||||
WIDGET.newSlider{name='nextCount', x=140, y=960, lim=130,w=200,axis={0,6,1},disp=ROOMval('nextCount'),code=ROOMsto('nextCount')},
|
||||
WIDGET.newSlider{name='holdCount', x=140, y=1030,lim=130,w=200,axis={0,6,1},disp=ROOMval('holdCount'),code=ROOMsto('holdCount')},
|
||||
WIDGET.newSwitch{name='infHold', x=560, y=960, lim=200, disp=ROOMval('infHold'),code=ROOMrev('infHold'),hideF=function()return ROOMENV.holdCount==0 end},
|
||||
WIDGET.newSwitch{name='phyHold', x=560, y=1030,lim=200, disp=ROOMval('phyHold'),code=ROOMrev('phyHold'),hideF=function()return ROOMENV.holdCount==0 end},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -30,7 +30,7 @@ function scene.sceneInit()
|
||||
|
||||
local frameLostRate=(S.frame/S.time/60-1)*100
|
||||
form={
|
||||
{COLOR.Z,STRING.time(S.time),COLOR[frameLostRate>10 and'R'or frameLostRate>3 and'Y'or'H'],(" (%.2f%%)"):format(frameLostRate)},
|
||||
{COLOR.Z,STRING.time(S.time),frameLostRate>10 and COLOR.R or frameLostRate>3 and COLOR.Y or COLOR.H,(" (%.2f%%)"):format(frameLostRate)},
|
||||
("%d/%d/%d"):format(S.key,S.rotate,S.hold),
|
||||
("%d %.2fPPS"):format(S.piece,S.piece/S.time),
|
||||
("%d(%d) %.2fLPM"):format(S.row,S.dig,S.row/S.time*60),
|
||||
|
||||
@@ -89,15 +89,15 @@ scene.widgetList={
|
||||
WIDGET.newText{name='title', x=100, y=50,lim=500,font=70,align='L'},
|
||||
WIDGET.newText{name='preview', x=520, y=610,font=40,align='R'},
|
||||
|
||||
WIDGET.newSlider{name='das', x=250, y=190,lim=230,w=600,unit=20,disp=SETval('das'), show=_sliderShow,code=SETsto('das')},
|
||||
WIDGET.newSlider{name='arr', x=250, y=260,lim=230,w=525,unit=15,disp=SETval('arr'), show=_sliderShow,code=SETsto('arr')},
|
||||
WIDGET.newSlider{name='sddas', x=250, y=330,lim=230,w=350,unit=10,disp=SETval('sddas'), show=_sliderShow,code=SETsto('sddas')},
|
||||
WIDGET.newSlider{name='sdarr', x=250, y=400,lim=230,w=140,unit=4, disp=SETval('sdarr'), show=_sliderShow,code=SETsto('sdarr')},
|
||||
WIDGET.newSlider{name='dascut', x=250, y=470,lim=230,w=600,unit=20,disp=SETval('dascut'), show=_sliderShow,code=SETsto('dascut')},
|
||||
WIDGET.newSlider{name='dropcut',x=250, y=540,lim=230,w=300,unit=10,disp=SETval('dropcut'),show=_sliderShow,code=SETsto('dropcut')},
|
||||
WIDGET.newSwitch{name='ihs', x=1100, y=260,lim=300, disp=SETval('ihs'), code=SETrev('ihs')},
|
||||
WIDGET.newSwitch{name='irs', x=1100, y=330,lim=300, disp=SETval('irs'), code=SETrev('irs')},
|
||||
WIDGET.newSwitch{name='ims', x=1100, y=400,lim=300, disp=SETval('ims'), code=SETrev('ims')},
|
||||
WIDGET.newSlider{name='das', x=250, y=190,lim=230,w=600,axis={0,20,1},disp=SETval('das'), show=_sliderShow,code=SETsto('das')},
|
||||
WIDGET.newSlider{name='arr', x=250, y=260,lim=230,w=525,axis={0,15,1},disp=SETval('arr'), show=_sliderShow,code=SETsto('arr')},
|
||||
WIDGET.newSlider{name='sddas', x=250, y=330,lim=230,w=350,axis={0,10,1},disp=SETval('sddas'), show=_sliderShow,code=SETsto('sddas')},
|
||||
WIDGET.newSlider{name='sdarr', x=250, y=400,lim=230,w=140,axis={0,4,1}, disp=SETval('sdarr'), show=_sliderShow,code=SETsto('sdarr')},
|
||||
WIDGET.newSlider{name='dascut', x=250, y=470,lim=230,w=600,axis={0,20,1},disp=SETval('dascut'), show=_sliderShow,code=SETsto('dascut')},
|
||||
WIDGET.newSlider{name='dropcut',x=250, y=540,lim=230,w=300,axis={0,10,1},disp=SETval('dropcut'),show=_sliderShow,code=SETsto('dropcut')},
|
||||
WIDGET.newSwitch{name='ihs', x=1100, y=260,lim=300, disp=SETval('ihs'), code=SETrev('ihs')},
|
||||
WIDGET.newSwitch{name='irs', x=1100, y=330,lim=300, disp=SETval('irs'), code=SETrev('irs')},
|
||||
WIDGET.newSwitch{name='ims', x=1100, y=400,lim=300, disp=SETval('ims'), code=SETrev('ims')},
|
||||
WIDGET.newButton{name='reset', x=160, y=640,w=200,h=100,color='lR',font=40,
|
||||
code=function()
|
||||
local _=SETTING
|
||||
|
||||
@@ -39,17 +39,17 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='style', x=250, y=540, w=200,h=70,font=35,code=goScene'setting_skin'},
|
||||
|
||||
WIDGET.newButton{name='ctrl', x=290, y=220, w=320,h=80,font=35,code=goScene'setting_control'},
|
||||
WIDGET.newButton{name='key', x=640, y=220, w=320,h=80,color=MOBILE and'dH',font=35, code=goScene'setting_key'},
|
||||
WIDGET.newButton{name='touch', x=990, y=220, w=320,h=80,color=not MOBILE and'dH',font=35, code=goScene'setting_touch',hideF=function()return not SETTING.VKSwitch end},
|
||||
WIDGET.newSwitch{name='showVK', x=1100, y=150, lim=400, disp=SETval('VKSwitch'), code=SETrev('VKSwitch')},
|
||||
WIDGET.newSlider{name='reTime', x=330, y=320, w=300,lim=180,unit=10,disp=SETval('reTime'), code=SETsto('reTime'),show=function(S)return(.5+S.disp()*.25).."s"end},
|
||||
WIDGET.newSelector{name='RS', x=300, y=420, w=300,color='S', disp=SETval('RS'), code=SETsto('RS'),list={'TRS','SRS','SRS_plus','SRS_X','BiRS','ARS_Z','DRS_weak','ASC','ASC_plus','C2','C2_sym','Classic','Classic_plus','None','None_plus'}},
|
||||
WIDGET.newSelector{name='menuPos',x=980, y=320, w=300,color='O', disp=SETval('menuPos'), code=SETsto('menuPos'),list={'left','middle','right'}},
|
||||
WIDGET.newSwitch{name='sysCursor',x=1060, y=400, lim=580, disp=SETval('sysCursor'),code=function()SETTING.sysCursor=not SETTING.sysCursor applySettings()end},
|
||||
WIDGET.newSwitch{name='autoPause',x=1060, y=470, lim=580, disp=SETval('autoPause'),code=SETrev('autoPause')},
|
||||
WIDGET.newSwitch{name='autoSave', x=1060, y=540, lim=580, disp=SETval('autoSave'), code=SETrev('autoSave')},
|
||||
WIDGET.newSwitch{name='autoLogin',x=960, y=610, lim=480, disp=SETval('autoLogin'),code=SETrev('autoLogin')},
|
||||
WIDGET.newSwitch{name='simpMode', x=960, y=670, lim=480, disp=SETval('simpMode'),
|
||||
WIDGET.newButton{name='key', x=640, y=220, w=320,h=80,color=MOBILE and'dH',font=35, code=goScene'setting_key'},
|
||||
WIDGET.newButton{name='touch', x=990, y=220, w=320,h=80,color=not MOBILE and'dH',font=35, code=goScene'setting_touch',hideF=function()return not SETTING.VKSwitch end},
|
||||
WIDGET.newSwitch{name='showVK', x=1100, y=150, lim=400, disp=SETval('VKSwitch'), code=SETrev('VKSwitch')},
|
||||
WIDGET.newSlider{name='reTime', x=330, y=320, w=300,lim=180,axis={.5,3,.25},disp=SETval('reTime'), code=SETsto('reTime'),show=SETval('reTime')},
|
||||
WIDGET.newSelector{name='RS', x=300, y=420, w=300,color='S', disp=SETval('RS'), code=SETsto('RS'),list={'TRS','SRS','SRS_plus','SRS_X','BiRS','ARS_Z','DRS_weak','ASC','ASC_plus','C2','C2_sym','Classic','Classic_plus','None','None_plus'}},
|
||||
WIDGET.newSelector{name='menuPos',x=980, y=320, w=300,color='O', disp=SETval('menuPos'), code=SETsto('menuPos'),list={'left','middle','right'}},
|
||||
WIDGET.newSwitch{name='sysCursor',x=1060, y=400, lim=580, disp=SETval('sysCursor'),code=function()SETTING.sysCursor=not SETTING.sysCursor applySettings()end},
|
||||
WIDGET.newSwitch{name='autoPause',x=1060, y=470, lim=580, disp=SETval('autoPause'),code=SETrev('autoPause')},
|
||||
WIDGET.newSwitch{name='autoSave', x=1060, y=540, lim=580, disp=SETval('autoSave'), code=SETrev('autoSave')},
|
||||
WIDGET.newSwitch{name='autoLogin',x=960, y=610, lim=480, disp=SETval('autoLogin'),code=SETrev('autoLogin')},
|
||||
WIDGET.newSwitch{name='simpMode', x=960, y=670, lim=480, disp=SETval('simpMode'),
|
||||
code=function()
|
||||
SETTING.simpMode=not SETTING.simpMode
|
||||
for i=1,#SCN.stack,2 do
|
||||
|
||||
@@ -188,7 +188,7 @@ function scene.draw()
|
||||
|
||||
if selected then
|
||||
gc.setLineWidth(3)
|
||||
gc.setColor(COLOR[TIME()%.26<.13 and'F'or'Y'])
|
||||
gc.setColor(TIME()%.26<.13 and COLOR.F or COLOR.Y)
|
||||
gc.rectangle('line',
|
||||
selected>10 and 860 or 240,
|
||||
selected>10 and 60*(selected-10)-50 or selected>0 and 60*selected-50 or 640,
|
||||
|
||||
@@ -84,14 +84,14 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='game', x=200, y=80,w=240,h=80,color='lC',font=35,code=swapScene('setting_game','swipeR')},
|
||||
WIDGET.newButton{name='graphic', x=1080,y=80,w=240,h=80,color='lC',font=35,code=swapScene('setting_video','swipeL')},
|
||||
|
||||
WIDGET.newSlider{name='mainVol', x=300, y=170,w=420,lim=220,color='lG',disp=SETval('mainVol'), code=function(v)SETTING.mainVol=v love.audio.setVolume(SETTING.mainVol)end},
|
||||
WIDGET.newSlider{name='bgm', x=300, y=240,w=420,lim=220,color='lG',disp=SETval('bgm'), code=function(v)SETTING.bgm=v BGM.setVol(SETTING.bgm)end},
|
||||
WIDGET.newSlider{name='sfx', x=300, y=310,w=420,lim=220,color='lC',disp=SETval('sfx'), code=function(v)SETTING.sfx=v SFX.setVol(SETTING.sfx)end, change=function()SFX.play('warn_1')end},
|
||||
WIDGET.newSlider{name='stereo', x=300, y=380,w=420,lim=220,color='lC',disp=SETval('stereo'), code=function(v)SETTING.stereo=v SFX.setStereo(SETTING.stereo)end,change=function()SFX.play('touch',1,-1)SFX.play('lock',1,1)end,hideF=function()return SETTING.sfx==0 end},
|
||||
WIDGET.newSlider{name='spawn', x=300, y=450,w=420,lim=220,color='lC',disp=SETval('sfx_spawn'), code=function(v)SETTING.sfx_spawn=v end, change=function()SFX.fplay('spawn_'..math.random(7),SETTING.sfx_spawn)end,},
|
||||
WIDGET.newSlider{name='warn', x=300, y=520,w=420,lim=220,color='lC',disp=SETval('sfx_warn'), code=function(v)SETTING.sfx_warn=v end, change=function()SFX.fplay('warn_beep',SETTING.sfx_warn)end},
|
||||
WIDGET.newSlider{name='vib', x=300, y=590,w=420,lim=220,color='lN',disp=SETval('vib'),unit=10,code=function(v)SETTING.vib=v end, change=function()if SETTING.vib>0 then VIB(SETTING.vib+2)end end},
|
||||
WIDGET.newSlider{name='voc', x=300, y=660,w=420,lim=220,color='lN',disp=SETval('voc'), code=function(v)SETTING.voc=v VOC.setVol(SETTING.voc)end, change=function()VOC.play('test')end},
|
||||
WIDGET.newSlider{name='mainVol', x=300, y=170,w=420,lim=220,color='lG',disp=SETval('mainVol'), code=function(v)SETTING.mainVol=v love.audio.setVolume(SETTING.mainVol)end},
|
||||
WIDGET.newSlider{name='bgm', x=300, y=240,w=420,lim=220,color='lG',disp=SETval('bgm'), code=function(v)SETTING.bgm=v BGM.setVol(SETTING.bgm)end},
|
||||
WIDGET.newSlider{name='sfx', x=300, y=310,w=420,lim=220,color='lC',disp=SETval('sfx'), code=function(v)SETTING.sfx=v SFX.setVol(SETTING.sfx)end, change=function()SFX.play('warn_1')end},
|
||||
WIDGET.newSlider{name='stereo', x=300, y=380,w=420,lim=220,color='lC',disp=SETval('stereo'), code=function(v)SETTING.stereo=v SFX.setStereo(SETTING.stereo)end,change=function()SFX.play('touch',1,-1)SFX.play('lock',1,1)end,hideF=function()return SETTING.sfx==0 end},
|
||||
WIDGET.newSlider{name='spawn', x=300, y=450,w=420,lim=220,color='lC',disp=SETval('sfx_spawn'), code=function(v)SETTING.sfx_spawn=v end, change=function()SFX.fplay('spawn_'..math.random(7),SETTING.sfx_spawn)end,},
|
||||
WIDGET.newSlider{name='warn', x=300, y=520,w=420,lim=220,color='lC',disp=SETval('sfx_warn'), code=function(v)SETTING.sfx_warn=v end, change=function()SFX.fplay('warn_beep',SETTING.sfx_warn)end},
|
||||
WIDGET.newSlider{name='vib', x=300, y=590,w=420,lim=220,color='lN',disp=SETval('vib'),axis={0,10,1},code=function(v)SETTING.vib=v end, change=function()if SETTING.vib>0 then VIB(SETTING.vib+2)end end},
|
||||
WIDGET.newSlider{name='voc', x=300, y=660,w=420,lim=220,color='lN',disp=SETval('voc'), code=function(v)SETTING.voc=v VOC.setVol(SETTING.voc)end, change=function()VOC.play('test')end},
|
||||
|
||||
WIDGET.newSwitch{name='autoMute', x=1150,y=180,lim=380,disp=SETval('autoMute'),code=SETrev('autoMute')},
|
||||
WIDGET.newSwitch{name='fine', x=1150,y=250,lim=380,disp=SETval('fine'),code=function()SETTING.fine=not SETTING.fine if SETTING.fine then SFX.play('finesseError',.6)end end},
|
||||
|
||||
@@ -120,7 +120,7 @@ scene.widgetList={
|
||||
WIDGET.newKey{name='load1', x=585,y=290,w=90,h=70,code=_load1,font=45,fText=CHAR.icon.loadOne},
|
||||
WIDGET.newKey{name='save2', x=695,y=290,w=90,h=70,code=_save2,font=45,fText=CHAR.icon.saveTwo},
|
||||
WIDGET.newKey{name='load2', x=805,y=290,w=90,h=70,code=_load2,font=45,fText=CHAR.icon.loadTwo},
|
||||
WIDGET.newSlider{name='size', x=440,y=370,w=460,unit=19,font=40,show="vkSize",
|
||||
WIDGET.newSlider{name='size', x=440,y=370,w=460,axis={0,19,1},font=40,show="vkSize",
|
||||
disp=function()
|
||||
return VK_ORG[selected].r/10-1
|
||||
end,
|
||||
|
||||
@@ -50,17 +50,17 @@ scene.widgetList={
|
||||
WIDGET.newSwitch{name='b19', x=580, y=560, lim=230,disp=_VKAdisp(19),code=_VKAcode(19)},
|
||||
WIDGET.newSwitch{name='b20', x=580, y=620, lim=230,disp=_VKAdisp(20),code=_VKAcode(20)},
|
||||
|
||||
WIDGET.newButton{name='norm', x=840, y=80, w=240,h=80, font=35,code=function()for i=1,20 do VK_ORG[i].ava=i<11 end end},
|
||||
WIDGET.newButton{name='pro', x=1120, y=80, w=240,h=80, font=35,code=function()for i=1,20 do VK_ORG[i].ava=true end end},
|
||||
WIDGET.newSwitch{name='icon', x=1150, y=240, lim=400, font=35,disp=SETval('VKIcon'),code=SETrev('VKIcon')},
|
||||
WIDGET.newSlider{name='sfx', x=830, y=320, lim=160,w=400, font=35,change=function()SFX.play('virtualKey',SETTING.VKSFX)end,disp=SETval('VKSFX'),code=SETsto('VKSFX')},
|
||||
WIDGET.newSlider{name='vib', x=830, y=390, lim=160,w=400,unit=6, font=35,change=function()if SETTING.vib>0 then VIB(SETTING.vib+SETTING.VKVIB)end end,disp=SETval('VKVIB'),code=SETsto('VKVIB')},
|
||||
WIDGET.newSlider{name='alpha', x=830, y=460, lim=160,w=400, font=35,disp=SETval('VKAlpha'),code=SETsto('VKAlpha')},
|
||||
WIDGET.newButton{name='norm', x=840, y=80, w=240,h=80, font=35,code=function()for i=1,20 do VK_ORG[i].ava=i<11 end end},
|
||||
WIDGET.newButton{name='pro', x=1120, y=80, w=240,h=80, font=35,code=function()for i=1,20 do VK_ORG[i].ava=true end end},
|
||||
WIDGET.newSwitch{name='icon', x=1150, y=240, lim=400, font=35,disp=SETval('VKIcon'),code=SETrev('VKIcon')},
|
||||
WIDGET.newSlider{name='sfx', x=830, y=320, lim=160,w=400, font=35,change=function()SFX.play('virtualKey',SETTING.VKSFX)end,disp=SETval('VKSFX'),code=SETsto('VKSFX')},
|
||||
WIDGET.newSlider{name='vib', x=830, y=390, lim=160,w=400,axis={0,6,1},font=35,change=function()if SETTING.vib>0 then VIB(SETTING.vib+SETTING.VKVIB)end end,disp=SETval('VKVIB'),code=SETsto('VKVIB')},
|
||||
WIDGET.newSlider{name='alpha', x=830, y=460, lim=160,w=400, font=35,disp=SETval('VKAlpha'),code=SETsto('VKAlpha')},
|
||||
|
||||
WIDGET.newSwitch{name='track', x=360, y=720, lim=250, font=35,disp=SETval('VKTrack'),code=SETrev('VKTrack')},
|
||||
WIDGET.newSwitch{name='dodge', x=800, y=720, lim=250, font=35,disp=SETval('VKDodge'),code=SETrev('VKDodge'),hideF=_notTrack},
|
||||
WIDGET.newSlider{name='tchW', x=140, y=860, w=1000, font=35,disp=SETval('VKTchW'),code=function(i)SETTING.VKTchW=i SETTING.VKCurW=math.max(SETTING.VKCurW,i)end,hideF=_notTrack},
|
||||
WIDGET.newSlider{name='curW', x=140, y=930, w=1000, font=35,disp=SETval('VKCurW'),code=function(i)SETTING.VKCurW=i SETTING.VKTchW=math.min(SETTING.VKTchW,i)end,hideF=_notTrack},
|
||||
WIDGET.newSwitch{name='track', x=360, y=720, lim=250, font=35,disp=SETval('VKTrack'),code=SETrev('VKTrack')},
|
||||
WIDGET.newSwitch{name='dodge', x=800, y=720, lim=250, font=35,disp=SETval('VKDodge'),code=SETrev('VKDodge'),hideF=_notTrack},
|
||||
WIDGET.newSlider{name='tchW', x=140, y=860, w=1000, font=35,disp=SETval('VKTchW'),code=function(i)SETTING.VKTchW=i SETTING.VKCurW=math.max(SETTING.VKCurW,i)end,hideF=_notTrack},
|
||||
WIDGET.newSlider{name='curW', x=140, y=930, w=1000, font=35,disp=SETval('VKCurW'),code=function(i)SETTING.VKCurW=i SETTING.VKTchW=math.min(SETTING.VKTchW,i)end,hideF=_notTrack},
|
||||
|
||||
WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
@@ -55,18 +55,18 @@ scene.widgetList={
|
||||
WIDGET.newSwitch{name='bagLine', x=380,y=390,lim=300,disp=SETval('bagLine'),code=SETrev('bagLine')},
|
||||
|
||||
WIDGET.newSelector{name='ghostType', x=915,y=180, w=350,list={'color','gray','colorCell','grayCell','colorLine','grayLine'},disp=SETval('ghostType'),code=SETsto('ghostType')},
|
||||
WIDGET.newSlider{name='ghost', x=740,y=240,lim=280,w=350,unit=1,disp=SETval('ghost'), show="percent",code=SETsto('ghost')},
|
||||
WIDGET.newSlider{name='center', x=740,y=300,lim=280,w=350,unit=1,disp=SETval('center'), show="percent",code=SETsto('center')},
|
||||
WIDGET.newSlider{name='grid', x=740,y=360,lim=280,w=350,unit=.4,disp=SETval('grid'), show="percent",code=SETsto('grid')},
|
||||
WIDGET.newSlider{name='lineNum', x=740,y=420,lim=280,w=350,unit=1,disp=SETval('lineNum'), show="percent",code=SETsto('lineNum')},
|
||||
WIDGET.newSlider{name='ghost', x=740,y=240,lim=280,w=350,axis={0,1},disp=SETval('ghost'), show="percent",code=SETsto('ghost')},
|
||||
WIDGET.newSlider{name='center', x=740,y=300,lim=280,w=350,axis={0,1},disp=SETval('center'), show="percent",code=SETsto('center')},
|
||||
WIDGET.newSlider{name='grid', x=740,y=360,lim=280,w=350,axis={0,.4},disp=SETval('grid'), show="percent",code=SETsto('grid')},
|
||||
WIDGET.newSlider{name='lineNum', x=740,y=420,lim=280,w=350,axis={0,1},disp=SETval('lineNum'), show="percent",code=SETsto('lineNum')},
|
||||
|
||||
WIDGET.newSlider{name='lockFX', x=330,y=460,lim=280,w=540,unit=5,disp=SETval('lockFX'), code=SETsto('lockFX')},
|
||||
WIDGET.newSlider{name='dropFX', x=330,y=520,lim=280,w=540,unit=5,disp=SETval('dropFX'), code=SETsto('dropFX')},
|
||||
WIDGET.newSlider{name='moveFX', x=330,y=580,lim=280,w=540,unit=5,disp=SETval('moveFX'), code=SETsto('moveFX')},
|
||||
WIDGET.newSlider{name='clearFX', x=330,y=640,lim=280,w=540,unit=5,disp=SETval('clearFX'), code=SETsto('clearFX')},
|
||||
WIDGET.newSlider{name='splashFX', x=330,y=700,lim=280,w=540,unit=5,disp=SETval('splashFX'), code=SETsto('splashFX')},
|
||||
WIDGET.newSlider{name='shakeFX', x=330,y=760,lim=280,w=540,unit=5,disp=SETval('shakeFX'), code=SETsto('shakeFX')},
|
||||
WIDGET.newSlider{name='atkFX', x=330,y=820,lim=280,w=540,unit=5,disp=SETval('atkFX'), code=SETsto('atkFX')},
|
||||
WIDGET.newSlider{name='lockFX', x=330,y=460,lim=280,w=540,axis={0,5,1},disp=SETval('lockFX'), code=SETsto('lockFX')},
|
||||
WIDGET.newSlider{name='dropFX', x=330,y=520,lim=280,w=540,axis={0,5,1},disp=SETval('dropFX'), code=SETsto('dropFX')},
|
||||
WIDGET.newSlider{name='moveFX', x=330,y=580,lim=280,w=540,axis={0,5,1},disp=SETval('moveFX'), code=SETsto('moveFX')},
|
||||
WIDGET.newSlider{name='clearFX', x=330,y=640,lim=280,w=540,axis={0,5,1},disp=SETval('clearFX'), code=SETsto('clearFX')},
|
||||
WIDGET.newSlider{name='splashFX', x=330,y=700,lim=280,w=540,axis={0,5,1},disp=SETval('splashFX'),code=SETsto('splashFX')},
|
||||
WIDGET.newSlider{name='shakeFX', x=330,y=760,lim=280,w=540,axis={0,5,1},disp=SETval('shakeFX'), code=SETsto('shakeFX')},
|
||||
WIDGET.newSlider{name='atkFX', x=330,y=820,lim=280,w=540,axis={0,5,1},disp=SETval('atkFX'), code=SETsto('atkFX')},
|
||||
|
||||
WIDGET.newSelector{name='frame', x=400,y=890,lim=280,w=460,list={8,10,13,17,22,29,37,47,62,80,100},disp=SETval('frameMul'),code=function(v)SETTING.frameMul=v;Z.setFrameMul(SETTING.frameMul)end},
|
||||
WIDGET.newSwitch{name='FTlock', x=950,y=890,lim=290,disp=SETval('FTLock'), code=SETrev('FTLock')},
|
||||
@@ -97,7 +97,7 @@ scene.widgetList={
|
||||
end
|
||||
},
|
||||
WIDGET.newSlider{name='bgAlpha', x=1020,y=1430,w=200,
|
||||
unit=.8,disp=SETval('bgAlpha'),
|
||||
axis={0,.8},disp=SETval('bgAlpha'),
|
||||
code=function(v)SETTING.bgAlpha=v BG.send(v)end,
|
||||
hideF=function()return SETTING.bg=='on'end
|
||||
},
|
||||
|
||||
@@ -12,18 +12,18 @@ local counter
|
||||
|
||||
function scene.sceneInit()
|
||||
time=0
|
||||
v=12
|
||||
v=22.6
|
||||
BG.set()
|
||||
names={}
|
||||
counter=26
|
||||
end
|
||||
|
||||
function scene.mouseDown(x,y)
|
||||
local T=40*math.min(time,45)
|
||||
local T=40*math.min(time,185)
|
||||
if x>330 and x<950 then
|
||||
if math.abs(y-800+T)<70 then
|
||||
if math.abs(y-900+T)<70 then
|
||||
loadGame('sprintLock',true)
|
||||
elseif math.abs(y-2160+T)<70 then
|
||||
elseif math.abs(y-7770+T)<70 then
|
||||
loadGame('sprintFix',true)
|
||||
end
|
||||
end
|
||||
@@ -35,16 +35,16 @@ function scene.keyDown(key)
|
||||
loadGame('sprintLock',true)
|
||||
elseif key=='f'then
|
||||
loadGame('sprintFix',true)
|
||||
else
|
||||
return true
|
||||
elseif key=='escape'then
|
||||
SCN.back()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.update(dt)
|
||||
if(kb.isDown('space','return')or tc.getTouches()[1])and v<6.26 then
|
||||
v=v+.26
|
||||
elseif v>1 then
|
||||
v=v-.16
|
||||
if(kb.isDown('space','return')or tc.getTouches()[1])and v<16.2 then
|
||||
v=v+.42
|
||||
elseif v>3.55 then
|
||||
v=v-.42
|
||||
end
|
||||
time=time+v*dt
|
||||
counter=counter-1
|
||||
@@ -79,17 +79,17 @@ function scene.draw()
|
||||
end
|
||||
|
||||
gc.replaceTransform(SCR.xOy)
|
||||
local T=40*math.min(time,45)
|
||||
gc.setColor(.97,.97,.97,45-math.min(time,45))
|
||||
local T=40*math.min(time,185)
|
||||
gc.setColor(.97,.97,.97,185-math.min(time,185))
|
||||
local L=text.staff
|
||||
setFont(40)
|
||||
for i=1,#L do
|
||||
mStr(L[i],640,800+70*i-T)
|
||||
mStr(L[i],640,950+70*i-T)
|
||||
end
|
||||
gc.setColor(1,1,1)
|
||||
mDraw(TEXTURE.title_color,640,800-T,nil,.6)
|
||||
mDraw(TEXTURE.title,640,2160-T,nil,.6)
|
||||
if time>50 then
|
||||
mDraw(TEXTURE.title_color,640,900-T,nil,.6)
|
||||
mDraw(TEXTURE.title,640,7770-T,nil,.6)
|
||||
if time>190 then
|
||||
gc.print("CLICK ME →",50,550,-.5)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -17,28 +17,35 @@ return[=[
|
||||
全新模式选择界面(未完善,未来会增加更多便利功能)
|
||||
新皮肤:pixel(by C₂₉H₂₅N₃O₅)
|
||||
新语言:Bahasa Indonesia(by NOT_A_ROBOT)
|
||||
新小程序:Stopwatch
|
||||
新语言:日本語(by sakurw)
|
||||
新小程序:Stopwatch, Mahjong(无和牌检测)
|
||||
新BGM:lounge(暂未使用, by Hailey (cudsys) & MrZ)
|
||||
改动:
|
||||
修改选择模式音效
|
||||
优化皮肤设置页面交互效果
|
||||
移除yygq语言
|
||||
重做staff表
|
||||
换新miya立绘,给不同立绘添加不同点击动画
|
||||
由于一些无关紧要的小原因暂时移除一个语音包
|
||||
略微降低master-h模式骨块出现后的难度
|
||||
TRS的N/H添加一个踢墙
|
||||
X块的默认色改为黄色
|
||||
重做关于页面,微调设置菜单
|
||||
TRS的N/H添加一个踢墙
|
||||
词条标题必定可以被搜索
|
||||
重新编辑+裁剪部分音效
|
||||
X块的默认色改为黄色
|
||||
微调全局颜色表
|
||||
修改一行HPC的判定
|
||||
前两个TSD增加一点重力
|
||||
混战模式AI攻击目标稍微正常一些
|
||||
混战模式AI攻击目标正常一些
|
||||
两个有颜色的节日主题颜色浅一些
|
||||
代码:
|
||||
框架更加独立
|
||||
调整帧率控制算法
|
||||
BGM模块允许瞬启停
|
||||
SFX模块立体声优化
|
||||
升级主循环帧率控制
|
||||
框架更加可独立
|
||||
BGM模块升级
|
||||
控件模块优化
|
||||
修复:
|
||||
BGM模块资源管理问题导致的一些音频bug #557
|
||||
自定义场地界面按超过第三个的鼠标键会报错
|
||||
经典模式h和u难度没有干旱计数器 #546
|
||||
自定义场地16号色的方块名位置显示错误
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
return{
|
||||
["apkCode"]=423,
|
||||
["apkCode"]=424,
|
||||
["code"]=1701,
|
||||
["string"]="V0.17.1",
|
||||
["room"]="ver A-2",
|
||||
|
||||
Reference in New Issue
Block a user