bcdice 3.1.3 → 3.5.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.
- 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
|
@@ -18,87 +18,92 @@ module BCDice
|
|
|
18
18
|
n個のサイコロで行為判定ロール。ゾロ目の最大個数を成功レベルとして表示。nを省略すると2UK扱い。
|
|
19
19
|
例)3UK :サイコロ3個で行為判定
|
|
20
20
|
例)UK :サイコロ2個で行為判定
|
|
21
|
-
|
|
21
|
+
・難易度付き行為判定ロール(nUK>=t)
|
|
22
|
+
tに難易度を指定した行為判定ロール。
|
|
23
|
+
成功レベルと難易度tを比べて成否を判定します。
|
|
24
|
+
例)6UK>=3 :サイコロ6個で行為判定して、成功レベル3が出れば成功。
|
|
22
25
|
・クリティカルコール付き行為判定ロール(nUK@c or nUKc)
|
|
23
|
-
|
|
24
|
-
ゾロ目ではなく、cと同じ値の出目数x2
|
|
26
|
+
cに「龍のダイス目」を指定した行為判定ロール。
|
|
27
|
+
ゾロ目ではなく、cと同じ値の出目数x2が成功レベルとなります。難易度の指定も可能です。
|
|
25
28
|
例)3UK@5 :龍のダイス「月」でクリティカルコール宣言したサイコロ3個の行為判定
|
|
26
29
|
MESSAGETEXT
|
|
27
30
|
|
|
28
|
-
register_prefix('\d*UK
|
|
29
|
-
|
|
30
|
-
def initialize(command)
|
|
31
|
-
super(command)
|
|
32
|
-
@arrayDragonDiceName = ['', '風', '雨', '雲', '影', '月', '歌']
|
|
33
|
-
@enabled_upcase_input = false
|
|
34
|
-
end
|
|
31
|
+
register_prefix('\d*UK')
|
|
35
32
|
|
|
36
33
|
def eval_game_system_specific_command(command)
|
|
37
34
|
debug('eval_game_system_specific_command command', command)
|
|
38
35
|
|
|
39
|
-
|
|
36
|
+
check_roll(command)
|
|
37
|
+
end
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
when /(\d+)?UK(@?(\d))?(>=(\d+))?/i
|
|
43
|
-
base = (Regexp.last_match(1) || 2).to_i
|
|
44
|
-
crit = Regexp.last_match(3).to_i
|
|
45
|
-
diff = Regexp.last_match(5).to_i
|
|
46
|
-
result = checkRoll(base, crit, diff)
|
|
47
|
-
end
|
|
39
|
+
private
|
|
48
40
|
|
|
49
|
-
|
|
41
|
+
DRAGON_DICE_NAME = {
|
|
42
|
+
1 => "風",
|
|
43
|
+
2 => "雨",
|
|
44
|
+
3 => "雲",
|
|
45
|
+
4 => "影",
|
|
46
|
+
5 => "月",
|
|
47
|
+
6 => "歌"
|
|
48
|
+
}.freeze
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
def check_roll(command)
|
|
51
|
+
m = /^(\d+)?UK(@?(\d))?(>=(\d+))?$/i.match(command)
|
|
52
|
+
return nil unless m
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
base = (m[1] || 2).to_i
|
|
55
|
+
crit = m[3].to_i
|
|
56
|
+
diff = m[5].to_i
|
|
56
57
|
|
|
57
58
|
base = getValue(base)
|
|
58
59
|
crit = getValue(crit)
|
|
59
60
|
|
|
60
|
-
return
|
|
61
|
+
return nil if base < 1
|
|
61
62
|
|
|
62
63
|
crit = 6 if crit > 6
|
|
63
64
|
|
|
64
|
-
|
|
65
|
+
dice_list = @randomizer.roll_barabara(base, 6).sort
|
|
66
|
+
result = get_roll_result(dice_list, crit, diff)
|
|
65
67
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
sequence = [
|
|
69
|
+
command,
|
|
70
|
+
"(#{base}D6)",
|
|
71
|
+
"[#{dice_list.join(',')}]",
|
|
72
|
+
result.text
|
|
73
|
+
]
|
|
74
|
+
result.text = sequence.join(" > ")
|
|
70
75
|
|
|
71
76
|
return result
|
|
72
77
|
end
|
|
73
78
|
|
|
74
|
-
def
|
|
75
|
-
success, maxnum, setCount = getSuccessInfo(diceList, crit
|
|
79
|
+
def get_roll_result(diceList, crit, diff)
|
|
80
|
+
success, maxnum, setCount = getSuccessInfo(diceList, crit)
|
|
76
81
|
|
|
77
|
-
|
|
82
|
+
sequence = []
|
|
78
83
|
|
|
79
84
|
if isDragonDice(crit)
|
|
80
|
-
|
|
85
|
+
sequence.push("龍のダイス「#{DRAGON_DICE_NAME[crit]}」(#{crit})を使用")
|
|
81
86
|
end
|
|
82
87
|
|
|
83
|
-
if
|
|
84
|
-
|
|
85
|
-
if diff != 0
|
|
86
|
-
diffSuccess = (maxnum >= diff)
|
|
87
|
-
if diffSuccess
|
|
88
|
-
result += " > 成功"
|
|
89
|
-
else
|
|
90
|
-
result += " > 失敗"
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
88
|
+
if success
|
|
89
|
+
sequence.push("成功レベル:#{maxnum} (#{setCount}セット)")
|
|
94
90
|
else
|
|
95
|
-
|
|
91
|
+
sequence.push("失敗")
|
|
92
|
+
return Result.failure(sequence.join(" > "))
|
|
96
93
|
end
|
|
97
94
|
|
|
98
|
-
|
|
95
|
+
if diff == 0
|
|
96
|
+
return Result.success(sequence.join(" > ")) # 難易度なしでも成功として扱う
|
|
97
|
+
elsif maxnum >= diff
|
|
98
|
+
sequence.push("成功")
|
|
99
|
+
return Result.success(sequence.join(" > "))
|
|
100
|
+
else
|
|
101
|
+
sequence.push("失敗")
|
|
102
|
+
return Result.failure(sequence.join(" > "))
|
|
103
|
+
end
|
|
99
104
|
end
|
|
100
105
|
|
|
101
|
-
def getSuccessInfo(diceList, crit
|
|
106
|
+
def getSuccessInfo(diceList, crit)
|
|
102
107
|
debug("checkSuccess diceList, crit", diceList, crit)
|
|
103
108
|
|
|
104
109
|
diceCountHash = getDiceCountHash(diceList, crit)
|
|
@@ -109,7 +114,7 @@ module BCDice
|
|
|
109
114
|
countThreshold = (isDragonDice(crit) ? 1 : 2)
|
|
110
115
|
|
|
111
116
|
diceCountHash.each do |dice, count|
|
|
112
|
-
maxnum = count if
|
|
117
|
+
maxnum = count if count > maxnum
|
|
113
118
|
successDiceList << dice if count >= countThreshold
|
|
114
119
|
end
|
|
115
120
|
|
|
@@ -47,7 +47,7 @@ module BCDice
|
|
|
47
47
|
・改良種表 IS
|
|
48
48
|
MESSAGETEXT
|
|
49
49
|
|
|
50
|
-
register_prefix('
|
|
50
|
+
register_prefix('\d+VBS(>=\d+)?', '\d+VF', '\d+VM', '\d+VG', 'PJ[VA]?', 'PQ[VA]?', 'AC', 'MM([IAD]|V[VA]?)', 'F[LRWGBCS]', 'IP[VA]?', 'EP[VA]?', 'MP', 'IS')
|
|
51
51
|
|
|
52
52
|
def initialize(command)
|
|
53
53
|
super(command)
|
|
@@ -15,17 +15,19 @@ module BCDice
|
|
|
15
15
|
# ダイスボットの使い方
|
|
16
16
|
HELP_MESSAGE = "失敗、成功度の自動判定を行います。\n"
|
|
17
17
|
|
|
18
|
-
def
|
|
18
|
+
def result_2d6(total, dice_total, _dice_list, cmp_op, target)
|
|
19
|
+
return nil unless cmp_op == :<=
|
|
20
|
+
|
|
19
21
|
if dice_total <= 2
|
|
20
|
-
"
|
|
22
|
+
Result.critical("クリティカル")
|
|
21
23
|
elsif dice_total >= 12
|
|
22
|
-
"
|
|
23
|
-
elsif
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
Result.fumble("ファンブル")
|
|
25
|
+
elsif target == "?"
|
|
26
|
+
Result.nothing
|
|
27
|
+
elsif total <= target
|
|
28
|
+
Result.success("#{target - total}成功")
|
|
29
|
+
else
|
|
30
|
+
Result.failure("失敗")
|
|
29
31
|
end
|
|
30
32
|
end
|
|
31
33
|
end
|
|
@@ -15,18 +15,13 @@ module BCDice
|
|
|
15
15
|
# ダイスボットの使い方
|
|
16
16
|
HELP_MESSAGE = "nD10>=m 方式の判定で成否、完全成功、完全失敗を自動判定します。\n"
|
|
17
17
|
|
|
18
|
-
def
|
|
19
|
-
return
|
|
20
|
-
return '' unless cmp_op == :>=
|
|
18
|
+
def result_nd10(_total, _dice_total, dice_list, cmp_op, _target)
|
|
19
|
+
return nil unless cmp_op == :>=
|
|
21
20
|
|
|
22
21
|
if dice_list.count(10) == dice_list.size
|
|
23
|
-
|
|
22
|
+
Result.critical("完全成功")
|
|
24
23
|
elsif dice_list.count(1) == dice_list.size
|
|
25
|
-
|
|
26
|
-
elsif total >= target
|
|
27
|
-
' > 成功'
|
|
28
|
-
else
|
|
29
|
-
' > 失敗'
|
|
24
|
+
Result.fumble("絶対失敗")
|
|
30
25
|
end
|
|
31
26
|
end
|
|
32
27
|
end
|
|
@@ -51,14 +51,23 @@ module BCDice
|
|
|
51
51
|
return output_msg
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
def
|
|
55
|
-
return
|
|
56
|
-
return
|
|
54
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
|
55
|
+
return Result.nothing if target == '?'
|
|
56
|
+
return nil unless cmp_op == :<=
|
|
57
57
|
|
|
58
58
|
if total <= target
|
|
59
|
-
"
|
|
59
|
+
Result.success("成功(成功度#{(target - total) / 10})")
|
|
60
60
|
else
|
|
61
|
-
"
|
|
61
|
+
Result.failure("失敗(失敗度#{(total - target) / 10})")
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def result_1d100_text(total, dice_total, cmp_op, target)
|
|
66
|
+
result = result_1d100(total, dice_total, cmp_op, target)&.text
|
|
67
|
+
if result.nil?
|
|
68
|
+
""
|
|
69
|
+
else
|
|
70
|
+
" > #{result}"
|
|
62
71
|
end
|
|
63
72
|
end
|
|
64
73
|
|
|
@@ -322,7 +331,7 @@ module BCDice
|
|
|
322
331
|
total_n = @randomizer.roll_once(100)
|
|
323
332
|
|
|
324
333
|
output = "(#{string}) > #{total_n}"
|
|
325
|
-
output +=
|
|
334
|
+
output += result_1d100_text(total_n, total_n, :<=, diff)
|
|
326
335
|
|
|
327
336
|
pos_num = (total_n % 10) * 10 + (total_n / 10).to_i
|
|
328
337
|
pos_num = 100 if total_n >= 100
|
|
@@ -28,7 +28,7 @@ module BCDice
|
|
|
28
28
|
|
|
29
29
|
■ 命中判定 (WHx)
|
|
30
30
|
"WH(命中値)"の形で指定します。
|
|
31
|
-
|
|
31
|
+
命中判定を行って、クリティカルかファンブルでなければ部位も表示します。
|
|
32
32
|
例)wh60 wh(43-20)
|
|
33
33
|
INFO_MESSAGE_TEXT
|
|
34
34
|
|
|
@@ -44,9 +44,9 @@ module BCDice
|
|
|
44
44
|
roll_critical_table(command) || roll_attack(command) || roll_tables(command, TABLES)
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
def
|
|
48
|
-
return
|
|
49
|
-
return
|
|
47
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
|
48
|
+
return Result.nothing if target == '?'
|
|
49
|
+
return nil unless cmp_op == :<=
|
|
50
50
|
|
|
51
51
|
t10 = total / 10
|
|
52
52
|
d10 = target / 10
|
|
@@ -62,18 +62,19 @@ module BCDice
|
|
|
62
62
|
|
|
63
63
|
result =
|
|
64
64
|
if total <= 5
|
|
65
|
-
"自動成功"
|
|
65
|
+
Result.success("自動成功")
|
|
66
66
|
elsif total >= 96
|
|
67
|
-
"自動失敗"
|
|
67
|
+
Result.failure("自動失敗")
|
|
68
68
|
elsif total <= target
|
|
69
|
-
"成功"
|
|
69
|
+
Result.success("成功")
|
|
70
70
|
else
|
|
71
|
-
"失敗"
|
|
71
|
+
Result.failure("失敗")
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
sl_text = format("(SL%+d)", sl)
|
|
75
|
+
result.text += "#{sl_text} > #{result_detail(sl, total, target)}"
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
return result
|
|
77
78
|
end
|
|
78
79
|
|
|
79
80
|
private
|
|
@@ -249,7 +250,7 @@ module BCDice
|
|
|
249
250
|
|
|
250
251
|
target_number = m[1].to_i
|
|
251
252
|
total = @randomizer.roll_once(100)
|
|
252
|
-
result =
|
|
253
|
+
result = result_1d100(total, total, :<=, target_number)&.text
|
|
253
254
|
|
|
254
255
|
sequence = [
|
|
255
256
|
"(#{command})",
|
|
@@ -266,6 +267,9 @@ module BCDice
|
|
|
266
267
|
if (total > target_number) || (total > 95) # 自動失敗時のファンブル処理も
|
|
267
268
|
if ones == tens
|
|
268
269
|
"ファンブル"
|
|
270
|
+
else
|
|
271
|
+
# 一の位と十の位を入れ替えて参照する
|
|
272
|
+
"(#{HIT_PARTS_TABLE.fetch(merge_d100(ones, tens)).content})"
|
|
269
273
|
end
|
|
270
274
|
elsif ones == tens
|
|
271
275
|
"クリティカル"
|
|
@@ -317,7 +321,7 @@ module BCDice
|
|
|
317
321
|
[61..70, '君はひどく躓きバランスを回復するのに手間取る。次の「移動」を失う。'],
|
|
318
322
|
[71..80, '君は武器を取り回しを誤る。次の「アクション」を失う。'],
|
|
319
323
|
[81..90, '君は筋を違えるか、足首をひねってしまう。「筋断裂(軽度)」の負傷を得る。「致命的負傷」としてカウントされる。'],
|
|
320
|
-
[91..100, '君は射程内のランダムな味方を攻撃してしまう。命中判定の出目の1の位をSL
|
|
324
|
+
[91..100, '君は射程内のランダムな味方を攻撃してしまう。命中判定の出目の1の位をSLとして用いること。攻撃可能な味方が居ない場合は、自己を攻撃してしまい「朦朧状態」1つを得る。'],
|
|
321
325
|
]
|
|
322
326
|
)
|
|
323
327
|
}.freeze
|
|
@@ -49,18 +49,13 @@ module BCDice
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
# ゲーム別成功度判定(2D6)
|
|
52
|
-
def
|
|
53
|
-
return
|
|
54
|
-
return '' unless cmp_op == :>=
|
|
52
|
+
def result_2d6(_total, dice_total, _dice_list, cmp_op, _target)
|
|
53
|
+
return nil unless cmp_op == :>=
|
|
55
54
|
|
|
56
55
|
if dice_total <= 2
|
|
57
|
-
"
|
|
56
|
+
Result.fumble("ファンブル(判定失敗。ファンブル表(FT)を振ること)")
|
|
58
57
|
elsif dice_total >= 12
|
|
59
|
-
"
|
|
60
|
-
elsif total >= target
|
|
61
|
-
" > 成功"
|
|
62
|
-
else
|
|
63
|
-
" > 失敗"
|
|
58
|
+
Result.critical("スペシャル(判定成功。【テンション】が1段階上昇)")
|
|
64
59
|
end
|
|
65
60
|
end
|
|
66
61
|
|
|
@@ -19,15 +19,17 @@ module BCDice
|
|
|
19
19
|
|
|
20
20
|
・判定コマンド(nMYZx+x+x)
|
|
21
21
|
(難易度)MYZ(能力ダイス数)+(技能ダイス数)+(アイテムダイス数) # (1と6を数え、プッシュ可能数を表示)
|
|
22
|
+
(難易度)MYZ(能力ダイス数)-(技能ダイス数)+(アイテムダイス数) # (1と6を数え、プッシュ可能数を表示、技能のマイナス指定)
|
|
22
23
|
|
|
23
24
|
※ 難易度と技能、アイテムダイス数は省略可能
|
|
24
25
|
INFO_MESSAGE_TEXT
|
|
25
26
|
|
|
26
|
-
DIFFICULTY_INDEX =
|
|
27
|
-
COMMAND_TYPE_INDEX =
|
|
28
|
-
ABILITY_INDEX =
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
DIFFICULTY_INDEX = 1 # 難易度のインデックス
|
|
28
|
+
COMMAND_TYPE_INDEX = 2 # コマンドタイプのインデックス
|
|
29
|
+
ABILITY_INDEX = 3 # 能力値ダイスのインデックス
|
|
30
|
+
SKILL_SIGNED_INDEX = 5 # 技能値ダイス符号のインデックス
|
|
31
|
+
SKILL_INDEX = 6 # 技能値ダイスのインデックス
|
|
32
|
+
GEAR_INDEX = 8 # アイテムダイスのインデックス
|
|
31
33
|
|
|
32
34
|
register_prefix('(\d+)?(YZE|MYZ)')
|
|
33
35
|
|
|
@@ -42,7 +44,7 @@ module BCDice
|
|
|
42
44
|
end
|
|
43
45
|
|
|
44
46
|
def eval_game_system_specific_command(command)
|
|
45
|
-
m = /\A(\d+)?(YZE|MYZ)(\d+)(
|
|
47
|
+
m = /\A(\d+)?(YZE|MYZ)(\d+)((\+|-)(\d+))?(\+(\d+))?/.match(command)
|
|
46
48
|
unless m
|
|
47
49
|
return ''
|
|
48
50
|
end
|
|
@@ -70,18 +72,27 @@ module BCDice
|
|
|
70
72
|
dice_pool = m[SKILL_INDEX].to_i
|
|
71
73
|
skill_dice_text, success_dice, botch_dice = make_dice_roll(dice_pool)
|
|
72
74
|
|
|
73
|
-
|
|
75
|
+
skill_unsigned = m[SKILL_SIGNED_INDEX]
|
|
76
|
+
if command_type == 'YZE' && skill_unsigned == '-'
|
|
77
|
+
# YZEはシンプルに動作するコマンドなのでマイナス技能の処理は対応しない。
|
|
78
|
+
return "YZEコマンドでは技能ダイスをマイナス指定できません。"
|
|
79
|
+
elsif command_type == 'MYZ' && skill_unsigned == '-'
|
|
80
|
+
@total_success_dice -= success_dice # マイナス技能の成功は通常の成功と相殺される
|
|
81
|
+
else
|
|
82
|
+
@total_success_dice += success_dice
|
|
83
|
+
end
|
|
84
|
+
|
|
74
85
|
@total_botch_dice += botch_dice
|
|
75
|
-
@skill_botch_dice += botch_dice # 技能ダイスの1はpush
|
|
76
|
-
@push_dice += (dice_pool - success_dice) # 技能ダイスのみ1
|
|
86
|
+
@skill_botch_dice += botch_dice # 技能ダイスの1はpushで振り直し可能(例えマイナス技能でも)
|
|
87
|
+
@push_dice += (dice_pool - success_dice) # 技能ダイスのみ1を含むので、ここでは1を計算に入れない
|
|
77
88
|
|
|
78
|
-
dice_count_text += "
|
|
79
|
-
dice_text += "
|
|
89
|
+
dice_count_text += "#{skill_unsigned}(#{dice_pool}D6)"
|
|
90
|
+
dice_text += "#{skill_unsigned}#{skill_dice_text}"
|
|
80
91
|
end
|
|
81
92
|
|
|
82
|
-
if m[
|
|
83
|
-
dice_pool = m[
|
|
84
|
-
|
|
93
|
+
if m[GEAR_INDEX]
|
|
94
|
+
dice_pool = m[GEAR_INDEX].to_i
|
|
95
|
+
gear_dice_text, success_dice, botch_dice = make_dice_roll(dice_pool)
|
|
85
96
|
|
|
86
97
|
@total_success_dice += success_dice
|
|
87
98
|
@total_botch_dice += botch_dice
|
|
@@ -89,8 +100,9 @@ module BCDice
|
|
|
89
100
|
@push_dice += (dice_pool - (success_dice + botch_dice))
|
|
90
101
|
|
|
91
102
|
dice_count_text += "+(#{dice_pool}D6)"
|
|
92
|
-
dice_text += "+#{
|
|
103
|
+
dice_text += "+#{gear_dice_text}"
|
|
93
104
|
end
|
|
105
|
+
|
|
94
106
|
return make_result_text(command_type, dice_count_text, dice_text)
|
|
95
107
|
end
|
|
96
108
|
|
|
@@ -108,18 +120,27 @@ module BCDice
|
|
|
108
120
|
result_text = "#{dice_count_text} > #{dice_text} 成功数:#{@total_success_dice}"
|
|
109
121
|
if @difficulty > 0
|
|
110
122
|
if @total_success_dice >= @difficulty
|
|
111
|
-
|
|
123
|
+
return Result.success("#{result_text} 難易度=#{@difficulty}:判定成功!")
|
|
112
124
|
else
|
|
113
|
-
|
|
125
|
+
return Result.failure("#{result_text} 難易度=#{@difficulty}:判定失敗!")
|
|
114
126
|
end
|
|
115
127
|
end
|
|
116
128
|
return result_text
|
|
117
129
|
end
|
|
118
130
|
|
|
119
131
|
def make_result_with_myz(dice_count_text, dice_text)
|
|
120
|
-
result_text =
|
|
132
|
+
result_text = "#{dice_count_text} > #{dice_text} 成功数:#{@total_success_dice}"
|
|
133
|
+
atter_text = "\n出目1:[能力:#{@base_botch_dice},技能:#{@skill_botch_dice},アイテム:#{@gear_botch_dice}) プッシュ可能=#{@push_dice}ダイス"
|
|
134
|
+
|
|
135
|
+
if @difficulty > 0
|
|
136
|
+
if @total_success_dice >= @difficulty
|
|
137
|
+
return Result.success("#{result_text} 難易度=#{@difficulty}:判定成功!#{atter_text}")
|
|
138
|
+
else
|
|
139
|
+
return Result.failure("#{result_text} 難易度=#{@difficulty}:判定失敗!#{atter_text}")
|
|
140
|
+
end
|
|
141
|
+
end
|
|
121
142
|
|
|
122
|
-
return "#{result_text}
|
|
143
|
+
return "#{result_text}#{atter_text}"
|
|
123
144
|
end
|
|
124
145
|
|
|
125
146
|
def make_dice_roll(dice_pool)
|
|
@@ -88,7 +88,7 @@ module BCDice
|
|
|
88
88
|
|
|
89
89
|
add_dice_randomizer = CommonCommand::AddDice::Randomizer.new(@randomizer, self)
|
|
90
90
|
total = node.lhs.eval(self, add_dice_randomizer)
|
|
91
|
-
rand_values =
|
|
91
|
+
rand_values = add_dice_randomizer.rand_results.map(&:value)
|
|
92
92
|
|
|
93
93
|
n1 = count_fumble(rand_values, lucky_state)
|
|
94
94
|
n_max = count_critical(rand_values, lucky_state)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'bcdice/base'
|
|
4
|
+
|
|
3
5
|
module BCDice
|
|
4
6
|
module GameSystem
|
|
5
7
|
class ZettaiReido < Base
|
|
@@ -38,20 +40,23 @@ module BCDice
|
|
|
38
40
|
mod, modText = getModInfo(modText)
|
|
39
41
|
diff, diffText = getDiffInfo(diffValue)
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
output += " > #{baseAvility}-#{diceTotal}[#{diceText}]#{modText}"
|
|
44
|
-
|
|
43
|
+
baseCommandText = "(#{baseAvility}-2DR#{modText}#{diffText})"
|
|
44
|
+
diceCommandText = "#{baseAvility}-#{diceTotal}[#{diceText}]#{modText}"
|
|
45
45
|
total = baseAvility - diceTotal + mod
|
|
46
|
-
output += " > #{total}"
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
output += successText
|
|
47
|
+
result = getResult(diceTotal, total, diff)
|
|
50
48
|
|
|
51
|
-
darkPointText =
|
|
52
|
-
output += darkPointText
|
|
49
|
+
darkPointText = "#{darkPoint}DP" if darkPoint > 0
|
|
53
50
|
|
|
54
|
-
|
|
51
|
+
result.text = [
|
|
52
|
+
baseCommandText,
|
|
53
|
+
diceCommandText,
|
|
54
|
+
total.to_i,
|
|
55
|
+
result.text,
|
|
56
|
+
darkPointText,
|
|
57
|
+
].compact.join(" > ")
|
|
58
|
+
|
|
59
|
+
return result
|
|
55
60
|
end
|
|
56
61
|
|
|
57
62
|
def roll2DarkDice()
|
|
@@ -107,23 +112,13 @@ module BCDice
|
|
|
107
112
|
return diffValue, diffText
|
|
108
113
|
end
|
|
109
114
|
|
|
110
|
-
def
|
|
111
|
-
text = ''
|
|
112
|
-
|
|
113
|
-
if darkPoint > 0
|
|
114
|
-
text = " > #{darkPoint}DP"
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
return text
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
def getSuccessText(diceTotal, total, diff)
|
|
115
|
+
def getResult(diceTotal, total, diff)
|
|
121
116
|
if diceTotal == 0
|
|
122
|
-
return "
|
|
117
|
+
return Result.critical("クリティカル")
|
|
123
118
|
end
|
|
124
119
|
|
|
125
120
|
if diceTotal == 10
|
|
126
|
-
return "
|
|
121
|
+
return Result.fumble("ファンブル")
|
|
127
122
|
end
|
|
128
123
|
|
|
129
124
|
if diff.nil?
|
|
@@ -132,10 +127,10 @@ module BCDice
|
|
|
132
127
|
|
|
133
128
|
successLevel = (total - diff)
|
|
134
129
|
if successLevel >= 0
|
|
135
|
-
return "
|
|
130
|
+
return Result.success("#{successLevel} 成功")
|
|
136
131
|
end
|
|
137
132
|
|
|
138
|
-
return
|
|
133
|
+
return Result.failure("失敗")
|
|
139
134
|
end
|
|
140
135
|
end
|
|
141
136
|
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class BeginningIdol < Base
|
|
6
|
+
class << self
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
# @params locale [Symbol]
|
|
10
|
+
# @return [ChainTable]
|
|
11
|
+
def translate_accessories_table(locale)
|
|
12
|
+
items = I18n.t("BeginningIdol.ACT.items", locale: locale)
|
|
13
|
+
subtables = [
|
|
14
|
+
DiceTable::D66Table.from_i18n("BeginningIdol.ACT.subtables.head", locale),
|
|
15
|
+
DiceTable::D66Table.from_i18n("BeginningIdol.ACT.subtables.hat", locale),
|
|
16
|
+
DiceTable::D66Table.from_i18n("BeginningIdol.ACT.subtables.body", locale),
|
|
17
|
+
DiceTable::D66Table.from_i18n("BeginningIdol.ACT.subtables.arm", locale),
|
|
18
|
+
DiceTable::D66Table.from_i18n("BeginningIdol.ACT.subtables.foot", locale),
|
|
19
|
+
DiceTable::D66Table.from_i18n("BeginningIdol.ACT.subtables.other", locale),
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
ChainTable.new(
|
|
23
|
+
I18n.t("BeginningIdol.ACT.name", locale: locale),
|
|
24
|
+
"1D6",
|
|
25
|
+
items.zip(subtables)
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class BeginningIdol < Base
|
|
6
|
+
class BadStatusTable
|
|
7
|
+
def initialize(locale)
|
|
8
|
+
@locale = locale
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def roll_command(randomizer, command)
|
|
12
|
+
m = /^BT(\d+)?$/.match(command)
|
|
13
|
+
unless m
|
|
14
|
+
return nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
roll_counts = m[1]&.to_i || 1
|
|
18
|
+
return roll(randomizer, roll_counts)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @param randomizer [BCDice::Randomizer]
|
|
22
|
+
# @param counts [Integer]
|
|
23
|
+
def roll(randomizer, roll_counts = 1)
|
|
24
|
+
if roll_counts <= 0
|
|
25
|
+
return nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
name = I18n.t("BeginningIdol.BT.name", locale: @locale)
|
|
29
|
+
items = I18n.t("BeginningIdol.BT.items", locale: @locale)
|
|
30
|
+
prefix_format = I18n.t("BeginningIdol.BT.prefix_format", locale: @locale)
|
|
31
|
+
|
|
32
|
+
dice_list = randomizer.roll_barabara(roll_counts, 6).sort
|
|
33
|
+
index_list = dice_list.uniq
|
|
34
|
+
|
|
35
|
+
result_prefix = format(prefix_format, count_bad_status: index_list.size) + "\n" if index_list.size > 1
|
|
36
|
+
result_text = index_list.map { |i| items[i - 1] }.join("\n")
|
|
37
|
+
|
|
38
|
+
return "#{name} > [#{dice_list.join(',')}] > #{result_prefix}#{result_text}"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|