Class: BCDice::GameSystem::Paradiso

Inherits:
Base
  • Object
show all
Defined in:
lib/bcdice/game_system/Paradiso.rb

Constant Summary collapse

ID =

ゲームシステムの識別子

'Paradiso'
NAME =

ゲームシステム名

'チェレステ色のパラディーゾ'
SORT_KEY =

ゲームシステム名の読みがな

'ちえれすていろのはらていいそ'
HELP_MESSAGE =

ダイスボットの使い方

<<~MESSAGETEXT
  ◆判定 (nCPt[f]@c)、(nD20<=t[f]@c) n:ダイス数(省略時:1) t:目標値(省略時:14) f:絶不調の追加ファンブル値 c:人機一体の追加クリティカル値
   例)CP12 CP(13+1) 3CP12[18,19]@7
  ◆各種表
   ・ラジオ・マリエッタ表 RMT
   ・移動表 TOT
   ・探索表 EXT
   ・補給表 SUT
  ◆ダメージチェック (DCa[20,30]) a:【攻撃力】、[20]:20mm機銃追加、[30]:30mmガンポッド追加
   例)DC4:【攻撃力】4でダメージチェック DC5[20]:【攻撃力】5でダメージチェック、うち1つは20mm機銃 DC5[20,30]:【攻撃力】5でダメージチェック、うち1つは20mm機銃、うち1つは30mmガンポッド
MESSAGETEXT

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

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

#translate

Constructor Details

This class inherits a constructor from BCDice::Base

Instance Method Details

#eval_game_system_specific_command(command) ⇒ Object

ダイスロールコマンド



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/bcdice/game_system/Paradiso.rb', line 30

def eval_game_system_specific_command(command) # ダイスロールコマンド
  # 通常判定部分をgetJudgeResultコマンドに切り分け
  result = getJudgeResult(command)
  return result unless result.nil?

  # ダメージチェック部分をgetDamageResultコマンドに切り分け
  result = getDamageResult(command)
  return result unless result.nil?

  # テーブル
  case command.upcase # 大文字にしてチェックする
  when 'RMT'
    result = get_radiomarietta_table
  when 'TOT'
    result = get_takeoff_table
  when 'EXT'
    result = get_exploration_table
  when 'SUT'
    result = get_flightsupply_table
  end
  return result unless result.nil?
end

#get_exploration_tableObject

探索表



245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
# File 'lib/bcdice/game_system/Paradiso.rb', line 245

