/src_bcdice/diceBot/ShinobiGami.rb

https://github.com/kaerucyan/DodontoF · Ruby · 488 lines · 432 code · 48 blank · 8 comment · 7 complexity · 3db926a2006ef934b47fc30880995e6d MD5 · raw file

  1. #--*-coding:utf-8-*--
  2. class ShinobiGami < DiceBot
  3. def initialize
  4. super
  5. @sendMode = 2
  6. @sortType = 1
  7. @d66Type = 2
  8. end
  9. def gameName
  10. 'シノビガミ'
  11. end
  12. def gameType
  13. "ShinobiGami"
  14. end
  15. def prefixs
  16. ['ST', 'FT', 'ET', 'WT', 'BT', 'CST', 'MST', 'DST', 'TST', 'NST', 'KST', 'TKST', 'GST', 'GWT', 'GAST', 'KYST', 'JBST', 'KFT', 'KWT', 'MT', 'RTT']
  17. end
  18. def getHelpMessage
  19. info = <<INFO_MESSAGE_TEXT
  20. 各種表
  21.  (無印)シーン表 STファンブル表 FT感情表 ET
  22.    変調表 WT戦場表 BT異形表 MTランダム特技決定表 RTT
  23.  ()都市シーン表 CST館シーン表  MST出島シーン表 DST
  24.  ()トラブルシーン表 TST日常シーン表 NST回想シーン表 KST
  25.  ()東京シーン表 TKST戦国シーン表 GST
  26.  ()戦国変調表 GWT
  27.  (リプレイ戦12)学校シーン表 GAST京都シーン表 KYST
  28.    神社仏閣シーン表 JBST
  29.  ()怪ファンブル表 KFT怪変調表 KWT
  30.  その他秋空に雪舞えばシーン表 AKST災厄シーン表 CLST
  31.   出島EXシーン表 DXST斜歯ラボシーン表 HLST
  32.   夏の終わりシーン表 NTST培養プラントシーン表  PLST
  33. D66ダイスあり
  34. INFO_MESSAGE_TEXT
  35. end
  36. def check_2D6(total_n, dice_n, signOfInequality, diff, dice_cnt, dice_max, n1, n_max) # ゲーム別成功度判定(2D6)
  37. return '' unless( signOfInequality == ">=")
  38. if(dice_n <= 2)
  39. return " > ファンブル"
  40. elsif(dice_n >= 12)
  41. return " > スペシャル(生命点1点か変調1つ回復)"
  42. elsif(total_n >= diff)
  43. return " > 成功"
  44. else
  45. return " > 失敗"
  46. end
  47. end
  48. def rollDiceCommand(command)
  49. string = command.upcase
  50. case string
  51. when /((\w)*ST)/i # シーン表
  52. return sinobigami_scene_table(string)
  53. when /([K]*FT)/i # ファンブル表
  54. return sinobigami_fumble_table(string)
  55. when /(ET)/i # 感情表
  56. return sinobigami_emotion_table()
  57. when /([GK]?WT)/i # 変調表
  58. return sinobigami_wrong_table(string)
  59. when /(BT)/i # 戦場表
  60. return sinobigami_battlefield_table()
  61. when /((\w)*RTT)/i # ランダム特技決定表
  62. return sinobigami_random_skill_table()
  63. when /(MT)/i # 異形表
  64. return sinobigami_metamorphose_table()
  65. end
  66. return nil
  67. end
  68. # シーン表
  69. def sinobigami_scene_table(string)
  70. type = ""
  71. table = []
  72. case string
  73. when /CST/i
  74. type = '都市'
  75. table = [
  76. 'シャワーを浴び、浴槽に疲れた身体を沈める。時には、癒しも必要だ。',
  77. '閑静な住宅街。忍びの世とは関係のない日常が広がっているようにも見えるが……それも錯覚なのかもしれない',
  78. '橋の上にたたずむ。川の対岸を結ぶ境界点。さて、どちらに行くべきか……?',
  79. '人気のない公園。野良猫が一匹、遠くからあなたを見つめているような気がする。',
  80. '至福の一杯。この一杯のために生きている……って、いつも言ってるような気がするなぁ。',
  81. '無機質な感じのするオフィスビル。それは、まるで都市の墓標のようだ。',
  82. '古びた劇場。照明は落ち、あなたたちのほかに観客の姿は見えないが……。',
  83. '商店街を歩く。人ごみに混じって、不穏な気配もちらほら感じるが……。',
  84. 'ビルの谷間を飛び移る。この街のどこかに、「アレ」は存在するはずなのだが……。',
  85. '見知らぬ天井。いつの間にか眠っていたのだろうか?それにしてもここはどこだ?',
  86. '廃屋。床には乱雑に壊れた調度品や器具が転がっている。',
  87. ]
  88. when /MST/i
  89. type = '館'
  90. table = [
  91. 'どことも知れぬ暗闇の中。忍びの者たちが潜むには、おあつらえ向きの場所である。',
  92. '洋館の屋根の上。ここからなら、館の周りを一望できるが……。',
  93. '美しい庭園。丹精こめて育てられたであろう色とりどりの花。そして、綺麗に刈り込まれた生垣が広がっている。',
  94. 'あなたは階段でふと足を止めた。何者かの足音が近づいているようだ。',
  95. 'あなたに割り当てられた寝室。ベッドは柔らかく、調度品も高級なものばかりだが……。',
  96. 'エントランスホール。古い柱時計の時報が響く中、館の主の肖像画が、あなたを見下ろしている。',
  97. '食堂。染み一つないテーブルクロスに覆われた長い食卓。その上は年代物の燭台や花で飾られている。',
  98. '長い廊下の途中。この屋敷は広すぎて、迷子になってしまいそうだ。',
  99. '戯れに遊戯室へ入ってみた。そこには撞球台やダーツの的、何組かのトランプが散らばっているポーカーテーブルがあった。',
  100. 'かび臭い図書室。歴代の館の主たちの記録や、古今東西の名著が、ぎっしりと棚に並べられている。',
  101. '一族の納骨堂がある。冷気と瘴気に満ちたその場所に、奇妙な叫びが届く。遠くの鳥のさえずりか?それとも死者の恨みの声か……?',
  102. ]
  103. when /DST/i
  104. type = '出島'
  105. table = [
  106. '迷宮街。いつから囚われてしまったのだろう?何重にも交差し、曲がりくねった道を歩き続ける。このシーンの登場人物は《記憶術》で判定を行わなければならない。成功すると、迷宮の果てで好きな忍具を一つ獲得する。失敗すると、行方不明の変調を受ける。',
  107. '幻影城。訪れた者の過去や未来の風景を見せる場所。このシーンの登場人物は、《意気》の判定を行うことができる。成功すると、自分の持っている【感情】を好きな何かに変更することができる。',
  108. '死者たちの行進。無念の死を遂げた者たちが、仲間を求めて彷徨らっている。このシーンの登場人物は《死霊術》で判定を行わなければならない。失敗すると、ランダムに変調を一つを受ける。',
  109. 'スラム。かろうじて生き延びている人たちが肩を寄せ合い生きているようだ。ここなら辛うじて安心できるかも……。',
  110. '落書きだらけのホテル。その周囲には肌を露出させた女や男たちが、媚態を浮かべながら立ち並んでいる。',
  111. '立ち並ぶ廃墟。その影から、人とも怪物ともつかぬ者の影が、あなたの様子をじっとうかがっている。',
  112. '薄汚い路地裏。巨大な黒犬が何かを貪っている。あなたの気配を感じて黒犬は去るが、そこに遺されていたのは……。',
  113. '昏い酒場。バーテンが無言でグラスを磨き続けている。あなたの他に客の気配はないが……。',
  114. '地面を覆う無数の瓦礫。その隙間から暗黒の瘴気が立ち昇る。このシーンの登場人物は《生存術》で判定を行わなければならない。失敗すると、好きな【生命力】を1点失う。',
  115. '熱気溢れる市場。武器や薬物などを売っているようだ。商人たちの中には、渡来人の姿もある。このシーンの登場人物は、《経済力》で判定を行うことができる。成功すると、好きな忍具を一つ獲得できる。',
  116. '目の前に渡来人が現れる。渡来人はあなたに興味を持ち、襲い掛かってくる。このシーンの登場人物は《刀術》で判定を行わなければならない。成功すると、渡来人を倒し、好きな忍具を一つ獲得する。失敗すると、3点の接近戦ダメージを受ける。',
  117. ]
  118. when /TST/i
  119. type = 'トラブル'
  120. table = [
  121. '同行者とケンカしてしまう。うーん、気まずい雰囲気。',
  122. 'バシャ! 同行者のミスでずぶ濡れになってしまう。……冷たい。',
  123. '敵の気配に身を隠す。……すると、同行者の携帯が着信音を奏で始める。「……えへへへへ」じゃない!',
  124. '同行者の空気の読めない一言。場が盛大に凍り付く。まずい。何とかしないと。',
  125. '危機一髪! 同行者を死神の魔手から救い出す。……ここも油断できないな。',
  126. '同行者が行方不明になる。アイツめ、どこへ逃げたッ!',
  127. 'ずて────ん! あいたたたた……同行者がつまずいたせいで、巻き込まれて転んでしまった。',
  128. '同行者のせいで、迷子になってしまう。困った。どこへ行くべきか。',
  129. '「どこに目つけてんだ、てめぇ!」同行者がチンピラにからまれる。うーん、助けに入るべきか。',
  130. '! 油断していたら、同行者に自分の恥ずかしい姿を見られてしまう。……一生の不覚!',
  131. '同行者が不意に涙を流す。……一体、どうしたんだろう?',
  132. ]
  133. when /NST/i
  134. type = '日常'
  135. table = [
  136. 'っくしゅん! ……うーん、風邪ひいたかなあ。お見舞いに来てくれたんだ。ありがとう。',
  137. '目の前のアイツは、見違えるほどドレスアップしていた。……ゆっくりと大人な時間が過ぎていく。',
  138. 'おいしそうなスイーツを食べることになる。たまには甘いものを食べて息抜き息抜き♪',
  139. 'ふわわわわ、いつの間にか寝ていたようだ。……って、あれ? お前、いつからそこにいたッ!!',
  140. '買い物帰りの友人と出会う。方向が同じなので、しばらく一緒に歩いていると、思わず会話が盛り上がる。',
  141. 'コンビニ。商品に手を伸ばしたら、同時にその商品をとろうとした別の人物と手が触れあう。なんという偶然!',
  142. 'みんなで食卓を囲むことになる。鍋にしようか? それとも焼き肉? お好み焼きなんかもい〜な〜♪ ',
  143. 'どこからか楽しそうな歌声が聞こえてくる。……って、あれ? 何でお前がこんなところに?',
  144. '野良猫に餌をやる。……猫はのどを鳴らし、すっかりあなたに甘えているようだ。',
  145. '「……! ……? ……♪」テレビは、なにやら楽しげな場面を映している。あら。もう、こんな時間か。',
  146. '面白そうなゲーム! 誰かと対戦することになる。GMは、「戦術」からランダムに特技1つを選ぶ。このシーンに登場しているキャラクターは、その特技の判定を行う。成功した場合、同じシーンに登場しているキャラクターを1人を選び、そのキャラクターの自分に対する【感情】を好きなものに変更する(何の【感情】も持っていない場合、好きな【感情】を芽生えさせる)。',
  147. ]
  148. when /TKST/i
  149. type = '東京'
  150. table = [
  151. 'お台場、臨界副都心。デート中のカップルや観光客が溢れている。',
  152. '靖国神社。東京の中とも思えぬ、緑で満ちた場所だ。今は観光客もおらず、奇妙に静かだ……。',
  153. '東京大学の本部キャンパス。正門から伸びる銀杏並木の道を学生や教職員がのんびりと歩いている。道の向こうには安田講堂が見える。',
  154. '山手線の中。乗車率200%を超える、殺人的な通勤ラッシュ真っ最中。この中でできることは限られている……。',
  155. '霞が関。この場に集う情報は、忍者にとっても価値が高いものだ。道を行く人々の中にも、役人や警察官が目につく。',
  156. '渋谷駅前の雑踏。大型屋外ヴィジョンが見下ろす中で、大勢の若者たちが行き交っている。',
  157. '夜の新宿歌舞伎町。酔っぱらったサラリーマン、華やかな夜の蝶、明らかに筋ものと判る男、外国人などの様々な人間と、どこか危険な雰囲気に満ちている。',
  158. '新宿都庁。摩天楼が林立するビル街の下、背広姿の人々が行き交う。',
  159. '神田古書街。多くの古書店が軒を連ねている。軒先に積まれた本の山にさえ、追い求める謎や、深遠な知識が埋もれていそうな気がする。',
  160. '山谷のドヤ街。日雇い労働者が集う管理宿泊施設の多いこの場所は、身を隠すにはうってつけだ。',
  161. '東京スカイツリーの上。この場所からならば東京の町が一望できる。',
  162. ]
  163. when /KST/i
  164. type = '回想'
  165. table = [
  166. '闇に蔓延する忍びの気配。あのときもそうだった。手痛い失敗の記憶。今度こそ、うまくやってみせる。',
  167. '甘い口づけ。激しい抱擁。悲しげな瞳……一夜の過ちが思い返される。',
  168. '記憶の中でゆらめくセピア色の風景。……見覚えがある。そう、私はここに来たことがあるはずだッ!!',
  169. '目の前に横たわる死体。地面に広がっていく。あれは、私のせいだったのだろうか……?',
  170. 'アイツとの大切な約束を思い出す。守るべきだった約束。果たせなかった約束。',
  171. '助けを求める右手が、あなたに向かってまっすぐ伸びる。あなたは、必死でその手を掴もうとするが、あと一歩のところで、その手を掴み損ねる……。',
  172. 'きらきらと輝く笑顔。今はもう喪ってしまった、大事だったアイツの笑顔。',
  173. '恐るべき一撃! もう少しで命を落とすところだった……。しかし、あの技はいまだ見切れていない。',
  174. '幼い頃の記憶。仲の良かったあの子。そういえば、あの子は、どこに行ってしまったのだろう。もしかして……。',
  175. '「……ッ!!」激しい口論。ひどい別れ方をしてしまった。あんなことになると分かっていたら……。',
  176. '懐の中のお守りを握りしめる。アイツにもらった、大切な思い出の品。「兵糧丸」を1つ獲得する。',
  177. ]
  178. when /GST/i
  179. type = '戦国'
  180. table = [
  181. '炎上する山城。人々の悲鳴や怒号がこだましている。どうやら、敵対する武将による焼き討ちらしい。今ならば、あるいは……。',
  182. '荒れ果てた村。カラスの不吉な鳴き声が聞こえてくる中で、やせ細った村人たちが、うつろな瞳でこちらを伺っている。',
  183. '人気のない山道。ただ鳥の声だけが響いている。通りがかった人を襲うのには、好都合かもしれない。',
  184. '乾いた骸の転がる合戦後。生き物の姿はなく、草の一本さえも生えていない。落ち武者たちの恨みがましい声が聞こえてきそうだ……。',
  185. '不気味な気配漂う森の中。何か得体のしれぬものが潜んでいそうだ。',
  186. '荒れ果てた廃寺。ネズミがカサカサと這いまわる本堂の中を、残された本尊が見下ろしている。',
  187. '街道沿いの宿場町。戦から逃げてきたらしい町人や、商売の種を探す商人、目つきの鋭い武士などが行き交い、賑わっている。',
  188. '城の天守閣のさらに上。強く吹く風が、雲を流していく。',
  189. '館の天井裏。この下では今、何が行われているのか……。',
  190. '合戦場に設けられた陣内。かがり火がたかれ、武者たちが酒宴を行っている。',
  191. '戦の真っただ中にある合戦場。騎馬にまたがった鎧武者が駆け抜けていく。勝者となるのは、いずれの陣営だろうか。',
  192. ]
  193. when /GAST/i
  194. type = '学校'
  195. table = [
  196. '清廉な気配が漂う森の中。鳥のさえずりやそよ風が木々を通りすぎる音が聞こえる。',
  197. '学校のトイレ。……なんだか少しだけ怖い気がする。',
  198. '誰もいない体育館。バスケットボールがころころと転がっている。',
  199. '校舎の屋上。一陣の風が吹き、衣服をたなびかせる。',
  200. '校庭。体操服姿の生徒たちが走っている。',
  201. '廊下。休憩時間か放課後か。生徒たちが、楽しそうにはしゃいでいる。',
  202. '学食のカフェテリア。生徒たちがまばらに席につき、思い思い談笑している。',
  203. '静かな授業中の風景。しかし、忍術を使って一般生徒に気取られない会話をしている忍者たちもいる。',
  204. '校舎と校舎をつなぐ渡り廊下。あなた以外の気配はないが……。',
  205. '特別教室。音楽室や理科室にいるのってなんか楽しいよね。',
  206. 'プール。水面が、ゆらゆら揺れている。',
  207. ]
  208. when /KYST/i
  209. type = '京都'
  210. table = [
  211. '夜の街並み。神社仏閣はライトアップされ、にぎやかな酔客が通りを埋める。昼間とはまた違った景色が広がっている。',
  212. '京都駅ビル。その屋上は、京都市で最も高く、周囲を一望できる。',
  213. '旅館で一休み。……のはずが、四方山話に花が咲く。',
  214. '鴨川のあたりを歩いている。カップルが均等に距離を置いて座っているのが面白い。',
  215. '京都はどこにでもおみやげ物屋があるなぁ。さて、あいつに何を買ってやるべきか……?',
  216. '「神社仏閣シーン表(JBST)」で決定。',
  217. '新京極でお買い物。アーケードには、新旧様々な店が建ち並ぶ。',
  218. '大学が近くにあるのかな? 安い定食屋や古本屋、ゲームセンターなどが軒を連ねる学生街。京都はたくさん大学があるなぁ。',
  219. '静かな竹林。凛とした気配が漂う。',
  220. '祇園。時折、しずしずと歩く舞妓さんとすれ違う。雰囲気のある町並みだ。',
  221. '一般公開された京都御所の中を歩く。昼間だというのに人通りはあまりなく、何だか少し寂しい気持ち。',
  222. ]
  223. when /JBST/i
  224. type = '神社仏閣'
  225. table = [
  226. '清明神社。一条戻り橋を越えたところにある小さな社。陰陽師に憧れる女性たちの姿が目立つ。',
  227. '東寺。東寺真言宗総本山。密教独特の厳しい気配が漂う。',
  228. '平安神宮。大鳥居を白無垢の花嫁行列がくぐり抜けていくのが見える。どうやら結婚式のようだ。',
  229. '慈照寺――通称、銀閣寺。室町後期の東山文化を代表する建築である。錦鏡池を囲む庭園には、物思いにふける観光客の姿が……。',
  230. '鹿苑寺――通称、金閣寺。室町前期の北山文化を代表する建築である。鏡湖池に映る逆さ金閣には、強力な「魔」を封印していると言うが……?',
  231. '三十三間堂。荘厳な本堂に立ち並ぶ千一体の千手観音像は圧巻。',
  232. '清水寺。清水坂を越え、仁王門を抜けると、本堂――いわゆる清水の舞台にたどり着く。そこからは、音羽の滝や子安塔が見える。',
  233. '八坂神社。祇園さんの名前で知られるにぎやかな神社。舞妓さんの姿もちらほら。',
  234. '伏見稲荷。全国約四万社の稲荷神社の総本宮。稲荷山に向かって立ち並ぶ約一万基の鳥居は、まるで異界へと続いているかのようだ……。',
  235. '化野念仏寺。無数の石塔、石仏が立ち並ぶ景色は、どこか荒涼としている……。',
  236. '六道珍皇寺。小野篁が冥界に通ったとされる井戸のある寺。この辺りは「六道の辻」と呼ばれ、不思議な伝説が数多く残っている。',
  237. ]
  238. else
  239. table = [
  240. '血の臭いがあたりに充満している。何者かの戦いがあった気配。 いや?まだ戦いは続いているのだろうか?',
  241. 'これは……夢か? もう終わったはずの過去。しかし、それを忘れることはできない。',
  242. '眼下に広がる街並みを眺める。ここからなら街を一望できるが……。',
  243. '世界の終わりのような暗黒。暗闇の中、お前達は密やかに囁く。',
  244. '優しい時間が過ぎていく。影の世界のことを忘れてしまいそうだ。',
  245. '清廉な気配が漂う森の中。鳥の囀りや、そよ風が樹々を通り過ぎる音が聞こえる。',
  246. '凄まじい人混み。喧噪。影の世界のことを知らない無邪気な人々の手柄話や無駄話が騒がしい。',
  247. '強い雨が降り出す。人々は、軒を求めて、大慌てて駆けだしていく。',
  248. '大きな風が吹き荒ぶ。髪の毛や衣服が大きく揺れる。何かが起こりそうな予感……',
  249. '酔っぱらいの怒号。客引きたちの呼び声。女たちの嬌声。いつもの繁華街の一幕だが。',
  250. '太陽の微笑みがあなたを包み込む。影の世界の住人には、あまりにまぶしすぎる。',
  251. ]
  252. end
  253. get_sinobigami_2d6_scene_table_output(type, table)
  254. end
  255. def get_sinobigami_2d6_scene_table_output(sceneType, table)
  256. total_n, dice_dmy = roll(2, 6)
  257. index = total_n - 2
  258. text = table[index]
  259. return '1' if( text.nil? )
  260. output = "#{sceneType}シーン表(#{total_n}) > #{ text }"
  261. return output
  262. end
  263. def get_sinobigami_1d6_table_output(tableName, table)
  264. total_n, dice_dmy = roll(1, 6)
  265. index = total_n - 1
  266. text = table[index]
  267. return '1' if( text.nil? )
  268. output = "#{tableName}(#{total_n}) > #{text}"
  269. return output
  270. end
  271. # ファンブル表
  272. def sinobigami_fumble_table(string)
  273. table = []
  274. type = ''
  275. case string
  276. when /KFT/
  277. type = '怪'
  278. table = [
  279. '何か調子がおかしい。そのサイクルの間、すべての行為判定にマイナス1の修正がつく。',
  280. 'しまった! 好きな忍具を1つ失ってしまう。',
  281. '情報が漏れる! あなた以外のキャラクターは、あなたの持っている【秘密】か【居所】の中から、好きなものをそれぞれ一つ知ることができる。',
  282. '油断した! 術の制御に失敗し、好きな【生命力】を1点失う。',
  283. '敵の陰謀か? 罠にかかり、ランダムに選んだ変調一つを受ける。変調は、変調表で決定すること。',
  284. 'ふう。危ないところだった。特に何も起こらない。',
  285. ]
  286. else
  287. table = [
  288. '何か調子がおかしい。そのサイクルの間、すべての行為判定にマイナス1の修正がつく。',
  289. 'しまった! 好きな忍具を1つ失ってしまう。',
  290. '情報が漏れる! このゲームであなたが獲得した【秘密】は、他のキャラクター全員の知るところとなる。',
  291. '油断した! 術の制御に失敗し、好きな【生命力】を1点失う。',
  292. '敵の陰謀か? 罠にかかり、ランダムに選んだ変調1つを受ける。変調は、変調表で決定すること。',
  293. 'ふう。危ないところだった。特に何も起こらない。',
  294. ]
  295. end
  296. return get_sinobigami_1d6_table_output("#{type}ファンブル表", table)
  297. end
  298. # 感情表
  299. def sinobigami_emotion_table()
  300. table = [
  301. '共感(プラス)/不信(マイナス)',
  302. '友情(プラス)/怒り(マイナス)',
  303. '愛情(プラス)/妬み(マイナス)',
  304. '忠誠(プラス)/侮蔑(マイナス)',
  305. '憧憬(プラス)/劣等感(マイナス)',
  306. '狂信(プラス)/殺意(マイナス)',
  307. ]
  308. return get_sinobigami_1d6_table_output("感情表", table)
  309. end
  310. # 変調表
  311. def sinobigami_wrong_table(string)
  312. table = []
  313. type = ''
  314. case string
  315. when /GWT/
  316. type = '戦国'
  317. table = [
  318. '催眠:戦闘に参加した時、戦闘開始時、もしくはこの変調を受けた時に【生命力】を1点減少しないと、戦闘から脱落する。サイクル終了時に〈意気〉判定し成功すると無効化。',
  319. '火達磨:ファンブル値が1上昇し、ファンブル時に1点の近接ダメージを受ける。シーン終了時に無効化。',
  320. '猛毒:戦闘に参加した時、ラウンドの終了時にサイコロを1つ振る(飢餓と共用)。奇数だったら【生命力】を1減少。サイクル終了時に〈毒術〉判定し成功すると無効化。',
  321. '飢餓:戦闘に参加した時、ラウンドの終了時にサイコロを1つ振る(猛毒と共用)。偶数だったら【生命力】を1減少。サイクル終了時に〈兵糧術〉判定し成功すると無効化。',
  322. '残刃:回復判定、忍法、背景、忍具の効果による【生命力】回復無効。サイクル終了時に〈拷問術〉判定し成功すると無効化。',
  323. '野望:命中判定に+1、それ以外の判定に-1。サイクル終了時に〈憑依術〉判定し成功すると無効化。',
  324. ]
  325. when /KWT/
  326. type = '怪'
  327. table = [
  328. '故障:すべての忍具が使用不能になる。この効果は累積しない。各サイクルの終了時に、《絡繰術》で行為判定を行い、成功するとこの変調は無効化される。',
  329. 'マヒ:修得している特技の中からランダムに一つを選び、その特技が使用不能になる。この効果は、修得している特技の数だけ累積する。各サイクルの終了時に、《身体操術l》で行為判定を行い、成功するとこの変調はすべて無効化される。',
  330. '重傷:命中判定、情報判定、感情判定を行うたびに、接近戦ダメージを1点受ける。この効果は累積しない。各サイクルの終了時に、《生存術》で行為判定を行い、成功するとこの変調は無効化される。',
  331. '行方不明:メインフェイズ中、自分以外がシーンプレイヤーのシーンに登場することができなくなる。この効果は累積しない。各サイクルの終了時に、《経済力》で行為判定を行い、成功するとこの変調は無効化される。',
  332. '忘却:修得している【感情】の中からランダムに一つを選び、その【感情】を持っていないものとして扱う。この効果は、修得している【感情】の数だけ累積する。各サイクルの終了時に、《記憶術》で行為判定を行い、成功するとこの変調はすべて無効化される。',
  333. '呪い:修得している忍法の中からランダムに一つを選び、その忍法を修得していないものとして扱う。この効果は、修得している忍法の数だけ累積する。各サイクルの終了時に、《呪術》で行為判定を行い、成功するとこの変調はすべて無効化される。',
  334. ]
  335. else
  336. table = [
  337. '故障:すべての忍具が使用不能。1サイクルの終了時に、《絡繰術》で判定を行い、成功するとこの効果は無効化される。',
  338. 'マヒ:修得済み特技がランダムに1つ使用不能になる。1サイクルの終了時に、《身体操術》で成功するとこの効果は無効化される。',
  339. '重傷:次の自分の手番に行動すると、ランダムな特技分野1つの【生命力】に1点ダメージ。1サイクルの終了時に、《生存術》で成功すると無効化される。',
  340. '行方不明:その戦闘終了後、メインフェイズ中に行動不可。1サイクルの終了時に、《経済力》で成功すると無効化される。',
  341. '忘却:修得済み感情がランダムに1つ使用不能。1サイクルの終了時に、《記憶術》で成功すると無効化される。',
  342. '呪い:修得済み忍法がランダムに1つ使用不能。1サイクルの終了時に、《呪術》で成功すると無効化される。',
  343. ]
  344. end
  345. return get_sinobigami_1d6_table_output("#{type}変調表", table)
  346. end
  347. # 戦場表
  348. def sinobigami_battlefield_table()
  349. table = [
  350. '平地:特になし。',
  351. '水中:海や川や、プール、血の池地獄など。この戦場では、回避判定に-2の修正がつく。',
  352. '高所:ビルの谷間や樹上、断崖絶壁など。この戦場でファンブルすると1点のダメージを受ける。',
  353. '悪天候:嵐や吹雪、ミサイルの雨など。この戦場では、すべての攻撃忍法の間合が1上昇する。',
  354. '雑踏:人混みや教室、渋滞中の車道など。この戦場では、行為判定のとき、2D6の目がプロット値+1以下だとファンブルする。',
  355. '極地:宇宙や深海、溶岩、魔界など。ラウンドの終わりにGMが1D6を振り、経過ラウンド以下なら全員1点ダメージ。ここから脱落したものは変調表を適用する。',
  356. ]
  357. return get_sinobigami_1d6_table_output("戦場表", table)
  358. end
  359. # 指定特技ランダム決定表
  360. def sinobigami_random_skill_table()
  361. output = '1'
  362. type = 'ランダム'
  363. skillTableFull = [
  364. ['器術', ['絡繰術','火術','水術','針術','仕込み','衣装術','縄術','登術','拷問術','壊器術','掘削術']],
  365. ['体術', ['騎乗術','砲術','手裏剣術','手練','身体操術','歩法','走法','飛術','骨法術','刀術','怪力']],
  366. ['忍術', ['生存術','潜伏術','遁走術','盗聴術','腹話術','隠形術','変装術','香術','分身の術','隠蔽術','第六感']],
  367. ['謀術', ['医術','毒術','罠術','調査術','詐術','対人術','遊芸','九ノ一の術','傀儡の術','流言の術','経済力']],
  368. ['戦術', ['兵糧術','鳥獣術','野戦術','地の利','意気','用兵術','記憶術','見敵術','暗号術','伝達術','人脈']],
  369. ['妖術', ['異形化','召喚術','死霊術','結界術','封術','言霊術','幻術','瞳術','千里眼の術','憑依術','呪術']],
  370. ]
  371. skillTable, total_n = get_table_by_1d6(skillTableFull)
  372. tableName, skillTable = skillTable
  373. skill, total_n2 = get_table_by_2d6(skillTable)
  374. output = "#{type}指定特技表(#{total_n},#{total_n2}) > 『#{tableName}』#{skill}"
  375. return output
  376. end
  377. # 異形表
  378. def sinobigami_metamorphose_table()
  379. output = '1'
  380. tableName = "異形表"
  381. table = [
  382. '1D6を振り、「妖魔忍法表A」で、ランダムに忍法の種類を決定する。妖魔化している間、その妖魔忍法を修得しているものとして扱う。この異形は、違う種類の妖魔忍法である限り、違う異形として扱う。',
  383. '1D6を振り、「妖魔忍法表B」で、ランダムに忍法の種類を決定する。妖魔化している間、その妖魔忍法を修得しているものとして扱う。この異形は、違う種類の妖魔忍法である限り、違う異形として扱う。',
  384. '1D6を振り、「妖魔忍法表C」で、ランダムに忍法の種類を決定する。妖魔化している間、その妖魔忍法を修得しているものとして扱う。この異形は、違う種類の妖魔忍法である限り、違う異形として扱う。',
  385. '妖魔化している間、戦闘中、1ラウンドに使用できる忍法のコストが、自分のプロット値+3点になり、装備忍法の【揺音】を修得する。',
  386. '妖魔化している間、【接近戦攻撃】によって与える接近戦ダメージが2点になる。',
  387. '妖魔化している間、このキャラクターの攻撃に対する回避判定と、このキャラクターの奥義に対する奥義破り判定にマイナス1の修正がつく。'
  388. ]
  389. total_n, dice_dmy = roll(1, 6)
  390. text = table[total_n - 1]
  391. return '1' if( text.nil? )
  392. output = "#{tableName}(#{total_n}) > #{text}"
  393. if (total_n > 3)
  394. return output
  395. end
  396. powerTable = []
  397. powerType = ""
  398. powerPage = ""
  399. case total_n
  400. when 1
  401. powerType = "妖魔忍法表A"
  402. powerPage = "(怪p.252)"
  403. powerTable = [
  404. '【震々】',
  405. '【神隠】',
  406. '【夜雀】',
  407. '【猟犬】',
  408. '【逢魔時】',
  409. '【狂骨】',
  410. ]
  411. when 2
  412. powerType = "妖魔忍法表B"
  413. powerPage = "(怪p.253)"
  414. powerTable = [
  415. '【野衾】',
  416. '【付喪神】',
  417. '【見越】',
  418. '【木魂】',
  419. '【鵺】',
  420. '【生剥】',
  421. ]
  422. when 3
  423. powerType = "妖魔忍法表C"
  424. powerPage = "(怪p.254)"
  425. powerTable = [
  426. '【百眼】',
  427. '【呑口】',
  428. '【荒吐】',
  429. '【怨霊】',
  430. '【鬼火】',
  431. '【蛭子】',
  432. ]
  433. end
  434. total_n, dice_dmy = roll(1, 6)
  435. text = powerTable[total_n - 1]
  436. return '1' if( text.nil? )
  437. output += " #{powerType} > #{ text }#{ powerPage }"
  438. return output
  439. end
  440. end