bcdice 3.0.0.pre.alpha.2 → 3.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +42 -1
- data/README.md +34 -7
- data/i18n/DetatokoSaga/ja_jp.yml +3 -2
- data/i18n/DetatokoSaga/ko_kr.yml +1 -0
- data/i18n/KillDeathBusiness/ja_jp.yml +4 -4
- data/i18n/KillDeathBusiness/ko_kr.yml +5 -4
- data/i18n/MagicaLogia/ko_kr.yml +564 -0
- data/i18n/MonotoneMuseum/ja_jp.yml +40 -4
- data/i18n/StratoShout/ja_jp.yml +4 -4
- data/i18n/StratoShout/ko_kr.yml +4 -4
- data/lib/bcdice.rb +4 -1
- data/lib/bcdice/arithmetic.rb +22 -0
- data/lib/bcdice/arithmetic/node.rb +112 -43
- data/lib/bcdice/arithmetic/parser.rb +240 -0
- data/lib/bcdice/arithmetic_evaluator.rb +7 -156
- data/lib/bcdice/base.rb +8 -1
- data/lib/bcdice/command/lexer.rb +57 -0
- data/lib/bcdice/command/parsed.rb +65 -0
- data/lib/bcdice/command/parser.rb +489 -0
- data/lib/bcdice/common_command.rb +2 -0
- data/lib/bcdice/common_command/add_dice.rb +3 -1
- data/lib/bcdice/common_command/add_dice/node.rb +142 -69
- data/lib/bcdice/common_command/add_dice/parser.rb +100 -83
- data/lib/bcdice/common_command/add_dice/randomizer.rb +2 -0
- data/lib/bcdice/common_command/barabara_dice.rb +2 -0
- data/lib/bcdice/common_command/barabara_dice/node.rb +9 -1
- data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
- data/lib/bcdice/common_command/calc.rb +2 -0
- data/lib/bcdice/common_command/calc/node.rb +10 -1
- data/lib/bcdice/common_command/calc/parser.rb +1 -1
- data/lib/bcdice/common_command/d66_dice.rb +5 -1
- data/lib/bcdice/common_command/lexer.rb +2 -1
- data/lib/bcdice/common_command/upper_dice.rb +2 -0
- data/lib/bcdice/common_command/upper_dice/parser.rb +118 -97
- data/lib/bcdice/common_command/version.rb +3 -1
- data/lib/bcdice/deprecated/checker.rb +6 -6
- data/lib/bcdice/dice_table.rb +3 -0
- data/lib/bcdice/dice_table/chain_table.rb +2 -0
- data/lib/bcdice/dice_table/d66_grid_table.rb +2 -0
- data/lib/bcdice/dice_table/d66_parity_table.rb +36 -0
- data/lib/bcdice/dice_table/d66_range_table.rb +2 -0
- data/lib/bcdice/dice_table/d66_table.rb +2 -0
- data/lib/bcdice/dice_table/roll_result.rb +2 -0
- data/lib/bcdice/dice_table/table.rb +2 -0
- data/lib/bcdice/enum.rb +2 -0
- data/lib/bcdice/format.rb +2 -0
- data/lib/bcdice/game_system.rb +10 -0
- data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
- data/lib/bcdice/game_system/AlchemiaStruggle.rb +346 -0
- data/lib/bcdice/game_system/Alshard.rb +1 -2
- data/lib/bcdice/game_system/Amadeus.rb +1 -1
- data/lib/bcdice/game_system/AngelGear.rb +123 -0
- data/lib/bcdice/game_system/AnimaAnimus.rb +1 -5
- data/lib/bcdice/game_system/ArsMagica.rb +1 -1
- data/lib/bcdice/game_system/BBN.rb +7 -5
- data/lib/bcdice/game_system/BadLife.rb +2 -2
- data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
- data/lib/bcdice/game_system/BeastBindTrinity.rb +3 -12
- data/lib/bcdice/game_system/BeginningIdol.rb +4 -4
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +4 -4
- data/lib/bcdice/game_system/BladeOfArcana.rb +4 -4
- data/lib/bcdice/game_system/BlindMythos.rb +12 -10
- data/lib/bcdice/game_system/BloodCrusade.rb +54 -80
- data/lib/bcdice/game_system/BloodMoon.rb +43 -2
- data/lib/bcdice/game_system/CardRanker.rb +24 -64
- data/lib/bcdice/game_system/ChaosFlare.rb +4 -4
- data/lib/bcdice/game_system/Chill.rb +1 -1
- data/lib/bcdice/game_system/CodeLayerd.rb +37 -67
- data/lib/bcdice/game_system/ColossalHunter.rb +2 -2
- data/lib/bcdice/game_system/Cthulhu.rb +8 -4
- data/lib/bcdice/game_system/Cthulhu7th.rb +42 -336
- 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/CthulhuTech.rb +1 -2
- data/lib/bcdice/game_system/DarkBlaze.rb +5 -5
- data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
- data/lib/bcdice/game_system/DesperateRun.rb +163 -0
- data/lib/bcdice/game_system/DetatokoSaga.rb +25 -7
- data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +3 -3
- data/lib/bcdice/game_system/DiceBot.rb +22 -4
- data/lib/bcdice/game_system/DiceOfTheDead.rb +1 -1
- data/lib/bcdice/game_system/DoubleCross.rb +61 -94
- data/lib/bcdice/game_system/EarthDawn.rb +1 -1
- data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
- data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
- data/lib/bcdice/game_system/Elysion.rb +2 -2
- data/lib/bcdice/game_system/EmbryoMachine.rb +6 -6
- data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -2
- data/lib/bcdice/game_system/FilledWith.rb +3 -3
- data/lib/bcdice/game_system/FullMetalPanic.rb +1 -2
- data/lib/bcdice/game_system/GURPS.rb +1 -1
- data/lib/bcdice/game_system/Garako.rb +14 -5
- data/lib/bcdice/game_system/GardenOrder.rb +1 -1
- data/lib/bcdice/game_system/GehennaAn.rb +4 -4
- data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
- data/lib/bcdice/game_system/Gorilla.rb +1 -1
- data/lib/bcdice/game_system/Gundog.rb +1 -1
- data/lib/bcdice/game_system/GundogRevised.rb +3 -3
- data/lib/bcdice/game_system/GundogZero.rb +2 -2
- data/lib/bcdice/game_system/GurpsFW.rb +2 -5
- data/lib/bcdice/game_system/HarnMaster.rb +1 -1
- data/lib/bcdice/game_system/HatsuneMiku.rb +2 -2
- data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
- data/lib/bcdice/game_system/HuntersMoon.rb +17 -110
- data/lib/bcdice/game_system/Illusio.rb +25 -34
- data/lib/bcdice/game_system/InfiniteBabeL.rb +518 -0
- data/lib/bcdice/game_system/JekyllAndHyde.rb +42 -0
- data/lib/bcdice/game_system/JuinKansen.rb +251 -0
- data/lib/bcdice/game_system/KanColle.rb +17 -166
- data/lib/bcdice/game_system/KillDeathBusiness.rb +35 -44
- data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +2 -1
- data/lib/bcdice/game_system/LogHorizon.rb +8 -8
- data/lib/bcdice/game_system/LostRoyal.rb +2 -4
- data/lib/bcdice/game_system/MagicaLogia.rb +3 -3
- data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
- data/lib/bcdice/game_system/MeikyuDays.rb +2 -2
- data/lib/bcdice/game_system/MeikyuKingdom.rb +3 -3
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +3 -3
- data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
- data/lib/bcdice/game_system/MetallicGuardian.rb +1 -2
- data/lib/bcdice/game_system/MonotoneMuseum.rb +4 -3
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +1 -1
- data/lib/bcdice/game_system/NSSQ.rb +2 -2
- data/lib/bcdice/game_system/Nechronica.rb +3 -3
- data/lib/bcdice/game_system/NeverCloud.rb +540 -5
- data/lib/bcdice/game_system/NightWizard.rb +2 -2
- data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
- data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
- data/lib/bcdice/game_system/NinjaSlayer.rb +30 -41
- data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
- data/lib/bcdice/game_system/OracleEngine.rb +14 -18
- data/lib/bcdice/game_system/OrgaRain.rb +17 -25
- data/lib/bcdice/game_system/Paradiso.rb +3 -3
- data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
- data/lib/bcdice/game_system/Peekaboo.rb +1 -1
- data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
- 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 +1 -1
- data/lib/bcdice/game_system/RecordOfLodossWar.rb +8 -7
- data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
- data/lib/bcdice/game_system/RokumonSekai2.rb +3 -3
- data/lib/bcdice/game_system/RuinBreakers.rb +1 -1
- data/lib/bcdice/game_system/RyuTuber.rb +6 -4
- data/lib/bcdice/game_system/Ryutama.rb +2 -2
- data/lib/bcdice/game_system/SRS.rb +1 -6
- data/lib/bcdice/game_system/SamsaraBallad.rb +5 -4
- data/lib/bcdice/game_system/Satasupe.rb +90 -865
- data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
- data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
- data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +3 -3
- data/lib/bcdice/game_system/ShinobiGami.rb +75 -39
- data/lib/bcdice/game_system/ShoujoTenrankai.rb +1 -1
- data/lib/bcdice/game_system/Skynauts.rb +2 -2
- data/lib/bcdice/game_system/SteamPunkers.rb +7 -5
- data/lib/bcdice/game_system/StellarKnights.rb +1 -3
- data/lib/bcdice/game_system/SterileLife.rb +1 -1
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +2 -2
- data/lib/bcdice/game_system/StratoShout.rb +10 -36
- data/lib/bcdice/game_system/StratoShout_Korean.rb +2 -1
- data/lib/bcdice/game_system/SwordWorld.rb +46 -182
- data/lib/bcdice/game_system/SwordWorld2_0.rb +21 -149
- data/lib/bcdice/game_system/SwordWorld2_5.rb +126 -40
- data/lib/bcdice/game_system/TherapieSein.rb +2 -2
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
- data/lib/bcdice/game_system/Torg.rb +2 -2
- data/lib/bcdice/game_system/TorgEternity.rb +5 -8
- data/lib/bcdice/game_system/TrinitySeven.rb +2 -2
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +7 -7
- data/lib/bcdice/game_system/TwilightGunsmoke.rb +2 -2
- data/lib/bcdice/game_system/UnsungDuet.rb +1 -1
- data/lib/bcdice/game_system/Utakaze.rb +2 -2
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
- data/lib/bcdice/game_system/Warhammer.rb +7 -7
- data/lib/bcdice/game_system/Warhammer4.rb +10 -13
- data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
- data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
- data/lib/bcdice/game_system/Yggdrasill.rb +605 -0
- data/lib/bcdice/game_system/ZettaiReido.rb +2 -2
- data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +294 -0
- data/lib/bcdice/game_system/cthulhu7th/rollable.rb +41 -0
- data/lib/bcdice/game_system/meikyu_kingdom/item_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/kingdom_name_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/landscape_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/name_tables.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/placename_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom/word_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/item_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/name_table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +2 -0
- data/lib/bcdice/game_system/meikyu_kingdom_basic/word_table.rb +2 -0
- data/lib/bcdice/game_system/one_way_heroics/dungeon_table.rb +2 -0
- data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +2 -0
- data/lib/bcdice/game_system/one_way_heroics/tables.rb +2 -0
- data/lib/bcdice/game_system/satasupe/tables.rb +723 -0
- data/lib/bcdice/game_system/sword_world/rating_lexer.rb +47 -0
- data/lib/bcdice/game_system/sword_world/rating_parsed.rb +99 -0
- data/lib/bcdice/game_system/sword_world/rating_parser.rb +457 -0
- data/lib/bcdice/game_system/sword_world/transcendent_test.rb +104 -0
- data/lib/bcdice/loader.rb +11 -4
- data/lib/bcdice/normalize.rb +3 -1
- data/lib/bcdice/preprocessor.rb +12 -8
- data/lib/bcdice/randomizer.rb +14 -0
- data/lib/bcdice/repl.rb +3 -1
- data/lib/bcdice/result.rb +4 -0
- data/lib/bcdice/translate.rb +2 -0
- data/lib/bcdice/user_defined_dice_table.rb +28 -15
- data/lib/bcdice/version.rb +3 -1
- metadata +28 -27
- data/.editorconfig +0 -21
- data/.github/.codecov.yaml +0 -10
- data/.github/workflows/coverage.yaml +0 -21
- data/.github/workflows/lint.yaml +0 -13
- data/.github/workflows/test.yml +0 -20
- data/.gitignore +0 -14
- data/.rubocop.yml +0 -108
- data/.rubocop_todo.yml +0 -114
- data/Gemfile +0 -14
- data/ROADMAP.md +0 -30
- data/Rakefile +0 -152
- data/bcdice.gemspec +0 -29
- data/bin/repl.rb +0 -21
- data/docs/README.txt +0 -2028
- data/docs/dicebot_sort_key.md +0 -72
- data/docs/how_to_make_dicebot.md +0 -453
- data/lib/bcdice/command_parser.rb +0 -242
- data/lib/bcdice/common_command/add_dice/parser.y +0 -153
- data/lib/bcdice/common_command/barabara_dice/parser.y +0 -107
- data/lib/bcdice/common_command/calc/parser.y +0 -79
- data/lib/bcdice/common_command/reroll_dice/parser.y +0 -158
- data/lib/bcdice/common_command/upper_dice/parser.y +0 -143
@@ -41,10 +41,7 @@ module BCDice
|
|
41
41
|
・ダメージ結果表「DTx or DAMAGEx」
|
42
42
|
・ロールボーナス表「BTx+y or BONUSx+y or TOTALx+y」 xは数値, yは技能基本値
|
43
43
|
INFO_MESSAGE_TEXT
|
44
|
-
register_prefix('TE
|
45
|
-
def initialize(command)
|
46
|
-
super(command)
|
47
|
-
end
|
44
|
+
register_prefix('TE', 'UP', 'POS', '\d+BD', 'TG', 'RT', 'Result', 'DT', 'damage', 'BT', 'bonus', 'total', '1R20')
|
48
45
|
|
49
46
|
def eval_game_system_specific_command(command)
|
50
47
|
torg_check(command) ||
|
@@ -176,7 +173,7 @@ module BCDice
|
|
176
173
|
# ダメージボーナスコマンド
|
177
174
|
def getBonusDamageDiceCommandResult(command)
|
178
175
|
debug("TorgEternity Bonus Damage Roll Command ? ", command)
|
179
|
-
m = /(\d+)(BD)(([
|
176
|
+
m = /(\d+)(BD)(([+\-]\d+)*)/i.match(command)
|
180
177
|
unless m
|
181
178
|
return nil
|
182
179
|
end
|
@@ -196,7 +193,7 @@ module BCDice
|
|
196
193
|
# 成功レベル表コマンド
|
197
194
|
def getSuccessLevelDiceCommandResult(command)
|
198
195
|
debug("TorgEternity Success Level Table Command ? ", command)
|
199
|
-
m = /(RT|Result)(
|
196
|
+
m = /(RT|Result)(-*\d+([+\-]\d+)*)/i.match(command)
|
200
197
|
unless m
|
201
198
|
return nil
|
202
199
|
end
|
@@ -216,7 +213,7 @@ module BCDice
|
|
216
213
|
# ダメージ結果表コマンド
|
217
214
|
def getDamageResultDiceCommandResult(command)
|
218
215
|
debug("TorgEternity Damage Result Table Command ? ", command)
|
219
|
-
m = /(DT|Damage)(
|
216
|
+
m = /(DT|Damage)(-*\d+([+\-]\d+)*)/i.match(command)
|
220
217
|
unless m
|
221
218
|
return nil
|
222
219
|
end
|
@@ -232,7 +229,7 @@ module BCDice
|
|
232
229
|
# ロールボーナス表コマンド
|
233
230
|
def getRollBonusDiceCommandResult(command)
|
234
231
|
debug("TorgEternity Roll Bonus Table Command ? ", command)
|
235
|
-
m = /(BT|Bonus)(\d+)(([
|
232
|
+
m = /(BT|Bonus|Total)(\d+)(([+\-]\d+)*)/i.match(command)
|
236
233
|
unless m
|
237
234
|
return nil
|
238
235
|
end
|
@@ -44,14 +44,14 @@ module BCDice
|
|
44
44
|
return "#{firstName} , #{secondName}"
|
45
45
|
end
|
46
46
|
|
47
|
-
if /^TR([
|
47
|
+
if /^TR([+\-\d]*)<=(\d*)([+\-\d]*)/ =~ command
|
48
48
|
critical = Regexp.last_match(1).to_i + 7
|
49
49
|
target = Regexp.last_match(2).to_i
|
50
50
|
modify = Regexp.last_match(3).to_i
|
51
51
|
return rollHit(command, critical, target, modify)
|
52
52
|
end
|
53
53
|
|
54
|
-
if /^(
|
54
|
+
if /^(\d*)DM(\d*)([+\-\d]*)$/ =~ command
|
55
55
|
diceCount = Regexp.last_match(1).to_i
|
56
56
|
critical = Regexp.last_match(2).to_i
|
57
57
|
modify = Regexp.last_match(3).to_i
|
@@ -30,7 +30,7 @@ module BCDice
|
|
30
30
|
下から2番目の出目をずらした分だけ合計にマイナス修正を追加して表示します。
|
31
31
|
INFO_MESSAGE_TEXT
|
32
32
|
|
33
|
-
register_prefix('\d+H?BS
|
33
|
+
register_prefix('\d+H?BS', '\d+R6', '\d+D\d+.+', '\dD6')
|
34
34
|
|
35
35
|
def initialize(command)
|
36
36
|
super(command)
|
@@ -42,9 +42,9 @@ module BCDice
|
|
42
42
|
|
43
43
|
def replace_text(string)
|
44
44
|
if /BS/i =~ string
|
45
|
-
string = string.gsub(/(\d+)HBS([^\d\s][
|
45
|
+
string = string.gsub(/(\d+)HBS([^\d\s][+\-\d]+)/i) { "#{Regexp.last_match(1)}R6#{Regexp.last_match(2)}[H]" }
|
46
46
|
string = string.gsub(/(\d+)HBS/i) { "#{Regexp.last_match(1)}R6[H]" }
|
47
|
-
string = string.gsub(/(\d+)BS([^\d\s][
|
47
|
+
string = string.gsub(/(\d+)BS([^\d\s][+\-\d]+)/i) { "#{Regexp.last_match(1)}R6#{Regexp.last_match(2)}" }
|
48
48
|
string = string.gsub(/(\d+)BS/i) { "#{Regexp.last_match(1)}R6" }
|
49
49
|
end
|
50
50
|
|
@@ -61,7 +61,7 @@ module BCDice
|
|
61
61
|
|
62
62
|
output = "1"
|
63
63
|
|
64
|
-
return output unless (m = /(^|\s)S?((\d+)[rR]6([
|
64
|
+
return output unless (m = /(^|\s)S?((\d+)[rR]6([+\-\d]*)(\[(\w+)\])?)(\s|$)/i.match(string))
|
65
65
|
|
66
66
|
debug('tandt_berserk matched')
|
67
67
|
|
@@ -184,9 +184,9 @@ module BCDice
|
|
184
184
|
command = command
|
185
185
|
.sub(/\d+LV$/i) { |level| level.to_i * 5 + 15 }
|
186
186
|
|
187
|
-
parser =
|
188
|
-
|
189
|
-
|
187
|
+
parser = Command::Parser.new(/\d+D6/, round_type: round_type)
|
188
|
+
.restrict_cmp_op_to(nil, :>=)
|
189
|
+
.enable_question_target()
|
190
190
|
cmd = parser.parse(command)
|
191
191
|
unless cmd
|
192
192
|
return nil
|
@@ -58,7 +58,7 @@ module BCDice
|
|
58
58
|
private
|
59
59
|
|
60
60
|
def check_roll(command)
|
61
|
-
m = /^2D6([
|
61
|
+
m = /^2D6([+\-\d]*)>=(\d+)(\[(\d+)?(,(\d+))?\])?$/i.match(command)
|
62
62
|
unless m
|
63
63
|
return nil
|
64
64
|
end
|
@@ -520,7 +520,7 @@ module BCDice
|
|
520
520
|
)
|
521
521
|
}.freeze
|
522
522
|
|
523
|
-
register_prefix('2D6
|
523
|
+
register_prefix('2D6', TABLES.keys)
|
524
524
|
end
|
525
525
|
end
|
526
526
|
end
|
@@ -25,7 +25,7 @@ module BCDice
|
|
25
25
|
例)3UK@5 :龍のダイス「月」でクリティカルコール宣言したサイコロ3個の行為判定
|
26
26
|
MESSAGETEXT
|
27
27
|
|
28
|
-
register_prefix('\d*UK[@\d]
|
28
|
+
register_prefix('\d*UK[@\d]*')
|
29
29
|
|
30
30
|
def initialize(command)
|
31
31
|
super(command)
|
@@ -39,7 +39,7 @@ module BCDice
|
|
39
39
|
result = ''
|
40
40
|
|
41
41
|
case command
|
42
|
-
when /(\d+)?UK(
|
42
|
+
when /(\d+)?UK(@?(\d))?(>=(\d+))?/i
|
43
43
|
base = (Regexp.last_match(1) || 2).to_i
|
44
44
|
crit = Regexp.last_match(3).to_i
|
45
45
|
diff = Regexp.last_match(5).to_i
|
@@ -41,7 +41,7 @@ module BCDice
|
|
41
41
|
NOT_CHECK_SUCCESS = -1 # 判定成功にかかわるチェックを行わない(判定失敗に関わるチェックは行う)
|
42
42
|
|
43
43
|
# ダイスボットで使用するコマンドを配列で列挙する
|
44
|
-
register_prefix('\d*VMF
|
44
|
+
register_prefix('\d*VMF')
|
45
45
|
|
46
46
|
def eval_game_system_specific_command(command)
|
47
47
|
m = /\A(\d+)?(VMF)(\d+)(\+(\d+))?/.match(command)
|
@@ -26,7 +26,7 @@ module BCDice
|
|
26
26
|
例)wh60 wh43@4W WH65@
|
27
27
|
INFO_MESSAGE_TEXT
|
28
28
|
|
29
|
-
register_prefix('WH
|
29
|
+
register_prefix('WH')
|
30
30
|
|
31
31
|
def initialize(command)
|
32
32
|
super(command)
|
@@ -255,18 +255,18 @@ module BCDice
|
|
255
255
|
debug("pos_type", pos_type)
|
256
256
|
if pos_type != ""
|
257
257
|
case pos_type
|
258
|
-
when
|
258
|
+
when /@(2W|W2)/i
|
259
259
|
pos_t = 1
|
260
|
-
when
|
260
|
+
when /@(4W|W4)/i
|
261
261
|
pos_t = 4
|
262
|
-
when
|
262
|
+
when /@(4H|H4)/i
|
263
263
|
pos_t = 3
|
264
|
-
when
|
264
|
+
when /@4/i
|
265
265
|
pos_t = 2
|
266
|
-
when
|
266
|
+
when /@W/i
|
267
267
|
pos_t = 5
|
268
268
|
else
|
269
|
-
unless
|
269
|
+
unless /@(2H|H2|2)/i =~ pos_type
|
270
270
|
pos_t = -1
|
271
271
|
end
|
272
272
|
end
|
@@ -18,7 +18,7 @@ module BCDice
|
|
18
18
|
"WH部位 頑健ボーナス以下フラグ"の形で指定します。
|
19
19
|
部位は「H(頭部)」「A(腕)」「B(胴体)」「L(足)」の4カ所です。
|
20
20
|
頑健ボーナスフラグは頑健ボーナス以下のダメージの時にUをつけます。
|
21
|
-
例)
|
21
|
+
例)whctH whctAU WHCTL
|
22
22
|
|
23
23
|
■ 命中部位表 (WHLT)
|
24
24
|
命中部位をランダムに決定します。(クリティカル用)
|
@@ -263,19 +263,16 @@ module BCDice
|
|
263
263
|
|
264
264
|
def additional_result(total, target_number)
|
265
265
|
tens, ones = split_d100(total)
|
266
|
-
|
267
|
-
if
|
268
|
-
|
269
|
-
"ファンブル"
|
270
|
-
end
|
271
|
-
elsif ones == tens
|
272
|
-
"クリティカル"
|
273
|
-
else
|
274
|
-
# 一の位と十の位を入れ替えて参照する
|
275
|
-
HIT_PARTS_TABLE.fetch(merge_d100(ones, tens)).content
|
266
|
+
if (total > target_number) || (total > 95) # 自動失敗時のファンブル処理も
|
267
|
+
if ones == tens
|
268
|
+
"ファンブル"
|
276
269
|
end
|
277
|
-
|
278
|
-
|
270
|
+
elsif ones == tens
|
271
|
+
"クリティカル"
|
272
|
+
else
|
273
|
+
# 一の位と十の位を入れ替えて参照する
|
274
|
+
HIT_PARTS_TABLE.fetch(merge_d100(ones, tens)).content
|
275
|
+
end
|
279
276
|
end
|
280
277
|
|
281
278
|
def split_d100(dice)
|
@@ -0,0 +1,605 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bcdice/base"
|
4
|
+
|
5
|
+
module BCDice
|
6
|
+
module GameSystem
|
7
|
+
class Yggdrasill < Base
|
8
|
+
ID = "Yggdrasill"
|
9
|
+
|
10
|
+
NAME = "鋼鉄のユグドラシル"
|
11
|
+
|
12
|
+
SORT_KEY = "こうてつのゆくとらしる"
|
13
|
+
|
14
|
+
HELP_MESSAGE = <<~HELP_MESSAGE
|
15
|
+
■ 行為判定 (CFx+nD6)
|
16
|
+
クリティカルとファンブルによるダイス追加を行う
|
17
|
+
先頭のcfを変更することで、動作が変更される
|
18
|
+
hcf: 達成値が半減
|
19
|
+
cfl: 付加効果【幸運】を付与
|
20
|
+
cfg: 付加効果【ギャンブル】を付与
|
21
|
+
cft: 【応急処置】判定 (tは末尾に記入してください)
|
22
|
+
例)
|
23
|
+
CF10+1D6, HCFL6+2D6, CFG11+1D6-2, cfgt10+1D6
|
24
|
+
|
25
|
+
■ 暴走ロール (RAx)
|
26
|
+
暴走率xの暴走ロールおよび臨界ロールを行う
|
27
|
+
例)
|
28
|
+
RA50, RA110, RA150
|
29
|
+
|
30
|
+
■ SOペナルティ表 (SOx)
|
31
|
+
スペック数がxオーバーした際のペナルティロールを行う
|
32
|
+
例)
|
33
|
+
SO1, SO5
|
34
|
+
|
35
|
+
■ 【応急処置】 (TREATx)
|
36
|
+
達成値xの【応急処置】による回復量を決定する
|
37
|
+
例)
|
38
|
+
TREAT1, TREAT18
|
39
|
+
|
40
|
+
■ その他の判定および表
|
41
|
+
down:気絶判定
|
42
|
+
cont:コンティニュー判定
|
43
|
+
risk:リスク判定
|
44
|
+
guki:偶奇判定
|
45
|
+
cond:コンディションロール
|
46
|
+
allr:オールレンジ発動ロール
|
47
|
+
pafe:パーフェクト発動ロール
|
48
|
+
stag:ステージ決定(電脳ロワイヤル用)
|
49
|
+
fatal1:後遺症
|
50
|
+
fatal2:因子変化ロール
|
51
|
+
mikuzi:浅草寺みくじ。1d100であなたの運勢を占います
|
52
|
+
HELP_MESSAGE
|
53
|
+
|
54
|
+
register_prefix(
|
55
|
+
'H?CF', 'RA', 'SO', 'DOWN', 'CO(NT)?',
|
56
|
+
'RISK', 'GUKI', 'COND', 'TREAT',
|
57
|
+
'ALLR', 'PAFE', 'FATAL', 'STAG', 'MIKUZI'
|
58
|
+
)
|
59
|
+
|
60
|
+
def eval_game_system_specific_command(command)
|
61
|
+
roll_tables(command, TABLES) ||
|
62
|
+
roll_cf(command) ||
|
63
|
+
roll_ra(command) ||
|
64
|
+
roll_treat(command) ||
|
65
|
+
roll_down(command) ||
|
66
|
+
roll_cond(command) ||
|
67
|
+
roll_guki(command) ||
|
68
|
+
roll_cont(command) ||
|
69
|
+
roll_allr(command) ||
|
70
|
+
roll_pafe(command)
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def roll_cf(command)
|
76
|
+
# マイナス補正にダイスロールを用いることはシステム上ありえないため、正規表現ではじく
|
77
|
+
m = /^(H)?CF([LG])?(T)?((?:[+-]*\d+|\+?\d+D\d+)(?:[+-]+\d+|\++\d+D\d+)*)$/.match(command)
|
78
|
+
return nil unless m
|
79
|
+
|
80
|
+
hoge = !m[1].nil?
|
81
|
+
lucky_state = m[2]
|
82
|
+
treat_flg = !m[3].nil?
|
83
|
+
|
84
|
+
expr = m[4]
|
85
|
+
|
86
|
+
node = CommonCommand::AddDice::Parser.parse(expr)
|
87
|
+
return nil unless node
|
88
|
+
|
89
|
+
add_dice_randomizer = CommonCommand::AddDice::Randomizer.new(@randomizer, self)
|
90
|
+
total = node.lhs.eval(self, add_dice_randomizer)
|
91
|
+
rand_values = @randomizer.rand_results.map(&:first)
|
92
|
+
|
93
|
+
n1 = count_fumble(rand_values, lucky_state)
|
94
|
+
n_max = count_critical(rand_values, lucky_state)
|
95
|
+
|
96
|
+
# ファンブルロール
|
97
|
+
fa_list = @randomizer.roll_barabara(n1, 6)
|
98
|
+
fa1 = fa_list.sum
|
99
|
+
fa2 = fa_list.join(",")
|
100
|
+
|
101
|
+
critical_rerolls = []
|
102
|
+
rerolls = n_max
|
103
|
+
while rerolls > 0
|
104
|
+
list = @randomizer.roll_barabara(rerolls, 6)
|
105
|
+
critical_rerolls.push(list)
|
106
|
+
|
107
|
+
rerolls = list.count(6)
|
108
|
+
end
|
109
|
+
# crの達成値を合計する・cr出目を見易く
|
110
|
+
cr1 = critical_rerolls.flatten.sum
|
111
|
+
cr2 = critical_rerolls.map { |x| "[#{x.join(',')}]" }.join()
|
112
|
+
|
113
|
+
# 修正値&一投目出目 -ファンブル +クリティカル
|
114
|
+
total_n = total - fa1 + cr1
|
115
|
+
total_n /= 2 if hoge == true
|
116
|
+
# 最終達成値
|
117
|
+
result = "計【 #{total_n} 】"
|
118
|
+
|
119
|
+
text = "(#{command}) > #{result} : #{node.lhs.output}"
|
120
|
+
# クリファン有無に応じて表示の追加
|
121
|
+
text += " (fa:#{n1})-#{fa1}[#{fa2}]" if n1 > 0
|
122
|
+
text += " (cr:#{n_max})+#{cr1}#{cr2} (cr:計#{critical_rerolls.flatten.size}回)" if cr1 > 0
|
123
|
+
|
124
|
+
if treat_flg == true
|
125
|
+
# TREAT追加処理
|
126
|
+
heal = eval_game_system_specific_command("TREAT#{total_n}")
|
127
|
+
text += "\n > #{heal}"
|
128
|
+
end
|
129
|
+
|
130
|
+
return text
|
131
|
+
end
|
132
|
+
|
133
|
+
def count_critical(dice_list, lucky_state)
|
134
|
+
threshold =
|
135
|
+
if lucky_state == "G"
|
136
|
+
4
|
137
|
+
elsif lucky_state
|
138
|
+
5
|
139
|
+
else
|
140
|
+
6
|
141
|
+
end
|
142
|
+
|
143
|
+
dice_list.count { |x| x >= threshold }
|
144
|
+
end
|
145
|
+
|
146
|
+
def count_fumble(dice_list, lucky_state)
|
147
|
+
threshold =
|
148
|
+
if lucky_state == "G"
|
149
|
+
3
|
150
|
+
elsif lucky_state
|
151
|
+
2
|
152
|
+
else
|
153
|
+
1
|
154
|
+
end
|
155
|
+
|
156
|
+
dice_list.count { |x| x <= threshold }
|
157
|
+
end
|
158
|
+
|
159
|
+
def roll_ra(command)
|
160
|
+
m = /^RA(\d+)?$/.match(command)
|
161
|
+
return nil unless m
|
162
|
+
|
163
|
+
body =
|
164
|
+
case m[1]&.to_i
|
165
|
+
when 50
|
166
|
+
RA50.roll(@randomizer)
|
167
|
+
when 70
|
168
|
+
RA70.roll(@randomizer)
|
169
|
+
when 90
|
170
|
+
RA90.roll(@randomizer)
|
171
|
+
when 110, 120, 130, 140
|
172
|
+
RA110.roll(@randomizer)
|
173
|
+
when 150
|
174
|
+
"> 因子崩壊【キャラロスト】"
|
175
|
+
when nil
|
176
|
+
"> このコマンドは数値を付けてください"
|
177
|
+
else
|
178
|
+
"> 指定の暴走率の暴走ロールはありません"
|
179
|
+
end
|
180
|
+
|
181
|
+
"(#{command}) #{body}"
|
182
|
+
end
|
183
|
+
|
184
|
+
def roll_treat(command)
|
185
|
+
m = /^TREAT(-?\d+)?$/.match(command)
|
186
|
+
return nil unless m
|
187
|
+
|
188
|
+
unless m[1]
|
189
|
+
return "AE【応急処置】 > このコマンドは数値を付けてください"
|
190
|
+
end
|
191
|
+
|
192
|
+
value = m[1]&.to_i
|
193
|
+
|
194
|
+
recovery =
|
195
|
+
if value <= 5
|
196
|
+
0
|
197
|
+
elsif value <= 7
|
198
|
+
1
|
199
|
+
elsif value <= 11
|
200
|
+
dice = @randomizer.roll_once(6)
|
201
|
+
total = dice / 2
|
202
|
+
"#{total}(#{dice}[#{dice}]/2)"
|
203
|
+
elsif value <= 14
|
204
|
+
dice = @randomizer.roll_once(6)
|
205
|
+
"#{dice}(#{dice}[#{dice}])"
|
206
|
+
elsif value <= 17
|
207
|
+
dice = @randomizer.roll_once(6)
|
208
|
+
total = dice + 3
|
209
|
+
"#{total}(#{dice}[#{dice}]+3)"
|
210
|
+
else
|
211
|
+
list = @randomizer.roll_barabara(2, 6)
|
212
|
+
dice = list.sum()
|
213
|
+
total = dice + 2
|
214
|
+
"#{total}(#{dice}[#{list.join(',')}]+2)"
|
215
|
+
end
|
216
|
+
|
217
|
+
"AE【応急処置】 > HPが#{recovery}回復"
|
218
|
+
end
|
219
|
+
|
220
|
+
def roll_down(command)
|
221
|
+
return nil unless command == 'DOWN'
|
222
|
+
|
223
|
+
dice = @randomizer.roll_once(6)
|
224
|
+
|
225
|
+
result =
|
226
|
+
if dice.even?
|
227
|
+
"回避"
|
228
|
+
else
|
229
|
+
fell = @randomizer.roll_once(6)
|
230
|
+
"気絶【#{fell}R行動不能】"
|
231
|
+
end
|
232
|
+
|
233
|
+
"気絶判定 > #{dice} > #{result}"
|
234
|
+
end
|
235
|
+
|
236
|
+
def roll_cond(command)
|
237
|
+
return nil unless command == 'COND'
|
238
|
+
|
239
|
+
hp_list = @randomizer.roll_barabara(2, 6)
|
240
|
+
hp_total = hp_list.sum
|
241
|
+
hp_str = hp_list.join(",")
|
242
|
+
|
243
|
+
pp_list = @randomizer.roll_barabara(2, 6)
|
244
|
+
pp_total = pp_list.sum
|
245
|
+
pp_str = pp_list.join(",")
|
246
|
+
|
247
|
+
return "(#{command}) > HP#{hp_total}[#{hp_str}] 、 PP#{pp_total}[#{pp_str}]"
|
248
|
+
end
|
249
|
+
|
250
|
+
def roll_guki(command)
|
251
|
+
return nil unless command == 'GUKI'
|
252
|
+
|
253
|
+
dice = @randomizer.roll_once(6)
|
254
|
+
result = dice.even? ? "成功" : "失敗"
|
255
|
+
|
256
|
+
"(GUKI) > #{dice} > #{result}"
|
257
|
+
end
|
258
|
+
|
259
|
+
def roll_cont(command)
|
260
|
+
return nil unless /CO(NT)?/.match?(command)
|
261
|
+
|
262
|
+
dice = @randomizer.roll_once(6)
|
263
|
+
text = dice <= 4 ? "1R追加" : "2R追加"
|
264
|
+
|
265
|
+
"コンティニュー判定 > #{dice} > #{text}"
|
266
|
+
end
|
267
|
+
|
268
|
+
def roll_allr(command)
|
269
|
+
return nil unless command == 'ALLR'
|
270
|
+
|
271
|
+
dice = @randomizer.roll_once(6)
|
272
|
+
text =
|
273
|
+
if dice == 1
|
274
|
+
"発動失敗【技対象が敵味方含めた全員となる】"
|
275
|
+
else
|
276
|
+
"発動成功"
|
277
|
+
end
|
278
|
+
|
279
|
+
"オールレンジ判定 > #{dice} > #{text}"
|
280
|
+
end
|
281
|
+
|
282
|
+
def roll_pafe(command)
|
283
|
+
return nil unless command == "PAFE"
|
284
|
+
|
285
|
+
dice = @randomizer.roll_once(6)
|
286
|
+
text =
|
287
|
+
if dice == 1
|
288
|
+
"発動失敗【通常命中・回避判定となり、発動時のアクション内の命中力&回避力が半減する】"
|
289
|
+
else
|
290
|
+
"発動成功"
|
291
|
+
end
|
292
|
+
|
293
|
+
"発動ロール > #{dice} > #{text}"
|
294
|
+
end
|
295
|
+
|
296
|
+
class YggTable < DiceTable::Table
|
297
|
+
def initialize(name, type, items, additonal_type:, additonal_format:, additonal_index:, out_of_control: nil)
|
298
|
+
super(name, type, items)
|
299
|
+
|
300
|
+
m = /(\d+)D(\d+)/i.match(additonal_type)
|
301
|
+
unless m
|
302
|
+
raise ArgumentError, "Unexpected table type: #{additonal_type}"
|
303
|
+
end
|
304
|
+
|
305
|
+
@additonal_times = m[1].to_i
|
306
|
+
@additonal_sides = m[2].to_i
|
307
|
+
@format = additonal_format
|
308
|
+
@index = additonal_index
|
309
|
+
@out_of_control = out_of_control
|
310
|
+
end
|
311
|
+
|
312
|
+
def roll(randomizer)
|
313
|
+
value = randomizer.roll_sum(@times, @sides)
|
314
|
+
chosen = choice(value)
|
315
|
+
|
316
|
+
return chosen unless @index.include?(value) || @out_of_control == value
|
317
|
+
|
318
|
+
body =
|
319
|
+
if @out_of_control == value
|
320
|
+
"#{chosen.body} : #{RA90.roll(randomizer)}"
|
321
|
+
else
|
322
|
+
list = randomizer.roll_barabara(@additonal_times, @additonal_sides)
|
323
|
+
chosen.body + format(@format, total: list.sum(), list: list.join(","))
|
324
|
+
end
|
325
|
+
|
326
|
+
DiceTable::RollResult.new(chosen.table_name, chosen.value, body)
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
class ChainTable < DiceTable::Table
|
331
|
+
def initialize(name, type, items, additonal_table:, additonal_index:)
|
332
|
+
super(name, type, items)
|
333
|
+
|
334
|
+
@additonal_table = additonal_table
|
335
|
+
@index = additonal_index
|
336
|
+
end
|
337
|
+
|
338
|
+
def roll(randomizer)
|
339
|
+
value = randomizer.roll_sum(@times, @sides)
|
340
|
+
chosen = choice(value)
|
341
|
+
|
342
|
+
return chosen unless @index.include?(value)
|
343
|
+
|
344
|
+
body = "#{chosen.body} > #{@additonal_table.roll(randomizer)}"
|
345
|
+
DiceTable::RollResult.new(chosen.table_name, chosen.value, body)
|
346
|
+
end
|
347
|
+
end
|
348
|
+
|
349
|
+
PSY_TABLE = DiceTable::Table.new(
|
350
|
+
"能力タイプ",
|
351
|
+
"1D6",
|
352
|
+
[
|
353
|
+
'サイキッカー',
|
354
|
+
'エスパー',
|
355
|
+
'トランサー',
|
356
|
+
'クリエイター',
|
357
|
+
'アンノウン',
|
358
|
+
'好きな能力タイプを選択。ノーマル選択でも可'
|
359
|
+
]
|
360
|
+
)
|
361
|
+
|
362
|
+
RA50 = YggTable.new(
|
363
|
+
"暴走Lv.1",
|
364
|
+
"1D6",
|
365
|
+
[
|
366
|
+
'発作【自爆÷2ダメージ。(自身に能力攻撃ロールダメージ÷2)。防御無視】',
|
367
|
+
'高揚【1D6暴走率上昇】',
|
368
|
+
'高揚【1D6暴走率上昇】',
|
369
|
+
'自制【暴走なし】',
|
370
|
+
'自制【暴走なし】',
|
371
|
+
'自制【暴走なし】',
|
372
|
+
],
|
373
|
+
additonal_type: "1D6",
|
374
|
+
additonal_format: " : %{total}[%{list}] %",
|
375
|
+
additonal_index: [2, 3]
|
376
|
+
)
|
377
|
+
|
378
|
+
RA70 = YggTable.new(
|
379
|
+
"暴走Lv.3",
|
380
|
+
"1D6",
|
381
|
+
[
|
382
|
+
'自爆【自爆ダメージ。自身に能力攻撃ロールダメージ。防御無視】',
|
383
|
+
'自爆【自爆ダメージ。自身に能力攻撃ロールダメージ。防御無視】',
|
384
|
+
'暴発【ランダム攻撃。基本的に能力攻撃。対象は自分、キャラ、オブジェクトの三種類】',
|
385
|
+
'連鎖【2D6暴走率上昇】',
|
386
|
+
'発症',
|
387
|
+
'自制【暴走無し】'
|
388
|
+
],
|
389
|
+
additonal_type: "2D6",
|
390
|
+
additonal_format: " : %{total}[%{list}] %",
|
391
|
+
additonal_index: [4],
|
392
|
+
out_of_control: 5
|
393
|
+
)
|
394
|
+
|
395
|
+
RA90 = DiceTable::D66ParityTable.new(
|
396
|
+
"暴走状態表",
|
397
|
+
[
|
398
|
+
'能力異常【能力使用時に偶奇判定。奇数の場合は消費だけ行い能力発動失敗。暴走チェックごとに+2%される(発症時も発生)。能力精度の判定結果が半減】',
|
399
|
+
'言語異常【AE使用時に偶奇判定。奇数の場合は消費だけ行いAE発動失敗。話術の判定結果が半減】',
|
400
|
+
'記憶異常【命中判定結果が半減する。知識の判定結果が半減】',
|
401
|
+
'精神異常【自分のリアクション(回避判定など)で偶奇判定。奇数の場合は行動自動失敗。隠密、読心の判定結果が半減】',
|
402
|
+
'忘我【自プリアクション時に偶奇判定。奇数の場合は宣言せずにターン終了。あらゆる技能判定結果が半減】',
|
403
|
+
'自制【暴走無し】'
|
404
|
+
],
|
405
|
+
[
|
406
|
+
'制御異常【自プリアクション毎(行動決定前)に偶奇判定。奇数の場合は暴発によるランダム攻撃。(発症時も発生)。技術、幸運の判定結果が半減】',
|
407
|
+
'過負荷【ワンアクション毎に能力精度÷3の防御無視ダメージ(発症時も発生)。閃きの判定結果が半減】',
|
408
|
+
'聴覚異常【回避判定結果が半減する。察知の半減結果が半減】',
|
409
|
+
'視覚異常【SS&命中力&回避力が半減する※判定結果は半減しない。観察眼の判定結果が半減】',
|
410
|
+
'身体異常【防御を差し引く前のダメージロールが半減する。力技、俊敏の判定結果が半減】',
|
411
|
+
'自制【暴走なし】'
|
412
|
+
]
|
413
|
+
)
|
414
|
+
|
415
|
+
RA110 = YggTable.new(
|
416
|
+
"臨界ロール",
|
417
|
+
"1D6",
|
418
|
+
[
|
419
|
+
'自壊【自爆ダメージ。自身の最も高い攻撃ロールダメージ。防御無視】',
|
420
|
+
'超活性【HP・PPを2D6回復】',
|
421
|
+
'自壊【自爆ダメージ。自身の最も高い攻撃ロールダメージ。防御無視】',
|
422
|
+
'超活性【HP・PPを2D6回復】',
|
423
|
+
'自壊【自爆ダメージ。自身の最も高い攻撃ロールダメージ。防御無視】',
|
424
|
+
'超活性【HP・PPを2D6回復】'
|
425
|
+
],
|
426
|
+
additonal_type: "2D6",
|
427
|
+
additonal_format: " : %{total}[%{list}] 回復",
|
428
|
+
additonal_index: [2, 4, 6]
|
429
|
+
)
|
430
|
+
|
431
|
+
TABLES = {
|
432
|
+
"MIKUZI" => DiceTable::RangeTable.new(
|
433
|
+
"おみくじ",
|
434
|
+
"1D100",
|
435
|
+
[
|
436
|
+
[1..17, "大吉"],
|
437
|
+
[18..52, "吉"],
|
438
|
+
[53..57, "半吉"],
|
439
|
+
[58..61, "小吉"],
|
440
|
+
[62..64, "末小吉"],
|
441
|
+
[65..70, "末吉"],
|
442
|
+
[71..100, "凶"],
|
443
|
+
]
|
444
|
+
),
|
445
|
+
"SO1" => YggTable.new(
|
446
|
+
"SOペナルティ表 1オーバー",
|
447
|
+
"1D6",
|
448
|
+
[
|
449
|
+
'消費負荷【PP2倍消費 ※AE消費は含まない】',
|
450
|
+
'消費負荷【PP2倍消費 ※AE消費は含まない】',
|
451
|
+
'消費負荷【PP2倍消費 ※AE消費は含まない】',
|
452
|
+
'反動',
|
453
|
+
'反動',
|
454
|
+
'制御成功【発動成功 ペナルティ無し】'
|
455
|
+
],
|
456
|
+
additonal_type: "1D6",
|
457
|
+
additonal_format: "【命中&回避-1D6(%{total}[%{list}]) 1ラウンド継続】",
|
458
|
+
additonal_index: [4, 5]
|
459
|
+
),
|
460
|
+
"SO2" => YggTable.new(
|
461
|
+
"SOペナルティ表 2オーバー",
|
462
|
+
"1D6",
|
463
|
+
[
|
464
|
+
'自爆【自分へ能力攻撃ダメージ ※防御無視】',
|
465
|
+
'消費負荷【PP2倍消費 ※AE消費は含まない】',
|
466
|
+
'消費負荷【PP2倍消費 ※AE消費は含まない】',
|
467
|
+
'反動',
|
468
|
+
'反動',
|
469
|
+
'制御成功【発動成功 ペナルティ無し】'
|
470
|
+
],
|
471
|
+
additonal_type: "1D6",
|
472
|
+
additonal_format: "【命中&回避-1D6(%{total}[%{list}]) 1ラウンド継続】",
|
473
|
+
additonal_index: [4, 5]
|
474
|
+
),
|
475
|
+
"SO3" => YggTable.new(
|
476
|
+
"SOペナルティ表 3オーバー",
|
477
|
+
"1D6",
|
478
|
+
[
|
479
|
+
'自爆【自分へ能力攻撃ダメージ ※防御無視】',
|
480
|
+
'自爆【自分へ能力攻撃ダメージ ※防御無視】',
|
481
|
+
'消費負荷【PP2倍消費 ※AE消費は含まない】',
|
482
|
+
'過反動',
|
483
|
+
'過反動',
|
484
|
+
'制御成功【発動成功 ペナルティ無し】'
|
485
|
+
],
|
486
|
+
additonal_type: "2D6",
|
487
|
+
additonal_format: "【命中&回避-2D6(%{total}[%{list}]) 1ラウンド継続】",
|
488
|
+
additonal_index: [4, 5]
|
489
|
+
),
|
490
|
+
"SO4" => YggTable.new(
|
491
|
+
"SOペナルティ表 4オーバー",
|
492
|
+
"1D6",
|
493
|
+
[
|
494
|
+
'崩壊【自爆ダメージ×2 ※防御無視】',
|
495
|
+
'崩壊【自爆ダメージ×2 ※防御無視】',
|
496
|
+
'超負荷【PP3倍消費 ※AE消費は含まない】',
|
497
|
+
'過反動',
|
498
|
+
'過反動',
|
499
|
+
'制御成功【発動成功 ペナルティ無し】',
|
500
|
+
],
|
501
|
+
additonal_type: "2D6",
|
502
|
+
additonal_format: "【命中&回避-2D6(%{total}[%{list}]) 1ラウンド継続】",
|
503
|
+
additonal_index: [4, 5]
|
504
|
+
),
|
505
|
+
"SO5" => DiceTable::Table.new(
|
506
|
+
"SOペナルティ表 5オーバー",
|
507
|
+
"1D6",
|
508
|
+
[
|
509
|
+
'崩壊【自爆ダメージ×2 ※防御無視】',
|
510
|
+
'崩壊【自爆ダメージ×2 ※防御無視】',
|
511
|
+
'崩壊【自爆ダメージ×2 ※防御無視】',
|
512
|
+
'超負荷【PP3倍消費 ※AE消費は含まない】',
|
513
|
+
'超負荷【PP3倍消費 ※AE消費は含まない】',
|
514
|
+
'制御成功【発動成功 ペナルティ無し】'
|
515
|
+
]
|
516
|
+
),
|
517
|
+
"RISK" => DiceTable::Table.new(
|
518
|
+
"リスク判定",
|
519
|
+
"1D6",
|
520
|
+
[
|
521
|
+
'能力自爆【能力は発動せず、PPを2倍消費する。併用AEのPPは含まない。それに加え【自爆】する。能力攻撃力分を自身へ防御無視ダメージ】',
|
522
|
+
'能力不発【能力は発動せず、PPを2倍消費する。併用AEのPPは含まない】',
|
523
|
+
'効果不発【リスクの効果はゼロで能力発動】',
|
524
|
+
'通常発動【(能力精度÷3)+1D6を加える】',
|
525
|
+
'活性発動【(能力精度÷3)+2D6を加える】',
|
526
|
+
'覚醒発動【(能力精度÷3)+3D6を加える】'
|
527
|
+
]
|
528
|
+
),
|
529
|
+
"FATAL1" => DiceTable::Table.new(
|
530
|
+
"後遺症判定",
|
531
|
+
"1D6",
|
532
|
+
[
|
533
|
+
'聴覚崩壊【聴覚に異常が起きる。幻聴、難聴、失聴、など】',
|
534
|
+
'視覚崩壊【視覚に異常が起こる。幻覚、色盲、失明、など】',
|
535
|
+
'言語崩壊【言語の認識に異常が起きる。しゃべる事に支障をきたす。吃音、失語症、失読症、など】',
|
536
|
+
'身体崩壊【身体に異常が起こる。欠損、異形化、麻痺、など】',
|
537
|
+
'精神崩壊【精神に異常が起こる。人格破綻、性格変化、妄想・幻覚による異常行動、など】',
|
538
|
+
'記憶崩壊【記憶に異常が起こる。記憶障害、記憶喪失、など】'
|
539
|
+
]
|
540
|
+
),
|
541
|
+
"FATAL2" => ChainTable.new(
|
542
|
+
"因子変化判定",
|
543
|
+
"1D6",
|
544
|
+
[
|
545
|
+
'能力変化【能力がまったく別ものに変化する】',
|
546
|
+
'能力変化【能力がまったく別ものに変化する】',
|
547
|
+
'因子抑制【能力変化は起こらない】',
|
548
|
+
'因子抑制【能力変化は起こらない】',
|
549
|
+
'能力喪失・能力覚醒【能力を持つものは失い、ノーマルは能力に覚醒する。喪失者はノーマルのキャラ特性ポイントを1p獲得する。覚醒者はノーマルのキャラ特性ポイントを1p失い、キャラ特性を6つ取得していた場合は1つ喪失する】',
|
550
|
+
'能力喪失・能力覚醒【能力を持つものは失い、ノーマルは能力に覚醒する。喪失者はノーマルのキャラ特性ポイントを1p獲得する。覚醒者はノーマルのキャラ特性ポイントを1p失い、キャラ特性を6つ取得していた場合は1つ喪失する】',
|
551
|
+
],
|
552
|
+
additonal_table: PSY_TABLE,
|
553
|
+
additonal_index: [1, 2, 5, 6]
|
554
|
+
),
|
555
|
+
"STAG" => DiceTable::D66Table.new(
|
556
|
+
"ステージ決定",
|
557
|
+
D66SortType::NO_SORT,
|
558
|
+
{
|
559
|
+
11 => 'ロシアンルーレット【幸運にて判定。参加者は銃をこめかみにあて、1発の銃弾をひかないように祈る。 敗者は3D6ダメージ】',
|
560
|
+
12 => 'チキンレース【察知にて判定。に向ってバイクでダッシュだ。敗者は2D6ダメージ。落ちても大丈夫です、電脳だから】',
|
561
|
+
13 => '取り立て【力技or威圧にて判定。あのモヒカン借金払わないんですよ。よろしくお願いしますね。電脳を通しての実際の取り立てらしい】',
|
562
|
+
14 => '舌戦【威圧or話術にて判定。参加者同士で舌戦で勝者を決めろ!敗者は心に2D6ダメージ】',
|
563
|
+
15 => 'ギャンブル【読心or幸運にて判定。ポーカー、ルーレット、麻雀、好きなものを選べ。勝利の鍵は運か、それとも人の心か】',
|
564
|
+
16 => 'トラップ【SSにて判定。君達の目の前に広がるのはそう、地雷原だ。敗者は3D6ダメージ】',
|
565
|
+
|
566
|
+
21 => 'サバゲー【隠密or俊敏にて判定。軍人となって、相手を屠れ!敗者は死ぬ。敗者は2D6ダメージ】',
|
567
|
+
22 => '追跡【察知or隠密にて判定。ニンジャの姿となって下手人を追え!コアな人気を誇るステージ。ニンジャ人気すごい】',
|
568
|
+
23 => '推理【閃きにて判定。あなたたちは探偵となり、事件を解決に導く。犯人は、お前だ!2時間放送になるのが玉に瑕】',
|
569
|
+
24 => '潜入【隠密にて判定。スパイとなり、機密情報を盗め!あれ、これ実際の企業の機密情報じゃ・・・?】',
|
570
|
+
25 => 'かくれんぼ【隠密or読心にて判定。あなたを追うのはホラーな化け物・・・。スリリングなかくれんぼをどうぞ堪能下さい】',
|
571
|
+
26 => '絶対絶命!【回避力にて判定。君達はマフィアにおびき出されたのだ。大勢の銃が君を狙う。敗者は3D6ダメージ】',
|
572
|
+
|
573
|
+
31 => 'クイズ【知識にて判定。己の知識を存分に披露しろ!負けたら奈落に落されます。敗者は1D6ダメージ】',
|
574
|
+
32 => '迷路【察知or幸運にて判定。巨大迷路をクリアしろ!あれ、なんでこんなところに骸骨が・・・】',
|
575
|
+
33 => 'パズル【知識or閃きにて判定。3Dの難解パズルを解き明かせ!!時折金庫破りのパスワードがターゲットになってたり】',
|
576
|
+
34 => '間違い探し【観察眼or閃きにて判定。大量の鍵から正しい鍵を。美女の中からオカマを。そんな間違いを見つけるのだ!】',
|
577
|
+
35 => '目利き【観察眼or知識にて判定。あなたの鑑定で値段を当てろ!はずれたらかっこ悪いです】',
|
578
|
+
36 => 'スナイパー【命中力にて判定。一撃必殺でターゲットを仕留めろ!なお、ターゲットはお互いだ。敗者は2D6ダメージ】',
|
579
|
+
|
580
|
+
41 => '腕相撲【力技にて判定。必要なのは、力のみ!!敗者は2D6ダメージ】',
|
581
|
+
42 => 'インディジョーンズ【俊敏にて判定。なぜか大岩が後ろから!逃げろー!敗者は3D6ダメージ】',
|
582
|
+
43 => 'PK【力技or察知にて判定。見極め、ゴールしろ!パワーで破ってもいい】',
|
583
|
+
44 => 'ダンス【技術or俊敏にて判定。己の舞を魅せろ!ジャンル問わず】',
|
584
|
+
45 => 'ボディコンテスト【威圧にて判定。魅せるのはマッスルか、それとも美しい肢体か!容姿ボーナスはつきません】',
|
585
|
+
46 => '突破しろ!【ダメージ量にて判定。立ちはだかる扉をぶち破れ!扉は防御10】',
|
586
|
+
|
587
|
+
51 => '早食い【力技or俊敏にて判定。くって!くって!!くいまくれ!!敗者は胃に2D6ダメージ】',
|
588
|
+
52 => 'ナンパ天国【話術or読心にて判定。電脳世界で老若男女を口説き落せ!相手はプログラムだったり電脳に入っているアバターだったり】',
|
589
|
+
53 => 'スリーサイズ【観察眼にて判定。魅惑のボディをなめまわせ!勝利者はある意味で尊敬され、ある意味で嫌われる】',
|
590
|
+
54 => 'ワサビ寿司【観察眼or幸運にて判定。高級寿司の中に、死ぬほどの刺激が・・・!敗者は2D6ダメージ】',
|
591
|
+
55 => 'じゃんけん【読心にて判定。じゃんけんとは運ではない、読み合いなのだ!】',
|
592
|
+
56 => '瓦割り【ダメージ量にて判定。どんな方法でもいい。とにかく枚数を割れ!!!ダメージ量の2倍くらいが割った枚数】',
|
593
|
+
|
594
|
+
61 => '料理対決【知識or技術にて判定。胃袋をつかめ!絶品料理対決!料理によってはR18G指定になる場合がある】',
|
595
|
+
62 => '歌合戦【威圧or技術にて判定。その歌唱力で心をつかめ!アイドルデビューも夢じゃない!電脳なのでお好きな衣装でどうぞ】',
|
596
|
+
63 => '漫才【話術or閃きにて判定。即興漫才で画面の向こうを爆笑の渦へ!相方が必要な方は漫才プログラムアバターをレンタル。有料】',
|
597
|
+
64 => '画伯【技術にて判定。テーマをもとに、あなたの画力を見せつけろ!時々下手うまな人が勝つことも】',
|
598
|
+
65 => 'プレゼンテーション【話術にて判定。本日の商品は、こちら!!実際に販売します。してもらいます】',
|
599
|
+
66 => '無双撃破!【ダメージ量にて判定。た、大量のモヒカンだぁ~!ダメージ量の2倍くらいが倒した数。敗者は2D6ダメージ。SE【オールレンジ】技は成功で判定+10】'
|
600
|
+
}
|
601
|
+
)
|
602
|
+
}.freeze
|
603
|
+
end
|
604
|
+
end
|
605
|
+
end
|