bcdice 3.11.0 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,34 @@
1
+ ja_jp:
2
+ NinjaSlayer2:
3
+ table:
4
+ SATSUBATSU:
5
+ name: "サツバツ!!(D6) > "
6
+ type: 1D6
7
+ items:
8
+ - "「イヤーッ!」腹部に強烈な一撃が命中! 敵はくの字に折れ曲がり、ワイヤーアクションめいて吹っ飛んだ! \n『痛打+1』。敵の【体力】を減らした場合、付属効果として『弾き飛ばし』を与える。"
9
+ - "「観念してハイクを詠め!」頭部への痛烈なカラテが命中! 眼球破壊もしくは激しい脳震盪が敵を襲う! \n『痛打+1』。敵の【体力】を減らした場合、付属効果として『ニューロンダメージ2』と『ワザマエダメージ1』と『●部位損傷:頭部』を与える。"
10
+ - "「苦しみ抜いて死ぬがいい!」急所や内臓を情け容赦なく破壊! \n『痛打+1』。敵の【体力】を減らした場合、付属効果として『ニューロンダメージ1』と『精神力ダメージ2』と『●部位損傷:胴体』を与える。"
11
+ - "「どこへ逃げても無駄だ!」敵の脚を無慈悲に粉砕! \n『痛打+1』。敵の【体力】を減らした場合、付属効果として『カラテダメージ1』と『脚力ダメージ2』と『●部位損傷:脚部』を与える。"
12
+ - "「これで手も足も出まい!」敵の両腕をダブルチョップ切断! 傷口から鮮血がスプリンクラーめいて噴き出す! \n『痛打+1』。敵の【体力】を減らした場合、付属効果として『カラテダメージ2』と『ワザマエダメージ2』と『●部位損傷:腕部』を与える。"
13
+ - "「さらばだ! イイイヤアアアアーーーーッ!」ヤリめいたチョップが敵の胸を貫通! さらに心臓を掴み取り、握りつぶした! ゴウランガ! \n『即死!』。敵が『即死耐性』を持つ場合、この効果は『痛打+2D6』に置き換えられる。"
14
+ WASSHOI:
15
+ name: "ニンジャスレイヤー=サンのエントリー!!(D6) > "
16
+ type: 1D6
17
+ items:
18
+ - "高所からの回転着地! タタミ四枚の距離で睨み合った! \n標的ニンジャから3または4マス離れた任意のマスに、【殺】コマを置くこと。"
19
+ - "ドアを蹴破って出現! \n標的ニンジャがいる部屋の任意のドアの隣に【殺】コマを置くこと。 \nなお、ドアにあらかじめ鍵をかけるなどの行為は全て無駄である。"
20
+ - "KRAAAAASH! 窓を突き破り出現! \n標的ニンジャがいる部屋の任意の窓の隣に【殺】コマを置くこと。 \n【殺】コマが隣接している間、その窓は脱出用として使用できなくなる。"
21
+ - "天井破壊や床破砕、または垂直リフト射出により出現! \n標的ニンジャから2マス離れた任意の場所に【殺】コマを置くこと。 \n激しい恐怖や動揺により、次のターンの終了時まで、その場にいる【DKK】1以上のニンジャ全員は『連続側転判定』の難易度が+1される。"
22
+ - "冷蔵庫や金庫から突如出現! \nそのマップ上に存在するトレジャーボックス内に、ニンジャスレイヤーが潜んでいた。標的ニンジャから最も近いトレジャーボックス1個(もしくは適切な障害物や爆発物)の隣に【殺】コマを置くこと。 \n激しい恐怖や動揺により、次のターンの終了時まで、その場にいる【DKK】1以上のニンジャ全員は『連続側転判定』の難易度が+1される。"
23
+ - "「行き先はジゴクですよ」 \nマップ上にいるNPC1人(標的ニンジャから最も近くにいる者)が、実はニンジャスレイヤーの変装であった。そのNPCのコマを【殺】に変更せよ(本物のNPCがどこにいったのかはニンジャマスターが後で考える)。 \n激しい恐怖や動揺により、次のターンの終了時まで、その場にいる【DKK】1以上のニンジャ全員は『連続側転判定』の難易度が+2される。"
24
+ NRS:
25
+ name: "ニンジャ・リアリティ・ショック発症(D7) > "
26
+ type: 1D7
27
+ items:
28
+ - "絶叫 \n恐怖のあまり、その場で絶叫を上げる。 \n探索中の場合、近くの敵に存在を気づかれる可能性がある(シナリオ次第)。 \n戦闘中の場合、恐怖のあまり足がガクガクと震え、このターン終了まで【脚力】が0となり、『崩れ状態』とみなされる。"
29
+ - "失禁 \n恐怖とトラウマのあまりその場で立ちすくみ、失禁する。自尊心を失い【精神力】が-1される。 \n戦闘中の場合、足がすくんで手がブルブルと震え、このターン終了まであらゆる自発的行動の難易度が+1され、【脚力】が1となり、『崩れ状態』とみなされる。"
30
+ - "パニック逃走や異常行動 \n恐怖のあまり絶叫し、仲間を見捨ててその場から全速力で逃げ出そうとしたり、銃を持っている場合は見えない敵に向かって乱射しようとする。 \nあるいは仲間のことをニンジャだと思い込んで攻撃を仕掛けたり、理解不能な異常行動を取ったりする。 \n探索シーケンスの場合、直ちに戦闘シーケンスが発生してこのPCの手番となり、1ターンだけマスターがこのPCを操作する。このPCは常軌を逸した身体能力を発揮し、【脚力】6として行動する。マスターはこのPCに自傷行為以外のどんな行動を取らせてもよい。このPCにとっては、あらゆるキャラが敵とみなされる。このターンの終了時に、このPCは正気に戻る。 \n戦闘中の場合も同様で、次の手番にこの状態となる。手番開始時に攻撃できる相手がニンジャしか見えていない場合、逃走を優先する。"
31
+ - "ドゲザ \n失禁し【精神力】に1ダメージ。突然ドゲザによる命乞いを行うため、このターン終了時まで『麻痺状態』とみなされる。"
32
+ - "激しい嘔吐や鼻血 \n【体力】と【精神力】にそれぞれ1ダメージを受ける。 \n戦闘中の場合、このターンのあらゆる判定難易度が+1される。 \nしかし目の前の脅威に立ち向かおうとする意志は砕けていない。"
33
+ - "気絶 \n失禁し【精神力】に1ダメージ。さらに打ち上げられたマグロめいてその場で倒れて口をパクパクとさせ、『気絶状態』となる。 \n戦闘が終了するか、一定時間が経過するか、誰かに蘇生してもらうまで、この状態は解除されない。"
34
+ - "心臓発作や狂死 \n急激なニンジャリアリティショックに耐えきれず、PCは心臓発作やニューロン損傷を起こして【体力】0となり、その場に倒れ『気絶状態』となる。 \nZBRアドレナリンでなければ蘇生できない。処置を受けずに時間が経過すると死亡する。"
@@ -57,14 +57,12 @@ module BCDice
57
57
  def dice_roll(num_dice, success_threshold)
