From 448c9dafc0f1c80899599a24f3cc148114303cf7 Mon Sep 17 00:00:00 2001 From: MY4k Date: Mon, 2 Mar 2026 03:47:12 +0900 Subject: [PATCH 1/4] =?UTF-8?q?HatsuneMiku:=E9=9F=93=E5=9B=BD=E8=AA=9E?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=82=92=E8=BF=BD=E5=8A=A0=20&=20i18n?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/HatsuneMiku/ja_jp.yml | 549 ++++++++++++++ i18n/HatsuneMiku/ko_kr.yml | 549 ++++++++++++++ lib/bcdice/game_system.rb | 1 + lib/bcdice/game_system/HatsuneMiku.rb | 746 ++++--------------- lib/bcdice/game_system/HatsuneMiku_Korean.rb | 56 ++ test/data/HatsuneMiku_Korean.toml | 501 +++++++++++++ 6 files changed, 1797 insertions(+), 605 deletions(-) create mode 100644 i18n/HatsuneMiku/ja_jp.yml create mode 100644 i18n/HatsuneMiku/ko_kr.yml create mode 100644 lib/bcdice/game_system/HatsuneMiku_Korean.rb create mode 100644 test/data/HatsuneMiku_Korean.toml diff --git a/i18n/HatsuneMiku/ja_jp.yml b/i18n/HatsuneMiku/ja_jp.yml new file mode 100644 index 000000000..6ff95e475 --- /dev/null +++ b/i18n/HatsuneMiku/ja_jp.yml @@ -0,0 +1,549 @@ +ja_jp: + HatsuneMiku: + special: "スペシャル" + neiro_acquire: " ネイロに%{pickup_dice}(%{color})を取得した場合 %{total}:%{result}" + color_black: "黒" + color_red: "赤" + color_blue: "青" + color_green: "緑" + color_white: "白" + color_any: "任意" + + FT: + name: "ファンブル表" + type: "1D6" + items: + - "周囲から活気が失われる。黒以外のすべてのネイロを一つずつ減らす。" + - "仲間に迷惑をかけてしまう。自分以外のPC全員の【生命力】が1点減少する。" + - "この失敗は後に祟るかもしれない……。自分の【生命力】が1D6点減少する。" + - "ココロに疲労感が満ちていく。自分がストレスを1点受ける。" + - "1D6を振ること。そのPCのコアが、その出目が1ならダークに、2ならホットに、3ならラブに、4ならエキセントリックに、5ならメランコリーに変化する。6だった場合、コアは変化しない。" + - "ラッキー!特に何も起こらない" + + CWT: + name: "致命傷表" + type: "1D6" + items: + - "絶望的な攻撃を受ける。そのキャラクターは強制退出になる。" + - "苦痛の悲鳴をあげ、無惨にも崩れ落ちる。そのキャラクターは行動不能になる。また、黒のネイロが一つ増える。" + - "オトクイの一撃で、あなたは吹き飛ばされてしまう。そのキャラクターは行動不能になる。また、分類が装備のナンバーにストレスを1点受ける。" + - "強烈な一撃を受けて気絶する。そのキャラクターは行動不能になる。" + - "意識はあるが、立ち上がることができない。そのキャラクターは行動不能になる。次のシーンにまだ【生命力】が0点だった場合、自動的に1点に回復する。" + - "奇跡的に踏みとどまり、持ちこたえる。【生命力】が1点になる。" + + BT: + name: "休憩表" + type: "1D6" + items: + - "仲間との楽しい時間。自分の【想い人】のパトスを一つ回復する。" + - "これまでの冒険を思い返す。自分の【能力値】のパトスを一つ回復する。" + - "自分のオトダマと会話する。【協力者】のパトスか、ナンバーのパトスを一つ回復する。" + - "体をゆっくり休める。自分の【生命力】を2D6点回復する。望むなら、回復を行う前に、自分の【活力】を決め直してもよい。" + - "お、ラッキー!いいもの見つけた!自分のコインを1枚増やす。" + - "ノイズストアに接続できた。各PCは、自分の【頭脳】のダイスの数と同じ個数まで、アプリを購入できる。" + + TT: + name: "目標表" + type: "1D6" + items: + - "悪意。PCの中でもっとも【生命力】の低いもの一人を目標に選ぶ。もっとも低い【生命力】の持ち主が複数いる場合、その中から、GMが自由に一人目標を選ぶ。" + - "狡猾。パラグラフ1〜5の中で、もっとも高い数値のパラグラフにいるPC一人を目標に選ぶ。全員が圏外にいる場合、圏外にいるPC全員を目標に選ぶ。" + - "堅実。PCの中で、その脅威の「判定欄」に書かれた能力値がもっとも低いランクのキャラクター一人を目標に選ぶ。もっとも低いランクのキャラクターが複数いる場合、その中から、もっとも低いモッドのキャラクター一人を目標に選ぶ。モッドも同じ値だった場合、GMが自由に一人目標を選ぶ。" + - "豪快。PCの中でもっとも高いランクの【武勇】の持ち主一人を目標に選ぶ。もっとも高いランクの持ち主が複数いる場合、その中から、もっとも高いモッドの持ち主一人を目標に選ぶ。モッドも同じ値だった場合、GMが自由に一人目標を選ぶ。" + - "単純。パラグラフ1〜5の中で、もっとも低い数値のパラグラフにいるPC一人を目標に選ぶ。全員が圏外にいる場合、圏外にいるPC全員を目標に選ぶ。" + - "乱戦。その脅威のいるパラグラフの数値と数値が1離れたパラグラフにいるPC全員を目標に選ぶ。そのパラグラフにPCがいなかった場合、GMが自由に一人目標を選ぶ。" + + RT: + name: "関係表" + type: "1D6" + items: + - "恋心(プラス)/殺意(マイナス)" + - "同情(プラス)/侮蔑(マイナス)" + - "憧憬(プラス)/嫉妬(マイナス)" + - "信頼(プラス)/疑い(マイナス)" + - "共感(プラス)/不気味(マイナス)" + - "大切(プラス)/面倒(マイナス)" + + OT: + name: "障害表" + type: "1D6" + items: + - "あなたのココロに大きな変化が訪れる。1D6を振ること。そのPCのコアが、その出目が1ならダークに、2ならホットに、3ならラブに、4ならエキセントリックに、5ならメランコリーに変化する。6だった場合、コアは変化しない。" + - "あなたは肉体的に大きなダメージを負う。1D6点のダメージを受ける。" + - "ノイズの助けを借りて問題を解決する。コインを1D6枚を支払う必要がある。コインを支払う場合、ほかのPCからコインを譲ってもらってもよい。支払いが足りなかった場合、その差額分だけ自分の【生命力】を減らす。" + - "大きな疲労感を感じる。ストレスを1点受ける。" + - "思わず時間をつかってしまう。【タイム】が1点減少する。" + - "場にイヤな気配が満ちていく。黒のネイロが一つ増える。" + + RQT: + name: "リクエスト表" + type: "2D6" + items: + - "そのエリアの風景が、あなたの【情景】へと書き換えられていく。「お前の始まりの物語を語れ。お前はこの地で何を思った?」" + - "あなたは、そのエリアの風景の中に懐かしいものを見つけ、自分の罪を思い出した。「何を見た?なにを悔いている?」" + - "そのエリアの風景が、あなたのコアと同じ色に染まる。あなたは、その風景の中になりたい自分の姿を見つける。「それがお前の望みか?お前は未来に何を求める?」" + - "あなたの脳裏に、人物欄に書かれた人物一人のイメージが浮かぶ。その人物は何かを囁き、あなたのココロが傷ついた。「そいつは誰だ?一体何と言ったのだ?」" + - "あなたは、そのエリアの風景の中に奇妙なものを見つけ、恐怖した。「何を見た?なぜそれを恐れる?」" + - "そのエリアにココロダンジョンの持ち主が現れる。その人物は、お前に質問してくる。「私をどう思ってる?なぜ、私を助ける?」" + - "あなたのオトダマの姿が、あなたのよく知っている人物に変わる「その人物は誰だ?そいつをどう思っている?」" + - "そのエリアに、あなたの持つナンバーが響き渡る。「これがお前のウタか?そのウタの名はなんだ?」" + - "あなたのオトダマの姿が、あなたの好きな人物の姿に変わる。「それがお前が焦がれる人物か。そいつをどうしたい?」" + - "そのエリアの風景にあなたの日常が浮かび上がる。「お前は何をしている?その暮らしをどう思っている?」" + - "あなたの目の前に、あなたの死体が横たわっている。「お前を殺すものは何だ?お前は誰に殺される?」" + + CLT: + name: "クロウル表" + type: "2D6" + items: + - "パスワードが抜き取られていた! 所持金が無くなっている! 自分のコインを3枚失う。" + - "過去に同様のオトクイと出会ったことのある人物に出会う。【技術】で判定を行う。成功すると、「特殊アプリの開発」を行うことができる(この間奏アクションには【タイム】は必要ない)。必要なコインは1枚少なくなる。" + - "近所にあるパワースポットを教えてもらう。【霊力】で判定を行う。成功すると、自分の【生命力】を【活力】の値だけ回復することができる。" + - "あなたのことを知る人物に出会う。どんな思い出話をしたのだろうか? この質問はリクエストとして扱う。" + - "プライベートの友人からメールが届いている。【愛】で判定を行う。成功すると、好きなNPCを協力者として設定することができる。判定に失敗すると苦情のメールだった。ストレスを1点受ける。" + - "ノイズメンバーから応援のメッセージをもらう。好きなネイロを1つ獲得する(この効果で。特定のネイロを7個以上にすることはできない)。" + - "美味しい食べ物屋さんに関する情報を教えてもらう。【日常】で判定を行う。成功すると、自分のストレスを1点回復できる。" + - "オトクイに関する情報を求めているノイズメンバーに出会う。公開されている脅威1つにつき、その情報をコイン1枚で売却できる。このイベントが2度以上起きた場合、すでに売却した脅威の情報を再び売ることはできない。" + - "試作アプリの試験者を募集している。好きなアプリ1つを獲得する。ただし、このアプリを使用するときサイコロを1個振ること。1か2が出ると、そのアプリは効果を発揮しない。セッション中に、試作アプリを使用しているとセッション終了時にレポートを提出できる。【頭脳】で判定を行う。成功すると、コインを1枚獲得できる。" + - "自分に関する悪口を見つける。そこには、どんな悪口が書かれていたのだろうか。 この質問は、リクエストとして扱う。" + - "同じ種類のオトダマと契約しているオトダマ使いと意気投合。このセッションの間、自分のナンバー1つを、修得可能な別のナンバーに変更することができる。" + + RWT: + name: "報酬表" + type: "1D6" + items: + - "ノイズからオトクイ退治の報酬をもらうことができる。[倒したオトクイの本体のレベル]枚のコインを獲得する。" + - "ノイズにオトダマの情報を売ることができる。[自分の【頭脳】のダイスの数]枚のコインを獲得する。" + - "冒険を通じて因縁が芽生える。今回登場したキャラクターの中から一人を選ぶ。そのキャラクターを、自分の【想い人】にする。" + - "冒険を通じて絆が結ばれる。今回登場したNPCの中から一人を選ぶ。そのキャラクターを、自分の【協力者】にする。" + - "冒険の思い出が【ウタの欠片】になる。今回の冒険に登場した仲間、情景、出来事などなどから、キーワードを一つ選ぶ。そのキーワードを【ウタの欠片】のキーワード欄に追加する。" + - "戦いの経験が【ウタの欠片】になる。今回の冒険に登場した敵、情景、出来事などなどから、キーワードを一つ選ぶ。そのキーワードを【ウタの欠片】のキーワード欄に追加する。" + + NMT: + name: "悪夢表" + type: "1D6" + items: + - "絶望のウタに知覚を遮断される。背後にオトクイの気配を感じたと思ったときは遅かった。卑劣な攻撃があなたを襲う。好きな能力値で判定を行う。失敗するとあなたのキャラクターは、オトナシとなり、二度と冒険に参加できない。" + - "絶望のウタに混じり、悲痛な叫びが聞こえてくる。ココロダンジョンの持ち主だろうか。あなたは、救えなかったのだ。【日常】で判定を行う。失敗すると、自分の能力値一つを選ぶ。次回のセッションは、その能力値にストレスを受けた状態で始まる。" + - "絶望のウタに混じり、オトクイの笑いがこだまする。それは嘲りの笑いだった。オトクイや仲間たち……何より自分への怒りがわき上がる。【日常】で判定を行う。失敗すると、自分の想い人への【想い】を一つ失う。" + - "絶望のウタの中に一人取り残される。誰もあなたに気づかない。孤独に耐えながら、何とか日常へ帰還したが……そのときの恐怖がぬぐえない。【日常】で判定を行う。失敗すると、次回のセッションは、自分の【生命力】の現在値が通常の半分(端数切り上げ)の状態で始まる。" + - "ココロダンジョンから帰還したあなたを待っていたのは、代わり映えのない日常だった。あなたが任務に失敗しても、世界は変わらない。なら、もう、あんな怖い目をする必要はないんじゃないか? 【日常】で判定を行う。失敗すると、自分のナンバー一つを選ぶ。次回のセッションは、そのナンバーにストレスを受けた状態で始まる。" + - "絶望のウタの中を必死で逃げ出した。背後から仲間の声が聞こえた気がする。しかし、あなたは振り返ることができなかった。【日常】で判定を行う。失敗すると、自分に対して【想い】を持っているPC一人を選び、その自分に対する【想い】が失われる。" + + OIT: + name: "オトダマ一人称表" + type: "2D6" + items: + - "それがし" + - "おいら/あたい" + - "自分の名前" + - "おれ/あたし" + - "わたくし" + - "私" + - "ぼく/うち" + - "自分" + - "俺様/あたくし" + - "余/妾" + - "ミー" + + OYT: + name: "オトダマ呼び名表" + type: "2D6" + items: + - "ユー" + - "(PCの名前)たん/きゅん" + - "同志(PCの名前)" + - "キミ" + - "(PCの名前)くん/ちゃん" + - "マスター" + - "(PCの名前)さん" + - "(PCの名前)様" + - "あなた" + - "(PCの名前)氏/女史" + - "(PCの名前)殿" + + ORT: + name: "リアクション表" + type: "1D6" + items: + - "オトダマの表の性格を表すセリフ" + - "オトダマの裏の性格を表すセリフ" + - "PCを応援するセリフ" + - "PCをからかうセリフ" + - "趣味にまつわるセリフ" + - "攻撃を行うときのセリフ" + + OMT: + name: "出会い表" + type: "2D6" + items: + - "名門オトダマ使い。あなたは、代々オトダマを操る一族に生まれました。あなたには、幼い頃から相棒となるオトダマがいます。あなたは、そのオトダマと共に育ちました。" + - "傷ついたオトダマ。ある日、あなたは傷ついたオトダマを発見しました。意識を失い、今にも消えそうなオトダマに触れると、オトダマは意識を取り戻し、あなたを恩人と慕うようになりました。" + - "見えないお友達。あなたは孤独な幼年期を過ごしてきました。そのとき、あなたを導いてくれたのが、あなたのオトダマです。オトダマは、あなたに他人のココロのウタを聞き、人々を助ける術を教えてくれました。" + - "再生。あなたはオトクイに自分のココロのウタを食べられました。オトダマ使いに憑依したオトクイが倒されたとき、自分のココロの中から新たなオトダマが生まれました。" + - "愛するココロ。あなたには、子どもの頃から大好きだったウタがありました。ある日、そのウタを口ずさんでいるとき、突然、後ろから拍手の音が聞こえました。振り向くと、そこにオトダマがいました。" + - "動画。あなたは、動画を通じて歌を聞くのが好きでした。あるとき、聞いたことのないような素敵なウタが聞こえてきたかと思うと、画面の向こうからオトダマが飛び出してきました。" + - "喪失。ある日、あなたは悲劇に見舞われました。そのとき、あなたはとても大切にしていた何かを失いました。その失ったものを補うかのように、あなたの側にオトダマが現れました。" + - "受け継がれるウタ。あなたのオトダマは、あなたが大好きだった人の相棒だったオトダマでした。しかし、その人は悲劇に出会い、あなたの元を去りました。そのとき、あなたにオトダマを託したのです。" + - "謎のメール。ある日、友人からあなたの元に一通のメールが送られてきました。そのメールを開くと、不思議な音楽が流れ出し、オトダマが現れました。その友人とは、それ以来、連絡がつきません。" + - "封印。ある日、あなたは古いレコード屋で一曲の音盤に出会います。その音盤を再生してみると、オトダマが現れました。そして、オトダマは「封印を解いてくれたお礼に、しばらく付き合ってあげる」と言ってきました。" + - "一目惚れ。以前、あなたは様々な楽曲を発表していました。すると、その楽曲に一目惚れしたと言って、あなたの元にオトダマが押しかけてきました。以来、そのオトダマに付きまとわれる毎日です。" + + ST: + name: "情景表" + "11": "立ち並ぶ本棚の森" + "12": "夕日が差し込む教室" + "13": "鳴り止まない踏切" + "14": "ビルから見下ろした街並み" + "15": "二人で見た星空" + "16": "液晶画面に映る奇妙な光景" + "22": "ガラス窓に並ぶ雨だれ" + "23": "植物園の温室" + "24": "屋台が並ぶ祭りの風景" + "25": "陽炎が立ちのぼるアスファルト" + "26": "0時を示す時計の針" + "33": "無機質な白い天井" + "34": "暗闇に浮かび上がるヘッドライト" + "35": "後ろからついてくる野良猫" + "36": "一面の花畑" + "44": "あなたを見つめる大勢の観衆" + "45": "降り積もる雪" + "46": "古めかしい洋館の応接間" + "55": "おとぎ話に出てくるような森" + "56": "深夜のコンビニ" + "66": "誰もいない体育館" + + DKT: + name: "ダーク・キーワード表" + "11": "崩壊する楽園" + "12": "空に堕ちる" + "13": "優しい暴力" + "14": "沈黙の掟" + "15": "闇に溺れる" + "16": "こぼれ落ちた命" + "22": "行き止まりの絶望" + "23": "漆黒の翼" + "24": "眠れぬ夜" + "25": "避けられぬ運命" + "26": "斬り裂かれた景色" + "33": "からっぽな自分" + "34": "仮面の奥" + "35": "月光中毒" + "36": "昏い魔術" + "44": "……オブザデッド" + "45": "ココロを殺す" + "46": "感染する破滅" + "55": "愛の鎖" + "56": "残酷な真実" + "66": "デスゲーム" + + DNT: + name: "ダーク・名前表" + "11": "ダーク/濁、搦 ネロ/音呂、寝路" + "12": "クロト/黒斗、玄徒 ヤミ/夜美、闇" + "13": "ネクロ/根黒、寝喰 マコ/魔子、混乎" + "14": "カゲオ/影男、陰夫 オニコ/鬼子、隠忍呼" + "15": "アクタ/芥、悪太 ホタル/蛍、歩足" + "16": "マオウ/魔王、万凹 ミダラ/淫、美堕裸" + "22": "マミヤ/魔美也、狸夜 ジャミ/邪美、蛇実" + "23": "ドクロ/髑髏、毒炉 ヨミ/黄泉、詠" + "24": "マクラ/枕、真暗 サツキ/殺鬼、五月" + "25": "ゲドウ/外道、戯堂 サヤ/小夜、鞘" + "26": "ジゴク/地獄、慈極 ウマル/埋、兎丸" + "33": "エンド/怨人、終 ヨハネ/夜羽、世刎" + "34": "ノロイ/呪、鈍 カバネ/屍、椛音" + "35": "アクム/悪夢、飽夢 クサリ/腐、鎖" + "36": "バツ/罰、× ニエ/贄、沸" + "44": "ネガ/音我、願 リリス/璃々子、離里素" + "45": "ウツロ/虚、洞 ネタミ/妬美、寝多実" + "46": "ハジメ/始、創 ホロビ/滅、亡" + "55": "ザイン/罪印、沙陰 リンボ/淋墓、辺獄" + "56": "ハラワタ/腑、祓輪太 ユガミ/歪、由神" + "66": "イミ/忌、逝美 ムイミ/無意味、無為巳" + + HKT: + name: "ホット・キーワード表" + "11": "真夜中をぶっ壊す" + "12": "夢を打ち上げろ" + "13": "譲れない明日" + "14": "あふれ出す衝動" + "15": "獣を解き放て" + "16": "蒸発した涙" + "22": "高らかに叫べ" + "23": "負けられない戦い" + "24": "握りしめた拳" + "25": "疾走する青春" + "26": "ココロに従え" + "33": "がんばれ" + "34": "そのまま進め" + "35": "自分の旗" + "36": "抗い壊し突き進む" + "44": "咲き誇る情熱の花" + "45": "暑苦しい友情" + "46": "オレ色に染まれ" + "55": "世界に八つ当たり" + "56": "消せない炎" + "66": "オーバードライブ" + + HNT: + name: "ホット・名前表" + "11": "レッド/烈怒、煉集 アカネ/赤音、茜" + "12": "アツシ/熱、純志 カンナ/神奈、柑菜" + "13": "カケル/駆、賭 ハル/晴、春" + "14": "ガッツ/牙突、勝 アカリ/紅莉、明里" + "15": "ケン/剣、拳 アスカ/明日香、飛鳥" + "16": "ゴウ/豪、剛 ヒミコ/日美子、卑弥呼" + "22": "ヒイロ/火色、陽彩 アキラ/晶、爽" + "23": "タケル/武、猛 ヒトミ/瞳、仁美" + "24": "グレン/紅蓮、九煉 ナツコ/夏子、懐子" + "25": "アラシ/嵐、荒 ヒカル/光、晃" + "26": "エンジョウ/炎上、円定 コマチ/小町、小真知" + "33": "レツ/烈、裂 リズム/理澄、李珠夢" + "34": "リキ/力、陸希 キョウカ/響歌、驚花" + "35": "ホムラ/焔、吠叢 カグヤ/輝夜、赫映" + "36": "ジョウ/情、丈 アオリ/煽、亜織" + "44": "ロック/六句、麓 フォルテ/鳳流弖、彫照" + "45": "ヤマト/大和、岳斗 イサミ/伊佐美、勇美" + "46": "リュウセイ/流星、龍盛 ミライ/未来、美良依" + "55": "イカル/怒、鵤 ヒマワリ/向日葵、火回" + "56": "ツトム/努、勉 ハナビ/花火、羽夏妃" + "66": "レオ/伶央、獅王 マツリ/祭、茉莉" + + LKT: + name: "ラブ・キーワード表" + "11": "大人の恋" + "12": "ドキドキが止まらない" + "13": "つないだ手" + "14": "世界を敵に回しても" + "15": "重なる声" + "16": "君のためなら死ねる" + "22": "甘い口づけ" + "23": "まぶたをとじて" + "24": "キミとボク" + "25": "好きとか嫌いとか" + "26": "いつまでも" + "33": "抱きしめたい" + "34": "75億と1千五百万人愛してる" + "35": "自動的な恋" + "36": "会いたい" + "44": "伝えたいコトバ" + "45": "ありがとう" + "46": "時間を止めて" + "55": "大好き" + "56": "素敵な贈り物" + "66": "ビューティフルワールド" + + LNT: + name: "ラブ・名前表" + "11": "シアン/詩庵、思杏 アオイ/葵、蒼生" + "12": "ソナタ/奏名太、其方 イズミ/泉、出海" + "13": "ツナグ/繋、継 カレン/可憐、歌恋" + "14": "ミノル/実、稔 コイ/恋、鯉" + "15": "ユウ/優、悠 ラブ/良舞、羅步" + "16": "レイン/玲音、霊印 アマミ/甘味、天海" + "22": "ソウヤ/想夜、添也 フミ/文、芙美" + "23": "イトシ/糸糸、意俊 コイシ/恋志、小石" + "24": "エガオ/笑顔、描生 オモイ/想、念" + "25": "マコト/誠、真実 マナ/真菜、愛" + "26": "ユウリ/有理、悠里 ケイ/恵、佳" + "33": "チヒロ/千尋、茅紘 ウララ/麗、占" + "34": "トモ/友、杜望 ヒナ/雛、比奈" + "35": "ソラ/空、宙 ツユ/露、梅雨" + "36": "ユウダイ/雄大、優大 ノゾミ/望、希海" + "44": "ハグ/剥、抱 キス/喜好、口吻" + "45": "ショウタ/翔太、祥太 アイ/愛、藍" + "46": "ジュン/純、潤 ミサオ/美沙緒、操" + "55": "リョウ/涼、猟 イチズ/一途、意地図" + "56": "シグレ/時雨、紫暮 アオバ/青葉、碧羽" + "66": "ロミオ/路美雄、露澪 ロマン/浪漫、絽萬" + + EKT: + name: "エキセントリック・キーワード表" + "11": "シェフのきまぐれニルヴァーナ" + "12": "おかず食べ過ぎ" + "13": "バイバイバイアグラ" + "14": "おふとん王国の攻防" + "15": "ぐるぐるとクルクル" + "16": "ゴリラの千年王国" + "22": "くもん式フランケンシュタイナー" + "23": "宇宙人とデート" + "24": "まいにち寝正月" + "25": "猫がにゃー" + "26": "道草にがい" + "33": "ブシドーロック!サムライパンク!" + "34": "冷やしインド" + "35": "生きててよかった" + "36": "ぷるぷる" + "44": "夜明けのツタンカーメン" + "45": "半額の宴" + "46": "超気持ちいいなにか" + "55": "いあ!いあ!はすたあ!" + "56": "小学生に貯金で負けた" + "66": "秒速1ポロンクセマ" + + ENT: + name: "エキセントリック・名前表" + "11": "ライム/来夢、雷鵡 ミドリ/緑、美登里" + "12": "ランポ/乱歩、蘭舗 ビビリ/恐、美々裏" + "13": "シラズ/不知、調頭 ヒスイ/翡翠、陽彗" + "14": "ムウ/夢生、無 キノコ/茸、紀乃子" + "15": "ネコヒコ/猫彦、寝子日子 イヌコ/犬子、夷猫" + "16": "ダダ/駄々、蛇陀 キリコ/切子、霧湖" + "22": "イケメン/活面、逝麺 ラムネ/来夢音、螺旨" + "23": "キョウスケ/狂介、京助 ランマ/乱麻、爛漫" + "24": "ネジ/螺子、寝児 アリス/有栖、亜梨子" + "25": "マワル/回、環 タタミ/畳、多々実" + "26": "キュウ/球、Q ズキン/頭巾、厨琴" + "33": "サバン/沙蛮、裂卍 マニア/摩尼亜、間合" + "34": "カエル/帰、蛙 エリマキ/襟巻、絵里真希" + "35": "ナゾウ/謎宇、何造 カンノン/観音、疳暢" + "36": "イッキュウ/一休、逸宮 ミロク/弥勒、診録" + "44": "シュール/酒潤、終琉 カプリ/華降、噛布里" + "45": "キジン/奇人、鬼神 フシギ/不思議、節黄" + "46": "カブキ/歌舞伎、傾 メロン/芽論、女侖" + "55": "ジョーカー/冗歌、浄化 ピエロ/秘絵呂、道化師" + "56": "ウイロウ/外郎、初弄 マッチャ/抹茶、末耶" + "66": "ビックリ/吃驚、! ハテナ/果菜、?" + + MKT: + name: "メランコリー・キーワード表" + "11": "ごめんなさい" + "12": "甘い甘い逃避" + "13": "ひとりぼっち" + "14": "ズルい世界" + "15": "果たせなかった約束" + "16": "取り返しのつかない言葉" + "22": "いっそ死にたい" + "23": "置いてきた夢" + "24": "見あげた青空" + "25": "きみの嘘" + "26": "すれ違う言葉" + "33": "幸せだった昨日" + "34": "こんなはずじゃなかった" + "35": "別れてしまった二つの道" + "36": "また会えたらいいね" + "44": "ここではないどこか" + "45": "青春の終わり" + "46": "大好きだった膝の上" + "55": "誰かぼくをほめて" + "56": "高潔な裏切り" + "66": "ナルシズム" + + MNT: + name: "メランコリー・名前表" + "11": "ヴァイス/灰主、唄守 マシロ/真白、万代" + "12": "キズ/傷、疵 ダレカ/誰香、惰麗華" + "13": "ユレル/揺、遊玲流 エモ/絵萌、恵面" + "14": "オボロ/朧、憶露 ホノカ/仄、穂乃香" + "15": "メロ/夢露、芽朗 シズ/静、志津" + "16": "ヒイラギ/柊、氷刺木 カタミ/形見、片実" + "22": "リネン/理然、離念 スノウ/素皇、珠瑙" + "23": "セツナ/切、刹那 シノブ/偲、忍" + "24": "ナミダ/涙、波太 カスカ/霞歌、幽" + "25": "ムスビ/結、息日 カコ/過去、寡子" + "26": "ウソ/嘘、宇曽 アイカ/哀歌、愛香" + "33": "ペイン/閉音、病印 ツラミ/辛美、貫実" + "34": "ヨリミチ/寄道、頼道 シラユキ/白雪、知由樹" + "35": "ヒトリ/独、一人 オトナ/音鳴、乙菜" + "36": "スバル/昴、透遙 ハルカ/遥、晴香" + "44": "バイバイ/梅云、吠々 バニラ/香子蘭、芭韮" + "45": "トオル/透、通 リツ/律、慄" + "46": "タビ/旅、足袋 チギリ/契、千切" + "55": "サイゴ/彩吾、最期 サクラ/桜、咲良" + "56": "アワレ/憐、哀 ヒメイ/悲鳴、姫衣" + "66": "ヘヴン/戸聞、天国 ガラス/硝子、枯州" + + OPA: + name: "オトダマ性格表A" + "11": "さわやか" + "12": "単純" + "13": "目立ちたがり" + "14": "笑い上戸" + "15": "P大好き" + "16": "がんばり屋" + "22": "ひょうきん" + "23": "ほれっぽい" + "24": "勇敢" + "25": "好奇心旺盛" + "26": "優しい" + "33": "八方美人" + "34": "博愛" + "35": "感情的" + "36": "おしゃべり" + "44": "無鉄砲" + "45": "元気" + "46": "楽観的" + "55": "自信家" + "56": "自由" + "66": "好戦的" + + OPB: + name: "オトダマ性格表B" + "11": "悲観的" + "12": "大人しい" + "13": "臆病" + "14": "クール" + "15": "のんき" + "16": "マジメ" + "22": "夢想家" + "23": "常識人" + "24": "サイコ" + "25": "おおらか" + "26": "平和主義者" + "33": "慎重" + "34": "合理主義者" + "35": "無口" + "36": "照れ屋" + "44": "おひとよし" + "45": "なまけもの" + "46": "腰が低い" + "55": "疑い深い" + "56": "謙虚" + "66": "嘘つき" + + OHT: + name: "オトダマ趣味表" + "11": "散歩" + "12": "うわさ話" + "13": "寝る" + "14": "読書" + "15": "アイドル" + "16": "甘味" + "22": "飲み会" + "23": "温泉" + "24": "ギャンブル" + "25": "動物" + "26": "アニメ" + "33": "ガーデニング" + "34": "漫画" + "35": "ドラマ" + "36": "オークション" + "44": "パズル" + "45": "占い" + "46": "焼き肉" + "55": "スポーツ観戦" + "56": "ゲーム" + "66": "動画配信" + + OLT: + name: "オトダマ外見表" + "11": "デフォルト" + "12": "王子様/お姫様" + "13": "和装" + "14": "獣系" + "15": "ゴス" + "16": "眼鏡" + "22": "スポーツ" + "23": "軍服" + "24": "天使/悪魔の羽" + "25": "学生服" + "26": "メガホン" + "33": "スポーツ系" + "34": "パンク" + "35": "フォーマル" + "36": "ジャージ" + "44": "季節イベント" + "45": "白衣" + "46": "童話コス" + "55": "バニー" + "56": "水着" + "66": "戦隊コス" \ No newline at end of file diff --git a/i18n/HatsuneMiku/ko_kr.yml b/i18n/HatsuneMiku/ko_kr.yml new file mode 100644 index 000000000..8fa2df827 --- /dev/null +++ b/i18n/HatsuneMiku/ko_kr.yml @@ -0,0 +1,549 @@ +ko_kr: + HatsuneMiku: + special: "스페셜" + neiro_acquire: " 음색에 %{pickup_dice}(%{color})를 취득한 경우 %{total}:%{result}" + color_black: "검정" + color_red: "빨강" + color_blue: "파랑" + color_green: "초록" + color_white: "하양" + color_any: "임의" + + FT: + name: "펌블표" + type: "1D6" + items: + - "주변에서 활기가 사라진다. 검정 이외의 모든 음색을 하나씩 줄인다." + - "동료에게 폐를 끼쳐버린다. 자신 이외의 PC 전원의【생명력】이 1점 감소한다." + - "이 실패가 나중에 화가 될지도 모른다……. 자신의【생명력】이 1D6점 감소한다." + - "마음에 피로감이 가득 차간다. 자신이 스트레스를 1점 받는다." + - "1D6을 굴린다. 그 PC의 코어가, 주사위 눈이 1이면 다크로, 2이면 핫으로, 3이면 러브로, 4이면 엑센트릭으로, 5이면 멜랑콜리로 변화한다. 6이었을 경우, 코어는 변화하지 않는다." + - "럭키! 특별히 아무것도 일어나지 않는다" + + CWT: + name: "치명상표" + type: "1D6" + items: + - "절망적인 공격을 받는다. 그 캐릭터는 강제 퇴출된다." + - "고통의 비명을 지르며 비참하게 쓰러진다. 그 캐릭터는 행동불능이 된다. 또한, 검정 음색이 하나 늘어난다." + - "오토쿠이의 일격으로 당신은 날아가버린다. 그 캐릭터는 행동불능이 된다. 또한, 분류가 장비인 넘버에 스트레스를 1점 받는다." + - "강렬한 일격을 받고 기절한다. 그 캐릭터는 행동불능이 된다." + - "의식은 있지만 일어설 수 없다. 그 캐릭터는 행동불능이 된다. 다음 씬에 아직【생명력】이 0점이었을 경우, 자동적으로 1점에 회복한다." + - "기적적으로 버텨내며 견뎌낸다. 【생명력】이 1점이 된다." + + BT: + name: "휴식표" + type: "1D6" + items: + - "동료와의 즐거운 시간. 자신의【소중한 사람】의 파토스를 하나 회복한다." + - "지금까지의 모험을 되돌아본다. 자신의 【능력치】의 파토스를 하나 회복한다." + - "자신의 오토다마와 대화한다.【협력자】의 파토스나, 넘버의 파토스를 하나 회복한다." + - "몸을 천천히 쉰다. 자신의【생명력】을 2D6점 회복한다. 원한다면, 회복을 하기 전에, 자신의【활력】을 다시 결정해도 좋다." + - "오, 럭키! 좋은 걸 찾았다! 자신의 코인을 1개 늘린다." + - "노이즈 스토어에 접속했다. 각 PC는, 자신의【두뇌】의 주사위 수와 같은 개수까지, 어플리(アプリ)을 구입할 수 있다." + + TT: + name: "목표표" + type: "1D6" + items: + - "악의. PC 중에서【생명력】이 가장 낮은 한 명을 목표로 선택한다.【생명력】이 가장 낮은 PC가 여럿일 경우, 그중에서 GM이 임의로 한 명을 선택한다." + - "교활. 패러그래프 1~5 중에서, 숫자가 가장 높은 패러그래프에 있는 PC 한 명을 목표로 선택한다. 전원이 권외에 있을 경우, 권외에 있는 PC 전원을 목표로 선택한다." + - "견실. PC 중에서, 해당 위협(적)의 「판정란」에 적힌 능력치 랭크가 가장 낮은 캐릭터 한 명을 목표로 선택한다. 랭크가 가장 낮은 캐릭터가 여럿일 경우, 그중에서 수정치가 가장 낮은 캐릭터 한 명을 선택한다. 수정치까지 같을 경우, GM이 임의로 한 명을 선택한다." + - "호쾌. PC 중에서【무용】 랭크가 가장 높은 한 명을 목표로 선택한다. 랭크가 가장 높은 PC가 여럿일 경우, 그중에서 수정치가 가장 높은 한 명을 선택한다. 수정치까지 같을 경우, GM이 임의로 한 명을 선택한다." + - "단순. 패러그래프 1~5 중에서, 숫자가 가장 낮은 패러그래프에 있는 PC 한 명을 목표로 선택한다. 전원이 권외에 있을 경우, 권외에 있는 PC 전원을 목표로 선택한다." + - "난전. 해당 위협(적)이 있는 패러그래프와, 숫자가 1만큼 차이 나는 패러그래프에 있는 PC 전원을 목표로 선택한다. 해당 패러그래프에 PC가 없을 경우, GM이 임의로 한 명을 선택한다." + + RT: + name: "관계표" + type: "1D6" + items: + - "연심(플러스)/살의(마이너스)" + - "동정(플러스)/멸시(마이너스)" + - "동경(플러스)/질투(마이너스)" + - "신뢰(플러스)/의심(마이너스)" + - "공감(플러스)/섬뜩함(마이너스)" + - "소중함(플러스)/귀찮음(마이너스)" + + OT: + name: "장애표" + type: "1D6" + items: + - "당신의 마음에 큰 변화가 찾아온다. 1D6을 굴린다. 그 PC의 코어가, 주사위 눈이 1이면 다크로, 2이면 핫으로, 3이면 러브로, 4이면 엑센트릭으로, 5이면 멜랑콜리로 변화한다. 6이었을 경우, 코어는 변화하지 않는다." + - "당신은 육체적으로 큰 대미지를 입는다. 1D6점의 대미지를 받는다." + - "노이즈의 도움을 빌려 문제를 해결한다. 코인을 1D6개 지불할 필요가 있다. 코인을 지불할 경우, 다른 PC에게 코인을 받아도 좋다. 지불이 부족했을 경우, 그 차액만큼 자신의 【생명력】을 줄인다." + - "큰 피로감을 느낀다. 스트레스를 1점 받는다." + - "무심코 시간을 써버린다.【타임】이 1점 감소한다." + - "그 자리에 불길한 기운이 가득 찬다. 검정 음색이 하나 늘어난다." + + RQT: + name: "리퀘스트표" + type: "2D6" + items: + - "그 구역의 풍경이, 당신의【정경】으로 바뀌어간다. 「너의 시작에 얽힌 이야기를 들려다오. 너는 이 땅에서 무엇을 느꼈느냐?」" + - "당신은, 그 구역의 풍경 속에서 그리운 무언가를 발견하고, 자신의 죄를 떠올렸다. 「무엇을 보았느냐? 무엇을 후회하고 있지?」" + - "그 구역의 풍경이, 당신의 코어와 같은 색으로 물든다. 당신은 그 풍경 속에서 자신이 되고 싶은 모습을 발견한다. 「그것이 너의 바람인가? 너는 미래에서 무엇을 추구하고자 하느냐?」" + - "당신의 뇌리에, 인물란에 적힌 인물 한 명의 이미지가 떠오른다. 그 인물은 무언가를 속삭이고, 당신의 마음은 상처받았다. 「그 자는 누구냐? 네게 뭐라고 했지?」" + - "당신은 그 구역의 풍경 속에서 기묘한 것을 발견하고, 공포에 떨었다. 「무엇을 보았느냐? 어째서 그것을 두려워하지?」" + - "그 구역에 코코로 던전의 소유자가 나타난다. 그 인물은 당신에게 질문을 던진다. 「나를 어떻게 생각해? 어째서, 나를 돕는 거야?」" + - "당신의 오토다마의 모습이, 당신이 잘 아는 인물로 변한다 「그 자는 누구인가? 그 녀석을 어떻게 생각하고 있지?」" + - "그 구역에, 당신이 가진 넘버가 울려 퍼진다. 「이것이 너의 노래인가? 그 노래의 이름은 무엇이냐?」" + - "당신의 오토다마의 모습이, 당신이 원하는 인물의 모습으로 변한다. 「그것이 네가 갈망하는 인물인가. 그자를 어떻게 하고 싶지?」" + - "그 구역의 풍경에 당신의 일상이 떠오른다. 「너는 무엇을 하고 있지? 그 삶에 대해 어떻게 생각하고 있느냐?」" + - "당신의 눈앞에, 당신의 시체가 놓여있다. 「너를 죽이는 것은 무엇이냐? 너는 누구에게 살해당하는가?」" + + CLT: + name: "크롤표" + type: "2D6" + items: + - "비밀번호가 유출되었다! 소지금이 사라졌다! 자신의 코인을 3개 잃는다." + - "과거에 같은 오토쿠이와 마주친 적이 있는 인물과 만난다.【기술】로 판정한다. 성공하면, 「특수 어플리(앱) 개발」을 행할 수 있다(이 간주 액션에는【타임】이 필요 없다). 필요한 코인은 1개 줄어든다." + - "근처에 있는 파워스팟을 알게된다.【영력】으로 판정한다. 성공하면, 자신의【생명력】을 【활력】의 값만큼 회복할 수 있다." + - "당신을 아는 인물과 만난다. 어떤 추억 이야기를 나누었을까? 이 질문은 리퀘스트로 취급한다." + - "사적인 친구에게서 메일이 와있다.【사랑】으로 판정한다. 성공하면, 원하는 NPC를 협력자로 설정할 수 있다. 판정에 실패하면 도착한 건 당신에게 불만을 표현하는 메일이었다. 스트레스를 1점 받는다." + - "노이즈 멤버에게서 응원 메시지를 받는다. 원하는 음색을 1개 획득한다(이 효과로. 특정 음색을 7개 이상으로 할 수는 없다)." + - "맛있는 음식점에 관한 정보를 알려받는다.【일상】으로 판정한다. 성공하면, 자신의 스트레스를 1점 회복할 수 있다." + - "오토쿠이에 관한 정보를 구하는 노이즈 멤버와 만난다. 공개된 위협 1개당, 그 정보를 코인 1개에 매각할 수 있다. 이 이벤트가 2번 이상 일어났을 경우, 이미 매각한 위협의 정보를 다시 팔 수는 없다." + - "시제품 어플리(앱)의 테스터를 모집하고 있다. 원하는 어플리(앱) 1개를 획득한다. 단, 이 어플리(앱)를 사용할 때 주사위를 1개 굴린다. 1이나 2가 나오면, 그 어플리(앱)는 효과를 발휘하지 않는다. 세션 중에, 시제품 어플리(앱)를 사용했다면 세션 종료 시에 리포트를 제출할 수 있다. 【두뇌】로 판정한다. 성공하면, 코인을 1개 획득할 수 있다." + - "자신에 관한 험담을 발견한다. 거기에는 어떤 험담이 쓰여있었을까. 이 질문은 리퀘스트로 취급한다." + - "같은 종류의 오토다마와 계약한 오토다마 사용자와 의기투합한다. 이 세션 동안, 자신의 넘버 1개를 습득 가능한 다른 넘버로 변경할 수 있다." + + RWT: + name: "보상표" + type: "1D6" + items: + - "노이즈에게서 오토쿠이 퇴치 보상을 받을 수 있다. [쓰러뜨린 오토쿠이 본체의 레벨]개의 코인을 획득한다." + - "노이즈에게 오토다마의 정보를 팔 수 있다. [자신의 【두뇌】의 주사위 수]개의 코인을 획득한다." + - "모험을 통해 인연이 싹튼다. 이번에 등장한 캐릭터 중에서 한 명을 선택한다. 그 캐릭터를, 자신의【소중한 사람】으로 한다." + - "모험을 통해 인연이 맺어진다. 이번에 등장한 NPC 중에서 한 명을 선택한다. 그 캐릭터를, 자신의【협력자】로 한다." + - "모험의 추억이【노래의 조각】이 된다. 이번 모험에 등장한 동료, 정경, 사건 등에서, 키워드를 하나 선택한다. 그 키워드를【노래의 조각】의 키워드란에 추가한다." + - "싸움의 경험이【노래의 조각】이 된다. 이번 모험에 등장한 적, 정경, 사건 등에서, 키워드를 하나 선택한다. 그 키워드를【노래의 조각】의 키워드란에 추가한다." + + NMT: + name: "악몽표" + type: "1D6" + items: + - "절망의 노래에 지각이 차단된다. 등 뒤에서 오토쿠이의 기척을 느꼈다고 생각했을 때는 이미 늦었다. 비열한 공격이 당신을 덮친다. 원하는 능력치로 판정한다. 실패하면 당신의 캐릭터는, 오토나시가 되어 두 번 다시 모험에 참가할 수 없다." + - "절망의 노래에 섞여, 비통한 비명이 들려온다. 코코로 던전의 소유자일까. 당신은 구해내지 못한 것이다. 【일상】으로 판정한다. 실패하면, 자신의 능력치 하나를 선택한다. 다음 세션은, 그 능력치에 스트레스를 받은 상태로 시작한다." + - "절망의 노래에 섞여, 오토쿠이의 웃음소리가 메아리친다. 그것은 조소의 웃음이었다. 오토쿠이나 동료들……무엇보다 자신에 대한 분노가 치밀어 오른다. 【일상】으로 판정한다. 실패하면, 자신의 소중한 사람에 대한 【마음】을 하나 잃는다." + - "절망의 노래 속에 혼자 남겨진다. 아무도 당신을 알아채지 못한다. 고독을 견디면서, 겨우 일상으로 귀환했지만……그때의 공포가 지워지지 않는다. 【일상】으로 판정한다. 실패하면, 다음 세션은, 자신의 【생명력】의 현재값이 통상의 절반(소수점 올림) 상태로 시작한다." + - "코코로 던전에서 귀환한 당신을 기다리고 있던 것은 변함없는 일상이었다. 당신이 임무에 실패해도 세계는 변하지 않는다. 그렇다면, 이제, 그런 무서운 일을 할 필요는 없는 게 아닐까? 【일상】으로 판정한다. 실패하면, 자신의 넘버 하나를 선택한다. 다음 세션은 그 넘버에 스트레스를 받은 상태로 시작한다." + - "절망의 노래 속을 필사적으로 도망쳤다. 등 뒤에서 동료의 목소리가 들린 것 같다. 하지만, 당신은 돌아볼 수 없었다. 【일상】으로 판정한다. 실패하면, 자신에 대해【마음】을 가진 PC 한 명을 선택한다. 그 PC가 당신에게 가지고 있던【마음】은 소실된다" + + OIT: + name: "오토다마 1인칭표" + type: "2D6" + items: + - "소인" + - "나/나(여)" + - "자기 이름" + - "나/저" + - "저(격식)" + - "나" + - "저/나(친근)" + - "자신" + - "이 몸/나(여, 격식)" + - "과인/소첩" + - "미(Me)" + + OYT: + name: "오토다마 호칭표" + type: "2D6" + items: + - "유(You)" + - "(PC의 이름)땅/큥" + - "동지(PC의 이름)" + - "그대" + - "(PC의 이름)군/짱" + - "마스터" + - "(PC의 이름)씨" + - "(PC의 이름)님" + - "당신" + - "(PC의 이름)씨/여사" + - "(PC의 이름)전하" + + ORT: + name: "리액션표" + type: "1D6" + items: + - "오토다마의 겉 성격을 나타내는 대사" + - "오토다마의 속 성격을 나타내는 대사" + - "PC를 응원하는 대사" + - "PC를 놀리는 대사" + - "취미와 관련된 대사" + - "공격을 행할 때의 대사" + + OMT: + name: "만남표" + type: "2D6" + items: + - "명문 오토다마 사용자. 당신은, 대대로 오토다마를 다루는 일족에서 태어났습니다. 당신에게는, 어릴 때부터 파트너로 함께 한 오토다마가 있습니다. 당신은 그 오토다마와 함께 자랐습니다." + - "상처받은 오토다마. 어느 날, 당신은 상처받은 오토다마를 발견했습니다. 의식을 잃고, 곧 사라질 것 같은 오토다마에 손을 대자, 오토다마는 의식을 되찾고, 당신을 은인으로 따르게 되었습니다." + - "보이지 않는 친구. 당신은 고독한 유년기를 보내왔습니다. 그때, 당신을 이끌어 준 것이, 당신의 오토다마입니다. 오토다마는, 당신에게 타인의 마음의 노래를 듣고, 사람들을 돕는 방법을 가르쳐 주었습니다." + - "재생. 당신은 오토쿠이에게 자신의 마음의 노래를 먹혔습니다. 오토다마 사용자에게 빙의한 오토쿠이가 쓰러졌을 때, 자신의 마음 속에서 새로운 오토다마가 태어났습니다." + - "사랑하는 마음. 당신에게는, 어릴 때부터 매우 좋아했던 노래가 있었습니다. 어느 날, 그 노래를 흥얼거리고 있을 때, 갑자기, 뒤에서 박수 소리가 들려왔습니다. 돌아보면, 거기에 오토다마가 있었습니다." + - "동영상. 당신은 동영상을 통해 노래를 듣는 것을 좋아했습니다. 어느 때, 들어본 적 없는 멋진 노래가 들려오나 했더니, 화면 너머에서 오토다마가 튀어나왔습니다." + - "상실. 어느 날, 당신은 비극에 휩쓸렸습니다. 그때, 당신은 매우 소중히 했던 무언가를 잃었습니다. 그 잃은 것을 보완하듯이, 당신 곁에 오토다마가 나타났습니다." + - "이어지는 노래. 당신의 오토다마는, 당신이 매우 좋아했던 사람의 파트너였던 오토다마였습니다. 하지만, 그 사람은 비극을 겪고 당신 곁을 떠났습니다. 그때, 그 자는 당신에게 오토다마를 맡긴 것입니다." + - "수수께끼의 메일. 어느 날, 친구에게서 당신에게 한 통의 메일이 보내졌습니다. 그 메일을 열자 신기한 음악이 흘러나오고 오토다마가 나타났습니다. 그 친구와는 그 이후로 연락이 닿지 않습니다." + - "봉인. 어느 날, 당신은 낡은 레코드 가게에서 한 곡의 음반을 만납니다. 그 음반을 재생해보자 오토다마가 나타났습니다. 그리고, 오토다마는 「봉인을 풀어준 보답으로, 잠시 함께 어울려줄게」라고 말해왔습니다." + - "첫눈에 반함. 이전에, 당신은 다양한 악곡을 발표했습니다. 그러자, 그 악곡에 첫눈에 반했다며 당신에게 오토다마가 찾아왔습니다. 이후, 그 오토다마에게 쫓아다니는 나날입니다." + + ST: + name: "정경표" + "11": "줄지어 선 서가의 숲" + "12": "석양이 비치는 교실" + "13": "멈추지 않는 건널목" + "14": "빌딩에서 내려다본 거리" + "15": "둘이서 본 별하늘" + "16": "액정 화면에 비치는 기묘한 광경" + "22": "유리창에 늘어선 빗방울" + "23": "식물원의 온실" + "24": "포장마차가 늘어선 축제 풍경" + "25": "아지랑이가 피어오르는 아스팔트" + "26": "0시를 가리키는 시계 바늘" + "33": "무기질적인 하얀 천장" + "34": "어둠 속에 떠오르는 헤드라이트" + "35": "뒤에서 따라오는 길고양이" + "36": "온통 꽃밭" + "44": "당신을 바라보는 많은 관중" + "45": "쌓여가는 눈" + "46": "낡은 서양관의 응접실" + "55": "동화에 나오는 듯한 숲" + "56": "심야의 편의점" + "66": "아무도 없는 체육관" + + DKT: + name: "다크・키워드표" + "11": "붕괴하는 낙원" + "12": "하늘로 떨어진다" + "13": "부드러운 폭력" + "14": "침묵의 계율" + "15": "어둠에 빠진다" + "16": "흘러넘친 생명" + "22": "막다른 절망" + "23": "칠흑의 날개" + "24": "잠못드는 밤" + "25": "피할 수 없는 운명" + "26": "베어진 풍경" + "33": "텅 빈 자신" + "34": "가면의 안쪽" + "35": "월광 중독" + "36": "어두운 마술" + "44": "……오브 더 데드" + "45": "마음을 죽인다" + "46": "감염하는 파멸" + "55": "사랑의 쇠사슬" + "56": "잔혹한 진실" + "66": "데스게임" + + DNT: + name: "다크・이름표" + "11": "다크/濁、搦 네로/音呂、寝路" + "12": "쿠로토/黒斗、玄徒 야미/夜美、闇" + "13": "네크로/根黒、寝喰 마코/魔子、混乎" + "14": "카게오/影男、陰夫 오니코/鬼子、隠忍呼" + "15": "아쿠타/芥、悪太 호타루/蛍、歩足" + "16": "마오우/魔王、万凹 미다라/淫、美堕裸" + "22": "마미야/魔美也、狸夜 쟈미/邪美、蛇実" + "23": "도쿠로/髑髏、毒炉 요미/黄泉、詠" + "24": "마쿠라/枕、真暗 사츠키/殺鬼、五月" + "25": "게도우/外道、戯堂 사야/小夜、鞘" + "26": "지고쿠/地獄、慈極 우마루/埋、兎丸" + "33": "엔도/怨人、終 요하네/夜羽、世刎" + "34": "노로이/呪、鈍 카바네/屍、椛音" + "35": "아쿠무/悪夢、飽夢 쿠사리/腐、鎖" + "36": "바츠/罰、× 니에/贄、沸" + "44": "네가/音我、願 리리스/璃々子、離里素" + "45": "우츠로/虚、洞 네타미/妬美、寝多実" + "46": "하지메/始、創 호로비/滅、亡" + "55": "자인/罪印、沙陰 린보/淋墓、辺獄" + "56": "하라와타/腑、祓輪太 유가미/歪、由神" + "66": "이미/忌、逝美 무이미/無意味、無為巳" + + HKT: + name: "핫・키워드표" + "11": "한밤중을 부숴라" + "12": "꿈을 쏘아올려라" + "13": "양보할 수 없는 내일" + "14": "넘쳐흐르는 충동" + "15": "짐승을 해방시켜라" + "16": "증발한 눈물" + "22": "높이 외쳐라" + "23": "질 수 없는 싸움" + "24": "움켜쥔 주먹" + "25": "질주하는 청춘" + "26": "마음이 외치는 대로 따라라" + "33": "힘내라" + "34": "그대로 나아가라" + "35": "자신의 깃발" + "36": "저항하고 부수고 돌진한다" + "44": "활짝 피는 열정의 꽃" + "45": "뜨거운 우정" + "46": "내 색으로 물들어라" + "55": "세상에 화풀이" + "56": "지울 수 없는 불꽃" + "66": "오버드라이브" + + HNT: + name: "핫・이름표" + "11": "레드/烈怒、煉集 아카네/赤音、茜" + "12": "아츠시/熱、純志 칸나/神奈、柑菜" + "13": "카케루/駆、賭 하루/晴、春" + "14": "갓츠/牙突、勝 아카리/紅莉、明里" + "15": "켄/剣、拳 아스카/明日香、飛鳥" + "16": "고우/豪、剛 히미코/日美子、卑弥呼" + "22": "히이로/火色、陽彩 아키라/晶、爽" + "23": "타케루/武、猛 히토미/瞳、仁美" + "24": "구렌/紅蓮、九煉 나츠코/夏子、懐子" + "25": "아라시/嵐、荒 히카루/光、晃" + "26": "엔죠우/炎上、円定 코마치/小町、小真知" + "33": "레츠/烈、裂 리즈무/理澄、李珠夢" + "34": "리키/力、陸希 쿄우카/響歌、驚花" + "35": "호무라/焔、吠叢 카구야/輝夜、赫映" + "36": "죠우/情、丈 아오리/煽、亜織" + "44": "록쿠/六句、麓 포르테/鳳流弖、彫照" + "45": "야마토/大和、岳斗 이사미/伊佐美、勇美" + "46": "류우세이/流星、龍盛 미라이/未来、美良依" + "55": "이카루/怒、鵤 히마와리/向日葵、火回" + "56": "츠토무/努、勉 하나비/花火、羽夏妃" + "66": "레오/伶央、獅王 마츠리/祭、茉莉" + + LKT: + name: "러브・키워드표" + "11": "어른의 사랑" + "12": "두근거림이 멈추질 않아" + "13": "잡은 손" + "14": "세상을 적으로 돌려도" + "15": "겹치는 목소리" + "16": "너를 위해서라면 죽을 수 있어" + "22": "달콤한 입맞춤" + "23": "눈꺼풀을 감고" + "24": "너와 나" + "25": "좋다든가 싫다든가" + "26": "언제까지나" + "33": "껴안고 싶어" + "34": "75억하고도 1천5백만 명을 사랑해" + "35": "자동적인 사랑" + "36": "만나고 싶어" + "44": "전하고 싶은 말" + "45": "고마워" + "46": "시간을 멈춰" + "55": "좋아해" + "56": "멋진 선물" + "66": "뷰티풀 월드" + + LNT: + name: "러브・이름표" + "11": "시안/詩庵、思杏 아오이/葵、蒼生" + "12": "소나타/奏名太、其方 이즈미/泉、出海" + "13": "츠나구/繋、継 카렌/可憐、歌恋" + "14": "미노루/実、稔 코이/恋、鯉" + "15": "유우/優、悠 라부/良舞、羅步" + "16": "레인/玲音、霊印 아마미/甘味、天海" + "22": "소우야/想夜、添也 후미/文、芙美" + "23": "이토시/糸糸、意俊 코이시/恋志、小石" + "24": "에가오/笑顔、描生 오모이/想、念" + "25": "마코토/誠、真実 마나/真菜、愛" + "26": "유우리/有理、悠里 케이/恵、佳" + "33": "치히로/千尋、茅紘 우라라/麗、占" + "34": "토모/友、杜望 히나/雛、比奈" + "35": "소라/空、宙 츠유/露、梅雨" + "36": "유우다이/雄大、優大 노조미/望、希海" + "44": "하구/剥、抱 키스/喜好、口吻" + "45": "쇼우타/翔太、祥太 아이/愛、藍" + "46": "준/純、潤 미사오/美沙緒、操" + "55": "료우/涼、猟 이치즈/一途、意地図" + "56": "시구레/時雨、紫暮 아오바/青葉、碧羽" + "66": "로미오/路美雄、露澪 로만/浪漫、絽萬" + + EKT: + name: "엑센트릭・키워드표" + "11": "셰프의 변덕 니르바나" + "12": "반찬 너무 먹음" + "13": "바이바이 비아그라" + "14": "이불 왕국의 공방" + "15": "빙글빙글과 뱅글뱅글" + "16": "고릴라의 천년왕국" + "22": "구몬식 프랑켄슈타이너" + "23": "외계인과 데이트" + "24": "매일매일 방콕 설날" + "25": "고양이가 내용" + "26": "농땡이의 쓴맛" + "33": "부시도 록! 사무라이 펑크!" + "34": "히야시 인도" + "35": "살아있어서 다행이야" + "36": "탱글탱글" + "44": "새벽의 투탕카멘" + "45": "반값의 연회" + "46": "초기분좋은무언가" + "55": "이아! 이아! 하스터!" + "56": "초딩에게 저금으로 졌다" + "66": "초속 1폴론크세마" + + ENT: + name: "엑센트릭・이름표" + "11": "라이무/来夢、雷鵡 미도리/緑、美登里" + "12": "란포/乱歩、蘭舗 비비리/恐、美々裏" + "13": "시라즈/不知、調頭 히스이/翡翠、陽彗" + "14": "무우/夢生、無 키노코/茸、紀乃子" + "15": "네코히코/猫彦、寝子日子 이누코/犬子、夷猫" + "16": "다다/駄々、蛇陀 키리코/切子、霧湖" + "22": "이케멘/活面、逝麺 라무네/来夢音、螺旨" + "23": "쿄우스케/狂介、京助 란마/乱麻、爛漫" + "24": "네지/螺子、寝児 아리스/有栖、亜梨子" + "25": "마와루/回、環 타타미/畳、多々実" + "26": "큐우/球、Q 즈킨/頭巾、厨琴" + "33": "사반/沙蛮、裂卍 마니아/摩尼亜、間合" + "34": "카에루/帰、蛙 에리마키/襟巻、絵里真希" + "35": "나조우/謎宇、何造 칸논/観音、疳暢" + "36": "잇큐우/一休、逸宮 미로쿠/弥勒、診録" + "44": "슈루/酒潤、終琉 카프리/華降、噛布里" + "45": "키진/奇人、鬼神 후시기/不思議、節黄" + "46": "카부키/歌舞伎、傾 메론/芽論、女侖" + "55": "죠카/冗歌、浄化 피에로/秘絵呂、道化師" + "56": "우이로우/外郎、初弄 맛챠/抹茶、末耶" + "66": "빅쿠리/吃驚、! 하테나/果菜、?" + + MKT: + name: "멜랑콜리・키워드표" + "11": "미안해요" + "12": "달콤달콤한 도피" + "13": "혼자" + "14": "치사한 세상" + "15": "이루지 못한 약속" + "16": "돌이킬 수 없는 말" + "22": "차라리 죽고 싶어" + "23": "버려둔 꿈" + "24": "올려다본 파란 하늘" + "25": "너의 거짓말" + "26": "엇갈리는 말" + "33": "행복했던 어제" + "34": "이럴 줄 몰랐는데" + "35": "헤어진 두 갈래 길" + "36": "또 만날 수 있으면 좋겠어" + "44": "여기가 아닌 어딘가" + "45": "청춘의 끝" + "46": "좋아했던 무릎 위" + "55": "누가 나를 칭찬해줘" + "56": "고결한 배신" + "66": "나르시시즘" + + MNT: + name: "멜랑콜리・이름표" + "11": "바이스/灰主、唄守 마시로/真白、万代" + "12": "키즈/傷、疵 다레카/誰香、惰麗華" + "13": "유레루/揺、遊玲流 에모/絵萌、恵面" + "14": "오보로/朧、憶露 호노카/仄、穂乃香" + "15": "메로/夢露、芽朗 시즈/静、志津" + "16": "히이라기/柊、氷刺木 카타미/形見、片実" + "22": "리넨/理然、離念 스노우/素皇、珠瑙" + "23": "세츠나/切、刹那 시노부/偲、忍" + "24": "나미다/涙、波太 카스카/霞歌、幽" + "25": "무스비/結、息日 카코/過去、寡子" + "26": "우소/嘘、宇曽 아이카/哀歌、愛香" + "33": "페인/閉音、病印 츠라미/辛美、貫実" + "34": "요리미치/寄道、頼道 시라유키/白雪、知由樹" + "35": "히토리/独、一人 오토나/音鳴、乙菜" + "36": "스바루/昴、透遙 하루카/遥、晴香" + "44": "바이바이/梅云、吠々 바니라/香子蘭、芭韮" + "45": "토오루/透、通 리츠/律、慄" + "46": "타비/旅、足袋 치기리/契、千切" + "55": "사이고/彩吾、最期 사쿠라/桜、咲良" + "56": "아와레/憐、哀 히메이/悲鳴、姫衣" + "66": "헤분/戸聞、天国 가라스/硝子、枯州" + + OPA: + name: "오토다마 성격표A" + "11": "상쾌함" + "12": "단순함" + "13": "주목받고 싶어함" + "14": "잘 웃음" + "15": "P를 매우 좋아함" + "16": "열심히 하는 타입" + "22": "익살스러움" + "23": "쉽게 반함" + "24": "용감함" + "25": "호기심 왕성" + "26": "다정함" + "33": "팔방미인" + "34": "박애주의" + "35": "감정적" + "36": "수다스러움" + "44": "무모함" + "45": "활기참" + "46": "낙관적" + "55": "자신만만" + "56": "자유로움" + "66": "호전적" + + OPB: + name: "오토다마 성격표B" + "11": "비관적" + "12": "얌전함" + "13": "겁쟁이" + "14": "쿨함" + "15": "느긋함" + "16": "진지함" + "22": "몽상가" + "23": "상식인" + "24": "사이코" + "25": "너그러움" + "26": "평화주의자" + "33": "신중함" + "34": "합리주의자" + "35": "말수가 적음" + "36": "부끄러움을 잘 탐" + "44": "착한 사람" + "45": "게으름뱅이" + "46": "겸손함" + "55": "의심이 많음" + "56": "겸허함" + "66": "거짓말쟁이" + + OHT: + name: "오토다마 취미표" + "11": "산책" + "12": "소문 이야기" + "13": "자기" + "14": "독서" + "15": "아이돌" + "16": "단것" + "22": "술자리" + "23": "온천" + "24": "도박" + "25": "동물" + "26": "애니메이션" + "33": "가드닝" + "34": "만화" + "35": "드라마" + "36": "경매" + "44": "퍼즐" + "45": "점술" + "46": "고기구이" + "55": "스포츠 관전" + "56": "게임" + "66": "동영상 스트리밍" + + OLT: + name: "오토다마 외견표" + "11": "기본" + "12": "왕자님/공주님" + "13": "일본 전통 의상" + "14": "수인계" + "15": "고스" + "16": "안경" + "22": "스포츠" + "23": "군복" + "24": "천사/악마의 날개" + "25": "교복" + "26": "메가폰" + "33": "스포츠계" + "34": "펑크" + "35": "포멀" + "36": "저지" + "44": "계절 이벤트" + "45": "흰 가운" + "46": "동화 코스" + "55": "바니" + "56": "수영복" + "66": "전대 코스" \ No newline at end of file diff --git a/lib/bcdice/game_system.rb b/lib/bcdice/game_system.rb index 7bfaa1c16..66dfaab39 100644 --- a/lib/bcdice/game_system.rb +++ b/lib/bcdice/game_system.rb @@ -122,6 +122,7 @@ require "bcdice/game_system/GurpsFW" require "bcdice/game_system/HarnMaster" require "bcdice/game_system/HatsuneMiku" +require "bcdice/game_system/HatsuneMiku_Korean" require "bcdice/game_system/HeroScale" require "bcdice/game_system/Hieizan" require "bcdice/game_system/HouraiGakuen" diff --git a/lib/bcdice/game_system/HatsuneMiku.rb b/lib/bcdice/game_system/HatsuneMiku.rb index 6bc2dc391..3bcdb3b88 100644 --- a/lib/bcdice/game_system/HatsuneMiku.rb +++ b/lib/bcdice/game_system/HatsuneMiku.rb @@ -47,7 +47,7 @@ def eval_game_system_specific_command(command) text = judgeRoll(command) return text unless text.nil? - return roll_tables(command, TABLES) + return roll_tables(command, self.class::TABLES) end def judgeRoll(command) @@ -96,9 +96,16 @@ def judgeRoll(command) total = dice + modify result = check_success(total, dice, signOfInequality, target, specialNum) - colorList = ["黒", "赤", "青", "緑", "白", "任意"] + colorList = [ + translate('HatsuneMiku.color_black'), + translate('HatsuneMiku.color_red'), + translate('HatsuneMiku.color_blue'), + translate('HatsuneMiku.color_green'), + translate('HatsuneMiku.color_white'), + translate('HatsuneMiku.color_any'), + ] color = colorList[pickup_dice - 1] - texts << " ネイロに#{pickup_dice}(#{color})を取得した場合 #{total}:#{result}" + texts << translate('HatsuneMiku.neiro_acquire', pickup_dice: pickup_dice, color: color, total: total, result: result) end texts.uniq! message += "\n" + texts.join("\n") @@ -126,619 +133,148 @@ def getChangedModifyText(text) end def check_success(total_n, dice_n, signOfInequality, diff, special_n) - return "ファンブル" if dice_n == 1 - return "スペシャル" if dice_n >= special_n + return translate('fumble') if dice_n == 1 + return translate('HatsuneMiku.special') if dice_n >= special_n cmp_op = Normalize.comparison_operator(signOfInequality) target_num = diff.to_i if total_n.send(cmp_op, target_num) - "成功" + translate('success') else - "失敗" + translate('failure') end end - TABLES = { - "FT" => DiceTable::Table.new( - "ファンブル表", - "1D6", - [ - "周囲から活気が失われる。黒以外のすべてのネイロを一つずつ減らす。", - "仲間に迷惑をかけてしまう。自分以外のPC全員の【生命力】が1点減少する。", - "この失敗は後に祟るかもしれない……。自分の【生命力】が1D6点減少する。", - "ココロに疲労感が満ちていく。自分がストレスを1点受ける。", - "1D6を振ること。そのPCのコアが、その出目が1ならダークに、2ならホットに、3ならラブに、4ならエキセントリックに、5ならメランコリーに変化する。6だった場合、コアは変化しない。", - "ラッキー!特に何も起こらない" - ] - ), - "CWT" => DiceTable::Table.new( - "致命傷表", - "1D6", - [ - "絶望的な攻撃を受ける。そのキャラクターは強制退出になる。", - "苦痛の悲鳴をあげ、無惨にも崩れ落ちる。そのキャラクターは行動不能になる。また、黒のネイロが一つ増える。", - "オトクイの一撃で、あなたは吹き飛ばされてしまう。そのキャラクターは行動不能になる。また、分類が装備のナンバーにストレスを1点受ける。", - "強烈な一撃を受けて気絶する。そのキャラクターは行動不能になる。", - "意識はあるが、立ち上がることができない。そのキャラクターは行動不能になる。次のシーンにまだ【生命力】が0点だった場合、自動的に1点に回復する。", - "奇跡的に踏みとどまり、持ちこたえる。【生命力】が1点になる。" - ] - ), - "BT" => DiceTable::Table.new( - "休憩表", - "1D6", - [ - "仲間との楽しい時間。自分の【想い人】のパトスを一つ回復する。", - "これまでの冒険を思い返す。自分の【能力値】のパトスを一つ回復する。", - "自分のオトダマと会話する。【協力者】のパトスか、ナンバーのパトスを一つ回復する。", - "体をゆっくり休める。自分の【生命力】を2D6点回復する。望むなら、回復を行う前に、自分の【活力】を決め直してもよい。", - "お、ラッキー!いいもの見つけた!自分のコインを1枚増やす。", - "ノイズストアに接続できた。各PCは、自分の【頭脳】のダイスの数と同じ個数まで、アプリを購入できる。" - ] - ), - "TT" => DiceTable::Table.new( - "目標表", - "1D6", - [ - "悪意。PCの中でもっとも【生命力】の低いもの一人を目標に選ぶ。もっとも低い【生命力】の持ち主が複数いる場合、その中から、GMが自由に一人目標を選ぶ。", - "狡猾。パラグラフ1〜5の中で、もっとも高い数値のパラグラフにいるPC一人を目標に選ぶ。全員が圏外にいる場合、圏外にいるPC全員を目標に選ぶ。", - "堅実。PCの中で、その脅威の「判定欄」に書かれた能力値がもっとも低いランクのキャラクター一人を目標に選ぶ。もっとも低いランクのキャラクターが複数いる場合、その中から、もっとも低いモッドのキャラクター一人を目標に選ぶ。モッドも同じ値だった場合、GMが自由に一人目標を選ぶ。", - "豪快。PCの中でもっとも高いランクの【武勇】の持ち主一人を目標に選ぶ。もっとも高いランクの持ち主が複数いる場合、その中から、もっとも高いモッドの持ち主一人を目標に選ぶ。モッドも同じ値だった場合、GMが自由に一人目標を選ぶ。", - "単純。パラグラフ1〜5の中で、もっとも低い数値のパラグラフにいるPC一人を目標に選ぶ。全員が圏外にいる場合、圏外にいるPC全員を目標に選ぶ。", - "乱戦。その脅威のいるパラグラフの数値と数値が1離れたパラグラフにいるPC全員を目標に選ぶ。そのパラグラフにPCがいなかった場合、GMが自由に一人目標を選ぶ。" - ] - ), - "RT" => DiceTable::Table.new( - "関係表", - "1D6", - [ - "恋心(プラス)/殺意(マイナス)", - "同情(プラス)/侮蔑(マイナス)", - "憧憬(プラス)/嫉妬(マイナス)", - "信頼(プラス)/疑い(マイナス)", - "共感(プラス)/不気味(マイナス)", - "大切(プラス)/面倒(マイナス)" - ] - ), - "OT" => DiceTable::Table.new( - "障害表", - "1D6", - [ - "あなたのココロに大きな変化が訪れる。1D6を振ること。そのPCのコアが、その出目が1ならダークに、2ならホットに、3ならラブに、4ならエキセントリックに、5ならメランコリーに変化する。6だった場合、コアは変化しない。", - "あなたは肉体的に大きなダメージを負う。1D6点のダメージを受ける。", - "ノイズの助けを借りて問題を解決する。コインを1D6枚を支払う必要がある。コインを支払う場合、ほかのPCからコインを譲ってもらってもよい。支払いが足りなかった場合、その差額分だけ自分の【生命力】を減らす。", - "大きな疲労感を感じる。ストレスを1点受ける。", - "思わず時間をつかってしまう。【タイム】が1点減少する。", - "場にイヤな気配が満ちていく。黒のネイロが一つ増える。" - ] - ), - "RQT" => DiceTable::Table.new( - "リクエスト表", - "2D6", - [ - "そのエリアの風景が、あなたの【情景】へと書き換えられていく。「お前の始まりの物語を語れ。お前はこの地で何を思った?」", - "あなたは、そのエリアの風景の中に懐かしいものを見つけ、自分の罪を思い出した。「何を見た?なにを悔いている?」", - "そのエリアの風景が、あなたのコアと同じ色に染まる。あなたは、その風景の中になりたい自分の姿を見つける。「それがお前の望みか?お前は未来に何を求める?」", - "あなたの脳裏に、人物欄に書かれた人物一人のイメージが浮かぶ。その人物は何かを囁き、あなたのココロが傷ついた。「そいつは誰だ?一体何と言ったのだ?」", - "あなたは、そのエリアの風景の中に奇妙なものを見つけ、恐怖した。「何を見た?なぜそれを恐れる?」", - "そのエリアにココロダンジョンの持ち主が現れる。その人物は、お前に質問してくる。「私をどう思ってる?なぜ、私を助ける?」", - "あなたのオトダマの姿が、あなたのよく知っている人物に変わる「その人物は誰だ?そいつをどう思っている?」", - "そのエリアに、あなたの持つナンバーが響き渡る。「これがお前のウタか?そのウタの名はなんだ?」", - "あなたのオトダマの姿が、あなたの好きな人物の姿に変わる。「それがお前が焦がれる人物か。そいつをどうしたい?」", - "そのエリアの風景にあなたの日常が浮かび上がる。「お前は何をしている?その暮らしをどう思っている?」", - "あなたの目の前に、あなたの死体が横たわっている。「お前を殺すものは何だ?お前は誰に殺される?」" - ] - ), - "CLT" => DiceTable::Table.new( - "クロウル表", - "2D6", - [ - "パスワードが抜き取られていた! 所持金が無くなっている! 自分のコインを3枚失う。", - "過去に同様のオトクイと出会ったことのある人物に出会う。【技術】で判定を行う。成功すると、「特殊アプリの開発」を行うことができる(この間奏アクションには【タイム】は必要ない)。必要なコインは1枚少なくなる。", - "近所にあるパワースポットを教えてもらう。【霊力】で判定を行う。成功すると、自分の【生命力】を【活力】の値だけ回復することができる。", - "あなたのことを知る人物に出会う。どんな思い出話をしたのだろうか? この質問はリクエストとして扱う。", - "プライベートの友人からメールが届いている。【愛】で判定を行う。成功すると、好きなNPCを協力者として設定することができる。判定に失敗すると苦情のメールだった。ストレスを1点受ける。", - "ノイズメンバーから応援のメッセージをもらう。好きなネイロを1つ獲得する(この効果で。特定のネイロを7個以上にすることはできない)。", - "美味しい食べ物屋さんに関する情報を教えてもらう。【日常】で判定を行う。成功すると、自分のストレスを1点回復できる。", - "オトクイに関する情報を求めているノイズメンバーに出会う。公開されている脅威1つにつき、その情報をコイン1枚で売却できる。このイベントが2度以上起きた場合、すでに売却した脅威の情報を再び売ることはできない。", - "試作アプリの試験者を募集している。好きなアプリ1つを獲得する。ただし、このアプリを使用するときサイコロを1個振ること。1か2が出ると、そのアプリは効果を発揮しない。セッション中に、試作アプリを使用しているとセッション終了時にレポートを提出できる。【頭脳】で判定を行う。成功すると、コインを1枚獲得できる。", - "自分に関する悪口を見つける。そこには、どんな悪口が書かれていたのだろうか。 この質問は、リクエストとして扱う。", - "同じ種類のオトダマと契約しているオトダマ使いと意気投合。このセッションの間、自分のナンバー1つを、修得可能な別のナンバーに変更することができる。", - ] - ), - "RWT" => DiceTable::Table.new( - "報酬表", - "1D6", - [ - "ノイズからオトクイ退治の報酬をもらうことができる。[倒したオトクイの本体のレベル]枚のコインを獲得する。", - "ノイズにオトダマの情報を売ることができる。[自分の【頭脳】のダイスの数]枚のコインを獲得する。", - "冒険を通じて因縁が芽生える。今回登場したキャラクターの中から一人を選ぶ。そのキャラクターを、自分の【想い人】にする。", - "冒険を通じて絆が結ばれる。今回登場したNPCの中から一人を選ぶ。そのキャラクターを、自分の【協力者】にする。", - "冒険の思い出が【ウタの欠片】になる。今回の冒険に登場した仲間、情景、出来事などなどから、キーワードを一つ選ぶ。そのキーワードを【ウタの欠片】のキーワード欄に追加する。", - "戦いの経験が【ウタの欠片】になる。今回の冒険に登場した敵、情景、出来事などなどから、キーワードを一つ選ぶ。そのキーワードを【ウタの欠片】のキーワード欄に追加する。", - ] - ), - "NMT" => DiceTable::Table.new( - "悪夢表", - "1D6", - [ - "絶望のウタに知覚を遮断される。背後にオトクイの気配を感じたと思ったときは遅かった。卑劣な攻撃があなたを襲う。好きな能力値で判定を行う。失敗するとあなたのキャラクターは、オトナシとなり、二度と冒険に参加できない。", - "絶望のウタに混じり、悲痛な叫びが聞こえてくる。ココロダンジョンの持ち主だろうか。あなたは、救えなかったのだ。【日常】で判定を行う。失敗すると、自分の能力値一つを選ぶ。次回のセッションは、その能力値にストレスを受けた状態で始まる。", - "絶望のウタに混じり、オトクイの笑いがこだまする。それは嘲りの笑いだった。オトクイや仲間たち……何より自分への怒りがわき上がる。【日常】で判定を行う。失敗すると、自分の想い人への【想い】を一つ失う。", - "絶望のウタの中に一人取り残される。誰もあなたに気づかない。孤独に耐えながら、何とか日常へ帰還したが……そのときの恐怖がぬぐえない。【日常】で判定を行う。失敗すると、次回のセッションは、自分の【生命力】の現在値が通常の半分(端数切り上げ)の状態で始まる。", - "ココロダンジョンから帰還したあなたを待っていたのは、代わり映えのない日常だった。あなたが任務に失敗しても、世界は変わらない。なら、もう、あんな怖い目をする必要はないんじゃないか? 【日常】で判定を行う。失敗すると、自分のナンバー一つを選ぶ。次回のセッションは、そのナンバーにストレスを受けた状態で始まる。", - "絶望のウタの中を必死で逃げ出した。背後から仲間の声が聞こえた気がする。しかし、あなたは振り返ることができなかった。【日常】で判定を行う。失敗すると、自分に対して【想い】を持っているPC一人を選び、その自分に対する【想い】が失われる。", - ] - ), - "ST" => DiceTable::D66Table.new( - "情景表", - D66SortType::ASC, - { - 11 => "立ち並ぶ本棚の森", - 12 => "夕日が差し込む教室", - 13 => "鳴り止まない踏切", - 14 => "ビルから見下ろした街並み", - 15 => "二人で見た星空", - 16 => "液晶画面に映る奇妙な光景", - 22 => "ガラス窓に並ぶ雨だれ", - 23 => "植物園の温室", - 24 => "屋台が並ぶ祭りの風景", - 25 => "陽炎が立ちのぼるアスファルト", - 26 => "0時を示す時計の針", - 33 => "無機質な白い天井", - 34 => "暗闇に浮かび上がるヘッドライト", - 35 => "後ろからついてくる野良猫", - 36 => "一面の花畑", - 44 => "あなたを見つめる大勢の観衆", - 45 => "降り積もる雪", - 46 => "古めかしい洋館の応接間", - 55 => "おとぎ話に出てくるような森", - 56 => "深夜のコンビニ", - 66 => "誰もいない体育館" - } - ), - "DKT" => DiceTable::D66Table.new( - "ダーク・キーワード表", - D66SortType::ASC, - { - 11 => "崩壊する楽園", - 12 => "空に堕ちる", - 13 => "優しい暴力", - 14 => "沈黙の掟", - 15 => "闇に溺れる", - 16 => "こぼれ落ちた命", - 22 => "行き止まりの絶望", - 23 => "漆黒の翼", - 24 => "眠れぬ夜", - 25 => "避けられぬ運命", - 26 => "斬り裂かれた景色", - 33 => "からっぽな自分", - 34 => "仮面の奥", - 35 => "月光中毒", - 36 => "昏い魔術", - 44 => "……オブザデッド", - 45 => "ココロを殺す", - 46 => "感染する破滅", - 55 => "愛の鎖", - 56 => "残酷な真実", - 66 => "デスゲーム" - } - ), - "DNT" => DiceTable::D66Table.new( - "ダーク・名前表", - D66SortType::ASC, - { - 11 => "ダーク/濁、搦 ネロ/音呂、寝路", - 12 => "クロト/黒斗、玄徒 ヤミ/夜美、闇", - 13 => "ネクロ/根黒、寝喰 マコ/魔子、混乎", - 14 => "カゲオ/影男、陰夫 オニコ/鬼子、隠忍呼", - 15 => "アクタ/芥、悪太 ホタル/蛍、歩足", - 16 => "マオウ/魔王、万凹 ミダラ/淫、美堕裸", - 22 => "マミヤ/魔美也、狸夜 ジャミ/邪美、蛇実", - 23 => "ドクロ/髑髏、毒炉 ヨミ/黄泉、詠", - 24 => "マクラ/枕、真暗 サツキ/殺鬼、五月", - 25 => "ゲドウ/外道、戯堂 サヤ/小夜、鞘", - 26 => "ジゴク/地獄、慈極 ウマル/埋、兎丸", - 33 => "エンド/怨人、終 ヨハネ/夜羽、世刎", - 34 => "ノロイ/呪、鈍 カバネ/屍、椛音", - 35 => "アクム/悪夢、飽夢 クサリ/腐、鎖", - 36 => "バツ/罰、× ニエ/贄、沸", - 44 => "ネガ/音我、願 リリス/璃々子、離里素", - 45 => "ウツロ/虚、洞 ネタミ/妬美、寝多実", - 46 => "ハジメ/始、創 ホロビ/滅、亡", - 55 => "ザイン/罪印、沙陰 リンボ/淋墓、辺獄", - 56 => "ハラワタ/腑、祓輪太 ユガミ/歪、由神", - 66 => "イミ/忌、逝美 ムイミ/無意味、無為巳" - } - ), - "HKT" => DiceTable::D66Table.new( - "ホット・キーワード表", - D66SortType::ASC, - { - 11 => "真夜中をぶっ壊す", - 12 => "夢を打ち上げろ", - 13 => "譲れない明日", - 14 => "あふれ出す衝動", - 15 => "獣を解き放て", - 16 => "蒸発した涙", - 22 => "高らかに叫べ", - 23 => "負けられない戦い", - 24 => "握りしめた拳", - 25 => "疾走する青春", - 26 => "ココロに従え", - 33 => "がんばれ", - 34 => "そのまま進め", - 35 => "自分の旗", - 36 => "抗い壊し突き進む", - 44 => "咲き誇る情熱の花", - 45 => "暑苦しい友情", - 46 => "オレ色に染まれ", - 55 => "世界に八つ当たり", - 56 => "消せない炎", - 66 => "オーバードライブ" - } - ), - "HNT" => DiceTable::D66Table.new( - "ホット・名前表", - D66SortType::ASC, - { - 11 => "レッド/烈怒、煉集 アカネ/赤音、茜", - 23 => "タケル/武、猛 ヒトミ/瞳、仁美", - 36 => "ジョウ/情、丈 アオリ/煽、亜織", - 12 => "アツシ/熱、純志 カンナ/神奈、柑菜", - 24 => "グレン/紅蓮、九煉 ナツコ/夏子、懐子", - 44 => "ロック/六句、麓 フォルテ/鳳流弖、彫照", - 13 => "カケル/駆、賭 ハル/晴、春", - 25 => "アラシ/嵐、荒 ヒカル/光、晃", - 45 => "ヤマト/大和、岳斗 イサミ/伊佐美、勇美", - 14 => "ガッツ/牙突、勝 アカリ/紅莉、明里", - 26 => "エンジョウ/炎上、円定 コマチ/小町、小真知", - 46 => "リュウセイ/流星、龍盛 ミライ/未来、美良依", - 15 => "ケン/剣、拳 アスカ/明日香、飛鳥", - 33 => "レツ/烈、裂 リズム/理澄、李珠夢", - 55 => "イカル/怒、鵤 ヒマワリ/向日葵、火回", - 16 => "ゴウ/豪、剛 ヒミコ/日美子、卑弥呼", - 34 => "リキ/力、陸希 キョウカ/響歌、驚花", - 56 => "ツトム/努、勉 ハナビ/花火、羽夏妃", - 22 => "ヒイロ/火色、陽彩 アキラ/晶、爽", - 35 => "ホムラ/焔、吠叢 カグヤ/輝夜、赫映", - 66 => "レオ/伶央、獅王 マツリ/祭、茉莉" - } - ), - "LKT" => DiceTable::D66Table.new( - "ラブ・キーワード表", - D66SortType::ASC, - { - 11 => "大人の恋", - 12 => "ドキドキが止まらない", - 13 => "つないだ手", - 14 => "世界を敵に回しても", - 15 => "重なる声", - 16 => "君のためなら死ねる", - 22 => "甘い口づけ", - 23 => "まぶたをとじて", - 24 => "キミとボク", - 25 => "好きとか嫌いとか", - 26 => "いつまでも", - 33 => "抱きしめたい", - 34 => "75億と1千五百万人愛してる", - 35 => "自動的な恋", - 36 => "会いたい", - 44 => "伝えたいコトバ", - 45 => "ありがとう", - 46 => "時間を止めて", - 55 => "大好き", - 56 => "素敵な贈り物", - 66 => "ビューティフルワールド" - } - ), - "LNT" => DiceTable::D66Table.new( - "ラブ・名前表", - D66SortType::ASC, - { - 11 => "シアン/詩庵、思杏 アオイ/葵、蒼生", - 12 => "ソナタ/奏名太、其方 イズミ/泉、出海", - 13 => "ツナグ/繋、継 カレン/可憐、歌恋", - 14 => "ミノル/実、稔 コイ/恋、鯉", - 15 => "ユウ/優、悠 ラブ/良舞、羅步", - 16 => "レイン/玲音、霊印 アマミ/甘味、天海", - 22 => "ソウヤ/想夜、添也 フミ/文、芙美", - 23 => "イトシ/糸糸、意俊 コイシ/恋志、小石", - 24 => "エガオ/笑顔、描生 オモイ/想、念", - 25 => "マコト/誠、真実 マナ/真菜、愛", - 26 => "ユウリ/有理、悠里 ケイ/恵、佳", - 33 => "チヒロ/千尋、茅紘 ウララ/麗、占", - 34 => "トモ/友、杜望 ヒナ/雛、比奈", - 35 => "ソラ/空、宙 ツユ/露、梅雨", - 36 => "ユウダイ/雄大、優大 ノゾミ/望、希海", - 44 => "ハグ/剥、抱 キス/喜好、口吻", - 45 => "ショウタ/翔太、祥太 アイ/愛、藍", - 46 => "ジュン/純、潤 ミサオ/美沙緒、操", - 55 => "リョウ/涼、猟 イチズ/一途、意地図", - 56 => "シグレ/時雨、紫暮 アオバ/青葉、碧羽", - 66 => "ロミオ/路美雄、露澪 ロマン/浪漫、絽萬" - } - ), - "EKT" => DiceTable::D66Table.new( - "エキセントリック・キーワード表", - D66SortType::ASC, - { - 11 => "シェフのきまぐれニルヴァーナ", - 23 => "宇宙人とデート", - 36 => "ぷるぷる", - 12 => "おかず食べ過ぎ", - 24 => "まいにち寝正月", - 44 => "夜明けのツタンカーメン", - 13 => "バイバイバイアグラ", - 25 => "猫がにゃー", - 45 => "半額の宴", - 14 => "おふとん王国の攻防", - 26 => "道草にがい", - 46 => "超気持ちいいなにか", - 15 => "ぐるぐるとクルクル", - 33 => "ブシドーロック!サムライパンク!", - 55 => "いあ!いあ!はすたあ!", - 16 => "ゴリラの千年王国", - 34 => "冷やしインド", - 56 => "小学生に貯金で負けた", - 22 => "くもん式フランケンシュタイナー", - 35 => "生きててよかった", - 66 => "秒速1ポロンクセマ" - } - ), - "ENT" => DiceTable::D66Table.new( - "エキセントリック・名前表", - D66SortType::ASC, - { - 11 => "ライム/来夢、雷鵡 ミドリ/緑、美登里", - 12 => "ランポ/乱歩、蘭舗 ビビリ/恐、美々裏", - 13 => "シラズ/不知、調頭 ヒスイ/翡翠、陽彗", - 14 => "ムウ/夢生、無 キノコ/茸、紀乃子", - 15 => "ネコヒコ/猫彦、寝子日子 イヌコ/犬子、夷猫", - 16 => "ダダ/駄々、蛇陀 キリコ/切子、霧湖", - 22 => "イケメン/活面、逝麺 ラムネ/来夢音、螺旨", - 23 => "キョウスケ/狂介、京助 ランマ/乱麻、爛漫", - 24 => "ネジ/螺子、寝児 アリス/有栖、亜梨子", - 25 => "マワル/回、環 タタミ/畳、多々実", - 26 => "キュウ/球、Q ズキン/頭巾、厨琴", - 33 => "サバン/沙蛮、裂卍 マニア/摩尼亜、間合", - 34 => "カエル/帰、蛙 エリマキ/襟巻、絵里真希", - 35 => "ナゾウ/謎宇、何造 カンノン/観音、疳暢", - 36 => "イッキュウ/一休、逸宮 ミロク/弥勒、診録", - 44 => "シュール/酒潤、終琉 カプリ/華降、噛布里", - 45 => "キジン/奇人、鬼神 フシギ/不思議、節黄", - 46 => "カブキ/歌舞伎、傾 メロン/芽論、女侖", - 55 => "ジョーカー/冗歌、浄化 ピエロ/秘絵呂、道化師", - 56 => "ウイロウ/外郎、初弄 マッチャ/抹茶、末耶", - 66 => "ビックリ/吃驚、! ハテナ/果菜、?" - } - ), - "MKT" => DiceTable::D66Table.new( - "メランコリー・キーワード表", - D66SortType::ASC, - { - 11 => "ごめんなさい", - 12 => "甘い甘い逃避", - 13 => "ひとりぼっち", - 14 => "ズルい世界", - 15 => "果たせなかった約束", - 16 => "取り返しのつかない言葉", - 22 => "いっそ死にたい", - 23 => "置いてきた夢", - 24 => "見あげた青空", - 25 => "きみの嘘", - 26 => "すれ違う言葉", - 33 => "幸せだった昨日", - 34 => "こんなはずじゃなかった", - 35 => "別れてしまった二つの道", - 36 => "また会えたらいいね", - 44 => "ここではないどこか", - 45 => "青春の終わり", - 46 => "大好きだった膝の上", - 55 => "誰かぼくをほめて", - 56 => "高潔な裏切り", - 66 => "ナルシズム" - } - ), - "MNT" => DiceTable::D66Table.new( - "メランコリー・名前表", - D66SortType::ASC, - { - 11 => "ヴァイス/灰主、唄守 マシロ/真白、万代", - 12 => "キズ/傷、疵 ダレカ/誰香、惰麗華", - 13 => "ユレル/揺、遊玲流 エモ/絵萌、恵面", - 14 => "オボロ/朧、憶露 ホノカ/仄、穂乃香", - 15 => "メロ/夢露、芽朗 シズ/静、志津", - 16 => "ヒイラギ/柊、氷刺木 カタミ/形見、片実", - 22 => "リネン/理然、離念 スノウ/素皇、珠瑙", - 23 => "セツナ/切、刹那 シノブ/偲、忍", - 24 => "ナミダ/涙、波太 カスカ/霞歌、幽", - 25 => "ムスビ/結、息日 カコ/過去、寡子", - 26 => "ウソ/嘘、宇曽 アイカ/哀歌、愛香", - 33 => "ペイン/閉音、病印 ツラミ/辛美、貫実", - 34 => "ヨリミチ/寄道、頼道 シラユキ/白雪、知由樹", - 35 => "ヒトリ/独、一人 オトナ/音鳴、乙菜", - 36 => "スバル/昴、透遙 ハルカ/遥、晴香", - 44 => "バイバイ/梅云、吠々 バニラ/香子蘭、芭韮", - 45 => "トオル/透、通 リツ/律、慄", - 46 => "タビ/旅、足袋 チギリ/契、千切", - 55 => "サイゴ/彩吾、最期 サクラ/桜、咲良", - 56 => "アワレ/憐、哀 ヒメイ/悲鳴、姫衣", - 66 => "ヘヴン/戸聞、天国 ガラス/硝子、枯州" - } - ), - "OPA" => DiceTable::D66Table.new( - "オトダマ性格表A", - D66SortType::ASC, - { - 11 => "さわやか", - 12 => "単純", - 13 => "目立ちたがり", - 14 => "笑い上戸", - 15 => "P大好き", - 16 => "がんばり屋", - 22 => "ひょうきん", - 23 => "ほれっぽい", - 24 => "勇敢", - 25 => "好奇心旺盛", - 26 => "優しい", - 33 => "八方美人", - 34 => "博愛", - 35 => "感情的", - 36 => "おしゃべり", - 44 => "無鉄砲", - 45 => "元気", - 46 => "楽観的", - 55 => "自信家", - 56 => "自由", - 66 => "好戦的" - } - ), - "OPB" => DiceTable::D66Table.new( - "オトダマ性格表B", - D66SortType::ASC, - { - 11 => "悲観的", - 12 => "大人しい", - 13 => "臆病", - 14 => "クール", - 15 => "のんき", - 16 => "マジメ", - 22 => "夢想家", - 23 => "常識人", - 24 => "サイコ", - 25 => "おおらか", - 26 => "平和主義者", - 33 => "慎重", - 34 => "合理主義者", - 35 => "無口", - 36 => "照れ屋", - 44 => "おひとよし", - 45 => "なまけもの", - 46 => "腰が低い", - 55 => "疑い深い", - 56 => "謙虚", - 66 => "嘘つき" - } - ), - "OHT" => DiceTable::D66Table.new( - "オトダマ趣味表", - D66SortType::ASC, - { - 11 => "散歩", - 23 => "温泉", - 36 => "オークション", - 12 => "うわさ話", - 24 => "ギャンブル", - 44 => "パズル", - 13 => "寝る", - 25 => "動物", - 45 => "占い", - 14 => "読書", - 26 => "アニメ", - 46 => "焼き肉", - 15 => "アイドル", - 33 => "ガーデニング", - 55 => "スポーツ観戦", - 16 => "甘味", - 34 => "漫画", - 56 => "ゲーム", - 22 => "飲み会", - 35 => "ドラマ", - 66 => "動画配信" - } - ), - "OLT" => DiceTable::D66Table.new( - "オトダマ外見表", - D66SortType::ASC, + class << self + private + + def translate_tables(locale) { - 11 => "デフォルト", - 12 => "王子様/お姫様", - 13 => "和装", - 14 => "獣系", - 15 => "ゴス", - 16 => "眼鏡", - 22 => "スポーツ", - 23 => "軍服", - 24 => "天使/悪魔の羽", - 44 => "季節イベント", - 25 => "学生服", - 26 => "メガホン", - 33 => "スポーツ系", - 34 => "パンク", - 35 => "フォーマル", - 36 => "ジャージ", - 45 => "白衣", - 46 => "童話コス", - 55 => "バニー", - 56 => "水着", - 66 => "戦隊コス" + 'FT' => DiceTable::Table.from_i18n('HatsuneMiku.FT', locale), + 'CWT' => DiceTable::Table.from_i18n('HatsuneMiku.CWT', locale), + 'BT' => DiceTable::Table.from_i18n('HatsuneMiku.BT', locale), + 'TT' => DiceTable::Table.from_i18n('HatsuneMiku.TT', locale), + 'RT' => DiceTable::Table.from_i18n('HatsuneMiku.RT', locale), + 'OT' => DiceTable::Table.from_i18n('HatsuneMiku.OT', locale), + 'RQT' => DiceTable::Table.from_i18n('HatsuneMiku.RQT', locale), + 'CLT' => DiceTable::Table.from_i18n('HatsuneMiku.CLT', locale), + 'RWT' => DiceTable::Table.from_i18n('HatsuneMiku.RWT', locale), + 'NMT' => DiceTable::Table.from_i18n('HatsuneMiku.NMT', locale), + 'ST' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.ST.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.ST.#{k}", locale: locale) + end + ), + 'DKT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.DKT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.DKT.#{k}", locale: locale) + end + ), + 'DNT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.DNT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.DNT.#{k}", locale: locale) + end + ), + 'HKT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.HKT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.HKT.#{k}", locale: locale) + end + ), + 'HNT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.HNT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.HNT.#{k}", locale: locale) + end + ), + 'LKT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.LKT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.LKT.#{k}", locale: locale) + end + ), + 'LNT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.LNT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.LNT.#{k}", locale: locale) + end + ), + 'EKT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.EKT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.EKT.#{k}", locale: locale) + end + ), + 'ENT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.ENT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.ENT.#{k}", locale: locale) + end + ), + 'MKT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.MKT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.MKT.#{k}", locale: locale) + end + ), + 'MNT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.MNT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.MNT.#{k}", locale: locale) + end + ), + 'OPA' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.OPA.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.OPA.#{k}", locale: locale) + end + ), + 'OPB' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.OPB.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.OPB.#{k}", locale: locale) + end + ), + 'OHT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.OHT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.OHT.#{k}", locale: locale) + end + ), + 'OLT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.OLT.name', locale: locale), + D66SortType::ASC, + (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| + h[k] = I18n.t("HatsuneMiku.OLT.#{k}", locale: locale) + end + ), + 'OIT' => DiceTable::Table.from_i18n('HatsuneMiku.OIT', locale), + 'OYT' => DiceTable::Table.from_i18n('HatsuneMiku.OYT', locale), + 'ORT' => DiceTable::Table.from_i18n('HatsuneMiku.ORT', locale), + 'OMT' => DiceTable::Table.from_i18n('HatsuneMiku.OMT', locale), } - ), - "OIT" => DiceTable::Table.new( - "オトダマ一人称表", - "2D6", - [ - "それがし", - "おいら/あたい", - "自分の名前", - "おれ/あたし", - "わたくし", - "私", - "ぼく/うち", - "自分", - "俺様/あたくし", - "余/妾", - "ミー" - ] - ), - "OYT" => DiceTable::Table.new( - "オトダマ呼び名表", - "2D6", - [ - "ユー", - "(PCの名前)たん/きゅん", - "同志(PCの名前)", - "キミ", - "(PCの名前)くん/ちゃん", - "マスター", - "(PCの名前)さん", - "(PCの名前)様", - "あなた", - "(PCの名前)氏/女史", - "(PCの名前)殿" - ] - ), - "ORT" => DiceTable::Table.new( - "リアクション表", - "1D6", - [ - "オトダマの表の性格を表すセリフ", - "オトダマの裏の性格を表すセリフ", - "PCを応援するセリフ", - "PCをからかうセリフ", - "趣味にまつわるセリフ", - "攻撃を行うときのセリフ" - ] - ), - "OMT" => DiceTable::Table.new( - "出会い表", - "2D6", - [ - "名門オトダマ使い。あなたは、代々オトダマを操る一族に生まれました。あなたには、幼い頃から相棒となるオトダマがいます。あなたは、そのオトダマと共に育ちました。", - "傷ついたオトダマ。ある日、あなたは傷ついたオトダマを発見しました。意識を失い、今にも消えそうなオトダマに触れると、オトダマは意識を取り戻し、あなたを恩人と慕うようになりました。", - "見えないお友達。あなたは孤独な幼年期を過ごしてきました。そのとき、あなたを導いてくれたのが、あなたのオトダマです。オトダマは、あなたに他人のココロのウタを聞き、人々を助ける術を教えてくれました。", - "再生。あなたはオトクイに自分のココロのウタを食べられました。オトダマ使いに憑依したオトクイが倒されたとき、自分のココロの中から新たなオトダマが生まれました。", - "愛するココロ。あなたには、子どもの頃から大好きだったウタがありました。ある日、そのウタを口ずさんでいるとき、突然、後ろから拍手の音が聞こえました。振り向くと、そこにオトダマがいました。", - "動画。あなたは、動画を通じて歌を聞くのが好きでした。あるとき、聞いたことのないような素敵なウタが聞こえてきたかと思うと、画面の向こうからオトダマが飛び出してきました。", - "喪失。ある日、あなたは悲劇に見舞われました。そのとき、あなたはとても大切にしていた何かを失いました。その失ったものを補うかのように、あなたの側にオトダマが現れました。", - "受け継がれるウタ。あなたのオトダマは、あなたが大好きだった人の相棒だったオトダマでした。しかし、その人は悲劇に出会い、あなたの元を去りました。そのとき、あなたにオトダマを託したのです。", - "謎のメール。ある日、友人からあなたの元に一通のメールが送られてきました。そのメールを開くと、不思議な音楽が流れ出し、オトダマが現れました。その友人とは、それ以来、連絡がつきません。", - "封印。ある日、あなたは古いレコード屋で一曲の音盤に出会います。その音盤を再生してみると、オトダマが現れました。そして、オトダマは「封印を解いてくれたお礼に、しばらく付き合ってあげる」と言ってきました。", - "一目惚れ。以前、あなたは様々な楽曲を発表していました。すると、その楽曲に一目惚れしたと言って、あなたの元にオトダマが押しかけてきました。以来、そのオトダマに付きまとわれる毎日です。" - ] - ), - }.freeze + end + end + + TABLES = translate_tables(:ja_jp).freeze register_prefix('R[A-DS]?', TABLES.keys) end diff --git a/lib/bcdice/game_system/HatsuneMiku_Korean.rb b/lib/bcdice/game_system/HatsuneMiku_Korean.rb new file mode 100644 index 000000000..b08211ee9 --- /dev/null +++ b/lib/bcdice/game_system/HatsuneMiku_Korean.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'bcdice/game_system/HatsuneMiku' + +module BCDice + module GameSystem + class HatsuneMiku_Korean < HatsuneMiku + # ゲームシステムの識別子 + ID = 'HatsuneMiku:Korean' + + # ゲームシステム名 + NAME = '하츠네 미쿠TRPG 코코로 던전' + + # ゲームシステム名の読みがな + SORT_KEY = '国際化:Korean:하츠네 미쿠TRPG 코코로 던전' + + # ダイスボットの使い方 + HELP_MESSAGE = <<~INFO_MESSAGE_TEXT + ・판정(Rx±y@z>=t) +  능력치의 주사위마다 성공・실패 판정을 행합니다. +  x:능력 랭크(S,A~D). 숫자 지정으로 직접 그 개수의 주사위를 굴릴 수 있습니다 +  y:수정값. A+2 또는 A++ 처럼 표기. 혼재 시 A++,+1 처럼 기술도 가능 +  z:스페셜 최저값(생략 시 6) t:목표값(생략 시 4) +   예) RA R2 RB+1 RC++ RD+,+2 RA>=5 RS-1@5>=6 +  결과는 음색을 취득한 나머지에서 최대값을 표시 + 예) RB +  HatsuneMiku : (RB>=4) > [3,5] > +   음색에 3(파랑)을 취득한 경우 5:성공 +   음색에 5(하양)을 취득한 경우 3:실패 + + ・각종 표 +  펌블표 FT/치명상표 CWT/휴식표 BT/목표표 TT/관계표 RT +  장애표 OT/리퀘스트표 RQT/크롤표 CLT/보상표 RWT/악몽표 NMT/정경표 ST + + ・키워드 표 +  다크 DKT/핫 HKT/러브 LKT/엑센트릭 EKT/멜랑콜리 MKT + + ・이름표 NT +  코어별 다크 DNT/핫 HNT/러브 LNT/엑센트릭 ENT/멜랑콜리 MNT + + ・오토다마 각종 표 +  성격표A OPA/성격표B OPB/취미표 OHT/외견표 OLT/1인칭표 OIT/호칭표 OYT +  리액션표 ORT/만남표 OMT + INFO_MESSAGE_TEXT + + def initialize(command) + super(command) + @locale = :ko_kr + end + + TABLES = translate_tables(:ko_kr).freeze + + register_prefix_from_super_class() + end + end +end diff --git a/test/data/HatsuneMiku_Korean.toml b/test/data/HatsuneMiku_Korean.toml new file mode 100644 index 000000000..ad3681bcf --- /dev/null +++ b/test/data/HatsuneMiku_Korean.toml @@ -0,0 +1,501 @@ +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC>=5" +output = "(RC>=5) > [5] > 5:성공" +rands = [ + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RB" +output = "(RB>=4) > [3,5] > \n 음색에 3(파랑)를 취득한 경우 5:성공\n 음색에 5(하양)를 취득한 경우 3:실패" +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "R1>=5" +output = "(R1>=5) > [5] > 5:성공" +rands = [ + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "R6" +output = "(R6>=4) > [2,2,3,3,5,5] > \n 음색에 2(빨강)를 취득한 경우 5:성공\n 음색에 3(파랑)를 취득한 경우 5:성공\n 음색에 5(하양)를 취득한 경우 5:성공" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RD" +output = "(RD>=4) > [3,4] > 3:실패" +rands = [ + { sides = 6, value = 3 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RD" +output = "(RD>=4) > [4,5] > 4:성공" +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC" +output = "(RC>=4) > [3] > 3:실패" +rands = [ + { sides = 6, value = 3 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC" +output = "(RC>=4) > [4] > 4:성공" +rands = [ + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC++" +output = "(RC+2>=4) > [2]+2 > 4:성공" +rands = [ + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RB+,+1" +output = "(RB+1+1>=4) > [2,5]+1+1 > \n 음색에 2(빨강)를 취득한 경우 7:성공\n 음색에 5(하양)를 취득한 경우 4:성공" +rands = [ + { sides = 6, value = 5 }, + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC++,+1" +output = "(RC+2+1>=4) > [2]+2+1 > 5:성공" +rands = [ + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC" +output = "(RC>=4) > [5] > 5:성공" +rands = [ + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC" +output = "(RC>=4) > [2] > 2:실패" +rands = [ + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC+2" +output = "(RC+2>=4) > [2]+2 > 4:성공" +rands = [ + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC-3" +output = "(RC-3>=4) > [2]-3 > -1:실패" +rands = [ + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC-3+2" +output = "(RC-3+2>=4) > [2]-3+2 > 1:실패" +rands = [ + { sides = 6, value = 2 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC>=5-1" +output = "(RC>=5-1) > [5] > 5:성공" +rands = [ + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RC>=5-2 hogehoge" +output = "(RC>=5-2) > [5] > 5:성공" +rands = [ + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RB+1>=5" +output = "(RB+1>=5) > [2,4]+1 > \n 음색에 2(빨강)를 취득한 경우 5:성공\n 음색에 4(초록)를 취득한 경우 3:실패" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RA-1" +output = "(RA-1>=4) > [1,5,6]-1 > \n 음색에 1(검정)를 취득한 경우 5:스페셜\n 음색에 5(하양)를 취득한 경우 5:스페셜\n 음색에 6(임의)를 취득한 경우 4:성공" +rands = [ + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RS" +output = "(RS>=4) > [1,2,5,6] > \n 음색에 1(검정)를 취득한 경우 6:스페셜\n 음색에 2(빨강)를 취득한 경우 6:스페셜\n 음색에 5(하양)를 취득한 경우 6:스페셜\n 음색에 6(임의)를 취득한 경우 5:성공" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 1 }, + { sides = 6, value = 5 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RD+1>=5" +output = "(RD+1>=5) > [2,4]+1 > 3:실패" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 4 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RB@5" +output = "(RB@5>=4) > [2,5] > \n 음색에 2(빨강)를 취득한 경우 5:스페셜\n 음색에 5(하양)를 취득한 경우 2:실패" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RB+2@5" +output = "(RB+2@5>=4) > [2,5]+2 > \n 음색에 2(빨강)를 취득한 경우 7:스페셜\n 음색에 5(하양)를 취득한 경우 4:성공" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RB+2@5>=5" +output = "(RB+2@5>=5) > [2,5]+2 > \n 음색에 2(빨강)를 취득한 경우 7:스페셜\n 음색에 5(하양)를 취득한 경우 4:실패" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RB+2>=5@5" +output = "(RB+2@5>=5) > [2,5]+2 > \n 음색에 2(빨강)를 취득한 경우 7:스페셜\n 음색에 5(하양)를 취득한 경우 4:실패" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RS" +output = "(RS>=4) > [2,3,3,6] > \n 음색에 2(빨강)를 취득한 경우 6:스페셜\n 음색에 3(파랑)를 취득한 경우 6:스페셜\n 음색에 6(임의)를 취득한 경우 3:실패" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 3 }, + { sides = 6, value = 3 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RS" +output = "(RS>=4) > [2,3,5,5] > \n 음색에 2(빨강)를 취득한 경우 5:성공\n 음색에 3(파랑)를 취득한 경우 5:성공\n 음색에 5(하양)를 취득한 경우 5:성공" +rands = [ + { sides = 6, value = 2 }, + { sides = 6, value = 5 }, + { sides = 6, value = 3 }, + { sides = 6, value = 5 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "FT" +output = "펌블표(6) > 럭키! 특별히 아무것도 일어나지 않는다" +rands = [ + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "CWT" +output = "치명상표(6) > 기적적으로 버텨내며 견뎌낸다. 【생명력】이 1점이 된다." +rands = [ + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "BT" +output = "휴식표(6) > 노이즈 스토어에 접속했다. 각 PC는, 자신의【두뇌】의 주사위 수와 같은 개수까지, 어플리(アプリ)을 구입할 수 있다." +rands = [ + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "TT" +output = "목표표(6) > 난전. 해당 위협(적)이 있는 패러그래프와, 숫자가 1만큼 차이 나는 패러그래프에 있는 PC 전원을 목표로 선택한다. 해당 패러그래프에 PC가 없을 경우, GM이 임의로 한 명을 선택한다." +rands = [ + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RT" +output = "관계표(6) > 소중함(플러스)/귀찮음(마이너스)" +rands = [ + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "OT" +output = "장애표(6) > 그 자리에 불길한 기운이 가득 찬다. 검정 음색이 하나 늘어난다." +rands = [ + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RQT" +output = "리퀘스트표(12) > 당신의 눈앞에, 당신의 시체가 놓여있다. 「너를 죽이는 것은 무엇이냐? 너는 누구에게 살해당하는가?」" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "CLT" +output = "크롤표(12) > 같은 종류의 오토다마와 계약한 오토다마 사용자와 의기투합한다. 이 세션 동안, 자신의 넘버 1개를 습득 가능한 다른 넘버로 변경할 수 있다." +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "RWT" +output = "보상표(6) > 싸움의 경험이【노래의 조각】이 된다. 이번 모험에 등장한 적, 정경, 사건 등에서, 키워드를 하나 선택한다. 그 키워드를【노래의 조각】의 키워드란에 추가한다." +rands = [ + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "NMT" +output = "악몽표(6) > 절망의 노래 속을 필사적으로 도망쳤다. 등 뒤에서 동료의 목소리가 들린 것 같다. 하지만, 당신은 돌아볼 수 없었다. 【일상】으로 판정한다. 실패하면, 자신에 대해【마음】을 가진 PC 한 명을 선택한다. 그 PC가 당신에게 가지고 있던【마음】은 소실된다" +rands = [ + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "ST" +output = "정경표(66) > 아무도 없는 체육관" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "DKT" +output = "다크・키워드표(66) > 데스게임" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "DNT" +output = "다크・이름표(66) > 이미/忌、逝美 무이미/無意味、無為巳" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "HKT" +output = "핫・키워드표(66) > 오버드라이브" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "HNT" +output = "핫・이름표(66) > 레오/伶央、獅王 마츠리/祭、茉莉" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "LKT" +output = "러브・키워드표(66) > 뷰티풀 월드" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "LNT" +output = "러브・이름표(66) > 로미오/路美雄、露澪 로만/浪漫、絽萬" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "EKT" +output = "엑센트릭・키워드표(66) > 초속 1폴론크세마" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "ENT" +output = "엑센트릭・이름표(66) > 빅쿠리/吃驚、! 하테나/果菜、?" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "MKT" +output = "멜랑콜리・키워드표(66) > 나르시시즘" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "MNT" +output = "멜랑콜리・이름표(66) > 헤분/戸聞、天国 가라스/硝子、枯州" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "OPA" +output = "오토다마 성격표A(66) > 호전적" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "OPB" +output = "오토다마 성격표B(66) > 거짓말쟁이" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "OHT" +output = "오토다마 취미표(66) > 동영상 스트리밍" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "OLT" +output = "오토다마 외견표(66) > 전대 코스" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "OIT" +output = "오토다마 1인칭표(12) > 미(Me)" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "OYT" +output = "오토다마 호칭표(12) > (PC의 이름)전하" +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "ORT" +output = "리액션표(6) > 공격을 행할 때의 대사" +rands = [ + { sides = 6, value = 6 }, +] + +[[ test ]] +game_system = "HatsuneMiku:Korean" +input = "OMT" +output = "만남표(12) > 첫눈에 반함. 이전에, 당신은 다양한 악곡을 발표했습니다. 그러자, 그 악곡에 첫눈에 반했다며 당신에게 오토다마가 찾아왔습니다. 이후, 그 오토다마에게 쫓아다니는 나날입니다." +rands = [ + { sides = 6, value = 6 }, + { sides = 6, value = 6 }, +] \ No newline at end of file From a16709852400c2938775993bf38c86bd885b09f3 Mon Sep 17 00:00:00 2001 From: MY4k Date: Mon, 2 Mar 2026 12:00:00 +0900 Subject: [PATCH 2/4] =?UTF-8?q?translate=5Ftables=E3=82=92=E8=A4=87?= =?UTF-8?q?=E6=95=B0=E3=81=AE=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=81=AB?= =?UTF-8?q?=E5=88=86=E5=89=B2=E3=81=97=E3=81=A6=E3=83=AA=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/bcdice/game_system/HatsuneMiku.rb | 83 ++++++++++++++++++--------- 1 file changed, 55 insertions(+), 28 deletions(-) diff --git a/lib/bcdice/game_system/HatsuneMiku.rb b/lib/bcdice/game_system/HatsuneMiku.rb index 3bcdb3b88..8a5bffb88 100644 --- a/lib/bcdice/game_system/HatsuneMiku.rb +++ b/lib/bcdice/game_system/HatsuneMiku.rb @@ -150,6 +150,15 @@ class << self private def translate_tables(locale) + general_tables(locale) + .merge(keyword_tables(locale)) + .merge(name_tables(locale)) + .merge(otodama_tables(locale)) + end + + # ファンブル表・致命傷表・休憩表など、通常のテーブル + # 情景表 (ST) も含む + def general_tables(locale) { 'FT' => DiceTable::Table.from_i18n('HatsuneMiku.FT', locale), 'CWT' => DiceTable::Table.from_i18n('HatsuneMiku.CWT', locale), @@ -161,6 +170,10 @@ def translate_tables(locale) 'CLT' => DiceTable::Table.from_i18n('HatsuneMiku.CLT', locale), 'RWT' => DiceTable::Table.from_i18n('HatsuneMiku.RWT', locale), 'NMT' => DiceTable::Table.from_i18n('HatsuneMiku.NMT', locale), + 'OIT' => DiceTable::Table.from_i18n('HatsuneMiku.OIT', locale), + 'OYT' => DiceTable::Table.from_i18n('HatsuneMiku.OYT', locale), + 'ORT' => DiceTable::Table.from_i18n('HatsuneMiku.ORT', locale), + 'OMT' => DiceTable::Table.from_i18n('HatsuneMiku.OMT', locale), 'ST' => DiceTable::D66Table.new( I18n.t('HatsuneMiku.ST.name', locale: locale), D66SortType::ASC, @@ -168,6 +181,12 @@ def translate_tables(locale) h[k] = I18n.t("HatsuneMiku.ST.#{k}", locale: locale) end ), + } + end + + # コア別キーワード表 (DKT/HKT/LKT/EKT/MKT) + def keyword_tables(locale) + { 'DKT' => DiceTable::D66Table.new( I18n.t('HatsuneMiku.DKT.name', locale: locale), D66SortType::ASC, @@ -175,60 +194,66 @@ def translate_tables(locale) h[k] = I18n.t("HatsuneMiku.DKT.#{k}", locale: locale) end ), - 'DNT' => DiceTable::D66Table.new( - I18n.t('HatsuneMiku.DNT.name', locale: locale), + 'HKT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.HKT.name', locale: locale), D66SortType::ASC, (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| - h[k] = I18n.t("HatsuneMiku.DNT.#{k}", locale: locale) + h[k] = I18n.t("HatsuneMiku.HKT.#{k}", locale: locale) end ), - 'HKT' => DiceTable::D66Table.new( - I18n.t('HatsuneMiku.HKT.name', locale: locale), + 'LKT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.LKT.name', locale: locale), D66SortType::ASC, (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| - h[k] = I18n.t("HatsuneMiku.HKT.#{k}", locale: locale) + h[k] = I18n.t("HatsuneMiku.LKT.#{k}", locale: locale) end ), - 'HNT' => DiceTable::D66Table.new( - I18n.t('HatsuneMiku.HNT.name', locale: locale), + 'EKT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.EKT.name', locale: locale), D66SortType::ASC, (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| - h[k] = I18n.t("HatsuneMiku.HNT.#{k}", locale: locale) + h[k] = I18n.t("HatsuneMiku.EKT.#{k}", locale: locale) end ), - 'LKT' => DiceTable::D66Table.new( - I18n.t('HatsuneMiku.LKT.name', locale: locale), + 'MKT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.MKT.name', locale: locale), D66SortType::ASC, (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| - h[k] = I18n.t("HatsuneMiku.LKT.#{k}", locale: locale) + h[k] = I18n.t("HatsuneMiku.MKT.#{k}", locale: locale) end ), - 'LNT' => DiceTable::D66Table.new( - I18n.t('HatsuneMiku.LNT.name', locale: locale), + } + end + + # コア別名前表 (DNT/HNT/LNT/ENT/MNT) + def name_tables(locale) + { + 'DNT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.DNT.name', locale: locale), D66SortType::ASC, (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| - h[k] = I18n.t("HatsuneMiku.LNT.#{k}", locale: locale) + h[k] = I18n.t("HatsuneMiku.DNT.#{k}", locale: locale) end ), - 'EKT' => DiceTable::D66Table.new( - I18n.t('HatsuneMiku.EKT.name', locale: locale), + 'HNT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.HNT.name', locale: locale), D66SortType::ASC, (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| - h[k] = I18n.t("HatsuneMiku.EKT.#{k}", locale: locale) + h[k] = I18n.t("HatsuneMiku.HNT.#{k}", locale: locale) end ), - 'ENT' => DiceTable::D66Table.new( - I18n.t('HatsuneMiku.ENT.name', locale: locale), + 'LNT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.LNT.name', locale: locale), D66SortType::ASC, (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| - h[k] = I18n.t("HatsuneMiku.ENT.#{k}", locale: locale) + h[k] = I18n.t("HatsuneMiku.LNT.#{k}", locale: locale) end ), - 'MKT' => DiceTable::D66Table.new( - I18n.t('HatsuneMiku.MKT.name', locale: locale), + 'ENT' => DiceTable::D66Table.new( + I18n.t('HatsuneMiku.ENT.name', locale: locale), D66SortType::ASC, (11..66).select { |i| i % 10 <= 6 && i % 10 >= 1 }.each_with_object({}) do |k, h| - h[k] = I18n.t("HatsuneMiku.MKT.#{k}", locale: locale) + h[k] = I18n.t("HatsuneMiku.ENT.#{k}", locale: locale) end ), 'MNT' => DiceTable::D66Table.new( @@ -238,6 +263,12 @@ def translate_tables(locale) h[k] = I18n.t("HatsuneMiku.MNT.#{k}", locale: locale) end ), + } + end + + # オトダマ各種表 (OPA/OPB/OHT/OLT) + def otodama_tables(locale) + { 'OPA' => DiceTable::D66Table.new( I18n.t('HatsuneMiku.OPA.name', locale: locale), D66SortType::ASC, @@ -266,10 +297,6 @@ def translate_tables(locale) h[k] = I18n.t("HatsuneMiku.OLT.#{k}", locale: locale) end ), - 'OIT' => DiceTable::Table.from_i18n('HatsuneMiku.OIT', locale), - 'OYT' => DiceTable::Table.from_i18n('HatsuneMiku.OYT', locale), - 'ORT' => DiceTable::Table.from_i18n('HatsuneMiku.ORT', locale), - 'OMT' => DiceTable::Table.from_i18n('HatsuneMiku.OMT', locale), } end end From b263e34be08157f95db960c162895a21dda65c6d Mon Sep 17 00:00:00 2001 From: MY4k Date: Mon, 2 Mar 2026 12:29:31 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E9=9F=93=E5=9B=BD=E8=AA=9E=E7=BF=BB?= =?UTF-8?q?=E8=A8=B3=E3=81=AE=E4=B8=80=E9=83=A8=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/HatsuneMiku/ko_kr.yml | 42 +++++++++++++++---------------- test/data/HatsuneMiku_Korean.toml | 32 +++++++++++------------ 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/i18n/HatsuneMiku/ko_kr.yml b/i18n/HatsuneMiku/ko_kr.yml index 8fa2df827..78d6b7554 100644 --- a/i18n/HatsuneMiku/ko_kr.yml +++ b/i18n/HatsuneMiku/ko_kr.yml @@ -2,11 +2,11 @@ ko_kr: HatsuneMiku: special: "스페셜" neiro_acquire: " 음색에 %{pickup_dice}(%{color})를 취득한 경우 %{total}:%{result}" - color_black: "검정" - color_red: "빨강" - color_blue: "파랑" - color_green: "초록" - color_white: "하양" + color_black: "흑" + color_red: "적" + color_blue: "청" + color_green: "녹" + color_white: "백" color_any: "임의" FT: @@ -18,7 +18,7 @@ ko_kr: - "이 실패가 나중에 화가 될지도 모른다……. 자신의【생명력】이 1D6점 감소한다." - "마음에 피로감이 가득 차간다. 자신이 스트레스를 1점 받는다." - "1D6을 굴린다. 그 PC의 코어가, 주사위 눈이 1이면 다크로, 2이면 핫으로, 3이면 러브로, 4이면 엑센트릭으로, 5이면 멜랑콜리로 변화한다. 6이었을 경우, 코어는 변화하지 않는다." - - "럭키! 특별히 아무것도 일어나지 않는다" + - "럭키! 아무 일도 일어나지 않는다." CWT: name: "치명상표" @@ -28,7 +28,7 @@ ko_kr: - "고통의 비명을 지르며 비참하게 쓰러진다. 그 캐릭터는 행동불능이 된다. 또한, 검정 음색이 하나 늘어난다." - "오토쿠이의 일격으로 당신은 날아가버린다. 그 캐릭터는 행동불능이 된다. 또한, 분류가 장비인 넘버에 스트레스를 1점 받는다." - "강렬한 일격을 받고 기절한다. 그 캐릭터는 행동불능이 된다." - - "의식은 있지만 일어설 수 없다. 그 캐릭터는 행동불능이 된다. 다음 씬에 아직【생명력】이 0점이었을 경우, 자동적으로 1점에 회복한다." + - "의식은 있지만 일어설 수 없다. 그 캐릭터는 행동불능이 된다. 다음 장면에 아직【생명력】이 0점이었을 경우, 자동으로 1점 회복한다." - "기적적으로 버텨내며 견뎌낸다. 【생명력】이 1점이 된다." BT: @@ -36,11 +36,11 @@ ko_kr: type: "1D6" items: - "동료와의 즐거운 시간. 자신의【소중한 사람】의 파토스를 하나 회복한다." - - "지금까지의 모험을 되돌아본다. 자신의 【능력치】의 파토스를 하나 회복한다." + - "지금까지의 모험을 되돌아본다. 자신의【능력치】의 파토스를 하나 회복한다." - "자신의 오토다마와 대화한다.【협력자】의 파토스나, 넘버의 파토스를 하나 회복한다." - "몸을 천천히 쉰다. 자신의【생명력】을 2D6점 회복한다. 원한다면, 회복을 하기 전에, 자신의【활력】을 다시 결정해도 좋다." - "오, 럭키! 좋은 걸 찾았다! 자신의 코인을 1개 늘린다." - - "노이즈 스토어에 접속했다. 각 PC는, 자신의【두뇌】의 주사위 수와 같은 개수까지, 어플리(アプリ)을 구입할 수 있다." + - "노이즈 스토어에 접속했다. 각 PC는, 자신의【두뇌】의 주사위 수와 같은 개수까지, 어플(アプリ)을 구입할 수 있다." TT: name: "목표표" @@ -48,10 +48,10 @@ ko_kr: items: - "악의. PC 중에서【생명력】이 가장 낮은 한 명을 목표로 선택한다.【생명력】이 가장 낮은 PC가 여럿일 경우, 그중에서 GM이 임의로 한 명을 선택한다." - "교활. 패러그래프 1~5 중에서, 숫자가 가장 높은 패러그래프에 있는 PC 한 명을 목표로 선택한다. 전원이 권외에 있을 경우, 권외에 있는 PC 전원을 목표로 선택한다." - - "견실. PC 중에서, 해당 위협(적)의 「판정란」에 적힌 능력치 랭크가 가장 낮은 캐릭터 한 명을 목표로 선택한다. 랭크가 가장 낮은 캐릭터가 여럿일 경우, 그중에서 수정치가 가장 낮은 캐릭터 한 명을 선택한다. 수정치까지 같을 경우, GM이 임의로 한 명을 선택한다." + - "견실. PC 중에서, 해당 위협의 「판정란」에 적힌 능력치 랭크가 가장 낮은 캐릭터 한 명을 목표로 선택한다. 랭크가 가장 낮은 캐릭터가 여럿일 경우, 그중에서 수정치가 가장 낮은 캐릭터 한 명을 선택한다. 수정치까지 같을 경우, GM이 임의로 한 명을 선택한다." - "호쾌. PC 중에서【무용】 랭크가 가장 높은 한 명을 목표로 선택한다. 랭크가 가장 높은 PC가 여럿일 경우, 그중에서 수정치가 가장 높은 한 명을 선택한다. 수정치까지 같을 경우, GM이 임의로 한 명을 선택한다." - "단순. 패러그래프 1~5 중에서, 숫자가 가장 낮은 패러그래프에 있는 PC 한 명을 목표로 선택한다. 전원이 권외에 있을 경우, 권외에 있는 PC 전원을 목표로 선택한다." - - "난전. 해당 위협(적)이 있는 패러그래프와, 숫자가 1만큼 차이 나는 패러그래프에 있는 PC 전원을 목표로 선택한다. 해당 패러그래프에 PC가 없을 경우, GM이 임의로 한 명을 선택한다." + - "난전. 해당 위협이 있는 패러그래프와, 숫자가 1만큼 차이 나는 패러그래프에 있는 PC 전원을 목표로 선택한다. 해당 패러그래프에 PC가 없을 경우, GM이 임의로 한 명을 선택한다." RT: name: "관계표" @@ -96,14 +96,14 @@ ko_kr: type: "2D6" items: - "비밀번호가 유출되었다! 소지금이 사라졌다! 자신의 코인을 3개 잃는다." - - "과거에 같은 오토쿠이와 마주친 적이 있는 인물과 만난다.【기술】로 판정한다. 성공하면, 「특수 어플리(앱) 개발」을 행할 수 있다(이 간주 액션에는【타임】이 필요 없다). 필요한 코인은 1개 줄어든다." + - "과거에 같은 오토쿠이와 마주친 적이 있는 인물과 만난다.【기술】로 판정한다. 성공하면, 「특수 어플 개발」을 행할 수 있다(이 간주 액션에는【타임】이 필요 없다). 필요한 코인은 1개 줄어든다." - "근처에 있는 파워스팟을 알게된다.【영력】으로 판정한다. 성공하면, 자신의【생명력】을 【활력】의 값만큼 회복할 수 있다." - "당신을 아는 인물과 만난다. 어떤 추억 이야기를 나누었을까? 이 질문은 리퀘스트로 취급한다." - "사적인 친구에게서 메일이 와있다.【사랑】으로 판정한다. 성공하면, 원하는 NPC를 협력자로 설정할 수 있다. 판정에 실패하면 도착한 건 당신에게 불만을 표현하는 메일이었다. 스트레스를 1점 받는다." - "노이즈 멤버에게서 응원 메시지를 받는다. 원하는 음색을 1개 획득한다(이 효과로. 특정 음색을 7개 이상으로 할 수는 없다)." - "맛있는 음식점에 관한 정보를 알려받는다.【일상】으로 판정한다. 성공하면, 자신의 스트레스를 1점 회복할 수 있다." - "오토쿠이에 관한 정보를 구하는 노이즈 멤버와 만난다. 공개된 위협 1개당, 그 정보를 코인 1개에 매각할 수 있다. 이 이벤트가 2번 이상 일어났을 경우, 이미 매각한 위협의 정보를 다시 팔 수는 없다." - - "시제품 어플리(앱)의 테스터를 모집하고 있다. 원하는 어플리(앱) 1개를 획득한다. 단, 이 어플리(앱)를 사용할 때 주사위를 1개 굴린다. 1이나 2가 나오면, 그 어플리(앱)는 효과를 발휘하지 않는다. 세션 중에, 시제품 어플리(앱)를 사용했다면 세션 종료 시에 리포트를 제출할 수 있다. 【두뇌】로 판정한다. 성공하면, 코인을 1개 획득할 수 있다." + - "시제품 어플의 테스터를 모집하고 있다. 원하는 어플 1개를 획득한다. 단, 이 어플을 사용할 때 주사위를 1개 굴린다. 1이나 2가 나오면, 그 어플은 효과를 발휘하지 않는다. 세션 중에 시제품 어플을 사용했다면 세션 종료 시에 리포트를 제출할 수 있다. 【두뇌】로 판정한다. 성공하면, 코인을 1개 획득할 수 있다." - "자신에 관한 험담을 발견한다. 거기에는 어떤 험담이 쓰여있었을까. 이 질문은 리퀘스트로 취급한다." - "같은 종류의 오토다마와 계약한 오토다마 사용자와 의기투합한다. 이 세션 동안, 자신의 넘버 1개를 습득 가능한 다른 넘버로 변경할 수 있다." @@ -112,7 +112,7 @@ ko_kr: type: "1D6" items: - "노이즈에게서 오토쿠이 퇴치 보상을 받을 수 있다. [쓰러뜨린 오토쿠이 본체의 레벨]개의 코인을 획득한다." - - "노이즈에게 오토다마의 정보를 팔 수 있다. [자신의 【두뇌】의 주사위 수]개의 코인을 획득한다." + - "노이즈에게 오토다마의 정보를 매각할 수 있다. [자신의【두뇌】의 주사위 수]개의 코인을 획득한다." - "모험을 통해 인연이 싹튼다. 이번에 등장한 캐릭터 중에서 한 명을 선택한다. 그 캐릭터를, 자신의【소중한 사람】으로 한다." - "모험을 통해 인연이 맺어진다. 이번에 등장한 NPC 중에서 한 명을 선택한다. 그 캐릭터를, 자신의【협력자】로 한다." - "모험의 추억이【노래의 조각】이 된다. 이번 모험에 등장한 동료, 정경, 사건 등에서, 키워드를 하나 선택한다. 그 키워드를【노래의 조각】의 키워드란에 추가한다." @@ -177,16 +177,16 @@ ko_kr: type: "2D6" items: - "명문 오토다마 사용자. 당신은, 대대로 오토다마를 다루는 일족에서 태어났습니다. 당신에게는, 어릴 때부터 파트너로 함께 한 오토다마가 있습니다. 당신은 그 오토다마와 함께 자랐습니다." - - "상처받은 오토다마. 어느 날, 당신은 상처받은 오토다마를 발견했습니다. 의식을 잃고, 곧 사라질 것 같은 오토다마에 손을 대자, 오토다마는 의식을 되찾고, 당신을 은인으로 따르게 되었습니다." - - "보이지 않는 친구. 당신은 고독한 유년기를 보내왔습니다. 그때, 당신을 이끌어 준 것이, 당신의 오토다마입니다. 오토다마는, 당신에게 타인의 마음의 노래를 듣고, 사람들을 돕는 방법을 가르쳐 주었습니다." + - "상처받은 오토다마. 어느 날, 당신은 상처받은 오토다마를 발견했습니다. 의식을 잃고, 곧 사라질 것 같은 오토다마에 손을 대자, 오토다마는 의식을 되찾고 당신을 은인으로 따르게 되었습니다." + - "보이지 않는 친구. 당신은 고독한 유년기를 보내왔습니다. 그때, 당신을 이끌어 준 것이, 당신의 오토다마입니다. 오토다마는 당신에게 타인의 마음의 노래를 듣고 사람들을 돕는 방법을 가르쳐 주었습니다." - "재생. 당신은 오토쿠이에게 자신의 마음의 노래를 먹혔습니다. 오토다마 사용자에게 빙의한 오토쿠이가 쓰러졌을 때, 자신의 마음 속에서 새로운 오토다마가 태어났습니다." - - "사랑하는 마음. 당신에게는, 어릴 때부터 매우 좋아했던 노래가 있었습니다. 어느 날, 그 노래를 흥얼거리고 있을 때, 갑자기, 뒤에서 박수 소리가 들려왔습니다. 돌아보면, 거기에 오토다마가 있었습니다." + - "사랑하는 마음. 당신에게는, 어릴 때부터 매우 좋아했던 노래가 있었습니다. 어느 날, 그 노래를 흥얼거리고 있을 때, 갑자기 뒤에서 박수 소리가 들려왔습니다. 돌아보니 거기에 오토다마가 있었습니다." - "동영상. 당신은 동영상을 통해 노래를 듣는 것을 좋아했습니다. 어느 때, 들어본 적 없는 멋진 노래가 들려오나 했더니, 화면 너머에서 오토다마가 튀어나왔습니다." - "상실. 어느 날, 당신은 비극에 휩쓸렸습니다. 그때, 당신은 매우 소중히 했던 무언가를 잃었습니다. 그 잃은 것을 보완하듯이, 당신 곁에 오토다마가 나타났습니다." - "이어지는 노래. 당신의 오토다마는, 당신이 매우 좋아했던 사람의 파트너였던 오토다마였습니다. 하지만, 그 사람은 비극을 겪고 당신 곁을 떠났습니다. 그때, 그 자는 당신에게 오토다마를 맡긴 것입니다." - - "수수께끼의 메일. 어느 날, 친구에게서 당신에게 한 통의 메일이 보내졌습니다. 그 메일을 열자 신기한 음악이 흘러나오고 오토다마가 나타났습니다. 그 친구와는 그 이후로 연락이 닿지 않습니다." + - "수수께끼의 메일. 어느 날, 친구가 당신에게 한 통의 메일을 보냈습니다. 그 메일을 열자 신기한 음악이 흘러나오고 오토다마가 나타났습니다. 그 친구와는 그 이후로 연락이 닿지 않습니다." - "봉인. 어느 날, 당신은 낡은 레코드 가게에서 한 곡의 음반을 만납니다. 그 음반을 재생해보자 오토다마가 나타났습니다. 그리고, 오토다마는 「봉인을 풀어준 보답으로, 잠시 함께 어울려줄게」라고 말해왔습니다." - - "첫눈에 반함. 이전에, 당신은 다양한 악곡을 발표했습니다. 그러자, 그 악곡에 첫눈에 반했다며 당신에게 오토다마가 찾아왔습니다. 이후, 그 오토다마에게 쫓아다니는 나날입니다." + - "첫눈에 반함. 이전에, 당신은 다양한 악곡을 발표했습니다. 그러자, 그 악곡에 첫눈에 반했다며 당신에게 오토다마가 찾아왔습니다. 이후, 그 오토다마에게 쫓기는 나날입니다." ST: name: "정경표" @@ -367,14 +367,14 @@ ko_kr: "22": "구몬식 프랑켄슈타이너" "23": "외계인과 데이트" "24": "매일매일 방콕 설날" - "25": "고양이가 내용" + "25": "고양이가 냐옹" "26": "농땡이의 쓴맛" "33": "부시도 록! 사무라이 펑크!" "34": "히야시 인도" "35": "살아있어서 다행이야" "36": "탱글탱글" "44": "새벽의 투탕카멘" - "45": "반값의 연회" + "45": "반값 세일의 연회" "46": "초기분좋은무언가" "55": "이아! 이아! 하스터!" "56": "초딩에게 저금으로 졌다" diff --git a/test/data/HatsuneMiku_Korean.toml b/test/data/HatsuneMiku_Korean.toml index ad3681bcf..d9a5c91fa 100644 --- a/test/data/HatsuneMiku_Korean.toml +++ b/test/data/HatsuneMiku_Korean.toml @@ -9,7 +9,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RB" -output = "(RB>=4) > [3,5] > \n 음색에 3(파랑)를 취득한 경우 5:성공\n 음색에 5(하양)를 취득한 경우 3:실패" +output = "(RB>=4) > [3,5] > \n 음색에 3(청)를 취득한 경우 5:성공\n 음색에 5(백)를 취득한 경우 3:실패" rands = [ { sides = 6, value = 5 }, { sides = 6, value = 3 }, @@ -26,7 +26,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "R6" -output = "(R6>=4) > [2,2,3,3,5,5] > \n 음색에 2(빨강)를 취득한 경우 5:성공\n 음색에 3(파랑)를 취득한 경우 5:성공\n 음색에 5(하양)를 취득한 경우 5:성공" +output = "(R6>=4) > [2,2,3,3,5,5] > \n 음색에 2(적)를 취득한 경우 5:성공\n 음색에 3(청)를 취득한 경우 5:성공\n 음색에 5(백)를 취득한 경우 5:성공" rands = [ { sides = 6, value = 2 }, { sides = 6, value = 5 }, @@ -81,7 +81,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RB+,+1" -output = "(RB+1+1>=4) > [2,5]+1+1 > \n 음색에 2(빨강)를 취득한 경우 7:성공\n 음색에 5(하양)를 취득한 경우 4:성공" +output = "(RB+1+1>=4) > [2,5]+1+1 > \n 음색에 2(적)를 취득한 경우 7:성공\n 음색에 5(백)를 취득한 경우 4:성공" rands = [ { sides = 6, value = 5 }, { sides = 6, value = 2 }, @@ -154,7 +154,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RB+1>=5" -output = "(RB+1>=5) > [2,4]+1 > \n 음색에 2(빨강)를 취득한 경우 5:성공\n 음색에 4(초록)를 취득한 경우 3:실패" +output = "(RB+1>=5) > [2,4]+1 > \n 음색에 2(적)를 취득한 경우 5:성공\n 음색에 4(녹)를 취득한 경우 3:실패" rands = [ { sides = 6, value = 2 }, { sides = 6, value = 4 }, @@ -163,7 +163,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RA-1" -output = "(RA-1>=4) > [1,5,6]-1 > \n 음색에 1(검정)를 취득한 경우 5:스페셜\n 음색에 5(하양)를 취득한 경우 5:스페셜\n 음색에 6(임의)를 취득한 경우 4:성공" +output = "(RA-1>=4) > [1,5,6]-1 > \n 음색에 1(흑)를 취득한 경우 5:스페셜\n 음색에 5(백)를 취득한 경우 5:스페셜\n 음색에 6(임의)를 취득한 경우 4:성공" rands = [ { sides = 6, value = 1 }, { sides = 6, value = 5 }, @@ -173,7 +173,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RS" -output = "(RS>=4) > [1,2,5,6] > \n 음색에 1(검정)를 취득한 경우 6:스페셜\n 음색에 2(빨강)를 취득한 경우 6:스페셜\n 음색에 5(하양)를 취득한 경우 6:스페셜\n 음색에 6(임의)를 취득한 경우 5:성공" +output = "(RS>=4) > [1,2,5,6] > \n 음색에 1(흑)를 취득한 경우 6:스페셜\n 음색에 2(적)를 취득한 경우 6:스페셜\n 음색에 5(백)를 취득한 경우 6:스페셜\n 음색에 6(임의)를 취득한 경우 5:성공" rands = [ { sides = 6, value = 2 }, { sides = 6, value = 1 }, @@ -193,7 +193,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RB@5" -output = "(RB@5>=4) > [2,5] > \n 음색에 2(빨강)를 취득한 경우 5:스페셜\n 음색에 5(하양)를 취득한 경우 2:실패" +output = "(RB@5>=4) > [2,5] > \n 음색에 2(적)를 취득한 경우 5:스페셜\n 음색에 5(백)를 취득한 경우 2:실패" rands = [ { sides = 6, value = 2 }, { sides = 6, value = 5 }, @@ -202,7 +202,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RB+2@5" -output = "(RB+2@5>=4) > [2,5]+2 > \n 음색에 2(빨강)를 취득한 경우 7:스페셜\n 음색에 5(하양)를 취득한 경우 4:성공" +output = "(RB+2@5>=4) > [2,5]+2 > \n 음색에 2(적)를 취득한 경우 7:스페셜\n 음색에 5(백)를 취득한 경우 4:성공" rands = [ { sides = 6, value = 2 }, { sides = 6, value = 5 }, @@ -211,7 +211,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RB+2@5>=5" -output = "(RB+2@5>=5) > [2,5]+2 > \n 음색에 2(빨강)를 취득한 경우 7:스페셜\n 음색에 5(하양)를 취득한 경우 4:실패" +output = "(RB+2@5>=5) > [2,5]+2 > \n 음색에 2(적)를 취득한 경우 7:스페셜\n 음색에 5(백)를 취득한 경우 4:실패" rands = [ { sides = 6, value = 2 }, { sides = 6, value = 5 }, @@ -220,7 +220,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RB+2>=5@5" -output = "(RB+2@5>=5) > [2,5]+2 > \n 음색에 2(빨강)를 취득한 경우 7:스페셜\n 음색에 5(하양)를 취득한 경우 4:실패" +output = "(RB+2@5>=5) > [2,5]+2 > \n 음색에 2(적)를 취득한 경우 7:스페셜\n 음색에 5(백)를 취득한 경우 4:실패" rands = [ { sides = 6, value = 2 }, { sides = 6, value = 5 }, @@ -229,7 +229,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RS" -output = "(RS>=4) > [2,3,3,6] > \n 음색에 2(빨강)를 취득한 경우 6:스페셜\n 음색에 3(파랑)를 취득한 경우 6:스페셜\n 음색에 6(임의)를 취득한 경우 3:실패" +output = "(RS>=4) > [2,3,3,6] > \n 음색에 2(적)를 취득한 경우 6:스페셜\n 음색에 3(청)를 취득한 경우 6:스페셜\n 음색에 6(임의)를 취득한 경우 3:실패" rands = [ { sides = 6, value = 2 }, { sides = 6, value = 3 }, @@ -240,7 +240,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "RS" -output = "(RS>=4) > [2,3,5,5] > \n 음색에 2(빨강)를 취득한 경우 5:성공\n 음색에 3(파랑)를 취득한 경우 5:성공\n 음색에 5(하양)를 취득한 경우 5:성공" +output = "(RS>=4) > [2,3,5,5] > \n 음색에 2(적)를 취득한 경우 5:성공\n 음색에 3(청)를 취득한 경우 5:성공\n 음색에 5(백)를 취득한 경우 5:성공" rands = [ { sides = 6, value = 2 }, { sides = 6, value = 5 }, @@ -251,7 +251,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "FT" -output = "펌블표(6) > 럭키! 특별히 아무것도 일어나지 않는다" +output = "펌블표(6) > 럭키! 아무 일도 일어나지 않는다." rands = [ { sides = 6, value = 6 }, ] @@ -267,7 +267,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "BT" -output = "휴식표(6) > 노이즈 스토어에 접속했다. 각 PC는, 자신의【두뇌】의 주사위 수와 같은 개수까지, 어플리(アプリ)을 구입할 수 있다." +output = "휴식표(6) > 노이즈 스토어에 접속했다. 각 PC는, 자신의【두뇌】의 주사위 수와 같은 개수까지, 어플(アプリ)을 구입할 수 있다." rands = [ { sides = 6, value = 6 }, ] @@ -275,7 +275,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "TT" -output = "목표표(6) > 난전. 해당 위협(적)이 있는 패러그래프와, 숫자가 1만큼 차이 나는 패러그래프에 있는 PC 전원을 목표로 선택한다. 해당 패러그래프에 PC가 없을 경우, GM이 임의로 한 명을 선택한다." +output = "목표표(6) > 난전. 해당 위협이 있는 패러그래프와, 숫자가 1만큼 차이 나는 패러그래프에 있는 PC 전원을 목표로 선택한다. 해당 패러그래프에 PC가 없을 경우, GM이 임의로 한 명을 선택한다." rands = [ { sides = 6, value = 6 }, ] @@ -494,7 +494,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "OMT" -output = "만남표(12) > 첫눈에 반함. 이전에, 당신은 다양한 악곡을 발표했습니다. 그러자, 그 악곡에 첫눈에 반했다며 당신에게 오토다마가 찾아왔습니다. 이후, 그 오토다마에게 쫓아다니는 나날입니다." +output = "만남표(12) > 첫눈에 반함. 이전에, 당신은 다양한 악곡을 발표했습니다. 그러자, 그 악곡에 첫눈에 반했다며 당신에게 오토다마가 찾아왔습니다. 이후, 그 오토다마에게 쫓기는 나날입니다." rands = [ { sides = 6, value = 6 }, { sides = 6, value = 6 }, From bed9c24873bc597a552ef9ef3e32abe09986fb7d Mon Sep 17 00:00:00 2001 From: MY4k Date: Mon, 2 Mar 2026 12:41:01 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=E9=9F=93=E5=9B=BD=E8=AA=9E=E7=BF=BB?= =?UTF-8?q?=E8=A8=B3=E3=82=92=E8=BF=BD=E5=8A=A0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- i18n/HatsuneMiku/ko_kr.yml | 6 +++--- test/data/HatsuneMiku_Korean.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/i18n/HatsuneMiku/ko_kr.yml b/i18n/HatsuneMiku/ko_kr.yml index 78d6b7554..6fbade1e7 100644 --- a/i18n/HatsuneMiku/ko_kr.yml +++ b/i18n/HatsuneMiku/ko_kr.yml @@ -13,7 +13,7 @@ ko_kr: name: "펌블표" type: "1D6" items: - - "주변에서 활기가 사라진다. 검정 이외의 모든 음색을 하나씩 줄인다." + - "주변에서 활기가 사라진다. 검정(흑) 이외의 모든 음색을 하나씩 줄인다." - "동료에게 폐를 끼쳐버린다. 자신 이외의 PC 전원의【생명력】이 1점 감소한다." - "이 실패가 나중에 화가 될지도 모른다……. 자신의【생명력】이 1D6점 감소한다." - "마음에 피로감이 가득 차간다. 자신이 스트레스를 1점 받는다." @@ -25,7 +25,7 @@ ko_kr: type: "1D6" items: - "절망적인 공격을 받는다. 그 캐릭터는 강제 퇴출된다." - - "고통의 비명을 지르며 비참하게 쓰러진다. 그 캐릭터는 행동불능이 된다. 또한, 검정 음색이 하나 늘어난다." + - "고통의 비명을 지르며 비참하게 쓰러진다. 그 캐릭터는 행동불능이 된다. 또한, 검정(흑) 음색이 하나 늘어난다." - "오토쿠이의 일격으로 당신은 날아가버린다. 그 캐릭터는 행동불능이 된다. 또한, 분류가 장비인 넘버에 스트레스를 1점 받는다." - "강렬한 일격을 받고 기절한다. 그 캐릭터는 행동불능이 된다." - "의식은 있지만 일어설 수 없다. 그 캐릭터는 행동불능이 된다. 다음 장면에 아직【생명력】이 0점이었을 경우, 자동으로 1점 회복한다." @@ -73,7 +73,7 @@ ko_kr: - "노이즈의 도움을 빌려 문제를 해결한다. 코인을 1D6개 지불할 필요가 있다. 코인을 지불할 경우, 다른 PC에게 코인을 받아도 좋다. 지불이 부족했을 경우, 그 차액만큼 자신의 【생명력】을 줄인다." - "큰 피로감을 느낀다. 스트레스를 1점 받는다." - "무심코 시간을 써버린다.【타임】이 1점 감소한다." - - "그 자리에 불길한 기운이 가득 찬다. 검정 음색이 하나 늘어난다." + - "그 자리에 불길한 기운이 가득 찬다. 검정(흑) 음색이 하나 늘어난다." RQT: name: "리퀘스트표" diff --git a/test/data/HatsuneMiku_Korean.toml b/test/data/HatsuneMiku_Korean.toml index d9a5c91fa..62283ee3f 100644 --- a/test/data/HatsuneMiku_Korean.toml +++ b/test/data/HatsuneMiku_Korean.toml @@ -291,7 +291,7 @@ rands = [ [[ test ]] game_system = "HatsuneMiku:Korean" input = "OT" -output = "장애표(6) > 그 자리에 불길한 기운이 가득 찬다. 검정 음색이 하나 늘어난다." +output = "장애표(6) > 그 자리에 불길한 기운이 가득 찬다. 검정(흑) 음색이 하나 늘어난다." rands = [ { sides = 6, value = 6 }, ]