bcdice 3.14.0 → 3.16.1

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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +88 -0
  3. data/i18n/Cthulhu/zh_hant.yml +1 -1
  4. data/i18n/CyberpunkRed/ko_kr.yml +389 -0
  5. data/i18n/DoubleCross/ja_jp.yml +53 -0
  6. data/i18n/DoubleCross/ko_kr.yml +52 -0
  7. data/i18n/Emoklore/ko_kr.yml +7 -0
  8. data/i18n/FutariSousa/ja_jp.yml +138 -138
  9. data/i18n/KillDeathBusiness/ja_jp.yml +198 -0
  10. data/i18n/MagicaLogia/ko_kr.yml +2 -2
  11. data/i18n/MonotoneMuseum/ko_kr.yml +227 -0
  12. data/i18n/SkynautsBouken/ja_jp.yml +28 -28
  13. data/i18n/SkynautsBouken/ko_kr.yml +114 -0
  14. data/i18n/StratoShout/ko_kr.yml +102 -102
  15. data/i18n/zh_hant.yml +5 -0
  16. data/lib/bcdice/game_system/Aionia.rb +131 -0
  17. data/lib/bcdice/game_system/Arianrhod_Korean.rb +2 -0
  18. data/lib/bcdice/game_system/ArknightsFan.rb +245 -87
  19. data/lib/bcdice/game_system/BlackJacket_Korean.rb +244 -0
  20. data/lib/bcdice/game_system/CharonSanctions.rb +112 -0
  21. data/lib/bcdice/game_system/Cthulhu7th.rb +1 -1
  22. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional/full_auto.rb +293 -0
  23. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional/rollable.rb +43 -0
  24. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +470 -306
  25. data/lib/bcdice/game_system/CyberpunkRed.rb +1 -2
  26. data/lib/bcdice/game_system/CyberpunkRed_Korean.rb +66 -0
  27. data/lib/bcdice/game_system/DoubleCross.rb +18 -1
  28. data/lib/bcdice/game_system/DoubleCross_Korean.rb +5 -1
  29. data/lib/bcdice/game_system/EdgeFlippers.rb +315 -0
  30. data/lib/bcdice/game_system/Emoklore_Korean.rb +42 -0
  31. data/lib/bcdice/game_system/FullFace.rb +25 -3
  32. data/lib/bcdice/game_system/FutariSousa.rb +17 -5
  33. data/lib/bcdice/game_system/Garactier.rb +479 -0
  34. data/lib/bcdice/game_system/GardenOrder.rb +390 -9
  35. data/lib/bcdice/game_system/GundogRevised.rb +8 -8
  36. data/lib/bcdice/game_system/JuinKansen_Korean.rb +251 -0
  37. data/lib/bcdice/game_system/KillDeathBusiness.rb +155 -3
  38. data/lib/bcdice/game_system/KimitoYell.rb +568 -0
  39. data/lib/bcdice/game_system/Magius.rb +125 -0
  40. data/lib/bcdice/game_system/Magius_3rdNewTokyoCity.rb +62 -0
  41. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +122 -2
  42. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
  43. data/lib/bcdice/game_system/NSSQ.rb +17 -9
  44. data/lib/bcdice/game_system/NervWhitePaper.rb +129 -0
  45. data/lib/bcdice/game_system/Revulture_Korean.rb +125 -0
  46. data/lib/bcdice/game_system/RogueLikeHalf.rb +198 -0
  47. data/lib/bcdice/game_system/RuneQuestRoleplayingInGlorantha.rb +16 -13
  48. data/lib/bcdice/game_system/ShinobiGami.rb +73 -43
  49. data/lib/bcdice/game_system/SkynautsBouken.rb +4 -4
  50. data/lib/bcdice/game_system/SkynautsBouken_Korean.rb +57 -0
  51. data/lib/bcdice/game_system/StratoShout_Korean.rb +1 -1
  52. data/lib/bcdice/game_system/SwordWorld.rb +4 -0
  53. data/lib/bcdice/game_system/SwordWorld2_5.rb +3 -2
  54. data/lib/bcdice/game_system/TensaiGunshiNiNaro.rb +51 -17
  55. data/lib/bcdice/game_system/TheIndieHack.rb +82 -0
  56. data/lib/bcdice/game_system/TorgEternity.rb +35 -6
  57. data/lib/bcdice/game_system/Ventangle_Korean.rb +130 -0
  58. data/lib/bcdice/game_system/WoW.rb +161 -0
  59. data/lib/bcdice/game_system/YankeeMustDie.rb +192 -0
  60. data/lib/bcdice/game_system/YearZeroEngine.rb +225 -28
  61. data/lib/bcdice/game_system/YuMyoKishi.rb +141 -0
  62. data/lib/bcdice/game_system/meikyu_kingdom_basic/atoz_table.rb +1184 -0
  63. data/lib/bcdice/game_system/meikyu_kingdom_basic/randr236_table.rb +254 -0
  64. data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +54 -0
  65. data/lib/bcdice/game_system/meikyu_kingdom_basic/tk_table.rb +755 -0
  66. data/lib/bcdice/game_system/sword_world/rating_lexer.rb +1 -0
  67. data/lib/bcdice/game_system/sword_world/rating_options.rb +4 -1
  68. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +5 -0
  69. data/lib/bcdice/game_system/sword_world/rating_parser.rb +129 -115
  70. data/lib/bcdice/game_system.rb +20 -0
  71. data/lib/bcdice/version.rb +1 -1
  72. metadata +31 -6