58
58
  # ダイスを振った結果を配列として取得
59
59
  values = @randomizer.roll_barabara(num_dice, 10)
60
- values_without_critical = values.reject { |num| num <= CRITICAL_VALUE }
61
-
62
- critical = values.size - values_without_critical.size
63
- success = values_without_critical.count { |num| num <= success_threshold }
64
- fumble = values_without_critical.count { |num| num >= FUMBLE_VALUE }
60
+ critical = values.count(CRITICAL_VALUE)
61
+ success = values.count { |num| num <= success_threshold }
62
+ fumble = values.count(FUMBLE_VALUE)
65
63
 
66
64
  # 成功値
67
- success_value = 2 * critical + success - fumble
65
+ success_value = critical + success - fumble
68
66
  result = compare_result(success_value)
69
67
 
70
68
  result.text = "#{values} > #{success_value} > #{translate('Emoklore.success_count', count: success_value)} #{result.text}"
@@ -9,7 +9,7 @@ module BCDice
9
9
  ID = 'FutariSousa:Korean'
10
10
 
11
11
  # ゲームシステム名
12
- NAME = '둘이서 수사(후타리소우사)'
12
+ NAME = '둘이서 수사'
13
13
 
14
14
  # ゲームシステム名の読みがな
15
15
  SORT_KEY = '国際化:Korean:둘이서 수사'
