Compare commits

...

16 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
30 changed files with 299 additions and 264 deletions

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

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",

View File

@@ -2,22 +2,22 @@ local C=COLOR
return{
fallback='en',
loadText={
loadSFX="SEをロード中",
loadSFX="効果音をロード中",
loadSample="楽器のサンプル音をロード中",
loadVoice="ボイスパックをロード中",
loadFont="フォントをロード中",
loadModeIcon="モードアイコンをロード中",
loadMode="モードをロード中",
loadOther="他の重要なアセットをロード中",
loadOther="他の重要なアセットをロード中",
finish="好きなキーを押してスタート!",
},
sureQuit="終了するにはもう一度押してください",
sureReset="リセットするにはもう一度押してください",
sureDelete="削除するにはもう一度押してください",
sureQuit="終了するにはもう一度押してください!",
sureReset="リセットするにはもう一度押してください!",
sureDelete="削除するにはもう一度押してください!",
newDay="新しい1日、新しい始まりです!",
playedLong="長時間プレイしています、適度に休憩を!",
playedLong="長時間プレイしています、適度に休憩をして!",
playedTooMuch="かなり長くプレイしています! Techminoは楽しいですが、休憩を忘れずに!",
settingWarn="注意: 通常ではない設定変更しました!",
settingWarn="使用頻度の低い設定変更しています。注意してください。",
atkModeName={"ランダム","バッジ狙い","トドメ撃ち","カウンター"},
royale_remain="残り $1 人",
@@ -36,49 +36,49 @@ return{
awesome="すごい!",
almost="あと少し!",
continue="がんばれ!",
maxspeed="高速度!",
speedup="スピードアップ!",
maxspeed="高速度!",
speedup="スピードアップ!",
missionFailed="失敗…",
speedLV="Speed Level",
piece="Piece",line="Lines",atk="火力",eff="効率",
speedLV="レベル",
piece="ミノ数",line="ライン数",atk="火力",eff="効率",
rpm="RPM",tsd="TSD",
grade="Grade",techrash="Techrash",
wave="Wave",nextWave="Next",
combo="REN",maxcmb="Max REN",
pc="Perfect Clear",ko="KOs",
win="勝利!",
lose="負け…",
win="Win!",
lose="Lose",
finish="終了",
gamewin="君の勝ち!",
gameover="ゲームオーバー…",
finish="Finished",
gamewin="You Won",
gameover="Game Over",
pause="ポーズ",
pauseCount="ポーズした回数",
finesse_ap="オールパーフェクト",
finesse_fc="フルコンボ",
finesse_ap="All Perfect",
finesse_fc="Full Combo",
page="ページ:",
cc_fixed="CCは固定されたミ順に非対応です!",
cc_swap="CCはホールドモードがSwapの時に非対応です!",
ai_prebag="AIは通常のテトロミではない物やカスタマイズされたミ順に非対応です!",
cc_swap="CCはホールドモードがSwapの時に非対応です!",
ai_prebag="AIは通常のテトロミではない物やカスタマイズされたミ順に非対応です!",
ai_mission="AIはカスタムミッションに非対応です!",
switchSpawnSFX="ブロック出現時のSFXをONにしてください!",
needRestart="すべての変更を適用するために再起動してください!",
switchSpawnSFX="ブロック出現時の効果音をONにしてください!",
needRestart="すべての変更を適用するに再起動してください!",
loadError_errorMode="'$1'の読み込みに失敗: ロードモード'$2'が存在しません",
loadError_read="'$1'の読み込みに失敗: 読み込みに失敗しました",
loadError_noFile="'$1'の読み込みに失敗: ファイルが存在しません",
loadError_other="'$1'の読み込みに失敗: $2",
loadError_unknown="'$1'の読み込みに失敗: 原因不明",
loadError_unknown="'$1'の読み込みに失敗: 原因不明です",
saveError_duplicate="'$1'の保存に失敗: 既に同じ名前のファイルがあります",
saveError_encode="'$1'の保存に失敗: エンコードエラー",
saveError_other="'$1'の保存に失敗: $2",
saveError_unknown="'$1'の保存に失敗: 原因不明",
saveError_unknown="'$1'の保存に失敗: 原因不明です",
copyDone="コピーしました!",
saveDone="データを保存しました!",
@@ -96,8 +96,8 @@ return{
noScore="スコア無し",
modeLocked="ロック",
unlockHint="Rank B以上を取得すると解放されるよ!",
highScore="ハイスコア",
unlockHint="ランクB以上を取得すると解放されるよ!",
highScore="最高得点",
newRecord="新記録!",
replayBroken="リプレイが読み込めませんでした",
@@ -105,10 +105,10 @@ return{
dictNote="==TetroDictionaryからコピーしました==",
getNoticeFail="お知らせ情報を取得できませんでした",
oldVersion="Version $1が取得できます!",
needUpdate="最新のVersionを取得してください!",
versionNotMatch="Versionsが一致しません!",
notFinished="工事中!",
oldVersion="バージョン$1のダウンロードが可能になりました",
needUpdate="最新バージョンに更新してください",
versionNotMatch="バージョンが一致しません",
notFinished="未完成ですので、ご期待ください",
jsonError="JSONエラー",
@@ -117,16 +117,16 @@ return{
noPassword="パスワードを入力してください!",
diffPassword="パスワードが一致しません!",
registerRequestSent="Sign Upリクエストを送信しました!",
registerSuccessed="Sign Up成功!",
loginSuccessed="ログインしています!",
accessSuccessed="アクセス権限を取得しました!",
registerOK="サインアップ成功!",
loginOK="ログインしています!",
accessOK="アクセス権限を取得しました!",
wsConnecting="ウェブソケットに接続中…",
wsFailed="ウェブソケットとの通信に失敗しました",
wsClose="ウェブソケットとの通信を終了:",
netTimeout="接続がタイムアウトしました",
onlinePlayerCount="オンライン",
onlinePlayerCount="オンライン人数",
createRoomSuccessed="部屋を建てました",
started="プレイ中",
joinRoom="が入室しました",
@@ -134,7 +134,7 @@ return{
ready="準備OK",
connStream="接続中……",
waitStream="待機中……",
spectating="観戦",
spectating="観戦",
chatRemain="オンライン",
chatStart="------チャットの先頭------",
chatHistory="------新しいメッセージ------",
@@ -169,10 +169,10 @@ return{
noMove="No Movement\n左右移動が出来なくなります",
customSeq="Randomizer\nミノの出現法則を変更します",
pushSpeed="Garbage Speed\n下穴がせり上がるまでに置けるブロック数を変更します (ブロック数/フレーム)",
boneBlock="[ ]\n[ ]ブロックで遊ぼう",
boneBlock="[ ]\nブロックで遊ぼう",
},
pauseStat={
"Time:",
"時間:",
"入力数/回転数/ホールド数:",
"ミノ数:",
"列数/掘った列:",
@@ -207,15 +207,15 @@ return{
"ゲームは、必ず公式から入手してください",
"他から入手した場合は、安全性を保証しません",
"同時に作者は、責任を負いません",
FNNS and"/"or"ゲーム自体は無料ですが寄付をお願いします",
FNNS and"/"or"ゲーム自体は無料ですが寄付できるならありがたいです。",
FNNS and"/"or"詳しくはZictionaryをご覧ください",
},
staff={
"オリジナルは「MrZ」",
"E-Mail先は: 1046101471@qq.com",
"作者「MrZ」",
"Eメール先は: 1046101471@qq.com」まで",
"",
"プログラム、開発、デザイン",
"MrZ",
"MrZ",
"",
"楽曲作成ツール",
"Beepbox",
@@ -261,7 +261,7 @@ return{
"(Aether)",
"(Hailey)",
"",
"SFXとボイスパック",
"効果音とボイスパック",
"Miya",
"Xiaoya",
"Mono",
@@ -276,6 +276,9 @@ return{
"ScF",
"C₂₉H₂₅N₃O₅",
"NOT_A_ROBOT",
"sakurw",
"Airun",
"幽灵3383",
"",
"パフォーマンス",
"Electric283",
@@ -351,9 +354,9 @@ return{
tas="TAS (T)",
},
net_menu={
league="リーグ",
ffa="FFA",
rooms="クラブ",
league="テクリーグ",
ffa="自由乱闘戦",
rooms="ルーム・プライベート戦",
logout="ログアウト",
},
net_league={
@@ -361,7 +364,7 @@ return{
},
net_rooms={
password="パスワード",
refreshing="探索中",
refreshing="探索中",
noRoom="部屋が存在しません",
refresh="更新",
new="部屋を建てる",
@@ -369,9 +372,9 @@ return{
},
net_newRoom={
title="部屋設定",
roomName="部屋名 (デフォルト: \"[username]'s room\")",
roomName="部屋名 (デフォルト: \"[username]'s room\")",
password="パスワード",
description="部屋説明",
description="部屋説明",
life="残機数",
pushSpeed="迫り上がり速度",
@@ -404,7 +407,7 @@ return{
eventSet="ルール設定",
holdMode="ホールド設定",
nextCount="スト数",
nextCount="スト数",
holdCount="ホールド数",
infHold="無限ホールド",
phyHold="即ホールド",
@@ -429,7 +432,7 @@ return{
menuPos="メニューの位置",
sysCursor="システムカーソル",
autoPause="ゲーム中断時のオートポーズ",
autoSave="オートセーブ",
autoSave="最高得点を更新したときオートセーブ",
autoLogin="オートログイン",
simpMode="シンプルなホーム画面",
},
@@ -474,7 +477,7 @@ return{
fullscreen="フルスクリーン",
bg_on="通常背景",
bg_off="背景なし",
bg_off="背景を閉じる ",
bg_custom="カスタム背景",
blockSatur="ブロックデザイン",
@@ -487,8 +490,8 @@ return{
graphic="画面→",
mainVol="主音量",
bgm="BGM",
sfx="SFX",
bgm="音楽",
sfx="効果音",
stereo="ステレオ",
spawn="ブロックの出現音",
warn="警告音",
@@ -497,7 +500,7 @@ return{
autoMute="ゲーム中断時のオートミュート",
fine="最適化失敗音",
sfxPack="SFXパック",
sfxPack="効果音パック",
vocPack="ボイスパック",
apply="適用",
},
@@ -547,7 +550,7 @@ return{
default="デフォルト",
snap="グリッドにスナップ",
size="サイズ",
shape="ャー",
shape="ェイ",
},
setting_touchSwitch={
b1= "左移動:", b2="右移動:", b3="右回転:", b4="左回転:",
@@ -559,7 +562,7 @@ return{
norm="ノーマル",
pro="アドバンス",
icon="アイコン",
sfx="SFX",
sfx="効果音",
vib="VIB",
alpha="Alpha",
@@ -596,7 +599,7 @@ return{
eventSet="ルール設定",
holdMode="ホールド設定",
nextCount="スト数",
nextCount="スト数",
holdCount="ホールド数",
infHold="無限ホールド",
phyHold="即ホールド",
@@ -606,8 +609,8 @@ return{
freshLimit="設置時間のリセット回数",
opponent="相手",
life="残機数",
pushSpeed="り上がり速度",
garbageSpeed="り上がり猶予",
pushSpeed="り上がり速度",
garbageSpeed="り上がり猶予",
bufferLimit="ダメージの保持上限",
heightLimit="致死ラインの高さ",
@@ -626,7 +629,7 @@ return{
any="消しゴム",
smart="自動着色",
push="り上がり (K)",
push="り上がり (K)",
del="Line消去 (L)",
demo="×を非表示",
@@ -657,7 +660,7 @@ return{
about={
staff="スタッフ",
his="歴史",
legals="法的な事",
legals="法的情報",
},
dict={
title="TetroDictionary",
@@ -671,15 +674,15 @@ return{
arrow="",
now="再生中:",
bgm="BGM",
sound="SFX",
bgm="音楽",
sound="効果音",
},
launchpad={
title="ミュージックルーム",
bgm="BGM",
sfx="SFX",
bgm="音楽",
sfx="効果音",
voc="VOC",
music="BGM",
music="",
label="ラベル",
},
login={
@@ -755,105 +758,105 @@ return{
},
},
modes={
['sprint_10l']= {"スプリント", "10L", "10 Line消せ!"},
['sprint_20l']= {"スプリント", "20L", "20 Line消せ!"},
['sprint_40l']= {"スプリント", "40L", "40 Line消せ!"},
['sprint_100l']= {"スプリント", "100L", "100 Line消せ!"},
['sprint_400l']= {"スプリント", "400L", "400 Line消せ!"},
['sprint_1000l']= {"スプリント", "1,000L", "1,000 Line消せ!"},
['sprintPenta']= {"スプリント", "PENTOMINO", "ペントミで40 Line消去!"},
['sprintMPH']= {"スプリント", "MPH", "ミノ順なし\nNextなし\nHoldなし"},
['dig_10l']= {"掘り", "10L", "10 Line下穴を掘れ!"},
['dig_40l']= {"掘り", "40L", "40 Line下穴を掘れ!"},
['dig_100l']= {"掘り", "100L", "100 Line下穴を掘れ!"},
['dig_400l']= {"掘り", "400L", "400 Line下穴を掘れ!"},
['drought_n']= {"ドラウト", "100L", "Iミ一切無し!"},
['drought_l']= {"ドラウト+", "100L", "わったーふ◯っく!"},
['marathon_n']= {"マラソン", "NORMAL", "加速する中で200 Lineマラソン!"},
['marathon_h']= {"マラソン", "HARD", "高速の中で200 Lineマラソン!"},
['solo_e']= {"バトル", "EASY", "弱めのAIに勝て!"},
['solo_n']= {"バトル", "NORMAL", "普通のAIに勝て!"},
['solo_h']= {"バトル", "HARD", "強めのAIに勝て!"},
['solo_l']= {"バトル", "LUNATIC", "プロレベルのAIに勝て!"},
['solo_u']= {"バトル", "ULTIMATE", "神レベルのAIに勝て!"},
['techmino49_e']= {"テック 49", "EASY", "弱めの49人で勝負\n最後の1人まで生き残れ!"},
['techmino49_h']= {"テック 49", "HARD", "強めの49人で勝負\n最後の1人まで生き残れ!"},
['techmino49_u']= {"テック 49", "ULTIMATE", "神レベルの49人で勝負\n最後の1人まで生き残れ!"},
['techmino99_e']= {"テック 99", "EASY", "弱めの99人で勝負\n最後の1人まで生き残れ!"},
['techmino99_h']= {"テック 99", "HARD", "強めの99人で勝負\n最後の1人まで生き残れ!"},
['techmino99_u']= {"テック 99", "ULTIMATE", "神レベルの99人で勝負\n最後の1人まで生き残れ!"},
['round_e']= {"ターン制", "EASY", "ターン制で弱めのAIと勝負!"},
['round_n']= {"ターン制", "NORMAL", "ターン制で普通のAIと勝負!"},
['round_h']= {"ターン制", "HARD", "ターン制で強めのAIと勝負!"},
['round_l']= {"ターン制", "LUNATIC", "ターン制でプロレベルのAIと勝負!"},
['round_u']= {"ターン制", "ULTIMATE", "ターン制で神レベルのAIと勝負!"},
['master_n']= {"マスター", "NORMAL", "20G 初心者方へ"},
['master_h']= {"マスター", "HARD", "20G プロの方へ"},
['master_m']= {"マスター", "M21", "20G マスターの方へ"},
['master_final']= {"マスター", "FINAL", "20G その先へ"},
['master_ph']= {"マスター", "PHANTASM", "???"},
['master_ex']= {"グランドマスター", "EXTRA", "一瞬よりも短い永遠"},
['master_instinct']={"マスター", "INSTINCT", "もしミノが一切見えなくなったら?"},
['strategy_e']= {"ストラテジー", "EASY", "20Gでの素早い判断"},
['strategy_h']= {"ストラテジー", "HARD", "20Gでの素早い判断"},
['strategy_u']= {"ストラテジー", "ULTIMATE", "20Gでの素早い判断"},
['strategy_e_plus']={"ストラテジー", "EASY+", "20Gでの素早い判断"},
['strategy_h_plus']={"ストラテジー", "HARD+", "20Gでの素早い判断"},
['strategy_u_plus']={"ストラテジー", "ULTIMATE+", "20Gでの素早い判断"},
['blind_e']= {"目隠し", "HALF", "初心者用"},
['blind_n']= {"目隠し", "ALL", "中級者用"},
['blind_h']= {"目隠し", "SUDDEN", "上級者用"},
['blind_l']= {"目隠し", "SUDDEN+", "プロフェッショナル用!"},
['blind_u']= {"目隠し", "?", "覚悟は良いかい?"},
['blind_wtf']= {"目隠し", "WTF", "まだ覚悟が足りないな!"},
['classic_e']= {"クラシック", "EASY", "80年代のネステト時代を超低速で体験!"},
['classic_h']= {"クラシック", "HARD", "80年代のネステト時代を通常速度で体験!"},
['classic_u']= {"クラシック", "ULTIMATE", "80年代のネステト時代を超高速で体験!"},
['survivor_e']= {"サバイバル", "EASY", "どれだけ生き残れる?"},
['survivor_n']= {"サバイバル", "NORMAL", "どれだけ生き残れる?"},
['survivor_h']= {"サバイバル", "HARD", "どれだけ生き残れる?"},
['survivor_l']= {"サバイバル", "LUNATIC", "どれだけ生き残れる?"},
['survivor_u']= {"サバイバル", "ULTIMATE", "どれだけ生き残れる?"},
['attacker_h']= {"火力王", "HARD", "攻撃力を磨け!"},
['attacker_u']= {"火力王", "ULTIMATE", "攻撃力を磨け!"},
['defender_n']= {"相殺王", "NORMAL", "防御力を磨け!"},
['defender_l']= {"相殺王", "LUNATIC", "防御力を磨け!"},
['dig_h']= {"堀王", "HARD", "回復力を磨け!"},
['dig_u']= {"堀王", "ULTIMATE", "回復力を磨け!"},
['sprint_10l']= {"スプリント", "10L", "10ライン消せ!"},
['sprint_20l']= {"スプリント", "20L", "20ライン消せ!"},
['sprint_40l']= {"スプリント", "40L", "40ライン消せ!"},
['sprint_100l']= {"スプリント", "100L", "100ライン消せ!"},
['sprint_400l']= {"スプリント", "400L", "400ライン消せ!"},
['sprint_1000l']= {"スプリント", "1,000L", "1,000ライン消せ!"},
['sprintPenta']= {"スプリント", "PENTOMINO", "ペントミで40ライン消せ!"},
['sprintMPH']= {"スプリント", "MPH", "ミノ順なし\nネクストなし\nホールドなし!"},
['dig_10l']= {"掘り", "10L", "10ライン下穴を掘れ!"},
['dig_40l']= {"掘り", "40L", "40ライン下穴を掘れ!"},
['dig_100l']= {"掘り", "100L", "100ライン下穴を掘れ!"},
['dig_400l']= {"掘り", "400L", "400ライン下穴を掘れ!"},
['drought_n']= {"ドラウト", "100L", "Iミ一切無し!"},
['drought_l']= {"ドラウト+", "100L", "わったーふ◯っく!"},
['marathon_n']= {"マラソン", "NORMAL", "加速する中で200ラインマラソン!"},
['marathon_h']= {"マラソン", "HARD", "高速の中で200ラインマラソン!"},
['solo_e']= {"バトル", "EASY", "弱めのAIに勝て!"},
['solo_n']= {"バトル", "NORMAL", "普通のAIに勝て!"},
['solo_h']= {"バトル", "HARD", "強めのAIに勝て!"},
['solo_l']= {"バトル", "LUNATIC", "プロレベルのAIに勝て!"},
['solo_u']= {"バトル", "ULTIMATE", "神レベルのAIに勝て!"},
['techmino49_e']= {"テック 49", "EASY", "弱めの49人で勝負\n最後の1人まで生き残れ!"},
['techmino49_h']= {"テック 49", "HARD", "強めの49人で勝負\n最後の1人まで生き残れ!"},
['techmino49_u']= {"テック 49", "ULTIMATE", "神レベルの49人で勝負\n最後の1人まで生き残れ!"},
['techmino99_e']= {"テック 99", "EASY", "弱めの99人で勝負\n最後の1人まで生き残れ!"},
['techmino99_h']= {"テック 99", "HARD", "強めの99人で勝負\n最後の1人まで生き残れ!"},
['techmino99_u']= {"テック 99", "ULTIMATE", "神レベルの99人で勝負\n最後の1人まで生き残れ!"},
['round_e']= {"ターン制", "EASY", "ターン制で弱めのAIと勝負!"},
['round_n']= {"ターン制", "NORMAL", "ターン制で普通のAIと勝負!"},
['round_h']= {"ターン制", "HARD", "ターン制で強めのAIと勝負!"},
['round_l']= {"ターン制", "LUNATIC", "ターン制でプロレベルのAIと勝負!"},
['round_u']= {"ターン制", "ULTIMATE", "ターン制で神レベルのAIと勝負!"},
['master_n']= {"マスター", "NORMAL", "20G 初心者方へ"},
['master_h']= {"マスター", "HARD", "20G 中級者の方へ"},
['master_m']= {"マスター", "M21", "20G 上級者の方へ"},
['master_final']= {"マスター", "FINAL", "20G その先へ"},
['master_ph']= {"マスター", "PHANTASM", "???"},
['master_ex']= {"グランドマスター", "EXTRA", "一瞬よりも短い永遠"},
['master_instinct']={"マスター", "INSTINCT", "もしミノが一切見えなくなったら?"},
['strategy_e']= {"ストラテジー", "EASY", "20Gでの素早い判断"},
['strategy_h']= {"ストラテジー", "HARD", "20Gでの素早い判断"},
['strategy_u']= {"ストラテジー", "ULTIMATE", "20Gでの素早い判断"},
['strategy_e_plus']={"ストラテジー", "EASY+", "20Gでの素早い判断"},
['strategy_h_plus']={"ストラテジー", "HARD+", "20Gでの素早い判断"},
['strategy_u_plus']={"ストラテジー", "ULTIMATE+", "20Gでの素早い判断"},
['blind_e']= {"目隠し", "HALF", "初心者用"},
['blind_n']= {"目隠し", "ALL", "中級者用"},
['blind_h']= {"目隠し", "SUDDEN", "上級者用"},
['blind_l']= {"目隠し", "SUDDEN+", "プロフェッショナル用!"},
['blind_u']= {"目隠し", "?", "覚悟は良いかい?"},
['blind_wtf']= {"目隠し", "WTF", "まだ覚悟が足りないな!"},
['classic_e']= {"クラシック", "EASY", "低速クラシック"},
['classic_h']= {"クラシック", "HARD", "通常速度クラシック"},
['classic_u']= {"クラシック", "ULTIMATE", "高速クラシック"},
['survivor_e']= {"サバイバル", "EASY", "どれだけ生き残れるかな?"},
['survivor_n']= {"サバイバル", "NORMAL", "どれだけ生き残れるかな?"},
['survivor_h']= {"サバイバル", "HARD", "どれだけ生き残れるかな?"},
['survivor_l']= {"サバイバル", "LUNATIC", "どれだけ生き残れるかな?"},
['survivor_u']= {"サバイバル", "ULTIMATE", "どれだけ生き残れるかな?"},
['attacker_h']= {"火力王", "HARD", "攻撃力を磨け!"},
['attacker_u']= {"火力王", "ULTIMATE", "攻撃力を磨け!"},
['defender_n']= {"相殺王", "NORMAL", "防御力を磨け!"},
['defender_l']= {"相殺王", "LUNATIC", "防御力を磨け!"},
['dig_h']= {"堀王", "HARD", "掘りを磨け"},
['dig_u']= {"堀王", "ULTIMATE", "掘りを磨け"},
['clearRush']= {"クリアラッシュ", "NORMAL", "All-Spinチュートリアル!\n[開発中]"},
['c4wtrain_n']= {"C4Wトレーニング", "NORMAL", "無限中開け4連コンボ!"},
['c4wtrain_l']= {"C4Wトレーニング", "LUNATIC", "無限中開け4連コンボ!"},
['pctrain_n']= {"パフェトレーニング", "NORMAL", "パフェ練習"},
['pctrain_l']= {"パフェトレーニング", "LUNATIC", "もっと難しいパフェ練習"},
['pc_n']= {"パフェチャレンジ", "NORMAL", "100 Line以内でパフェを出来るだけたくさん取れ!"},
['pc_h']= {"パフェチャレンジ", "HARD", "100 Line以内でパフェを出来るだけたくさん取れ!"},
['pc_l']= {"パフェチャレンジ", "LUNATIC", "100 Line以内でパフェを出来るだけたくさん取れ!"},
['pc_inf']= {"無限パフェチャレンジ", "", "できる限りたくさんのパフェを"},
['tech_n']= {"テクニック", "NORMAL", "B2Bを繋げ続けよう!"},
['tech_n_plus']= {"テクニック", "NORMAL+", "回転入れとパフェだけ!"},
['tech_h']= {"テクニック", "HARD", "B2Bを続けよう!"},
['tech_h_plus']= {"テクニック", "HARD+", "回転入れとパフェだけ!"},
['tech_l']= {"テクニック", "LUNATIC", "回転入れとパフェだけ!"},
['tech_l_plus']= {"テクニック", "LUNATIC+", "回転入れとパフェだけ!"},
['tech_finesse']= {"テクニック", "FINESSE", "最適化!"},
['tech_finesse_f']= {"テクニック", "FINESSE+", "最適化はそのまま、普通のLine消去禁止!"},
['tsd_e']= {"TSDチャレンジ", "EASY", "TSDだけ!"},
['tsd_h']= {"TSDチャレンジ", "HARD", "TSDだけ!"},
['tsd_u']= {"TSDチャレンジ", "ULTIMATE", "TSDだけ!"},
['backfire_n']= {"バックファイヤー", "NORMAL", "撃った火力が戻ってくる"},
['backfire_h']= {"バックファイヤー", "HARD", "撃った火力が戻ってくる"},
['backfire_l']= {"バックファイヤー", "LUNATIC", "撃った火力が戻ってくる"},
['backfire_u']= {"バックファイヤー", "ULTIMATE", "撃った火力が戻ってくる"},
['sprintAtk']= {"スプリント", "100 Attack", "100 Line送れ!"},
['sprintEff']= {"スプリント", "Efficiency", "40 Lineの間にできるだけ火力を出せ!"},
['zen']= {'', "200", "時間制限なしで200 Line消去"},
['ultra']= {'ウルトラ', "EXTRA", "2分間のスコアアタック"},
['infinite']= {"無限", "", "ただの砂場"},
['infinite_dig']= {"無限: 掘り", "", "掘れ掘れ掘れ"},
['marathon_inf']= {"マラソン", "INFINITE", "永遠のマラソン"},
['c4wtrain_n']= {"C4Wトレーニング", "NORMAL", "無限中開け"},
['c4wtrain_l']= {"C4Wトレーニング", "LUNATIC", "無限中開け"},
['pctrain_n']= {"パフェトレーニング", "NORMAL", "パフェ練習!"},
['pctrain_l']= {"パフェトレーニング", "LUNATIC", "もっと難しいパフェ練習!"},
['pc_n']= {"パフェチャレンジ", "NORMAL", "100 Line以内でパフェをできるだけたくさん取れ!"},
['pc_h']= {"パフェチャレンジ", "HARD", "100 Line以内でパフェをできるだけたくさん取れ!"},
['pc_l']= {"パフェチャレンジ", "LUNATIC", "100 Line以内でパフェをできるだけたくさん取れ!"},
['pc_inf']= {"無限パフェチャレンジ", "", "できる限りたくさんのパフェを取れ!"},
['tech_n']= {"テクニック", "NORMAL", "B2Bを繋げ続けよう!"},
['tech_n_plus']= {"テクニック", "NORMAL+", "回転入れとパフェだけ!"},
['tech_h']= {"テクニック", "HARD", "B2Bを繋げ続けよう!"},
['tech_h_plus']= {"テクニック", "HARD+", "回転入れとパフェだけ!"},
['tech_l']= {"テクニック", "LUNATIC", "回転入れとパフェだけ!"},
['tech_l_plus']= {"テクニック", "LUNATIC+", "回転入れとパフェだけ!"},
['tech_finesse']= {"テクニック", "FINESSE", "最適化!"},
['tech_finesse_f']= {"テクニック", "FINESSE+", "最適化はそのまま、普通のライン消去禁止!"},
['tsd_e']= {"TSDチャレンジ", "EASY", "TSDだけ!"},
['tsd_h']= {"TSDチャレンジ", "HARD", "TSDだけ!"},
['tsd_u']= {"TSDチャレンジ", "ULTIMATE", "TSDだけ!"},
['backfire_n']= {"バックファイヤー", "NORMAL", "撃った火力が戻ってくる!"},
['backfire_h']= {"バックファイヤー", "HARD", "撃った火力が戻ってくる!"},
['backfire_l']= {"バックファイヤー", "LUNATIC", "撃った火力が戻ってくる!"},
['backfire_u']= {"バックファイヤー", "ULTIMATE", "撃った火力が戻ってくる!"},
['sprintAtk']= {"スプリント", "100 Attack", "100ライン送れ!"},
['sprintEff']= {"スプリント", "Efficiency", "40ラインの間にできるだけ火力を出せ!"},
['zen']= {'', "200", "時間制限なしで200ライン消去"},
['ultra']= {'ウルトラ', "EXTRA", "2分以内にできるだけ多くの点数を取る"},
['infinite']= {"無限", "", "サンドボックス"},
['infinite_dig']= {"無限: 掘り", "", "掘れ掘れ掘れ"},
['marathon_inf']= {"マラソン", "INFINITE", "永遠のマラソン"},
['custom_clear']= {"カスタム", "NORMAL"},
['custom_puzzle']= {"カスタム", "PUZZLE"},
['custom_clear']= {"カスタム", "NORMAL"},
['custom_puzzle']= {"カスタム", "PUZZLE"},
},
getTip={refuseCopy=true,
":pog:",
@@ -909,7 +912,7 @@ getTip={refuseCopy=true,
"B2B2B2Bは存在しません",
"B2B2B2Bは可能?",
"Back-to-Back Techrash, 10 REN, PC!",
"BGMやSFXの制作に協力いただける方は大歓迎です!",
"音楽や効果音の制作に協力いただける方は大歓迎です!",
"Bridge Clearが間もなく実装されます!",
"Color Clearが間もなく実装されます!",
"DASとARRを低くすると、速くなるけど操作が難しくなる!",
@@ -923,8 +926,8 @@ getTip={refuseCopy=true,
"Nspire-CXのTechmino: 存在はしますが同じゲームではありません",
"O-Spin Triple!",
"OHHHHHHHHHHHHHH",
"LÖVE」提供",
"「Un…」じゃなくて「LÖVE」提供",
"Powered by LÖVE",
"Powered by Un... LÖVE",
"Rank Xの条件は、上級者でも難しくなるように設定されています",
"Split Clearが間もなく実装されます!",
"sudo rm -rf /*",
@@ -954,22 +957,22 @@ getTip={refuseCopy=true,
"マルチプレイで遊ぼう! あなたの常識が壊されるでしょう",
"メニューをシンプルモードにした場合、イースターエッグがなくなります",
"ローディング中! シーンチェンジの間だけじゃないです!",
"Zのおすすめ[01]東方をやってみよう!",
"Zのおすすめ[02]Minecraftをやってみよう!",
"Zのおすすめ[03]Osu!をやってみよう!",
"Zのおすすめ[04]Quatrackをやってみよう!",
"Zのおすすめ[05]Terrariaをやってみよう!",
"Zのおすすめ[06]Celesteをやってみよう!",
"Zのおすすめ[07]グーの惑星をやってみよう!",
"Zのおすすめ[08]Orzmicをやってみよう!",
"Zのおすすめ[09]Puyo Puyoをやってみよう!",
"Zのおすすめ[10]Phigrosをやってみよう!",
"Zのおすすめ[11]VVVVVVをやってみよう!",
"Zのおすすめ[12]Ballanceをやってみよう!",
"Zのおすすめ[13]Zumaをやってみよう!",
"Zのおすすめ[14]ルービックキューブをやってみよう!",
"Zのおすすめ[15]15puzzleをやってみよう!",
"Zのおすすめ[16]Minesweeperをやってみよう!",
"Z推薦[01]東方原作ゲームをやってみよう!",
"Z推薦[02]Minecraftをやってみよう!",
"Z推薦[03]Osu!をやってみよう!",
"Z推薦[04]Quatrackをやってみよう!",
"Z推薦[05]Terrariaをやってみよう!",
"Z推薦[06]Celesteをやってみよう!",
"Z推薦[07]グーの惑星をやってみよう!",
"Z推薦[08]Orzmicをやってみよう!",
"Z推薦[09]Puyo Puyoをやってみよう!",
"Z推薦[10]Phigrosをやってみよう!",
"Z推薦[11]VVVVVVをやってみよう!",
"Z推薦[12]Ballanceをやってみよう!",
"Z推薦[13]Zumaをやってみよう!",
"Z推薦[14]ルービックキューブをやってみよう!",
"Z推薦[15]15puzzleをやってみよう!",
"Z推薦[16]Minesweeperをやってみよう!",
{C.H,"REGRET!!"},
{C.lP,"Secret Number: 626"},
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},

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攻击
根据上述规则计算后,向下取整,攻击打出
分数系统:

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

@@ -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

@@ -1804,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)
@@ -1824,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

View File

@@ -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,14 +17,15 @@ return[=[
全新模式选择界面(未完善,未来会增加更多便利功能)
新皮肤:pixel(by C₂₉H₂₅N₃O₅)
新语言:Bahasa Indonesia(by NOT_A_ROBOT)
新语言:日本語(by sakurw & Airun)
新语言:日本語(by sakurw & Airun & 幽灵3383)
新小程序:Stopwatch, Mahjong(无和牌检测)
新模式:1~3连块40行(by NOT_A_ROBOT) #578
新BGM:lounge(暂未使用, by Hailey (cudsys) & MrZ)
更强的CC(会主动allspin了, by Blari'o) #579
更强的CC(会主动allspin了, by Gompyn) #579
改动:
修改选择模式音效
重做staff表
更新字体
移除yygq语言
优化皮肤设置页面交互效果
换新miya立绘,给不同立绘添加不同点击动画
@@ -55,12 +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,