Compare commits

...

26 Commits

Author SHA1 Message Date
MrZ_26
efe4f5a210 版本推进 2022-01-15 19:36:26 +08:00
MrZ_26
000188ac86 修正pc是特殊消除但还是会扣因为最后是普通消除的b2b点数 2022-01-15 17:09:17 +08:00
MrZ_26
de6814bd34 修正说明书攻击系统一处顺序问题 2022-01-15 17:07:27 +08:00
MrZ_26
fac020db8c 新增一个赞助者 2022-01-15 15:51:12 +08:00
MrZ_26
d4ec3eefbb 控制台#代码环境微调 2022-01-14 01:02:57 +08:00
MrZ_26
d43e58f450 跟进调整GC模块用法 2022-01-14 01:02:40 +08:00
MrZ_26
6e9bf97d89 更新框架 2022-01-14 01:01:04 +08:00
MrZ_26
e41aefd17c 再更新staff表的翻译人员 2022-01-12 16:56:45 +08:00
MrZ_26
d96c5ca0fa 修改mini方块的实现 2022-01-12 16:24:18 +08:00
MrZ_26
4953abbb8c 更新字体
Co-authored-by: C₂₉H₂₅N₃O₅ <cgu52@wisc.edu>
2022-01-12 13:06:56 +08:00
MrZ_26
637e1a7602 staff表添加一个翻译人员 2022-01-12 12:43:33 +08:00
MrZ_26
55cc3c48be 更新日语翻译
Co-authored-by: YL3383
2022-01-12 12:43:28 +08:00
Airun
d7d9e60b1e Update lang_ja.lua (#592)
Little Fixes
2022-01-10 18:08:45 +08:00
MrZ_26
61218bb942 微调一些语言相关 2022-01-09 18:04:12 +08:00
MrZ_26
d24888cff5 加载完成后也会更新保存一下统计数据 2022-01-08 20:08:49 +08:00
MrZ_26
79cf1cf238 游戏服务器域名设置移到main最后 2022-01-07 18:17:22 +08:00
MrZ_26
1aa0d4927f 版本推进 2022-01-06 17:42:19 +08:00
MrZ_26
59ded87cee 框架跟进 2022-01-06 17:38:11 +08:00
C₂₉H₂₅N₃O₅
6496dc824c 麻将字符采用立直麻将式命名 (#587) 2022-01-06 17:36:59 +08:00
Airun
6c7aff8fd5 Update lang_ja.lua (#590)
Co-authored-by: MrZ_26 <1046101471@qq.com>
2022-01-06 17:35:58 +08:00
sakurw
ed171186a3 Update lang_ja.lua (#589) 2022-01-06 17:32:01 +08:00
MrZ_26
e3a1c9114a 超级消除也会增加b2b点数了 close #585 2022-01-05 22:59:23 +08:00
MrZ_26
4ba05ae80c 暴力修复回合制开关玩家控制的问题(开始摆烂,准备重构) 2022-01-05 19:58:19 +08:00
C₂₉H₂₅N₃O₅
30a700d0be 更新法律信息 (#584)
* 修改日语文件的小错误

* 新增麻将字符 and more

* 字体新增麻将字符
* 字体加入自动hint
* 微调几个表情包

* 更新法律信息

* 更新一个标点符号小问题
2022-01-05 19:39:34 +08:00
NOT_A_ROBOT
d2ba8b5aa9 Add Mono+do+trimino sprint mode (#578) 2022-01-05 14:35:25 +08:00
NOT_A_ROBOT
db17575ca3 Revert commit 58b8f354e0 (#577) 2022-01-05 14:34:40 +08:00
35 changed files with 614 additions and 527 deletions

View File

@@ -1,4 +1,4 @@
TECHMINO © 2019-2021 26F Studio. Some rights reserved.
TECHMINO © 20192022 26F Studio. Some rights reserved.
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.
@@ -6,13 +6,13 @@ TECHMINO and "26F Studio" are trademarks of 26F Studio. The TECHMINO game and so
"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.
Powered by LÖVE, © 20062022 LÖVE Development Team.
Lua is free software distributed under the terms of the MIT license. Copyright © 1994-2021 by Lua.org, PUC-Rio.
Lua is free software distributed under the terms of the MIT license. Copyright © 19942022 by Lua.org, PUC-Rio.
SIMPLE LOVE LIGHTS is under a MIT License. Created by Dylan Hunn.
json.lua is copyrighted by rxi. © 2021 rxi.
json.lua is copyrighted by rxi. © 2022 rxi.
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, Version 1.1.
@@ -23,7 +23,7 @@ Source Han Sans is copyrighted by Adobe Inc. Source Han Sans and Adobe are regis
JetBrains Mono is copyrighted by the JetBrains Mono Project authors. JetBrains Mono is a trademark of JetBrains s.r.o. JetBrains Mono is licensed under the SIL Open Font License, Version 1.1.
"PlayStation", "PS", "PlayStation Family Mark", "PS logo", "DualSense" and "Play Has No Limits" are registered trademarks or trademarks of Sony Interactive Entertainment Inc. "SONY" is a registered trademark of Sony Corporation. © 2021 Sony Interactive Entertainment LLC.
"PlayStation", "PS", "PlayStation Family Mark", "PS logo", "DualSense" and "Play Has No Limits" are registered trademarks or trademarks of Sony Interactive Entertainment Inc. "SONY" is a registered trademark of Sony Corporation. © 2022 Sony Interactive Entertainment LLC.
"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.
@@ -32,20 +32,20 @@ JetBrains Mono is copyrighted by the JetBrains Mono Project authors. JetBrains M
The Apple logo, "Apple Inc.," iOS, iPadOS, macOS, iPhone, and Mac are registered trademarks of Apple Inc. in the United States of America and other countries or regions.
"EA" and "Electronic Arts" are registered trademarks of Electronic Arts Inc. © 2021 Electronic Arts Inc.
"EA" and "Electronic Arts" are registered trademarks of Electronic Arts Inc. © 2022 Electronic Arts Inc.
SEGA and the SEGA logo are registered trademarks of Sega Corporation. © 2021 Sega Corporation.
SEGA and the SEGA logo are registered trademarks of Sega Corporation. © 2022 Sega Corporation.
Oculus Quest is a registered trademark of Facebook Technologies, LLC. © Meta Platforms, Inc.
"Nintendo" is a registered trademarks of Nintendo Co., Ltd. © 2021 Nintendo Co., Ltd.
"Nintendo" is a registered trademarks of Nintendo Co., Ltd. © 2022 Nintendo Co., Ltd.
N3TWORK is a registered trademark of N3TWORK Inc. © 2021 N3TWORK Inc.
N3TWORK is a registered trademark of N3TWORK Inc. © 2022 N3TWORK Inc.
GoldWave is a registered trademark of GoldWave, Inc.
Linux is a registered trademark of Linus Torvalds.
Touhou Project © Team Shanghai Alice 2002-2021.
Touhou Project © Team Shanghai Alice 20022022.
All other trademarks, logos, and copyrights are the properties of their respective owners.

View File

@@ -159,7 +159,7 @@ do--Z.setCursor
_=BLOCK_COLORS[SETTING.skin[R]]
gc_setColor(_[1],_[2],_[3],min(abs(1-time%2),.3))
_=DSCP[R][0]
gc_draw(TEXTURE.miniBlock[R],x,y,time%3.14159265359*4,16,16,_[2]+.5,#BLOCKS[R][0]-_[1]-.5)
gc_draw(TEXTURE.miniBlock[R],x,y,time%3.14159265359*4,8,8,2*_[2]+1,2*(#BLOCKS[R][0]-_[1])-1)
gc_setColor(1,1,1)
gc_draw(ms.isDown(1)and holdImg or normImg,x,y,nil,nil,nil,8,8)
end
@@ -683,3 +683,4 @@ if TABLE.find(arg,'--test')then
love.event.quit(1)
end)
end
WS.switchHost('101.43.110.22','10026','/tech/socket/v1')

View File

@@ -20,7 +20,7 @@ function back.update()
color=BLOCK_COLORS[SETTING.skin[r]],
x=SCR.w*rnd(),
y=SCR.h*-.05,
k=SCR.rad/100,
k=SCR.rad/200,
ang=rnd()*6.2832,
vy=.5+rnd()*.4,
vx=rnd()*.4-.2,

View File

@@ -47,7 +47,7 @@ function back.draw()
local M=mino[i]
local c=M.color
gc_setColor(c[1],c[2],c[3],.2)
gc_draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(18*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
gc_draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(12*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
end
gc_translate(-SCR.cx,-SCR.cy)
end

View File

@@ -6,7 +6,6 @@ local back={}
local t
local colorLib=BLOCK_COLORS
local blocks=BLOCKS
local scs=RSlist.TRS.centerPos
function back.init()
t=rnd()*2600
end
@@ -21,6 +20,6 @@ function back.draw()
end
local _=colorLib[SETTING.skin[R]]
gc.setColor(_[1],_[2],_[3],.12)
gc.draw(TEXTURE.miniBlock[R],SCR.cx,SCR.cy,t%3.1416*6,400*SCR.k,nil,scs[R][0][2]+.5,#blocks[R][0]-scs[R][0][1]-.5)
gc.draw(TEXTURE.miniBlock[R],SCR.cx,SCR.cy,t%3.1416*6,200*SCR.k,nil,2*DSCP[R][0][2]+1,2*(#blocks[R][0]-DSCP[R][0][1])-1)
end
return back

View File

@@ -213,89 +213,89 @@ local L={
psOption= 0xF01A5,
},
mahjong={--F0200~F027F
wan1= 0xF0200,
wan2= 0xF0201,
wan3= 0xF0202,
wan4= 0xF0203,
wan5= 0xF0204,
wan6= 0xF0205,
wan7= 0xF0206,
wan8= 0xF0207,
wan9= 0xF0208,
tiao1= 0xF0209,
tiao2= 0xF020A,
tiao3= 0xF020B,
tiao4= 0xF020C,
tiao5= 0xF020D,
tiao6= 0xF020E,
tiao7= 0xF020F,
tiao8= 0xF0210,
tiao9= 0xF0211,
tong1= 0xF0212,
tong2= 0xF0213,
tong3= 0xF0214,
tong4= 0xF0215,
tong5= 0xF0216,
tong6= 0xF0217,
tong7= 0xF0218,
tong8= 0xF0219,
tong9= 0xF021A,
east= 0xF021B,
south= 0xF021C,
west= 0xF021D,
north= 0xF021E,
center= 0xF021F,
fortune= 0xF0220,
soap= 0xF0221,
fortuneAlt= 0xF0222,
soapAlt= 0xF0223,
spring= 0xF0224,
summer= 0xF0225,
autumn= 0xF0226,
winter= 0xF0227,
plum= 0xF0228,
orchid= 0xF0229,
chry= 0xF022A,
bamboo= 0xF022B,
wan5Red= 0xF022C,
tiao5Red= 0xF022D,
tong5Red= 0xF022E,
wan1Base= 0xF022F,
wan2Base= 0xF0230,
wan3Base= 0xF0231,
wan4Base= 0xF0232,
wan5Base= 0xF0233,
wan6Base= 0xF0234,
wan7Base= 0xF0235,
wan8Base= 0xF0236,
wan9Base= 0xF0237,
wanComb= 0xF0238,
tiao1Base= 0xF0239,
tiao1Comb= 0xF023A,
tiao5Base= 0xF023B,
tiao5Comb= 0xF023C,
tiao7Base= 0xF023D,
tiao7Comb= 0xF023E,
tiao9Base= 0xF023F,
tiao9Comb= 0xF0240,
tong2Base= 0xF0241,
tong2Comb= 0xF0242,
tong3Base= 0xF0243,
tong3Comb1= 0xF0244,
tong3Comb2= 0xF0245,
tong4Base= 0xF0246,
tong4Comb= 0xF0247,
tong5Base= 0xF0248,
tong5Comb1= 0xF0249,
tong5Comb2= 0xF024A,
tong6Base= 0xF024B,
tong6Comb= 0xF024C,
tong7Base= 0xF024D,
tong7Comb= 0xF024E,
tong9Base= 0xF024F,
tong9Comb1= 0xF0250,
tong9Comb2= 0xF0251,
frameComb= 0xF0252,
m1= 0xF0200,
m2= 0xF0201,
m3= 0xF0202,
m4= 0xF0203,
m5= 0xF0204,
m6= 0xF0205,
m7= 0xF0206,
m8= 0xF0207,
m9= 0xF0208,
s1= 0xF0209,
s2= 0xF020A,
s3= 0xF020B,
s4= 0xF020C,
s5= 0xF020D,
s6= 0xF020E,
s7= 0xF020F,
s8= 0xF0210,
s9= 0xF0211,
p1= 0xF0212,
p2= 0xF0213,
p3= 0xF0214,
p4= 0xF0215,
p5= 0xF0216,
p6= 0xF0217,
p7= 0xF0218,
p8= 0xF0219,
p9= 0xF021A,
ton= 0xF021B,
nan= 0xF021C,
sha= 0xF021D,
pe= 0xF021E,
chun= 0xF021F,
hatsu= 0xF0220,
haku= 0xF0221,
hatsuAlt= 0xF0222,
hakuAlt= 0xF0223,
haru= 0xF0224,
natsu= 0xF0225,
aki= 0xF0226,
fuyu= 0xF0227,
ume= 0xF0228,
ran= 0xF0229,
kiku= 0xF022A,
take= 0xF022B,
m5Red= 0xF022C,
s5Red= 0xF022D,
p5Red= 0xF022E,
m1Base= 0xF022F,
m2Base= 0xF0230,
m3Base= 0xF0231,
m4Base= 0xF0232,
m5Base= 0xF0233,
m6Base= 0xF0234,
m7Base= 0xF0235,
m8Base= 0xF0236,
m9Base= 0xF0237,
mComb= 0xF0238,
s1Base= 0xF0239,
s1Comb= 0xF023A,
s5Base= 0xF023B,
s5Comb= 0xF023C,
s7Base= 0xF023D,
s7Comb= 0xF023E,
s9Base= 0xF023F,
s9Comb= 0xF0240,
p2Base= 0xF0241,
p2Comb= 0xF0242,
p3Base= 0xF0243,
p3Comb1= 0xF0244,
p3Comb2= 0xF0245,
p4Base= 0xF0246,
p4Comb= 0xF0247,
p5Base= 0xF0248,
p5Comb1= 0xF0249,
p5Comb2= 0xF024A,
p6Base= 0xF024B,
p6Comb= 0xF024C,
p7Base= 0xF024D,
p7Comb= 0xF024E,
p9Base= 0xF024F,
p9Comb1= 0xF0250,
p9Comb2= 0xF0251,
frameComb= 0xF0252,
}
}

View File

@@ -6,7 +6,7 @@ return{
mText(TEXTOBJ.pc,63,410)
end,
hook_drop=function(P)
if P.lastPiece.pc and P.stat.row%4==0 then
if P.lastPiece.pc then
P.gameEnv.heightLimit=4
if P.stat.pc%5==0 then
P.gameEnv.drop=math.max(P.gameEnv.drop-1,1)

BIN
parts/fonts/japan.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -116,9 +116,9 @@ return{
noPassword="Please enter your password",
diffPassword="Passwords don't match",
registerRequestSent="A sign up request has been sent.",
registerSuccessed="Sign up successful!",
loginSuccessed="You are now logged in!",
accessSuccessed="Access granted",
registerOK="Sign up successful!",
loginOK="You are now logged in!",
accessOK="Access granted",
wsConnecting="Websocket connecting…",
wsFailed="WebSocket connection failed",
@@ -276,6 +276,8 @@ return{
"C₂₉H₂₅N₃O₅",
"NOT_A_ROBOT",
"sakurw",
"Airun",
"幽灵3383",
"",
"Performances",
"Electric283",

View File

@@ -105,9 +105,9 @@ return{
noPassword="Por favor ingresa una contraseña",
diffPassword="Las contraseñas no coinciden",
registerRequestSent="Petición de registro enviada con éxito",
registerSuccessed="¡Registro exitoso!",
loginSuccessed="¡Ingreso con éxito!",
accessSuccessed="¡Autorizado exitoso!",
registerOK="¡Registro exitoso!",
loginOK="¡Ingreso con éxito!",
accessOK="¡Autorizado exitoso!",
wsConnecting="Websocket Conectando",
wsFailed="WebSocket conexión fallida",

View File

@@ -106,9 +106,9 @@ return{
noPassword="Entrez votre mot de passe",
diffPassword="Les mots de passe ne se correspondent pas",
-- registerRequestSent="Registration request sent",
registerSuccessed="Enregistré avec succès !",
loginSuccessed="Connecté avec succès !",
accessSuccessed="Autorisé avec succès !",
registerOK="Enregistré avec succès !",
loginOK="Connecté avec succès !",
accessOK="Autorisé avec succès !",
-- wsConnecting="Websocket Connecting",
wsFailed="WebSocket connection échouée",
@@ -242,6 +242,8 @@ return{
"C₂₉H₂₅N₃O₅",
"NOT_A_ROBOT",
"sakurw",
"Airun",
"幽灵3383",
"",
"Performance",
"Electric283",

View File

@@ -117,9 +117,9 @@ return{
noPassword="Silahkan masukki kata sandi Anda",
diffPassword="Kata sandi tidak sama",
registerRequestSent="Permintaan daftar telah terkirim.",
registerSuccessed="Pendaftaran sukses!",
loginSuccessed="Anda sekarang tergabung!",
accessSuccessed="Akses diberikan",
registerOK="Pendaftaran sukses!",
loginOK="Anda sekarang tergabung!",
accessOK="Akses diberikan",
wsConnecting="Menghubungkan websocket…",
wsFailed="Koneksi websocket gagal",
@@ -277,6 +277,8 @@ return{
"C₂₉H₂₅N₃O₅",
"NOT_A_ROBOT",
"sakurw",
"Airun",
"幽灵3383",
"",
"Pertunjukan",
"Electric283",

File diff suppressed because it is too large Load Diff

View File

@@ -104,9 +104,9 @@ return{
noPassword="Insira sua senha ",
diffPassword="Senhas não combinam",
-- registerRequestSent="Registration request sent",
registerSuccessed="Registrado com sucesso!",
loginSuccessed="Logado com sucesso!",
accessSuccessed="Autorizado com sucesso!",
registerOK="Registrado com sucesso!",
loginOK="Logado com sucesso!",
accessOK="Autorizado com sucesso!",
-- wsConnecting="Websocket Connecting",
wsFailed="WebSocket falha na conexão",
@@ -264,6 +264,8 @@ return{
"C₂₉H₂₅N₃O₅",
"NOT_A_ROBOT",
"sakurw",
"Airun",
"幽灵3383",
"",
"Performance",
"Electric283",

View File

@@ -116,9 +116,9 @@ return{
noPassword="请填写密码",
diffPassword="两次密码不一致",
registerRequestSent="注册请求已发送",
registerSuccessed="注册成功!",
loginSuccessed="登录成功",
accessSuccessed="身份验证成功",
registerOK="注册成功!",
loginOK="登录成功",
accessOK="身份验证成功",
wsConnecting="正在连接",
wsFailed="连接失败",
@@ -275,6 +275,9 @@ return{
"ScF",
"C₂₉H₂₅N₃O₅",
"NOT_A_ROBOT",
"sakurw",
"Airun",
"幽灵3383",
"",
"Performances",
"Electric283",

View File

@@ -114,9 +114,9 @@ return{
noPassword="输入您的密码",
diffPassword="密码不匹配",
registerRequestSent="已发送注册请求",
registerSuccessed="注册成功!",
loginSuccessed="您现在已登录!",
accessSuccessed="允许访问",
registerOK="注册成功!",
loginOK="您现在已登录!",
accessOK="允许访问",
wsConnecting="双向通信连接",
wsFailed="双向通信连接失败",
@@ -273,6 +273,9 @@ return{
"氟化钪",
"蛋白激酶G抑制剂",
"不是机器人",
"萨库尔",
"爱伦",
"幽灵3383",
"",
"性能",
"电动283",

View File

@@ -116,9 +116,9 @@ return{
noPassword="請輸入密碼",
diffPassword="密碼不匹配",
registerRequestSent="已發送註冊請求",
registerSuccessed="註冊成功!",
loginSuccessed="登錄成功",
accessSuccessed="身份認證成功",
registerOK="註冊成功!",
loginOK="登錄成功",
accessOK="身份認證成功",
wsConnecting="正在連接……",
wsFailed="連接失敗",
@@ -276,6 +276,8 @@ return{
"C₂₉H₂₅N₃O₅",
"NOT_A_ROBOT",
"sakurw",
"Airun",
"幽灵3383",
"",
"Performances",
"Electric283",

View File

@@ -31,6 +31,9 @@ Attack system:
Special line clears will the increase B2B gauge, making later special line clears have either a B2B or B2B2B bonus (see below)
Combos: All damage above will be given a (combo x25%) bonus, or (combo x15%) for Single clear (capped at 12 combo),
+1 more attack for 3 Combo or more.
Hemi Perfect Clear (a P.C. "with blocks left below". If it's an I clearing 1 line, the remaining blocks must not be player-placed):
Attack +4, Extra Blocking +2
@@ -38,8 +41,6 @@ Attack system:
Sends 8 to 16 (increments within a game by 2 for every PC) OR every other damage above, whichever is higher,
and +2 extra blocking.
Combos: All damage above will be given a (combo x25%) bonus, or (combo x15%) for Single clear (capped at 12 combo),
+1 more attack for 3 Combo or more.
After calculating all above, the damage value will be rounded down then sent
Score system:

View File

@@ -26,9 +26,9 @@ spin判定:
B2B攻击+1
B3B攻击+50%,+1额外抵挡
特殊消除会增加B2B点数,让之后的特殊消除获得B2B(B3B)增益(详细说明见下文)
连击:每次连击给予上述攻击[连击数*25%(上限12连)(如果只消一行就是15%)]的加成,>=3次时再额外加1攻击
半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):伤害+4,额外抵挡+2
全消:全消伤害为8~16(本局内递增2),和上述其他伤害取大,然后+2额外抵挡
连击:每次连击给予上述攻击[连击数*25%(上限12连)(如果只消一行就是15%)]的加成,>=3次时再额外加1攻击
根据上述规则计算后,向下取整,攻击打出
分数系统:

22
parts/modes/sprint123.lua Normal file
View File

@@ -0,0 +1,22 @@
return{
env={
drop=60,lock=60,
sequence='bag',seqData={26,27,28,29},
eventSet='checkLine_40',
bg='bg2',bgm='race',
},
score=function(P)return{P.stat.time,P.stat.piece}end,
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
comp=function(a,b)return a[1]<b[1]or(a[1]==b[1]and a[2]<b[2])end,
getRank=function(P)
if P.stat.row<40 then return end
local T=P.stat.time
return
T<=42 and 5 or
T<=62 and 4 or
T<=104 and 3 or
T<=130 and 2 or
T<=160 and 1 or
0
end,
}

View File

@@ -467,14 +467,14 @@ function NET.updateWS_user()
SCN.back()
end
end
MES.new('check',text.loginSuccessed)
MES.new('check',text.loginOK)
--Get self infos
NET.getUserInfo(USER.uid)
NET.unlock('wsc_user')
elseif res.action==0 then--Get accessToken
NET.accessToken=res.accessToken
MES.new('check',text.accessSuccessed)
MES.new('check',text.accessOK)
NET.wsconn_play()
elseif res.action==1 then--Get userInfo
USERS.updateUserData(res.data)

View File

@@ -130,4 +130,5 @@ return{
{font=25,name="江江江江17"},
{font=25,name="TetraCepra"},
{font=25,name="爱抢姐姐布丁的芙兰酱(CHNO)"},
{font=25,name="你的忘机已上羡"},
}

View File

@@ -782,7 +782,7 @@ function draw.norm(P,repMode)
_drawFXs(P)
--Draw current block
if P.alive and P.cur then
if P.alive and P.control and P.cur then
local C=P.cur
local curColor=C.color
@@ -1021,7 +1021,7 @@ function draw.demo(P)
local _=BLOCK_COLORS[skinSet[id]]
gc_setColor(_[1],_[2],_[3],.3)
_=blockImg[id]
gc_draw(_,15,40*N-10,nil,16,nil,0,_:getHeight()*.5)
gc_draw(_,15,40*N-10,nil,8,nil,0,_:getHeight()*.5)
N=N+1
end
@@ -1032,7 +1032,7 @@ function draw.demo(P)
local _=BLOCK_COLORS[skinSet[id]]
gc_setColor(_[1],_[2],_[3],.3)
_=blockImg[id]
gc_draw(_,285,40*N-10,nil,16,nil,_:getWidth(),_:getHeight()*.5)
gc_draw(_,285,40*N-10,nil,8,nil,_:getWidth(),_:getHeight()*.5)
N=N+1
end

View File

@@ -217,6 +217,7 @@ function Player:_deepDrop()
end
end
function Player:act_moveLeft(auto)
if not self.control then return end
if not auto then
self.ctrlCount=self.ctrlCount+1
end
@@ -238,6 +239,7 @@ function Player:act_moveLeft(auto)
end
end
function Player:act_moveRight(auto)
if not self.control then return end
if not auto then
self.ctrlCount=self.ctrlCount+1
end
@@ -259,6 +261,7 @@ function Player:act_moveRight(auto)
end
end
function Player:act_rotRight()
if not self.control then return end
if self.cur then
self.ctrlCount=self.ctrlCount+1
self:spin(1)
@@ -266,6 +269,7 @@ function Player:act_rotRight()
end
end
function Player:act_rotLeft()
if not self.control then return end
if self.cur then
self.ctrlCount=self.ctrlCount+1
self:spin(3)
@@ -273,6 +277,7 @@ function Player:act_rotLeft()
end
end
function Player:act_rot180()
if not self.control then return end
if self.cur then
self.ctrlCount=self.ctrlCount+2
self:spin(2)
@@ -280,6 +285,7 @@ function Player:act_rot180()
end
end
function Player:act_hardDrop()
if not self.control then return end
local ENV=self.gameEnv
if self.cur then
if self.lastPiece.autoLock and self.frameRun-self.lastPiece.frame<ENV.dropcut then
@@ -305,6 +311,7 @@ function Player:act_hardDrop()
end
end
function Player:act_softDrop()
if not self.control then return end
self.downing=0
if self.cur then
if self.curY>self.ghoY then
@@ -325,6 +332,7 @@ function Player:act_softDrop()
end
end
function Player:act_hold()
if not self.control then return end
if self.cur then
if self:hold()then
self.keyPressing[8]=false
@@ -332,13 +340,16 @@ function Player:act_hold()
end
end
function Player:act_func1()
if not self.control then return end
self.gameEnv.fkey1(self)
end
function Player:act_func2()
if not self.control then return end
self.gameEnv.fkey2(self)
end
function Player:act_insLeft(auto)
if not self.control then return end
if not self.cur then
return
end
@@ -364,6 +375,7 @@ function Player:act_insLeft(auto)
end
end
function Player:act_insRight(auto)
if not self.control then return end
if not self.cur then
return
end
@@ -389,6 +401,7 @@ function Player:act_insRight(auto)
end
end
function Player:act_insDown()
if not self.control then return end
if self.cur and self.curY>self.ghoY then
local ENV=self.gameEnv
self:createDropFX()
@@ -403,6 +416,7 @@ function Player:act_insDown()
end
end
function Player:act_down1()
if not self.control then return end
if self.cur then
if self.curY>self.ghoY then
self:createMoveFX('down')
@@ -415,6 +429,7 @@ function Player:act_down1()
end
end
function Player:act_down4()
if not self.control then return end
if self.cur then
if self.curY>self.ghoY then
local ghoY0=self.ghoY
@@ -429,6 +444,7 @@ function Player:act_down4()
end
end
function Player:act_down10()
if not self.control then return end
if self.cur then
if self.curY>self.ghoY then
local ghoY0=self.ghoY
@@ -443,18 +459,21 @@ function Player:act_down10()
end
end
function Player:act_dropLeft()
if not self.control then return end
if self.cur then
self:act_insLeft()
self:act_hardDrop()
end
end
function Player:act_dropRight()
if not self.control then return end
if self.cur then
self:act_insRight()
self:act_hardDrop()
end
end
function Player:act_zangiLeft()
if not self.control then return end
if self.cur then
self:act_insLeft()
self:act_insDown()
@@ -463,6 +482,7 @@ function Player:act_zangiLeft()
end
end
function Player:act_zangiRight()
if not self.control then return end
if self.cur then
self:act_insRight()
self:act_insDown()
@@ -1784,6 +1804,17 @@ do
VOC.play(clearVoice[cc],CHN)
end
--PC/HPC check
if clear and cc>=#C.bk then
if CY==1 then
piece.pc=true
piece.special=true
elseif cc>1 or self.field[#self.field].garbage then
piece.hpc=true
piece.special=true
end
end
--Normal clear,reduce B2B point
if not piece.special then
self.b2b=max(self.b2b-250,0)
@@ -1804,40 +1835,34 @@ do
cscore=cscore+min(50*cmb,500)*(2*cc-1)
end
--PC/HPC
if clear and cc>=#C.bk then
if CY==1 then
self:showText(text.PC,0,-80,50,'flicker')
atk=max(atk,min(8+Stat.pc*2,16))
exblock=exblock+2
sendTime=sendTime+120
if Stat.row+cc>4 then
self.b2b=self.b2b+800
cscore=cscore+300*min(6+Stat.pc,10)
else
cscore=cscore+626
end
Stat.pc=Stat.pc+1
if self.sound then
SFX.play('pc')
VOC.play('perfect_clear',CHN)
end
piece.pc=true
piece.special=true
elseif cc>1 or self.field[#self.field].garbage then
self:showText(text.HPC,0,-80,50,'fly')
atk=atk+4
exblock=exblock+2
sendTime=sendTime+60
self.b2b=self.b2b+100
--PC/HPC effect
if piece.pc then
self:showText(text.PC,0,-80,50,'flicker')
atk=max(atk,min(8+Stat.pc*2,16))
exblock=exblock+2
sendTime=sendTime+120
if Stat.row+cc>4 then
self.b2b=self.b2b+800
cscore=cscore+300*min(6+Stat.pc,10)
else
cscore=cscore+626
Stat.hpc=Stat.hpc+1
if self.sound then
SFX.play('pc')
VOC.play('half_clear',CHN)
end
piece.hpc=true
piece.special=true
end
Stat.pc=Stat.pc+1
if self.sound then
SFX.play('pc')
VOC.play('perfect_clear',CHN)
end
elseif piece.hpc then
self:showText(text.HPC,0,-80,50,'fly')
atk=atk+4
exblock=exblock+2
sendTime=sendTime+60
self.b2b=self.b2b+100
cscore=cscore+626
Stat.hpc=Stat.hpc+1
if self.sound then
SFX.play('pc')
VOC.play('half_clear',CHN)
end
end
@@ -2057,6 +2082,11 @@ do
if _cc>6 then self:showText(text.cleared:gsub("$1",_cc),0,55,30,'zoomout',.4)end
self:_removeClearedLines()
self:_updateFalling(self.gameEnv.fall)
if _cc>=4 then
self.b2b=min(self.b2b+_cc*50-50,1000)
else
self.b2b=max(self.b2b-250,0)
end
self.stat.row=self.stat.row+_cc
self.stat.dig=self.stat.dig+_gbcc
self.stat.score=self.stat.score+clearSCR[_cc]

View File

@@ -10,7 +10,7 @@ local function log(str)outputBox:push(str)end
_SCLOG=log
log{C.lP,"Techmino Console"}
log{C.lC,"©2021 26F Studio some rights reserved"}
log{C.lC,"© Copyright 20192022 26F Studio. Some rights reserved."}
log{C.dR,"WARNING: DO NOT RUN ANY CODE THAT YOU DON'T UNDERSTAND."}
local history,hisPtr={"?"}
@@ -976,7 +976,7 @@ local userG={
-- collectgarbage=collectgarbage,
math={},string={},table={},bit={},coroutine={},
debug={"No way."},package={"No way."},io={"No way."},os={"No way."},
debug={},package={},io={},os={},
}
function userG.print(...)
local args,L={...},{}
@@ -999,6 +999,11 @@ TABLE.complete(string,userG.string)userG.string.dump=nil
TABLE.complete(table,userG.table)
TABLE.complete(bit,userG.bit)
TABLE.complete(coroutine,userG.coroutine)
local dangerousLibMeta={__index=function()error("No way.")end}
setmetatable(userG.debug,dangerousLibMeta)
setmetatable(userG.package,dangerousLibMeta)
setmetatable(userG.io,dangerousLibMeta)
setmetatable(userG.os,dangerousLibMeta)
--Puzzle box
local first_key={}

View File

@@ -207,7 +207,7 @@ function scene.draw()
local r=TIME()*2
local R=int(r)%7+1
gc.setColor(1,1,1,1-abs(r%1*2-1))
gc.draw(TEXTURE.miniBlock[R],821,140,TIME()*10%6.2832,15,15,DSCP[R][0][2]+.5,#BLOCKS[R][0]-DSCP[R][0][1]-.5)
gc.draw(TEXTURE.miniBlock[R],821,140,TIME()*10%6.2832,7,7,2*DSCP[R][0][2]+1,2*(#BLOCKS[R][0]-DSCP[R][0][1])-1)
end
end

View File

@@ -113,6 +113,7 @@ local loadingThread=coroutine.wrap(function()
VOC.play('welcome')
THEME.fresh()
LOADED=true
saveStats()
Z.setPowerInfo(SETTING.powerInfo)
return'finish'
end)

View File

@@ -281,7 +281,7 @@ function scene.draw()
gc.push('transform')
gc.scale((3-2*timer2)*timer2)
gc.setColor(.97,.97,.97,timer2*(.5+.3*sin(TIME()*6.26)))
GC.regularPolygon('line',0,0,120,6,8)
GC.regRoundPolygon('line',0,0,120,6,8)
gc.setColor(chartColor[1],chartColor[2],chartColor[3],timer2*.626)
for i=1,9,2 do
gc.polygon('fill',0,0,val[i],val[i+1],val[i+2],val[i+3])
@@ -350,13 +350,13 @@ scene.widgetList={
WIDGET.newKey{name='quit', x=290,y=540,w=300,h=70,code=pressKey'q'},
WIDGET.newKey{name='tas', x=290,y=620,w=240,h=50,code=pressKey't',hideF=function()return not SETTING.allowTAS or GAME.tasUsed or GAME.result or GAME.replaying end},
WIDGET.newKey{name='page_prev',x=500,y=390,w=70,code=pressKey'tab',
fText=GC.DO{70,70,{'setLW',2}, {'dRPol',33,35,32,3,6,3.142},{'dRPol',45,35,32,3,6,3.142}},
fShade=GC.DO{70,70,{'setCL',1,1,1,.4},{'draw',GC.DO{70,70,{'setCL',1,1,1,1},{'fRPol',33,35,32,3,6,3.142},{'fRPol',45,35,32,3,6,3.142}}}},
fText=GC.DO{70,70,{'setLW',2}, {'dRRPol',33,35,32,3,6,3.142},{'dRRPol',45,35,32,3,6,3.142}},
fShade=GC.DO{70,70,{'setCL',1,1,1,.4},{'draw',GC.DO{70,70,{'setCL',1,1,1,1},{'fRRPol',33,35,32,3,6,3.142},{'fRRPol',45,35,32,3,6,3.142}}}},
hideF=function()return PLAYERS[1].frameRun<=180 end,
},
WIDGET.newKey{name='page_next',x=1230,y=390,w=70,code=pressKey'Stab',
fText=GC.DO{70,70,{'setLW',2}, {'dRPol',37,35,32,3,6},{'dRPol',25,35,32,3,6}},
fShade=GC.DO{70,70,{'setCL',1,1,1,.4},{'draw',GC.DO{70,70,{'setCL',1,1,1,1},{'fRPol',37,35,32,3,6},{'fRPol',25,35,32,3,6}}}},
fText=GC.DO{70,70,{'setLW',2}, {'dRRPol',37,35,32,3,6},{'dRRPol',25,35,32,3,6}},
fShade=GC.DO{70,70,{'setCL',1,1,1,.4},{'draw',GC.DO{70,70,{'setCL',1,1,1,1},{'fRRPol',37,35,32,3,6},{'fRRPol',25,35,32,3,6}}}},
hideF=function()return PLAYERS[1].frameRun<=180 end,
},
WIDGET.newKey{name='replay', x=865,y=165,w=200,h=40,font=25,code=pressKey'p',hideF=function()return not(GAME.result or GAME.replaying)or #PLAYERS>1 end},

View File

@@ -16,10 +16,10 @@ do
gc.setColor(1,1,1)
for i=1,29 do
local b=BLOCKS[i][0]
TEXTURE.miniBlock[i]=NSC(#b[1],#b)
TEXTURE.miniBlock[i]=NSC(#b[1]*2,#b*2)
for y=1,#b do for x=1,#b[1]do
if b[y][x]then
gc.rectangle('fill',x-1,#b-y,1,1)
gc.rectangle('fill',2*(x-1),2*(#b-y),2,2)
end
end end
end

View File

@@ -17,17 +17,22 @@ return[=[
全新模式选择界面(未完善,未来会增加更多便利功能)
新皮肤:pixel(by C₂₉H₂₅N₃O₅)
新语言:Bahasa Indonesia(by NOT_A_ROBOT)
新语言:日本語(by sakurw)
新语言:日本語(by sakurw & Airun & 幽灵3383)
新小程序:Stopwatch, Mahjong(无和牌检测)
新模式:1~3连块40行(by NOT_A_ROBOT) #578
新BGM:lounge(暂未使用, by Hailey (cudsys) & MrZ)
更强的CC(会主动allspin了, by Gompyn) #579
改动:
修改选择模式音效
优化皮肤设置页面交互效果
移除yygq语言
重做staff表
更新字体
移除yygq语言
优化皮肤设置页面交互效果
换新miya立绘,给不同立绘添加不同点击动画
由于一些无关紧要的小原因暂时移除一个语音包
略微降低master-h模式骨块出现后的难度
超级消除也会增加b2b点数了 #585
两行pc还是会重置限制线吧 #577
重做关于页面,微调设置菜单
TRS的N/H添加一个踢墙
词条标题必定可以被搜索
@@ -51,11 +56,14 @@ return[=[
经典模式h和u难度没有干旱计数器 #546
自定义场地16号色的方块名位置显示错误
联网对战结算的l'pm公式错写成lpm的
PC时最后一块若非特殊消除会先扣除b2b点数
录像界面导入导出按钮隐藏状态错误
登录界面读取本地账号密码数据错误
回合制开关玩家控制的问题
策略堆叠模式评级标准不当
云存档/读档的一处小问题
部分场景文本重叠问题
说明书的一处小问题
deepdrop坏了
混战模式坏了

View File

@@ -11,7 +11,7 @@ for i=1,29 do
local img=TEXTURE.miniBlock[i]
defaultAvatar[i]=GC.DO{128,128,
{'clear',.1,.1,.1},
{'draw',img,63,63,.2,30,30,img:getWidth()/2,img:getHeight()/2},
{'draw',img,63,63,.2,15,15,img:getWidth()/2,img:getHeight()/2},
}
end
local errorAvatar=GC.DO{128,128,

View File

@@ -1,5 +1,5 @@
return{
["apkCode"]=426,
["apkCode"]=427,
["code"]=1701,
["string"]="V0.17.1",
["room"]="ver A-3",