@@ -17,26 +17,51 @@ module BCDice
17
17
  # ダイスボットの使い方
18
18
  HELP_MESSAGE = <<~MESSAGETEXT
19
19
  ・판정용 커맨드
20
- 탐정용:【DT】…10면체 주사위를 2개 굴려 판정합니다.『유리』라면【3DT】, 『불리』라면【1DT】를 사용합니다.
21
- 조수용:【AS】…6면체 주사위를 2개 굴려 판정합니다. 『유리』라면【3AS】, 『불리』라면【1AS】를 사용합니다.
20
+ 탐정용:【DT】…10면체 주사위를 2개 굴려 판정합니다.『유리함』이라면【3DT】, 『불리함』이라면【1DT】를 사용합니다.
21
+ 조수용:【AS】…6면체 주사위를 2개 굴려 판정합니다. 『유리함』이라면【3AS】, 『불리함』이라면【1AS】를 사용합니다.
22
+  
22
23
  ・각종표
23
- 【조사】
24
- 이상한 버릇 결정표 SHRD
25
-  지껄이다표  SHFM/강압적인 수사표  SHBT/시치미 떼기표   SHPI
26
-  사건에 몰두표 SHEG/파트너와……표  SHWP/무언가 하고 있다표 SHDS
27
-  기상천외표  SHFT/갑작스런 번뜩임표 SHIN/희노애락표     SHEM
28
- 이벤트표
29
-  현장에서  EVS/어째서? EVW/협력자와 함께 EVN
30
-  상대쪽에서 EVC/VS용의자 EVV
31
- 조사의 장애표 OBT  변조표 ACT  목격자표 EWT  미제사건표 WMT
24
+ 【세션 시】
25
+ 기벽 결정 SHRD
26
+  발언 표       SHFM/수사 강행 표     SHBT/시치미 표       SHPI
27
+  사건에 몰두 표    SHEG/파트너와…… 표     SHWP/뭔가 하고 있음 표   SHDS
28
+  기상천외 표     SHFT/갑작스런 영감 표    SHIN/희노애락 표      SHEM
29
+  인간 모방 표     SHHE/인간 모방 실패 표   SHHF/파트너를 향한 장난 표 SHMP
30
+  의미심장 표     SHSB/초조함 표       SHFR/갑자기 왜그래 표   SHIS
31
+  억지 요구 표    SHSE/멀쩡해 보임 표     SHLM/질투에 사로잡힘 표   SHJS
32
+  오만한 태도 표   SHAR/비교적 가벼운 행동 표 SHRM/노 타임 표      SHNT
33
+  수사 방식 표    SHIM/귀족 표        SHNO/설명하지 않음 표   SHNE
34
+  형사 특유의 습관 표 SHHD
35
+  
36
+ 이벤트 표
37
+  현장에서 EVS/왜? EVW/협력자와 함께 EVN
38
+  알아서 찾아온 단서 EVC/VS용의자 EVV
39
+  폐쇄 공간 EVE
40
+  탐정 혼자 수사 EVD/조수 혼자 수사 EVA/관광 수사 EVT
41
+  예상치 못한 힌트 EVH/실험을 해보자 EVX/게스트 수사 EVG
42
+  형사 탐문 수사 EVQ/형사 대규모 수사 EVM/비밀스러운 정보 교환 EVP
43
+  동료들과 함께 수사 EVO/단골 가게 시추에이션 EVF/하드B 형사 액션 EVB
44
+  탐정을 얌전하게 만드는 수사 EVL/전통적 수사 EVZ/원시적 수사 EVR
45
+  
46
+ 감정 표
47
+  감정 표A/B   FLT66・FLT10
48
+  마음에 드는 점  FLTL66 /마음에 안 드는 점  FLTD66
49
+  무작위 감정 결정 표(당친법)  FLTRA
50
+  얼굴 부위       FLTF66/신체 부위      FLTB66/생활 습관    FLTH66
51
+  마음이 들뜨는 감각   FLTS66/타인에 대한 태도  FLTA66/헤비 웨이트   FLTW66
52
+  동료          FLTC66/부하        FLTU66/상사     FLTO66
53
+  수사 방식 FLTI66
54
+ 조사 방해 요인 표 OBT  상태 이상 표 ACT  목격자 표 EWT  미제 사건 표 WMT
55
+ 추억의 물품 결정 표 MIT  에피소드 동반 추억의 물품 결정 표 MITE  
56
+ 호칭 표A・B  NCT66・NCT10
57
+  
32
58
  【설정】
