bcdice 3.1.3 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +186 -76
- data/README.md +3 -2
- data/i18n/BeginningIdol/ja_jp.yml +2806 -0
- data/i18n/BeginningIdol/ko_kr.yml +1400 -0
- data/i18n/Cthulhu/zh_hans.yml +11 -0
- data/i18n/KillDeathBusiness/ja_jp.yml +1 -1
- data/i18n/MagicaLogia/ja_jp.yml +1 -1
- data/i18n/MagicaLogia/zh_hans.yml +564 -0
- data/i18n/MonotoneMuseum/ko_kr.yml +526 -53
- data/i18n/StellarKnights/ja_jp.yml +498 -0
- data/i18n/StellarKnights/ko_kr.yml +498 -0
- data/i18n/zh_hans.yml +7 -0
- data/lib/bcdice/command/parsed.rb +11 -3
- data/lib/bcdice/command/parser.rb +179 -100
- data/lib/bcdice/common_command/add_dice.rb +1 -1
- data/lib/bcdice/common_command/barabara_dice/node.rb +2 -2
- data/lib/bcdice/common_command/barabara_dice/result.rb +6 -0
- data/lib/bcdice/common_command/calc.rb +1 -1
- data/lib/bcdice/common_command/choice.rb +82 -7
- data/lib/bcdice/common_command/tally_dice/node.rb +135 -0
- data/lib/bcdice/common_command/tally_dice/parser.rb +302 -0
- data/lib/bcdice/common_command/tally_dice.rb +19 -0
- data/lib/bcdice/common_command.rb +2 -0
- data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
- data/lib/bcdice/dice_table/d66_left_range_table.rb +29 -0
- data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
- data/lib/bcdice/dice_table/d66_table.rb +5 -1
- data/lib/bcdice/dice_table.rb +3 -0
- data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
- data/lib/bcdice/game_system/Ainecadette.rb +68 -0
- data/lib/bcdice/game_system/Airgetlamh.rb +1 -1
- data/lib/bcdice/game_system/Alsetto.rb +1 -1
- data/lib/bcdice/game_system/AlterRaise.rb +2 -2
- data/lib/bcdice/game_system/Amadeus.rb +110 -93
- data/lib/bcdice/game_system/AngelGear.rb +10 -5
- data/lib/bcdice/game_system/AnimaAnimus.rb +16 -9
- data/lib/bcdice/game_system/Aoharubaan.rb +91 -0
- data/lib/bcdice/game_system/Arianrhod.rb +6 -8
- data/lib/bcdice/game_system/AssaultEngine.rb +91 -0
- data/lib/bcdice/game_system/Avandner.rb +1 -1
- data/lib/bcdice/game_system/BadLife.rb +264 -289
- data/lib/bcdice/game_system/Bakenokawa.rb +244 -0
- data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
- data/lib/bcdice/game_system/BattleTech.rb +109 -28
- data/lib/bcdice/game_system/BeastBindTrinity.rb +28 -12
- data/lib/bcdice/game_system/BeginningIdol.rb +118 -2392
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +10 -2312
- data/lib/bcdice/game_system/BladeOfArcana.rb +1 -1
- data/lib/bcdice/game_system/BlindMythos.rb +39 -38
- data/lib/bcdice/game_system/BloodCrusade.rb +6 -7
- data/lib/bcdice/game_system/BloodMoon.rb +9 -8
- data/lib/bcdice/game_system/CardRanker.rb +8 -7
- data/lib/bcdice/game_system/CastleInGray.rb +133 -0
- data/lib/bcdice/game_system/ChaosFlare.rb +21 -15
- data/lib/bcdice/game_system/Chill.rb +10 -10
- data/lib/bcdice/game_system/Chill3.rb +9 -9
- data/lib/bcdice/game_system/CodeLayerd.rb +39 -39
- data/lib/bcdice/game_system/ColossalHunter.rb +34 -47
- data/lib/bcdice/game_system/CrashWorld.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu.rb +3 -3
- data/lib/bcdice/game_system/Cthulhu7th.rb +56 -18
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu_SimplifiedChinese.rb +60 -0
- data/lib/bcdice/game_system/DarkBlaze.rb +0 -11
- data/lib/bcdice/game_system/DarkDaysDrive.rb +8 -7
- data/lib/bcdice/game_system/DeadlineHeroes.rb +11 -10
- data/lib/bcdice/game_system/DemonParasite.rb +5 -13
- data/lib/bcdice/game_system/DesperateRun.rb +1 -1
- data/lib/bcdice/game_system/DoubleCross.rb +8 -1
- data/lib/bcdice/game_system/Dracurouge.rb +3 -2
- data/lib/bcdice/game_system/EclipsePhase.rb +14 -14
- data/lib/bcdice/game_system/Elric.rb +18 -14
- data/lib/bcdice/game_system/Elysion.rb +1 -1
- data/lib/bcdice/game_system/EmbryoMachine.rb +9 -8
- data/lib/bcdice/game_system/Emoklore.rb +25 -20
- data/lib/bcdice/game_system/FateCoreSystem.rb +117 -0
- data/lib/bcdice/game_system/Fiasco.rb +1 -1
- data/lib/bcdice/game_system/FilledWith.rb +4 -0
- data/lib/bcdice/game_system/FutariSousa.rb +12 -10
- data/lib/bcdice/game_system/GURPS.rb +17 -28
- data/lib/bcdice/game_system/Garako.rb +1 -1
- data/lib/bcdice/game_system/GardenOrder.rb +12 -7
- data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
- data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
- data/lib/bcdice/game_system/Gorilla.rb +2 -8
- data/lib/bcdice/game_system/GranCrest.rb +189 -417
- data/lib/bcdice/game_system/Gundog.rb +9 -8
- data/lib/bcdice/game_system/GundogRevised.rb +10 -9
- data/lib/bcdice/game_system/GundogZero.rb +1 -1
- data/lib/bcdice/game_system/GurpsFW.rb +16 -16
- data/lib/bcdice/game_system/HarnMaster.rb +19 -26
- data/lib/bcdice/game_system/HatsuneMiku.rb +1 -1
- data/lib/bcdice/game_system/Hieizan.rb +12 -21
- data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
- data/lib/bcdice/game_system/HuntersMoon.rb +5 -10
- data/lib/bcdice/game_system/InfiniteFantasia.rb +19 -17
- data/lib/bcdice/game_system/Insane.rb +13 -20
- data/lib/bcdice/game_system/Irisbane.rb +154 -0
- data/lib/bcdice/game_system/IthaWenUa.rb +8 -15
- data/lib/bcdice/game_system/JamesBond.rb +10 -10
- data/lib/bcdice/game_system/JekyllAndHyde.rb +1 -1
- data/lib/bcdice/game_system/Kamigakari.rb +1 -1
- data/lib/bcdice/game_system/KanColle.rb +4 -9
- data/lib/bcdice/game_system/Karukami.rb +84 -0
- data/lib/bcdice/game_system/KemonoNoMori.rb +26 -39
- data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
- data/lib/bcdice/game_system/KurayamiCrying.rb +142 -3
- data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
- data/lib/bcdice/game_system/LogHorizon.rb +10 -7
- data/lib/bcdice/game_system/MagicaLogia_SimplifiedChinese.rb +66 -0
- data/lib/bcdice/game_system/MeikyuDays.rb +10 -8
- data/lib/bcdice/game_system/MeikyuKingdom.rb +26 -26
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -3
- data/lib/bcdice/game_system/MetalHead.rb +12 -22
- data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
- data/lib/bcdice/game_system/MonotoneMuseum.rb +8 -6
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +4 -4
- data/lib/bcdice/game_system/Nechronica.rb +63 -90
- data/lib/bcdice/game_system/NinjaSlayer.rb +6 -7
- data/lib/bcdice/game_system/NjslyrBattle.rb +8 -11
- data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
- data/lib/bcdice/game_system/Paradiso.rb +1 -1
- data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
- data/lib/bcdice/game_system/Peekaboo.rb +4 -9
- data/lib/bcdice/game_system/Pendragon.rb +7 -7
- data/lib/bcdice/game_system/PersonaO.rb +86 -0
- data/lib/bcdice/game_system/PhantasmAdventure.rb +8 -8
- data/lib/bcdice/game_system/Postman.rb +1 -1
- data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
- data/lib/bcdice/game_system/Raisondetre.rb +2 -2
- data/lib/bcdice/game_system/Revulture.rb +123 -0
- data/lib/bcdice/game_system/RuneQuest.rb +8 -8
- data/lib/bcdice/game_system/Ryutama.rb +1 -1
- data/lib/bcdice/game_system/SRS.rb +17 -16
- data/lib/bcdice/game_system/SamsaraBallad.rb +38 -11
- data/lib/bcdice/game_system/Satasupe.rb +32 -32
- data/lib/bcdice/game_system/ScreamHighSchool.rb +5 -5
- data/lib/bcdice/game_system/SharedFantasia.rb +19 -23
- data/lib/bcdice/game_system/ShinobiGami.rb +14 -6
- data/lib/bcdice/game_system/Skynauts.rb +103 -142
- data/lib/bcdice/game_system/SkynautsBouken.rb +228 -0
- data/lib/bcdice/game_system/StarryDolls.rb +318 -0
- data/lib/bcdice/game_system/SteamPunkers.rb +25 -7
- data/lib/bcdice/game_system/StellarKnights.rb +85 -706
- data/lib/bcdice/game_system/StellarKnights_Korean.rb +79 -0
- data/lib/bcdice/game_system/{SterileLife.rb → StellarLife.rb} +162 -226
- data/lib/bcdice/game_system/StratoShout.rb +8 -16
- data/lib/bcdice/game_system/Strave.rb +1 -1
- data/lib/bcdice/game_system/SwordWorld.rb +22 -9
- data/lib/bcdice/game_system/SwordWorld2_0.rb +22 -7
- data/lib/bcdice/game_system/SwordWorld2_5.rb +8 -2
- data/lib/bcdice/game_system/TalesFromTheLoop.rb +83 -0
- data/lib/bcdice/game_system/TherapieSein.rb +1 -1
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +4 -3
- data/lib/bcdice/game_system/TokyoGhostResearch.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +2 -2
- data/lib/bcdice/game_system/ToshiakiHolyGrailWar.rb +92 -0
- data/lib/bcdice/game_system/TrinitySeven.rb +279 -280
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
- data/lib/bcdice/game_system/Utakaze.rb +53 -48
- data/lib/bcdice/game_system/Villaciel.rb +1 -1
- data/lib/bcdice/game_system/WARPS.rb +11 -9
- data/lib/bcdice/game_system/WaresBlade.rb +4 -9
- data/lib/bcdice/game_system/Warhammer.rb +15 -6
- data/lib/bcdice/game_system/Warhammer4.rb +15 -11
- data/lib/bcdice/game_system/WitchQuest.rb +1 -1
- data/lib/bcdice/game_system/YankeeYogSothoth.rb +4 -9
- data/lib/bcdice/game_system/YearZeroEngine.rb +40 -19
- data/lib/bcdice/game_system/Yggdrasill.rb +1 -1
- data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
- data/lib/bcdice/game_system/beginning_idol/accessories_table.rb +31 -0
- data/lib/bcdice/game_system/beginning_idol/bad_status_table.rb +43 -0
- data/lib/bcdice/game_system/beginning_idol/chain_d66_table.rb +29 -0
- data/lib/bcdice/game_system/beginning_idol/chain_table.rb +37 -0
- data/lib/bcdice/game_system/beginning_idol/costume_table.rb +37 -0
- data/lib/bcdice/game_system/beginning_idol/d6_twice_table.rb +36 -0
- data/lib/bcdice/game_system/beginning_idol/item_table.rb +51 -0
- data/lib/bcdice/game_system/beginning_idol/my_skill_name_table.rb +44 -0
- data/lib/bcdice/game_system/beginning_idol/random_event_table.rb +31 -0
- data/lib/bcdice/game_system/beginning_idol/skill_table.rb +63 -0
- data/lib/bcdice/game_system/beginning_idol/table.rb +193 -0
- data/lib/bcdice/game_system/beginning_idol/with_abnormality.rb +74 -0
- data/lib/bcdice/game_system/beginning_idol/work_table.rb +57 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
- data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +4 -4
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +50 -7
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +148 -107
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
- data/lib/bcdice/game_system.rb +18 -1
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +26 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +48 -6
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "bcdice/base"
|
3
4
|
require "bcdice/game_system/sword_world/rating_parser"
|
4
5
|
|
5
6
|
module BCDice
|
@@ -9,7 +10,7 @@ module BCDice
|
|
9
10
|
ID = 'SwordWorld'
|
10
11
|
|
11
12
|
# ゲームシステム名
|
12
|
-
NAME = '
|
13
|
+
NAME = 'ソード・ワールドRPG'
|
13
14
|
|
14
15
|
# ゲームシステム名の読みがな
|
15
16
|
SORT_KEY = 'そおとわあると'
|
@@ -17,7 +18,7 @@ module BCDice
|
|
17
18
|
# ダイスボットの使い方
|
18
19
|
HELP_MESSAGE = "・SW レーティング表 (Kx[c]+m$f) (x:キー, c:クリティカル値, m:ボーナス, f:出目修正)\n"
|
19
20
|
|
20
|
-
register_prefix('H?K
|
21
|
+
register_prefix('H?K')
|
21
22
|
|
22
23
|
def initialize(command)
|
23
24
|
super(command)
|
@@ -67,6 +68,10 @@ module BCDice
|
|
67
68
|
return "キーナンバーは#{keyMax}までです"
|
68
69
|
end
|
69
70
|
|
71
|
+
if command.infinite_roll?
|
72
|
+
return Result.new("C値を#{command.min_critical}以上にしてください")
|
73
|
+
end
|
74
|
+
|
70
75
|
newRates = getNewRates(rate_sw2_0)
|
71
76
|
|
72
77
|
output = "#{command} > "
|
@@ -82,7 +87,7 @@ module BCDice
|
|
82
87
|
first_modify = command.first_modify
|
83
88
|
|
84
89
|
loop do
|
85
|
-
dice_raw, diceText = rollDice(command)
|
90
|
+
dice_raw, diceText = rollDice(command, round)
|
86
91
|
dice = dice_raw
|
87
92
|
|
88
93
|
if first_to != 0
|
@@ -125,10 +130,17 @@ module BCDice
|
|
125
130
|
break unless dice >= command.critical
|
126
131
|
end
|
127
132
|
|
128
|
-
|
129
|
-
|
133
|
+
result_text, critical, fumble = getResultText(
|
134
|
+
totalValue, command, diceResults, diceResultTotals,
|
135
|
+
rateResults, diceOnlyTotal, round
|
136
|
+
)
|
137
|
+
output += result_text
|
130
138
|
|
131
|
-
return
|
139
|
+
return Result.new.tap do |r|
|
140
|
+
r.text = output
|
141
|
+
r.critical = critical
|
142
|
+
r.fumble = fumble
|
143
|
+
end
|
132
144
|
end
|
133
145
|
|
134
146
|
def getSW2_0_RatingTable
|
@@ -287,7 +299,7 @@ module BCDice
|
|
287
299
|
return newRates
|
288
300
|
end
|
289
301
|
|
290
|
-
def rollDice(_command)
|
302
|
+
def rollDice(_command, _round)
|
291
303
|
dice_list = @randomizer.roll_barabara(2, 6)
|
292
304
|
total = dice_list.sum()
|
293
305
|
dice_str = dice_list.join(",")
|
@@ -301,6 +313,7 @@ module BCDice
|
|
301
313
|
# @param rateResults [Array<String>]
|
302
314
|
# @param dice_total [Integer]
|
303
315
|
# @param round [Integer]
|
316
|
+
# @return [Array(String, Boolean, Boolean)] output, critical, fumble
|
304
317
|
def getResultText(rating_total, command, diceResults, diceResultTotals,
|
305
318
|
rateResults, dice_total, round)
|
306
319
|
sequence = []
|
@@ -310,7 +323,7 @@ module BCDice
|
|
310
323
|
if dice_total <= 2
|
311
324
|
sequence.push(rateResults.join(','))
|
312
325
|
sequence.push("自動的失敗")
|
313
|
-
return sequence.join(" > ")
|
326
|
+
return sequence.join(" > "), false, true
|
314
327
|
end
|
315
328
|
|
316
329
|
# rate回数が1回で、修正値がない時には途中式と最終結果が一致するので、途中式を省略する
|
@@ -347,7 +360,7 @@ module BCDice
|
|
347
360
|
total_text = total.to_s
|
348
361
|
sequence.push(total_text)
|
349
362
|
|
350
|
-
return sequence.join(" > ")
|
363
|
+
return sequence.join(" > "), round > 1, false
|
351
364
|
end
|
352
365
|
end
|
353
366
|
end
|
@@ -12,7 +12,7 @@ module BCDice
|
|
12
12
|
ID = 'SwordWorld2.0'
|
13
13
|
|
14
14
|
# ゲームシステム名
|
15
|
-
NAME = '
|
15
|
+
NAME = 'ソード・ワールド2.0'
|
16
16
|
|
17
17
|
# ゲームシステム名の読みがな
|
18
18
|
SORT_KEY = 'そおとわあると2.0'
|
@@ -54,6 +54,12 @@ module BCDice
|
|
54
54
|
・グレイテストフォーチュンは末尾に gf
|
55
55
|
例)K20gf K30+24@8GF K40+24@8$12r10gf
|
56
56
|
|
57
|
+
・威力表を1d+sfで参照 クリティカル後も継続 sf4
|
58
|
+
例)k10sf4 k0+5SF4@13 k70+26sf3@9
|
59
|
+
|
60
|
+
・威力表を1d+tfで参照 クリティカル後は2dで参照 tf3
|
61
|
+
例)k10tf3 k0+5TF4@13 k70+26tf3@9
|
62
|
+
|
57
63
|
・超越判定用に2d6ロールに 2D6@10 書式でクリティカル値付与が可能に。
|
58
64
|
例)2D6@10 2D6@10+11>=30
|
59
65
|
|
@@ -68,7 +74,7 @@ module BCDice
|
|
68
74
|
絡み効果表を出すことができます。
|
69
75
|
INFO_MESSAGE_TEXT
|
70
76
|
|
71
|
-
register_prefix('H?K
|
77
|
+
register_prefix('H?K', 'Gr', '2D6?@\d+', 'FT', 'TT')
|
72
78
|
|
73
79
|
def initialize(command)
|
74
80
|
super(command)
|
@@ -108,14 +114,23 @@ module BCDice
|
|
108
114
|
return RatingParser.new(version: :v2_0)
|
109
115
|
end
|
110
116
|
|
111
|
-
def rollDice(command)
|
117
|
+
def rollDice(command, round)
|
118
|
+
if command.semi_fixed_val > 0
|
119
|
+
dice = @randomizer.roll_once(6)
|
120
|
+
return dice + command.semi_fixed_val, "#{dice},#{command.semi_fixed_val}"
|
121
|
+
end
|
122
|
+
if round == 0 && command.tmp_fixed_val > 0
|
123
|
+
dice = @randomizer.roll_once(6)
|
124
|
+
return dice + command.tmp_fixed_val, "#{dice},#{command.tmp_fixed_val}"
|
125
|
+
end
|
112
126
|
unless command.greatest_fortune
|
113
|
-
return super(command)
|
127
|
+
return super(command, round)
|
114
128
|
end
|
115
129
|
|
116
|
-
|
117
|
-
|
118
|
-
|
130
|
+
if command.greatest_fortune
|
131
|
+
dice = @randomizer.roll_once(6)
|
132
|
+
return dice * 2, "#{dice},#{dice}"
|
133
|
+
end
|
119
134
|
end
|
120
135
|
|
121
136
|
def growth(count = 1)
|
@@ -9,7 +9,7 @@ module BCDice
|
|
9
9
|
ID = 'SwordWorld2.5'
|
10
10
|
|
11
11
|
# ゲームシステム名
|
12
|
-
NAME = '
|
12
|
+
NAME = 'ソード・ワールド2.5'
|
13
13
|
|
14
14
|
# ゲームシステム名の読みがな
|
15
15
|
SORT_KEY = 'そおとわあると2.5'
|
@@ -56,6 +56,12 @@ module BCDice
|
|
56
56
|
・グレイテストフォーチュンは末尾に gf
|
57
57
|
例)K20gf K30+24@8GF K40+24@8$12r5gf
|
58
58
|
|
59
|
+
・威力表を1d+sfで参照 クリティカル後も継続 sf4
|
60
|
+
例)k10sf4 k0+5sf4@13 k70+26sf3@9
|
61
|
+
|
62
|
+
・威力表を1d+tfで参照 クリティカル後は2dで参照 tf3
|
63
|
+
例)k10tf3 k0+5tf4@13 k70+26tf3@9
|
64
|
+
|
59
65
|
・超越判定用に2d6ロールに 2D6@10 書式でクリティカル値付与が可能に。
|
60
66
|
例)2D6@10 2D6@10+11>=30
|
61
67
|
|
@@ -76,7 +82,7 @@ module BCDice
|
|
76
82
|
アビスカース表を出すことができます。
|
77
83
|
INFO_MESSAGE_TEXT
|
78
84
|
|
79
|
-
register_prefix('H?K
|
85
|
+
register_prefix('H?K', 'Gr', '2D6?@\d+', 'FT', 'TT', 'Dru', 'ABT')
|
80
86
|
|
81
87
|
ABYSS_CURSE_TABLE = DiceTable::D66GridTable.new(
|
82
88
|
'アビスカース表', [
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class TalesFromTheLoop < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = "TalesFromTheLoop"
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = "ザ・ループTRPG"
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = "さるうふTRPG"
|
14
|
+
|
15
|
+
HELP_MESSAGE = <<~TEXT
|
16
|
+
■ 判定コマンド(nTFLx-x+x or nTFLx+x-x)
|
17
|
+
(必要成功数)TFL(判定ダイス数)+/-(修正ダイス数)
|
18
|
+
|
19
|
+
※ 必要成功数と修正ダイス数は省略可能
|
20
|
+
|
21
|
+
例1) 必要成功数1、判定ダイスは能力値3
|
22
|
+
1TFL3
|
23
|
+
|
24
|
+
例2)必要成功数不明、あるいはダイスボットの成功判定を使わない、判定ダイスは能力値3+技能1で4、アイテムの修正+1
|
25
|
+
TFL4+1
|
26
|
+
|
27
|
+
例3)必要成功数1、判定ダイスは能力値2+技能1で3、コンディションにチェックが2つ、アイテムの修正+1
|
28
|
+
1TFL3-2+1
|
29
|
+
あるいは以下のようにカッコ書きで内訳を詳細に記述することも可能。
|
30
|
+
1TFL(2+1)-(1+1)+1
|
31
|
+
修正ダイスのプラスとマイナスは逆でもよい。
|
32
|
+
1TFL(2+1)+1-(1+1)
|
33
|
+
TEXT
|
34
|
+
|
35
|
+
register_prefix('(\d+)?(TFL)')
|
36
|
+
|
37
|
+
def eval_game_system_specific_command(command)
|
38
|
+
parser = Command::Parser.new(/\d*TFL\d+/, round_type: round_type)
|
39
|
+
parsed = parser.parse(command)
|
40
|
+
return nil unless parsed
|
41
|
+
|
42
|
+
difficulty, dice_pool = parsed.command.split("TFL", 2).map(&:to_i)
|
43
|
+
dice_pool += parsed.modify_number
|
44
|
+
if dice_pool <= 0
|
45
|
+
dice_pool = 1
|
46
|
+
end
|
47
|
+
|
48
|
+
ability_dice_text, success_dice = make_dice_roll(dice_pool)
|
49
|
+
|
50
|
+
return make_dice_roll_text(difficulty, dice_pool, ability_dice_text, success_dice)
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def make_dice_roll_text(difficulty, dice_pool, ability_dice_text, success_dice)
|
56
|
+
dice_count_text = "(#{dice_pool}D6) > #{ability_dice_text} 成功数:#{success_dice}"
|
57
|
+
push_dice = (dice_pool - success_dice)
|
58
|
+
|
59
|
+
if push_dice > 0
|
60
|
+
dice_count_text = "#{dice_count_text} 振り直し可能:#{push_dice}"
|
61
|
+
reroll_command = "\n振り直しコマンド: TFL#{push_dice}"
|
62
|
+
end
|
63
|
+
|
64
|
+
if difficulty > 0
|
65
|
+
if success_dice >= difficulty
|
66
|
+
return Result.success("#{dice_count_text} 成功!#{reroll_command}")
|
67
|
+
else
|
68
|
+
return Result.failure("#{dice_count_text} 失敗!#{reroll_command}")
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
return "#{dice_count_text}#{reroll_command}"
|
73
|
+
end
|
74
|
+
|
75
|
+
def make_dice_roll(dice_pool)
|
76
|
+
dice_list = @randomizer.roll_barabara(dice_pool, 6)
|
77
|
+
success_dice = dice_list.count(6)
|
78
|
+
|
79
|
+
return "[#{dice_list.join(',')}]", success_dice
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -52,18 +52,19 @@ module BCDice
|
|
52
52
|
|
53
53
|
result =
|
54
54
|
if cmd.cmp_op
|
55
|
-
total.send(cmd.cmp_op, cmd.target_number) ? "成功" : "失敗"
|
55
|
+
total.send(cmd.cmp_op, cmd.target_number) ? Result.success("成功") : Result.failure("失敗")
|
56
56
|
end
|
57
57
|
|
58
58
|
sequence = [
|
59
59
|
"(#{cmd})",
|
60
60
|
interim_expr(cmd, dice_total),
|
61
61
|
total.to_s,
|
62
|
-
result,
|
62
|
+
result.text,
|
63
63
|
epp(count_one)
|
64
64
|
].compact
|
65
65
|
|
66
|
-
|
66
|
+
result.text = sequence.join(" > ")
|
67
|
+
return result
|
67
68
|
end
|
68
69
|
|
69
70
|
# 出目が全て同じか
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class ToshiakiHolyGrailWar < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'ToshiakiHolyGrailWar'
|
8
|
+
# ゲームシステム名
|
9
|
+
NAME = 'としあきの聖杯戦争TRPG'
|
10
|
+
# ゲームシステム名の読みがな
|
11
|
+
SORT_KEY = 'としあきのせいはいせんそうTRPG'
|
12
|
+
# ダイスボットの使い方
|
13
|
+
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
14
|
+
■ 判定 (Fx+y-z@a>=t)
|
15
|
+
補正値ペナルティを自動計算してダイスの面数を決定しダイスロールを実行します。
|
16
|
+
ダイス面数は2以上、10以下の範囲に制限されます。
|
17
|
+
x: ステータス
|
18
|
+
y: 補正値 (任意)
|
19
|
+
z: マイナス補正値 (任意)
|
20
|
+
a: ダイス面数の増量 (任意)
|
21
|
+
t: 目標値 (任意)
|
22
|
+
例)
|
23
|
+
F8+11, F8+11-5, F8+11-5@1, F8+11+9-3-2@-1, F8+11-5>=50, F8
|
24
|
+
INFO_MESSAGE_TEXT
|
25
|
+
|
26
|
+
register_prefix('F')
|
27
|
+
|
28
|
+
def eval_game_system_specific_command(command)
|
29
|
+
roll_f(command)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def roll_f(command)
|
35
|
+
parser = Command::Parser.new(/F(\d+)(\+\d+)*(-\d+)*/, round_type: RoundType::CEIL)
|
36
|
+
.disable_modifier
|
37
|
+
.enable_critical
|
38
|
+
cmd = parser.parse(command)
|
39
|
+
unless cmd
|
40
|
+
return nil
|
41
|
+
end
|
42
|
+
|
43
|
+
m = cmd.command.match(/^F(\d+)((?:\+\d+)+)?((?:-\d+)+)?$/)
|
44
|
+
unless m
|
45
|
+
return nil
|
46
|
+
end
|
47
|
+
|
48
|
+
status = m[1].to_i
|
49
|
+
positive_modifier = m[2] ? Arithmetic.eval(m[2], RoundType::CEIL) : 0
|
50
|
+
negative_modifier = m[3] ? Arithmetic.eval(m[3], RoundType::CEIL) : 0
|
51
|
+
side_bonus = cmd.critical || 0
|
52
|
+
|
53
|
+
times = [status + positive_modifier + negative_modifier, 0].max
|
54
|
+
sides = (6 - positive_modifier_penalty(positive_modifier) + negative_modifier_bonus(negative_modifier) + side_bonus).clamp(2, 10)
|
55
|
+
|
56
|
+
list = @randomizer.roll_barabara(times, sides)
|
57
|
+
total = list.sum()
|
58
|
+
result =
|
59
|
+
if cmd.cmp_op.nil?
|
60
|
+
Result.new
|
61
|
+
elsif total.send(cmd.cmp_op, cmd.target_number)
|
62
|
+
Result.success("成功")
|
63
|
+
else
|
64
|
+
Result.failure("失敗")
|
65
|
+
end
|
66
|
+
|
67
|
+
sequence = [
|
68
|
+
cmd,
|
69
|
+
"(#{times}D#{sides}#{cmd.cmp_op}#{cmd.target_number})",
|
70
|
+
"#{total}[#{list.join(',')}]",
|
71
|
+
total,
|
72
|
+
result.text,
|
73
|
+
].compact
|
74
|
+
|
75
|
+
result.text = sequence.join(" > ")
|
76
|
+
return result
|
77
|
+
end
|
78
|
+
|
79
|
+
def positive_modifier_penalty(modifier)
|
80
|
+
if modifier <= 10
|
81
|
+
0
|
82
|
+
else
|
83
|
+
modifier / 10
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def negative_modifier_bonus(modifier)
|
88
|
+
modifier <= -5 ? 1 : 0
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|