bcdice 3.1.0 → 3.3.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 +78 -1
- data/README.md +1 -1
- data/i18n/MagicaLogia/zh_hans.yml +564 -0
- 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/dice_table.rb +2 -0
- data/lib/bcdice/dice_table/d66_half_grid_table.rb +33 -0
- data/lib/bcdice/dice_table/d66_one_third_table.rb +34 -0
- data/lib/bcdice/dice_table/sai_fic_skill_table.rb +1 -1
- data/lib/bcdice/game_system.rb +6 -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 +2 -2
- data/lib/bcdice/game_system/AnimaAnimus.rb +16 -9
- data/lib/bcdice/game_system/Arianrhod.rb +6 -8
- data/lib/bcdice/game_system/Avandner.rb +1 -1
- 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 +5 -5
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +5 -5
- 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/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 +1 -1
- data/lib/bcdice/game_system/Cthulhu7th.rb +48 -10
- data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu_Korean.rb +1 -1
- 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 +3 -1
- data/lib/bcdice/game_system/Dracurouge.rb +1 -1
- 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/Fiasco.rb +1 -1
- data/lib/bcdice/game_system/FilledWith.rb +205 -1272
- 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 +18 -11
- 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/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/KemonoNoMori.rb +26 -39
- data/lib/bcdice/game_system/KillDeathBusiness.rb +7 -15
- data/lib/bcdice/game_system/KurayamiCrying.rb +141 -2
- data/lib/bcdice/game_system/LiveraDoll.rb +254 -304
- data/lib/bcdice/game_system/LogHorizon.rb +13 -10
- 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 +5 -4
- 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/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 +3 -3
- 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/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 +11 -6
- 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 +2 -3
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -1
- 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 +16 -7
- data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -2
- data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -2
- 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/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/Yggdrasill.rb +1 -1
- data/lib/bcdice/game_system/ZettaiReido.rb +20 -25
- data/lib/bcdice/game_system/filled_with/enemy_data_tables.rb +322 -0
- data/lib/bcdice/game_system/filled_with/event_tables.rb +392 -0
- data/lib/bcdice/game_system/filled_with/tresure_tables.rb +179 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +1 -1
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +4 -4
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +1 -1
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +26 -8
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +26 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +18 -4
|
@@ -14,7 +14,7 @@ module BCDice
|
|
|
14
14
|
NAME = 'エンゼルギア 天使大戦TRPG The 2nd Editon'
|
|
15
15
|
|
|
16
16
|
# ゲームシステム名の読みがな
|
|
17
|
-
SORT_KEY = '
|
|
17
|
+
SORT_KEY = 'えんせるきあ2'
|
|
18
18
|
|
|
19
19
|
# ダイスボットの使い方
|
|
20
20
|
HELP_MESSAGE = <<~MESSAGETEXT
|
|
@@ -117,7 +117,7 @@ module BCDice
|
|
|
117
117
|
)
|
|
118
118
|
}.freeze
|
|
119
119
|
|
|
120
|
-
register_prefix('
|
|
120
|
+
register_prefix('\d+AG', TABLES.keys)
|
|
121
121
|
end
|
|
122
122
|
end
|
|
123
123
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require 'bcdice/dice_table/table'
|
|
4
4
|
require 'bcdice/dice_table/range_table'
|
|
5
|
-
require 'bcdice/
|
|
5
|
+
require 'bcdice/arithmetic'
|
|
6
6
|
|
|
7
7
|
module BCDice
|
|
8
8
|
module GameSystem
|
|
@@ -32,17 +32,19 @@ module BCDice
|
|
|
32
32
|
MESSAGETEXT
|
|
33
33
|
|
|
34
34
|
def eval_game_system_specific_command(command)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return check_action(Regexp.last_match)
|
|
38
|
-
else
|
|
35
|
+
m = /(\d+)AN<=(\d+([+\-]\d+)*)/i.match(command)
|
|
36
|
+
if TABLES.key?(command)
|
|
39
37
|
return roll_tables(command, TABLES)
|
|
38
|
+
elsif m
|
|
39
|
+
return check_action(m)
|
|
40
|
+
else
|
|
41
|
+
return nil
|
|
40
42
|
end
|
|
41
43
|
end
|
|
42
44
|
|
|
43
45
|
def check_action(match_data)
|
|
44
|
-
dice_cnt =
|
|
45
|
-
target =
|
|
46
|
+
dice_cnt = Arithmetic.eval(match_data[1], RoundType::FLOOR)
|
|
47
|
+
target = Arithmetic.eval(match_data[2], RoundType::FLOOR)
|
|
46
48
|
debug("dice_cnt", dice_cnt)
|
|
47
49
|
debug("target", target)
|
|
48
50
|
|
|
@@ -52,7 +54,12 @@ module BCDice
|
|
|
52
54
|
has_critical = dice_arr.include?(1)
|
|
53
55
|
result = has_critical ? suc_cnt + 2 : suc_cnt
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
Result.new.tap do |r|
|
|
58
|
+
r.text = "(#{dice_cnt}B10<=#{target}) > #{dice_str} > #{result > 0 ? '成功' : '失敗'}(達成値:#{result})#{has_critical ? ' (クリティカル発生)' : ''}"
|
|
59
|
+
r.critical = has_critical
|
|
60
|
+
r.success = result > 0
|
|
61
|
+
r.failure = !r.success?
|
|
62
|
+
end
|
|
56
63
|
end
|
|
57
64
|
|
|
58
65
|
TABLES = {
|
|
@@ -86,7 +93,7 @@ module BCDice
|
|
|
86
93
|
}.freeze
|
|
87
94
|
|
|
88
95
|
# ダイスボットで使用するコマンドを配列で列挙する
|
|
89
|
-
register_prefix('\d+AN
|
|
96
|
+
register_prefix('\d+AN<=', TABLES.keys)
|
|
90
97
|
end
|
|
91
98
|
end
|
|
92
99
|
end
|
|
@@ -25,25 +25,23 @@ module BCDice
|
|
|
25
25
|
@d66_sort_type = D66SortType::NO_SORT
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
def
|
|
28
|
+
def result_nd6(total, _dice_total, dice_list, cmp_op, target)
|
|
29
29
|
n_max = dice_list.count(6)
|
|
30
30
|
|
|
31
31
|
if dice_list.count(1) == dice_list.size
|
|
32
32
|
# 全部1の目ならファンブル
|
|
33
|
-
"
|
|
33
|
+
Result.fumble("ファンブル")
|
|
34
34
|
elsif n_max >= 2
|
|
35
35
|
# 2個以上6の目があったらクリティカル
|
|
36
|
-
"
|
|
36
|
+
Result.critical("クリティカル(+#{n_max}D6)")
|
|
37
37
|
elsif cmp_op != :>= || target == '?'
|
|
38
|
-
|
|
38
|
+
nil
|
|
39
39
|
elsif total >= target
|
|
40
|
-
"
|
|
40
|
+
Result.success("成功")
|
|
41
41
|
else
|
|
42
|
-
"
|
|
42
|
+
Result.failure("失敗")
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
|
-
|
|
46
|
-
alias check_2D6 check_nD6
|
|
47
45
|
end
|
|
48
46
|
end
|
|
49
47
|
end
|
|
@@ -26,7 +26,7 @@ module BCDice
|
|
|
26
26
|
セット数が1以上の時はセット数も表示し、攻撃判定の場合は命中部位も表示します。
|
|
27
27
|
INFO_MESSAGE_TEXT
|
|
28
28
|
|
|
29
|
-
register_prefix('\d+BK', '\d+BA', '\d+BKC
|
|
29
|
+
register_prefix('\d+BK', '\d+BA', '\d+BKC', '\d+BAC', '\d+R6')
|
|
30
30
|
|
|
31
31
|
def initialize(command)
|
|
32
32
|
super(command)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'bcdice/format'
|
|
4
|
+
require 'bcdice/command/parser'
|
|
3
5
|
require 'bcdice/dice_table/table'
|
|
4
6
|
require 'bcdice/dice_table/range_table'
|
|
5
7
|
|
|
@@ -26,24 +28,45 @@ module BCDice
|
|
|
26
28
|
正面からダメージ3の攻撃を技能ベース2目標値4で1回判定
|
|
27
29
|
例)2BT3RL+5>=8
|
|
28
30
|
右下半身にダメージ3の攻撃を技能ベース5目標値8で2回判定
|
|
29
|
-
ミサイルによるダメージは BT(ダメージ)
|
|
31
|
+
ミサイルによるダメージは BT(ダメージ) の代わりに SRM2/4/6, LRM5/10/15/20 を指定
|
|
30
32
|
例)3SRM6LU+5>=8
|
|
31
33
|
左上半身にSRM6連を技能ベース5目標値8で3回判定
|
|
34
|
+
BT(ダメージ) の代わりに PPC を指定するとダメージ10で判定
|
|
35
|
+
例)2PPCR+3>=10
|
|
36
|
+
右側からPPC(ダメージ10)による攻撃を技能ベース3目標値10で2回判定
|
|
32
37
|
・CT:致命的命中表
|
|
33
38
|
・DW:転倒後の向き表
|
|
34
|
-
・CDx
|
|
39
|
+
・CDx:メック戦士意識維持ロール。ダメージ値x(1〜6)で判定 例)CD3
|
|
35
40
|
MESSAGETEXT
|
|
36
41
|
|
|
37
|
-
register_prefix('\d*SRM
|
|
42
|
+
register_prefix('\d*SRM', '\d*LRM', '\d*BT', '\d*PPC', 'CT', 'DW', 'CD')
|
|
38
43
|
|
|
39
44
|
# 致命的命中が発生しない上限値
|
|
40
45
|
NO_CRITICAL_HIT_LIMIT = 7
|
|
41
46
|
|
|
47
|
+
# @return [Command::Parser] PPCコマンドの構文解析器
|
|
48
|
+
def self.ppc_parser
|
|
49
|
+
return @ppc_parser if @ppc_parser
|
|
50
|
+
|
|
51
|
+
@ppc_parser = Command::Parser.new(/PPC(?:[LCR][LU]?)?/, round_type: RoundType::FLOOR)
|
|
52
|
+
@ppc_parser.enable_prefix_number
|
|
53
|
+
@ppc_parser.restrict_cmp_op_to(:>=)
|
|
54
|
+
|
|
55
|
+
@ppc_parser
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# @return [Command::Parser] PPCコマンドの構文解析器
|
|
59
|
+
def ppc_parser
|
|
60
|
+
self.class.ppc_parser
|
|
61
|
+
end
|
|
62
|
+
|
|
42
63
|
def eval_game_system_specific_command(command)
|
|
43
64
|
result = roll_tables(command, TABLES)
|
|
44
65
|
return result if result
|
|
45
66
|
|
|
46
|
-
|
|
67
|
+
if (ppc_parse_result = ppc_parser.parse(command))
|
|
68
|
+
return execute_ppc(ppc_parse_result)
|
|
69
|
+
end
|
|
47
70
|
|
|
48
71
|
count = 1
|
|
49
72
|
if command =~ /^(\d+)(.+)/
|
|
@@ -55,9 +78,9 @@ module BCDice
|
|
|
55
78
|
debug('executeCommandCatched command', command)
|
|
56
79
|
|
|
57
80
|
case command
|
|
58
|
-
when
|
|
81
|
+
when /\ACD([1-6])\z/
|
|
59
82
|
damage = Regexp.last_match(1).to_i
|
|
60
|
-
return
|
|
83
|
+
return consciousness_roll(damage)
|
|
61
84
|
when /^((S|L)RM\d+)(.+)/
|
|
62
85
|
tail = Regexp.last_match(3)
|
|
63
86
|
type = Regexp.last_match(1)
|
|
@@ -94,7 +117,7 @@ module BCDice
|
|
|
94
117
|
LRM_LIMIT = 5
|
|
95
118
|
|
|
96
119
|
def getHitResult(count, damageFunc, tail)
|
|
97
|
-
m =
|
|
120
|
+
m = /\A([LCR][LU]?)?(\+\d+)?>=(\d+)/.match(tail)
|
|
98
121
|
return nil unless m
|
|
99
122
|
|
|
100
123
|
side = m[1] || 'C'
|
|
@@ -105,7 +128,7 @@ module BCDice
|
|
|
105
128
|
|
|
106
129
|
partTable = HitPart::TABLES[side]
|
|
107
130
|
|
|
108
|
-
|
|
131
|
+
resultLines = []
|
|
109
132
|
damages = {}
|
|
110
133
|
hitCount = 0
|
|
111
134
|
|
|
@@ -117,15 +140,24 @@ module BCDice
|
|
|
117
140
|
damages, damageText = getDamages(damageFunc, partTable, damages)
|
|
118
141
|
hitResult += damageText
|
|
119
142
|
end
|
|
120
|
-
|
|
143
|
+
resultLines << hitResult
|
|
121
144
|
end
|
|
122
145
|
|
|
123
|
-
|
|
146
|
+
# 命中したか?
|
|
147
|
+
hit = hitCount > 0
|
|
124
148
|
|
|
125
|
-
|
|
126
|
-
|
|
149
|
+
hitCountText = " > #{hitCount}回命中"
|
|
150
|
+
hitDetails =
|
|
151
|
+
if hit
|
|
152
|
+
"#{hitCountText} 命中箇所:#{getTotalDamage(damages)}"
|
|
153
|
+
else
|
|
154
|
+
hitCountText
|
|
155
|
+
end
|
|
156
|
+
resultLines.push(hitDetails)
|
|
127
157
|
|
|
128
|
-
|
|
158
|
+
resultText = resultLines.join("\n")
|
|
159
|
+
|
|
160
|
+
return hit ? Result.success(resultText) : Result.failure(resultText)
|
|
129
161
|
end
|
|
130
162
|
|
|
131
163
|
def getBaseValue(baseString)
|
|
@@ -272,26 +304,75 @@ module BCDice
|
|
|
272
304
|
return result_parts.join(' > '), hit_part.name, criticalText
|
|
273
305
|
end
|
|
274
306
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
307
|
+
# メック戦士意識維持ロールを行う
|
|
308
|
+
#
|
|
309
|
+
# damageが6の場合は死亡。
|
|
310
|
+
# damageが5以下の場合は、2d6の結果が意識維持表の値以上かの成功判定。
|
|
311
|
+
#
|
|
312
|
+
# @param damage [Integer] メック戦士へのダメージ(1〜6)
|
|
313
|
+
# @return [Result]
|
|
314
|
+
# @see 「BattleTech: A Game of Armored Combat」ルールブックp. 44
|
|
315
|
+
def consciousness_roll(damage)
|
|
316
|
+
unless (1..6).include?(damage)
|
|
317
|
+
return nil
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
command = "CD#{damage}"
|
|
321
|
+
|
|
322
|
+
if damage == 6
|
|
323
|
+
return Result.fumble("#{command} > 死亡")
|
|
278
324
|
end
|
|
279
325
|
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
326
|
+
consciousness_table = {
|
|
327
|
+
1 => 3,
|
|
328
|
+
2 => 5,
|
|
329
|
+
3 => 7,
|
|
330
|
+
4 => 10,
|
|
331
|
+
5 => 11,
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
target = consciousness_table[damage]
|
|
335
|
+
expr = "(2D6>=#{target})"
|
|
336
|
+
|
|
337
|
+
values = @randomizer.roll_barabara(2, 6)
|
|
338
|
+
sum = values.sum
|
|
339
|
+
values_str = values.join(",")
|
|
340
|
+
sum_and_values = "#{sum}[#{values_str}]"
|
|
341
|
+
|
|
342
|
+
success = sum >= target
|
|
343
|
+
result = success ? "成功" : "失敗"
|
|
344
|
+
|
|
345
|
+
parts = [
|
|
346
|
+
command,
|
|
347
|
+
expr,
|
|
348
|
+
sum_and_values,
|
|
349
|
+
sum,
|
|
350
|
+
result,
|
|
351
|
+
]
|
|
352
|
+
text = parts.join(" > ")
|
|
285
353
|
|
|
286
|
-
|
|
354
|
+
return success ? Result.success(text) : Result.failure(text)
|
|
355
|
+
end
|
|
287
356
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
357
|
+
# PPCコマンドを実行する
|
|
358
|
+
# @param parse_result [Command::Parsed] PPCコマンドの構文解析結果
|
|
359
|
+
# @return [Result, nil]
|
|
360
|
+
def execute_ppc(parse_result)
|
|
361
|
+
count = parse_result.prefix_number || 1
|
|
362
|
+
|
|
363
|
+
# getHitResult() の引数tailの形に合わせる
|
|
364
|
+
# TODO: 攻撃を表すクラスに変える
|
|
365
|
+
|
|
366
|
+
# "PPC" 以降の部位指定
|
|
367
|
+
side = parse_result.command[3..-1]
|
|
368
|
+
|
|
369
|
+
modifier = Format.modifier(parse_result.modify_number)
|
|
370
|
+
target = parse_result.target_number
|
|
371
|
+
|
|
372
|
+
tail = "#{side}#{modifier}>=#{target}"
|
|
293
373
|
|
|
294
|
-
|
|
374
|
+
# ダメージ10固定で命中判定を行う
|
|
375
|
+
return getHitResult(count, lambda { 10 }, tail)
|
|
295
376
|
end
|
|
296
377
|
|
|
297
378
|
# 表の集合
|
|
@@ -82,16 +82,34 @@ module BCDice
|
|
|
82
82
|
|
|
83
83
|
dice_list_org_str = "[#{dice_list_org.join(',')}]" if dice_list_filtered != dice_list_org
|
|
84
84
|
|
|
85
|
+
result = result_compare(total)
|
|
86
|
+
result.critical = critical?
|
|
87
|
+
result.fumble = fumble?
|
|
88
|
+
|
|
89
|
+
dice_status =
|
|
90
|
+
if result.fumble?
|
|
91
|
+
"ファンブル"
|
|
92
|
+
elsif result.critical?
|
|
93
|
+
"クリティカル"
|
|
94
|
+
end
|
|
95
|
+
result_str =
|
|
96
|
+
if result.success?
|
|
97
|
+
"成功"
|
|
98
|
+
elsif result.failure?
|
|
99
|
+
"失敗"
|
|
100
|
+
end
|
|
101
|
+
|
|
85
102
|
sequence = [
|
|
86
103
|
command_expr(),
|
|
87
104
|
dice_list_org_str,
|
|
88
105
|
interim_expr(dice_list_filtered),
|
|
89
|
-
dice_status
|
|
106
|
+
dice_status,
|
|
90
107
|
total.to_s,
|
|
91
|
-
|
|
108
|
+
result_str
|
|
92
109
|
].compact
|
|
110
|
+
result.text = sequence.join(" > ")
|
|
93
111
|
|
|
94
|
-
return
|
|
112
|
+
return result
|
|
95
113
|
end
|
|
96
114
|
|
|
97
115
|
private
|
|
@@ -187,14 +205,6 @@ module BCDice
|
|
|
187
205
|
return expr
|
|
188
206
|
end
|
|
189
207
|
|
|
190
|
-
def dice_status
|
|
191
|
-
if fumble?
|
|
192
|
-
"ファンブル"
|
|
193
|
-
elsif critical?
|
|
194
|
-
"クリティカル"
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
208
|
def fumble?
|
|
199
209
|
@dice_total <= @fumble
|
|
200
210
|
end
|
|
@@ -220,7 +230,13 @@ module BCDice
|
|
|
220
230
|
|
|
221
231
|
def result_compare(total)
|
|
222
232
|
if @cmp_op
|
|
223
|
-
total.send(@cmp_op, @target_number)
|
|
233
|
+
if total.send(@cmp_op, @target_number)
|
|
234
|
+
Result.success(nil)
|
|
235
|
+
else
|
|
236
|
+
Result.failure(nil)
|
|
237
|
+
end
|
|
238
|
+
else
|
|
239
|
+
Result.new
|
|
224
240
|
end
|
|
225
241
|
end
|
|
226
242
|
end
|
|
@@ -55,13 +55,13 @@ module BCDice
|
|
|
55
55
|
INFO_MESSAGE_TEXT
|
|
56
56
|
|
|
57
57
|
register_prefix(
|
|
58
|
-
'[1-7]*PD
|
|
58
|
+
'[1-7]*PD',
|
|
59
59
|
'HW',
|
|
60
60
|
'BWT',
|
|
61
61
|
'LWT',
|
|
62
62
|
'TWT',
|
|
63
63
|
'CWT',
|
|
64
|
-
'LO
|
|
64
|
+
'LO',
|
|
65
65
|
'SU',
|
|
66
66
|
'WI',
|
|
67
67
|
'NA',
|
|
@@ -88,7 +88,7 @@ module BCDice
|
|
|
88
88
|
'NUR',
|
|
89
89
|
'GUR',
|
|
90
90
|
'BUR',
|
|
91
|
-
'BT
|
|
91
|
+
'BT',
|
|
92
92
|
'SGT',
|
|
93
93
|
'RS',
|
|
94
94
|
'SH',
|
|
@@ -110,7 +110,7 @@ module BCDice
|
|
|
110
110
|
'NCH',
|
|
111
111
|
'GCH',
|
|
112
112
|
'PCH',
|
|
113
|
-
'IT
|
|
113
|
+
'IT',
|
|
114
114
|
'ACT',
|
|
115
115
|
'ACB',
|
|
116
116
|
'ACE',
|
|
@@ -124,7 +124,7 @@ module BCDice
|
|
|
124
124
|
'RU',
|
|
125
125
|
'\d{2}C',
|
|
126
126
|
'BU',
|
|
127
|
-
'\d+S?A
|
|
127
|
+
'\d+S?A',
|
|
128
128
|
'SIP',
|
|
129
129
|
'BVT',
|
|
130
130
|
'LVT',
|
|
@@ -53,13 +53,13 @@ module BCDice
|
|
|
53
53
|
INFO_MESSAGE_TEXT
|
|
54
54
|
|
|
55
55
|
register_prefix(
|
|
56
|
-
'[1-7]*PD
|
|
56
|
+
'[1-7]*PD',
|
|
57
57
|
'HW',
|
|
58
58
|
'BWT',
|
|
59
59
|
'LWT',
|
|
60
60
|
'TWT',
|
|
61
61
|
'CWT',
|
|
62
|
-
'LO
|
|
62
|
+
'LO',
|
|
63
63
|
'SU',
|
|
64
64
|
'WI',
|
|
65
65
|
'NA',
|
|
@@ -85,7 +85,7 @@ module BCDice
|
|
|
85
85
|
'NUR',
|
|
86
86
|
'GUR',
|
|
87
87
|
'BUR',
|
|
88
|
-
'BT
|
|
88
|
+
'BT',
|
|
89
89
|
'SGT',
|
|
90
90
|
'RS',
|
|
91
91
|
'SH',
|
|
@@ -105,7 +105,7 @@ module BCDice
|
|
|
105
105
|
'SCH',
|
|
106
106
|
'WCH',
|
|
107
107
|
'NCH',
|
|
108
|
-
'IT
|
|
108
|
+
'IT',
|
|
109
109
|
'ACT',
|
|
110
110
|
'ACB',
|
|
111
111
|
'ACE',
|
|
@@ -119,7 +119,7 @@ module BCDice
|
|
|
119
119
|
'RU',
|
|
120
120
|
'\d{2}C',
|
|
121
121
|
'BU',
|
|
122
|
-
'\d+S?A
|
|
122
|
+
'\d+S?A',
|
|
123
123
|
'SIP',
|
|
124
124
|
'BVT',
|
|
125
125
|
'LVT',
|