@@ -0,0 +1,251 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class JuinKansen_Korean < JuinKansen
6
+ # ゲームシステムの識別子
7
+ ID = "JuinKansen:Korean"
8
+
9
+ # ゲームシステム名
10
+ NAME = "주인감염"
11
+
12
+ # ゲームシステム名の読みがな
13
+ SORT_KEY = "国際化:Korean:주인감염"
14
+
15
+ # ダイスボットの使い方
16
+ HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
17
+ ■ 표
18
+ ・일상 표 (DAI, Daily)
19
+ ・장소 표
20
+ ・「도시」 (PCI, PlaceCity)
21
+ ・「시골」 (PCO, PlaceCountryside)
22
+ ・「시설 안」 (PFA, PlaceFacility)
23
+ ・초면 표 (FL, FirstLook)
24
+ ・친구 표 (AF, AppreciativeFriend)
25
+ ・복선 표 (FOR, Foreshadow)
26
+ ・감정 표 (EMO, Emotion)
27
+ ・상황 표 (SIT, Situation)
28
+ ・대상 표 (TAR, Target)
29
+ ・광기 표 (INS, Insanity)
30
+ ・종말 표 (DEA, Death)
31
+ ・공포 표 (FEA, Fear)
32
+ INFO_MESSAGE_TEXT
33
+
34
+ def eval_game_system_specific_command(command)
35
+ roll_tables(ALIAS[command] || command, TABLES)
36
+ end
37
+
38
+ TABLES = {
39
+ "Daily" => DiceTable::Table.new(
40
+ "일상 표",
41
+ "2D6",
42
+ [
43
+ "「목욕 중」『내용』PC 자기소개 후, 자신의 집에서 어떻게 목욕하고 있는가에 대해 간단히 설명하라.『종료조건』GM이 '몸을 다 씻었으므로 슬슬 나가려 한다' 라고 선언한다.",
44
+ "「자취」『내용』PC 자기소개 후, 자기 집에서 어떤 식사를 만들지, 자취를 잘하는지 못하는지를 설명하라.『종료조건』GM이 '요리가 완성되어 식사를 시작한다' 라고 선언한다.",
45
+ "「휴식시간」『내용』PC 자기소개 후, 직장이나 학교 휴식시간에 어디서 무엇을 하는지 간단히 설명하라.『종료조건』GM이 '슬슬 휴식시간이 끝날 것 같다' 라고 선언한다.",
46
+ "「귀가 중」『내용』PC 자기소개 후, 직장이나 학교로부터 귀가할 때 무엇을 하는지 간단히 설명하라.『종료조건』GM이 집에 도착했다고 선언한다.",
47
+ "「점심시간」『내용』PC 자기소개 후, 직장이나 학교 점심시간에 어디서 무엇을 먹는지 간단히 설명하라.『종료조건』GM이 점심시간이 슬슬 끝난다고 선언한다.",
48
+ "「업무 중」『내용』PC 자기소개 후, 직장이나 학교에서 어떤 태도로 일에 임하는지 간단히 설명하라.『종료조건』GM이 휴식시간을 알리는 종 같은 것이 울린다고 선언한다.",
49
+ "「통근,통학」『내용』PC 자기소개 후, 어떤 방법으로 통근, 통학하고 있는지 간단히 설명하라.『종료조건』GM이 직장이나 학교에 도착했다고 선언한다.",
50
+ "「휴일」『내용』PC 자기소개 후, 휴일에 무엇을 하는지 간단히 설명하라.『종료조건』GM이 '슬슬 내일 준비를 해야 한다' 라고 선언한다.",
51
+ "「자택」『내용』PC 자기소개 후, 자택에 있는 자신의 방에서 어떻게 쉬고 있는지 간단히 설명하라.『종료조건』GM이 '슬슬 잘 시간이다' 라고 선언한다.",
52
+ "「잠에서 깬 직후」『내용』PC 자기소개 후, 자택에서 기상한 직후에 어떤 행동을 하는지 간단히 설명하라.『종료조건』GM이 '출근, 통학 준비를 마쳤다' 라고 선언한다.",
53
+ "「취미」『내용』PC 자기소개 후, 자기 방에서 어떤 취미에 몰두해있는지 간단히 설명하라.『종료조건』GM이 '아쉽지만 이제 잘 시간이다' 라고 선언한다.",
54
+ ]
55
+ ),
56
+ "PlaceCity" => DiceTable::Table.new(
57
+ "장소 표「도시」",
58
+ "2D6",
59
+ [
60
+ "「사건현장」여기는 이전에 괴이사건이 일어났다는 소문이 있는 사건현장이다. 잘 보면 근처에 시든 꽃다발이 놓여있다.",
61
+ "「귀갓길」여기는 귀갓길이다. 시간대 때문인지 주변에 인기척이 없고 작은 소리에도 귀가 울릴 정도로 정적에 휩싸여 있다.",
62
+ "「근처 공원」여기는 자기 집, 회사, 학교 중 어느 한 곳의 근처에 있는 공원이다. 지금 있는 장소는 안쪽에 있는 정자로, 근처에 자판기가 나란히 있다.",
63
+ "「근처 편의점」여기는 PC의 집 근처 편의점이다. 큰 주차장이 있기 때문인지 주변이 매우 탁 트여있다.",
64
+ "「술집」여기는 어디에나 있는 술집이다. 그러나 손님이 드문드문 오고 주변에는 빈 자리가 눈에 띈다.",
65
+ "「전철역 광장」여기는 사람들이 출근이나 통학할 때 이용하는, 역의 광장이다. 그러나 지나며 마주치는 사람들의 시선이 왜인지 차갑고, 공허함마저 느껴진다.",
66
+ "「신사,절」여기는 길거리에 있는 신사, 또는 절이다. 부탁하면 액막이를 해준다는 이야기가 있는데, 실제로 그 덕을 보는지는 불확실하다.",
67
+ "「도서관」여기는 거리에 있는 공립 도서관이다. 주변에는 낡은 책이나 새로운 책 등 다양한 서적이 늘어서 있기 때문에 조사에 안성맞춤이다.",
68
+ "「강가의 길」여기는 근처에 있는 강가의 길이다. 주변에는 인기척이 없고 무기질적인 도로가 저 멀리까지 이어져있다.",
69
+ "「병원 앞」여기는 근처에 있는 한 종합병원 앞이다. 통원하는 환자로 보이는 노인이나 젊은이가 이따금 새로 만들어진 출입구를 드나들고 있다.",
70
+ "「경찰서 앞」여기는 거리에 있는 경찰서 앞이다. 이번 사건, 또는 방금 전의 괴이현상에 대해 이야기해도… 아마도, 믿지 않겠지.",
71
+ ]
72
+ ),
73
+ "PlaceCountryside" => DiceTable::Table.new(
74
+ "장소 표「시골」",
75
+ "2D6",
76
+ [
77
+ "「사건현장」여기는 이전에 괴이사건이 일어났다는 소문이 있는 사건현장이다. 잘 보면 근처에 시든 꽃다발이 놓여있다.",
78
+ "「학교 앞」여기는 마을 안쪽의 한 학교 앞이다. 그러나 몇년 전부터 폐교했다고 하며, 문은 굳게 닫혀 있고 학교 정원에는 잡초가 무성하다.",
79
+ "「공원」여기는 마을 안쪽의 공원이다. 가운데에 우두커니 서 있는 놀이기구들은 모두 녹슬어 있으며, 곳곳에 잡초가 자라나 있다.",
80
+ "「면사무소」여기는 마을의 면사무소다. 그러나 면사무소의 문은 닫혀있고 안에는 인기척이 없다.",
81
+ "「숲 속」여기는 도로에서 떨어진 곳에 있는 숲 속이다. 주변에서 동물 울음소리가 들려온다.",
82
+ "「버스 정류장」여기는 마을의 유일한 버스 정류장이다. 시간표를 보지만, 버스는 하루에 1대 밖에 오지 않는다.",
83
+ "「신사,절」여기는 마을 안에 있는 신사, 또는 절이다. 안은 녹슬어 있으며 인기척은 전무하다.",
84
+ "「논밭」여기는 마을과 떨어진 곳에 있는 논밭이다. 농한기이기 때문인지 밭은 방치되어 있으며 주변을 둘러 보아도 사람의 모습은 보이지 않는다.",
85
+ "「강가」여기는 마을과 떨어진 곳에 있는 강가이다. 눈앞의 강은 안이 투명하게 보이며, 물고기 몇몇이 헤엄치고 있다.",
86
+ "「병원 앞」여기는 마을의 작은 병원 앞이다. 그러나 오늘은 정기 휴일인지 병원이 닫혀있다.",
87
+ "「파출소 앞」여기는 마을의 유일한 파출소 앞이다. 그러나 경찰관의 모습은 보이지 않고 문도 굳게 닫혀있다.",
88
+ ]
89
+ ),
90
+ "PlaceFacility" => DiceTable::Table.new(
91
+ "장소 표「시설 안」",
92
+ "2D6",
93
+ [
94
+ "「예배당」여기는 지하에 있는, 예배당 같아보이는 곳이다. 방 안쪽에는 기묘한 모습의 석상이 있고 주위는 불길한 기운이 감돈다.",
95
+ "「숨겨진 방」여기는 숨겨진 방으로 보이는 곳이다. 방의 벽에는 혈흔으로 보이는 얼룩이 묻어있다.",
96
+ "「창고」여기는 중심지에 있는 창고다. 장소 탓인지 혹은 이변 탓인지, 주변에 기분나쁜 곰팡이가 피어있다.",
97
+ "「침대 방」여기는 침대가 있는 장소다. 내부에는 간소한 침대와 책상 만이 놓여있어 매우 살풍경하다.",
98
+ "「응접실」여기는 응접실로 보이는 방이다. 방 가운데에는 커다란 테이블과 소파가 있다.",
99
+ "「복도」여기는 시설 안으로 통하는 복도 중 하나다. 전등이 없어서인지 아니면 시간대 때문인지, 주변은 특히나 침침하다.",
100
+ "「로비」여기는 로비다. 문은 여전히 열릴 기미가 보이지 않으며, 주변은 침묵 만이 계속되고 있다.",
101
+ "「층계참」여기는 계단의 층계참이다. 주변은 몹시 침침하고 이렇다할 물건은 아무 것도 없다.",
102
+ "「지하실」여기는 지하실이다. 바닥에 옅게 먼지가 쌓여있으며, 오랜 시간 쓰지 않은 듯하다.",
103
+ "「실험실」여기는 실험실로 보이는 장소이다. 방 가운데에는 커다란 테이블이 설치되어 있으며, 왜인지 피투성이다.",
104
+ "「연구실」여기는 연구실로 보이는 장소이다. 방은 전체적으로 어둡고, 안쪽 찬장에는 기묘한 모습의 생물이 포르말린에 잠겨 늘어서 있다.",
105
+ ]
106
+ ),
107
+ "FirstLook" => DiceTable::Table.new(
108
+ "초면 표",
109
+ "2D6",
110
+ [
111
+ "「습격으로부터 구출」『내용』PC간 재회 후 【운명】이 낮은 PC가 갑자기 불량배 등에게 얽혀서, 【운명】이 높은 PC가 힘이나 기지를 발휘해 구해내는 장면을 연출하라.『종료조건』【운명】이 낮은 PC가 【운명】이 높은 PC에게 감사 인사를 한다.",
112
+ "「분실물」『내용』PC간 재회 후 【행운】이 낮은 PC가 소지품을 떨어뜨리며, 그것을 【행운】이 높은 PC가 주워 건네주는 장면을 연출하라.『종료조건』【행운】이 낮은 PC가 【행운】이 높은 PC의 [주인]을 눈치챈다.",
113
+ "「검은 그림자」『내용』PC간 재회 후 【정신】이 높은 PC가 【정신】이 낮은 PC의 등 뒤에서 검은 그림자를 목격하는 장면을 연출하라.『종료조건』【정신】이 높은 PC가 '방금… 뭐였지?'라고 묻는다.",
114
+ "「<무언가>를 봤다」『내용』PC간 재회 후, 【행운】이 낮은 PC가 어둠 속에서 <무언가>를 목격. 낯빛이 창백해지는 장면을 연출하라.『종료조건』【행운】이 높은 PC가 【행운】이 낮은 PC를 염려한다.",
115
+ "「부르는 목소리」『내용』PC간 재회후, 멀리서 으스스한, 무언가를 부르는 목소리를 들어 주위를 둘러보다 서로 눈이 마주치는 장면을 연출하라.『종료조건』PC 중 누군가가 '지금 그거... 들었어?' 라고 묻고 누군가가 답한다.",
116
+ "「지인」『내용』PC간 재회 후, 사실 지인의 지인이었다는 것이 판명되는 장면을 연출하라.『종료조건』PC간 어떤 관계인가에 대해 서로 이야기하여 결정한다.",
117
+ "「사고로부터 구출」『내용』낙하물이나 교통사고 등 【희망】이 낮은 PC가 갑자기 불사사의한 사고에 휘말려서 【희망】이 높은 PC가 구해주는 장면을 연출하라.『종료조건』【희망】이 낮은 PC가 【희망】이 높은 PC에게 감사 인사를 한다.",
118
+ "「SNS」『내용』【지성】이 높은 PC가 SNS에서 사건에 관한 발언을 하여, 【지성】이 낮은 PC와 알게되는 장면을 연출하라.『종료조건』【지성】이 낮은 PC가 '나중에 다시 만나요' 라고 답신한다.",
119
+ "「<무언가>가 보인다」『내용』PC간 재회 후, 어둠 너머에서 <무언가>를 목격, 전율하는 장면을 연출하라.『종료조건』<무언가>가 사라지며, PC 중 누군가가 '…방금 그거 봤어?' 라고 묻는다.",
120
+ "「간호」『내용』【체력】이 낮은 PC가 갑자기 <무언가>에게 습격당하는 환각을 보고 날뛰다가 우연히 나타난, 【체력】이 높은 PC에게 도움을 받는 장면을 연출하라.『종료조건』【체력】이 낮은 PC가 감사 인사를 한다.",
121
+ "「주인」『내용』PC간 재회 후, 【민첩】이 높은 PC가, 【민첩】이 낮은 PC가 가진 [주인]을 눈치채는 장면을 연출하라.『종료조건』【민첩】이 높은 PC가 자기도 같은 것이 있다고 알린다.",
122
+ ]
123
+ ),
124
+ "AppreciativeFriend" => DiceTable::Table.new(
125
+ "친구 표",
126
+ "2D6",
127
+ [
128
+ "「소중한 사람」『내용』PC간 재회 후, 사건에 관해 서로 이야기를 나누던 중 PC가 서로 자신의 [소중한 사람]에 대한 이야기를 하는 장면을 연출하라.『종료조건』PC 중 누군가가 '어쨌든 그 사람을 위해서라도 살아남아야 하겠네요' 라고 말한다.",
129
+ "「개인의 인상」『내용』PC끼리 만나 사건에 관해 서로 이야기를 나누던 중, PC 중 누군가가 다른 PC의 인상이나 인격에 대한 감상을 말하는 장면을 연출하라.『종료조건』감상을 들은 PC가 '그런가?'라고 말한다.",
130
+ "「주인에 대해」『내용』PC끼리 만나 서로의 몸에 새겨진 [주인]의 정체에 관해 생각하는 장면을 연출하라.『종료조건』PC 중 누군가가 '…결국 비밀 투성이네요. 나중에 다시 생각해볼까요?' 라고 말한다.",
131
+ "「불안과 공포」『내용』PC끼리 만나 서로 이야기를 나누던 중 【운명】이 낮은 PC가 불안에 빠져서, 【운명】이 높은 PC가 걱정하는 장면을 연출하라.『종료조건』【운명】이 낮은 PC가 '괜찮아요' 라고 답한다.",
132
+ "「정보교환」『내용』PC끼리 만나 현재 상태를 정리하기 위해 정보교환을 하는 장면을 연출하라.『종료조건』PC 중 누군가가 '…또 새로운 정보를 얻으면 연락할게요' 라고 말한다.",
133
+ "「과거와 비밀」『내용』PC끼리 만나 사건에 관해 서로 이야기를 나눌 때, PC 중 누군가가 [관계성]을 맺은 《과거나 비밀》에 대해 말한다.『종료조건』《과거나 비밀》을 밀한 PC가 '제 사정에 휘말리게 해서 죄송해요' 라고 말한다.",
134
+ "「추리」『내용』PC끼리 만나 이번 사건의 해결방법에 대해 추리하는 장면을 연출하라.『종료조건』PC 중 누군가가 '좀 더 자세히 알아봅시다. 분명 무언가 좋은 방법이 있을 거에요.' 라고 말한다.",
135
+ "「협력관계」『내용』PC끼리 만나 PC 중 누군가가 이번 사건에서 살아남기 위해 협력관계를 더욱 강화하자고 제안하는 장면을 연출하라.『종료조건』제안받은 PC가 제안을 승낙한다.",
136
+ "「소원에 대해」『내용』PC끼리 만나 사건에 대해 추리하던 중, PC 중 누군가가 자신의 [소원]에 대해 말하는 장면을 연출하라.『종료조건』[소원]을 알게된 PC가 그것에 대해 개인적인 감상을 말한다.",
137
+ "「작전회의」『내용』PC끼리 만나 【지성】이 낮은 PC가 【지성】이 높은 PC에게 좋은 지혜는 없냐고 상담하는 장면을 연출하라.『종료조건』【지성】이 높은 PC가 '…잘 될 지는 모르겠지만, 어떤 방법 하나를 시험해보겠습니다' 라고 말한다.",
138
+ "「방법이 있을 것이다」『내용』PC끼리 만나, PC 중 누군가가 '살아남을 방법은 분명히 있을 것이다' 라고 힘을 북돋는 장면을 연출하라.『종료조건』고무된 PC가 '그렇네요… 그 방법을 찾아봅시다' 라고 말한다.",
139
+ ]
140
+ ),
141
+ "Foreshadow" => DiceTable::Table.new(
142
+ "복선 표",
143
+ "1D6",
144
+ [
145
+ "PC와의 대화 중 문득 번뜩임이 일었다.",
146
+ "수수께끼의 금속 파편이 떨어져있었다. 가슴 쪽 안주머니에 넣어두자.",
147
+ "한창 대화하던 중… 갑자기 어떤 진실을 깨달았다.",
148
+ "PC로부터 격려를 받아 괜스레 기합이 들어갔다.",
149
+ "불안한 정보를 들은 순간, 소중한 사람의 얼굴이 떠올랐다.",
150
+ "그 때, 불가사의한 힘이 몸에 깃들었다.",
151
+ ]
152
+ ),
153
+ "Emotion" => DiceTable::Table.new(
154
+ "감정 표",
155
+ "1D6",
156
+ [
157
+ "존경",
158
+ "호의",
159
+ "우정",
160
+ "비호",
161
+ "신뢰",
162
+ "안심",
163
+ ]
164
+ ),
165
+ "Situation" => DiceTable::Table.new(
166
+ "상황 표",
167
+ "1D6",
168
+ [
169
+ "「불행의 연쇄」사건에 관련되었는지, PC들의 주변에 점점 불행이 일어나기 시작한다. 어떻게든 이 연쇄를 끊어야 한다…….『사용가능 능력치』【행운】",
170
+ "「보이지 않는 공포」사건이 발생한 후부터 PC들은 누군가로부터 감시받는 듯한 기분이 든다. 이럴 때야말로 마음을 강하게 먹어야 한다…….『사용가능 능력치』【정신】",
171
+ "「냉정한 행동」계속해서 일어나는 괴이현상 때문에 PC들은 약간 혼란스러운 기미가 보인다. 그러나 이럴 때야말로 냉정하게 지혜를 짜내야 한다…….『사용가능 능력치』【지성】",
172
+ "「떨림이여 멈춰라」다가오는 공포 때문에 PC들의 심신이 위축되고 쇠약해지고 있다. 그러나 이럴 때야 말로 냉정하게 행동해야 한다…….『사용가능 능력치』【민첩】",
173
+ "「위험은 코 앞에」정체를 알 수 없는 <무언가>는 틀림없이 코 앞까지 닥쳐오고 있다. 믿을 수 있는 것은 이제 우리들의 육체 뿐이다…….『사용가능 능력치』【체력】",
174
+ "「행운은 내 편」상황이 급박해지고 있다. 그러나 운 좋게도 상황이 PC들에게 유리하게 돌아가기 시작했다. 어떻게 해서든 이 기회를 살려야 한다…….『사용가능 능력치』각 PC 임의의【능력치】",
175
+ ]
176
+ ),
177
+ "Target" => DiceTable::Table.new(
178
+ "대상 표",
179
+ "1D6",
180
+ [
181
+ "【체력】이 가장 높은 대상",
182
+ "【민첩】이 가장 높은 대상",
183
+ "【지성】이 가장 높은 대상",
184
+ "【정신】이 가장 높은 대상",
185
+ "【행운】이 가장 높은 대상",
186
+ "【희망】이 가장 높은 대상",
187
+ ]
188
+ ),
189
+ "Insanity" => DiceTable::Table.new(
190
+ "광기 표",
191
+ "1D6",
192
+ [
193
+ "「도망치고 싶다」다음 [페이즈] 종료를 맞이할 때까지 PC는 공포 때문에 그 자리에서 한시라도 빨리 떠나고 싶은 충동에 휩싸인 듯한 모습을 연출하라.",
194
+ "「기억의 혼돈」다음 [페이즈] 종료를 맞이할 때까지 PC는 너무 큰 충격을 받은 나머지 본 것이나 들은 것이 무엇이었는지 떠올릴 수 없는 듯한 모습을 연출하라.",
195
+ "「흥분상태」다음 [페이즈] 종료를 맞이할 때까지 PC는 공포가 너무 심했던 나머지 사소한 일로도 짜증이 나서 PC를 힘들게 하는 반응을 한 후 '…미안합니다' 라며 후회하는 장면을 연출하라.",
196
+ "「떨고 있다」다음 [페이즈] 종료를 맞이할 때까지 PC는 공포가 너무 심했던 나머지 조금 전부터 몸을 계속 떨고 있는 상황을 연출하라.",
197
+ "「긴장상태」다음 [페이즈] 종료를 맞이할 때까지 PC는 극도의 긴장으로 몸을 자유롭게 움직이지 못해 넘어지거나 위축되는 상황을 연출하라.",
198
+ "「일시적 발광」다음 [페이즈] 종료를 맞이할 때까지 PC는 충격이 너무 심했던 나머지 일시적으로 발광해, 같은 말을 반복해서 중얼거리는 상황을 연출하라.",
199
+ ]
200
+ ),
201
+ "Death" => DiceTable::Table.new(
202
+ "종말 표",
203
+ "1D6",
204
+ [
205
+ "「엽기살인」그 후, PC가 교외의 폐가 안에서 조각난 시체로 발견된다. 경찰이 성실하게 조사하지 않았는지 결국 단서를 찾지 못하고 사건은 미궁에 빠졌다.",
206
+ "「변사」그 후, PC가 자신의 방에서 변사한 상태로 발견된다. PC의 사인은 출혈과다. 출혈이 일어난 곳의 외상은 마치 거대한 짐승에게 물린 듯한 상처였다.",
207
+ "「자살」그 후, PC가 교외에 방치된 폐가 안에서 자살한 상태로 발견된다. 그러나 유서는 발견되지 않고 그 이유는 끝끝내 알 수 없었다.",
208
+ "「쇠약사」그 후, PC의 건강이 갑자기 나빠져 입원할 수밖에 없게 되었다. 검진을 아무리 반복해도 계속 원인불명… 이윽고 PC는 체중이 반으로 줄고 결국 쇠약사했다.",
209
+ "「사고사」그 후, PC가 불의의 사고를 당해 사망한다. 그러나 해부 감식 결과, 사고로 인한 외상이 아니라 사고 직전에 내장파열이 일어난 것이 판명되었다.",
210
+ "「행방불명」그 후, PC가 행방불명이 된다. 가족은 PC에 대한 수색신고를 내지만 결국 끝끝내 PC를 찾지 못했다.",
211
+ ]
212
+ ),
213
+ "Fear" => DiceTable::Table.new(
214
+ "공포 표",
215
+ "2D6",
216
+ [
217
+ "「기분 나쁜 것」혈액, 사람의 뼈로 보이는 것, 대량의 점액 등… 기묘한 것이 갑자기 발 밑에 떨어진다.[효과계산]PC 전원에게 5+[주인÷2]d",
218
+ "「빨라지는 고동」갑작스런 종소리, 갑작스런 전화, 갑작스럽게 부르는 목소리, 갑작스러운 기척… 불안한 마음 탓인지 고작 그런 것으로 심장의 고동이 빨라진다.[효과계산]PC 3명에게 4+[주인÷2]d",
219
+ "「불안의 씨앗」말 없는 전화, 착신인 불명의 메시지, 열쇠구멍에 난 깊은 상처, 배수구의 긴 머리카락 등… 불안을 부르는 것이 눈에 띄고 만다.[효과계산]PC 1명에게 4+[주인÷2]d",
220
+ "「이상한 냄새」비린내, 쇳내, 꽃냄새 같은 방향제 냄새 등… 보통은 나지 않는 이상한 냄새가 한순간 코를 찌른다.[효과계산]PC 2명에게 3+[주인÷2]d",
221
+ "「틈새」건물의 그림자, 침대 아래, 장지문 틈새 등… 여러 사각으로부터 <무언가>의 숨결, 기척이 감돈다.[효과계산]PC 2명에게 2+[주인÷2]d",
222
+ "「시선」어딘가로부터 강한 시선을 느낀다… 그러나, 그 쪽으로 시선을 돌리면 기척이 순식간에 없어져 버렸다.[효과계산]PC 2명에게 2+[주인÷2]d",
223
+ "「이상한 소리」멀리서부터 불가사의한 금속음이나 종소리, 살점을 으깨는 듯한 소리나 끈적이는 소리 등이 들린 듯한 기분이 든다.[효과계산]PC 3명에게 3+[주인÷2]d",
224
+ "「접촉」방금 전… 무언가가 자신을 건드린 듯한, 또는 옷을 잡아당긴 듯한 기분이 든다.[효과계산]PC 3명에게 3+[주인÷2]d",
225
+ "「방금 뭐지?」옆으로 스쳐 지나간 인물, 말을 거는 인물, 무언가를 건네주는 인물… 그러나, 여기는 둘 말고 아무도 없을 터이다.[효과계산]PC 2명에게 4+[주인÷2]d",
226
+ "「보아선 안된다」다음 행동으로 넘어가려던 그 때, 한 순간 통로 너머에 <무언가>가 멈춰 서있는 듯한 기분이 들었다.[효과계산]PC 1명에게 5+[주인÷2]d",
227
+ "「암흑 속에서」PC가 갑자기 <무언가>에게 손발이 잡혀 암흑 속으로 끌려가려 한다![효과계산]PC 1명에게 6+[주인÷2]d",
228
+ ]
229
+ ),
230
+ }.transform_keys(&:upcase).freeze
231
+
232
+ ALIAS = {
233
+ "Dai" => "Daily",
234
+ "PCi" => "PlaceCity",
235
+ "PCo" => "PlaceCountryside",
236
+ "PFa" => "PlaceFacility",
237
+ "FL" => "FirstLook",
238
+ "AF" => "AppreciativeFriend",
239
+ "For" => "Foreshadow",
240
+ "Emo" => "Emotion",
241
+ "Sit" => "Situation",
242
+ "Tar" => "Target",
243
+ "Ins" => "Insanity",
244
+ "Dea" => "Death",
245
+ "Fea" => "Fear",
246
+ }.transform_keys(&:upcase).transform_values(&:upcase).freeze
247
+
248
+ register_prefix(TABLES.keys, ALIAS.keys)
249
+ end
250
+ end
251
+ end
@@ -38,6 +38,11 @@ module BCDice
38
38
  ・製作委員決定表 PCDT/実際どうだったのか表 OHT
