Compare commits

..

28 Commits

Author SHA1 Message Date
ParticleG
63da1b5585 - Add logs to upload-artifact 2021-11-08 04:37:22 +08:00
ParticleG
929be4faf0 - Test Windows with curl 2021-11-08 04:11:04 +08:00
MrZ626
59a5b52993 整理代码 2021-11-08 03:08:42 +08:00
ParticleG
c412e07153 - Add Upload Action 2021-11-08 02:48:38 +08:00
MrZ626
252f19c6df 进入newRoom菜单时不会试图修改背景和bgm 2021-11-07 22:09:22 +08:00
MrZ626
8264fdd4bf 修改更新历史和build号 2021-11-07 21:27:39 +08:00
MrZ626
dfd28f2f10 只在更新后触发自动转换以旧版本模式名存储的数据文件 2021-11-07 21:19:49 +08:00
MrZ626
5fc1257e58 颜色表改用hsv生成 2021-11-07 17:44:17 +08:00
MrZ626
5c39765f71 微调词典
微调两个小程序
整理代码
2021-11-07 17:44:13 +08:00
MrZ626
ca92622d5d 微调中文词典两个词条 2021-11-07 12:28:26 +08:00
MrZ626
e28902bc97 无尽马拉松的are每300行减小一次,line are每100行减小一次 2021-11-07 05:42:03 +08:00
MrZ626
d228809a53 无尽马拉松添加1700行的终点 2021-11-07 05:28:08 +08:00
MrZ626
60f8a22dd5 微调排行榜字体大小 2021-11-07 05:20:58 +08:00
MrZ626
db4ae56990 无尽马拉松添加排行榜 2021-11-07 05:19:12 +08:00
MrZ626
e95288b171 修改更新历史
整理代码
2021-11-07 05:00:41 +08:00
MrZ626
2511555eb0 调整无尽马拉松的难度曲线 2021-11-07 04:58:37 +08:00
Not-A-Normal-Robot
4c4f01cb95 Decrease lock delay when level up above lvl20 2021-11-07 04:55:02 +08:00
Not-A-Normal-Robot
7177118f34 Added Infinite Marathon 2021-11-07 04:55:02 +08:00
MrZ626
a6d5c4a1bf 修改更新历史 2021-11-07 04:02:40 +08:00
MrZ626
73a828d73a 修改mph模式的bgm 2021-11-07 04:02:22 +08:00
MrZ626
a7df4d6aa7 新模式:竞速-效率 2021-11-07 04:02:12 +08:00
MrZ626
7fe4802887 修复超级消除结算时分数计算变量写错导致报错 2021-11-07 01:49:19 +08:00
MrZ626
7eac341b9a move音效在方块因重力或旋转触地时也会播放,而不只是移动后
move音效名改为touch
2021-11-07 01:41:29 +08:00
MrZ626
1fa02a18b2 修改更新历史 2021-11-06 20:57:30 +08:00
MrZ626
b15cb64681 修正pr的一个符号错误 2021-11-06 20:53:45 +08:00
C₂₉H₂₅N₃O₅
bf345c8655 Changed the font and CN tips (#433)
* 补全英文词典翻译

* 大改字体

- 西文部分采用IBM Plex
- 全角标点样式采用西文样式
- 添加类Plex的IPA符号

* 微调中文tips

* 更新 Legals

* 修正一个语法错误
2021-11-06 19:10:44 +08:00
C₂₉H₂₅N₃O₅
cbdb15d658 补全英文词典翻译 (#431) 2021-11-06 04:21:44 +08:00
MrZ626
8b4504bfa0 新BGM:1989(用于几个经典模式)
重新安排一些模式的BGM
2021-11-06 04:05:08 +08:00
161 changed files with 639 additions and 291 deletions

View File

@@ -19,9 +19,6 @@ inputs:
runs: runs:
using: "composite" using: "composite"
steps: steps:
- uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: Install Webdav 4 - name: Install Webdav 4
shell: bash shell: bash
run: | run: |
@@ -37,7 +34,7 @@ runs:
auth=("${{ inputs.WEBDAV_USERNAME }}", "${{ inputs.WEBDAV_PASSWORD }}"), auth=("${{ inputs.WEBDAV_USERNAME }}", "${{ inputs.WEBDAV_PASSWORD }}"),
timeout=None, timeout=None,
) )
if '${{ inputs.ARTIFACT_TYPE }}' == 'release': if '${{ inputs.ARTIFACT_TYPE }}' == 'release'
print('Removing previous ${{ inputs.ARTIFACT_PLATFORM }} release file...') print('Removing previous ${{ inputs.ARTIFACT_PLATFORM }} release file...')
for file in client.ls('Techmino distribution'): for file in client.ls('Techmino distribution'):
if re.search(r'(Techmino_a[0-9]+\.[0-9]+\.[0-9]_${{ inputs.ARTIFACT_PLATFORM }}.*)', file['name']): if re.search(r'(Techmino_a[0-9]+\.[0-9]+\.[0-9]_${{ inputs.ARTIFACT_PLATFORM }}.*)', file['name']):

View File

@@ -198,7 +198,7 @@ jobs:
- name: Pack Techmino - name: Pack Techmino
run: mv Techmino.ipa Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_iOS.ipa run: mv Techmino.ipa Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_iOS.ipa
- name: Upload artifact to server - name: Upload artifact to server
uses: ./.github/actions/upload-artifact uses: ./.github/actions/upload-artifacts
with: with:
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }} WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }} WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}

View File