def get_exploration_table
  dice = @randomizer.roll_once(20)
  case dice
  when 1
    text = "クソっ!このマスに付与されていた\[手がかり\]を失う。"
  when 2
    text = "「ツケ払いやがれ!」見に覚えがあるかないか。キミに詰め寄ってくるヤツがいる。【物資点】を10点消費するか、「ツケを伸ばす」のどちらかを選択する。ツケを伸ばすを選択した場合、次にキミが行う「●探索」のアクションでも、探索表の結果は参照せず、自動的にこの効果が適用される。"
  when 3
    text = "謎は深まる。このマスに付与されていた\[手がかり\]を失い、ランダムな場所に再付与する。【情報点】は得られない。"
  when 4
    text = "コネクションは大事だ。「支援チェック」をチェックしていない【キズナ】が1点以上存在すれば、その「支援チェック」を入れたあと、このマスに付与されていた\[手がかり\]を失い、【情報点】を1点獲得する。"
  when 5..8
    text = "情報を手に入れるためには、少し骨を折る必要がありそうだ。好きな能力値を2つ組み合わせて{探索判定}を行う。成功すればこのマスに付与されていた\[手がかり\]を失い、【情報点】を1点獲得する。"
  when 9
    text = "情報を提供してくれるというアイツは見返りを要求してきた。【物資点】を4点消費できる。そうした場合、このマスに付与されていた\[手がかり\]を失い、【情報点】を1点獲得する。"
  when 10..13
    text = "危なげなく情報ゲット。このマスに付与されていた\[手がかり\]を失い、【情報点】を1点獲得する。"
  when 14
    text = "手がかりを追っている事を話すと、ソイツは協力を持ちかけてきてくれた。このマスに付与されていた\[手がかり\]を失い、【情報点】を1点獲得する。さらに、【物資点】を5点獲得する。"
  when 15
    text = "手がかりを追っている事を話すと、ソイツは協力を持ちかけてきてくれた。このマスに付与されていた\[手がかり\]を失い、【情報点】を1点獲得する。さらに、アイテム「チケット」(P\.69)を入手する。"
  when 16
    text = "昔の仲間から手がかりについて聞くことになった。ついでに積もる話も少々。このマスに付与されていた\[手がかり\]を失い、【情報点】を1点獲得する。さらに同業者は「キミへの【キズナ】」を1点得る。同業者はこのセッション中、キミが望む場面でキミに「判定支援」を行ってくれる。"
  when 17
    text = "空軍にいる友人から手がかりについて聞くことになった。「なあ、お前もフラフラしてないで空軍に入ったらどうだ?」耳に痛い。このマスに付与されていた\[手がかり\]を失い、【情報点】を1点獲得する。さらに、アイテム「空軍のツテ」(P\.69)を入手する。"
  when 18
    text = "手がかりを追っていたら他にもボロボロと……。このマスに付与されていた\[手がかり\]を失い、【情報点】を1点獲得する。さらに、1D20を二回振り、この「クエストマップ」上のランダムなマス2つを求める。それらのマスに\[手がかり\]が付与されていなければ、\[手がかり\]を付与する。"
  when 19
    text = "あっさり情報を掴むことができてしまった。このマスに付与されていた\[手がかり\]を失い、【情報点】を1点獲得する。この「●探索」ではアクションを消費せず、追加で別のアクションを宣言する事ができる。"
  when 20
    text = "これは重要な手がかりだ! このマスに付与されていた\[手がかり\]を失い、【情報点】を2点獲得する。"
  end

  return "探索表" + "\(" + dice.to_s + "\):" + text
end

#get_flightsupply_tableObject

補給表



282
283
284
285
286
287
288
289
290
291
292
293
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
# File 'lib/bcdice/game_system/Paradiso.rb', line 282

def get_flightsupply_table
  dice = @randomizer.roll_once(20)
  case dice
  when 1
    text = "……えっ?! キミの【物資点】は0点となる。"
  when 2
    text = "おいおい勘弁してくれよ……。このアクションがそのセグメントの一回目のアクションだった場合、キミは2回目のアクションを行えない。その後【物資点】を5点獲得する。"
  when 3
    text = "取材に巻き込まれる。【物資点】は獲得できないが、記者の発言からはぽろりとなにかが見えたような?1D20を振り、出た目に対応したマスに「手がかり」を1つ配置する。"
  when 4
    text = "成果ゼロ。ま、こんな日もあるかな。【物資点】は獲得できない。"
  when 5
    text = "うまいこと補給できなかった。【物資点】を5点獲得する。"
  when 6
    text = "「一稼ぎと言ったらこれだろ?」と声をかけてくる悪友たち。「カジノ」(『基本ルールブック』P\.55)のスポット効果を即座に適用する。ただしこの処理では判定の失敗により「刑務所」のスポット効果を持つスポットに移動する効果は発生せず、代わりに「酒場」のスポット効果を持つスポットに移動した上で、自身が持つ全ての【キズナ】の「支援チェック」にチェックを入れる。その後、次のセグメントが終了するまでの間アクションは行えない。"
  when 7..9
    text = "のんびり釣りといこう。釣果は運次第だ。1D20を振り、出た目と同じ数だけ【物資点】を獲得する。"
  when 10..12
    text = "なにごともなく補給が完了する。【物資点】を10点獲得する。"
  when 13
    text = "ラジオの音が聞こえる。PCが望むなら、1D20を振り、出た目を「ラジオ・マリエッタ表」(『基本ルールブック』P.29)に照らし合わせて、その結果を反映する。これ以後、朝セグメントで振られたラジオ・マリエッタ表の効果は失われる。その後【物資点】を10点獲得する。"
  when 14
    text = "補給の合間、ちょっと口寂しくなってしまって露店へ。【物資点】を8点獲得し、アイテム「レモネード」(『基本ルールブック』P\.69)を入手する。"
  when 15
    text = "補給の合間、軽くメンテナンス。【機体コンディション】を1点下げることができる。その後【物資点】を10点獲得する。"
  when 16
    text = "補給の合間、店主と軽く談笑。【乗り手コンデイション】を1点下げることができる。その後【物資点】を10点獲得する。"
  when 17
    text = "補給の合間、仲間に軽く挨拶しておこうか。同じマスに他のPCがいた場合、そのPC1人への【キズナ】を1点獲得する。その後【物資点】を10点獲得する。"
  when 18
    text = "補給の合間に通りがかった相手と意気投合。相手はキミへの【キズナ】を1点取得する。【物資点】を10点獲得する。"
  when 19
    text = "あっさり補給が終わってしまった。どうしようかな。この補給ではアクションを消費せず、【物資点】を10点獲得する。"
  when 20
    text = "降って湧いた幸運!【物資点】が20点になる。"
  end

  return "補給表" + "\(" + dice.to_s + "\):" + text