39
39
  ・タスク表 ヘルライオン PCT1/ヘルクロウ PCT2/ヘルスネーク PCT3/
40
40
   ヘルドラゴン PCT4/ヘルフライ PCT5/ヘルゴート PCT6/ヘルベア PCT7
41
+ ・大喜利スペシャル表 (-OT)
42
+  お題決定表(TOT)、〇〇を見て一言表(OOT)
43
+  単語表(WOT, WOTx) xに英字(A,B,C)で単語表A(人物)(AOT)、単語表B(物)(BOT)、単語表C(場所)を個別ロール
44
+  動詞表(VOT)、長め単語表(LOT)
45
+  ヘル司会者 リアクション表(好印象ver)(POT)、ヘル司会者 リアクション表(不満ver)(NOT)
41
46
  ・D66ダイスあり
42
47
  INFO_MESSAGE_TEXT
43
48
 
@@ -156,21 +161,37 @@ module BCDice
156
161
  when /^ST(\d)?$/
157
162
  # シーン表
158
163
  type = Regexp.last_match(1).to_i
159
-
160
164
  tableName, result, number = getSceneTableResult(type)
161
165
  when /^NAME(\d)?$/
162
166
  # 万能命名表
163
167
  type = Regexp.last_match(1).to_i
164
168
  tableName, result, number = getNameTableResult(type)
