Class: BCDice::GameSystem::BlindMythos
- Defined in:
- lib/bcdice/game_system/BlindMythos.rb
Constant Summary collapse
- ID =
ゲームシステムの識別子
'BlindMythos'
- NAME =
ゲームシステム名
'ブラインド・ミトスRPG'
- SORT_KEY =
ゲームシステム名の読みがな
'ふらいんとみとすRPG'
- HELP_MESSAGE =
ダイスボットの使い方
<<~MESSAGETEXT ・判定:BMx@y>=z、BMSx@y>=z x:スキルレベル y:目標難易度(省略可。デフォルト4) z:必要成功度 BMコマンドはダイスの振り足しを常に行い、 BMSは振り足しを自動では行いません。 例)BM>=1 BM@3>=1 BMS2>=1 ・判定振り足し:ReRollx,x,x...@y>=z x:振るダイスの個数 y:目標難易度(省略可。デフォルト4) z:必要成功度 振り足しを自動で行わない場合(BMSコマンド)に使用します。 ・LE:失う感情表 ・感情後遺症表 ESx ESH:喜、ESA:怒、ESS:哀、ESP:楽、ESL:愛、ESE:感 ・DT:汚染チャート ・RPxyz:守護星表チェック xyz:守護星ナンバーを指定 例)RP123 RP258 MESSAGETEXT
- TABLES =
{ "LE" => DiceTable::Table.new( "失う感情表", "1D6", [ "喜:喜びは消えた。嬉しい気持ちとは、なんだっただろう。", "怒:激情は失われ、憎しみもどこかへと消える。", "哀:どんなに辛くても、悲しさを感じない。どうやら涙も涸れたらしい。", "楽:もはや楽しいことなどない。希望を抱くだけ無駄なのだ。", "愛:愛など幻想……無力で儚い、役に立たない世迷い言だ。", "感:なにを見ても、感動はない。心は凍てついている。" ] ), "ESH" => DiceTable::Table.new( "「喜」の感情後遺症表", "2D6", [ "日々喜びを求めてしまう。", "日々喜びを求めてしまう。", "嬉しい時間が長続きしない。", "素直に喜びを共有できないことがある。", "小さなことで大きく喜びを感じる。", "小さなことで大きく喜びを感じる。", "影響なし。", "影響なし。", "「喜」の後遺症をひとつ消してもよい。", "「喜」の後遺症をひとつ消してもよい。", "「喜」の後遺症をひとつ消してもよい。" ] ), "ESA" => DiceTable::Table.new( "「怒」の感情後遺症表", "2D6", [ "始終不機嫌になる。", "始終不機嫌になる。", "一度怒ると、なかなか収まらない。", "怒りっぽくなる", "怒りかたが激しくなる。", "怒りかたが激しくなる。", "影響なし。", "影響なし。", "「怒」の後遺症をひとつ消してもよい。", "「怒」の後遺症をひとつ消してもよい。", "「怒」の後遺症をひとつ消してもよい。" ] ), "ESS" => DiceTable::Table.new( "「哀」の感情後遺症表", "2D6", [ "一度涙が出るとなかなか止まらない。", "一度涙が出るとなかなか止まらない。", "夜、哀しいことを思い出して目が覚める。", "不意に哀しい気持ちになる。", "涙もろくなる。", "涙もろくなる。", "影響なし。", "影響なし。", "「哀」の後遺症をひとつ消してもよい。", "「哀」の後遺症をひとつ消してもよい。", "「哀」の後遺症をひとつ消してもよい。" ] ), "ESP" => DiceTable::Table.new( "「楽」の感情後遺症表", "2D6", [ "突然陽気になったり、不意に笑い出してしまう。", "突然陽気になったり、不意に笑い出してしまう。", "周りが楽しくなさそうだと不安になる。", "楽しいことがないと落ち着かない。", "些細なことでも笑ってしまう。", "些細なことでも笑ってしまう。", "影響なし。", "影響なし。", "「楽」の後遺症をひとつ消してもよい。", "「楽」の後遺症をひとつ消してもよい。", "「楽」の後遺症をひとつ消してもよい。" ] ), "ESL" => DiceTable::Table.new( "「愛」の感情後遺症表", "2D6", [ "少しでも気になる相手に愛を求めてしまう。", "少しでも気になる相手に愛を求めてしまう。", "愛する相手(恋人・家族・ペット・空想)から離れたくない。", "誰彼構わず優しくしてしまう。", "ひとりでいると不安を感じる。", "ひとりでいると不安を感じる。", "影響なし。", "影響なし。", "「愛」の後遺症をひとつ消してもよい。", "「愛」の後遺症をひとつ消してもよい。", "「愛」の後遺症をひとつ消してもよい。" ] ), "ESE" => DiceTable::Table.new( "「感」の感情後遺症表", "2D6", [ "感動を共有できない相手を不信に思ってしまう。", "感動を共有できない相手を不信に思ってしまう。", "嬉しくても哀しくてもすぐに涙が出る。", "リアクションがオーバーになる。", "ちょっとしたことで感動する。", "ちょっとしたことで感動する。", "影響なし。", "影響なし。", "「感」の後遺症をひとつ消してもよい。", "「感」の後遺症をひとつ消してもよい。", "「感」の後遺症をひとつ消してもよい。" ] ), }.freeze
Instance Attribute Summary
Attributes inherited from Base
#d66_sort_type, #default_cmp_op, #default_target_number, #randomizer, #reroll_dice_reroll_threshold, #round_type, #sides_implicit_d, #upper_dice_reroll_threshold
Instance Method Summary collapse
- #eval_game_system_specific_command(command) ⇒ Object
- #getDurtyTableCommandReuslt(command) ⇒ Object
- #getRollResult(rerollCounts, judgeNumberText, judgeNumber, targetNumber, isReRoll, isStop) ⇒ Object
- #getRulingPlanetDice ⇒ Object
- #getRulingPlanetDiceCommandResult(command) ⇒ Object
- #getSameDieList(diceList) ⇒ Object
- #getSuccessResultText(diceList, judgeNumber) ⇒ Object
- #getTotalResult(bitList, successList, countOneList, targetNumber, isStop, canReRoll) ⇒ Object
- #judgeRoll(command) ⇒ Object
- #reRoll(command, isStop) ⇒ Object
Methods inherited from Base
#change_text, #check_result, command_pattern, #enable_debug, #enabled_d9?, #eval, eval, #grich_text, #initialize, prefixes_pattern, register_prefix, register_prefix_from_super_class, #sort_add_dice?, #sort_barabara_dice?
Methods included from Translate
Constructor Details
This class inherits a constructor from BCDice::Base
Instance Method Details
#eval_game_system_specific_command(command) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/bcdice/game_system/BlindMythos.rb', line 40 def eval_game_system_specific_command(command) debug("eval_game_system_specific_command Begin") result = judgeRoll(command) return result unless result.nil? isStop = true text, = reRoll(command, isStop) return text unless text.nil? result = getRulingPlanetDiceCommandResult(command) return result unless result.nil? text = getDurtyTableCommandReuslt(command) return text unless text.nil? return roll_tables(command, TABLES) end |
#getDurtyTableCommandReuslt(command) ⇒ Object
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 |
# File 'lib/bcdice/game_system/BlindMythos.rb', line 294 def getDurtyTableCommandReuslt(command) return nil unless /^DT$/i =~ command table = <<~__TABLE_END__ 汚染チャートを2回振り、その効果を適用する(1・2-2,5・6-12 なら振り直す) PC全員の「トラウマ」「喪失」すべてに2ダメージ PC全員の「喪失」2つに4ダメージ PC全員の「トラウマ」すべてに2ダメージ。その後さらに汚染が2増える PC全員、1つの【記憶】の両方の値が0になる。このときアクロバットダイス獲得不可 PC全員の「喪失」1つに4ダメージ。このときアクロバットダイス獲得不可 PC全員の「トラウマ」すべてに1ダメージ。その後さらに汚染が3増える PC全員の「トラウマ」すべてに1ダメージ。その後アクロバットダイスをPC人数分失う PC全員の「喪失」すべてに2ダメージ。禁書ビットをすべて失う PC全員の「トラウマ」2つに3ダメージ。その後さらに汚染が1増える PC全員の「トラウマ」「喪失」すべてに1ダメージ PC全員の「喪失」1つに4ダメージ。禁書ビットをすべて失う PC全員の「トラウマ」すべてに2ダメージ PC全員の1つの【記憶】の「トラウマ」「喪失」それぞれに3ダメージ PC全員の「喪失」すべてに1ダメージ PC全員の「トラウマ」3つに2ダメージ PC全員の「トラウマ」と「喪失」それぞれ1つに3ダメージ PC全員の「喪失」3つに2ダメージ PC全員のすべての「トラウマ」に1 ダメージ PC全員のひとつの【記憶】の「トラウマ」「喪失」それぞれに3ダメージ PC全員の「喪失」すべてに2ダメージ PC全員の「トラウマ」ひとつに4ダメージ。禁書ビットをすべて失う PC全員の「トラウマ」「喪失」すべてに1ダメージ PC全員の「喪失」2つに3ダメージ。その後さらに汚染が1増える PC全員の「トラウマ」すべてに2ダメージ。禁書ビットをすべて失う PC全員の「喪失」すべてに1ダメージ。その後アクロバットダイスをPC人数分失う PC全員の「喪失」すべてに1ダメージ。その後さらに汚染が3増える PC全員の「トラウマ」1つに4ダメージ。このときアクロバットダイス獲得不可 PC全員、1つの【記憶】の両方の値が0になる。このときアクロバットダイス獲得不可 PC全員の「喪失」すべてに2ダメージ。その後さらに汚染が2増える PC全員の「トラウマ」2つに4ダメージ PC全員の「トラウマ」「喪失」すべてに2ダメージ 汚染チャートを2回振り、その効果を適用する(1・2-2,5・6-12 なら振り直す) __TABLE_END__ table = table.split("\n") dice1 = @randomizer.roll_once(6) dice2 = @randomizer.roll_sum(2, 6) index = (dice2 - 2) * 3 + (dice1 / 2.0).ceil - 1 return "汚染チャート(#{dice1},#{dice2}) > #{table[index]}" end |
#getRollResult(rerollCounts, judgeNumberText, judgeNumber, targetNumber, isReRoll, isStop) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/bcdice/game_system/BlindMythos.rb', line 117 def getRollResult(rerollCounts, judgeNumberText, judgeNumber, targetNumber, isReRoll, isStop) bitList = [] successList = [] countOneList = [] rerollTargetList = [] = "" rerollCounts.each_with_index do |diceCount, index| += "\n" unless index == 0 commandName = "ReRoll#{diceCount}" unless isReRoll if isStop commandName = "BMS#{diceCount - 2}" else commandName = "BM#{diceCount - 2}" end end commandText = "#{commandName}#{judgeNumberText}>=#{targetNumber}" diceList = @randomizer.(diceCount, 6).sort diceText = diceList.join(",") += " > " if isReRoll += "(#{commandText}) > #{diceCount}D6[#{diceText}] > " success, countOne, resultText = getSuccessResultText(diceList, judgeNumber) bitList += diceList.find_all { |i| i >= 4 } unless isReRoll successList << success countOneList << countOne += resultText sameDiceList = getSameDieList(diceList) next if sameDiceList.empty? rerollText = "" sameDiceList.each do |list| rerollText += "," unless rerollText.empty? rerollText += list.join('') end rerollTargetList << sameDiceList.map(&:count).join(",") += "、リロール[#{rerollText}]" end rerollCommand = "" unless rerollTargetList.empty? rerollCommand = "ReRoll#{rerollTargetList.join(',')}#{judgeNumberText}>=#{targetNumber}" += "\n > コマンド:#{rerollCommand}" if isStop end canReRoll = !rerollCommand.empty? # ゲームシステムの識別子 # ゲームシステム名 # ゲームシステム名の読みがな # ダイスボットの使い方 if canReRoll && !isStop text, successListTmp, countOneListTmp, = reRoll(rerollCommand, isStop) += text successList += successListTmp countOneList += countOneListTmp end return , bitList, successList, countOneList, canReRoll end |
#getRulingPlanetDice ⇒ Object
281 282 283 284 285 286 287 288 289 290 291 292 |
# File 'lib/bcdice/game_system/BlindMythos.rb', line 281 def getRulingPlanetDice dice1, dice2 = @randomizer.(2, 10) while dice1 == dice2 dice2 = @randomizer.roll_once(10) end dice1 = 0 if dice1 == 10 dice2 = 0 if dice2 == 10 return dice1, dice2 end |
#getRulingPlanetDiceCommandResult(command) ⇒ Object
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 |
# File 'lib/bcdice/game_system/BlindMythos.rb', line 263 def getRulingPlanetDiceCommandResult(command) m = /^RP(\d+)$/i.match(command) return nil unless m targetNumbers = m[1].each_char.map(&:to_i) diceList = getRulingPlanetDice condition = diceList.any? { |dice| targetNumbers.include?(dice) } result = condition ? "発動" : "失敗" text = "守護星表チェック(#{targetNumbers.join(',')}) > #{diceList.count}D10[#{diceList.join(',')}] > #{result}" Result.new.tap do |r| r.text = text r.condition = condition end end |
#getSameDieList(diceList) ⇒ Object
231 232 233 234 235 236 237 238 239 240 241 242 243 244 |
# File 'lib/bcdice/game_system/BlindMythos.rb', line 231 def getSameDieList(diceList) sameDiceList = [] diceList.uniq.each do |i| next if i == 1 list = diceList.find_all { |dice| dice == i } next if list.length <= 1 sameDiceList << list end return sameDiceList end |
#getSuccessResultText(diceList, judgeNumber) ⇒ Object
246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/bcdice/game_system/BlindMythos.rb', line 246 def getSuccessResultText(diceList, judgeNumber) success = 0 countOne = 0 diceList.each do |i| countOne += 1 if i == 1 next unless i >= judgeNumber success += 1 end result = "成功数:#{success}" return success, countOne, result end |
#getTotalResult(bitList, successList, countOneList, targetNumber, isStop, canReRoll) ⇒ Object
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
# File 'lib/bcdice/game_system/BlindMythos.rb', line 185 def getTotalResult(bitList, successList, countOneList, targetNumber, isStop, canReRoll) success = successList.inject { |sum, i| sum + i } countOne = countOneList.inject { |sum, i| sum + i } result = "" if successList.size > 1 result += "\n > 最終成功数:#{success}" end if canReRoll && isStop result += "\n" if success >= targetNumber result += " > 現状で成功。コマンド実行で追加リロールも可能" return Result.success(result) else result += " > 現状のままでは失敗" if countOne >= 1 result += "。汚染ポイント+#{countOne}" return Result.fumble(result) else return Result.failure(result) end end end if success >= targetNumber result += " > 成功" if bitList.size >= 1 result += "、禁書ビット発生[#{bitList.join(',')}]" return Result.critical(result) else return Result.success(result) end else result += " > 失敗" if countOne >= 1 result += "。汚染ポイント+#{countOne}" return Result.fumble(result) else return Result.failure(result) end end end |
#judgeRoll(command) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/bcdice/game_system/BlindMythos.rb', line 59 def judgeRoll(command) return nil unless /^BM(S)?(\d*)(@(\d+))?>=(\d+)$/i =~ command isStop = !Regexp.last_match(1).nil? skillRank = Regexp.last_match(2).to_i judgeNumberText = Regexp.last_match(3) judgeNumber = (Regexp.last_match(4) || 4).to_i targetNumber = (Regexp.last_match(5) || 1).to_i = "" diceCount = skillRank + 2 isReRoll = false text, bitList, successList, countOneList, canReRoll = getRollResult([diceCount], judgeNumberText, judgeNumber, targetNumber, isReRoll, isStop) += text result = getTotalResult(bitList, successList, countOneList, targetNumber, isStop, canReRoll) result.text = + result.text return result end |
#reRoll(command, isStop) ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/bcdice/game_system/BlindMythos.rb', line 81 def reRoll(command, isStop) debug("ReRoll Begin", command) return nil unless /^ReRoll([\d,]+)(@(\d+))?>=(\d+)$/i =~ command debug("ReRoll pass") rerollCountsText = Regexp.last_match(1) judgeNumberText = Regexp.last_match(2) judgeNumber = (Regexp.last_match(3) || 4).to_i targetNumber = Regexp.last_match(4).to_i rerollCounts = rerollCountsText.split(/,/).map(&:to_i) commandText = "" rerollCounts.each do |diceCount| commandText += "," unless commandText.empty? commandText += "ReRoll#{diceCount}#{judgeNumberText}>=#{targetNumber}" end debug("commandText", commandText) = "" if rerollCounts.size > 1 && isStop += "(#{commandText})" end += "\n" isReRoll = true text, _bitList, successList, countOneList, = getRollResult(rerollCounts, judgeNumberText, judgeNumber, targetNumber, isReRoll, isStop) += text return , successList, countOneList, targetNumber end |