end

#get_radiomarietta_tableObject

ラジオマリエッタ表



171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/bcdice/game_system/Paradiso.rb', line 171

def get_radiomarietta_table
  dice = @randomizer.roll_once(20)
  case dice
  when 1
    text = "「なんてこった! ここで事故のお知らせだ!」\n通行止め……。ランダムなマス1つを決定する。この一日中、そのマスに移動する事はできない。"
  when 2..4
    text = "「今日はまたずいぶんと湿気てるねぇ……。古傷がある人は要注意だよ」\n天候が悪い。この一日中、「●移動」のアクションで移動できるマス数は常に1マス低くなる。"
  when 5..10
    text = "「日常は至上! 異常は退場! なんにもないからラジオは以上! ……なんつて」\nいつもどおりの日々。のんびりとした風で、何事もなし。"
  when 11, 12
    text = "「それじゃ、本日のメインコーナー。行ってみよう!」\n軽妙なトーク。PC全員の【乗り手コンディション】が1点小さくなる。"
  when 13..15
    text = "「いーなー、こんな日はボクも飛んでみたい気分だよ! ブオノあたりまでバーッとね!」\nとんでもなく快晴で絶好のフライト日和。【機体コンディション】【乗り手コンディション】がそれぞれ1点小さくなる。"
  when 16
    text = "「店頭で言えば嬉しい値引き。本日のラッキーワードをメモする用意はできたかい?」\nおトクな情報。この一日中、各PCごとに一回ずつ、「価格」の効果値が2低いものとして効果を処理できる(最低値0)"
  when 17
    text = "「いっやー……熱演だったね。もーぅ次回が待ちきれなぁい!!」\nラジオドラマが神回だった。その日一日に行う「交流」で獲得できる【キズナ】の点数が+1される。"
  when 18
    text = "「イエス!ナイス!エレガンス!あのサーカス団が帰ってくる!」\nサーカス団がやってくる!ランダムなマス1つを決定する。\nこの一日中、そのマスは「娯楽施設:5」(P.55)の効果を得る。"
  when 19
    text = "「ラジオネーム、ハプニングさんからのお便り! おっとぉ、これは興味深い相談だ」\nラジオの話している内容から手がかりが見つかる。\[手がかり\]が1箇所追加で配置される。"
  when 20
    text = "「今夜は素敵なパーリィデイ! みんな!今夜の仮装を何にするかはもう決めてるかな?」\n酒場でパーティだ!「酒場」のスポット効果を持つスポットに「レストラン:「パーティ」」が追加される。"
  end

  return "ラジオマリエッタ表" + "\(" + dice.to_s + "\):" + text
end

#get_takeoff_tableObject

移動表



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
230
231
232
233
234
235
236
237
238
239
240
241
242
# File 'lib/bcdice/game_system/Paradiso.rb', line 200