165
169
  when /^EST$/i, /^sErviceST$/i
170
+ # サービスシーン表
166
171
  tableName, result, number = getServiceSceneTableResult()
167
172
  when /^HSAT(\d)?$/
173
+ # ヘルスタイリスト罵倒表
168
174
  type = Regexp.last_match(1).to_i
169
175
  tableName, result, number = getHairStylistAbuseTableResult(type)
170
-
171
176
  when /^EXT(\d)?$/
177
+ # エキストラ表
172
178
  type = Regexp.last_match(1).to_i
173
179
  tableName, result, number = getExtraTableResult(type)
180
+ when /^TOT?$/
181
+ # お題決定表
182
+ tableName, result, number = getThemeTableResult()
183
+ when /^OOT?$/
184
+ # 一言決定表
185
+ tableName, result, number = getOneWordTableResult()
186
+ when /^WOT?$/
187
+ # 単語決定表
188
+ tableName, result, number = getWordTableResult()
189
+ when /^POT?$/
190
+ # ヘル司会者 リアクション表(好印象ver)
191
+ tableName, result, number = getPositiveTableResult()
192
+ when /^NOT?$/
193
+ # ヘル司会者 リアクション表(不満ver)
194
+ tableName, result, number = getNegativeTableResult()
174
195
  end
