forked from Yonokid/YataiDONNijiiro
Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0d7c7f5d69 | ||
|
|
cd9c417713 | ||
|
|
553fbf72fa | ||
|
|
9382345c39 | ||
|
|
41c484a8c8 | ||
|
|
ad0a3b69f2 | ||
|
|
8ea7934a73 | ||
|
|
a0e57c6e23 | ||
|
|
8d106e1df5 | ||
|
|
0f2aa5ddb4 | ||
|
|
c8b6568d9a | ||
|
|
638b8b37c5 |
No files matched your search
+258
-38
@@ -137,7 +137,8 @@
|
||||
"text": {
|
||||
"ja": "{0}曲目",
|
||||
"en": "Song {0}",
|
||||
"zh": "{0}曲目"
|
||||
"zh": "{0}曲目",
|
||||
"ko": "{0}곡째"
|
||||
},
|
||||
"outline": 2.3333333333333335
|
||||
},
|
||||
@@ -148,7 +149,8 @@
|
||||
"text": {
|
||||
"ja": "もどる",
|
||||
"en": "BACK",
|
||||
"zh": "返回"
|
||||
"zh": "返回",
|
||||
"ko": "돌아가기"
|
||||
}
|
||||
},
|
||||
"transition_title": {
|
||||
@@ -169,7 +171,8 @@
|
||||
"text": {
|
||||
"ja": "フリープレイ",
|
||||
"en": "FREE PLAY",
|
||||
"zh": "自由游戏"
|
||||
"zh": "自由游戏",
|
||||
"ko": "프리 플레이"
|
||||
}
|
||||
},
|
||||
"entry_overlay_entry": {
|
||||
@@ -183,7 +186,8 @@
|
||||
"text": {
|
||||
"ja": "2人プレイ",
|
||||
"en": "2P",
|
||||
"zh": "2P"
|
||||
"zh": "2P",
|
||||
"ko": "2인 플레이"
|
||||
}
|
||||
},
|
||||
"credit_side_msg": {
|
||||
@@ -193,7 +197,8 @@
|
||||
"text": {
|
||||
"ja": "太鼓をたたいてスタート!",
|
||||
"en": "Hit the taiko to start!",
|
||||
"zh": "敲打太鼓開始!"
|
||||
"zh": "敲打太鼓开始!",
|
||||
"ko": "북을 쳐서 시작!"
|
||||
}
|
||||
},
|
||||
"crown_message_miss": {
|
||||
@@ -203,7 +208,8 @@
|
||||
"text": {
|
||||
"ja": "もう少し\nがんばるドン!",
|
||||
"en": "Good try.",
|
||||
"zh": "下次\n加油鼓咚!"
|
||||
"zh": "下次\n加油鼓咚!",
|
||||
"ko": "조금 더\n힘내라 동!"
|
||||
}
|
||||
},
|
||||
"crown_message_near": {
|
||||
@@ -213,7 +219,8 @@
|
||||
"text": {
|
||||
"ja": "おしかったドン",
|
||||
"en": "Almost.",
|
||||
"zh": "可惜!\n就差一點了鼓咚…"
|
||||
"zh": "可惜!\n就差一点了鼓咚…",
|
||||
"ko": "아쉬웠다 동"
|
||||
}
|
||||
},
|
||||
"crown_message_success": {
|
||||
@@ -223,7 +230,8 @@
|
||||
"text": {
|
||||
"ja": "ノリノリだドン",
|
||||
"en": "Cleared!\nCongrats, Don!",
|
||||
"zh": "過關\n恭喜鼓咚!"
|
||||
"zh": "过关\n恭喜鼓咚!",
|
||||
"ko": "신난다 동"
|
||||
}
|
||||
},
|
||||
"crown_message_perfect": {
|
||||
@@ -233,7 +241,8 @@
|
||||
"text": {
|
||||
"ja": "よくできたドン!",
|
||||
"en": "Awesome!",
|
||||
"zh": "魂槽全滿!\n太厲害了鼓咚!"
|
||||
"zh": "魂槽全满!\n太厉害了鼓咚!",
|
||||
"ko": "잘했다 동!"
|
||||
}
|
||||
},
|
||||
"song_select_indicator": {
|
||||
@@ -277,7 +286,8 @@
|
||||
"text": {
|
||||
"en": "Select your outfit!",
|
||||
"ja": "きせかえをえらぼう!",
|
||||
"zh": "選擇服飾吧!"
|
||||
"zh": "选择服饰吧!",
|
||||
"ko": "옷을 골라 보자!"
|
||||
}
|
||||
},
|
||||
"result_chara": {
|
||||
@@ -316,7 +326,8 @@
|
||||
"text": {
|
||||
"ja": "ベストスコア更新!",
|
||||
"en": "New High Score!",
|
||||
"zh": "最高分更新!"
|
||||
"zh": "最高分更新!",
|
||||
"ko": "베스트 스코어 갱신!"
|
||||
}
|
||||
},
|
||||
"course_name_0": {
|
||||
@@ -326,7 +337,8 @@
|
||||
"text": {
|
||||
"ja": "かんたん",
|
||||
"en": "Easy",
|
||||
"zh": "簡單"
|
||||
"zh": "简单",
|
||||
"ko": "쉬움"
|
||||
}
|
||||
},
|
||||
"course_name_1": {
|
||||
@@ -336,7 +348,8 @@
|
||||
"text": {
|
||||
"ja": "ふつう",
|
||||
"en": "Normal",
|
||||
"zh": "普通"
|
||||
"zh": "普通",
|
||||
"ko": "보통"
|
||||
}
|
||||
},
|
||||
"course_name_2": {
|
||||
@@ -346,7 +359,8 @@
|
||||
"text": {
|
||||
"ja": "むずかしい",
|
||||
"en": "Hard",
|
||||
"zh": "困難"
|
||||
"zh": "困难",
|
||||
"ko": "어려움"
|
||||
}
|
||||
},
|
||||
"course_name_3": {
|
||||
@@ -356,7 +370,8 @@
|
||||
"text": {
|
||||
"ja": "おに",
|
||||
"en": "Oni",
|
||||
"zh": "魔王"
|
||||
"zh": "魔王",
|
||||
"ko": "오니"
|
||||
}
|
||||
},
|
||||
"course_name_4": {
|
||||
@@ -366,7 +381,8 @@
|
||||
"text": {
|
||||
"ja": "おに(裏)",
|
||||
"en": "Ura",
|
||||
"zh": "裏魔王"
|
||||
"zh": "裏魔王",
|
||||
"ko": "오니(우라)"
|
||||
}
|
||||
},
|
||||
"guide_select_label": {
|
||||
@@ -376,7 +392,8 @@
|
||||
"text": {
|
||||
"ja": "えらぶ",
|
||||
"en": "Select",
|
||||
"zh": "選擇"
|
||||
"zh": "选择",
|
||||
"ko": "선택"
|
||||
}
|
||||
},
|
||||
"guide_decide_label": {
|
||||
@@ -386,7 +403,8 @@
|
||||
"text": {
|
||||
"ja": "決定",
|
||||
"en": "Decide",
|
||||
"zh": "決定"
|
||||
"zh": "决定",
|
||||
"ko": "결정"
|
||||
}
|
||||
},
|
||||
"nameplate_entry_left": {
|
||||
@@ -404,7 +422,8 @@
|
||||
"text": {
|
||||
"ja": "かんたん",
|
||||
"en": "Easy",
|
||||
"zh": "簡單"
|
||||
"zh": "简单",
|
||||
"ko": "쉬움"
|
||||
}
|
||||
},
|
||||
"chip_course_name_1": {
|
||||
@@ -414,7 +433,8 @@
|
||||
"text": {
|
||||
"ja": "ふつう",
|
||||
"en": "Normal",
|
||||
"zh": "普通"
|
||||
"zh": "普通",
|
||||
"ko": "보통"
|
||||
}
|
||||
},
|
||||
"chip_course_name_2": {
|
||||
@@ -424,7 +444,8 @@
|
||||
"text": {
|
||||
"ja": "むずかしい",
|
||||
"en": "Hard",
|
||||
"zh": "困難"
|
||||
"zh": "困难",
|
||||
"ko": "어려움"
|
||||
}
|
||||
},
|
||||
"chip_course_name_3": {
|
||||
@@ -434,7 +455,8 @@
|
||||
"text": {
|
||||
"ja": "おに",
|
||||
"en": "Oni",
|
||||
"zh": "魔王"
|
||||
"zh": "魔王",
|
||||
"ko": "오니"
|
||||
}
|
||||
},
|
||||
"chip_course_name_4": {
|
||||
@@ -444,7 +466,8 @@
|
||||
"text": {
|
||||
"ja": "おに(裏)",
|
||||
"en": "Ura",
|
||||
"zh": "裏魔王"
|
||||
"zh": "裏魔王",
|
||||
"ko": "오니(우라)"
|
||||
}
|
||||
},
|
||||
"modifier_text": {
|
||||
@@ -490,7 +513,8 @@
|
||||
"text": {
|
||||
"en": "Used Skip Song",
|
||||
"ja": "演奏スキップをつかいました",
|
||||
"zh": "使用了跳略演奏"
|
||||
"zh": "使用了跳略演奏",
|
||||
"ko": "연주 스킵을 사용했습니다"
|
||||
}
|
||||
},
|
||||
"game_nameplate_1p": {
|
||||
@@ -505,21 +529,24 @@
|
||||
"text": {
|
||||
"en": "Skip Song",
|
||||
"ja": "演奏スキップ",
|
||||
"zh": "跳略演奏"
|
||||
"zh": "跳略演奏",
|
||||
"ko": "연주 스킵"
|
||||
}
|
||||
},
|
||||
"modifier_name_neiro": {
|
||||
"text": {
|
||||
"en": "Sound",
|
||||
"ja": "音色",
|
||||
"zh": "音色"
|
||||
"zh": "音色",
|
||||
"ko": "음색"
|
||||
}
|
||||
},
|
||||
"modifier_text_muon": {
|
||||
"text": {
|
||||
"en": "No sound",
|
||||
"ja": "無音",
|
||||
"zh": "無聲"
|
||||
"zh": "无声",
|
||||
"ko": "무음"
|
||||
}
|
||||
},
|
||||
"modifier_title": {
|
||||
@@ -529,7 +556,8 @@
|
||||
"text": {
|
||||
"ja": "演奏オプション",
|
||||
"en": "Play Options",
|
||||
"zh": "演奏選項"
|
||||
"zh": "演奏选项",
|
||||
"ko": "연주 옵션"
|
||||
}
|
||||
},
|
||||
"song_select_chara_1p": {
|
||||
@@ -690,7 +718,8 @@
|
||||
"text": {
|
||||
"en": "1-Player",
|
||||
"ja": "1人プレイ",
|
||||
"zh": "1人遊玩"
|
||||
"zh": "1人游玩",
|
||||
"ko": "1인 플레이"
|
||||
}
|
||||
},
|
||||
"entry_credit_2p": {
|
||||
@@ -700,7 +729,8 @@
|
||||
"text": {
|
||||
"en": "2-Player",
|
||||
"ja": "2人プレイ",
|
||||
"zh": "2人遊玩"
|
||||
"zh": "2人游玩",
|
||||
"ko": "2인 플레이"
|
||||
}
|
||||
},
|
||||
"entry_credit_start": {
|
||||
@@ -710,7 +740,8 @@
|
||||
"text": {
|
||||
"en": "Hit the drum to start!",
|
||||
"ja": "太鼓をたたいてスタート!",
|
||||
"zh": "敲打太鼓開始遊戲!"
|
||||
"zh": "敲打太鼓开始游戏!",
|
||||
"ko": "북을 쳐서 시작!"
|
||||
}
|
||||
},
|
||||
"entry_cancel": {
|
||||
@@ -720,7 +751,8 @@
|
||||
"text": {
|
||||
"en": "Cancel",
|
||||
"ja": "つかわない",
|
||||
"zh": "不使用"
|
||||
"zh": "不使用",
|
||||
"ko": "사용 안 함"
|
||||
}
|
||||
},
|
||||
"chara_entry": {
|
||||
@@ -802,14 +834,14 @@
|
||||
"text": {
|
||||
"ja": "{0}曲",
|
||||
"zh": "{0}曲",
|
||||
"en": "of {0}"
|
||||
"en": "of {0}",
|
||||
"ko": "{0}곡"
|
||||
},
|
||||
"outline": 2.0
|
||||
},
|
||||
"song_num_max_game": {
|
||||
"x": 1814,
|
||||
"y": 122
|
||||
|
||||
},
|
||||
"note_arc_curve_height": {
|
||||
"height": 608
|
||||
@@ -954,12 +986,18 @@
|
||||
},
|
||||
"dan_exam_text_more": {
|
||||
"text": {
|
||||
"ja": "%s 以上"
|
||||
"ja": "%s 以上",
|
||||
"en": "%s or more",
|
||||
"zh": "%s 以上",
|
||||
"ko": "%s 이상"
|
||||
}
|
||||
},
|
||||
"dan_exam_text_less": {
|
||||
"text": {
|
||||
"ja": "%s 未満"
|
||||
"ja": "%s 未満",
|
||||
"en": "under %s",
|
||||
"zh": "%s 未满",
|
||||
"ko": "%s 미만"
|
||||
}
|
||||
},
|
||||
"dan_result_nosave": {
|
||||
@@ -975,12 +1013,18 @@
|
||||
},
|
||||
"dan_exam_text_gauge": {
|
||||
"text": {
|
||||
"ja": "%s %以上"
|
||||
"ja": "%s %以上",
|
||||
"en": "%s%% or more",
|
||||
"zh": "%s%以上",
|
||||
"ko": "%s% 이상"
|
||||
}
|
||||
},
|
||||
"dan_exam_text_gauge_less": {
|
||||
"text": {
|
||||
"ja": "%s %未満"
|
||||
"ja": "%s %未満",
|
||||
"en": "under %s%%",
|
||||
"zh": "%s%未满",
|
||||
"ko": "%s% 미만"
|
||||
}
|
||||
},
|
||||
"note_arc_pivot": {
|
||||
@@ -990,5 +1034,181 @@
|
||||
"note_arc_pivot_2p": {
|
||||
"x": 1282.19,
|
||||
"y": -167.83
|
||||
},
|
||||
"entry_game_comment_1": {
|
||||
"text": {
|
||||
"ja": "すきな曲や、むずかしさを",
|
||||
"en": "Select a song and",
|
||||
"zh": "可选择喜爱的"
|
||||
}
|
||||
},
|
||||
"entry_game_comment_2": {
|
||||
"text": {
|
||||
"ja": "えらんであそべるよ!",
|
||||
"en": "difficulty to play!",
|
||||
"zh": "歌曲、难度游玩哦!"
|
||||
}
|
||||
},
|
||||
"entry_practice_comment_1": {
|
||||
"text": {
|
||||
"ja": "曲の一部をくりかえし練習して",
|
||||
"en": "Practice a section of a song",
|
||||
"zh": "反复练习歌曲的片段"
|
||||
}
|
||||
},
|
||||
"entry_practice_comment_2": {
|
||||
"text": {
|
||||
"ja": "腕をみがこう!",
|
||||
"en": "over and over to improve!",
|
||||
"zh": "磨练技巧吧!"
|
||||
}
|
||||
},
|
||||
"entry_costume_comment_1": {
|
||||
"text": {
|
||||
"ja": "どんちゃんのきせかえを",
|
||||
"en": "Choose an outfit",
|
||||
"zh": "可为咚酱选择"
|
||||
}
|
||||
},
|
||||
"entry_costume_comment_2": {
|
||||
"text": {
|
||||
"ja": "えらんであそべるよ!",
|
||||
"en": "for your Don-chan!",
|
||||
"zh": "服饰游玩哦!"
|
||||
}
|
||||
},
|
||||
"entry_ai_battle_comment_1": {
|
||||
"text": {
|
||||
"ja": "「AIどん」と勝つか負けるか",
|
||||
"en": "See if you can beat AI-DON",
|
||||
"zh": "与「AI咚」来一场"
|
||||
}
|
||||
},
|
||||
"entry_ai_battle_comment_2": {
|
||||
"text": {
|
||||
"ja": "ギリギリのバトルをたのしもう!",
|
||||
"en": "in this neck-and-neck competition!",
|
||||
"zh": "不到最后难分胜负的对战吧!"
|
||||
}
|
||||
},
|
||||
"mode_dan_comment_1": {
|
||||
"text": {
|
||||
"ja": "3曲連続して演奏しながら、",
|
||||
"en": "Play three songs in a row",
|
||||
"zh": "连续演奏3首指定曲"
|
||||
}
|
||||
},
|
||||
"mode_dan_comment_2": {
|
||||
"text": {
|
||||
"ja": "お題の合格を目指そう!",
|
||||
"en": "and aim to clear the task!",
|
||||
"zh": "并达成题目的合格条件吧!"
|
||||
}
|
||||
},
|
||||
"mode_dan_comment_3": {
|
||||
"text": {
|
||||
"ja": "合格すると腕前が認定されるよ!",
|
||||
"en": "Your skills will be rewarded!",
|
||||
"zh": "只要合格实力就会备受肯定哦!"
|
||||
}
|
||||
},
|
||||
"entry_settings_comment_1": {
|
||||
"text": {
|
||||
"ja": "ゲームのせっていを",
|
||||
"en": "Change the game's",
|
||||
"zh": "可以变更"
|
||||
}
|
||||
},
|
||||
"entry_settings_comment_2": {
|
||||
"text": {
|
||||
"ja": "かえられるよ!",
|
||||
"en": "settings here!",
|
||||
"zh": "游戏设定哦!"
|
||||
}
|
||||
},
|
||||
"sort_window_diff": {
|
||||
"text": {
|
||||
"ja": "むずかしさ",
|
||||
"en": "Difficulty",
|
||||
"zh": "难度"
|
||||
}
|
||||
},
|
||||
"sort_window_star": {
|
||||
"text": {
|
||||
"ja": "★の数",
|
||||
"en": "Number of \"★\"",
|
||||
"zh": "★的个数"
|
||||
}
|
||||
},
|
||||
"sort_window_order": {
|
||||
"text": {
|
||||
"ja": "表示順",
|
||||
"en": "Sort by",
|
||||
"zh": "排序"
|
||||
}
|
||||
},
|
||||
"sort_window_order_0": {
|
||||
"text": {
|
||||
"ja": "いつもどおり",
|
||||
"en": "Default",
|
||||
"zh": "通常"
|
||||
}
|
||||
},
|
||||
"sort_window_order_1": {
|
||||
"text": {
|
||||
"ja": "未クリア優先",
|
||||
"en": "Not cleared",
|
||||
"zh": "未通关优先"
|
||||
}
|
||||
},
|
||||
"sort_window_order_2": {
|
||||
"text": {
|
||||
"ja": "未フルコンボ優先",
|
||||
"en": "Not Full Combo",
|
||||
"zh": "未全连段优先"
|
||||
}
|
||||
},
|
||||
"sort_window_order_3": {
|
||||
"text": {
|
||||
"ja": "未ドンダフルコンボ優先",
|
||||
"en": "Not Donderful Combo",
|
||||
"zh": "未全良连段优先"
|
||||
}
|
||||
},
|
||||
"sort_window_songs": {
|
||||
"text": {
|
||||
"ja": "曲",
|
||||
"en": "Songs",
|
||||
"zh": "首"
|
||||
}
|
||||
},
|
||||
"folder_sort_select": {
|
||||
"text": {
|
||||
"ja": "むずかしさからえらぶ",
|
||||
"en": "Select by difficulty",
|
||||
"zh": "根据难度选择"
|
||||
}
|
||||
},
|
||||
"dan_gauge_name": {
|
||||
"text": {
|
||||
"ja": "魂ゲージ",
|
||||
"en": "Soul Gauge",
|
||||
"zh": "魂槽",
|
||||
"ko": "클리어 게이지"
|
||||
}
|
||||
},
|
||||
"skip_badge_text": {
|
||||
"text": {
|
||||
"ja": "演奏スキップON",
|
||||
"en": "演奏スキップON",
|
||||
"zh": "演奏スキップON"
|
||||
}
|
||||
},
|
||||
"mode_dan": {
|
||||
"text": {
|
||||
"ja": "段位道場",
|
||||
"en": "Dan-i Dojo",
|
||||
"zh": "段位道场"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -251,10 +251,13 @@ function M:draw()
|
||||
local x = GAUGE_X0 + CELL_PITCH * n - CELL_PITCH / 2 - 1
|
||||
|
||||
if self.label_for ~= ex.red then
|
||||
self.label = text.create_raw_text(tostring(ex.red) .. "%以上",
|
||||
-- skin_config: dan_gauge_name (魂ゲージ) and dan_exam_text_gauge ("%s %以上", %% = %)
|
||||
local fmt = tex.skin_text("dan_exam_text_gauge"):gsub("%%%%", "\1")
|
||||
local caption = fmt:gsub("%%s", tostring(ex.red)):gsub("\1", "%%")
|
||||
self.label = text.create_raw_text(caption,
|
||||
VALUE_SIZE, CAP_FILL, VALUE_OUTLINE, false,
|
||||
4.0 / tex.get_screen_scale())
|
||||
self.name_label = text.create_raw_text("魂ゲージ",
|
||||
self.name_label = text.create_raw_text(tex.skin_text("dan_gauge_name"),
|
||||
NAME_SIZE, CAP_FILL, CAP_OUTLINE, false,
|
||||
3.0 / tex.get_screen_scale())
|
||||
self.label_for = ex.red
|
||||
|
||||
+20
-40
@@ -60,39 +60,23 @@ local TITLE_SPACING, INFO_SPACING = 2.0, 1.0
|
||||
local MODES = {
|
||||
game = {
|
||||
frame = 0, outline = {251, 1, 29, 255},
|
||||
titles = { ja = "演奏ゲーム", en = "Game", zh = "节奏游戏" },
|
||||
comment = {
|
||||
ja = { "すきな曲や、むずかしさを", "えらんであそべるよ!" },
|
||||
en = { "Select a song and", "difficulty to play!" },
|
||||
zh = { "可選擇喜愛的", "歌曲、難度遊玩哦!" },
|
||||
},
|
||||
title_key = "entry_game",
|
||||
comment_keys = { "entry_game_comment_1", "entry_game_comment_2" },
|
||||
},
|
||||
practice = {
|
||||
frame = 2, outline = {34, 138, 117, 255},
|
||||
titles = { ja = "特訓モード", en = "Practice", zh = "练习游戏" },
|
||||
comment = {
|
||||
ja = { "曲の一部をくりかえし練習して", "腕をみがこう!" },
|
||||
en = { "Practice a section of a song", "over and over to improve!" },
|
||||
zh = { "反覆練習歌曲的片段", "磨練技巧吧!" },
|
||||
},
|
||||
title_key = "entry_practice",
|
||||
comment_keys = { "entry_practice_comment_1", "entry_practice_comment_2" },
|
||||
},
|
||||
costume = {
|
||||
frame = 4, outline = {200, 120, 222, 255},
|
||||
titles = { ja = "きせかえ", en = "Costume", zh = "装扮" },
|
||||
comment = {
|
||||
ja = { "どんちゃんのきせかえを", "えらんであそべるよ!" },
|
||||
en = { "Choose an outfit", "for your Don-chan!" },
|
||||
zh = { "可為咚醬選擇", "服飾遊玩哦!" },
|
||||
},
|
||||
title_key = "entry_costume",
|
||||
comment_keys = { "entry_costume_comment_1", "entry_costume_comment_2" },
|
||||
},
|
||||
ai = {
|
||||
frame = 2, outline = {34, 138, 117, 255},
|
||||
titles = { ja = "AIバトル", en = "AI Battle", zh = "AI斗争" },
|
||||
comment = {
|
||||
ja = { "「AIどん」と勝つか負けるか", "ギリギリのバトルをたのしもう!" },
|
||||
en = { "See if you can beat AI-DON", "in this neck-and-neck competition!" },
|
||||
zh = { "與「AI咚」來一場", "不到最後難分勝負的對戰吧!" },
|
||||
},
|
||||
title_key = "entry_ai_battle",
|
||||
comment_keys = { "entry_ai_battle_comment_1", "entry_ai_battle_comment_2" },
|
||||
},
|
||||
-- ROUND 83 (r83-dandojo-as-mode) — 段位道場 is a MODE on the cabinet
|
||||
-- (`mode_select.lua` CreateBoardList l.289-296 appends GameMode.kDani right after
|
||||
@@ -103,24 +87,16 @@ local MODES = {
|
||||
-- mode_select_comment_dani (three lines; every other board here has two).
|
||||
dan = {
|
||||
frame = 6, outline = {76, 60, 151, 255},
|
||||
titles = { ja = "段位道場", en = "Dan-i Dojo", zh = "段位道場" },
|
||||
comment = {
|
||||
ja = { "3曲連続して演奏しながら、", "お題の合格を目指そう!", "合格すると腕前が認定されるよ!" },
|
||||
en = { "Play three songs in a row", "and aim to clear the task!", "Your skills will be rewarded!" },
|
||||
zh = { "連續演奏3首指定曲", "並達成題目的合格條件吧!", "只要合格實力就會備受肯定哦!" },
|
||||
},
|
||||
title_key = "mode_dan",
|
||||
comment_keys = { "mode_dan_comment_1", "mode_dan_comment_2", "mode_dan_comment_3" },
|
||||
},
|
||||
-- ROUND 83: ゲーム設定 has no cabinet counterpart and was wearing 段位道場's board
|
||||
-- (dani, frames 6/7) since ROUND 6. Moved onto `aprilfool`, baked as frames 9/10 by
|
||||
-- bake_entry.py's EXTRA list; its title colour-add at label `aprilfool` is (0,132,212).
|
||||
settings = {
|
||||
frame = 9, outline = {0, 132, 212, 255},
|
||||
titles = { ja = "ゲーム設定", en = "Settings", zh = "游戏設定" },
|
||||
comment = {
|
||||
ja = { "ゲームのせっていを", "かえられるよ!" },
|
||||
en = { "Change the game's", "settings here!" },
|
||||
zh = { "可以變更", "遊戲設定哦!" },
|
||||
},
|
||||
title_key = "entry_settings",
|
||||
comment_keys = { "entry_settings_comment_1", "entry_settings_comment_2" },
|
||||
},
|
||||
}
|
||||
|
||||
@@ -129,16 +105,19 @@ local MODES = {
|
||||
-- (pairs() order is unspecified). Ask the engine which language it is actually running
|
||||
-- (`tex.language()`, script.cpp:693 -> config.general.language) and try that key first;
|
||||
-- the old scan stays as the fallback for a language the table has no column for.
|
||||
-- Titles and comments live in skin_config (entry_* / entry_*_comment_N); the engine hands
|
||||
-- us the title it drew, so the mode is the one whose skin_config title matches.
|
||||
local LANGS = { "ja", "en", "zh", "ko" }
|
||||
local function find_mode(text_str)
|
||||
local ok, cur = pcall(function() return tex.language() end)
|
||||
if ok and type(cur) == "string" then
|
||||
for key, m in pairs(MODES) do
|
||||
if m.titles[cur] == text_str then return m, cur end
|
||||
if tex.skin_text(m.title_key, cur) == text_str then return m, cur end
|
||||
end
|
||||
end
|
||||
for key, m in pairs(MODES) do
|
||||
for lang, t in pairs(m.titles) do
|
||||
if t == text_str then return m, lang end
|
||||
for _, lang in ipairs(LANGS) do
|
||||
if tex.skin_text(m.title_key, lang) == text_str then return m, lang end
|
||||
end
|
||||
end
|
||||
return MODES.settings, "ja", true
|
||||
@@ -297,7 +276,8 @@ function EntryBox.new(text_str, font_size)
|
||||
self.title = text.create_raw_text(text_str, TITLE_SIZE, { 255, 255, 255, 255 }, mode.outline, false, TITLE_INNER_T, TITLE_SPACING)
|
||||
self.info = {}
|
||||
if not unknown then
|
||||
local lines = mode.comment[lang] or mode.comment.ja
|
||||
local lines = {}
|
||||
for i, key in ipairs(mode.comment_keys) do lines[i] = tex.skin_text(key, lang) end
|
||||
for i, line in ipairs(lines) do
|
||||
self.info[i] = text.create_raw_text(line, INFO_SIZE, INFO_COLOR, INFO_OUTLINE, false,
|
||||
INFO_BORDER / tex.get_screen_scale(), INFO_SPACING)
|
||||
|
||||
@@ -86,21 +86,6 @@ local ITEM_KEYS = {
|
||||
"preset_1", "preset_2", "preset_3", "random_item",
|
||||
}
|
||||
|
||||
local GUIDE_TEXT = {
|
||||
ja = { "えらぶ", "決定" },
|
||||
en = { "Move", "Confirm" },
|
||||
zh = { "選擇", "決定" },
|
||||
}
|
||||
|
||||
local function detect_lang(s)
|
||||
if s:find("[\227-\239]") then
|
||||
-- kana block (U+3040..U+30FF) => ja, otherwise CJK => zh
|
||||
if s:find("\227[\129-\131]") then return "ja" end
|
||||
return "zh"
|
||||
end
|
||||
return "en"
|
||||
end
|
||||
|
||||
local function clamp(v, lo, hi)
|
||||
if v < lo then return lo end
|
||||
if v > hi then return hi end
|
||||
@@ -140,10 +125,9 @@ function CostumeMenu.new(is_2p, text_str, title_x, title_y)
|
||||
|
||||
-- arcade: font 54 white, outline 6 (renderer default = black); thickness here is x1.5 on screen
|
||||
self.title_text = text.create_raw_text(text_str, TITLE_SIZE, { 255, 255, 255, 255 }, { 0, 0, 0, 255 }, false, 4, 2.0)
|
||||
local lang = detect_lang(text_str)
|
||||
local gt = GUIDE_TEXT[lang] or GUIDE_TEXT.ja
|
||||
self.guide_sel = text.create_raw_text(gt[1], GUIDE_SIZE, { 30, 30, 30, 255 }, { 30, 30, 30, 255 }, false, 0, 1.0)
|
||||
self.guide_dec = text.create_raw_text(gt[2], GUIDE_SIZE, { 30, 30, 30, 255 }, { 30, 30, 30, 255 }, false, 0, 1.0)
|
||||
-- guide words from skin_config (guide_select_label / guide_decide_label)
|
||||
self.guide_sel = text.create_raw_text(tex.skin_text("guide_select_label"), GUIDE_SIZE, { 30, 30, 30, 255 }, { 30, 30, 30, 255 }, false, 0, 1.0)
|
||||
self.guide_dec = text.create_raw_text(tex.skin_text("guide_decide_label"), GUIDE_SIZE, { 30, 30, 30, 255 }, { 30, 30, 30, 255 }, false, 0, 1.0)
|
||||
|
||||
self.costume_select_mode = false
|
||||
-- arcade cursor_idx_ (1..5, here 0-based) and select_offset_
|
||||
|
||||
@@ -61,7 +61,7 @@ function AllNetIcon:draw_song_max()
|
||||
local limit = tex.song_limit()
|
||||
if not limit or limit <= 0 then return end
|
||||
if self._song_max_n ~= limit then
|
||||
self._song_max = text.create_raw_text(tostring(limit) .. "曲",
|
||||
self._song_max = text.create_raw_text((tex.skin_text("song_num_max"):gsub("{0}", tostring(limit))),
|
||||
SONG_MAX_FONT, { 255, 255, 255, 255 }, { 0, 0, 0, 255 }, false, SONG_MAX_BORDER / tex.get_screen_scale(), 2.0)
|
||||
self._song_max_n = limit
|
||||
end
|
||||
|
||||
@@ -180,7 +180,7 @@ function SongTransition.new(title, subtitle, is_second)
|
||||
-- locale and so do we. Built HERE and not in skip_armed(): the glyph
|
||||
-- atlas needs a frame to upload, so creating it on the first drawn frame
|
||||
-- left the first frames showing an empty pill.
|
||||
self.skip_text = text.create_raw_text("演奏スキップON", SKIP_TEXT_SIZE,
|
||||
self.skip_text = text.create_raw_text(tex.skin_text("skip_badge_text"), SKIP_TEXT_SIZE,
|
||||
{ 0, 0, 0, 255 }, { 0, 0, 0, 0 }, false, 0, 2)
|
||||
end
|
||||
return self
|
||||
|
||||
@@ -662,11 +662,16 @@ function ResultPlayer:draw_gauge()
|
||||
local n = math.min(gl_int, clear_pt - 1)
|
||||
tex.draw_texture(self.t_gauge_bar, { scale = scale, x2 = (n - 1) * u, fade = base_fade, index = p_idx })
|
||||
end
|
||||
if gl_int >= clear_pt - 1 and self.t_gauge_bar_clear_transition then
|
||||
-- The transition piece is the first gold cell (the rounded cap of the clear zone).
|
||||
-- Light it only when the run is cleared, like the HUD gauge (Gauge::get_is_clear):
|
||||
-- the norma sits inside that cell (oni 8000 = cell 40.0 of 50, but a failed run at
|
||||
-- 7800..7999 soul already shows 39 cells), so a cell-count test lit it a cell early
|
||||
-- and a failed result grew a gold cell.
|
||||
if gl_int >= clear_pt - 1 and self.gauge_state >= 1 and self.t_gauge_bar_clear_transition then
|
||||
tex.draw_texture(self.t_gauge_bar_clear_transition,
|
||||
{ scale = scale, x = (clear_pt - 1) * u, fade = base_fade, index = p_idx })
|
||||
end
|
||||
if gl_int > clear_pt then
|
||||
if gl_int > clear_pt and self.gauge_state >= 1 then
|
||||
local extra = (gl_int - clear_pt - 1) * u
|
||||
if self.t_gauge_bar_clear_top then
|
||||
tex.draw_texture(self.t_gauge_bar_clear_top,
|
||||
|
||||
@@ -329,7 +329,7 @@ function SongSelect:draw_song_max()
|
||||
if self._song_max_n ~= limit then
|
||||
local sc = tex.get_skin_config("song_num") or {}
|
||||
self._song_max_y = sc.y or 252
|
||||
self._song_max = text.create_raw_text(tostring(limit) .. "曲",
|
||||
self._song_max = text.create_raw_text((tex.skin_text("song_num_max"):gsub("{0}", tostring(limit))),
|
||||
-- `common_song_select_number_of_songs` id 3 `text_total_songs`: size 24, border 3.5
|
||||
sc.font_size or 24, { 255, 255, 255, 255 }, { 0, 0, 0, 255 }, false, ol(3.5), 2.0)
|
||||
self._song_max_n = limit
|
||||
@@ -2498,30 +2498,23 @@ local SW_CURSOR_CYCLE = 51.0
|
||||
-- The strings are the cabinet's own word table (the reference build `datatable` wordlist), not invented:
|
||||
-- sort_window_diff / _star / _order, course_easy..course_mania, sort_window_order_*,
|
||||
-- folder_sort_select, sort_window_songs. Keyed by `tex.language()` with en as the fallback.
|
||||
local SW_WORDS = {
|
||||
header = {
|
||||
ja = { "むずかしさ", "★の数", "表示順" },
|
||||
en = { "Difficulty", 'Number of "★"', "Sort by" },
|
||||
zh = { "難度", "★數", "顯示順序" },
|
||||
},
|
||||
course = {
|
||||
ja = { "かんたん", "ふつう", "むずかしい", "おに", "おに" },
|
||||
en = { "Easy", "Normal", "Hard", "Extreme", "Extreme" },
|
||||
zh = { "簡單", "普通", "困難", "魔王", "魔王" },
|
||||
},
|
||||
order = {
|
||||
ja = { "いつもどおり", "未クリア優先", "未フルコンボ優先", "未ドンダフルコンボ優先" },
|
||||
en = { "Default", "Not cleared", "Not Full Combo", "Not Donderful Combo" },
|
||||
zh = { "通常", "未通關優先", "未全連段優先", "未全良連段優先" },
|
||||
},
|
||||
title = { ja = "むずかしさからえらぶ", en = "Select by difficulty", zh = "以難易度選擇" },
|
||||
songs = { ja = "曲", en = "Songs", zh = "首" },
|
||||
-- skin_config keys (the strings themselves live there, per language)
|
||||
local SW_KEYS = {
|
||||
header = { "sort_window_diff", "sort_window_star", "sort_window_order" },
|
||||
course = { "course_name_0", "course_name_1", "course_name_2", "course_name_3", "course_name_3" },
|
||||
order = { "sort_window_order_0", "sort_window_order_1", "sort_window_order_2", "sort_window_order_3" },
|
||||
title = "folder_sort_select",
|
||||
songs = "sort_window_songs",
|
||||
}
|
||||
|
||||
local function sw_words(group)
|
||||
local lang = (tex.language and tex.language()) or "en"
|
||||
local t = SW_WORDS[group]
|
||||
return t[lang] or t.en
|
||||
local k = SW_KEYS[group]
|
||||
if type(k) == "table" then
|
||||
local out = {}
|
||||
for i, key in ipairs(k) do out[i] = tex.skin_text(key) end
|
||||
return out
|
||||
end
|
||||
return tex.skin_text(k)
|
||||
end
|
||||
|
||||
-- OutlinedText cache: key = group .. "\0" .. index (the strings never change at runtime).
|
||||
|
||||
Reference in new issue
Block a user