def get_takeoff_table
  dice = @randomizer.roll_once(20)
  case dice
  when 1
    text = "エンジンがぶっ壊れた!ただちに【機体コンディション】が「20」となり、このターン中は2つ目のアクションも含め「●移動」することができない。"
  when 2
    text = "離水に失敗した! キミの愛機のダメージマップ上の任意の「翼」部位のダメージボックスに1点のダメージを与え、このターン中は2つ目のアクションも含め「●移動」することができない。"
  when 3
    text = "軽いエンジントラブル。このアクションでは移動することができない。"
  when 4
    text = "同業者に遭遇。しかし煽られて曲芸飛行につきあわされる。\n任意の方向に強制的に3マス移動し、【物資点】3点を失う。"
  when 5
    text = "道を間違えたらしい。【物資点】を5点消費し、ランダムな方向に1マス移動する効果を3回繰り返す。"
  when 6
    text = "気づいたらオイル漏れを起こしていた!【物資点】を3点消費する。その後、1マスにつき1点の【物資点】を消費して最大4マスまで移動できる。"
  when 7
    text = "あいにくのにわか雨。あまり飛びたくないなあ。1マスにつき1点の【物資点】を消費して最大2マスまで移動できる。"
  when 8
    text = "唐突な襲撃。一撃加えたあと、謎の襲撃者はいずこかへ去っていった……。命中判定の達成値が12であると扱う、【火力】3のダメージチェックを受ける。その後、1マスにつき1点の【物資点】を消費して最大4マスまで移動できる。"
  when 9
    text = "んー、少し調子が悪いかな? 1マスにつき1点の【物資点】を消費して最大3マスまで移動できる。"
  when 10..12
    text = "順調な空の旅。1マスにつき1点の【物資点】を消費して最大5マスまで移動できる。"
  when 13
    text = "島巡りの観光艇と遭遇。ちやほやされていい気分。1マスにつき1点の【物資点】を消費して最大5マスまで移動できる上、キミの【乗り手コンディション】を2点までの任意の点数下げる事ができる。"
  when 14
    text = "同業者と遭遇。1マスにつき1点の【物資点】を消費して最大5マスまで移動できる上、同業者は「キミへの【キズナ】」を1点得る。同業者はこのセッション中、キミが望む場面でキミに「判定支援」を行ってくれる。"
  when 15
    text = "すごく調子がいいぞ!1マスにつき1点の【物資点】を消費して最大7マスまで移動できる上、キミの【機体コンディション】を2点までの任意の点数下げる事ができる。"
  when 16
    text = "すごく調子がいいぞ!1マスにつき1点の【物資点】を消費して最大5マスまで移動できる上、このアクションがこのターンに行う1回目のアクションである場合、2回目のアクションでも続けて「●移動」を行う事ができる。"
  when 17
    text = "通りかかった先に思わぬ情報が!1マスにつき1点の【物資点】を消費して最大5マスまで移動できる上、このアクションがこのターンに行う1回目のアクションである場合、2回目のアクションでは今いるマスに\[手がかり\]が配置されているものとして「●探索」が行える。"
  when 18
    text = "酒場が恋しい……。【物資点】を5点消費し、即座に同じ「クエストマップ」内の「酒場」のスポット効果を持つマスに移動する。"
  when 19
    text = "アジトが恋しい……。【物資点】を5点消費し、即座に同じ「クエストマップ」内の任意のキミの「アジト」に移動する。"
  when 20
    text = "仲間が恋しい……。【物資点】を5点消費し、即座に任意のPC一人のいる場所に移動する。"
  end

  return "移動表" + "\(" + dice.to_s + "\):" + text
end

#getDamageResult(command) ⇒ Object



111
112
113
114
115
116
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
# File 'lib/bcdice/game_system/Paradiso.rb', line 111