175
196
 
176
197
  if result.empty?
@@ -333,6 +354,127 @@ module BCDice
333
354
  return tableName, result, number
334
355
  end
335
356
 
357
+ def getThemeTableResult()
358
+ tableName = translate("KillDeathBusiness.table.TOT.name")
359
+
360
+ result = ''
361
+ d6 = @randomizer.roll_once(6)
362
+
363
+ case d6
364
+ when 1
365
+ oneTableName, oneResult, oneD6, one = getOneWordTableResult()
366
+ result += "[#{oneTableName}]を見て一言。\n#{oneTableName}(#{oneD6}) > #{oneResult}\n> "
367
+ result += translate("KillDeathBusiness.table.TOT.items.1", one: one)
368
+ when 2
369
+ word1TableName, word1Result, word1D6, word1 = getWordTableResult()
370
+ word2TableName, word2Result, word2D6, word2 = getWordTableResult()
371
+ result += "この[#{word1TableName}]、ひょっとして[#{word1TableName}]かも、どうしてそう思った?\n#{word1TableName}(#{word1D6}) > #{word1Result}\n#{word2TableName}(#{word2D6}) > #{word2Result}\n> "
372
+ result += translate("KillDeathBusiness.table.TOT.items.2", word1: word1, word2: word2)
373
+ when 3
374
+ vot = self.class::TABLES["VOT"].roll(@randomizer)
375
+ verbTableName = vot.table_name
376
+ verb = vot.body
377
+ number = vot.value
378
+ wordTableName, wordResult, wordD6, word = getWordTableResult()
379
+ result += "[#{verbTableName}]した[#{wordTableName}]が言いそうなこと。\n#{verbTableName}(#{number}) > #{verb}\n#{wordTableName}(#{wordD6}) > #{wordResult}\n> "
380
+ result += translate("KillDeathBusiness.table.TOT.items.3", verb: verb, word: word)
381
+ when 4
382
+ word1TableName, word1Result, word1D6, word1 = getWordTableResult()
383
+ word2TableName, word2Result, word2D6, word2 = getWordTableResult()
384
+ result += "[#{word1TableName}]が[#{word1TableName}]になった世界ではどんなことが起こる?\n#{word1TableName}(#{word1D6}) > #{word1Result}\n#{word2TableName}(#{word2D6}) > #{word2Result}\n> "
385
+ result += translate("KillDeathBusiness.table.TOT.items.4", word1: word1, word2: word2)
386
+ when 5
387
+ wordTableName, wordResult, wordD6, word = getWordTableResult()
388
+ result += "こんな[#{wordTableName}]は嫌だ。どんなの?\n#{wordTableName}(#{wordD6}) > #{wordResult}\n> "
389
+ result += translate("KillDeathBusiness.table.TOT.items.5", word: word)
390
+ when 6
391
+ lot = self.class::TABLES["LOT"].roll(@randomizer)
392
+ longTableName = lot.table_name
393
+ long = lot.body
394
+ number = lot.value
395
+ result += "[#{longTableName}]みたいなことを言って下さい。\n#{longTableName}(#{number}) > #{long}\n> "
396
+ result += translate("KillDeathBusiness.table.TOT.items.6", long: long)
397
+ end
398
+
399
+ return tableName, result, d6
400
+ end
401
+
402
+ def getOneWordTableResult()
403
+ tableName = translate("KillDeathBusiness.table.OOT.name")
404
+
405
+ result = ''
406
+ d6 = @randomizer.roll_once(6)
407
+
408
+ case d6
409
+ when 1, 2
410
+ oneWord = translate("KillDeathBusiness.table.OOT.items.1")
411
+ result = oneWord
412
+ when 3, 4
413
+ oneWord = translate("KillDeathBusiness.table.OOT.items.3")
414
+ result = oneWord
415
+ when 5, 6
416
+ wordTableName, wordResult, wordD6, word = getWordTableResult()
417
+ result += "[#{wordTableName}]で検索して出てくる6番目の画像\n#{wordTableName}(#{wordD6}) > #{wordResult}\n> "
418
+ oneWord = translate("KillDeathBusiness.table.OOT.items.5", word: word)
419
+ result += oneWord
420
+ end
421
+
422
+ return tableName, result, d6, oneWord
423
+ end
424
+
425
+ def getWordTableResult()
426
+ tableName = "単語表"
427
+
428
+ d6 = @randomizer.roll_once(6)
429
+ table =
430
+ case d6
431
+ when 1, 2
432
+ self.class::TABLES["WOTA"]
433
+ when 3, 4
434
+ self.class::TABLES["WOTB"]
435
+ when 5, 6
436
+ self.class::TABLES["WOTC"]
437
+ end
438
+
439
+ result = table.roll(@randomizer)
440
+
441
+ return tableName, result.to_s, d6, result.body
442
+ end
443
+
444
+ def getPositiveTableResult()
445
+ tableName = translate("KillDeathBusiness.table.POT.name")
446
+
447
+ table = [
448
+ lambda { return translate("KillDeathBusiness.table.POT.items.1", size: @randomizer.roll_sum(1, 6).to_s) },
449
+ lambda { return translate("KillDeathBusiness.table.POT.items.2", size: @randomizer.roll_sum(1, 6).to_s) },
450
+ lambda { return translate("KillDeathBusiness.table.POT.items.3", size: @randomizer.roll_sum(2, 6).to_s) },
451
+ lambda { return translate("KillDeathBusiness.table.POT.items.4", size: @randomizer.roll_sum(2, 6).to_s) },
452
+ translate("KillDeathBusiness.table.POT.items.5"),
453
+ lambda { return translate("KillDeathBusiness.table.POT.items.6", size: (@randomizer.roll_sum(1, 6) - 3).to_s) },
454
+ ]
455
+
456
+ result, number = get_table_by_1d6(table)
457
+
458
+ return tableName, result, number
459
+ end
460
+
461
+ def getNegativeTableResult()
462
+ tableName = translate("KillDeathBusiness.table.NOT.name")
463
+
464
+ table = [
465
+ translate("KillDeathBusiness.table.NOT.items.1"),
466
+ translate("KillDeathBusiness.table.NOT.items.2"),
467
+ lambda { return translate("KillDeathBusiness.table.NOT.items.3", size: @randomizer.roll_sum(1, 6).to_s) },
468
+ lambda { return translate("KillDeathBusiness.table.NOT.items.4", size: @randomizer.roll_sum(1, 6).to_s) },
469
+ lambda { return translate("KillDeathBusiness.table.NOT.items.5", size: @randomizer.roll_sum(1, 6).to_s) },
470
+ translate("KillDeathBusiness.table.NOT.items.6"),
471
+ ]
472
+
473
+ result, number = get_table_by_1d6(table)
474
+
475
+ return tableName, result, number
476
+ end
477
+
336
478
  ALIAS = {
337
479
  "DeathWT" => "DWT",
338
480
  "RevengeWT" => "RWT",
@@ -396,6 +538,11 @@ module BCDice
396
538
  "PASPT" => DiceTable::Table.from_i18n("KillDeathBusiness.table.PASPT", locale),
397
539
  "POSPT" => DiceTable::Table.from_i18n("KillDeathBusiness.table.POSPT", locale),
398
540
  "UMSPT" => DiceTable::Table.from_i18n("KillDeathBusiness.table.UMSPT", locale),
541
+ "WOTA" => DiceTable::D66Table.from_i18n("KillDeathBusiness.table.WOTA", locale),
542
+ "WOTB" => DiceTable::D66Table.from_i18n("KillDeathBusiness.table.WOTB", locale),
543
+ "WOTC" => DiceTable::D66Table.from_i18n("KillDeathBusiness.table.WOTC", locale),
544
+ "VOT" => DiceTable::D66Table.from_i18n("KillDeathBusiness.table.VOT", locale),
545
+ "LOT" => DiceTable::D66Table.from_i18n("KillDeathBusiness.table.LOT", locale),
399
546
  }
400
547
  end
401
548
 
@@ -413,7 +560,12 @@ module BCDice
413
560
  'EST', 'sErviceST',
414
561
  'HSAT[1-2]?',
415
562
  'EXT[1-4]?',
416
- 'JD'
563
+ 'JD',
564
+ 'TOT',
565
+ 'OOT',
566
+ 'WOT',
567
+ 'POT',
568
+ 'NOT'
417
569
  )
418
570
  register_prefix(TABLES.keys, register_prefix(ALIAS.keys), RTT.prefixes)
419
571
  end