Compare commits

..

56 Commits

Author SHA1 Message Date
MrZ626
8c7202c569 版本推进 2021-11-12 03:35:54 +08:00
MrZ626
ab386bb53c 整理代码 2021-11-12 03:30:52 +08:00
MrZ626
87c791b8c7 tips新增几个好玩的游戏 2021-11-12 02:58:17 +08:00
MrZ626
00e3e2d19d 取消准备按钮不再只显示取消两个字 2021-11-12 02:54:14 +08:00
MrZ626
8d7d5c7b04 新BGM:peak(暂未使用) 2021-11-11 19:22:45 +08:00
MrZ626
849a18e159 移除模式的颜色 2021-11-11 19:14:37 +08:00
MrZ626
a4357d0843 移除节奏模式,准备之后添加音游模式 2021-11-11 18:59:04 +08:00
MrZ626
e2b4a78b59 修正超音源音域音符处理方法 2021-11-10 21:15:50 +08:00
MrZ626
01387b5488 版本推进(修改更新历史和build号) 2021-11-10 18:30:34 +08:00
MrZ626
168e2f80b8 SFX.play新增pitch参数,playSample方法允许超过音源范围(差太多了效果不好) 2021-11-10 17:52:48 +08:00
MrZ626
4f79ef8708 改进一处材质缺失后的报错 2021-11-10 16:40:00 +08:00
MrZ626
16497833df 修正COLOR.hsv函数s小于0时漏返回透明度 close #445 2021-11-10 14:35:22 +08:00
MrZ626
cd6a50d5a0 修复词典导出词条保留了替换敏感词的特殊字符 2021-11-10 14:35:22 +08:00
C₂₉H₂₅N₃O₅
4c5a61f2d8 修改License相关内容 (#444) 2021-11-09 21:38:45 -06:00
C29H25N3O5
1fd8d39970 更换中文字形 2021-11-09 18:57:35 -06:00
MrZ626
d133d64890 目标分数显示器分割线长度微调 2021-11-09 23:16:33 +08:00
MrZ626
b27aa8b60d freeRow模块改名line模块并暂时在“行”的管理上不再那么节约地使用内存 2021-11-09 20:14:08 +08:00
MrZ626
230d67492e 测试场景左上文本从最晚的开始显示 close #437 2021-11-09 16:04:08 +08:00
MrZ626
4f9d5b282c 修正一个开发者id写法问题 2021-11-09 16:04:08 +08:00
ParticleG
a2955e8722 - Fix wrong action name 2021-11-09 16:04:07 +08:00
MrZ626
df892671d5 修改更新历史和build号 2021-11-09 16:04:07 +08:00
MrZ626
7fa96eee1a 被攻击时场地会抖动 2021-11-09 16:04:07 +08:00
MrZ626
a1030906c7 场地晃动改名swing
添加场地抖动特效(跟场地晃动使用同一个设置值)
2021-11-09 16:04:07 +08:00
MrZ626
e6a9a4f4be 微调wine颜色,dark颜色更dark 2021-11-09 16:04:07 +08:00
MrZ626
efa1247596 颜色表的灰色饱和度更低并改为偏暖 2021-11-09 16:04:07 +08:00
MrZ626
069fcee721 整理代码
移除旧的切换攻击模式代码
旋转导致场地倾斜封装成玩家方法
调整瞬移到左右的场地晃动程度
调整场地平移晃动的恢复速度
软降触地时也会播放触地音效
2021-11-09 16:04:07 +08:00
C₂₉H₂₅N₃O₅
66621404f1 Changed the colours and the fonts in the game (#435)
* 微调字体

* 调整配色, 微调字体
2021-11-09 16:04:06 +08:00
ParticleG
e09609ea21 - Use Python 3.9 2021-11-09 16:04:06 +08:00
ParticleG
d02ae67bc0 - Add logs to upload-artifact 2021-11-09 16:04:06 +08:00
ParticleG
27327d57c4 - Test Windows with curl 2021-11-09 16:04:06 +08:00
MrZ626
cce93b6df9 整理代码 2021-11-09 16:04:06 +08:00
ParticleG
546104ba5b - Add Upload Action 2021-11-09 16:04:06 +08:00
MrZ626
ca5816ba14 进入newRoom菜单时不会试图修改背景和bgm 2021-11-09 16:04:06 +08:00
MrZ626
e5bd16476e 修改更新历史和build号 2021-11-09 16:04:05 +08:00
MrZ626
94431d4c2e 只在更新后触发自动转换以旧版本模式名存储的数据文件 2021-11-09 16:04:05 +08:00
MrZ626
f98d6892f1 颜色表改用hsv生成 2021-11-09 16:04:05 +08:00
MrZ626
1fe436cbe3 微调词典
微调两个小程序
整理代码
2021-11-09 16:04:05 +08:00
MrZ626
c5a37a9920 微调中文词典两个词条 2021-11-09 16:04:05 +08:00
MrZ626
eed7e96096 无尽马拉松的are每300行减小一次,line are每100行减小一次 2021-11-09 16:04:05 +08:00
MrZ626
a7f36a4162 无尽马拉松添加1700行的终点 2021-11-09 16:04:05 +08:00
MrZ626
8ba872d45d 微调排行榜字体大小 2021-11-09 16:04:04 +08:00
MrZ626
7a55451faa 无尽马拉松添加排行榜 2021-11-09 16:04:04 +08:00
MrZ626
372571bd80 修改更新历史
整理代码
2021-11-09 16:04:04 +08:00
MrZ626
77120c0b90 调整无尽马拉松的难度曲线 2021-11-09 16:04:04 +08:00
Not-A-Normal-Robot
01d1e44644 Decrease lock delay when level up above lvl20 2021-11-09 16:04:04 +08:00
Not-A-Normal-Robot
0ad8cddefe Added Infinite Marathon 2021-11-09 16:04:03 +08:00
MrZ626
ce67253502 修改更新历史 2021-11-09 16:04:03 +08:00
MrZ626
cb9f2c0617 修改mph模式的bgm 2021-11-09 16:04:03 +08:00
MrZ626
635d9407ed 新模式:竞速-效率 2021-11-09 16:04:03 +08:00
MrZ626
0f9f6565f1 修复超级消除结算时分数计算变量写错导致报错 2021-11-09 16:04:03 +08:00
MrZ626
a45b6ad57e move音效在方块因重力或旋转触地时也会播放,而不只是移动后
move音效名改为touch
2021-11-09 16:04:03 +08:00
MrZ626
a5de06dedb 修改更新历史 2021-11-09 16:04:03 +08:00
MrZ626
fbfbd1ed98 修正pr的一个符号错误 2021-11-09 16:04:02 +08:00
C₂₉H₂₅N₃O₅
8f06b3bd1a Changed the font and CN tips (#433)
* 补全英文词典翻译

* 大改字体

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

* 微调中文tips

* 更新 Legals

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

View File

@@ -19,6 +19,9 @@ inputs:
runs:
using: "composite"
steps:
- uses: actions/setup-python@v2
with:
python-version: '3.9'
- name: Install Webdav 4
shell: bash
run: |
@@ -34,7 +37,7 @@ runs:
auth=("${{ inputs.WEBDAV_USERNAME }}", "${{ inputs.WEBDAV_PASSWORD }}"),
timeout=None,
)
if '${{ inputs.ARTIFACT_TYPE }}' == 'release'
if '${{ inputs.ARTIFACT_TYPE }}' == 'release':
print('Removing previous ${{ inputs.ARTIFACT_PLATFORM }} release file...')
for file in client.ls('Techmino distribution'):
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
run: mv Techmino.ipa Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_iOS.ipa
- name: Upload artifact to server
uses: ./.github/actions/upload-artifacts
uses: ./.github/actions/upload-artifact
with:
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}

View File

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

View File

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

View File

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

View File

@@ -2,11 +2,7 @@
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.
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.
"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.
Powered by LÖVE, © 2006-2021 LÖVE Development Team.
@@ -21,7 +17,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.
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.
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.
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.
@@ -50,5 +46,5 @@ Linux is a registered trademark of Linus Torvalds.
Touhou Project © Team Shanghai Alice 2002-2021.
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
FREEROW= require'parts.freeRow'
LINE= require'parts.line'
DATA= require'parts.data'
TEXTURE= require'parts.texture'
@@ -104,6 +104,12 @@ PLY= require'parts.player'
NETPLY= require'parts.netPlayer'
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_))
--Init Zframework
@@ -460,6 +466,14 @@ do
fs.remove('record/stack_40l.rec')
fs.remove('record/stack_100l.rec')
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
for k,v in next,MODE_UPDATE_MAP do
if RANKS[k]then

