diff --git a/Zframework/init.lua b/Zframework/init.lua index df1b0cd4..5ba02375 100644 --- a/Zframework/init.lua +++ b/Zframework/init.lua @@ -1,3 +1,5 @@ +-- WARNING: This framework has been remade and renamed to Zenitha. Do not use this deprecated framework for your project + NONE={}function NULL() end PAPER=love.graphics.newCanvas(1,1) EDITING="" LOADED=false diff --git a/Zframework/stringExtend.lua b/Zframework/stringExtend.lua index 75c5913a..72ba1229 100644 --- a/Zframework/stringExtend.lua +++ b/Zframework/stringExtend.lua @@ -125,7 +125,8 @@ function STRING.time_short(t) if t<1 then return math.floor(t*1000)..timeLetters[6] end -- 123 ms if tD.rankPts then gc_setColor(COLOR.lX) setFont(20) - GC.mStr(text.highest:repD(getConstructGrade(D.maxRankPts)),63,216) - GC.mStr(text.highest:repD(D.maxRankPts-1),63,336) + GC.mStr(text.highestGrade:repD(getConstructGrade(D.maxRankPts)),63,216) + GC.mStr(text.highestGrade:repD(D.maxRankPts-1),63,336) end if not D.showGuide then return end diff --git a/parts/eventsets/construct_invsg.lua b/parts/eventsets/construct_invsg.lua index e9aded03..a1afc50d 100644 --- a/parts/eventsets/construct_invsg.lua +++ b/parts/eventsets/construct_invsg.lua @@ -57,8 +57,8 @@ return { if D.maxRankPts>D.rankPts then gc_setColor(COLOR.lX) setFont(20) - GC.mStr(text.highest:repD(getConstructGrade(D.maxRankPts)),63,216) - GC.mStr(text.highest:repD(D.maxRankPts-1),63,336) + GC.mStr(text.highestGrade:repD(getConstructGrade(D.maxRankPts)),63,216) + GC.mStr(text.highestGrade:repD(D.maxRankPts-1),63,336) end if not D.showGuide then return end diff --git a/parts/eventsets/construct_sg.lua b/parts/eventsets/construct_sg.lua index 35f8d3f1..b6f6d4f7 100644 --- a/parts/eventsets/construct_sg.lua +++ b/parts/eventsets/construct_sg.lua @@ -57,8 +57,8 @@ return { if D.maxRankPts>D.rankPts then gc_setColor(COLOR.lX) setFont(20) - GC.mStr(text.highest:repD(getConstructGrade(D.maxRankPts)),63,216) - GC.mStr(text.highest:repD(D.maxRankPts-1),63,336) + GC.mStr(text.highestGrade:repD(getConstructGrade(D.maxRankPts)),63,216) + GC.mStr(text.highestGrade:repD(D.maxRankPts-1),63,336) end if not D.showGuide then return end diff --git a/parts/eventsets/master_g.lua b/parts/eventsets/master_g.lua index ad40f2d1..1f869da5 100644 --- a/parts/eventsets/master_g.lua +++ b/parts/eventsets/master_g.lua @@ -1,16 +1,10 @@ --- local regretDelay=-1 --- local int_grade=0 --- local grade_points=0 local _igb={0,1,2,3,4,5,5,6,6,7,7,7,8,8,8,9,9,9,10,11,12,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26} local function getInternalGradeBoosts(internal_grade) return _igb[MATH.clamp(internal_grade+1,1,#_igb)] end --- local spd_lvl=0 --- local cools=0 --- local regrets=0 --- local prevSectTime=0 --- local isInRoll=false --- local rollGrades=0 + +local decayRate={125,80,80,50,45,45,45,40,40,40,40,40,30,30,30,20,20,20,20,20,15,15,15,15,15,15,15,15,15,15,10,10,10,9,9,9,8,8,8,7,7,7,6} + local cool_time={3120,3120,2940,2700,2700,2520,2520,2280,2280,0} local regret_time= {5400,4500,4500,4080,3600,3600,3000,3000,3000,3000} local function getGrav(l) @@ -91,6 +85,7 @@ local function addGrade(D,row,cmb,lvl) -- IGS = internal grade system if D.grade_points>=100 then D.grade_points=0 D.internal_grade=D.internal_grade+1 + D.decayTimer=0 end end local function getRollGoal(D,isGreenLine) @@ -294,6 +289,7 @@ return { D.target=100 D.int_grade=0 D.grade_points=0 + D.decayTimer=0 D.rollGrades=0 D.spd_lvl=0 D.cools=0 @@ -304,8 +300,6 @@ return { D.prevDrop70=false D.nextSpeedUp=false D.coolList,D.regretList=TABLE.new(false,9),TABLE.new(false,10) - local decayRate={125,80,80,50,45,45,45,40,40,40,40,40,30,30,30,20,20,20,20,20,15,15,15,15,15,15,15,15,15,15,10,10,10,9,9,9,8,8,8,7,7,7,6} - local decayTimer=0 while true do coroutine.yield() @@ -344,10 +338,10 @@ return { D.prevSectTime=P.stat.frame end end - if P.waiting<=0 and D.grade_points>0 and not D.isInRoll then - decayTimer=decayTimer+1 - if decayTimer>=decayRate[math.min(D.internal_grade+1,#decayRate)] then - decayTimer=0 + if P.waiting<=0 and D.grade_points>0 and P.combo<1 and not D.isInRoll then + D.decayTimer=D.decayTimer+1 + if D.decayTimer>=decayRate[math.min(D.internal_grade+1,#decayRate)] then + D.decayTimer=0 D.grade_points=D.grade_points-1 end elseif D.isInRoll and P.stat.frame>=D.prevSectTime+3599 then diff --git a/parts/fonts/monospaced.otf b/parts/fonts/monospaced.otf index e7adaa8b..95ee3761 100644 Binary files a/parts/fonts/monospaced.otf and b/parts/fonts/monospaced.otf differ diff --git a/parts/fonts/proportional.otf b/parts/fonts/proportional.otf index eee71180..a817a0b0 100644 Binary files a/parts/fonts/proportional.otf and b/parts/fonts/proportional.otf differ diff --git a/parts/gameFuncs.lua b/parts/gameFuncs.lua index a2b37fbe..4492901e 100644 --- a/parts/gameFuncs.lua +++ b/parts/gameFuncs.lua @@ -161,8 +161,12 @@ do-- function applySettings() if SETTING.bg=='on' then BG.unlock() BG.setDefault(SETTING.defaultBG) + if SETTING.lockBG then + BG.lock() + elseif reason=='lockBG' then -- Don't load theme too soon! + THEME.set(THEME.calculate(),GAME.playing) + end BG.set() - if SETTING.lockBG then BG.lock() end elseif SETTING.bg=='off' then BG.unlock() BG.set('fixColor',SETTING.bgAlpha,SETTING.bgAlpha,SETTING.bgAlpha) diff --git a/parts/language/dict_en.lua b/parts/language/dict_en.lua index df3320c7..213f114a 100644 --- a/parts/language/dict_en.lua +++ b/parts/language/dict_en.lua @@ -1,5 +1,6 @@ -- Automatically generated by a Python script, from a markdown source file. -- The script can be found here: https://github.com/user670/techmino-dictionary-converter/blob/master/tool.py +-- **NOTE TO TRANSLATORS**: In English (and in this file) the symbol ~ (tilde) is commonly used to express "approximately". Some languages use this symbol to express ranges or "from/up to a value", but it is not commonly used in English. return { {"Translator Note 1", "", @@ -551,7 +552,7 @@ FNNS and {"Support 3", {"BiRS", "biasrs biasrotationsystem", "term", - "Bias Rotation System, an original rotation system used in Techmino based on XRS and SRS.\nIn BiRS, a special offset is triggered when either the left, right, or softdrop key is pressed and the block touches the minoes or walls in that direction. This adds an extra block of offset in that direction, in addition to the normal offsets in the wall kick tables. If the tests fail, BiRS will attempt to remove the offsets and try again, removing the down offsets first, then the left and right offsets if the first fails. \nThe special offsets also obey these two rules: the distance of the offset must not exceed √5, and the offset must not be in the opposite direction to that indicated by the keypress.\nCompared to XRS, BiRS uses only a single kick table, making it easier to memorize, while retaining the climb-over-terrain feature of SRS.", + "Bias Rotation System, an original rotation system used in Techmino based on XRS and SRS.\nIn BiRS, an extra offset is triggered when either the left, right, or softdrop key is pressed and the block touches the minoes or walls in that direction. This introduces an additional offset in the specified direction, in addition to the standard offsets listed on the wall kick tables. The horizontal extra offsets indicated by the keypress must not be in the opposite direction to the composite horizontal offset, and the distance of the composite offset must not exceed √5. If the test fails, the system will perform another test without the horizontal offsets; should this also fail, a further test will be conducted without downward offsets. In contrast to XRS, BiRS uses only a single kick table, making it easier to memorize while retaining the climb-over-terrain feature of SRS.", }, {"C2RS", "c2rs cultris2", diff --git a/parts/language/dict_ja.lua b/parts/language/dict_ja.lua index 2194652f..00aebf9d 100644 --- a/parts/language/dict_ja.lua +++ b/parts/language/dict_ja.lua @@ -612,7 +612,7 @@ FNNS and {"サポート3", {"BiRS", "biasrs biasrotationsystem", "term", - "*Techmino用語*\nBias Rotation System\nXRSとSRSを基に作られたTechmino独自の回転法則\n回転時に右や左、ソフトドロップを入力しているとその方向にミノがズレるように回転に補正がかけられます\n下方向に補正がかかっているときに回転に失敗(既存のマスと重なる)と下方向への補正をかけずに再試行します\nそしてそれにも失敗した場合は右、または左の補正をかけずに再試行します\nそれにも失敗した場合には回転されません\n\nBiRSはXRSに比べてキックテーブルが1つのため覚えやすく、さらにSRSの特徴である地形に沿った壁超え等も備えています\n\n追加事項:最後の回転補正を試行する時のルールとして移動するユークリッド距離が√5を超えてはいけない、また右または左に補正がかかっている場合には最後の回転補正はもう一方の方向には行かないという2つのルールがBiRSにあります", + "*Techmino用語*\nBias Rotation System\nXRSとSRSを基に作られたTechmino独自の回転法則\n回転時に右や左、ソフトドロップを入力しているとその方向にミノがズレるように回転に補正がかけられます\n下方向に補正がかかっているときに回転に失敗(既存のマスと重なる)と下方向への補正をかけずに再試行します\nそしてそれにも失敗した場合は右、または左の補正をかけずに再試行します\nそれにも失敗した場合には回転されません\n\nBiRSはXRSに比べてキックテーブルが1つのため覚えやすく、さらにSRSの特徴である地形に沿った壁超え等も備えています\n\n追加事項:最後の回転補正を試行する時のルールとして移動するユークリッド距離が√5を超えてはいけない、また右または左に補正がかかっている場合には最後の回転補正はもう一方の方向には行かないという2つのルールがBiRSにあります",-- TODO }, {"C2RS", "c2rs cultris 2 カルトリス", diff --git a/parts/language/dict_vi.lua b/parts/language/dict_vi.lua index 50adf09a..6bb54c31 100644 --- a/parts/language/dict_vi.lua +++ b/parts/language/dict_vi.lua @@ -1,4 +1,7 @@ local tetromino = " tetromino tetramino tetrimino" +local function replaceCheckCrossMark(str) + return STRING.repD(str,CHAR.icon.checkMark,CHAR.icon.crossMark) +end return { { @@ -374,7 +377,7 @@ Hệ thống mô tả cách xoay như sau: [[ Một hệ thống để xác định cách gạch xoay. -Ở các trò xếp gạch hiện đại, mỗi gạch có thể xoay dựa trên một tâm xoay cố định (vài game có thể không có tâm xoay cố định). +Ở các trò xếp gạch hiện đại, mỗi gạch có thể xoay dựa trên một tâm xoay cố định (vài game có thể không có cái này). Nếu gạch sau khi xoay đè lên gạch khác / ra ngoài bảng, hệ thống sẽ thử "wall-kicking" (đẩy gạch sang các vị trí xung quanh). Tuy nhiên, nếu khoảng cách quá lớn thì hệ thống xoay không thể đá gạch được @@ -410,14 +413,16 @@ Bias Rotation System | Hệ thống xoay Bias. Một hệ thống xoay dựa trên SRS và XRS -Để kích hoạt offset đặc biệt trong BiRS, cần phải thực hiện cùng lúc các điều kiện sau: +Để kích hoạt offset bổ sung trong BiRS, cần phải thỏa hai điều kiện sau cùng lúc: 1. Một nút di chuyển (Trái / Phải / Thả nhẹ) phải được giữ 2. Gạch hiện tại phải chạm một ô gạch bất kỳ hoặc chạm tường ở hướng đang được giữ ở bước 1 Nếu thực hiện thành công, offset ở hướng đang được giữ ở bước 1 sẽ được thêm 1 ô. Tuy nhiên, để kick được thì cần phải tuân thêm hai điều kiện: -1. Khoảng cách euclide (ơclit) từ tâm tới vị trí đá tới được chọn phải bé hơn √5 -2. Hướng của cú đá không phải là hướng đối của hướng đã được xác định bằng phím bấm. +1. Khoảng cách Euclide từ tâm tới vị trí đá tới được chọn phải bé hơn √5 +2. Hướng của cú đá không phải là hướng đối diện với hướng đã được xác định bằng phím bấm. + +Nếu không dùng kick đó được, offset trái phải sẽ bị hủy và thử lại, nếu không được nữa thì hủy luôn offset dưới. So với XRS, BiRS dễ nhớ hơn vì chỉ dùng một bảng wall-kick; nhưng vẫn giữ được khả năng vượt địa hình của SRS. ]], @@ -455,7 +460,7 @@ So với XRS, BiRS dễ nhớ hơn vì chỉ dùng một bảng wall-kick; nhưn {"TRS", "nhom05b techminorotationsystem", "term", - "Techmino Rotation System | Hệ thống xoay Techmino\n*Chỉ có trên Techmino*\n\nMột hệ thống xoay dựa trên SRS.\nHệ thống này khắc phục được hiện tượng gạch S / Z bị kẹt trong một số trường hợp.\n\nHơn nữa, TRS có thêm các bảng wall-kick dành cho Pentomino dựa trên logic của SRS với Tetromino.\n\nHệ thống cũng hỗ trợ O-Spin, cho phép gạch chữ O có thể đá hoặc \"biến hình\".", + "Techmino Rotation System | Hệ thống xoay Techmino\n*Chỉ có trên Techmino*\n\nMột hệ thống xoay dựa trên SRS.\nHệ thống này khắc phục được hiện tượng gạch S / Z bị kẹt trong một số trường hợp.\n\nHơn nữa, TRS có thêm các bảng wall-kick dành cho Pentomino dựa trên logic của SRS với Tetromino.\n\nHệ thống cũng hỗ trợ O-Spin, cho phép gạch O có thể đá hoặc \"biến hình\".", }, {"XRS", "nhom05b xrs", @@ -495,17 +500,17 @@ So với XRS, BiRS dễ nhớ hơn vì chỉ dùng một bảng wall-kick; nhưn {"His", "nhom05d historygenerator hisgenerator", "term", - [[ + replaceCheckCrossMark[[ Một kiểu xáo gạch được sử dụng nhiều trong series game Tetris: The Grand Master. Trong kiểu xáo này, cách chọn gạch diễn ra như nhau: - Bước 1: Chọn ngẫu nhiên một trong bảy Tetromino. - Bước 2: Kiểm tra xem liệu gạch đã bốc trúng có phải là một trong những gạch đã xuất hiện gần nhất không. - -- Đúng: Tới Bước 3 - -- Sai: Nhảy tới Bước 4 + $1: Tới Bước 3 + $2: Nhảy tới Bước 4 - Bước 3: Cộng 1 vào số lần đã bốc lại, kiểm tra xem liệu số lần đã bốc lại có vượt qua giới hạn tối đa hay không? - -- Đúng: Tới Bước 4 - -- Sai: nhảy về Bước 1 + $1: Tới Bước 4 + $2: Nhảy về Bước 1 - Bước 4: Dùng gạch đã bốc trúng Kiểu xáo này hay được mô tả bằng "His [A] Roll [B]" @@ -529,21 +534,25 @@ Kiểu xáo His là phiên bản cải tiến so với kiểu xáo ngẫu nhiên {"HisPool [2/2]", "nhom05d hispool historypoolgenerator kiểu xáo hispool", "term", - [[ + replaceCheckCrossMark[[ [Sea: Phần này không có trong Zictionary ngôn ngữ khác!] Cách hoạt động của kiểu xáo HisPool diễn ra tuần tự như sau: Bước 1: Lấy một viên gạch ngẫu nhiên trong cái Rổ. - - Nếu gạch đó là một trong những gạch đã bốc ra trước đó: bốc lại cho tới khi gạch đó không còn là một trong những viên gạch kia, hoặc là hết lượt bốc lại. + - Kiểm tra xem gạch vừa bốc có nằm trong số gạch đã chọn hay không? + $2: Chọn gạch vừa bốc và tới bước 2 + $1: Lặp lại bước 1 cho tới khi thỏa một trong hai điều kiện sau: + -- Gạch vừa bốc không nằm trong số gạch đã chọn gần nhất. + -- Hết lượt bốc lại + Sau khi hết lặp, chọn gạch được bốc trúng gần nhất. Bước 2: Gạch được bốc trúng sẽ được lấy ra khỏi Rổ. - Với mỗi gạch còn lại, cộng 1 vào số lần chưa bốc trúng. - Rổ lúc này còn 34 gạch. -Bước 3: Thêm gạch có số lần chưa bốc trúng nhiều nhất vào lại rổ để đảm bảo số lượng là 35 gạch. - - Sau khi gạch đó đã thêm vào Rổ, số lần chưa bốc trúng của nó sẽ bị đặt lại về 0 +Bước 3: Thêm gạch có số lần chưa bốc trúng nhiều nhất vào lại rổ (để đảm bảo số lượng là 35 gạch), và đặt lại số lần chưa bốc trúng của nó về 0 -Bước 4: Thêm gạch vào chuỗi NEXT và quay về Bước 1. +Bước 4: Thêm gạch đã chọn vào chuỗi NEXT cũng như chuỗi gạch đã chọn gần nhất, rồi quay về Bước 1. ]], }, {"bagES", @@ -564,7 +573,7 @@ Bước 4: Thêm gạch vào chuỗi NEXT và quay về Bước 1. {"H. tg. Drought", "drought", "term", - "Một hiện tượng mà một viên gạch người chơi muốn nhưng lại không xuất hiện. Thường dùng để chỉ hiện tượng khát gạch I trong mấy game cổ điển vì chúng thường dùng bộ xáo gạch ngẫu nhiên đơn giản.\n\nTuy nhiên, trong các game hiện đại, hiện tượng drought không thể xảy ra vì khoảng cách tối đa giữa 2 gạch cùng loại là 13 gạch. ", + "Hiện tượng gạch người chơi đang rất cần nhưng lại không xuất hiện trong thời gian quá dài. Thường dùng để chỉ hiện tượng khát gạch I trong mấy game cổ điển vì chúng thường dùng bộ xáo gạch ngẫu nhiên đơn giản.\n\nHiện nay, ở các game hiện đại, hiện tượng drought không thể xảy ra vì khoảng cách tối đa giữa 2 gạch cùng loại là 13 gạch.", }, {">E|Thông số", "nhom05e", @@ -706,10 +715,10 @@ Một kỹ thuật di chuyển gạch vào vị trí mong muốn với chuỗi p Bạn sẽ không bị mất Finesse khi bạn nhét gạch hay thực hiện Spin vì Techmino chỉ kiểm tra những vị trí không yêu cầu soft drop Techmino cũng có finesse rate (%) (tỉ lệ *không* mắc lỗi di chuyển), được tính như sau: - - 100% (Hoàn hảo - Perfect) khi số lần nhấn phím bằng hoặc ít hơn mức chuẩn - - 50% (Tuyệt vời - Great) khi số lần nhấn phím cao hơn mức chuẩn 1 phím - - 25% (Xấu - Bad) khi số lần nhấn phím cao hơn mức chuẩn 2 phím - - 0% (Truợt - Miss) khi số lần nhấn phím cao hơn mức chuẩn 3 phím + - 100% (Perfect) khi số lần nhấn phím bằng hoặc ít hơn mức chuẩn + - 50% (Great) khi số lần nhấn phím cao hơn mức chuẩn 1 phím + - 25% (Bad) khi số lần nhấn phím cao hơn mức chuẩn 2 phím + - 0% (Miss) khi số lần nhấn phím cao hơn mức chuẩn 3 phím Một Bad hoặc Miss sẽ phá combo finesse. Lưu ý: @@ -774,7 +783,7 @@ Phương pháp này lần đầu tiên được tìm thấy bởi Cheez-fish - n {"APL", "nhom05g attackperline efficiency; số hàng tấn công; số hàng đã xóa; độ hiệu quả", "term", - "Attack per line (cleared) | Số hàng tấn công / Số hàng đã xóa\n\nCòn được biết với tên \"efficiency\" (độ hiệu quả). Phản ánh độ hiệu quả khi tấn công sau mỗi lần xóa hàng.\nVí dụ Tetris và T-spin có độ hiệu quả cao hơn so với xóa 2 / 3 hàng.", + "Attack per line (cleared)\n\tSố hàng tấn công / Số hàng đã xóa\n\nCòn được biết với tên \"efficiency\" (độ hiệu quả). Phản ánh độ hiệu quả khi tấn công sau mỗi lần xóa hàng.\nVí dụ Tetris và T-spin có độ hiệu quả cao hơn so với xóa 2 / 3 hàng.", }, {"Tấn công&Phg thủ", "nhom05g attacking defending phòng thủ; tấn công & phòng thủ; tấn công và phòng thủ", @@ -847,7 +856,7 @@ Trong hầu hết các game, tấn công và phòng thủ là tương đương n {"Fin, Neo, Iso", "nhom05i fin neo iso", "pattern", - "Tên của 3 kiểu T-spin sử dụng wall-kick table đặc biệt của gạch T. Các game khác nhau có cách phản công khác nhau với loại này: có game tính là Mini-spin, nhưng cũng có game không tính luôn =))).\n\nTrên thực tế chúng không được sử dụng nhiều vì game thường sẽ nerf loại T-spin này; hơn nữa setup của ba loại này khá là phức tạp." + "Tên của 3 kiểu T-spin sử dụng wall-kick table đặc biệt của gạch T. Chúng không được sử dụng nhiều trong game bởi vì độ phức tạp và thường hay bị nerf bởi đa số game." }, {"Freestyle", "nhom05i", @@ -894,7 +903,7 @@ Trong hầu hết các game, tấn công và phòng thủ là tương đương n {"Back to Back", "nhom05j b2b btb backtoback", "term", - "Hay còn gọi là B2B. Xóa 2 hoặc nhiều lần xóa theo kiểu nâng cao (như Tetris hay Spin) liên tiếp (nhưng không được xóa theo kiểu 'bình thường' giữa chừng).\nKhông như combo, Back To Back sẽ không bị mất khi đặt gạch.\n\nỞ Techmino, B2B được tính bằng thanh năng lượng, chứ không tính theo số lần xóa theo kiểu nâng cao.\nCũng trong Techmino, nhiều B2B liên tiếp được tính là Back-to-back-to-back (B3B) (xem mục B2B2B để biết thêm).\n\nTechmino cũng tính cả PC và HPC liên tiếp là B2B và B3B", + "Hay còn gọi là B2B. Xóa 2 hoặc nhiều lần xóa theo kiểu nâng cao (như Tetris hay Spin) liên tiếp (nhưng không được kiểu xóa bình thường giữa chừng).\nKhông như combo, Back To Back sẽ không bị mất khi đặt gạch.\n\nỞ Techmino, B2B được tính bằng thanh năng lượng, chứ không tính theo số lần xóa kiểu đặc biệt.\nCũng trong Techmino, nhiều B2B liên tiếp được tính là Back-to-back-to-back (B3B) (xem mục B2B2B để biết thêm).\n\nTechmino cũng tính cả PC và HPC liên tiếp là B2B và B3B", }, {"B2B2B", "nhom05j b3b backtobacktoback", @@ -932,13 +941,13 @@ Trong hầu hết các game, tấn công và phòng thủ là tương đương n [[ Đây là skin được dùng trong những phiên bản đời đầu của Tetris -Trước đây, tất cả máy tính đều sử dụng Giao diện Dòng lệnh (Command-Line Interfaces, gần giống như cmd trên Windows, Terminal trên Mac, hay Console trên Linux), cho nên mỗi ô gạch đều được hiển thị dưới dạng 2 ngoặc vuông (như thế này: [ ]). +Trước đây, tất cả máy tính đều sử dụng Giao diện Dòng lệnh (Command-Line Interfaces), cho nên mỗi ô gạch đều được hiển thị dưới dạng 2 ngoặc vuông (như thế này: ]]..CHAR.icon.bone..[[). Trông nó nhìn rất giống cục xương, nên đôi khi được gọi là skin bone block (gạch xương). Trong Techmino, bone block được mô tả là "một skin gạch duy nhất, lạ mắt mà tất cả các gạch đều sử dụng". Skin khác nhau sẽ có skin bone block khác nhau. -Cũng trong Techmino nhưng ở tiếng Việt, từ "gạch []" được dùng để chỉ bone block. +Cũng trong Techmino nhưng ở tiếng Việt, từ "gạch ]]..CHAR.icon.bone..[[" được dùng để chỉ bone block. ]], }, {"=[NHÓM 06]=", @@ -1048,7 +1057,7 @@ Gọi tắt là WWC. Có chế độ 1 đấu 1 toàn cầu: chơi với ngườ [[ Chơi trên trình duyệt / client chính thức | Chơi đơn / Chơi trực tuyến -Gọi tắt là TF. Một game xếp gạch dùng engine là một plugin đã nghỉ hưu từ năm 2021 (vì vấn đề bảo mật). Từng rất phổ biến trong quá khứ, nhưng tất cả máy chủ chính thức đã đóng cửa từ mấy năm trước. Hiện giờ vẫn còn một máy chủ riêng tên là \"Notris Foes\". Nhấn vào nút hình địa cầu để mở ở trong trình duyệt +Gọi tắt là TF. Một game xếp gạch dùng engine là một plugin đã nghỉ hưu từ năm 2021 (vì vấn đề bảo mật). Từng rất phổ biến trong quá khứ, nhưng tất cả máy chủ chính thức đã đóng cửa từ mấy năm trước. Hiện giờ vẫn còn một máy chủ riêng tên là "Notris Foes". Nhấn vào nút hình địa cầu để mở ở trong trình duyệt ]], "https://notrisfoes.com", }, @@ -1138,9 +1147,11 @@ Một trò chơi do fan làm đang được phát triển với hệ thống xoa "nhom06 tetrisgrandmaster tetristhegrandmaster", "game", [[ -Chỉ có trên máy thùng | Chơi đơn / Chơi hai người +Máy thùng, và các hệ máy khác* | Chơi đơn / Chơi hai người Tetris: The Grand Master, một series Tetris dành cho máy thùng, nổi tiếng với độ khó cực cao - được xem là series game khó nhất (tại thời điểm ra mắt). Những thứ như S13 hay GM cũng từ chính series này. TGM3 được coi là tựa game nổi tiếng nhất của series này. + +(*): Hiện TGM1 và TGM2 đã được port sang PS và Switch dưới gói Arcade Archives. ]], }, {"DTET", @@ -1172,10 +1183,9 @@ Một game với phong cách chơi máy thùng, có khả năng mô phỏng nhi [[ Windows | Chơi đơn -Một game bao gồm tất cả chế độ trong TGM để có thể sử dụng để luyện chơi TGM. Lưu ý rằng World Rule trong Texmaster hơi khác một chút so với TGM, ví dụ như game sử dụng cơ chế "Thả nhẹ-khóa tức thì"* thay vì sử dụng cơ chế "Thả nhẹ" thông thường và bảng kick cũng có đôi chút khác biệt +Một game có tất cả chế độ trong TGM để có thể sử dụng để luyện chơi TGM. Cần lưu ý rằng World Rule trong Texmaster sẽ hơi khác một chút so với TGM, ví dụ như game sử dụng cơ chế "Thả nhẹ-khóa tức thì"* thay vì sử dụng cơ chế "Thả nhẹ" thông thường và bảng kick cũng có đôi chút khác biệt -(*): Bản Zictionary tiếng Anh ghi là "instant-lock soft drop(s)". -Có thể hiểu là bạn giữ nút Thả nhẹ, gạch vừa chạm đất là chốt vị trí đó luôn - giống với các game xếp gạch cổ điển ấy! +(*): Bản Zictionary tiếng Anh ghi là "instant-lock soft drop(s)". Có thể hiểu là bạn giữ nút Thả nhẹ, gạch vừa chạm đất là chốt vị trí đó luôn - giống với các game xếp gạch cổ điển. ]], }, {"Tetris Effect", @@ -1202,7 +1212,7 @@ Một trò chơi nổi tiếng với chế độ Battle Royale 99 người và c [[ PS / NS / Xbox / Windows | Chơi đơn / Chơi trực tuyến -Đây là một tựa game ghép từ hai trò chơi giải đố: Tetris và Puyo Puyo, và bạn có thể chơi đối đầu trong cả hai game này. Có nhiều chế độ chơi đơn và chơi trực tuyến. +Đây là một game được ghép từ hai trò chơi giải đố: Tetris và Puyo Puyo, và bạn có thể chơi đối đầu trong cả hai game này. Có nhiều chế độ chơi đơn và chơi trực tuyến. [MrZ: Bản PC (Steam) có cơ chế điều khiển và trải nghiệm trực tuyến khá là tệ.] ]], diff --git a/parts/language/dict_zh.lua b/parts/language/dict_zh.lua index 853beaf4..704003da 100644 --- a/parts/language/dict_zh.lua +++ b/parts/language/dict_zh.lua @@ -543,7 +543,7 @@ FNNS and {"赞助3", {"BiRS", "旋转系统 rotate", "term", - "Bias Rotation System\nTechmino原创旋转系统,基于XRS和SRS设计。\n当左/右/下(软降)被按下并且那个方向顶住了墙,按旋转后会先设定一个偏移(三个键朝各自方向加1格),在偏移的基础上试踢墙表里的位移(全都失败了会先取消向下的偏移再把踢墙重新试一遍,再都不行就取消左右,再不行就失败)。\nBiRS相比XRS只使用一个踢墙表更容易记忆,并且保留了SRS翻越地形的功能。\n\n细节补充:在测试踢墙时要满足两个条件,最终位移欧氏距离不能超过√5,并且存在水平偏移时最终水平位移必须和它不反向。", + "Bias Rotation System\nTechmino原创旋转系统,基于XRS和SRS设计。\n当左/右/下(软降)被按下并且那个方向顶住了墙,会在旋转时添加一个额外偏移(三个键朝各自方向加1格),和基础踢墙表叠加(额外偏移和叠加偏移的水平方向不能相反,且叠加偏移的位移大小不能超过√5)。如果失败,会取消向左右的偏移然后重试,还不行就取消向下的偏移。\nBiRS相比XRS只使用一个踢墙表更容易记忆,并且保留了SRS翻越地形的功能。", }, {"C2RS", "旋转系统 rotate cultris2", diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index 9183a485..413cd2ea 100644 --- a/parts/language/lang_en.lua +++ b/parts/language/lang_en.lua @@ -43,19 +43,19 @@ return { infHeightOn="Infinite Height ON", infHeightOff="Infinite Height OFF", infHeightHint="Toggle with Function 1 key", - highest="(highest: $1)", + highestGrade="(highest: $1)", speedLV="Speed Level", - piece="Piece",line="Lines",atk="Attack",eff="Efficiency", + piece="Pieces",line="Lines",atk="Attack",eff="Efficiency", rpm="RPM",tsd="TSD", - grade="Grade",techrash="Techrash", + grade="Grade",techrash="Techrashes", wave="Wave",nextWave="Next", combo="Combo",maxcmb="Max Combo", - pc="Perfect Clear",ko="KOs", + pc="Perfect Clears",ko="KOs", win="Win!", lose="Lose", - torikan="Ended", + torikan="The End", finish="Finished", gamewin="You Won", gameover="Game Over", @@ -67,14 +67,14 @@ return { page="Page ", - ai_puzzle="AI is incompatible with puzzle game mode", + ai_puzzle="AI is incompatible with the Puzzle gamemode.", ai_mission="AI is incompatible with custom missions.", ai_badPiece="AI is incompatible with custom sequences that contain non-tetrominoes.", cc_fixed="CC is incompatible with fixed sequences.", cc_swap="CC is incompatible when the hold mode is set to Swap.", - cc_solid="CC is incompatible with filled line in the field.", + cc_solid="CC is incompatible with filled lines in the field.", cc_field_too_high="CC is incompatible with fields higher than 40.", - switchSpawnSFX="Please turn on the block spawn SFX!", + switchSpawnSFX="Please turn on the piece spawn SFX!", needRestart="Restart to apply all changes.", loadError_errorMode="Failed to load '$1': no load mode called '$2'", @@ -96,7 +96,7 @@ return { pasteWrongPlace="Did you paste in the wrong place?", noFile="File missing", invalidSequence="Invalid sequence mode", - tooHighField="Field data exceeded 126 lines discarded", + tooHighField="Field data exceeds 126 lines - higher lines discarded", nowPlaying="Now playing:", @@ -215,8 +215,8 @@ return { hold="HOLD\nOverrides the number of Hold pieces displayed.", hideNext="Hidden NEXT\nHides the specified number of pieces in the Next queue.", infHold="InfiniHold\nAllows you to hold pieces infinitely.", - hideBlock="Hide Current Piece\nMakes the current pieces invisible.", - hideGhost="No Ghost\nMakes the ghost pieces invisible.", + hideBlock="Hide Active Piece\nMakes the active piece invisible.", + hideGhost="No Ghost\nMakes the ghost piece invisible.", hidden="Hide Locked Pieces\nHides locked pieces after a certain amount of time.", hideBoard="Hide Board\nPartially or completely hides the board.", flipBoard="Flip Board\nFlips or rotates the board.", @@ -230,7 +230,7 @@ return { tele="Teleport\nForces 0 DAS and 0 ARR.", noRotation="No Rotation\nDisables piece rotation.", noMove="No Movement\nDisables sideways movement.", - customSeq="Randomizer\nOverrides the block sequence randomizer.", + customSeq="Randomizer\nOverrides the piece sequence randomizer.", pushSpeed="Garbage Speed\nOverride the rising speed of the garbage lines (in blocks per frame).", boneBlock="Bone Block\nPlay with bone blocks ([ ]).", }, @@ -238,9 +238,9 @@ return { "Time:", "Key/Rot./Hold:", "Pieces:", - "Row/Dig:", + "Lines/Dig:", "Attack/DigAtk:", - "Rise(Receive-Offset):", + "Rise (Receive-Offset):", "Clears:", "Spins:", "B2B/B3B/PC/HPC:", @@ -253,7 +253,7 @@ return { "Play Count:", "Play Time:", "Key/Rot./Hold:", - "Block/Row/Atk.:", + "Pieces/Lines/Atk.:", "Receive/Offset/Rise:", "Dig/Dig Atk.:", "Eff./Dig Eff.:", @@ -511,7 +511,7 @@ C. Gamepad fineKill="100% Finesse", b2bKill="No B2B Breaks", lockout="Fail on Lock Out", - easyFresh="Normal Lock Reset", + easyFresh="Reset Lock Delay on move", deepDrop="Deep Drop", bone="Bone Blocks", @@ -551,16 +551,16 @@ C. Gamepad sound="←Audio", game="Game→", - block="Draw Blocks", + block="Draw Active Piece", smooth="Smooth Falling", - upEdge="3D Block", + upEdge="3D Blocks", bagLine="Bag Separators", ghostType="Ghost Type", ghost="Ghosts", center="Rotation Centers", grid="Grid", - lineNum="line No.", + lineNum="Line Numbers", lockFX="Lock FX", dropFX="Drop FX", @@ -587,12 +587,12 @@ C. Gamepad portrait="Portrait", msaa="MSAA level", - bg_on="Normal B.G.", - bg_off="No B.G.", - bg_custom="Custom B.G.", - defaultBG="Default B.G.", + bg_on="Normal BG", + bg_off="No BG", + bg_custom="Custom BG", + defaultBG="Default BG", resetDbg="Reset to default", - lockBG="Lock B.G.", + lockBG="Lock BG", noTheme="Disable theme", blockSatur="Block Saturation", @@ -624,8 +624,8 @@ C. Gamepad preview="Preview", das="DAS",arr="ARR", - dascut="DAS cut", - dropcut="Auto-lock cut", + dascut="DAS Cut", + dropcut="Auto-lock Cut", sddas="Soft Drop DAS",sdarr="Soft Drop ARR", ihs="Initial Hold", irs="Initial Rotation", @@ -691,7 +691,7 @@ C. Gamepad drop="Drop Delay", lock="Lock Delay", - wait="Entry Delay", + wait="Entry Delay (ARE)", fall="Line Delay", hang="Death Delay", hurry="ARE Interruption", @@ -724,13 +724,13 @@ C. Gamepad freshLimit="Lock Reset Limit", opponent="Opponent", life="Lives", - pushSpeed="Push Speed", + pushSpeed="G. Push Speed", garbageSpeed="Garbage Speed", - bufferLimit="Buffer Limit", + bufferLimit="G. Buffer Limit", heightLimit="Height Limit", ospin="TRS O-Spin", - fineKill="100% Finesse", + fineKill="No Finesse Errors", b2bKill="No B2B Breaks", lockout="Fail on Lock Out", easyFresh="Normal Lock Reset", @@ -890,22 +890,22 @@ C. Gamepad ['dig_eff_40l']= {"Dig", "EFFICIENCY 40L", "Dig 40 garbage lines with the least pieces!"}, ['dig_eff_100l']= {"Dig", "EFFICIENCY 100L","Dig 100 garbage lines with the least pieces!"}, ['dig_eff_400l']= {"Dig", "EFFICIENCY 400L","Dig 400 garbage lines with the least pieces!"}, - ['dig_quad_10l']= {"Dig", "TECHRASH 10L", "Dig 10 garbage lines using only techrash!"}, - ['drought_n']= {"Drought", "100L", "100L but without I blocks"}, - ['drought_l']= {"Drought+", "100L", "W. T. F."}, + ['dig_quad_10l']= {"Dig", "TECHRASH 10L", "Dig 10 garbage lines while only clearing Techrashes!"}, + ['drought_n']= {"Drought", "100L", "100L but without I pieces"}, + ['drought_l']= {"Drought+", "100L", "WTF"}, ['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with increasing speed"}, ['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon"}, - ['solo_e']= {"Battle", "EASY", "Defeat the AI!"}, - ['solo_n']= {"Battle", "NORMAL", "Defeat the AI!"}, - ['solo_h']= {"Battle", "HARD", "Defeat the AI!"}, + ['solo_e']= {"Battle", "EASY", "Defeat the AI as fast as you can!"}, + ['solo_n']= {"Battle", "NORMAL", "Defeat the AI as fast as you can!"}, + ['solo_h']= {"Battle", "HARD", "Defeat the AI as fast as you can!"}, ['solo_l']= {"Battle", "LUNATIC", "Defeat the AI!"}, ['solo_u']= {"Battle", "ULTIMATE", "Defeat the AI!"}, - ['techmino49_e']= {"Tech VS 49", "EASY", "49-player battle.\nThe last one standing wins"}, - ['techmino49_h']= {"Tech VS 49", "HARD", "49-player battle.\nThe last one standing wins"}, - ['techmino49_u']= {"Tech VS 49", "ULTIMATE", "49-player battle.\nThe last one standing wins"}, - ['techmino99_e']= {"Tech VS 99", "EASY", "99-player battle.\nThe last one standing wins"}, - ['techmino99_h']= {"Tech VS 99", "HARD", "99-player battle.\nThe last one standing wins"}, - ['techmino99_u']= {"Tech VS 99", "ULTIMATE", "99-player battle.\nThe last one standing wins"}, + ['techmino49_e']= {"Techmino 49", "EASY", "49-player battle.\nThe last one standing wins"}, + ['techmino49_h']= {"Techmino 49", "HARD", "49-player battle.\nThe last one standing wins"}, + ['techmino49_u']= {"Techmino 49", "ULTIMATE", "49-player battle.\nThe last one standing wins"}, + ['techmino99_e']= {"Techmino 99", "EASY", "99-player battle.\nThe last one standing wins"}, + ['techmino99_h']= {"Techmino 99", "HARD", "99-player battle.\nThe last one standing wins"}, + ['techmino99_u']= {"Techmino 99", "ULTIMATE", "99-player battle.\nThe last one standing wins"}, ['round_e']= {"Turn-Based", "EASY", "Take turns to play against the AI!"}, ['round_n']= {"Turn-Based", "NORMAL", "Take turns to play against the AI!"}, ['round_h']= {"Turn-Based", "HARD", "Take turns to play against the AI!"}, @@ -933,10 +933,10 @@ C. Gamepad ['blind_l']= {"Invisible", "NO GHOST", "For professionals"}, ['blind_u']= {"Invisible", "NO FIELD", "Are you ready?"}, ['blind_wtf']= {"Invisible", "VOID", "You're not ready."}, - ['classic_e']= {"Classic", "EASY", "A low-speed recreation game from the 80s"}, - ['classic_h']= {"Classic", "HARD", "A medium-speed recreation game from the 80s"}, - ['classic_l']= {"Classic", "LUNATIC", "A high-speed recreation game from the 80s"}, - ['classic_u']= {"Classic", "ULTIMATE", "An extreme-speed recreation game from the 80s"}, + ['classic_e']= {"Classic", "EASY", "A low-speed recreation of a game from the 80s"}, + ['classic_h']= {"Classic", "HARD", "A medium-speed recreation of a game from the 80s"}, + ['classic_l']= {"Classic", "LUNATIC", "A high-speed recreation of a game from the 80s"}, + ['classic_u']= {"Classic", "ULTIMATE", "An extreme-speed recreation of a game from the 80s"}, ['survivor_e']= {"Survival", "EASY", "How long can you survive?"}, ['survivor_n']= {"Survival", "NORMAL", "How long can you survive?"}, ['survivor_h']= {"Survival", "HARD", "How long can you survive?"}, @@ -948,36 +948,36 @@ C. Gamepad ['defender_l']= {"Defender", "LUNATIC", "Practice your defending skills!"}, ['dig_h']= {"Driller", "HARD", "Digging practice!"}, ['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"}, - ['c4wtrain_n']= {"C4W Training", "NORMAL", "Infinite combos"}, - ['c4wtrain_l']= {"C4W Training", "LUNATIC", "Infinite combos"}, - ['pctrain_n']= {"PC Training", "NORMAL", "Perfect Clear practice"}, - ['pctrain_l']= {"PC Training", "LUNATIC", "A harder Perfect Clear practice"}, - ['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"}, - ['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"}, - ['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"}, - ['pc_inf']= {"Inf. PC Challenge", "", "Get PCs as much as you can"}, - ['tech_n']= {"Tech B2B", "NORMAL", "Try to keep the\nBack-to-Back chain!"}, - ['tech_n_plus']= {"Tech B2B", "NORMAL+", "Spins & PCs only"}, - ['tech_h']= {"Tech B2B", "HARD", "Try to keep the\nBack-to-Back chain!"}, - ['tech_h_plus']= {"Tech B2B", "HARD+", "Spins & PCs only"}, - ['tech_l']= {"Tech B2B", "LUNATIC", "Try to keep the\nBack-to-Back chain!"}, - ['tech_l_plus']= {"Tech B2B", "LUNATIC+", "Spins & PCs only"}, - ['tech_finesse']= {"Tech Finesse", "", "No finesse errors!"}, - ['tech_finesse_f']= {"Tech Finesse", "PLUS", "No normal clears and finesse errors!"}, - ['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"}, - ['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"}, - ['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"}, - ['backfire_n']= {"Backfire", "NORMAL", "Hold back the backfiring garbage lines"}, - ['backfire_h']= {"Backfire", "HARD", "Hold back the backfiring garbage lines"}, - ['backfire_l']= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines"}, - ['backfire_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines"}, - ['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"}, - ['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40 lines!"}, - ['zen']= {'Zen', "200", "A 200-line run with no time limit"}, + ['c4wtrain_n']= {"C4W Training", "NORMAL", "Clear 100 lines!"}, + ['c4wtrain_l']= {"C4W Training", "LUNATIC", "Perform as many combos as you can within 100 lines!"}, + ['pctrain_n']= {"PC Training", "NORMAL", "Practice filling 3×4 boxes, PCO shapes and 4×4 boxes!"}, + ['pctrain_l']= {"PC Training", "LUNATIC", "Practice filling 5×4 and 6×4 boxes!"}, + ['pc_n']= {"PC Challenge", "NORMAL", "Get as many PCs as you can within 100 lines!"}, + ['pc_h']= {"PC Challenge", "HARD", "Get as many PCs as you can within 100 lines!"}, + ['pc_l']= {"PC Challenge", "LUNATIC", "Get as many PCs as you can within 100 lines!"}, + ['pc_inf']= {"PC Challenge", "INFINITE", "Get as many PCs in a row as you can!"}, + ['tech_n']= {"Tech", "NORMAL", "Send 100 lines as fast as you can while keeping the Back-to-Back chain!"}, + ['tech_n_plus']= {"Tech", "NORMAL+", "Send 100 lines as fast as you can using only spins and PCs!"}, + ['tech_h']= {"Tech", "HARD", "Send 100 lines as fast as you can while keeping the Back-to-Back chain!"}, + ['tech_h_plus']= {"Tech", "HARD+", "Send 100 lines as fast as you can using only spins and PCs!"}, + ['tech_l']= {"Tech", "LUNATIC", "Send 100 lines as fast as you can while keeping the Back-to-Back chain!"}, + ['tech_l_plus']= {"Tech", "LUNATIC+", "Send 100 lines as fast as you can using only spins and PCs!"}, + ['tech_finesse']= {"Tech Finesse", "", "Send 100 lines as fast as you can while keeping perfect finesse!"}, + ['tech_finesse_f']= {"Tech Finesse", "PLUS", "Send 100 lines as fast as you can while keeping perfect finesse and not performing normal clears!"}, + ['tsd_e']= {"TSD Challenge", "EASY", "Get as many T-Spin Doubles in a row as you can!"}, + ['tsd_h']= {"TSD Challenge", "HARD", "Get as many T-Spin Doubles in a row as you can!"}, + ['tsd_u']= {"TSD Challenge", "ULTIMATE", "Get as many T-Spin Doubles in a row as you can!"}, + ['backfire_n']= {"Backfire", "NORMAL", "Send 100 lines as fast as you can while attacking yourself!"}, + ['backfire_h']= {"Backfire", "HARD", "Send 100 lines as fast as you can while attacking yourself!"}, + ['backfire_l']= {"Backfire", "LUNATIC", "Send 100 lines as fast as you can while attacking yourself!"}, + ['backfire_u']= {"Backfire", "ULTIMATE", "Send 100 lines as fast as you can while attacking yourself!"}, + ['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines as fast as you can!"}, + ['sprintEff']= {"Efficiency", "40L", "Send more attack in 40 lines!"}, + ['zen']= {'Zen', "200L", "A 200-line score attack with no time limit"}, ['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack"}, - ['infinite']= {"Infinite", "", "Just a sandbox"}, - ['infinite_dig']= {"Infinite: Dig", "", "Dig-diggin'-dug"}, - ['marathon_inf']= {"Marathon", "INFINITE", "Infinite marathon."}, + ['infinite']= {"Infinite", "", "Just a sandbox"}, + ['infinite_dig']= {"Dig", "INFINITE", "Dig-diggin'-dug"}, + ['marathon_inf']= {"Marathon", "INFINITE", "Infinite marathon."}, ['custom_clear']= {"Custom", "NORMAL"}, ['custom_puzzle']= {"Custom", "PUZZLE"}, @@ -997,7 +997,7 @@ C. Gamepad "1 next 1 hold!", "1 next 6 hold!", "20G is actually a brand new game rule!", - "40-line Sprint WR: 14.188s by Lurny", + "40-line Sprint WR: 13.928s by sillyshark123", "6 next 1 hold!", "6 next 6 hold?!", "A choke a day keeps record away", @@ -1025,7 +1025,7 @@ C. Gamepad "git commit", "git push -f", "Got a suggestion? Post it on our Discord server!", - "Have you noticed what a \"rotation\" does do to a block?", + "Have you noticed what a \"rotation\" does do to a piece?", "Headphones recommended for a better experience.", "Hello world!", "I3 and L3 are the only two possible triminoes.", diff --git a/parts/language/lang_es.lua b/parts/language/lang_es.lua index 4df2d872..49c1e1b9 100644 --- a/parts/language/lang_es.lua +++ b/parts/language/lang_es.lua @@ -912,7 +912,7 @@ return { ['defender_l']= {"Defensor", "Lunático", "¡Practica la defensa!"}, ['dig_h']= {"Downstack", "Difícil", "¡Practica el downstackeo!"}, ['dig_u']= {"Downstack", "Supremo", "¡Practica el downstackeo!"}, - ['c4wtrain_n']= {"Entrenar C4W", "Normal", "Combos infinitos."}, + ['c4wtrain_n']= {"Entrenar C4W", "Normal", "¡Limpia 100 líneas!"}, ['c4wtrain_l']= {"Entrenar C4W", "Lunático", "Combos infinitos."}, ['pctrain_n']= {"Entrenar PC", "Normal", "Modo sencillo para practicar Perfect Clears."}, ['pctrain_l']= {"Entrenar PC", "Lunático", "Modo complejo para practicar Perfect Clears."}, diff --git a/parts/language/lang_fr.lua b/parts/language/lang_fr.lua index c8338e8a..ab65a205 100644 --- a/parts/language/lang_fr.lua +++ b/parts/language/lang_fr.lua @@ -885,7 +885,7 @@ return { ['defender_l']= {"Défendant", "LUNATIQUE", "Soyez défensifs !"}, ['dig_h']= {"Perceuse", "DIFFICILE", "Essayez de creuser !"}, ['dig_u']= {"Perceuse", "ULTIME", "Essayez de creuser !"}, - ['c4wtrain_n']= {"Mode essai C4W", "NORMAL", "Combos infinis."}, + ['c4wtrain_n']= {"Mode essai C4W", "NORMAL", "Nettoyez 100 lignes !"}, ['c4wtrain_l']= {"Mode essai C4W", "LUNATIQUE", "Combos infinis."}, ['pctrain_n']= {"Mode essai PC", "NORMAL", "Mode Perfect Clear simple"}, ['pctrain_l']= {"Mode essai PC", "LUNATIQUE", "Mode Perfect Clear dur"}, diff --git a/parts/language/lang_id.lua b/parts/language/lang_id.lua index 6413adfe..f08d1934 100644 --- a/parts/language/lang_id.lua +++ b/parts/language/lang_id.lua @@ -910,7 +910,7 @@ return { ['defender_l']= {"Pembela", "GILA", "Praktekkan keahlian membela Anda!"}, ['dig_h']= {"Pembor", "SULIT", "Praktekkan keahlian menggali Anda!"}, ['dig_u']= {"Pembor", "TERAKHIR", "Praktekkan keahlian menggali Anda!"}, - ['c4wtrain_n']= {"Latihan C4W", "NORMAL", "Kombo tidak terbatas."}, + ['c4wtrain_n']= {"Latihan C4W", "NORMAL", "Buat 100 baris!"}, ['c4wtrain_l']= {"Latihan C4W", "GILA", "Kombo tidak terbatas."}, ['pctrain_n']= {"Latihan PC", "NORMAL", "Latihan PC"}, ['pctrain_l']= {"Latihan PC", "GILA", "Latihan PC yang lebih sulit"}, diff --git a/parts/language/lang_ja.lua b/parts/language/lang_ja.lua index c5212bb8..91bfb9a6 100644 --- a/parts/language/lang_ja.lua +++ b/parts/language/lang_ja.lua @@ -954,7 +954,7 @@ C. ゲームパッド ['defender_l']= {"相殺王", "LUNATIC", "防御力を磨け!"}, ['dig_h']= {"掘王", "HARD", "掘りを磨け"}, ['dig_u']= {"掘王", "ULTIMATE", "掘りを磨け"}, - ['c4wtrain_n']= {"C4Wトレーニング", "NORMAL", "無限中開け"}, + ['c4wtrain_n']= {"C4Wトレーニング", "NORMAL", "100line消せ!"}, ['c4wtrain_l']= {"C4Wトレーニング", "LUNATIC", "無限中開け"}, ['pctrain_n']= {"パフェトレーニング", "NORMAL", "パフェの練習!"}, ['pctrain_l']= {"パフェトレーニング", "LUNATIC", "もっと難しいパフェの練習!"}, diff --git a/parts/language/lang_pt.lua b/parts/language/lang_pt.lua index 49c931fd..ced9d26c 100644 --- a/parts/language/lang_pt.lua +++ b/parts/language/lang_pt.lua @@ -898,7 +898,7 @@ return { ['defender_l']= {"Defensor", "LUNÁTICO", "Prática de defensiva!"}, ['dig_h']= {"Cavador", "DIFÍCIL", "Prática de cavar!"}, ['dig_u']= {"Cavador", "ULTIMATE", "Prática de cavar!"}, - ['c4wtrain_n']= {"Treinamento C4W", "NORMAL", "Combos infinitos."}, + ['c4wtrain_n']= {"Treinamento C4W", "NORMAL", "Limpe 100 linhas!"}, ['c4wtrain_l']= {"Treinamento C4W", "LUNÁTICO", "Combos infinitos."}, ['pctrain_n']= {"Treinamento PC", "NORMAL", "Modo simples de limpeza perfeita."}, ['pctrain_l']= {"Treinamento PC", "LUNÁTICO", "Modo duro de limpeza perfeita."}, diff --git a/parts/language/lang_vi.lua b/parts/language/lang_vi.lua index c888395e..96b963c8 100644 --- a/parts/language/lang_vi.lua +++ b/parts/language/lang_vi.lua @@ -1,8 +1,5 @@ local C=COLOR --- There are some strings, due to game's history, temproary be commented just in case --- If it is not used anymore, it will be removed, in one day… - return { fallback='en', loadText={ @@ -153,11 +150,8 @@ return { noticeNotFound="Không có thông báo", }, PlayerManager={ - -- invalidEmail="Email không hợp lệ", - -- playerNotFound="Không tìm thấy người chơi", - -- invalidEmailPass="Email hoặc người chơi không hợp lệ", - -- emailExists="Email đã tồn tại", - -- emailSendError="Lỗi gửi email", + playerNotFound="Không tìm thấy người chơi", + invalidEmailPass="Email hoặc người chơi không hợp lệ", invalidCode="Mã không hợp lệ", invalidAccessToken="Mã xác thực không hợp lệ", }, @@ -181,13 +175,7 @@ return { versionNotMatch="Phiên bản không khớp", notFinished="Sắp ra mắt!", - -- Deprecated - -- noUsername="Vui lòng nhập email của bạn", - -- wrongEmail="Địa chỉ email không hợp lệ", - -- wrongCode="Mã xác minh không hợp lệ", - -- noPassword="Vui lòng nhập mật khẩu của bạn", - -- diffPassword="Mật khẩu không đúng", - -- checkEmail="Yêu cầu đăng ký đã được gửi.", + wrongCode="Mã xác minh không hợp lệ", wsFailed="Kết nối WebSocket đã thất bại: $1", wsClose="WebSocket đã đóng: $1", @@ -213,7 +201,7 @@ return { customBGloadFailed="Định dạng ảnh không được hỗ trợ", errorMsg="Techmino bị lỗi và cần phải được khởi động lại\nBạn có thể gửi error log để giúp dev sửa game nhanh hơn.", - tryAnotherBuild="CO LOI KHI GIAI MA UTF-8! Neu dang choi Techmino tren Windows: hay doi tu x86 sang x64 va nguoc lai.", + tryAnotherBuild="LOI UTF-8! Neu dang choi Techmino tren Windows: hay doi tu x86 sang x64 va nguoc lai.", modInstruction="Hãy chọn modifier bạn muốn.\nMod cho phép bạn có thể tùy biến game, nhưng cũng có thể làm game sập.\nKể cả thế, hãy thoải mái và chơi theo cách của bạn!\nBạn có thể dùng bàn phím để chọn mod (giữ Shift để chọn lùi)\nĐiểm sẽ không được lưu lại khi dùng mod.", modApplyAtInstruction="Chọn thời điểm bạn muốn mod được áp dụng.\npreInit: Trước khi nạp game. Đây là tùy chọn mặc định từ phiên bản 0.17.15 trở về trước. Một số mod có thể gặp vấn đề nếu dùng tùy chọn này.\npostInit: Sau khi nạp chế độ chơi, có thể sửa được một số lỗi ở preInit. Tuy nhiên, mod có thể bị mất tác dụng ở một số trường hợp nhất định.\nalways: Luôn áp dụng trong cả game. Tùy chọn này sẽ giúp bạn giữ lại tác dụng của mod dù ở bất kì trường hợp nào.", @@ -541,9 +529,6 @@ C. Tay cầm chơi game (Gamepad): sound="Âm thanh→", style="Trang trí", - -- ctrl="Cài đặt điều khiển", - -- key="Cài đặt bố cục phím", - -- touch="Cài đặt cảm ứng", ctrl="Điều chỉnh thg. số", -- ctrl="Điều chỉnh độ nhạy" key="Sửa bố cục bàn phím", touch="Sửa bố cục cảm ứng", @@ -631,7 +616,6 @@ C. Tay cầm chơi game (Gamepad): apply="Chọn", }, setting_control={ - -- title="Cài đặt Điều khiển", title="Điều chỉnh thông số", preview="Xem trước", @@ -834,14 +818,6 @@ C. Tay cầm chơi game (Gamepad): paste="Dán mã", submit="Gửi", }, - -- reset_password={ - -- title="Đặt lại Mật khẩu", - -- send="Gửi mã", - -- code="Mã xác nhận", - -- password="Mật khẩu", - -- password2="Nhập lại Mật khẩu", - -- setPW="Đặt mật khẩu", - -- }, account={ title="Tài khoản", }, @@ -975,7 +951,7 @@ C. Tay cầm chơi game (Gamepad): ['defender_l']= {"Defender", "RẤT KHÓ", "Luyện tập kỹ năng phòng thủ!"}, ['dig_h']= {"Driller", "KHÓ", "Luyện tập kỹ năng đào xuống!"}, ['dig_u']= {"Driller", "THÁCH ĐẤU", "Luyện tập kỹ năng đào xuống!"}, - ['c4wtrain_n']= {"C4W Training", "THƯỜNG", "Combo vô tận"}, + ['c4wtrain_n']= {"C4W Training", "THƯỜNG", "Xoá 100 hàng!"}, ['c4wtrain_l']= {"C4W Training", "RẤT KHÓ", "Combo vô tận"}, ['pctrain_n']= {"PC Training", "THƯỜNG", "Luyện tập Perfect Clear"}, ['pctrain_l']= {"PC Training", "RẤT KHÓ", "Luyện tập Perfect Clear nhưng khó hơn"}, @@ -1085,7 +1061,7 @@ C. Tay cầm chơi game (Gamepad): "Split clear sắp ra mắt!", "Techmino là sự kết hợp giữa \"technique\" và \"tetromino\"", "Hình như mình nghiện Techmino rồi!", - "Techmino trên Nspire-CX ư? Có thật đấy! Mà khoan đã, hai game này không giống nhau chút nào cả!", + "Techmino trên Nspire-CX ư? Ừ, nhưng đó là một game khác được viết bởi MrZ!", "TetroDictionary đã ra mắt (có bản tiếng Việt rồi, nhưng mà hơi bruh, thôi vẫn đủ xài!)", "Những cái tên xuất hiện ở phần nền trong trang Đội Ngũ là danh sách các nhà tài trợ của chúng tôi", "Toàn bộ nhạc game này đã có mặt trên Soundcloud rồi đấy!", @@ -1109,7 +1085,6 @@ C. Tay cầm chơi game (Gamepad): "Bạn có thể mở thư mục chứa dữ liệu từ trang Thống kê", "Bạn có thể thực hiện Spin với tất cả cả miếng gạch trong game này", "Bạn có thể đặt hướng xuất hiện cho từng miếng gạch", - "ZS JL T O I", {C.C,"Also try 15puzzle!"}, {C.C,"Also try Ballance!"}, {C.C,"Also try Minecraft!"}, @@ -1145,16 +1120,12 @@ C. Tay cầm chơi game (Gamepad): "Phát âm từ Techmino như thế nào mới đúng?", -- English UK: /'tɛkminəʊ/; English US: /tɛkminoʊ/ "Techmino phát âm trong tiếng Anh là /'tɛkminəʊ/; còn tiếng Mỹ là /tɛkminoʊ/.", - -- - "Ủa Techmino phải đọc là \"Tét-mai-nô\" hay là \"Tét-mi-nô\" vậy?", -- Where to download Techmino? "Tải Techmino ở đâu vậy? Trên GitHub đấy!", -- Techmino's birthday "Ngày sinh nhật của Techmino? Hiện tại (đang giả định) là 26/T6.", -- How to O-spin: Rotate 626 times in one second (mistaken) "Cách O-spin? Nhấn phím xoay 626 lần trong 1 giây (ĐÙA ĐẤY ĐỪNG TIN!)", - -- Hope you all like Z... Oh no, like Techmino - {"Mình mong các bạn sẽ thích ",C.W,"Z",C.Z,"… Ối! Không phải, thích ",C.G,"Techmino",C.Z," cơ! Nhầm nhầm nhầm!"}, -- 2021 was the year of Techmino's online debut. "2021 là năm ra mắt chế độ trực tuyến của Techmino.", -- The Chinese name of this game is 'Block Research Institute'. @@ -1163,8 +1134,8 @@ C. Tay cầm chơi game (Gamepad): "Tên game không phải là Teachmino!", -- "Muốn game có thứ gì đó đặc biệt lúc mở game? Hãy chỉnh đồng hồ trên điện thoại vào một ngày đặc biệt nào đó đi!", - -- - "Trừ khi bạn đang chơi Techmino: \"O-spin is a lie!\")", + -- O-spin is a lie! + {C.Y,"O-spin",C.Z," is a ",C.R,"lie",C.Z,"!"}, -- techminohaowan "Hảo Techmino", -- @@ -1176,7 +1147,7 @@ C. Tay cầm chơi game (Gamepad): -- "Meow!" "Meow!", -- Getting popup messages in the middle of a game? Go to settings and disable them. - "Thông báo tự dưng hiện lên giữa game? Vào cài đặt tắt nó đi!", + "Thông báo tự dưng hiện lên giữa game? Vào cài đặt và tắt nó đi!", "Hãy bật Do Not Distrub (Không làm phiền) nếu bạn có quá nhiều thông báo.", -- Don't play with your phone if your homework isn't finished. "Đừng chơi điện thoại khi bài tập về nhà còn chưa hoàn thành.", @@ -1189,7 +1160,7 @@ C. Tay cầm chơi game (Gamepad): -- It seems like no one has reached a high level by playing with their feet yet. "Hình như tới giờ chưa ai chơi xếp gạch giỏi bằng chân…", -- Moderate gaming is good for the brain. Addiction to games is harmful. Plan your time - "Chơi game vừa phải có thể tốt cho bộ não. Nhưng nếu nghiện thì toeng! Nhớ lập th!ời gian biểu nhé!", + "Chơi game vừa phải có thể tốt cho bộ não. Nhưng nếu nghiện thì toang! Nhớ lập thời gian biểu nhé!", -- The ability to dig is extremely important in battles!!! "Khả năng đào xuống (downstacking) của bạn là RẤT QUAN TRỌNG trong chiến đấu!!!", -- Skilled players of the Classic Tetris game are also formidable; don't underestimate them @@ -1199,7 +1170,7 @@ C. Tay cầm chơi game (Gamepad): -- To protect the players' well-being, the game has a temporary and simplified anti-addiction system! (But you probably won't trigger it, haha) "Để tránh việc người chơi nào đó chơi quá lâu, game đã có hệ thống chống nghiện đơn giản tạm thời (Nhưng bạn có lẽ sẽ không bao giờ kích hoạt chúng đâu, haha)", -- Basic stacking and digging skills are crucial; those who neglect these two aspects often regret it (trust me) - {"Kỹ năng xếp lên vào đào xuống là 2 kỹ năng RẤT quan trọng; những ai (đã/từng) coi thường hay bỏ bê hai khía cạnh này thường hay bị bón hành súp mặt lờ (tin ",C.W,"MrZ",C.Z," đi!)"}, + {"Kỹ năng xếp lên vào đào xuống là 2 kỹ năng RẤT quan trọng; những ai coi thường hay bỏ bê hai khía cạnh này thường hay bị bón hành súp mặt lờ (tin ",C.W,"MrZ",C.Z," đi!)"}, -- Even if you're topped out, don't give up; every line of garbage can potentially become your weapon. "Đừng bỏ cuộc khi đống hàng rác đang làm bạn sắp bị top out, bởi bạn có thể biến chúng trở thành đòn phản công.", -- The video shown above is not a recording; it's the robot playing in real-time. @@ -1241,7 +1212,6 @@ C. Tay cầm chơi game (Gamepad): "git stash", "git stash apply", "git submodule update", - "git merge --rebase", "git merge --squash", "sudo rm -rf /*", "shutdown /s /t 0", -- Turn off computer completely (no Fast Boot) @@ -1255,26 +1225,25 @@ C. Tay cầm chơi game (Gamepad): {"Nếu bạn thực sự có hứng thú trong lập trình, tôi đề xuất sử dụng Lua. Dễ cài đặt, cú pháp đơn giản, tốc độ thực thi nhanh. Hãy tránh xa những tiết học lập trình chán ngắt ở trên trường luôn đi! (haha) - ",C.W,"MrZ",C.Z," said."}, -- -- CHANGELOG - {C.lW, "V0.0.091726",": ",C.Z, "Đã thêm hệ thống xoay TRS"}, - {C.lW, "V0.7.9" ,": ",C.Z, "Đã thêm ",C.yellow,"O-spin"}, - {C.lW, "V0.7.19" ,": ",C.Z, "Đã thêm hệ thống voice"}, - {C.lW, "V0.7.22" ,": ",C.Z, "Đã thêm hiệu ứng rơi mượt"}, - {C.lW, "V0.8.5" ,": ",C.Z, "Đã thêm map và sắp xếp lại các chế độ"}, - {C.lW, "V0.8.19" ,": ",C.Z, "Đã thêm Pentomino"}, - {C.lW, "V0.9.0" ,": ",C.Z, "Đã thêm chế độ tự do và khả năng tùy biến chuỗi gạch"}, - {C.lW, "V0.10.0" ,": ",C.Z, "Đã thêm hệ thống replay"}, - {C.lW, "V0.11.1" ,": ",C.Z, "Đã thêm Little Z Dictionary (Zictionary)"}, - {C.lW, "V0.12.2" ,": ",C.Z, "Đã thêm hệ thống mod"}, + {C.lW, "V0.0.091726",": ",C.Z, "Thêm hệ thống xoay TRS"}, + {C.lW, "V0.7.9" ,": ",C.Z, "Thêm ",C.yellow,"O-spin"}, + {C.lW, "V0.7.19" ,": ",C.Z, "Thêm hệ thống voice"}, + {C.lW, "V0.7.22" ,": ",C.Z, "Thêm hiệu ứng rơi mượt"}, + {C.lW, "V0.8.5" ,": ",C.Z, "Thêm map và sắp xếp lại các chế độ"}, + {C.lW, "V0.8.19" ,": ",C.Z, "Thêm Pentomino"}, + {C.lW, "V0.9.0" ,": ",C.Z, "Thêm chế độ tự do và cho phép tùy biến chuỗi gạch"}, + {C.lW, "V0.10.0" ,": ",C.Z, "Thêm hệ thống replay"}, + {C.lW, "V0.11.1" ,": ",C.Z, "Thêm Little Z Dictionary (Zictionary)"}, + {C.lW, "V0.12.2" ,": ",C.Z, "Thêm hệ thống mod"}, {C.lW, "V0.13.0" ,": ",C.Z, "Thử nghiệm chế độ trực tuyến"}, - {C.lW, "V0.13.2" ,": ",C.Z, "Đã thêm khả năng tùy biến chiều cao bảng"}, - {C.lW, "V0.13.3" ,": ",C.Z, "Đã thêm console"}, - {C.lW, "V0.14.5" ,": ",C.Z, "Đã thêm BGM đầu tiên được remix bởi cộng đồng"}, - {C.lW, "V0.15.5" ,": ",C.Z, "Đã thêm menu replay"}, - {C.lW, "V0.16.0" ,": ",C.Z, "Đã thêm hệ thống xoay BiRS"}, - {C.lW, "V0.16.2" ,": ",C.Z, "Đã thêm studio SFX với phong cách hit pad"}, - {C.lW, "V0.17.0" ,": ",C.Z, "Đã thêm hõ trợ điều khiển bằng joystick"}, + {C.lW, "V0.13.2" ,": ",C.Z, "Thêm khả năng thay đổi chiều cao bảng"}, + {C.lW, "V0.13.3" ,": ",C.Z, "Thêm console"}, + {C.lW, "V0.14.5" ,": ",C.Z, "Thêm BGM đầu tiên được remix bởi cộng đồng"}, + {C.lW, "V0.15.5" ,": ",C.Z, "Thêm menu replay"}, + {C.lW, "V0.16.0" ,": ",C.Z, "Thêm hệ thống xoay BiRS"}, + {C.lW, "V0.16.2" ,": ",C.Z, "Thêm studio SFX với phong cách hit pad"}, + {C.lW, "V0.17.0" ,": ",C.Z, "Thêm khả năng điều khiển bằng joystick"}, {C.lW, "V0.17.3" ,": ",C.Z, "Dừng phát triển Techmino, tập trung phát triển game mới"}, - {C.lW, "V0.17.12" ,": ",C.Z, "Đã thêm ngôn ngữ tiếng Việt"}, -- -- MATH FORMULAS "(a+b)²=a²+2ab+b²", @@ -1300,15 +1269,13 @@ C. Tay cầm chơi game (Gamepad): -- -- SEA'S JOKE {C.W,"MrZ",C.Z," còn có một biệt danh dễ thương hơn, đó là ",C.W,"Z-Chan"}, - "Có hơn 400 mẹo bạn có thể nhìn thấy ở đây, là cái dòng chữ này, nếu bạn đang chơi Techmino tiếng Trung", {C.lSea,"Sea: ",C.Z,"Tui không có đủ mặn để viết joke. Nên một số câu đùa đang chạy ở đây được viết bởi ",C.yellow,"Shard Nguyễn",C.Z,". \"Em cảm ơn anh!\""}, {C.lSea,"Sea: ",C.Z,"Tui đang tự hỏi liệu còn bao nhiêu lỗi tui bỏ sót lúc dịch game không? Tính ra tui đã cập nhật đi cập nhật lại cũng 4-5 lần rồi."}, - {"Cộng đồng Tetris ",C.R,"Việt ",C.lY,"Nam ",C.Z,": https://discord.gg/hoiphuhovietnam"}, -- Tetris Vietnam (TVN) - {"\"Tetris Việt Nam\"? Không, đó là \"Hội phụ hồ Việt Nam\""}, - {C.W,"MrZ ",C.Z,"vẫn chưa biết chọn tên nào để đặt cho từ điển của Techmino. Hiện có 3 tên: \"Zictionary\", \"TetroDictionary\" và \"Little Z Dictionary\""}, - "Ủa tao nhớ game này tên là xếp hình mà? Ừ thì đúng nhưng để giữ độ đồng nhất và tránh bị cấn mồm thì nên gọi game này là game xếp gạch.", + {"Cộng đồng Tetris ",C.R,"Việt ",C.lY,"Nam ",C.Z,": https://discord.gg/jX7BX9g"}, -- Tetris Vietnam (TVN) + {"\"Tetris Việt Nam\"? Không, đó là \"Hội phụ hồ Việt Nam\" (https://discord.gg/hoiphuhovietnam)"}, + "\"Zictionary\" có 2 tên gọi khác, đó là: \"TetroDictionary\" và \"Little Z Dictionary\"", "Mình xin phép ủng hộ cho player này. Ủng hộ càng nhiều tỉ lệ thắng càng cao!", {"Aiiiii mua cần phô mai ủng hộ ",C.yellow,"Chủ tiệm phô mai",C.Z," không?"}, -- A joke in TVN -- Who will you choose? A girl that can break up to you and make you sad diff --git a/parts/language/lang_zh.lua b/parts/language/lang_zh.lua index c3b4cf72..7eccf2fe 100644 --- a/parts/language/lang_zh.lua +++ b/parts/language/lang_zh.lua @@ -867,7 +867,7 @@ return { ['sprint_1000l']= {"竞速", "1000L", "消除1000行"}, ['construct_sg']= {"拼花", "秘密段位", "按照提示完成经典的“大于号”拼图"}, ['construct_checker']={"拼花", "棋盘", "按照提示搭建棋盘的图案"}, - ['construct_invsg']= {"拼花", "折线", "按照提示搭建折线图案"}, + ['construct_invsg']= {"拼花", "斜线", "按照提示搭建斜线图案"}, ['sprintPenta']= {"竞速", "五连块", "伤脑筋十八块"}, ['sprintMPH']= {"竞速", "MPH", "纯随机\n无预览\n无暂存"}, ['sprint123']= {"竞速", "M123", "40L,但只有1~3连块"}, @@ -875,10 +875,10 @@ return { ['dig_40l']= {"挖掘", "40L", "挖掘40行"}, ['dig_100l']= {"挖掘", "100L", "挖掘100行"}, ['dig_400l']= {"挖掘", "400L", "挖掘400行"}, - ['dig_eff_10l']= {"挖掘", "效率 10L", "用尽量少的块数挖掘10行"}, - ['dig_eff_40l']= {"挖掘", "效率 40L", "用尽量少的块数挖掘40行"}, - ['dig_eff_100l']= {"挖掘", "效率 100L", "用尽量少的块数挖掘100行"}, - ['dig_eff_400l']= {"挖掘", "效率 400L", "用尽量少的块数挖掘400行"}, + ['dig_eff_10l']= {"挖掘", "效率 10L", "用最少的块数挖掘10行"}, + ['dig_eff_40l']= {"挖掘", "效率 40L", "用最少的块数挖掘40行"}, + ['dig_eff_100l']= {"挖掘", "效率 100L", "用最少的块数挖掘100行"}, + ['dig_eff_400l']= {"挖掘", "效率 400L", "用最少的块数挖掘400行"}, ['dig_quad_10l']= {"挖掘", "消四10L", "挖掘10行,但只能消四"}, ['drought_n']= {"干旱", "100L", "你I没了"}, ['drought_l']= {"干旱+", "100L", "后 妈 发 牌"}, @@ -937,7 +937,7 @@ return { ['defender_l']= {"防守", "疯狂", "防守练习"}, ['dig_h']= {"挖掘", "困难", "挖掘练习"}, ['dig_u']= {"挖掘", "极限", "挖掘练习"}, - ['c4wtrain_n']= {"C4W练习", "普通", "无 限 连 击"}, + ['c4wtrain_n']= {"C4W练习", "普通", "消除100行"}, ['c4wtrain_l']= {"C4W练习", "疯狂", "无 限 连 击"}, ['pctrain_n']= {"全清训练", "普通", "简易PC题库,熟悉全清定式的组合"}, ['pctrain_l']= {"全清训练", "疯狂", "困难PC题库,强算力者进"}, diff --git a/parts/language/lang_zh_code.lua b/parts/language/lang_zh_code.lua index 902cfb69..4d96ded2 100644 --- a/parts/language/lang_zh_code.lua +++ b/parts/language/lang_zh_code.lua @@ -858,7 +858,7 @@ return { ['defender_l']= {"Defender(Lunatic);", "", "防守练习"}, ['dig_h']= {"Dig(Hard);", "", "挖掘练习"}, ['dig_u']= {"Dig(Ultimate);", "", "挖掘练习"}, - ['c4wtrain_n']= {"C4WTrain(Normal);", "", "无 限 连 击"}, + ['c4wtrain_n']= {"C4WTrain(Normal);", "", "消除100行"}, ['c4wtrain_l']= {"C4WTrain(Lunatic);", "", "无 限 连 击"}, ['pctrain_n']= {"PCTrain(Normal);", "", "简易PC题库,熟悉全清定式的组合"}, ['pctrain_l']= {"PCTrain(Lunatic);", "", "困难PC题库,强算力者进"}, diff --git a/parts/language/lang_zh_trad.lua b/parts/language/lang_zh_trad.lua index 6e4e247a..5ded89fd 100644 --- a/parts/language/lang_zh_trad.lua +++ b/parts/language/lang_zh_trad.lua @@ -838,8 +838,8 @@ return { ['sprint_400l']= {"競速", "400L", "清除400行"}, ['sprint_1000l']= {"競速", "1000L", "清除1000行"}, ['construct_sg']= {"建設", "秘密段位", "按照提示完成經典的“大於號”拼圖"}, - -- ['construct_checker']= {"Construct", "CHECKERBOARD", "Build a checkerboard pattern!"}, - -- ['construct_invsg']= {"Construct", "INV. SG", "Build an inverted zigzag pattern!"}, + ['construct_checker']={"建設", "棋盤", "按照提示完成“棋盤”拼圖"}, + ['construct_invsg']= {"建設", "斜綫", "按照提示完成“斜綫”拼圖"}, ['sprintPenta']= {"競速", "五連塊", "傷腦筋十八塊"}, ['sprintMPH']= {"競速", "MPH", "純隨機\n無Next\n無Hold"}, ['sprint123']= {"競速", "M123", "清除40行,但只有一至三連塊"}, @@ -847,10 +847,10 @@ return { ['dig_40l']= {"挖掘", "40L", "挖掘40行"}, ['dig_100l']= {"挖掘", "100L", "挖掘100行"}, ['dig_400l']= {"挖掘", "400L", "挖掘400行"}, - ['dig_eff_10l']= {"挖掘", "效率 10L", "挖掘10行用最少的件數"}, - ['dig_eff_40l']= {"挖掘", "效率 40L", "挖掘40行用最少的件數"}, - ['dig_eff_100l']= {"挖掘", "效率 100L","挖掘100行用最少的件數"}, - ['dig_eff_400l']= {"挖掘", "效率 400L","挖掘400行用最少的件數"}, + ['dig_eff_10l']= {"挖掘", "效率 10L", "用最少的塊數挖掘10行"}, + ['dig_eff_40l']= {"挖掘", "效率 40L", "用最少的塊數挖掘40行"}, + ['dig_eff_100l']= {"挖掘", "效率 100L","用最少的塊數挖掘100行"}, + ['dig_eff_400l']= {"挖掘", "效率 400L","用最少的塊數挖掘400行"}, ['dig_quad_10l']= {"挖掘", "消四10L", "挖掘10行,但只能消四"}, ['drought_n']= {"乾旱", "100L", "你I沒了"}, ['drought_l']= {"乾旱+", "100L", "後 媽 發 牌"}, @@ -910,7 +910,7 @@ return { ['defender_l']= {"防守", "瘋狂", "防守練習"}, ['dig_h']= {"挖掘", "困難", "挖掘練習"}, ['dig_u']= {"挖掘", "極限", "挖掘練習"}, - ['c4wtrain_n']= {"C4W練習", "普通", "無 限 連 擊"}, + ['c4wtrain_n']= {"C4W練習", "普通", "清除100行"}, ['c4wtrain_l']= {"C4W練習", "瘋狂", "無 限 連 擊"}, ['pctrain_n']= {"全清訓練", "普通", "簡易PC題集,熟悉全清定式的組合"}, ['pctrain_l']= {"全清訓練", "瘋狂", "困難PC題集,強算力者進"}, diff --git a/parts/modes/construct_checker.lua b/parts/modes/construct_checker.lua index bb73b698..28003ec1 100644 --- a/parts/modes/construct_checker.lua +++ b/parts/modes/construct_checker.lua @@ -11,7 +11,7 @@ return { scoreDisp=function(D) return getConstructGradeText(D[1]).." "..D[2].." Pieces" end, comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]=8 and 5 or G>=6 and 4 or diff --git a/parts/modes/construct_invsg.lua b/parts/modes/construct_invsg.lua index 518e3e63..3c8ed697 100644 --- a/parts/modes/construct_invsg.lua +++ b/parts/modes/construct_invsg.lua @@ -11,7 +11,7 @@ return { scoreDisp=function(D) return getConstructGradeText(D[1]).." "..D[2].." Pieces" end, comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]=10 and 5 or G>=7 and 4 or diff --git a/parts/modes/construct_sg.lua b/parts/modes/construct_sg.lua index 59b36488..1e8f1297 100644 --- a/parts/modes/construct_sg.lua +++ b/parts/modes/construct_sg.lua @@ -9,7 +9,7 @@ return { scoreDisp=function(D) return getConstructGradeText(D[1]).." "..D[2].." Pieces" end, comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]=23 and 5 or G>=21 and 4 or diff --git a/parts/modes/dig_quad_10l.lua b/parts/modes/dig_quad_10l.lua index 91af65d7..601b3321 100644 --- a/parts/modes/dig_quad_10l.lua +++ b/parts/modes/dig_quad_10l.lua @@ -31,7 +31,7 @@ return { end, }, score=function(P) return {P.stat.dig_quad,P.stat.time} end, - scoreDisp=function(D) return D[1].." Techrash "..STRING.time(D[2]) 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]=100 and 5 or T>=75 and 4 or T>=50 and 3 or - T==30 and 2 or + T>=30 and 2 or T>=15 and 1 or T>=5 and 0 end, diff --git a/parts/modes/techrash_u.lua b/parts/modes/techrash_u.lua index 8dd34d99..c8f4a520 100644 --- a/parts/modes/techrash_u.lua +++ b/parts/modes/techrash_u.lua @@ -12,7 +12,7 @@ return { T>=20 and 5 or T>=16 and 4 or T>=12 and 3 or - T==8 and 2 or + T>=8 and 2 or T>=4 and 1 or T>=2 and 0 end, diff --git a/parts/player/player.lua b/parts/player/player.lua index 0be62b84..b4e6099c 100644 --- a/parts/player/player.lua +++ b/parts/player/player.lua @@ -1551,14 +1551,14 @@ end -- Player.drop(self)-- Place piece -- Player:clearFilledLines(start,height) do - local clearSCR=setmetatable({-- B2Bmul:1.3/1.8 + local clearSCR=setmetatable({-- B2B*=1.3; B3B*=1.8 80,200,400,1000,-- 1~4 1500,2000,2300,2600,3000,3400,-- 5~10 3800,4200,4600,5000,5500,6000,-- 11~16 6500,7000,7500,8000,-- 17~20 10000,11500,13000,14500,16000-- 21~25 - },{__index=function(self,k) self[k]=20000 return 20000 end}) - local spinSCR={ + },{__index=function() return 20000 end}) + local spinSCR={-- B2B*=1.2; B3B*=2.0; Mini*=.6 {200,750,1300,2000},-- Z {200,750,1300,2000},-- S {220,700,1300,2000},-- L @@ -1567,7 +1567,7 @@ do {260,900,1600,4500,7000},-- O {300,1200,1700,4000,6000},-- I {220,800,2000,3000,8000,26000},-- Else - }-- B2B*=1.2; B3B*=2.0; Mini*=.6 + } local b2bPoint={50,100,180,800,1000,9999} local b2bATK={3,5,8,12,18,26} diff --git a/parts/scenes/app_piano.lua b/parts/scenes/app_piano.lua index 5c925865..1c78662e 100644 --- a/parts/scenes/app_piano.lua +++ b/parts/scenes/app_piano.lua @@ -98,6 +98,7 @@ function scene.enter() end function scene.leave() + showingKey=false TABLE.clear(textObj) TABLE.clear(pianoVK) collectgarbage() @@ -217,8 +218,7 @@ generateVKey=function() if activateState~=nil then self.activateState=activateState elseif (self.activateState==1 and activationTime==maxTime) or not self.activateState then self.activateState=0 end - -- LIKELY NOT POSSIBLE TO DO - -- Holding key: self.activateState=activateState and activateState or not activationTime>maxTime and self.activateState or 0 end + -- TODO: when the note can be extended longer, this will need remaking if dt then if self.activateState>0 then self.ATV=min(activationTime+dt*60,maxTime) elseif activationTime>0 then self.ATV=max(activationTime-dt*30,0) @@ -238,4 +238,4 @@ generateVKey=function() pianoVK.shift:setObject(CHAR.key.shift) end -return scene \ No newline at end of file +return scene diff --git a/parts/scenes/customGame.lua b/parts/scenes/customGame.lua index 356e0cbd..4d6826a7 100644 --- a/parts/scenes/customGame.lua +++ b/parts/scenes/customGame.lua @@ -350,7 +350,7 @@ scene.widgetList={ WIDGET.newSwitch{name='phyHold', x=560, y=1030,lim=200, disp=CUSval('phyHold'),code=CUSrev('phyHold'),hideF=function() return CUSTOMGAME_LOCAL.customenv.holdCount==0 end}, -- BG & BGM - WIDGET.newSelector{name='bg', x=840, y=1100,w=250,color='Y',list=BG.getList(),disp=CUSval('bg'),code=function(i) CUSTOMGAME_LOCAL.customenv.bg=i BG.set(i) end}, + WIDGET.newSelector{name='bg', x=840, y=1100,w=250,color='Y',list=BG.getList(),disp=CUSval('bg'),code=function(i) CUSTOMGAME_LOCAL.customenv.bg=i BG.set(i) end,hideF=SETval('lockBG')}, WIDGET.newSelector{name='bgm', x=1120,y=1100,w=250,color='Y',list=BGM.getList(),disp=CUSval('bgm'),code=function(i) CUSTOMGAME_LOCAL.customenv.bgm=i BGM.play(i) end}, } diff --git a/parts/scenes/dict.lua b/parts/scenes/dict.lua index 485ef162..95fb0fa2 100644 --- a/parts/scenes/dict.lua +++ b/parts/scenes/dict.lua @@ -76,7 +76,7 @@ local function _updateContentBox() local _t,t _t,t=pcall(function() return _getList()[listBox.selected].content end) if not _t then t={"???"} end - local _w,c=FONT.get(currentFontSize):getWrap(t,840) + local _w,c=getFont(currentFontSize):getWrap(t,840) contentBox:setTexts(c) end -- Clear the result @@ -159,6 +159,8 @@ function scene.enter() lastSearch=false listBox:setList(_getList()) + _updateContentBox() + if not MOBILE then WIDGET.focus(inputBox) end BG.set('rainbow') end @@ -204,13 +206,12 @@ function scene.keyDown(key) elseif key=='f1' then SCN.go( 'textReader',nil, - (text.dict.helpText:repD( + text.dict.helpText:repD( CHAR.key.up,CHAR.key.down,CHAR.key.left,CHAR.key.right, CHAR.controller.dpadU,CHAR.controller.dpadD,CHAR.controller.dpadL,CHAR.controller.dpadR, CHAR.controller.xboxX,CHAR.controller.xboxY,CHAR.controller.xboxA,CHAR.controller.xboxB, - CHAR.icon.help,CHAR.icon.copy,CHAR.icon.globe,CHAR.key.winMenu) - ):split('\n'), - currentFontSize, + CHAR.icon.help,CHAR.icon.copy,CHAR.icon.globe,CHAR.key.winMenu), + 20, 'rainbow' ) @@ -226,15 +227,18 @@ function scene.keyDown(key) -- ) -- if not success then -- SFX.play('finesseError_long') - -- _,_r=FONT.get(30):getWrap(tostring(_r),1000) + -- _,_r=getFont(30):getWrap(tostring(_r),1000) -- MES.new("error","Hotload failed! May need restarting!\n\n"..table.concat(_r,"\n")) -- else -- local lastLscrollPos=listBox.scrollPos -- local lastTscrollPos=contentBox.scrollPos + -- listBox:setList(_getList()) -- if #inputBox:getText()>0 then _search() end + -- listBox.selected=lastSelected<#dict and lastSelected or #dict -- In case the last item is removed! -- listBox.scrollPos=lastLscrollPos + -- _updateContentBox() -- contentBox.scrollPos=lastTscrollPos -- SFX.play('pc') @@ -313,12 +317,12 @@ scene.widgetList={ WIDGET.newKey{name='link',x=1234,y=520,w=60,font=45,fText=CHAR.icon.globe,code=pressKey'application',hideF=function() return not (listBox.selected>0 and _getList()[listBox.selected].url) end}, WIDGET.newKey{name='copy',x=1234,y=590,w=60,font=40,fText=CHAR.icon.copy,code=pressKey'cC',hideF=function() return not (listBox.selected>0) end}, - WIDGET.newKey{name='zoomin',x=1234,y=300,w=60,font=40,fText=CHAR.icon.zoomIn,code=function() _setZoom(5) end}, - WIDGET.newKey{name='zoomout',x=1234,y=370,w=60,font=40,fText=CHAR.icon.zoomOut,code=function() _setZoom(-5) end}, + WIDGET.newKey{name='fontup',x=1234,y=300,w=60,font=40,fText=CHAR.icon.fontUp,code=function() _setZoom(5) end}, + WIDGET.newKey{name='fontdown',x=1234,y=370,w=60,font=40,fText=CHAR.icon.fontDown,code=function() _setZoom(-5) end}, WIDGET.newKey{name='resetzoom',x=1234,y=440,w=60,font=40,fText=CHAR.icon.zoomDefault,code=function() _setZoom(0) end}, WIDGET.newButton{name='back',x=1185,y=60,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene}, WIDGET.newKey{name='help',x=1170,y=140,w=200,h=60,font=40,fText=CHAR.controller.xboxY.."/[F1]: "..CHAR.icon.help,code=pressKey'f1'}, } --- NOTE: The gap between Link-Copy, Zoom is 60*1.5-10=80 :) The gap between 2 buttons in one group is 60+10=70 + return scene \ No newline at end of file diff --git a/parts/scenes/main.lua b/parts/scenes/main.lua index b765a74c..bec291ac 100644 --- a/parts/scenes/main.lua +++ b/parts/scenes/main.lua @@ -212,7 +212,7 @@ end scene.widgetList={ WIDGET.newButton{name='offline',x=-1200,y=210,w=800,h=100,color='lR',font=45,align='R',edge=30,code=pressKey'1'}, WIDGET.newButton{name='qplay', x=-1200,y=330,w=800,h=100,color='lM',font=40,align='R',edge=30,code=pressKey'q'}, - WIDGET.newButton{name='online', x=-1200,y=450,w=800,h=100,color='lV',font=45,align='R',edge=30,code=pressKey'a'}, + WIDGET.newButton{name='online', x=-1200,y=450,w=800,h=100,color='D',font=45,align='R',edge=30,code=pressKey'a'}, WIDGET.newButton{name='custom', x=-1200,y=570,w=800,h=100,color='lS',font=45,align='R',edge=30,code=pressKey'z'}, WIDGET.newButton{name='setting',x=2480,y=210,w=800,h=100, color='lO',font=40,align='L',edge=30,code=pressKey'-'}, @@ -221,7 +221,7 @@ scene.widgetList={ WIDGET.newButton{name='replays',x=2480,y=570,w=800,h=100, color='lC',font=40,align='L',edge=30,code=pressKey','}, WIDGET.newButton{name='music', x=90,y=80,w=100, color='lY',code=pressKey'2',font=70,fText=CHAR.icon.music}, - WIDGET.newButton{name='notice', x=210,y=80,w=100, color='lA',code=pressKey'3',font=70,fText=CHAR.key.winMenu}, + WIDGET.newButton{name='notice', x=210,y=80,w=100, color='D',code=pressKey'3',font=70,fText=CHAR.key.winMenu}, WIDGET.newButton{name='lang', x=330,y=80,w=100, color='lN',code=pressKey'4',font=70,fText=CHAR.icon.language}, WIDGET.newButton{name='about', x=-110,y=670,w=600,h=70, color='lB',align='R',edge=20,code=pressKey'x',font=50,fText=CHAR.icon.info}, WIDGET.newButton{name='manual', x=1390,y=670,w=600,h=70, color='lR',align='L',edge=20,code=pressKey'm',font=50,fText=CHAR.icon.help}, diff --git a/parts/scenes/pause.lua b/parts/scenes/pause.lua index 213b988f..1952c43e 100644 --- a/parts/scenes/pause.lua +++ b/parts/scenes/pause.lua @@ -165,6 +165,8 @@ function scene.keyDown(key,isRep) SFX.play('clear_3') SYSFX.newShade(1.2,555,200,620,380,.6,.6,.6) end + elseif KEY_MAP.keyboard[key]==0 then -- custom restart key + scene.keyDown('r') else return true end @@ -187,6 +189,14 @@ end scene.mouseUp=scene.touchUp scene.mouseDown=scene.touchDown +function scene.gamepadDown(key) + if key=='back' then + scene.keyDown('escape') + elseif KEY_MAP.joystick[key]==0 then + scene.keyDown('r') + end +end + function scene.update(dt) if not (GAME.result or GAME.replaying) then GAME.pauseTime=GAME.pauseTime+dt diff --git a/parts/scenes/setting_sound.lua b/parts/scenes/setting_sound.lua index e5430661..16d96199 100644 --- a/parts/scenes/setting_sound.lua +++ b/parts/scenes/setting_sound.lua @@ -75,12 +75,15 @@ function scene.draw() elseif vocPack=="flore" then gc.translate(770+56*sin(clickTime*26)/(clickTime+.56)^2/20,300+12*sin(TIME()*.5)) gc.draw(IMG.floreCH,nil,nil,nil) + elseif vocPack=="neuro" then + gc.translate(880,820+12*sin(TIME()*.5)) + gc.draw(IMG.neuroCH,nil,nil,.021*sin((TIME()+clickTime)*12.6)/(2.6*clickTime+.26),.8,nil,IMG.neuroCH:getWidth()*.5,IMG.neuroCH:getHeight()) elseif vocPack=="miku" then gc.translate(700,320+12*sin(TIME()*.5)) gc.draw(IMG.mikuCH,nil,nil,nil,.8) elseif vocPack=="zundamon" then - gc.translate(770,300+12*sin(TIME()*.5)) - gc.draw(IMG.zundamonCH,nil,nil,nil,.8) + gc.translate(810,370) + gc.draw(IMG.zundamonCH,nil,nil,nil,.65) end gc.pop() end diff --git a/parts/scenes/setting_video.lua b/parts/scenes/setting_video.lua index 57f96c09..e916a0fc 100644 --- a/parts/scenes/setting_video.lua +++ b/parts/scenes/setting_video.lua @@ -135,7 +135,7 @@ scene.widgetList={ disp=SETval('lockBG'), code=function() SETTING.lockBG=not SETTING.lockBG - applySettings() + applySettings('lockBG') end, hideF=function() return SETTING.bg~='on' end }, @@ -150,7 +150,7 @@ scene.widgetList={ MES.new('warn',text.settingWarn2,6.26) end else - THEME.set(THEME.calculate()) + THEME.set(THEME.calculate(),GAME.playing) WIDGET.setWidgetList(scene.widgetList) end end diff --git a/parts/scenes/textReader.lua b/parts/scenes/textReader.lua index 5bbb3734..48e9f044 100644 --- a/parts/scenes/textReader.lua +++ b/parts/scenes/textReader.lua @@ -9,8 +9,18 @@ function scene.enter() [3] - Background (in string format) ]] + if SCN.args[1] then + if type(SCN.args[1])=='string' then + local _ + _,showingText=FONT.get(20):getWrap(SCN.args[1],960) + else + assert(type(SCN.args[1])=='table','textViewer: SCN.args[1] must be string or table of text') + showingText=SCN.args[1] + end + else showingText={'No text!'} end + textBox.font=SCN.args[2] or 20 - textBox:setTexts(SCN.args[1] and SCN.args[1] or {"No text loaded"}) + textBox:setTexts(showingText) textBox:reset() BG.set(SCN.args[3]) diff --git a/parts/theme.lua b/parts/theme.lua index 2e0307ec..6cd65ca2 100644 --- a/parts/theme.lua +++ b/parts/theme.lua @@ -58,7 +58,7 @@ function THEME.calculate(Y,M,D) ) end -function THEME.set(theme) +function THEME.set(theme,keepBGM) if type(theme)=='string' and theme:sub(1,6)=='season' then BG.setDefault(SETTING.defaultBG) BGM.setDefault(({season1='null',season2='nil',season3='vaccum',season4='space'})[theme]) @@ -99,7 +99,7 @@ function THEME.set(theme) THEME.cur=theme BG.set() - BGM.play() + if not keepBGM then BGM.play() end return true end diff --git a/readme.md b/readme.md index a7cbba5f..2642de2d 100644 --- a/readme.md +++ b/readme.md @@ -5,9 +5,11 @@ [![AUR techmino-client](https://img.shields.io/aur/version/techmino-client?label=techmino-client&logo=archlinux)](https://aur.archlinux.org/packages/techmino-client) [![AUR techmino-git](https://img.shields.io/aur/version/techmino-git?label=techmino-git&logo=archlinux)](https://aur.archlinux.org/packages/techmino-git) -《Techmino: 方块研究所》—— Github & Gitee 官方仓库. +***[GitHub](https://github.com/26F-Studio/Techmino) [Gitee](https://gitee.com/f26-studio/Techmino)*** -The Official Repository of Techmino on GitHub & Gitee. +《Techmino: 方块研究所》 官方仓库 (26F-Studio/Techmino) + +The Official Repository of Techmino (26F-Studio/Techmino) 集合各种现代方块规则,更多玩法,全新体验。 diff --git a/updateLog.txt b/updateLog.txt index 6e59d353..2886f8d0 100644 --- a/updateLog.txt +++ b/updateLog.txt @@ -1,25 +1,36 @@ 未来计划: 正在点亮科技树... +0.17.17: 暂停 Break + 新增: + 新语音包: neuro (by Petalzu) #1109 + 改动: + c4w普通的模式说明改为和100l相同 #1082 + 更强大的ARS_Z #1094 + 修复: + 大师-段位考试模式崩溃 + 大师-段位考试计分算法细节修复 #1092 #1113 + 拼花模式段位计分有1行偏差 #1099 + 0.17.16: 暂停 Break 新增: 新模式:拼花-棋盘 (by NOT_A_ROBOT) #999 新模式:拼花-反大于号 (by NOT_A_ROBOT) #999 - 新模式:消四挖掘 (从隐藏改为地图可见) - 新增skip暂存模式 + 新模式:消四挖掘 (by Gompyn) (从隐藏改为地图可见) + 首次hold致死也会有额外的I_S时间了 (by Gompyn) #1061 #1055 + 暂停界面也可以使用设置的重开键(优先级较低) + 自定义游戏可以保存录像并回放了 (by Gompyn) #1007 支持自定义菜单背景(by Squishy) #1070 TAS工具添加自动跳过功能 (by NOT_A_ROBOT) #992 - 越南语词典和帮助 (by Shard Nguyễn, Squishy and TVN community) #1012 + 新增skip暂存模式 改动: + 越南语词典和帮助 (by Shard Nguyễn, Squishy and TVN community) #1012 20g段位模式铁门未达标时显示具体信息 (by NOT_A_ROBOT) #985 - 优化科研-操作限制模式的限制规则 - 操作次数限制模式从地图移除,且目标改为消40行(录像将无法正常播放) - 自定义游戏可以保存录像并回放了 (by Gompyn) #1007 - 自定义场地高度上限改为126 #1045 - 首次hold致死也会有额外的I_S时间了 #1061 #1055 + 操作次数限制模式从地图移除,且目标改为消40行(录像将无法正常播放) 降低100行竞速B评价要求 (226s → 260s) 回放时模式名称下边不再显示当前模式本地pb 调整c4w_n模式排行榜成绩格式改为时间在前 + 自定义场地高度上限改为126 #1045 文本层面统一HPC为Half PC 删除五连块和三连块模式图标的图片文件 场地编辑界面显示隐形块 @@ -31,6 +42,7 @@ 自定义游戏没有正确传递hold开关 #779 调整语音音量时测试音频太乱 #823 游戏中用f11切换全屏会影响背景 (by Squishy) #603 #1070 + 修卡块旋转音效播放条件错误 dropper小程序玩不了 词典滚动列表框报错 diff --git a/version.lua b/version.lua index 331775f3..c6bec5d7 100644 --- a/version.lua +++ b/version.lua @@ -1,7 +1,7 @@ return { - ["apkCode"]=1715, - ["code"]=1715, - ["string"]="V0.17.15", - ["room"]="ver A-11", + ["apkCode"]=1717, + ["code"]=1717, + ["string"]="V0.17.17", + ["room"]="ver A-12", ["name"]="暂停 Break", }