33
- 배경표
34
-  탐정 운명의 혈통  BGDD/천상의 재능  BGDG/마니아    BGDM
35
-  조수 정의로운 사람 BGAJ/정렬적인 사람 BGAP/말려든 사람 BGAI
36
- 신장표 HT  아지트표 BT  관계표 GRT  추억의 물건 결정표 MIT
37
- 직업표A・B  JBT66・JBT10  패션 특징표A・B    FST66・FST10
38
- 감정표A・B  FLT66・FLT10  좋아하는 것/싫어하는 것표A・B LDT66・LDT10
39
- 호칭표A・B NCT66・NCT10
59
+ 배경 표
60
+  탐정 운명의 혈통  BGDD/천성적인 재능  BGDG/마니아   BGDM
61
+  조수 정의로운 사람 BGAJ/정열적인 사람  BGAP/말려든 사람 BGAI
62
+ 신장 HT  아지트 BT  관계 GRT
63
+ 직업 표A・B  JBT66・JBT10  패션 특징 표A・B  FST66・FST10
64
+ 호불호 표A・B  LDT66・LDT10
40
65
  MESSAGETEXT
41
66
 
42
67
  register_prefix_from_super_class()
@@ -17,12 +17,12 @@ module BCDice
17
17
  ・判定コマンド(nHRFx+x)
18
18
  注意:難易度は必要成功数を表す
19
19
 
20
- 難易度指定:成功数のカウント、判定成功と失敗、Critical処理、Critical Winのチェックを行う
20
+ 難易度指定:成功数のカウント、判定成功と失敗、Critical処理、Critical Win、Total Failureのチェックを行う
21
21
  (Desperationダイスがある場合)OverreachとDespairの発生チェックを行う
22
22
  例) (難易度)HRF(通常ダイス)+(Desperationダイス)
23
23
  (難易度)HRF(通常ダイス)
24
24
 
25
- 難易度省略:成功数のカウント、判定失敗、Critical処理、(Desperationダイスがある場合)Despairチェックを行う
25
+ 難易度省略:成功数のカウント、判定失敗、Critical処理、Total Failure、(Desperationダイスがある場合)Despairチェックを行う
26
26
  判定成功、Overreachのチェックを行わない
27
27
  Critical Win、(Desperationダイスがある場合)Despair、Overreachのヒントを出力
28
28
  例) HRF(通常ダイス)+(Desperationダイス)
@@ -56,6 +56,10 @@ module BCDice
56
56
 
57
57
  desperaton_dice_pool = m[DESPERATION_DICE_INDEX]&.to_i
58
58
  if desperaton_dice_pool
59
+ if desperaton_dice_pool > 5
60
+ return "Desperationダイス指定は5ダイスが最大です。"
61
+ end
62
+
59
63
  desperaton_dice_text, desperaton_success_dice, desperaton_ten_dice, desperaton_botch_dice = make_dice_roll(desperaton_dice_pool)
60
64
 
61
65
  ten_dice += desperaton_ten_dice
@@ -102,6 +106,9 @@ module BCDice
102
106
  if desperaton_botch_dice > 0
103
107
  return Result.fumble("#{result_text}:判定失敗! [Despair]")
104
108
  end
109
+ if success_dice == 0
110
+ return Result.fumble("#{result_text}:判定失敗! [Total Failure]")
111
+ end
105
112
 
106
113
  return Result.failure("#{result_text}:判定失敗!")
107
114
  end
@@ -111,7 +118,7 @@ module BCDice
111
118
  return Result.fumble("#{result_text}:判定失敗! [Despair]")
112
119
  end
113
120
 