@@ -1,6 +1,6 @@
local abs=math.abs local abs=math.abs
local function hsv(h,s,v,a) local function hsv(h,s,v,a)
if s<=0 then return v,v,v,a end if s<=0 then return v,v,v end
h=h*6 h=h*6
local c=v*s local c=v*s
local x=abs((h-1)%2-1)*c local x=abs((h-1)%2-1)*c
@@ -16,62 +16,62 @@ end
local COLOR={ local COLOR={
hsv=hsv, hsv=hsv,
red= {hsv(0.00, 0.89, 0.91)}, red= {hsv(0, .85,.85)},
fire= {hsv(0.04, 0.93, 0.94)}, fire= {hsv(0.0625,.85,.85)},
orange= {hsv(0.09, 0.99, 0.96)}, orange= {hsv(0.125, .85,.85)},
yellow= {hsv(0.16, 0.82, 0.90)}, yellow= {hsv(0.1875,.85,.85)},
lime= {hsv(0.18, 0.89, 0.88)}, lime= {hsv(0.25, .85,.85)},
jade= {hsv(0.23, 1.00, 0.82)}, jade= {hsv(0.3125,.85,.85)},
green= {hsv(0.33, 1.00, 0.81)}, green= {hsv(0.375, .85,.85)},
aqua= {hsv(0.48, 1.00, 0.74)}, aqua= {hsv(0.4375,.85,.85)},
cyan= {hsv(0.53, 1.00, 0.88)}, cyan= {hsv(0.5, .85,.85)},
navy= {hsv(0.56, 1.00, 1.00)}, navy= {hsv(0.5625,.85,.85)},
sea= {hsv(0.61, 1.00, 1.00)}, sea= {hsv(0.625, .85,.85)},
blue= {hsv(0.64, 1.00, 0.95)}, blue= {hsv(0.6875,.85,.85)},
violet= {hsv(0.73, 1.00, 0.91)}, violet= {hsv(0.75, .85,.85)},
purple= {hsv(0.80, 1.00, 0.81)}, purple= {hsv(0.8125,.85,.85)},
magenta= {hsv(0.86, 1.00, 0.78)}, magenta= {hsv(0.875, .85,.85)},
wine= {hsv(0.94, 0.96, 0.91)}, wine= {hsv(0.9375,.85,.85)},
lRed= {hsv(0.00, 0.38, 0.93)}, lRed= {hsv(0, .5,.95)},
lFire= {hsv(0.04, 0.45, 0.91)}, lFire= {hsv(0.0625,.5,.95)},
lOrange= {hsv(0.10, 0.53, 0.92)}, lOrange= {hsv(0.125, .5,.95)},
lYellow= {hsv(0.15, 0.61, 0.95)}, lYellow= {hsv(0.1875,.5,.95)},
lLime= {hsv(0.19, 0.66, 0.92)}, lLime= {hsv(0.25, .5,.95)},
lJade= {hsv(0.24, 0.56, 0.90)}, lJade= {hsv(0.3125,.5,.95)},
lGreen= {hsv(0.34, 0.49, 0.89)}, lGreen= {hsv(0.375, .5,.95)},
lAqua= {hsv(0.49, 0.59, 0.85)}, lAqua= {hsv(0.4375,.5,.95)},
lCyan= {hsv(0.51, 0.77, 0.88)}, lCyan= {hsv(0.5, .5,.95)},
lNavy= {hsv(0.54, 0.80, 0.95)}, lNavy= {hsv(0.5625,.5,.95)},
lSea= {hsv(0.56, 0.72, 0.97)}, lSea= {hsv(0.625, .5,.95)},
lBlue= {hsv(0.64, 0.44, 0.96)}, lBlue= {hsv(0.6875,.5,.95)},
lViolet= {hsv(0.73, 0.47, 0.95)}, lViolet= {hsv(0.75, .5,.95)},
lPurple= {hsv(0.80, 0.62, 0.89)}, lPurple= {hsv(0.8125,.5,.95)},
lMagenta= {hsv(0.86, 0.61, 0.89)}, lMagenta={hsv(0.875, .5,.95)},
lWine= {hsv(0.93, 0.57, 0.92)}, lWine= {hsv(0.9375,.5,.95)},
dRed= {hsv(0.00, 0.80, 0.48)}, dRed= {hsv(0, .9,.5)},
dFire= {hsv(0.04, 0.80, 0.34)}, dFire= {hsv(0.0625,.9,.5)},
dOrange= {hsv(0.07, 0.80, 0.39)}, dOrange= {hsv(0.125, .9,.5)},
dYellow= {hsv(0.11, 0.80, 0.37)}, dYellow= {hsv(0.1875,.9,.5)},
dLime= {hsv(0.17, 0.80, 0.26)}, dLime= {hsv(0.25, .9,.5)},
dJade= {hsv(0.31, 0.80, 0.27)}, dJade= {hsv(0.3125,.9,.5)},
dGreen= {hsv(0.33, 0.80, 0.26)}, dGreen= {hsv(0.375, .9,.5)},
dAqua= {hsv(0.47, 0.80, 0.23)}, dAqua= {hsv(0.4375,.9,.5)},
dCyan= {hsv(0.50, 0.80, 0.30)}, dCyan= {hsv(0.5, .9,.5)},
dNavy= {hsv(0.59, 0.80, 0.42)}, dNavy= {hsv(0.5625,.9,.5)},
dSea= {hsv(0.64, 0.80, 0.40)}, dSea= {hsv(0.625, .9,.5)},
dBlue= {hsv(0.67, 0.80, 0.34)}, dBlue= {hsv(0.6875,.9,.5)},
dViolet= {hsv(0.71, 0.80, 0.35)}, dViolet= {hsv(0.75, .9,.5)},
dPurple= {hsv(0.76, 0.80, 0.32)}, dPurple= {hsv(0.8125,.9,.5)},
dMagenta= {hsv(0.87, 0.80, 0.28)}, dMagenta={hsv(0.875, .9,.5)},
dWine= {hsv(0.92, 0.80, 0.28)}, dWine= {hsv(0.9375,.9,.5)},
black= {hsv(0.04, 0.04, 0.14)}, black= {hsv(0,0,.05)},
dGray= {hsv(0.02, 0.05, 0.44)}, dGray= {hsv(0,0,0.3)},
gray= {hsv(0.02, 0.05, 0.65)}, gray= {hsv(0,0,0.6)},
lGray= {hsv(0.02, 0.06, 0.86)}, lGray= {hsv(0,0,0.8)},
white= {hsv(0.01, 0.02, 0.99)}, white= {hsv(0,0,.97)},
} }
for k,v in next,{ for k,v in next,{
R='red', F='fire', O='orange', Y='yellow', L='lime', J='jade', G='green', A='aqua', C='cyan', N='navy', S='sea', B='blue', V='violet', P='purple', M='magenta', W='wine', R='red', F='fire', O='orange', Y='yellow', L='lime', J='jade', G='green', A='aqua', C='cyan', N='navy', S='sea', B='blue', V='violet', P='purple', M='magenta', W='wine',

View File

@@ -622,8 +622,9 @@ function love.run()
--Left-down infos --Left-down infos
gc_setColor(devColor[devMode]) gc_setColor(devColor[devMode])
gc_print("MEM "..gcinfo(),safeX+5,-40) gc_print("MEM "..gcinfo(),safeX+5,-40)
gc_print("Tasks "..TASK.getCount(),safeX+5,-60) gc_print("Lines "..FREEROW.getCount(),safeX+5,-60)
gc_print("Voices "..VOC.getQueueCount(),safeX+5,-80) gc_print("Tasks "..TASK.getCount(),safeX+5,-80)
gc_print("Voices "..VOC.getQueueCount(),safeX+5,-100)
--Update & draw frame time --Update & draw frame time
table.insert(frameTimeList,1,dt)table.remove(frameTimeList,126) table.insert(frameTimeList,1,dt)table.remove(frameTimeList,126)

View File

@@ -1,5 +1,4 @@
local type,rem=type,table.remove local type,rem=type,table.remove
local rnd=math.random
local sfxList={} local sfxList={}
local packSetting={} local packSetting={}
@@ -56,14 +55,14 @@ function SFX.loadSample(pack)
assert(type(pack)=='table',"Usage: SFX.loadsample([table])") assert(type(pack)=='table',"Usage: SFX.loadsample([table])")
assert(pack.name,"No field: name") assert(pack.name,"No field: name")
assert(pack.path,"No field: path") assert(pack.path,"No field: path")
packSetting[pack.name]={
base=(_getTuneHeight(pack.base)or 37)-1,
}
local num=1 local num=1
while love.filesystem.getInfo(pack.path..'/'..num..'.ogg')do while love.filesystem.getInfo(pack.path..'/'..num..'.ogg')do
Sources[pack.name..num]={love.audio.newSource(pack.path..'/'..num..'.ogg','static')} Sources[pack.name..num]={love.audio.newSource(pack.path..'/'..num..'.ogg','static')}
num=num+1 num=num+1
end end
local base=(_getTuneHeight(pack.base)or 37)-1
local top=base+num-1
packSetting[pack.name]={base=base,top=top}
LOG((num-1).." "..pack.name.." samples loaded") LOG((num-1).." "..pack.name.." samples loaded")
end end
@@ -88,21 +87,14 @@ function SFX.playSample(pack,...)--vol-2, sampSet1, vol-3, sampSet2, vol-1
if type(arg[i])=='number'then if type(arg[i])=='number'then
vol=arg[i] vol=arg[i]
else else
local base=packSetting[pack].base local tune=arg[i]
local top=packSetting[pack].top tune=_getTuneHeight(tune)-packSetting[pack].base
local tune=_getTuneHeight(arg[i])--Absolute tune in number SFX.play(pack..tune,vol)
local playTune=tune+rnd(-2,2)
if playTune<base then--Too low notes
playTune=base
elseif playTune>top then--Too high notes
playTune=top
end
SFX.play(pack..playTune-base,vol,nil,tune-playTune)
end end
end end
end end
end end
function SFX.play(name,vol,pos,pitch) function SFX.play(name,vol,pos)
if volume==0 or vol==0 then return end if volume==0 or vol==0 then return end
local S=Sources[name]--Source list local S=Sources[name]--Source list
if not S then return end if not S then return end
@@ -125,7 +117,6 @@ function SFX.play(name,vol,pos,pitch)
end end
end end
S:setVolume(((vol or 1)*volume)^1.626) S:setVolume(((vol or 1)*volume)^1.626)
S:setPitch(pitch and 1.0594630943592953^pitch or 1)
S:play() S:play()
end end
function SFX.fplay(name,vol,pos) function SFX.fplay(name,vol,pos)

View File

@@ -2,7 +2,11 @@
TECHMINO and "26F Studio" are trademarks of 26F Studio. TECHMINO and "26F Studio" are trademarks of 26F Studio.
The TECHMINO game and source code are under a GNU Lesser General Public License Version 3. The TECHMINO game and source code are under a GNU Lesser General Public License Version 3.
"Tetris" is the registered trademark of The Tetris Holding, LLC, licensed to The Tetris Company, Inc. TECHMINO is not a fan game of Tetris. TECHMINO and 26F Studio are not affiliated with Tetris Holding, LLC or The Tetris Company, Inc. in any way.
TECHMINO is not a fan game of Tetris. TECHMINO and 26F Studio are not affiliated with Tetris Holding, LLC or The Tetris Company, Inc. in any way.
"Tetris" is the registered trademark of The Tetris Holding, LLC, licensed to The Tetris Company, Inc.
Powered by LÖVE, © 2006-2021 LÖVE Development Team. Powered by LÖVE, © 2006-2021 LÖVE Development Team.
@@ -17,7 +21,7 @@ The Apple logo, "Apple Inc.," iOS, iPadOS, macOS, iPhone, and Mac are registered
"Windows", the Windows logo, "Xbox", Xbox logo, and "Microsoft" are registered trademarks of Microsoft Corporation in the United States of America and other countries or regions. "Windows", the Windows logo, "Xbox", Xbox logo, and "Microsoft" are registered trademarks of Microsoft Corporation in the United States of America and other countries or regions.
Source Han Sans is copyrighted by Adobe Inc. Source Han Sans and Abode are registered trademarks of Adobe Inc. in United States and other countries or regions. Source Han Sans is licensed under the SIL Open Font License. Alibaba Sans is copyrighted by Alibaba Group Holding Limited. Alibaba is a trademark of Alibaba Group Holding Limited in the Peoples Republic of China and other countries or regions.
IBM Plex is copyrighted by the International Business Machines Corporation. IBM and IBM Plex are trademarks of IBM Corp, registered in many jurisdictions worldwide. IBM Plex is licensed under the SIL Open Font License. IBM Plex is copyrighted by the International Business Machines Corporation. IBM and IBM Plex are trademarks of IBM Corp, registered in many jurisdictions worldwide. IBM Plex is licensed under the SIL Open Font License.
@@ -46,5 +50,5 @@ Linux is a registered trademark of Linus Torvalds.
Touhou Project © Team Shanghai Alice 2002-2021. Touhou Project © Team Shanghai Alice 2002-2021.
All other trademarks are the properties of their respective owners.
All other trademarks are the properties of their respective owners.

View File

@@ -90,7 +90,7 @@ for _,v in next,fs.getDirectoryItems('parts/shaders')do
end end
end end
LINE= require'parts.line' FREEROW= require'parts.freeRow'
DATA= require'parts.data' DATA= require'parts.data'
TEXTURE= require'parts.texture' TEXTURE= require'parts.texture'
@@ -104,12 +104,6 @@ PLY= require'parts.player'
NETPLY= require'parts.netPlayer' NETPLY= require'parts.netPlayer'
MODES= require'parts.modes' MODES= require'parts.modes'
setmetatable(TEXTURE,{__index=function(self,k)
MES.new('warn',"No texture called: "..k)
self[k]=love.graphics.newCanvas(1,1)
return self[k]
end})
table.insert(_LOADTIMELIST_,("Load Parts: %.3fs"):format(TIME()-_LOADTIME_)) table.insert(_LOADTIMELIST_,("Load Parts: %.3fs"):format(TIME()-_LOADTIME_))
--Init Zframework --Init Zframework
@@ -466,14 +460,6 @@ do
fs.remove('record/stack_40l.rec') fs.remove('record/stack_40l.rec')
fs.remove('record/stack_100l.rec') fs.remove('record/stack_100l.rec')
end end
if RANKS.rhythm_e then
RANKS.rhythm_e=nil
RANKS.rhythm_h=nil
RANKS.rhythm_u=nil
fs.remove('record/rhythm_e.rec')
fs.remove('record/rhythm_h.rec')
fs.remove('record/rhythm_u.rec')
end
if STAT.version~=VERSION.code then if STAT.version~=VERSION.code then
for k,v in next,MODE_UPDATE_MAP do for k,v in next,MODE_UPDATE_MAP do
if RANKS[k]then if RANKS[k]then

Binary file not shown.

Binary file not shown.

View File

@@ -686,7 +686,13 @@ do
sfx='prerotate' sfx='prerotate'
elseif P:ifoverlap(icb,x,y+1)and P:ifoverlap(icb,x-1,y)and P:ifoverlap(icb,x+1,y)then elseif P:ifoverlap(icb,x,y+1)and P:ifoverlap(icb,x-1,y)and P:ifoverlap(icb,x+1,y)then
sfx='rotatekick' sfx='rotatekick'
P:_rotateField(d) if P.gameEnv.shakeFX then
if d==1 or d==3 then
P.fieldOff.va=P.fieldOff.va+(2-d)*6e-3
else
P.fieldOff.va=P.fieldOff.va+P:getCenterX()*3e-3
end
end
else else
sfx='rotate' sfx='rotate'
end end

View File

@@ -12,9 +12,10 @@ local ins,rem=table.insert,table.remove
local back={} local back={}
local t local t
local petal local fan,petal
function back.init() function back.init()
t=0 t=0
fan=SVG_TITLE_FAN
petal={} petal={}
end end
function back.update() function back.update()
@@ -61,7 +62,7 @@ function back.draw()
gc_setLineWidth(6) gc_setLineWidth(6)
gc_setColor(.8,.9,1,.3) gc_setColor(.8,.9,1,.3)
for i=1,8 do gc_polygon('line',SVG_TITLE_FAN[i])end for i=1,8 do gc_polygon('line',fan[i])end
gc_setLineWidth(2) gc_setLineWidth(2)
gc_setColor(1,.5,.7,.3) gc_setColor(1,.5,.7,.3)

View File

@@ -44,7 +44,8 @@ local function _ifoverlapAI(f,bk,x,y)
end end
end end end end
end end
local getRow,discardRow=LINE.new,LINE.discard local discardRow=FREEROW.discard
local getRow=FREEROW.get
local function _resetField(f0,f,start) local function _resetField(f0,f,start)
for _=#f,start,-1 do for _=#f,start,-1 do
discardRow(f[_]) discardRow(f[_])

View File

@@ -33,7 +33,6 @@ return{
P:_showText(text.maxspeed,0,-140,100,'appear',.6) P:_showText(text.maxspeed,0,-140,100,'appear',.6)
end end
end end
P:shakeField(9)
D.wave=D.wave+1 D.wave=D.wave+1
end end
end end

View File

@@ -42,7 +42,6 @@ return{
P:_showText(text.maxspeed,0,-140,100,'appear',.6) P:_showText(text.maxspeed,0,-140,100,'appear',.6)
end end
end end
P:shakeField(10)
D.wave=D.wave+1 D.wave=D.wave+1
end end
end end

View File

@@ -11,8 +11,8 @@ return{
task=function(P) task=function(P)
local F=P.field local F=P.field
for i=1,24 do for i=1,24 do
F[i]=LINE.new(20) F[i]=FREEROW.get(20)
P.visTime[i]=LINE.new(20) P.visTime[i]=FREEROW.get(20)
for x=4,7 do F[i][x]=0 end for x=4,7 do F[i][x]=0 end
end end
if P.holeRND:random()<.6 then if P.holeRND:random()<.6 then

View File

@@ -3,8 +3,8 @@ return{
if P.lastPiece.row>0 then if P.lastPiece.row>0 then
for _=1,#P.clearedRow do for _=1,#P.clearedRow do
local h=#P.field local h=#P.field
P.field[h+1]=LINE.new(20) P.field[h+1]=FREEROW.get(20)
P.visTime[h+1]=LINE.new(20) P.visTime[h+1]=FREEROW.get(20)
for i=4,7 do P.field[h+1][i]=0 end for i=4,7 do P.field[h+1][i]=0 end
end end
if P.combo>P.modeData.maxCombo then if P.combo>P.modeData.maxCombo then

View File

@@ -5,8 +5,8 @@ return{
else else
for _=1,P.lastPiece.row do for _=1,P.lastPiece.row do
local h=#P.field local h=#P.field
P.field[h+1]=LINE.new(20) P.field[h+1]=FREEROW.get(20)
P.visTime[h+1]=LINE.new(20) P.visTime[h+1]=FREEROW.get(20)
for i=4,7 do P.field[h+1][i]=0 end for i=4,7 do P.field[h+1][i]=0 end
end end
if P.combo>P.modeData.maxCombo then if P.combo>P.modeData.maxCombo then

View File

@@ -6,6 +6,8 @@ return{
if FIELD[D.finished+1]then if FIELD[D.finished+1]then
P.waiting=26 P.waiting=26
for i=#P.field,1,-1 do for i=#P.field,1,-1 do
FREEROW.discard(P.field[i])
FREEROW.discard(P.visTime[i])
P.field[i],P.visTime[i]=nil P.field[i],P.visTime[i]=nil
end end
setField(P,D.finished+1) setField(P,D.finished+1)

View File

@@ -40,7 +40,6 @@ return{
P:_showText(text.maxspeed,0,-140,100,'appear',.6) P:_showText(text.maxspeed,0,-140,100,'appear',.6)
P.dropDelay,P.gameEnv.drop=2,2 P.dropDelay,P.gameEnv.drop=2,2
end end
P:shakeField(3)
end end
end end
end end

View File

@@ -40,7 +40,6 @@ return{
P.dropDelay,P.gameEnv.drop=5,5 P.dropDelay,P.gameEnv.drop=5,5
P:_showText(text.maxspeed,0,-140,100,'appear',.6) P:_showText(text.maxspeed,0,-140,100,'appear',.6)
end end
P:shakeField(3)
end end
end end
end end

View File

@@ -55,8 +55,8 @@ return
P.field[i][P.holeRND:random(10)]=0 P.field[i][P.holeRND:random(10)]=0
end end
else else
P.field[i]=LINE.new(0) P.field[i]=FREEROW.get(0)
P.visTime[i]=LINE.new(30) P.visTime[i]=FREEROW.get(30)
for j=1,10 do for j=1,10 do
if P.holeRND:random()>.9 then if P.holeRND:random()>.9 then
P.field[i][j]=P.holeRND:random(16) P.field[i][j]=P.holeRND:random(16)
@@ -89,7 +89,6 @@ return
ENV.bone=true ENV.bone=true
P.modeData.target=62 P.modeData.target=62
SFX.play('reach')
else else
p=41 p=41
end end
@@ -113,7 +112,6 @@ return
ENV.fall=4 ENV.fall=4
P.modeData.target=162 P.modeData.target=162
SFX.play('reach')
elseif T==162 then--Stage 7: speed up+++ elseif T==162 then--Stage 7: speed up+++
P:stageComplete(7) P:stageComplete(7)
P.life=P.life+1 P.life=P.life+1
@@ -148,7 +146,6 @@ return
P.modeData.target=260 P.modeData.target=260
p=260 p=260
SFX.play('blip_2') SFX.play('blip_2')
SFX.play('reach')
else else
p=260 p=260
end end

View File

@@ -0,0 +1,53 @@
local gc=love.graphics
local dropSpeed={[0]=40,33,27,20,16,12,11,10,9,8,7,6,5,4,3,3,2,2,1,1}
return{
drop=40,
lock=1e99,
wait=20,
fall=90,
mesDisp=function(P)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
setFont(30)
mStr(P.modeData.bpm,63,178)
gc.setLineWidth(4)
gc.circle('line',63,200,30)
local beat=P.modeData.counter/P.modeData.beatFrame
gc.setColor(1,1,1,1-beat)
gc.setLineWidth(3)
gc.circle('line',63,200,30+45*beat)
end,
dropPiece=function(P)
if P.stat.row>=P.modeData.target then
if P.modeData.target==200 then
P:win('finish')
else
P.modeData.bpm=40+2*P.modeData.target/10
P.modeData.beatFrame=math.floor(3600/P.modeData.bpm)
P.gameEnv.fall=P.modeData.beatFrame
P.gameEnv.wait=math.max(P.gameEnv.wait-2,0)
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
P.modeData.target=P.modeData.target+10
SFX.play('reach')
end
end
end,
task=function(P)
P.modeData.target=10
P.modeData.bpm=40
P.modeData.beatFrame=90
P.modeData.counter=90
while true do
YIELD()
P.modeData.counter=P.modeData.counter-1
if P.modeData.counter==0 then
P.modeData.counter=P.modeData.beatFrame
SFX.play('click',.3)
P:act_hardDrop()
end
end
end,
}

View File

@@ -0,0 +1,53 @@
local gc=love.graphics
local dropSpeed={[0]=30,26,23,20,17,14,12,10,8,6,5,4,3,2,1,1,.5,.5,.25,.25}
return{
drop=30,
lock=1e99,
wait=10,
fall=60,
mesDisp=function(P)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
setFont(30)
mStr(P.modeData.bpm,63,178)
gc.setLineWidth(4)
gc.circle('line',63,200,30)
local beat=P.modeData.counter/P.modeData.beatFrame
gc.setColor(1,1,1,1-beat)
gc.setLineWidth(3)
gc.circle('line',63,200,30+45*beat)
end,
dropPiece=function(P)
if P.stat.row>=P.modeData.target then
if P.modeData.target==200 then
P:win('finish')
else
P.modeData.bpm=60+3*P.modeData.target/10
P.modeData.beatFrame=math.floor(3600/P.modeData.bpm)
P.gameEnv.fall=P.modeData.beatFrame
P.gameEnv.wait=math.max(P.gameEnv.wait-1,0)
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
P.modeData.target=P.modeData.target+10
SFX.play('reach')
end
end
end,
task=function(P)
P.modeData.target=10
P.modeData.bpm=60
P.modeData.beatFrame=60
P.modeData.counter=60
while true do
YIELD()
P.modeData.counter=P.modeData.counter-1
if P.modeData.counter==0 then
P.modeData.counter=P.modeData.beatFrame
SFX.play('click',.3)
P:act_hardDrop()
end
end
end,
}

View File

@@ -0,0 +1,58 @@
local gc=love.graphics
return{
drop=.5,
lock=1e99,
wait=5,
fall=30,
mesDisp=function(P)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
setFont(30)
mStr(P.modeData.bpm,63,178)
gc.setLineWidth(4)
gc.circle('line',63,200,30)
local beat=P.modeData.counter/P.modeData.beatFrame
gc.setColor(1,1,1,1-beat)
gc.setLineWidth(3)
gc.circle('line',63,200,30+45*beat)
end,
dropPiece=function(P)
if P.stat.row>=P.modeData.target then
if P.modeData.target==200 then
P:win('finish')
else
P.modeData.bpm=120+2*P.modeData.target/10
P.modeData.beatFrame=math.floor(3600/P.modeData.bpm)
P.gameEnv.fall=P.modeData.beatFrame
P.gameEnv.wait=math.max(P.gameEnv.wait-1,0)
if P.modeData.target==50 then
P.gameEnv.das=5
P.gameEnv.drop=.25
elseif P.modeData.target==100 then
P.gameEnv.das=4
P:set20G(true)
end
P.modeData.target=P.modeData.target+10
SFX.play('reach')
end
end
end,
task=function(P)
P.modeData.target=10
P.modeData.bpm=120
P.modeData.beatFrame=30
P.modeData.counter=30
while true do
YIELD()
P.modeData.counter=P.modeData.counter-1
if P.modeData.counter==0 then
P.modeData.counter=P.modeData.beatFrame
SFX.play('click',.3)
P:act_hardDrop()
end
end
end,
}

View File

@@ -21,7 +21,6 @@ return{
if D.wave==60 then if D.wave==60 then
P:_showText(text.maxspeed,0,-140,100,'appear',.6) P:_showText(text.maxspeed,0,-140,100,'appear',.6)
end end
P:shakeField(3)
D.timer=0 D.timer=0
D.wave=D.wave+1 D.wave=D.wave+1
end end

View File

@@ -24,7 +24,6 @@ return{
if D.wave==30 then if D.wave==30 then
P:_showText(text.maxspeed,0,-140,100,'appear',.6) P:_showText(text.maxspeed,0,-140,100,'appear',.6)
end end
P:shakeField(9)
D.timer=0 D.timer=0
D.wave=D.wave+1 D.wave=D.wave+1
end end

Binary file not shown.

Binary file not shown.

37
parts/freeRow.lua Normal file
View File

@@ -0,0 +1,37 @@
local FREEROW={}
local L={}--Storage
local len=0--Length
function FREEROW.reset(num)
if num<len then
for i=len,num+1,-1 do
L[i]=nil
end
elseif num>len then
for i=len+1,num do
L[i]={0,0,0,0,0,0,0,0,0,0,garbage=false}
end
end
len=num
end
function FREEROW.get(val,ifGarbage)
if len==0 then
for i=1,10 do
L[i]={0,0,0,0,0,0,0,0,0,0,garbage=false}
end
len=len+10
end
local t=L[len]
for i=1,10 do t[i]=val end
t.garbage=ifGarbage==true
L[len]=nil
len=len-1
return t
end
function FREEROW.discard(t)
len=len+1
L[len]=t
end
function FREEROW.getCount()
return len
end
return FREEROW

View File

@@ -257,8 +257,8 @@ function setField(P,page)
local t=P.showTime*3 local t=P.showTime*3
for y=1,height do for y=1,height do
local notEmpty=notEmptyLine(F[y]) local notEmpty=notEmptyLine(F[y])
P.field[y]=LINE.new(0,notEmpty) P.field[y]=FREEROW.get(0,notEmpty)
P.visTime[y]=LINE.new(t) P.visTime[y]=FREEROW.get(t)
if notEmpty then if notEmpty then
for x=1,10 do for x=1,10 do
P.field[y][x]=F[y][x] P.field[y][x]=F[y][x]
@@ -331,8 +331,8 @@ function destroyPlayers()--Destroy all player objects, restore freerows and free
P.canvas:release() P.canvas:release()
end end
while P.field[1]do while P.field[1]do
rem(P.field) FREEROW.discard(rem(P.field))
rem(P.visTime) FREEROW.discard(rem(P.visTime))
end end
end end
TABLE.cut(PLAYERS) TABLE.cut(PLAYERS)
@@ -668,6 +668,7 @@ do--function resetGameData(args)
GAME.secDangerous=false GAME.secDangerous=false
GAME.stage=1 GAME.stage=1
end end
FREEROW.reset(30*#PLAYERS)
TASK.removeTask_code(task_showMods) TASK.removeTask_code(task_showMods)
if GAME.setting.allowMod then if GAME.setting.allowMod then
TASK.new(task_showMods) TASK.new(task_showMods)

View File

@@ -345,6 +345,7 @@ EVENTSETS={
'marathon_n','marathon_h', 'marathon_n','marathon_h',
'master_n','master_h','master_final','master_m','master_ex','master_ph', 'master_n','master_h','master_final','master_m','master_ex','master_ph',
'pctrain_n','pctrain_l','pc_inf', 'pctrain_n','pctrain_l','pc_inf',
'rhythm_e','rhythm_h','rhythm_u',
'survivor_e','survivor_n','survivor_h','survivor_l','survivor_u', 'survivor_e','survivor_n','survivor_h','survivor_l','survivor_u',
'tsd_e','tsd_h','tsd_u', 'tsd_e','tsd_h','tsd_u',
'ultra', 'ultra',

View File

@@ -4,7 +4,7 @@ return{
{"Translator Note 1", {"Translator Note 1",
"", "",
"help", "help",
"This translation of the TetroDictionary is provided by me, User670 (Discord: User670#9501).\n\nThe translation may not completely reflect the contents of the original Chinese text.\n\nCorrected by C₂₉H₂₅N₃O₅.\n\nTo view the list of contributors or make contributions, feel free to visit the GitHub page.", "This translation of the TetroDictionary is provided by me, User670 (Discord: User670#9501).\n\nThe translation may not completely reflect the contents of the original Chinese text.\n\nCorrected by C29H25N3O5.\n\nTo view the list of contributors or make contributions, feel free to visit the GitHub page.",
"https://github.com/26F-Studio/Techmino/blob/main/parts/language/dict_en.lua", "https://github.com/26F-Studio/Techmino/blob/main/parts/language/dict_en.lua",
}, },
{"Official Website", {"Official Website",

View File

@@ -316,7 +316,7 @@ return{
net_game={ net_game={
ready="Ready", ready="Ready",
spectate="Spectate", spectate="Spectate",
cancel="Cancel ready", cancel="Cancel",
}, },
setting_game={ setting_game={
title="Game Settings", title="Game Settings",
@@ -704,6 +704,9 @@ return{
['master_final']= {"Master", "FINAL", "20G and beyond"}, ['master_final']= {"Master", "FINAL", "20G and beyond"},
['master_ph']= {"Master", "PHANTASM", "???"}, ['master_ph']= {"Master", "PHANTASM", "???"},
['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant"}, ['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant"},
['rhythm_e']= {"Rhythm", "EASY", "200-line low-BPM rhythm marathon"},
['rhythm_h']= {"Rhythm", "HARD", "200-line medium BPM rhythm marathon"},
['rhythm_u']= {"Rhythm", "ULTIMATE", "200-line high-BPM rhythm marathon"},
['blind_e']= {"Invisible", "HALF", "For novices"}, ['blind_e']= {"Invisible", "HALF", "For novices"},
['blind_n']= {"Invisible", "ALL", "For intermediates"}, ['blind_n']= {"Invisible", "ALL", "For intermediates"},
['blind_h']= {"Invisible", "SUDDEN", "For the experienced"}, ['blind_h']= {"Invisible", "SUDDEN", "For the experienced"},
@@ -865,7 +868,6 @@ return{
"You can set the spawning orientation for each tetromino.", "You can set the spawning orientation for each tetromino.",
"ZS JL T O I", "ZS JL T O I",
{C.C,"Also try 15puzzle!"}, {C.C,"Also try 15puzzle!"},
{C.C,"Also try Ballance!"},
{C.C,"Also try Minecraft!"}, {C.C,"Also try Minecraft!"},
{C.C,"Also try Minesweeper!"}, {C.C,"Also try Minesweeper!"},
{C.C,"Also try Orzmic!"}, {C.C,"Also try Orzmic!"},
@@ -876,8 +878,6 @@ return{
{C.C,"Also try Terraria!"}, {C.C,"Also try Terraria!"},
{C.C,"Also try Touhou Project!"}, {C.C,"Also try Touhou Project!"},
{C.C,"Also try VVVVVV!"}, {C.C,"Also try VVVVVV!"},
{C.C,"Also try World of goo!"},
{C.C,"Also try Zuma!"},
{C.H,"REGRET!!"}, {C.H,"REGRET!!"},
{C.lP,"Secret number: 626"}, {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.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},

View File

@@ -283,7 +283,7 @@ return{
net_game={ net_game={
ready="Estoy Listo", ready="Estoy Listo",
spectate="Espectear", spectate="Espectear",
-- cancel="Cancel ready", cancel="Cancelar",
}, },
setting_game={ setting_game={
title="Ajustes del Juego", title="Ajustes del Juego",
@@ -662,6 +662,9 @@ return{
-- ['master_m']= {"Master", "M21", "For 20G Masters."}, -- ['master_m']= {"Master", "M21", "For 20G Masters."},
['master_final']= {"Master", "FINAL", "El verdadero 20G Supremo: el final es inalcanzable."}, ['master_final']= {"Master", "FINAL", "El verdadero 20G Supremo: el final es inalcanzable."},
['master_ex']= {"GrandMaster", "EXTRA", "Para ser un gran maestro, acepta este desafío"}, ['master_ex']= {"GrandMaster", "EXTRA", "Para ser un gran maestro, acepta este desafío"},
['rhythm_e']= {"Al Ritmo", "Fácil", "Maratón rítmica de 200 líneas con bajo bpm."},
['rhythm_h']= {"Al Ritmo", "Difícil", "Maratón rítmica de 200 líneas con bpm moderado."},
['rhythm_u']= {"Al Ritmo", "Supremo", "Maratón rítmica de 200 líneas con bpm elevado."},
['blind_e']= {"A Ciegas", "Parcial", "Para novatos."}, ['blind_e']= {"A Ciegas", "Parcial", "Para novatos."},
['blind_n']= {"A Ciegas", "Total", "Para jugadores intermedios."}, ['blind_n']= {"A Ciegas", "Total", "Para jugadores intermedios."},
['blind_h']= {"A Ciegas", "Inmediato", "Para jugadores experimentados"}, ['blind_h']= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},

View File

@@ -279,7 +279,7 @@ return{
net_game={ net_game={
-- ready="Ready", -- ready="Ready",
-- spectate="Spectate", -- spectate="Spectate",
-- cancel="Cancel ready", -- cancel="Cancel",
}, },
setting_game={ setting_game={
title="Paramètres du jeu", title="Paramètres du jeu",
@@ -664,6 +664,9 @@ return{
['master_final']= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"}, ['master_final']= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"},
-- ['master_ph']= {"Mester", "FANTASMA", "20G: ???"}, -- ['master_ph']= {"Mester", "FANTASMA", "20G: ???"},
['master_ex']= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."}, ['master_ex']= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."},
-- ['rhythm_e']= {"Rhythm", "EASY", "200-line low-bpm rhythm marathon."},
-- ['rhythm_h']= {"Rhythm", "HARD", "200-line medium-bpm rhythm marathon"},
-- ['rhythm_u']= {"Rhythm", "ULTIMATE", "200-line high-bpm rhythm marathon."},
['blind_e']= {"Aveugle", "MOITIE", "Pour les novices."}, ['blind_e']= {"Aveugle", "MOITIE", "Pour les novices."},
['blind_n']= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."}, ['blind_n']= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."},
['blind_h']= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."}, ['blind_h']= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."},

View File

@@ -305,7 +305,7 @@ return{
net_game={ net_game={
-- ready="Ready", -- ready="Ready",
-- spectate="Spectate", -- spectate="Spectate",
-- cancel="Cancel ready", -- cancel="Cancel",
}, },
setting_game={ setting_game={
title="Config. de jogo", title="Config. de jogo",
@@ -694,6 +694,9 @@ return{
['master_final']= {"Mestre", "FINAL", "20G: Final inalcançável!"}, ['master_final']= {"Mestre", "FINAL", "20G: Final inalcançável!"},
['master_ph']= {"Mestre", "FANTASMA", "20G: ???"}, ['master_ph']= {"Mestre", "FANTASMA", "20G: ???"},
['master_ex']= {"GrandMaster", "EXTRA", "Para ser um Grand Master, aceite \nesse desafio."}, ['master_ex']= {"GrandMaster", "EXTRA", "Para ser um Grand Master, aceite \nesse desafio."},
-- ['rhythm_e']= {"Rhythm", "EASY", "200-line low-bpm rhythm marathon."},
-- ['rhythm_h']= {"Rhythm", "HARD", "200-line medium-bpm rhythm marathon"},
-- ['rhythm_u']= {"Rhythm", "ULTIMATE", "200-line high-bpm rhythm marathon."},
['blind_e']= {"Cego", "METADE", "Para novatos."}, ['blind_e']= {"Cego", "METADE", "Para novatos."},
['blind_n']= {"Cego", "TUDO", "Para intermediários."}, ['blind_n']= {"Cego", "TUDO", "Para intermediários."},
['blind_h']= {"Cego", "DE REPENTE", "Para experientes."}, ['blind_h']= {"Cego", "DE REPENTE", "Para experientes."},
@@ -830,16 +833,13 @@ return{
"Você pode escolher uma orientação pra cada blococan.", "Você pode escolher uma orientação pra cada blococan.",
"ZS JL T O I", "ZS JL T O I",
{C.C,"Tente também 15puzzle"}, {C.C,"Tente também 15puzzle"},
{C.C,"Tente também Ballance!"},
{C.C,"Tente também Cubo de Rubik"},
{C.C,"Tente também Minecraft"}, {C.C,"Tente também Minecraft"},
{C.C,"Tente também Minesweeper"}, {C.C,"Tente também Minesweeper"},
{C.C,"Tente também osu!"}, {C.C,"Tente também osu!"},
{C.C,"Tente também Phigros"}, {C.C,"Tente também Phigros"},
{C.C,"Tente também Cubo de Rubik"},
{C.C,"Tente também Terraria"}, {C.C,"Tente também Terraria"},
{C.C,"Tente também VVVVVV"}, {C.C,"Tente também VVVVVV"},
{C.C,"Tente também World of goo!"},
{C.C,"Tente também Zuma!"},
{C.F,"Tente também Cultris II"}, {C.F,"Tente também Cultris II"},
{C.F,"Tente também Jstris"}, {C.F,"Tente também Jstris"},
{C.F,"Tente também Nullpomino"}, {C.F,"Tente também Nullpomino"},

View File

@@ -233,6 +233,9 @@ return{fallback='zh',
['master_final']= {"大师", "终点", "真正的20G"}, ['master_final']= {"大师", "终点", "真正的20G"},
['master_ph']= {"大师", "虚幻", "好玩的20G"}, ['master_ph']= {"大师", "虚幻", "好玩的20G"},
['master_ex']= {"宗师", "EX", "考试20G"}, ['master_ex']= {"宗师", "EX", "考试20G"},
['rhythm_e']= {"节奏", "简单", "很无聊的"},
['rhythm_h']= {"节奏", "困难", "好玩么?"},
['rhythm_u']= {"节奏", "极限", "真男人不玩低难度"},
['blind_e']= {"隐形", "半隐", "谁都能玩"}, ['blind_e']= {"隐形", "半隐", "谁都能玩"},
['blind_n']= {"隐形", "全隐", "稍加练习即可"}, ['blind_n']= {"隐形", "全隐", "稍加练习即可"},
['blind_h']= {"隐形", "瞬隐", "和上一个一样"}, ['blind_h']= {"隐形", "瞬隐", "和上一个一样"},

View File

@@ -317,7 +317,7 @@ return{
net_game={ net_game={
ready="准备", ready="准备",
spectate="观战", spectate="观战",
cancel="取消准备", cancel="取消",
}, },
setting_game={ setting_game={
title="游戏设置", title="游戏设置",
@@ -708,6 +708,9 @@ return{
['master_final']= {"大师", "终点", "究极20G:无法触及的终点"}, ['master_final']= {"大师", "终点", "究极20G:无法触及的终点"},
['master_ph']= {"大师", "虚幻", "虚幻20G:"}, ['master_ph']= {"大师", "虚幻", "虚幻20G:"},
['master_ex']= {"宗师", "EX", "成为方块大师"}, ['master_ex']= {"宗师", "EX", "成为方块大师"},
['rhythm_e']= {"节奏", "简单", "200行低速节奏马拉松"},
['rhythm_h']= {"节奏", "困难", "200行中速节奏马拉松"},
['rhythm_u']= {"节奏", "极限", "200行高速节奏马拉松"},
['blind_e']= {"隐形", "半隐", "不强大脑"}, ['blind_e']= {"隐形", "半隐", "不强大脑"},
['blind_n']= {"隐形", "全隐", "挺强大脑"}, ['blind_n']= {"隐形", "全隐", "挺强大脑"},
['blind_h']= {"隐形", "瞬隐", "很强大脑"}, ['blind_h']= {"隐形", "瞬隐", "很强大脑"},
@@ -1089,11 +1092,10 @@ return{
"Z块等身抱枕来一个(x", "Z块等身抱枕来一个(x",
{C.C,"<PURE ",C.P,"MEMORY>"}, {C.C,"<PURE ",C.P,"MEMORY>"},
{C.C,"15puzzle好玩"}, {C.C,"15puzzle好玩"},
{C.C,"东方Project好玩"}, {C.C,"东方Project好玩!"},
{C.C,"魔方好玩!"}, {C.C,"魔方好玩!"},
{C.C,"噗哟噗哟好玩!"}, {C.C,"噗哟噗哟好玩!"},
{C.C,"扫雷好玩!"}, {C.C,"扫雷好玩!"},
{C.C,"Ballance好玩"},
{C.C,"Celeste好玩"}, {C.C,"Celeste好玩"},
{C.C,"Minecraft好玩"}, {C.C,"Minecraft好玩"},
{C.C,"Orzmic好玩"}, {C.C,"Orzmic好玩"},
@@ -1101,8 +1103,6 @@ return{
{C.C,"Phigros好玩"}, {C.C,"Phigros好玩"},
{C.C,"Terraria好玩"}, {C.C,"Terraria好玩"},
{C.C,"VVVVVV好玩"}, {C.C,"VVVVVV好玩"},
{C.C,"World of goo好玩"},
{C.C,"Zuma好玩"},
{C.H,"暂定段位:9"}, {C.H,"暂定段位:9"},
{C.H,"REGRET!!"}, {C.H,"REGRET!!"},
{C.lC,"Xspin",C.Z,"是啥"}, {C.lC,"Xspin",C.Z,"是啥"},

View File

@@ -122,6 +122,9 @@ return{
['master_final']= {"大师", "终点", "究极20G:无法触及的终点"}, ['master_final']= {"大师", "终点", "究极20G:无法触及的终点"},
['master_ph']= {"大师", "虚幻", "虚幻20G:???"}, ['master_ph']= {"大师", "虚幻", "虚幻20G:???"},
['master_ex']= {"宗师", "EX", "成为方块大师"}, ['master_ex']= {"宗师", "EX", "成为方块大师"},
['rhythm_e']= {"节奏", "简单", "200行低速节奏马拉松"},
['rhythm_h']= {"节奏", "困难", "200行中速节奏马拉松"},
['rhythm_u']= {"节奏", "极限", "200行高速节奏马拉松"},
['blind_e']= {"隐形", "半隐", "不强大脑"}, ['blind_e']= {"隐形", "半隐", "不强大脑"},
['blind_n']= {"隐形", "全隐", "挺强大脑"}, ['blind_n']= {"隐形", "全隐", "挺强大脑"},
['blind_h']= {"隐形", "瞬隐", "很强大脑"}, ['blind_h']= {"隐形", "瞬隐", "很强大脑"},

View File

@@ -316,7 +316,7 @@ return{
net_game={ net_game={
ready="准备好的", ready="准备好的",
spectate="凝视", spectate="凝视",
cancel="取消准备", cancel="取消",
}, },
setting_game={ setting_game={
title="游戏设置", title="游戏设置",
@@ -705,6 +705,9 @@ return{
['master_final']= {"主人", "最终", "20G及以上"}, ['master_final']= {"主人", "最终", "20G及以上"},
['master_ph']= {"主人", "幻觉", ""}, ['master_ph']= {"主人", "幻觉", ""},
['master_ex']= {"大师", "额外的", "比瞬间还短的永恒"}, ['master_ex']= {"大师", "额外的", "比瞬间还短的永恒"},
['rhythm_e']= {"节奏", "容易", "200线低节奏马拉松"},
['rhythm_h']= {"节奏", "硬的", "200线中等节奏马拉松"},
['rhythm_u']= {"节奏", "终极", "200线高节奏马拉松"},
['blind_e']= {"看不见的", "一半", "对于新手来说"}, ['blind_e']= {"看不见的", "一半", "对于新手来说"},
['blind_n']= {"看不见的", "全部", "对于中间产品"}, ['blind_n']= {"看不见的", "全部", "对于中间产品"},
['blind_h']= {"看不见的", "突然", "对于有经验的人"}, ['blind_h']= {"看不见的", "突然", "对于有经验的人"},

View File

@@ -317,7 +317,7 @@ return{
net_game={ net_game={
ready="準備", ready="準備",
spectate="觀賽", spectate="觀賽",
cancel="取消準備", cancel="取消",
}, },
setting_game={ setting_game={
title="遊戲設置", title="遊戲設置",
@@ -708,6 +708,9 @@ return{
['master_final']= {"大師", "究極", "究極20G:無法觸及的終點"}, ['master_final']= {"大師", "究極", "究極20G:無法觸及的終點"},
['master_ph']= {"大師", "虛幻", "虛幻20G:"}, ['master_ph']= {"大師", "虛幻", "虛幻20G:"},
['master_ex']= {"宗師", "EX", "成為方塊大師"}, ['master_ex']= {"宗師", "EX", "成為方塊大師"},
['rhythm_e']= {"節奏", "簡單", "200行低速節奏馬拉松"},
['rhythm_h']= {"節奏", "困難", "200行中速節奏馬拉松"},
['rhythm_u']= {"節奏", "極限", "200行高速節奏馬拉松"},
['blind_e']= {"隱形", "半隱", "不強大腦"}, ['blind_e']= {"隱形", "半隱", "不強大腦"},
['blind_n']= {"隱形", "全隱", "挺強大腦"}, ['blind_n']= {"隱形", "全隱", "挺強大腦"},
['blind_h']= {"隱形", "瞬隱", "很強大腦"}, ['blind_h']= {"隱形", "瞬隱", "很強大腦"},

View File

@@ -1,22 +0,0 @@
local LINE={}
local L={}--Storage
local len=0--Length
function LINE.new(val,isGarbage)
if len==0 then
for i=1,10 do
L[i]={0,0,0,0,0,0,0,0,0,0,garbage=false}
end
len=len+10
end
local t=L[len]
for i=1,10 do t[i]=val end
t.garbage=isGarbage==true
L[len]=nil
len=len-1
return t
end
function LINE.discard(t)
len=len+1
L[len]=t
end
return LINE

View File

@@ -21,7 +21,7 @@ return{
{name='dig_100l', x=-600, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_400l'}}, {name='dig_100l', x=-600, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_400l'}},
{name='dig_400l', x=-800, y=-200, size=40,shape=1,icon="dig_sprint"}, {name='dig_400l', x=-800, y=-200, size=40,shape=1,icon="dig_sprint"},
{name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon", unlock={'marathon_h','solo_e','round_e','blind_e','classic_e','survivor_e','bigbang','zen'}}, {name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon", unlock={'marathon_h','rhythm_e','solo_e','round_e','blind_e','classic_e','survivor_e','bigbang','zen'}},
{name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon", unlock={'master_n'}}, {name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon", unlock={'master_n'}},
{name='solo_e', x=-600, y=-1000, size=40,shape=1,icon="solo", unlock={'solo_n'}}, {name='solo_e', x=-600, y=-1000, size=40,shape=1,icon="solo", unlock={'solo_n'}},
@@ -50,6 +50,10 @@ return{
{name='master_ph', x=-150, y=-1500, size=40,shape=2,icon="master"}, {name='master_ph', x=-150, y=-1500, size=40,shape=2,icon="master"},
{name='master_ex', x=150, y=-1500, size=40,shape=2,icon="master_ex"}, {name='master_ex', x=150, y=-1500, size=40,shape=2,icon="master_ex"},
{name='rhythm_e', x=-350, y=-1000, size=40,shape=1,icon="rhythm", unlock={'rhythm_h'}},
{name='rhythm_h', x=-350, y=-1200, size=40,shape=3,icon="rhythm", unlock={'rhythm_u'}},
{name='rhythm_u', x=-350, y=-1400, size=40,shape=2,icon="rhythm"},
{name='blind_e', x=150, y=-700, size=40,shape=1,icon="hidden", unlock={'blind_n'}}, {name='blind_e', x=150, y=-700, size=40,shape=1,icon="hidden", unlock={'blind_n'}},
{name='blind_n', x=150, y=-800, size=40,shape=1,icon="hidden", unlock={'blind_h'}}, {name='blind_n', x=150, y=-800, size=40,shape=1,icon="hidden", unlock={'blind_h'}},
{name='blind_h', x=150, y=-900, size=35,shape=1,icon="hidden", unlock={'blind_l'}}, {name='blind_h', x=150, y=-900, size=35,shape=1,icon="hidden", unlock={'blind_l'}},
@@ -57,9 +61,9 @@ return{
{name='blind_u', x=150, y=-1100, size=30,shape=3,icon="hidden", unlock={'blind_wtf'}}, {name='blind_u', x=150, y=-1100, size=30,shape=3,icon="hidden", unlock={'blind_wtf'}},
{name='blind_wtf', x=150, y=-1200, size=25,shape=2,icon="hidden"}, {name='blind_wtf', x=150, y=-1200, size=25,shape=2,icon="hidden"},
{name='classic_e', x=-170, y=-850, size=40,shape=1,icon="classic", unlock={'classic_h'}}, {name='classic_e', x=-150, y=-850, size=40,shape=1,icon="classic", unlock={'classic_h'}},
{name='classic_h', x=-180, y=-1000, size=35,shape=2,icon="classic", unlock={'classic_u'}}, {name='classic_h', x=-150, y=-970, size=35,shape=2,icon="classic", unlock={'classic_u'}},
{name='classic_u', x=-190, y=-1150, size=30,shape=2,icon="classic"}, {name='classic_u', x=-150, y=-1090, size=30,shape=2,icon="classic"},
{name='survivor_e', x=300, y=-600, size=40,shape=1,icon="survivor", unlock={'survivor_n'}}, {name='survivor_e', x=300, y=-600, size=40,shape=1,icon="survivor", unlock={'survivor_n'}},
{name='survivor_n', x=500, y=-600, size=40,shape=1,icon="survivor", unlock={'survivor_h','attacker_h','defender_n','dig_h'}}, {name='survivor_n', x=500, y=-600, size=40,shape=1,icon="survivor", unlock={'survivor_h','attacker_h','defender_n','dig_h'}},

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.magenta,
env={ env={
drop=30,lock=60, drop=30,lock=60,
fall=12, fall=12,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lYellow,
env={ env={
drop=5,lock=60, drop=5,lock=60,
fall=8, fall=8,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.magenta,
env={ env={
drop=10,lock=60, drop=10,lock=60,
freshLimit=15, freshLimit=15,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
drop=5,lock=45, drop=5,lock=45,
freshLimit=15, freshLimit=15,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.green,
env={ env={
drop=30,lock=60, drop=30,lock=60,
dropPiece={ dropPiece={

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lYellow,
env={ env={
drop=2,lock=30, drop=2,lock=30,
freshLimit=10, freshLimit=10,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lGray,
env={ env={
drop=1e99,lock=1e99, drop=1e99,lock=1e99,
holdCount=0, holdCount=0,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.cyan,
env={ env={
drop=30,lock=45, drop=30,lock=45,
freshLimit=10, freshLimit=10,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.magenta,
env={ env={
drop=15,lock=45, drop=15,lock=45,
fall=10, fall=10,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
drop=10,lock=60, drop=10,lock=60,
fall=5, fall=5,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.green,
env={ env={
drop=15,lock=45, drop=15,lock=45,
freshLimit=10, freshLimit=10,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
drop=30,lock=60, drop=30,lock=60,
block=false,center=0,ghost=0, block=false,center=0,ghost=0,

View File

@@ -9,6 +9,7 @@ local border=GC.DO{334,620,
local gc=love.graphics local gc=love.graphics
local sin,min=math.sin,math.min local sin,min=math.sin,math.min
return{ return{
color=COLOR.red,
env={ env={
drop=30,lock=60, drop=30,lock=60,
nextCount=1, nextCount=1,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
drop=5,lock=30, drop=5,lock=30,
freshLimit=15,ospin=false, freshLimit=15,ospin=false,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.green,
env={ env={
drop=30,lock=60,infHold=true, drop=30,lock=60,infHold=true,
freshLimit=15,ospin=false, freshLimit=15,ospin=false,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lBlue,
env={ env={
center=0,ghost=0, center=0,ghost=0,
smooth=false, smooth=false,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lBlue,
env={ env={
center=0,ghost=0, center=0,ghost=0,
smooth=false, smooth=false,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lBlue,
env={ env={
center=0,ghost=0, center=0,ghost=0,
smooth=false, smooth=false,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.white,
env={}, env={},
load=function() load=function()
applyCustomGame() applyCustomGame()

View File

@@ -2,6 +2,7 @@ local gc_setColor,gc_draw=love.graphics.setColor,love.graphics.draw
local ply_applyField=PLY.draw.applyField local ply_applyField=PLY.draw.applyField
return{ return{
color=COLOR.white,
env={ env={
fkey1=function(P)P.modeData.showMark=1-P.modeData.showMark end, fkey1=function(P)P.modeData.showMark=1-P.modeData.showMark end,
dropPiece=function(P) dropPiece=function(P)
@@ -23,6 +24,8 @@ return{
if FIELD[D.finished+1]then if FIELD[D.finished+1]then
P.waiting=26 P.waiting=26
for _=#P.field,1,-1 do for _=#P.field,1,-1 do
FREEROW.discard(P.field[_])
FREEROW.discard(P.visTime[_])
P.field[_],P.visTime[_]=nil P.field[_],P.visTime[_]=nil
end end
SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.3,1,.3) SYSFX.newShade(1.4,P.absFieldX,P.absFieldY,300*P.size,610*P.size,.3,1,.3)

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
nextCount=3, nextCount=3,
freshLimit=15, freshLimit=15,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.green,
env={ env={
nextCount=3, nextCount=3,
freshLimit=15, freshLimit=15,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.green,
env={ env={
pushSpeed=6, pushSpeed=6,
eventSet='dig_100l', eventSet='dig_100l',

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.cyan,
env={ env={
pushSpeed=6, pushSpeed=6,
eventSet='dig_10l', eventSet='dig_10l',

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.orange,
env={ env={
pushSpeed=6, pushSpeed=6,
eventSet='dig_400l', eventSet='dig_400l',

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lBlue,
env={ env={
pushSpeed=6, pushSpeed=6,
eventSet='dig_40l', eventSet='dig_40l',

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.magenta,
env={ env={
drop=60,lock=120, drop=60,lock=120,
fall=20, fall=20,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lYellow,
env={ env={
drop=10,lock=30, drop=10,lock=30,
freshLimit=15, freshLimit=15,

View File

@@ -1,5 +1,6 @@
local ins=table.insert local ins=table.insert
return{ return{
color=COLOR.red,
env={ env={
drop=20,lock=60, drop=20,lock=60,
sequence=function(P) sequence=function(P)
@@ -7,7 +8,7 @@ return{
while true do while true do
YIELD() YIELD()
if not P.nextQueue[1]then if not P.nextQueue[1]then
local height=TABLE.new(0,10) local height=FREEROW.get(0)
local max=#P.field local max=#P.field
if max>0 then if max>0 then
--Get heights --Get heights
@@ -68,6 +69,8 @@ return{
for _=1,4 do ins(wei,5)end for _=1,4 do ins(wei,5)end
end end
end end
FREEROW.discard(height)
P:getNext(wei[P.seqRND:random(#wei)]) P:getNext(wei[P.seqRND:random(#wei)])
end end
end end

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.green,
env={ env={
drop=20,lock=60, drop=20,lock=60,
sequence='bag', sequence='bag',

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.white,
env={ env={
drop=1e99,lock=1e99, drop=1e99,lock=1e99,
infHold=true, infHold=true,

View File

@@ -26,6 +26,7 @@ local function check_rise(P)
end end
return{ return{
color=COLOR.white,
env={ env={
drop=1e99,lock=1e99, drop=1e99,lock=1e99,
infHold=true, infHold=true,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.yellow,
env={ env={
noTele=true, noTele=true,
mindas=7,minarr=1,minsdarr=1, mindas=7,minarr=1,minsdarr=1,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.magenta,
env={ env={
noTele=true, noTele=true,
mindas=7,minarr=1,minsdarr=1, mindas=7,minarr=1,minsdarr=1,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.white,
env={ env={
noTele=true, noTele=true,
mindas=7,minarr=1,minsdarr=1, mindas=7,minarr=1,minsdarr=1,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.green,
env={ env={
noTele=true, noTele=true,
mindas=7,minarr=1,minsdarr=1, mindas=7,minarr=1,minsdarr=1,

View File

@@ -1,6 +1,7 @@
local sectionName={"D","C","B","A","A+","S-","S","S+","S+","SS","SS","U","U","X","X+"} local sectionName={"D","C","B","A","A+","S-","S","S+","S+","SS","SS","U","U","X","X+"}
return{ return{
color=COLOR.lBlue,
env={ env={
eventSet='master_ex', eventSet='master_ex',
bg='blockspace',bgm='hope', bg='blockspace',bgm='hope',

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lGray,
env={ env={
sequence="bagES", sequence="bagES",
eventSet='master_final', eventSet='master_final',

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
freshLimit=15, freshLimit=15,
sequence="bagES", sequence="bagES",

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lSea,
env={ env={
sequence="bagES", sequence="bagES",
eventSet='master_m', eventSet='master_m',

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
sequence="bagES", sequence="bagES",
freshLimit=15, freshLimit=15,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.black,
env={ env={
eventSet='master_ph', eventSet='master_ph',
bg='blockspace',bgm='race remix', bg='blockspace',bgm='race remix',

View File

@@ -7,6 +7,7 @@ local function marginTask(P)
while true do yield()if S.frame>260*60 then P.strength=4;P:setFrameColor(4)break end end while true do yield()if S.frame>260*60 then P.strength=4;P:setFrameColor(4)break end end
end end
return{ return{
color=COLOR.white,
env={ env={
bg={'bg1','bg2','blackhole','blockfall','blockrain','blockspace','cubes','fan','flink','glow','matrix','rainbow','rainbow2','tunnel'}, bg={'bg1','bg2','blackhole','blockfall','blockrain','blockspace','cubes','fan','flink','glow','matrix','rainbow','rainbow2','tunnel'},
bgm={'battle','beat5th','cruelty','distortion','echo','far','final','here','hope','memory','moonbeam','push','rectification','secret7th remix','secret7th','secret8th remix','secret8th','shift','shining terminal','storm','super7th','there','truth','vapor','waterfall'}, bgm={'battle','beat5th','cruelty','distortion','echo','far','final','here','hope','memory','moonbeam','push','rectification','secret7th remix','secret7th','secret8th remix','secret8th','shift','shining terminal','storm','super7th','there','truth','vapor','waterfall'},

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.magenta,
env={ env={
drop=60,lock=120, drop=60,lock=120,
fall=10, fall=10,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
drop=20,lock=60, drop=20,lock=60,
fall=10, fall=10,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
drop=20,lock=60, drop=20,lock=60,
fall=20, fall=20,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.green,
env={ env={
infHold=true, infHold=true,
drop=150,lock=1e99, drop=150,lock=1e99,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
nextCount=5, nextCount=5,
holdCount=0, holdCount=0,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.green,
env={ env={
nextCount=4, nextCount=4,
holdCount=0, holdCount=0,

23
parts/modes/rhythm_e.lua Normal file
View File

@@ -0,0 +1,23 @@
return{
color=COLOR.green,
env={
mindas=7,minarr=1,minsdarr=1,
keyCancel={6},
eventSet='rhythm_e',
bg='bg2',bgm='magicblock',
},
slowMark=true,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
return
L>=200 and 5 or
L>=170 and 4 or
L>=140 and 3 or
L>=100 and 2 or
L>=50 and 1 or
L>=20 and 0
end,
}

23
parts/modes/rhythm_h.lua Normal file
View File

@@ -0,0 +1,23 @@
return{
color=COLOR.magenta,
env={
mindas=7,minarr=1,minsdarr=1,
keyCancel={6},
eventSet='rhythm_h',
bg='bg2',bgm='secret8th',
},
slowMark=true,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
return
L>=200 and 5 or
L>=170 and 4 or
L>=140 and 3 or
L>=100 and 2 or
L>=50 and 1 or
L>=20 and 0
end,
}

23
parts/modes/rhythm_u.lua Normal file
View File

@@ -0,0 +1,23 @@
return{
color=COLOR.magenta,
env={
das=6,minarr=1,minsdarr=1,
keyCancel={6},
eventSet='rhythm_u',
bg='bg2',bgm='secret7th',
},
slowMark=true,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
return
L>=200 and 5 or
L>=170 and 4 or
L>=140 and 3 or
L>=100 and 2 or
L>=50 and 1 or
L>=20 and 0
end,
}

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.cyan,
env={ env={
life=1, life=1,
drop=300,lock=300, drop=300,lock=300,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.magenta,
env={ env={
life=1, life=1,
drop=300,lock=300, drop=300,lock=300,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.red,
env={ env={
life=1, life=1,
drop=300,lock=300, drop=300,lock=300,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.green,
env={ env={
life=1, life=1,
drop=300,lock=300, drop=300,lock=300,

View File

@@ -1,4 +1,5 @@
return{ return{
color=COLOR.lYellow,
env={ env={
life=1, life=1,
drop=300,lock=300, drop=300,lock=300,

Some files were not shown because too many files have changed in this diff Show More