def getDamageResult(command)
  biggun = [0, 0, 0]

  case command
  when /^DC(\d+)(\[(\d+)(,(\d+))?(,(\d+))?(,(\d+))?(,(\d+))?(,(\d+))?\])?$/i
    attack = (Regexp.last_match(1) || 1).to_i # ダイス数。省略時は1
    biggun[0] = (Regexp.last_match(3) || 0).to_i # コダワリ機銃、省略時は0
    biggun[1] = (Regexp.last_match(5) || 0).to_i
    biggun[2] = (Regexp.last_match(7) || 0).to_i
    biggun[3] = (Regexp.last_match(9) || 0).to_i
    biggun[4] = (Regexp.last_match(11) || 0).to_i
    biggun[5] = (Regexp.last_match(13) || 0).to_i
  else return nil
  end

  dice = 0
  dicetext = ""
  damage = Array.new(20, 0)
  doubledam = 0
  tripledam = 0

  biggun.each do |bg|
    case bg
    when 30
      tripledam += 1
    when 20
      doubledam += 1
    end
  end

  attack.times do
    dice = @randomizer.roll_once(20)

    if dicetext == ""
      dicetext = dice.to_s
    else
      dicetext = dicetext + "," + dice.to_s
    end

    if tripledam >= 1
      damage[dice - 1] += 3
      tripledam += -1
      dicetext += "【30mm】"
    elsif doubledam >= 1
      damage[dice - 1] += 2
      doubledam += -1
      dicetext += "【20mm】"
    else
      damage[dice - 1] += 1
    end
  end

  result = "\n#{damage[0]}#{damage[1]}#{damage[2]}#{damage[3]}#{damage[4]}\n#{damage[5]}#{damage[6]}#{damage[7]}#{damage[8]}#{damage[9]}\n#{damage[10]}#{damage[11]}#{damage[12]}#{damage[13]}#{damage[14]}\n#{damage[15]}#{damage[16]}#{damage[17]}#{damage[18]}#{damage[19]}"

  text = "攻撃力#{attack}ダメージチェック > (#{dicetext}) > #{result}"

  return text
end

#getJudgeResult(command) ⇒ Object

通常判定



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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
# File 'lib/bcdice/game_system/Paradiso.rb', line 54

def getJudgeResult(command)
  case command
  when /^(\d+)?D20<=(\d+)?(\[(\d+)(,(\d+))?\])?(@(\d+))?$/i
    number = (Regexp.last_match(1) || 1).to_i # ダイス数。省略時は1
    target = (Regexp.last_match(2) || 14).to_i # 目標値。省略時は14  if 空白 then 14 else 記載の値
    fumble1 = (Regexp.last_match(4) || 21).to_i # 追加ファンブル値。省略時は21
    fumble2 = (Regexp.last_match(6) || 21).to_i # 追加ファンブル値。省略時は21
    critical = (Regexp.last_match(8) || 21).to_i # 追加クリティカル値。省略時は21
  when /^(\d+)?CP(\d+)?(\[(\d+)(,(\d+))?\])?(@(\d+))?$/i
    number = (Regexp.last_match(1) || 1).to_i
    target = (Regexp.last_match(2) || 14).to_i
    fumble1 = (Regexp.last_match(4) || 21).to_i
    fumble2 = (Regexp.last_match(6) || 21).to_i
    critical = (Regexp.last_match(8) || 21).to_i
  else return nil
  end

  dice = 0
  dicetext = ""
  crit_flg = false
  fumb_flg = false
  succ_flg = false

  number.times do
    dice = @randomizer.roll_once(20)

    if dicetext == ""
      dicetext = dice.to_s
    else
      dicetext = dicetext + "," + dice.to_s
    end

    if [1, critical].include?(dice)
      crit_flg = true
    elsif [20, fumble1, fumble2].include?(dice) # パラディーゾではクリティカル優先!
      fumb_flg = true
    elsif dice <= target
      succ_flg = true
    end
  end

  if crit_flg == true
    result = "クリティカル"
  elsif fumb_flg == true
    result = "ファンブル"
  elsif succ_flg == true
    result = "成功"
  else
    result = "失敗"
  end

  text = "(#{number}D20 目標値#{target}) > (#{dicetext}) > #{result}"

  return text
end