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
@@ -24,14 +24,15 @@ module BCDice
|
|
24
24
|
end
|
25
25
|
|
26
26
|
# ゲーム別成功度判定(1d100)
|
27
|
-
def
|
28
|
-
return
|
29
|
-
return '' unless cmp_op == :<=
|
27
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
28
|
+
return nil unless cmp_op == :<=
|
30
29
|
|
31
30
|
if total >= 100
|
32
|
-
"
|
31
|
+
Result.fumble("ファンブル")
|
33
32
|
elsif total <= 1
|
34
|
-
"
|
33
|
+
Result.critical("絶対成功(達成値1+SL)")
|
34
|
+
elsif target == "?"
|
35
|
+
Result.nothing
|
35
36
|
elsif total <= target
|
36
37
|
dig10 = total / 10
|
37
38
|
dig1 = total - dig10 * 10
|
@@ -39,12 +40,12 @@ module BCDice
|
|
39
40
|
dig1 = 0 if dig1 >= 10 # 条件的にはあり得ない(笑
|
40
41
|
|
41
42
|
if dig1 <= 0
|
42
|
-
"
|
43
|
+
Result.critical("クリティカル(達成値20+SL)")
|
43
44
|
else
|
44
|
-
"
|
45
|
+
Result.success("成功(達成値#{dig10 + dig1}+SL)")
|
45
46
|
end
|
46
47
|
else
|
47
|
-
"
|
48
|
+
Result.failure("失敗")
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
@@ -26,7 +26,7 @@ module BCDice
|
|
26
26
|
修正を後ろに書くことも出来ます。
|
27
27
|
INFO_MESSAGE_TEXT
|
28
28
|
|
29
|
-
register_prefix('
|
29
|
+
register_prefix('.DPT', '.FT')
|
30
30
|
|
31
31
|
def initialize(command)
|
32
32
|
super(command)
|
@@ -35,14 +35,15 @@ module BCDice
|
|
35
35
|
|
36
36
|
# ---- 以降、Gundog.rbよりほぼコピペ(絶対成功→ベアリーに用語変更対応の為、継承だと不都合)
|
37
37
|
# ゲーム別成功度判定(1d100)
|
38
|
-
def
|
39
|
-
return
|
40
|
-
return '' unless cmp_op == :<=
|
38
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
39
|
+
return nil unless cmp_op == :<=
|
41
40
|
|
42
41
|
if total >= 100
|
43
|
-
"
|
42
|
+
Result.fumble("ファンブル")
|
44
43
|
elsif total <= 1
|
45
|
-
"
|
44
|
+
Result.critical("ベアリー(達成値1+SL)")
|
45
|
+
elsif target == "?"
|
46
|
+
Result.nothing
|
46
47
|
elsif total <= target
|
47
48
|
dig10 = total / 10
|
48
49
|
dig1 = total - dig10 * 10
|
@@ -50,12 +51,12 @@ module BCDice
|
|
50
51
|
dig1 = 0 if dig1 >= 10 # 条件的にはあり得ない(笑
|
51
52
|
|
52
53
|
if dig1 <= 0
|
53
|
-
"
|
54
|
+
Result.critical("クリティカル(達成値20+SL)")
|
54
55
|
else
|
55
|
-
"
|
56
|
+
Result.success("成功(達成値#{dig10 + dig1}+SL)")
|
56
57
|
end
|
57
58
|
else
|
58
|
-
"
|
59
|
+
Result.failure("失敗")
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
@@ -55,18 +55,18 @@ module BCDice
|
|
55
55
|
'FMB',
|
56
56
|
'MFMB',
|
57
57
|
'HIT',
|
58
|
-
'FEAR
|
59
|
-
'REACT
|
60
|
-
'TRAP
|
61
|
-
'TRS
|
62
|
-
'RAND
|
63
|
-
'RENC
|
58
|
+
'FEAR',
|
59
|
+
'REACT',
|
60
|
+
'TRAP[ENHL]',
|
61
|
+
'TRS[ENHL]',
|
62
|
+
'RAND[ENHL]',
|
63
|
+
'RENC[ENHL]',
|
64
64
|
'AREA',
|
65
|
-
'
|
65
|
+
'DROPN?',
|
66
66
|
'HST',
|
67
67
|
'KHST',
|
68
68
|
'RANDOP',
|
69
|
-
'LOT
|
69
|
+
'LOT[NP]'
|
70
70
|
)
|
71
71
|
|
72
72
|
def initialize(command)
|
@@ -75,14 +75,14 @@ module BCDice
|
|
75
75
|
@d66_sort_type = D66SortType::NO_SORT
|
76
76
|
end
|
77
77
|
|
78
|
-
def
|
79
|
-
return
|
80
|
-
return
|
78
|
+
def result_nd6(total, dice_total, dice_list, cmp_op, target)
|
79
|
+
return Result.nothing if target == '?'
|
80
|
+
return nil unless dice_list.size == 3 && cmp_op == :<=
|
81
81
|
|
82
82
|
success = target - total # 成功度
|
83
|
-
crt_string = "
|
84
|
-
fmb_string = "
|
85
|
-
fail_string = "
|
83
|
+
crt_string = Result.critical("クリティカル(成功度:#{success})")
|
84
|
+
fmb_string = Result.fumble("ファンブル(失敗度:#{success})")
|
85
|
+
fail_string = Result.failure("自動失敗(失敗度:#{success})")
|
86
86
|
|
87
87
|
# クリティカル
|
88
88
|
if (dice_total <= 6) && (target >= 16)
|
@@ -105,9 +105,9 @@ module BCDice
|
|
105
105
|
end
|
106
106
|
|
107
107
|
if total <= target
|
108
|
-
return "
|
108
|
+
return Result.success("成功(成功度:#{success})")
|
109
109
|
else
|
110
|
-
return "
|
110
|
+
return Result.failure("失敗(失敗度:#{success})")
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
@@ -21,32 +21,25 @@ module BCDice
|
|
21
21
|
・人型用 中段命中部位表 (SLH)/上段命中部位 (SLHU)/上段命中部位 (SLHD)
|
22
22
|
MESSAGETEXT
|
23
23
|
|
24
|
-
register_prefix('SHK
|
25
|
-
|
26
|
-
def
|
27
|
-
return
|
28
|
-
return
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
return "失敗"
|
44
|
-
end
|
45
|
-
|
46
|
-
def getSuccessResult(total)
|
47
|
-
return "決定的成功" if (total % 5) == 0
|
48
|
-
|
49
|
-
return "成功"
|
24
|
+
register_prefix('SHK', 'SLH', 'SLHU', 'SLHD')
|
25
|
+
|
26
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
27
|
+
return Result.nothing if target == '?'
|
28
|
+
return nil unless cmp_op == :<=
|
29
|
+
|
30
|
+
if total <= target
|
31
|
+
if total % 5 == 0
|
32
|
+
Result.critical("決定的成功")
|
33
|
+
else
|
34
|
+
Result.success("成功")
|
35
|
+
end
|
36
|
+
else
|
37
|
+
if total % 5 == 0
|
38
|
+
Result.fumble("致命的失敗")
|
39
|
+
else
|
40
|
+
Result.failure("失敗")
|
41
|
+
end
|
42
|
+
end
|
50
43
|
end
|
51
44
|
|
52
45
|
def eval_game_system_specific_command(command)
|
@@ -16,31 +16,22 @@ module BCDice
|
|
16
16
|
HELP_MESSAGE = "大成功、自動成功、失敗、自動失敗、大失敗の自動判定を行います。\n"
|
17
17
|
|
18
18
|
# ゲーム別成功度判定(1d100)
|
19
|
-
def
|
20
|
-
return
|
19
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
20
|
+
return Result.nothing if target == '?'
|
21
|
+
return nil unless cmp_op == :<=
|
21
22
|
|
22
|
-
if total
|
23
|
-
|
24
|
-
if total <= (target / 5)
|
25
|
-
" > 大成功"
|
26
|
-
else
|
27
|
-
" > 自動成功"
|
28
|
-
end
|
29
|
-
elsif total >= 100
|
30
|
-
# 00は大失敗(大失敗は自動失敗でもある)
|
31
|
-
" > 大失敗"
|
23
|
+
if total >= 100
|
24
|
+
Result.fumble("大失敗")
|
32
25
|
elsif total >= 96
|
33
|
-
|
34
|
-
|
26
|
+
Result.failure("自動失敗")
|
27
|
+
elsif total <= (target / 5)
|
28
|
+
Result.critical("大成功")
|
29
|
+
elsif total <= 1
|
30
|
+
Result.success("自動成功")
|
35
31
|
elsif total <= target
|
36
|
-
|
37
|
-
# 目標値の1/5以下は大成功
|
38
|
-
" > 大成功"
|
39
|
-
else
|
40
|
-
" > 成功"
|
41
|
-
end
|
32
|
+
Result.success("成功")
|
42
33
|
else
|
43
|
-
"
|
34
|
+
Result.failure("失敗")
|
44
35
|
end
|
45
36
|
end
|
46
37
|
end
|
@@ -47,18 +47,13 @@ module BCDice
|
|
47
47
|
end
|
48
48
|
|
49
49
|
# ゲーム別成功度判定(2D6)
|
50
|
-
def
|
51
|
-
return
|
52
|
-
return '' unless cmp_op == :>=
|
50
|
+
def result_2d6(_total, dice_total, _dice_list, cmp_op, _target)
|
51
|
+
return nil unless cmp_op == :>=
|
53
52
|
|
54
53
|
if dice_total <= 2
|
55
|
-
"
|
54
|
+
Result.fumble("ファンブル(モノビースト追加行動+1)")
|
56
55
|
elsif dice_total >= 12
|
57
|
-
"
|
58
|
-
elsif total >= target
|
59
|
-
" > 成功"
|
60
|
-
else
|
61
|
-
" > 失敗"
|
56
|
+
Result.critical("スペシャル(変調1つ回復orダメージ+1D6)")
|
62
57
|
end
|
63
58
|
end
|
64
59
|
|
@@ -403,7 +398,7 @@ module BCDice
|
|
403
398
|
),
|
404
399
|
}.freeze
|
405
400
|
|
406
|
-
register_prefix(RTT.prefixes, '
|
401
|
+
register_prefix(RTT.prefixes, 'SA', TABLES.keys)
|
407
402
|
end
|
408
403
|
end
|
409
404
|
end
|
@@ -13,38 +13,40 @@ module BCDice
|
|
13
13
|
SORT_KEY = 'むけんのふあんたしあ'
|
14
14
|
|
15
15
|
# ダイスボットの使い方
|
16
|
-
HELP_MESSAGE = "
|
16
|
+
HELP_MESSAGE = "失敗、成功レベルの自動判定を行います。"
|
17
17
|
|
18
18
|
# ゲーム別成功度判定(1d20)
|
19
|
-
def
|
20
|
-
return
|
19
|
+
def result_1d20(total, _dice_total, cmp_op, target)
|
20
|
+
return Result.nothing if target == '?'
|
21
|
+
return nil unless cmp_op == :<=
|
21
22
|
|
22
|
-
if
|
23
|
-
return
|
24
|
-
elsif total > target
|
25
|
-
return " > 失敗"
|
23
|
+
if total > target
|
24
|
+
return Result.failure("失敗")
|
26
25
|
end
|
27
26
|
|
28
27
|
output =
|
29
28
|
if total <= (target / 32)
|
30
|
-
"
|
29
|
+
"32レベル成功(32Lv+)"
|
31
30
|
elsif total <= (target / 16)
|
32
|
-
"
|
31
|
+
"16レベル成功(16Lv+)"
|
33
32
|
elsif total <= (target / 8)
|
34
|
-
"
|
33
|
+
"8レベル成功"
|
35
34
|
elsif total <= (target / 4)
|
36
|
-
"
|
35
|
+
"4レベル成功"
|
37
36
|
elsif total <= (target / 2)
|
38
|
-
"
|
37
|
+
"2レベル成功"
|
39
38
|
else
|
40
|
-
"
|
39
|
+
"1レベル成功"
|
41
40
|
end
|
42
41
|
|
43
|
-
|
44
|
-
|
42
|
+
Result.new.tap do |r|
|
43
|
+
r.text = output
|
44
|
+
r.success = true
|
45
|
+
if total <= 1
|
46
|
+
r.critical = true
|
47
|
+
r.text += "/クリティカル"
|
48
|
+
end
|
45
49
|
end
|
46
|
-
|
47
|
-
output
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
@@ -46,27 +46,20 @@ module BCDice
|
|
46
46
|
end
|
47
47
|
|
48
48
|
# ゲーム別成功度判定(2D6)
|
49
|
-
def
|
50
|
-
return
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
translate("failure")
|
63
|
-
end
|
64
|
-
|
65
|
-
if result.empty?
|
66
|
-
return ""
|
49
|
+
def result_2d6(total, dice_total, _dice_list, cmp_op, target)
|
50
|
+
return nil unless cmp_op == :>=
|
51
|
+
|
52
|
+
if dice_total <= 2
|
53
|
+
Result.fumble(translate("Insane.fumble"))
|
54
|
+
elsif dice_total >= 12
|
55
|
+
Result.critical(translate("Insane.special"))
|
56
|
+
elsif target == "?"
|
57
|
+
Result.nothing
|
58
|
+
elsif total >= target
|
59
|
+
Result.success(translate("success"))
|
60
|
+
else
|
61
|
+
Result.failure(translate("failure"))
|
67
62
|
end
|
68
|
-
|
69
|
-
return " > #{result}"
|
70
63
|
end
|
71
64
|
|
72
65
|
def eval_game_system_specific_command(command)
|
@@ -0,0 +1,154 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BCDice
|
4
|
+
module GameSystem
|
5
|
+
class Irisbane < Base
|
6
|
+
# ゲームシステムの識別子
|
7
|
+
ID = 'Irisbane'
|
8
|
+
|
9
|
+
# ゲームシステム名
|
10
|
+
NAME = '瞳逸らさぬイリスベイン'
|
11
|
+
|
12
|
+
# ゲームシステム名の読みがな
|
13
|
+
SORT_KEY = 'ひとみそらさぬいりすへいん'
|
14
|
+
|
15
|
+
# ダイスボットの使い方
|
16
|
+
HELP_MESSAGE = <<~HELP
|
17
|
+
■攻撃判定( ATTACKx@y<=z )
|
18
|
+
x: 攻撃力
|
19
|
+
y: 判定数
|
20
|
+
z: 目標値
|
21
|
+
(※ ATTACK は ATK または AT と簡略化可能)
|
22
|
+
例) ATTACK2@3<=5
|
23
|
+
例) ATK10@2<=4
|
24
|
+
例) AT8@3<=2
|
25
|
+
|
26
|
+
上記 x y z にはそれぞれ四則演算を指定可能。
|
27
|
+
例) ATTACK2+7@3*2<=5-1
|
28
|
+
|
29
|
+
□攻撃判定のダメージ増減( ATTACKx@y<=z[+a] ATTACKx@y<=z[-a])
|
30
|
+
末尾に [+a] または [-a] と指定すると、最終的なダメージを増減できる。
|
31
|
+
a: 増減量
|
32
|
+
例) ATTACK2@3<=5[+10]
|
33
|
+
例) ATK10@2<=4[-8]
|
34
|
+
例) AT8@3<=2[-8+5]
|
35
|
+
|
36
|
+
■シチュエーション(p115)
|
37
|
+
SceneSituation, SSi
|
38
|
+
HELP
|
39
|
+
|
40
|
+
ATTACK_ROLL_REG = %r{^AT(TACK|K)?([+\-*/()\d]+)@([+\-*/()\d]+)<=([+\-*/()\d]+)(\[([+\-])([+\-*/()\d]+)\])?}i.freeze
|
41
|
+
register_prefix('AT(TACK|K)?')
|
42
|
+
|
43
|
+
def initialize(command)
|
44
|
+
super(command)
|
45
|
+
|
46
|
+
@sort_barabara_dice = true
|
47
|
+
@round_type = RoundType::CEIL
|
48
|
+
end
|
49
|
+
|
50
|
+
def eval_game_system_specific_command(command)
|
51
|
+
command = ALIAS[command] || command
|
52
|
+
|
53
|
+
if (m = ATTACK_ROLL_REG.match(command))
|
54
|
+
roll_attack(m[2], m[3], m[4], m[6], m[7])
|
55
|
+
else
|
56
|
+
roll_tables(command, TABLES)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def roll_attack(power_expression, dice_count_expression, border_expression, modification_operator, modification_expression)
|
63
|
+
power = Arithmetic.eval(power_expression, RoundType::CEIL)
|
64
|
+
dice_count = Arithmetic.eval(dice_count_expression, RoundType::CEIL)
|
65
|
+
border = Arithmetic.eval(border_expression, RoundType::CEIL)
|
66
|
+
modification_value = modification_expression.nil? ? nil : Arithmetic.eval(modification_expression, RoundType::CEIL)
|
67
|
+
return if power.nil? || dice_count.nil? || border.nil?
|
68
|
+
return if modification_operator && modification_value.nil?
|
69
|
+
|
70
|
+
power = 0 if power < 0
|
71
|
+
border = border.clamp(1, 6)
|
72
|
+
|
73
|
+
command = make_command_text(power, dice_count, border, modification_operator, modification_value)
|
74
|
+
|
75
|
+
if dice_count <= 0
|
76
|
+
return "#{command} > 判定数が 0 です"
|
77
|
+
end
|
78
|
+
|
79
|
+
dices = @randomizer.roll_barabara(dice_count, 6).sort
|
80
|
+
|
81
|
+
success_dice_count = dices.count { |dice| dice <= border }
|
82
|
+
damage = success_dice_count * power
|
83
|
+
|
84
|
+
message_elements = []
|
85
|
+
message_elements << command
|
86
|
+
message_elements << dices.join(',')
|
87
|
+
message_elements << "成功ダイス数 #{success_dice_count}"
|
88
|
+
message_elements << "× 攻撃力 #{power}" if success_dice_count > 0
|
89
|
+
|
90
|
+
if success_dice_count > 0
|
91
|
+
if modification_operator && modification_value
|
92
|
+
message_elements << "ダメージ #{damage}#{modification_operator}#{modification_value}"
|
93
|
+
damage = parse_operator(modification_operator).call(damage, modification_value)
|
94
|
+
damage = 0 if damage < 0
|
95
|
+
message_elements << damage.to_s
|
96
|
+
else
|
97
|
+
message_elements << "ダメージ #{damage}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
Result.new(message_elements.join(' > ')).tap do |r|
|
102
|
+
r.condition = success_dice_count > 0
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def make_command_text(power, dice_count, border, modification_operator, modification_value)
|
107
|
+
text = "(ATTACK#{power}@#{dice_count}<=#{border}"
|
108
|
+
text += "[#{modification_operator}#{modification_value}]" if modification_operator
|
109
|
+
text += ")"
|
110
|
+
text
|
111
|
+
end
|
112
|
+
|
113
|
+
def parse_operator(operator)
|
114
|
+
case operator
|
115
|
+
when '+'
|
116
|
+
lambda { |x, y| x + y }
|
117
|
+
when '-'
|
118
|
+
lambda { |x, y| x - y }
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
TABLES = {
|
123
|
+
"SceneSituation" => DiceTable::D66LeftRangeTable.new(
|
124
|
+
"シチュエーション",
|
125
|
+
BCDice::D66SortType::NO_SORT,
|
126
|
+
[
|
127
|
+
[1..3, [
|
128
|
+
"【日常】何一つ変わることの無い日々の一幕。移ろい易い世界では、それはとても大切である。",
|
129
|
+
"【準備】何かを為すための用意をする一幕。情報収集、買物遠征、やるべきことは一杯だ。",
|
130
|
+
"【趣味】自分の時間を、有効活用している一幕。必要に追われていない分、心は軽く晴れやかだ。",
|
131
|
+
"【喫茶】一息入れ、嗜好品を嗜む時の一幕。穏やかな空気は、だが、往々にして変わりやすい。",
|
132
|
+
"【鍛錬】体を鍛え、心を養う修練の一幕。己さえ良ければ、その方法も何だって良い。",
|
133
|
+
"【職務】役割の元、仕事に精を出す時の一幕。目的が何であれ、為すべきことに変わりはない。",
|
134
|
+
]],
|
135
|
+
[4..6, [
|
136
|
+
"【移動】何処かから何処かへと向かう一幕。進んでいるなら、手段も目的地も関係あるまい。",
|
137
|
+
"【墓前】故人が眠る場所へと赴く一幕。共に眠ることだけは無いように。",
|
138
|
+
"【操作】何かを操り、望みを果たしている一幕。運転にせよ何にせよ、脇見には注意が必要だ。",
|
139
|
+
"【食事】何かを糧とし、己の力を蓄える一幕。行動すれば消耗する。腹が減っては何とやらだ。",
|
140
|
+
"【休息】日々の合間の、憩いの一幕。“何もしない”というのも、立派な行いである。",
|
141
|
+
"【夢幻】現実に存在しない何かへと耽る一幕。時間帯に関わらず、何時かは必ず覚めるだろう。",
|
142
|
+
]],
|
143
|
+
]
|
144
|
+
),
|
145
|
+
}.transform_keys(&:upcase).freeze
|
146
|
+
|
147
|
+
ALIAS = {
|
148
|
+
"SSi" => "SceneSituation",
|
149
|
+
}.transform_keys(&:upcase).transform_values(&:upcase).freeze
|
150
|
+
|
151
|
+
register_prefix(TABLES.keys, ALIAS.keys)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -15,22 +15,15 @@ module BCDice
|
|
15
15
|
# ダイスボットの使い方
|
16
16
|
HELP_MESSAGE = "1D100<=m 方式の判定で成否、クリティカル(01)・ファンブル(00)を自動判定します。\n"
|
17
17
|
|
18
|
-
def
|
19
|
-
return
|
20
|
-
return '' unless cmp_op == :<=
|
18
|
+
def result_1d100(total, _dice_total, cmp_op, target)
|
19
|
+
return nil unless cmp_op == :<=
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
elsif (dice0 == 0) && (dice1 == 0)
|
29
|
-
' > 00 > ファンブル'
|
30
|
-
elsif total <= target
|
31
|
-
' > 成功'
|
32
|
-
else
|
33
|
-
' > 失敗'
|
21
|
+
if total % 100 == 1
|
22
|
+
Result.critical("01 > クリティカル")
|
23
|
+
elsif total % 100 == 0
|
24
|
+
Result.fumble("00 > ファンブル")
|
25
|
+
elsif target == "?"
|
26
|
+
Result.nothing
|
34
27
|
end
|
35
28
|
end
|
36
29
|
end
|
@@ -16,28 +16,28 @@ module BCDice
|
|
16
16
|
HELP_MESSAGE = <<~INFO_MESSAGE_TEXT
|
17
17
|
・1D100の目標値判定で、効果レーティングを1~4で自動判定。
|
18
18
|
例)1D100<=50
|
19
|
-
JamesBond : (1D100<=50)
|
19
|
+
JamesBond : (1D100<=50) > 20 > 効果3(良)
|
20
20
|
INFO_MESSAGE_TEXT
|
21
21
|
|
22
|
-
def
|
23
|
-
return
|
24
|
-
return
|
22
|
+
def result_1d100(total, _dice_total, cmp_op, target) # ゲーム別成功度判定(1d100)
|
23
|
+
return Result.nothing if target == '?'
|
24
|
+
return nil unless cmp_op == :<=
|
25
25
|
|
26
26
|
base = ((target + 9) / 10).floor
|
27
27
|
|
28
28
|
if total >= 100
|
29
29
|
# 100は常に失敗
|
30
|
-
"
|
30
|
+
Result.failure("失敗")
|
31
31
|
elsif total <= base
|
32
|
-
"
|
32
|
+
Result.success("効果1(完璧)")
|
33
33
|
elsif total <= base * 2
|
34
|
-
"
|
34
|
+
Result.success("効果2(かなり良い)")
|
35
35
|
elsif total <= base * 5
|
36
|
-
"
|
36
|
+
Result.success("効果3(良)")
|
37
37
|
elsif total <= target
|
38
|
-
"
|
38
|
+
Result.success("効果4(まあまあ)")
|
39
39
|
else
|
40
|
-
"
|
40
|
+
Result.failure("失敗")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|