Binary file not shown.

BIN
media/music/peak.ogg Normal file

Binary file not shown.

View File

@@ -686,13 +686,7 @@ do
sfx='prerotate'
elseif P:ifoverlap(icb,x,y+1)and P:ifoverlap(icb,x-1,y)and P:ifoverlap(icb,x+1,y)then
sfx='rotatekick'
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
P:_rotateField(d)
else
sfx='rotate'
end

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,53 +0,0 @@
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

@@ -1,53 +0,0 @@
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

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

View File

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

Binary file not shown.

Binary file not shown.

View File

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

View File

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

View File

@@ -4,7 +4,7 @@ return{
{"Translator Note 1",
"",
"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 C29H25N3O5.\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 C₂₉H₂₅N₃O₅.\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",
},
{"Official Website",

View File

@@ -316,7 +316,7 @@ return{
net_game={
ready="Ready",
spectate="Spectate",
cancel="Cancel",
cancel="Cancel ready",
},
setting_game={
title="Game Settings",
@@ -704,9 +704,6 @@ return{
['master_final']= {"Master", "FINAL", "20G and beyond"},
['master_ph']= {"Master", "PHANTASM", "???"},
['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_n']= {"Invisible", "ALL", "For intermediates"},
['blind_h']= {"Invisible", "SUDDEN", "For the experienced"},
@@ -868,6 +865,7 @@ return{
"You can set the spawning orientation for each tetromino.",
"ZS JL T O I",
{C.C,"Also try 15puzzle!"},
{C.C,"Also try Ballance!"},
{C.C,"Also try Minecraft!"},
{C.C,"Also try Minesweeper!"},
{C.C,"Also try Orzmic!"},
@@ -878,6 +876,8 @@ return{
{C.C,"Also try Terraria!"},
{C.C,"Also try Touhou Project!"},
{C.C,"Also try VVVVVV!"},
{C.C,"Also try World of goo!"},
{C.C,"Also try Zuma!"},
{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"},

View File

@@ -283,7 +283,7 @@ return{
net_game={
ready="Estoy Listo",
spectate="Espectear",
cancel="Cancelar",
-- cancel="Cancel ready",
},
setting_game={
title="Ajustes del Juego",
@@ -662,9 +662,6 @@ return{
-- ['master_m']= {"Master", "M21", "For 20G Masters."},
['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"},
['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_n']= {"A Ciegas", "Total", "Para jugadores intermedios."},
['blind_h']= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},

View File

@@ -279,7 +279,7 @@ return{
net_game={
-- ready="Ready",
-- spectate="Spectate",
-- cancel="Cancel",
-- cancel="Cancel ready",
},
setting_game={
title="Paramètres du jeu",
@@ -664,9 +664,6 @@ return{
['master_final']= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"},
-- ['master_ph']= {"Mester", "FANTASMA", "20G: ???"},
['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_n']= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."},
['blind_h']= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."},

View File

@@ -305,7 +305,7 @@ return{
net_game={
-- ready="Ready",
-- spectate="Spectate",
-- cancel="Cancel",
-- cancel="Cancel ready",
},
setting_game={
title="Config. de jogo",
@@ -694,9 +694,6 @@ return{
['master_final']= {"Mestre", "FINAL", "20G: Final inalcançável!"},
['master_ph']= {"Mestre", "FANTASMA", "20G: ???"},
['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_n']= {"Cego", "TUDO", "Para intermediários."},
['blind_h']= {"Cego", "DE REPENTE", "Para experientes."},
@@ -833,13 +830,16 @@ return{
"Você pode escolher uma orientação pra cada blococan.",
"ZS JL T O I",
{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 Minesweeper"},
{C.C,"Tente também osu!"},
{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 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 Jstris"},
{C.F,"Tente também Nullpomino"},

View File

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

View File

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

View File

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

View File

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

View File

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

22
parts/line.lua Normal file
View File

@@ -0,0 +1,22 @@
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_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','rhythm_e','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','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='solo_e', x=-600, y=-1000, size=40,shape=1,icon="solo", unlock={'solo_n'}},
@@ -50,10 +50,6 @@ return{
{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='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_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'}},
@@ -61,9 +57,9 @@ return{
{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='classic_e', x=-150, y=-850, size=40,shape=1,icon="classic", unlock={'classic_h'}},
{name='classic_h', x=-150, y=-970, size=35,shape=2,icon="classic", unlock={'classic_u'}},
{name='classic_u', x=-150, y=-1090, size=30,shape=2,icon="classic"},
{name='classic_e', x=-170, 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_u', x=-190, y=-1150, size=30,shape=2,icon="classic"},
{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'}},

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -7,7 +7,6 @@ local function marginTask(P)
while true do yield()if S.frame>260*60 then P.strength=4;P:setFrameColor(4)break end end
end
return{
color=COLOR.white,
env={
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'},

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,23 +0,0 @@
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,
}

View File

@@ -1,23 +0,0 @@
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,
}

View File

@@ -1,23 +0,0 @@
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,5 +1,4 @@
return{
color=COLOR.cyan,
env={
life=1,
drop=300,lock=300,

View File

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

View File

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

View File

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

View File

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

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