114
- return Result.failure("#{result_text}:判定失敗!")
121
+ return Result.fumble("#{result_text}:判定失敗! [Total Failure]")
115
122
  else
116
123
  if desperaton_botch_dice > 0
117
124
  result_text = "#{result_text}\n 判定失敗なら [Despair]"
@@ -20,28 +20,28 @@ module BCDice
20
20
  스페셜/펌블/성공/실패를 판정
21
21
  ・각종표
22
22
  씬표   ST
23
-  사실은 무서운 현대 일본 씬표 HJST/광조의 20년대 씬표 MTST
24
-  암흑의 빅토리아 씬표 DVST
25
- 수식표    DT
23
+  사실은 무서운 현대 일본 장면표 HJST/광란의 20년대 장면표 MTST
24
+  빅토리아의 어둠 장면표 DVST
25
+ 형용표    DT
26
26
   본체표 BT/부위표 PT
27
27
  감정표      FT
28
28
  직업표      JT
29
- 배드엔딩표  BET
29
+ 배드엔드표  BET
30
30
  랜덤 특기 결정표 RTT
31
31
  지정특기(폭력)표  (TVT)
32
- 지정특기(감정)표  (TET)
32
+ 지정특기(정서)표  (TET)
33
33
  지정특기(지각)표  (TPT)
34
34
  지정특기(기술)표  (TST)
35
35
  지정특기(지식)표  (TKT)
36
36
  지정특기(괴이)표  (TMT)
37
- 회화 중에 발생하는 공포표(CHT)
38
- 거리에서 조우하는 공포표(VHT)
37
+ 회화 중에 생겨나는 공포표(CHT)
38
+ 거리에서 마주치는 공포표(VHT)
39
39
  갑자기 찾아오는 공포표(IHT)
40
- 폐허에서 조우하는 공포표(RHT)
41
- 야외에서 조우하는 공포표(MHT)
42
- 정보 속에 숨어 있는 공포표(LHT)
40
+ 폐허에서 마주치는 공포표(RHT)
41
+ 야외에서 마주치는 공포표(MHT)
42
+ 정보 속에 숨어있는 공포표(LHT)
43
43
  조우표 도시 (ECT) 산림 (EMT) 해변 (EAT)/반응표 RET
44
- 야근 조우하는 공포표 OHT/야근 전화표 OPT/야근 씬표 OWT
44
+ 야근 호러 스케이프 OHT/야근 전화표 OPT/야근 장면표 OWT
45
45
  회사명 결정표1 CNT1/회사명 결정표2 CNT2/회사명 결정표3 CNT3
46
46
  ・D66 다이스 있음.
47
47
  INFO_MESSAGE_TEXT
@@ -0,0 +1,251 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class KamitsubakiCityUnderConstructionNarrative < Base
6
+ # ゲームシステムの識別子
7
+ ID = 'KamitsubakiCityUnderConstructionNarrative'
8
+
9
+ # ゲームシステム名
10
+ NAME = '神椿市建設中。NARRATIVE'
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = 'かみつはきしけんせつちゆうならていふ'
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ・可組(KA)
18
+  KA6 行動判定
19
+  KA8 技能ロール
20
+  KA10 特技ロール
21
+  KA12 Aロール
22
+
23
+ ・裏組(RI)
24
+  RI6 行動判定
25
+  RI8 技能ロール
26
+  RI10 特技ロール
27
+  RI12 Aロール
28
+
29
+ ・羽組(HA)
30
+  HA6 行動判定
31
+  HA8 技能ロール
32
+  HA10 特技ロール
33
+  HA12 Aロール
34
+
35
+ ・星組(SE)
36
+  SE6 行動判定
37
+  SE8 技能ロール
38
+  SE10 特技ロール
39
+  SE12 Aロール
40
+
41
+ ・狐組(CO)
42
+  CO6 行動判定
43
+  CO8 技能ロール
44
+  CO10 特技ロール
45
+  CO12 Aロール
46
+
47
+ ・GM用
48
+  GM6 (成否判定なし)
49
+  GM8 技能ロール
50
+  GM10 特技ロール
51
+  Q12 Qロール
52
+
53
+ ・存在証明 EXI<=x
54
+  存在証明の判定を行う
55
+  x: 存在値
56
+ INFO_MESSAGE_TEXT
57
+
58
+ def eval_game_system_specific_command(command)
59
+ roll_kumi(command) || roll_existence(command)
60
+ end
61
+
62
+ private
63
+
64
+ def roll_kumi(command)
65
+ table = TABLES[command]
66
+ unless table
67
+ return nil
68
+ end
69
+
70
+ return table.roll(@randomizer)
71
+ end
72
+
73
+ class KumiDice
74
+ def initialize(items)
75
+ @items = items.freeze
76
+ end
77
+
78
+ CRITICAL = "M"
79
+ FUMBLE = "Q"
80
+
81
+ def roll(randomizer)
82
+ dice = randomizer.roll_once(@items.length)
83
+ chosen = @items[dice - 1]
84
+
85
+ fumble = chosen == FUMBLE
86
+ critical = chosen == CRITICAL
87
+
88
+ result_tail =
89
+ if fumble
90
+ "ファンブル"
91
+ elsif critical
92
+ "マジック"
93
+ elsif !chosen.empty?
94
+ "成功"
95
+ else
96
+ "失敗"
97
+ end
98
+
99
+ Result.new.tap do |r|
100
+ r.critical = critical
101
+ r.fumble = fumble
102
+ r.condition = !chosen.empty? && !r.fumble?
103
+ r.text = [
104
+ "(D#{@items.length})",
105
+ dice,
106
+ chosen.empty? ? nil : chosen,
107
+ result_tail
108
+ ].compact.join(" > ")
109
+ end
110
+ end
111
+ end
112
+
113
+ class KumiD6
114
+ def initialize(success_symbol)
115
+ @success_symbol = success_symbol
116
+ end
117
+
118
+ TABLE = ["裏", "羽", "星", "狐", "可", "Q"].freeze
119
+
120
+ def roll(randomizer)
121
+ dice = randomizer.roll_once(6)
122
+ chosen = TABLE[dice - 1]
123
+
124
+ Result.new.tap do |r|
125
+ unless @success_symbol.nil?
126
+ r.fumble = chosen == "Q"
127
+ r.condition = chosen == @success_symbol
128
+ end
129
+
130
+ result_tail =
131
+ if r.fumble?
132
+ "ファンブル"
133
+ elsif r.success?
134
+ "成功"
135
+ elsif r.failure?
136
+ "失敗"
137
+ end
138
+
139
+ r.text = [
140
+ "(D6)",
141
+ dice,
142
+ chosen,
143
+ result_tail
144
+ ].compact.join(" > ")
145
+ end
146
+ end
147
+ end
148
+
149
+ class QDice
150
+ def initialize(items)
151
+ @items = items.freeze
152
+ end
153
+
154
+ CRITICAL = "M"
155
+
156
+ def roll(randomizer)
157
+ dice = randomizer.roll_once(@items.length)
158
+ chosen = @items[dice - 1]
159
+
160
+ critical = chosen == CRITICAL
161
+
162
+ result_tail =
163
+ if critical
164
+ "マジック"
165
+ elsif !chosen.empty?
166
+ "成功"
167
+ else
168
+ "失敗"
169
+ end
170
+
171
+ Result.new.tap do |r|
172
+ r.critical = critical
173
+ r.condition = !chosen.empty?
174
+ r.text = [
175
+ "(D#{@items.length})",
176
+ dice.to_s,
177
+ chosen.empty? ? nil : chosen,
178
+ result_tail,
179
+ ].compact.join(" > ")
180
+ end
181
+ end
182
+ end
183
+
184
+ def roll_existence(command)
185
+ m = /^EXI<=(\d+)$/.match(command)
186
+ unless m
187
+ return nil
188
+ end
189
+
190
+ target = m[1].to_i
191
+ dice = @randomizer.roll_once(20)
192
+ Result.new.tap do |r|
193
+ r.critical = dice == 1
194
+ r.fumble = dice == 20
195
+ r.condition = (dice <= target && !r.fumble?) || r.critical?
196
+
197
+ result_tail =
198
+ if r.critical?
199
+ "M > マジック"
200
+ elsif r.fumble?
201
+ "Q > ファンブル"
202
+ elsif r.success?
203
+ "成功"
204
+ else
205
+ "失敗"
206
+ end
207
+
208
+ r.text = [
209
+ "(D20<=#{target})",
210
+ dice,
211
+ result_tail
212
+ ].join(" > ")
213
+ end
214
+ end
215
+
216
+ TABLES = {
217
+ "KA6" => KumiD6.new("可"),
218
+ "KA8" => KumiDice.new(["Q", "", "", "", "可", "可", "可", "M"]),
219
+ "KA10" => KumiDice.new(["Q", "", "", "可", "可", "可", "可", "可", "M", "M"]),
220
+ "KA12" => KumiDice.new(["Q", "", "", "可", "可", "可", "可", "可", "可", "可", "M", "M"]),
221
+
222
+ "RI6" => KumiD6.new("裏"),
223
+ "RI8" => KumiDice.new(["Q", "", "", "", "裏", "裏", "裏", "M"]),
224
+ "RI10" => KumiDice.new(["Q", "", "", "裏", "裏", "裏", "裏", "裏", "M", "M"]),
225
+ "RI12" => KumiDice.new(["M", "M", "裏", "裏", "裏", "裏", "裏", "裏", "裏", "", "", "Q"]),
226
+
227
+ "HA6" => KumiD6.new("羽"),
228
+ "HA8" => KumiDice.new(["Q", "", "", "", "羽", "羽", "羽", "M"]),
229
+ "HA10" => KumiDice.new(["Q", "", "", "羽", "羽", "羽", "羽", "羽", "M", "M"]),
230
+ "HA12" => KumiDice.new(["Q", "Q", "羽", "羽", "羽", "", "", "", "M", "M", "M", "M"]),
231
+
232
+ "SE6" => KumiD6.new("星"),
233
+ "SE8" => KumiDice.new(["Q", "", "", "", "星", "星", "星", "M"]),
234
+ "SE10" => KumiDice.new(["Q", "", "", "星", "星", "星", "星", "星", "M", "M"]),
235
+ "SE12" => KumiDice.new(["星", "", "星", "星", "M", "Q", "M", "星", "星", "星", "", "星"]),
236
+
237
+ "CO6" => KumiD6.new("狐"),
238
+ "CO8" => KumiDice.new(["Q", "", "", "", "狐", "狐", "狐", "M"]),
239
+ "CO10" => KumiDice.new(["Q", "", "", "狐", "狐", "狐", "狐", "狐", "M", "M"]),
240
+ "CO12" => KumiDice.new(["Q", "", "", "狐狐狐", "狐狐", "狐", "狐狐狐", "狐狐", "狐", "狐", "M", "M"]),
241
+
242
+ "GM6" => KumiD6.new(nil),
243
+ "GM8" => KumiDice.new(["Q", "", "", "", "W", "W", "W", "M"]),
244
+ "GM10" => KumiDice.new(["Q", "", "", "W", "W", "W", "W", "W", "M", "M"]),
245
+ "Q12" => QDice.new(["", "", "", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "M", "M"])
246
+ }.freeze
247
+
248
+ register_prefix("EXI", TABLES.keys)
249
+ end
250
+ end
251
+ end
@@ -13,7 +13,7 @@ module BCDice
13
13
  NAME = 'ニンジャスレイヤーTRPG'
14
14
 
15
15
  # ゲームシステム名の読みがな
16
- SORT_KEY = 'にんしやすれいやあRPG'
16
+ SORT_KEY = 'にんしやすれいやあTRPG'
17
17
 
18
18
  # ダイスボットの使い方
19
19
  HELP_MESSAGE = <<~MESSAGETEXT
@@ -38,6 +38,8 @@ module BCDice
38
38
 
39
39
  ・難易度
40
40
   KIDS=K,EASY=E,NORMAL=N,HARD=H,ULTRA HARD=UH 数字にも対応
41
+
42
+ ※上記コマンド群は『ニンジャスレイヤーTRPG コア・ルールブック』に対応していません。コア・ルールブックで遊ぶ場合には『ニンジャスレイヤーTRPG 2版』のコマンドを利用してください。
41
43
  MESSAGETEXT
42
44
 
43
45
  def initialize(command)