bcdice 3.0.0.pre.alpha.1 → 3.0.0.pre.alpha.2
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/.github/workflows/test.yml +1 -1
- data/.rubocop.yml +12 -0
- data/.rubocop_todo.yml +1 -0
- data/CHANGELOG.md +34 -0
- data/Gemfile +6 -3
- data/Rakefile +52 -18
- data/bcdice.gemspec +2 -0
- data/i18n/Amadeus/ja_jp.yml +386 -0
- data/i18n/Amadeus/ko_kr.yml +148 -0
- data/i18n/Cthulhu/ja_jp.yml +11 -0
- data/i18n/Cthulhu/ko_kr.yml +11 -0
- data/i18n/Cthulhu/zh_hant.yml +11 -0
- data/i18n/DetatokoSaga/ja_jp.yml +74 -0
- data/i18n/DetatokoSaga/ko_kr.yml +74 -0
- data/i18n/DoubleCross/ja_jp.yml +53 -0
- data/i18n/DoubleCross/ko_kr.yml +53 -0
- data/i18n/Dracurouge/ja_jp.yml +1374 -0
- data/i18n/Dracurouge/ko_kr.yml +295 -0
- data/i18n/Fiasco/ja_jp.yml +10 -0
- data/i18n/Fiasco/ko_kr.yml +10 -0
- data/i18n/FutariSousa/ja_jp.yml +720 -0
- data/i18n/FutariSousa/ko_kr.yml +746 -0
- data/i18n/Insane/ja_jp.yml +454 -0
- data/i18n/Insane/ko_kr.yml +502 -0
- data/i18n/Kamigakari/ja_jp.yml +276 -0
- data/i18n/Kamigakari/ko_kr.yml +204 -0
- data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
- data/i18n/KillDeathBusiness/ko_kr.yml +1062 -0
- data/i18n/LogHorizon/ja_jp.yml +3082 -0
- data/i18n/LogHorizon/ko_kr.yml +923 -0
- data/i18n/MagicaLogia/ja_jp.yml +564 -0
- data/i18n/MonotoneMuseum/ja_jp.yml +525 -0
- data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
- data/i18n/Nechronica/ja_jp.yml +57 -0
- data/i18n/Nechronica/ko_kr.yml +14 -0
- data/i18n/StratoShout/ja_jp.yml +160 -0
- data/i18n/StratoShout/ko_kr.yml +160 -0
- data/i18n/ja_jp.yml +5 -0
- data/i18n/ko_kr.yml +7 -0
- data/i18n/zh_hant.yml +3 -0
- data/lib/bcdice/arithmetic/node.rb +154 -0
- data/lib/bcdice/base.rb +87 -101
- data/lib/bcdice/common_command.rb +2 -0
- data/lib/bcdice/common_command/add_dice.rb +5 -41
- data/lib/bcdice/common_command/add_dice/node.rb +92 -16
- data/lib/bcdice/common_command/add_dice/parser.rb +374 -274
- data/lib/bcdice/common_command/add_dice/parser.y +153 -0
- data/lib/bcdice/common_command/add_dice/randomizer.rb +25 -33
- data/lib/bcdice/common_command/barabara_dice.rb +6 -47
- data/lib/bcdice/common_command/barabara_dice/node.rb +84 -0
- data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
- data/lib/bcdice/common_command/barabara_dice/parser.y +107 -0
- data/lib/bcdice/common_command/calc.rb +7 -30
- data/lib/bcdice/common_command/calc/node.rb +30 -0
- data/lib/bcdice/common_command/calc/parser.rb +271 -0
- data/lib/bcdice/common_command/calc/parser.y +79 -0
- data/lib/bcdice/common_command/choice.rb +137 -19
- data/lib/bcdice/common_command/d66_dice.rb +48 -34
- data/lib/bcdice/common_command/lexer.rb +46 -0
- data/lib/bcdice/common_command/repeat.rb +102 -0
- data/lib/bcdice/common_command/reroll_dice.rb +8 -158
- data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
- data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
- data/lib/bcdice/common_command/reroll_dice/parser.y +158 -0
- data/lib/bcdice/common_command/upper_dice.rb +10 -129
- data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
- data/lib/bcdice/common_command/upper_dice/parser.rb +412 -0
- data/lib/bcdice/common_command/upper_dice/parser.y +143 -0
- data/lib/bcdice/common_command/version.rb +9 -17
- data/lib/bcdice/deprecated/checker.rb +78 -0
- data/lib/bcdice/dice_table/d66_grid_table.rb +8 -0
- data/lib/bcdice/dice_table/d66_table.rb +10 -0
- data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
- data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
- data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
- data/lib/bcdice/dice_table/table.rb +8 -0
- data/lib/bcdice/game_system.rb +7 -1
- data/lib/bcdice/game_system/AFF2e.rb +1 -1
- data/lib/bcdice/game_system/AceKillerGene.rb +2 -2
- data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
- data/lib/bcdice/game_system/Alsetto.rb +1 -1
- data/lib/bcdice/game_system/Alshard.rb +1 -1
- data/lib/bcdice/game_system/AlterRaise.rb +2 -2
- data/lib/bcdice/game_system/Amadeus.rb +46 -507
- data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
- data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
- data/lib/bcdice/game_system/Arianrhod.rb +0 -1
- data/lib/bcdice/game_system/ArsMagica.rb +1 -1
- data/lib/bcdice/game_system/Avandner.rb +1 -1
- data/lib/bcdice/game_system/BBN.rb +1 -1
- data/lib/bcdice/game_system/BadLife.rb +1 -1
- data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
- data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -2
- data/lib/bcdice/game_system/BeginningIdol.rb +2 -3
- data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2 -3
- data/lib/bcdice/game_system/BladeOfArcana.rb +2 -2
- data/lib/bcdice/game_system/BlindMythos.rb +1 -1
- data/lib/bcdice/game_system/BloodCrusade.rb +0 -1
- data/lib/bcdice/game_system/BloodMoon.rb +0 -1
- data/lib/bcdice/game_system/CardRanker.rb +1 -2
- data/lib/bcdice/game_system/ChaosFlare.rb +1 -1
- data/lib/bcdice/game_system/Chill.rb +1 -1
- data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
- data/lib/bcdice/game_system/ColossalHunter.rb +1 -2
- data/lib/bcdice/game_system/Comes.rb +50 -0
- data/lib/bcdice/game_system/CrashWorld.rb +1 -1
- data/lib/bcdice/game_system/Cthulhu.rb +94 -97
- data/lib/bcdice/game_system/Cthulhu7th.rb +108 -67
- 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 +8 -14
- data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
- data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
- data/lib/bcdice/game_system/DarkBlaze.rb +9 -5
- data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
- data/lib/bcdice/game_system/DarkSouls.rb +1 -1
- data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
- data/lib/bcdice/game_system/DemonParasite.rb +1 -2
- data/lib/bcdice/game_system/DetatokoSaga.rb +48 -149
- data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +6 -274
- data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
- data/lib/bcdice/game_system/DoubleCross.rb +102 -81
- data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
- data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
- data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
- 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 +3 -4
- data/lib/bcdice/game_system/EmbryoMachine.rb +1 -1
- data/lib/bcdice/game_system/Emoklore.rb +131 -0
- data/lib/bcdice/game_system/EndBreaker.rb +1 -2
- data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
- data/lib/bcdice/game_system/Fiasco.rb +87 -70
- data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
- data/lib/bcdice/game_system/FilledWith.rb +462 -566
- data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
- data/lib/bcdice/game_system/FutariSousa.rb +103 -938
- data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
- data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
- data/lib/bcdice/game_system/Garako.rb +131 -39
- data/lib/bcdice/game_system/GardenOrder.rb +2 -2
- data/lib/bcdice/game_system/GehennaAn.rb +1 -1
- data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
- data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
- data/lib/bcdice/game_system/GoldenSkyStories.rb +1 -1
- data/lib/bcdice/game_system/Gorilla.rb +1 -1
- data/lib/bcdice/game_system/GranCrest.rb +2 -3
- data/lib/bcdice/game_system/GundogRevised.rb +1 -1
- data/lib/bcdice/game_system/GundogZero.rb +1 -1
- data/lib/bcdice/game_system/GurpsFW.rb +2 -3
- data/lib/bcdice/game_system/HarnMaster.rb +2 -2
- data/lib/bcdice/game_system/HatsuneMiku.rb +1 -2
- data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
- data/lib/bcdice/game_system/HuntersMoon.rb +1 -2
- data/lib/bcdice/game_system/Illusio.rb +2 -2
- data/lib/bcdice/game_system/Insane.rb +90 -717
- data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
- data/lib/bcdice/game_system/Kamigakari.rb +47 -242
- data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
- data/lib/bcdice/game_system/KanColle.rb +3 -3
- data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
- data/lib/bcdice/game_system/KillDeathBusiness.rb +162 -1144
- data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +6 -1459
- data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
- data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
- data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
- data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
- data/lib/bcdice/game_system/LostRecord.rb +0 -1
- data/lib/bcdice/game_system/LostRoyal.rb +1 -2
- data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
- data/lib/bcdice/game_system/MeikyuDays.rb +1 -2
- data/lib/bcdice/game_system/MeikyuKingdom.rb +4 -4
- data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -5
- data/lib/bcdice/game_system/MetalHead.rb +1 -1
- data/lib/bcdice/game_system/MetalHeadExtream.rb +2 -2
- data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
- data/lib/bcdice/game_system/MonotoneMuseum.rb +38 -239
- data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
- data/lib/bcdice/game_system/NSSQ.rb +159 -0
- data/lib/bcdice/game_system/Nechronica.rb +34 -73
- data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
- data/lib/bcdice/game_system/NeverCloud.rb +1 -1
- data/lib/bcdice/game_system/NightWizard.rb +1 -1
- data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
- data/lib/bcdice/game_system/NinjaSlayer.rb +12 -11
- data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
- data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
- data/lib/bcdice/game_system/OracleEngine.rb +1 -1
- data/lib/bcdice/game_system/OrgaRain.rb +2 -2
- data/lib/bcdice/game_system/Paradiso.rb +1 -1
- data/lib/bcdice/game_system/Paranoia.rb +1 -1
- data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
- data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
- data/lib/bcdice/game_system/Peekaboo.rb +22 -122
- data/lib/bcdice/game_system/Postman.rb +2 -2
- data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
- data/lib/bcdice/game_system/Raisondetre.rb +2 -2
- data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
- data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
- data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
- data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
- data/lib/bcdice/game_system/Ryutama.rb +1 -1
- data/lib/bcdice/game_system/SRS.rb +1 -2
- data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
- data/lib/bcdice/game_system/Satasupe.rb +1 -2
- data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
- data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
- data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
- data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
- data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
- data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
- data/lib/bcdice/game_system/ShinobiGami.rb +1 -2
- data/lib/bcdice/game_system/ShoujoTenrankai.rb +2 -2
- data/lib/bcdice/game_system/Skynauts.rb +1 -1
- data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
- data/lib/bcdice/game_system/StellarKnights.rb +1 -2
- data/lib/bcdice/game_system/SterileLife.rb +1 -1
- data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -2
- data/lib/bcdice/game_system/StratoShout.rb +44 -247
- data/lib/bcdice/game_system/StratoShout_Korean.rb +6 -282
- data/lib/bcdice/game_system/Strave.rb +2 -2
- data/lib/bcdice/game_system/SwordWorld.rb +8 -9
- data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -3
- data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -3
- data/lib/bcdice/game_system/TherapieSein.rb +1 -1
- data/lib/bcdice/game_system/TokumeiTenkousei.rb +1 -1
- data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
- data/lib/bcdice/game_system/Torg.rb +2 -2
- data/lib/bcdice/game_system/Torg1_5.rb +1 -1
- data/lib/bcdice/game_system/TorgEternity.rb +1 -1
- data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
- data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
- data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -2
- data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
- data/lib/bcdice/game_system/Utakaze.rb +1 -1
- data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
- data/lib/bcdice/game_system/Villaciel.rb +1 -2
- data/lib/bcdice/game_system/Warhammer.rb +1 -1
- data/lib/bcdice/game_system/Warhammer4.rb +329 -0
- data/lib/bcdice/game_system/WitchQuest.rb +1 -1
- data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
- data/lib/bcdice/game_system/YankeeYogSothoth.rb +15 -15
- data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
- data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
- data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
- data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
- data/lib/bcdice/loader.rb +6 -8
- data/lib/bcdice/preprocessor.rb +15 -40
- data/lib/bcdice/repl.rb +1 -1
- data/lib/bcdice/result.rb +83 -0
- data/lib/bcdice/translate.rb +11 -0
- data/lib/bcdice/version.rb +1 -1
- metadata +80 -4
|
@@ -23,7 +23,8 @@ module BCDice
|
|
|
23
23
|
※うろつき~決闘フェイズ
|
|
24
24
|
FT ファンブル表
|
|
25
25
|
WT 変調表
|
|
26
|
-
|
|
26
|
+
RTTn ランダム特技決定表(n:分野番号、省略可能)
|
|
27
|
+
RCT ランダム分野決定表
|
|
27
28
|
KKT 関係表
|
|
28
29
|
DBRT 他愛のない会話表
|
|
29
30
|
TKT 戦う理由表
|
|
@@ -44,7 +45,6 @@ module BCDice
|
|
|
44
45
|
|
|
45
46
|
def initialize(command)
|
|
46
47
|
super(command)
|
|
47
|
-
@enabled_d66 = true
|
|
48
48
|
@d66_sort_type = D66SortType::ASC
|
|
49
49
|
end
|
|
50
50
|
|
|
@@ -65,7 +65,7 @@ module BCDice
|
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def eval_game_system_specific_command(command)
|
|
68
|
-
roll_tables(command, TABLES)
|
|
68
|
+
roll_tables(command, TABLES) || RTT.roll_command(randomizer, command)
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
NICKNAME_TABLE1 = DiceTable::D66Table.new(
|
|
@@ -180,18 +180,18 @@ module BCDice
|
|
|
180
180
|
}
|
|
181
181
|
)
|
|
182
182
|
|
|
183
|
+
RTT = DiceTable::SaiFicSkillTable.new(
|
|
184
|
+
[
|
|
185
|
+
['苦手', ['大人', '勉強', '敗北', '昆虫', '親', '異性', '孤独', '高所', '暗がり', 'ホラー', '子供']],
|
|
186
|
+
['部活', ['柔道', 'プロレス', 'テコンドー', '空手', 'ボクシング', '帰宅', '剣道', '野球', '応援団', '科学', '文系']],
|
|
187
|
+
['中学時代', ['悪ガキ', '統一', 'バイト', '習い事', '喧嘩', 'サボり', 'マジメくん', '遊び歩き', '真似ごと', '部活', '何もしない']],
|
|
188
|
+
['趣味', ['すけべ', '車・バイク', '家事', '料理', '運動', '修行', 'ファッション', 'つるむ', '寝る', 'ゲーム', '読書']],
|
|
189
|
+
['スタイル', ['テキトー', 'ばか', 'オラオラ', '熱血', '硬派', '自然体', '軟派', '自分大好き', '腹黒', 'クール', 'インテリ']],
|
|
190
|
+
['好み', ['だらだら', '食事', '逆転', '家族', '支配', '褒められる', '恋愛', '友情', '勝利', '金', '静寂']],
|
|
191
|
+
],
|
|
192
|
+
rtt_format: "ランダム指定特技表(%<category_dice>d,%<row_dice>d) > %<text>s"
|
|
193
|
+
)
|
|
183
194
|
TABLES = {
|
|
184
|
-
"RTT" => DiceTable::SaiFicSkillTable.new(
|
|
185
|
-
[
|
|
186
|
-
['苦手', ['大人', '勉強', '敗北', '昆虫', '親', '異性', '孤独', '高所', '暗がり', 'ホラー', '子供']],
|
|
187
|
-
['部活', ['柔道', 'プロレス', 'テコンドー', '空手', 'ボクシング', '帰宅', '剣道', '野球', '応援団', '科学', '文系']],
|
|
188
|
-
['中学時代', ['悪ガキ', '統一', 'バイト', '習い事', '喧嘩', 'サボり', 'マジメくん', '遊び歩き', '真似ごと', '部活', '何もしない']],
|
|
189
|
-
['趣味', ['すけべ', '車・バイク', '家事', '料理', '運動', '修行', 'ファッション', 'つるむ', '寝る', 'ゲーム', '読書']],
|
|
190
|
-
['スタイル', ['テキトー', 'ばか', 'オラオラ', '熱血', '硬派', '自然体', '軟派', '自分大好き', '腹黒', 'クール', 'インテリ']],
|
|
191
|
-
['好み', ['だらだら', '食事', '逆転', '家族', '支配', '褒められる', '恋愛', '友情', '勝利', '金', '静寂']],
|
|
192
|
-
],
|
|
193
|
-
peekaboo_style: true
|
|
194
|
-
),
|
|
195
195
|
"FTNT" => DiceTable::ChainTable.new(
|
|
196
196
|
"二つ名決定表",
|
|
197
197
|
"1D6",
|
|
@@ -434,7 +434,7 @@ module BCDice
|
|
|
434
434
|
),
|
|
435
435
|
}.freeze
|
|
436
436
|
|
|
437
|
-
register_prefix(TABLES.keys)
|
|
437
|
+
register_prefix(RTT.prefixes, TABLES.keys)
|
|
438
438
|
end
|
|
439
439
|
end
|
|
440
440
|
end
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/dice_table/range_table"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class FilledWith
|
|
8
|
+
# マジカルクッキング表
|
|
9
|
+
#
|
|
10
|
+
# 別の表に飛ぶ場合は、遅延評価のためにlambdaでジャンプ先の表を括る。
|
|
11
|
+
COOK_TABLES = {
|
|
12
|
+
1 => DiceTable::RangeTable.new(
|
|
13
|
+
"マジカルクッキング(Lv 1)",
|
|
14
|
+
"1D6",
|
|
15
|
+
[
|
|
16
|
+
[1, "おべんとミートボール"],
|
|
17
|
+
[2, "パリパリ小魚"],
|
|
18
|
+
[3, "キャロットタルト"],
|
|
19
|
+
[4, "おにぎり"],
|
|
20
|
+
[5..6, lambda { COOK_TABLES[2] }],
|
|
21
|
+
]
|
|
22
|
+
).freeze,
|
|
23
|
+
|
|
24
|
+
2 => DiceTable::RangeTable.new(
|
|
25
|
+
"マジカルクッキング(Lv 2)",
|
|
26
|
+
"1D6",
|
|
27
|
+
[
|
|
28
|
+
[1, "カリカリミミズ肉"],
|
|
29
|
+
[2, "竹つきチクワ"],
|
|
30
|
+
[3, "トロピカルジュース"],
|
|
31
|
+
[4, "イナリ寿司"],
|
|
32
|
+
[5..6, lambda { COOK_TABLES[3] }],
|
|
33
|
+
]
|
|
34
|
+
).freeze,
|
|
35
|
+
|
|
36
|
+
3 => DiceTable::RangeTable.new(
|
|
37
|
+
"マジカルクッキング(Lv 3)",
|
|
38
|
+
"1D6",
|
|
39
|
+
[
|
|
40
|
+
[1, "ホットミートパイ"],
|
|
41
|
+
[2, "魔界魚の目玉"],
|
|
42
|
+
[3, "パンプキンプリン"],
|
|
43
|
+
[4, "スタミナ丼"],
|
|
44
|
+
[5..6, lambda { COOK_TABLES[4] }],
|
|
45
|
+
]
|
|
46
|
+
).freeze,
|
|
47
|
+
|
|
48
|
+
4 => DiceTable::RangeTable.new(
|
|
49
|
+
"マジカルクッキング(Lv 4)",
|
|
50
|
+
"1D6",
|
|
51
|
+
[
|
|
52
|
+
[1, "ジャンボ串焼き"],
|
|
53
|
+
[2, "シルヴァまっしぐら"],
|
|
54
|
+
[3, "フラウアイスクリーム"],
|
|
55
|
+
[4, "ピクニックランチ"],
|
|
56
|
+
[5..6, lambda { COOK_TABLES[5] }],
|
|
57
|
+
]
|
|
58
|
+
).freeze,
|
|
59
|
+
|
|
60
|
+
5 => DiceTable::RangeTable.new(
|
|
61
|
+
"マジカルクッキング(Lv 5)",
|
|
62
|
+
"1D6",
|
|
63
|
+
[
|
|
64
|
+
[1, "グラント風香草焼き"],
|
|
65
|
+
[2, "エドマエスシ"],
|
|
66
|
+
[3, "スターフルーツパフェ"],
|
|
67
|
+
[4, "具沢山本格カレー"],
|
|
68
|
+
[5..6, lambda { COOK_TABLES[6] }],
|
|
69
|
+
]
|
|
70
|
+
).freeze,
|
|
71
|
+
|
|
72
|
+
6 => DiceTable::RangeTable.new(
|
|
73
|
+
"マジカルクッキング(Lv 6)",
|
|
74
|
+
"1D6",
|
|
75
|
+
[
|
|
76
|
+
[1, "ドラゴンステーキ"],
|
|
77
|
+
[2, "刺身盛り合わせ"],
|
|
78
|
+
[3, "エデンのアップルパイ"],
|
|
79
|
+
[4, "フォートレス炒飯"],
|
|
80
|
+
[5..6, lambda { COOK_TABLES[7] }],
|
|
81
|
+
]
|
|
82
|
+
).freeze,
|
|
83
|
+
|
|
84
|
+
7 => DiceTable::RangeTable.new(
|
|
85
|
+
"マジカルクッキング(Lv 7)",
|
|
86
|
+
"1D6",
|
|
87
|
+
[
|
|
88
|
+
[1, "マツザカスペシャル"],
|
|
89
|
+
[2, "オオトロスシ"],
|
|
90
|
+
[3, "スノーホワイトボンブ"],
|
|
91
|
+
[4, "よもつへぐい"],
|
|
92
|
+
[5..6, lambda { COOK_TABLES[8] }],
|
|
93
|
+
]
|
|
94
|
+
).freeze,
|
|
95
|
+
|
|
96
|
+
8 => DiceTable::RangeTable.new(
|
|
97
|
+
"マジカルクッキング(Lv 8)",
|
|
98
|
+
"1D6",
|
|
99
|
+
[
|
|
100
|
+
[1, "超特大マンガ肉"],
|
|
101
|
+
[2, "特上うな丼"],
|
|
102
|
+
[3, "魔将樹のかき氷"],
|
|
103
|
+
[4, "ヘブンズランチ"],
|
|
104
|
+
[5..6, lambda { COOK_TABLES[9] }],
|
|
105
|
+
]
|
|
106
|
+
).freeze,
|
|
107
|
+
|
|
108
|
+
9 => DiceTable::RangeTable.new(
|
|
109
|
+
"マジカルクッキング(Lv 9)",
|
|
110
|
+
"1D6",
|
|
111
|
+
[
|
|
112
|
+
[1..3, "世界樹のサラダ"],
|
|
113
|
+
[4..6, "黄金のラダマン鍋"],
|
|
114
|
+
]
|
|
115
|
+
).freeze,
|
|
116
|
+
}.freeze
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "bcdice/dice_table/range_table"
|
|
4
|
+
|
|
5
|
+
module BCDice
|
|
6
|
+
module GameSystem
|
|
7
|
+
class FilledWith
|
|
8
|
+
# ナンバーワンノーマルくじ表(GURPS-FW版)
|
|
9
|
+
#
|
|
10
|
+
# 別の表に飛ぶ場合は、遅延評価のためにlambdaでジャンプ先の表を括る。
|
|
11
|
+
LOT_NORMAL_TABLES = {
|
|
12
|
+
1 => DiceTable::RangeTable.new(
|
|
13
|
+
"ナンバーワンノーマルくじ(phase 1)",
|
|
14
|
+
"1D6",
|
|
15
|
+
[
|
|
16
|
+
[1..3, "イレブンチキン"],
|
|
17
|
+
[4..5, lambda { LOT_NORMAL_TABLES[2] }],
|
|
18
|
+
[6, lambda { LOT_NORMAL_TABLES[3] }],
|
|
19
|
+
]
|
|
20
|
+
).freeze,
|
|
21
|
+
|
|
22
|
+
2 => DiceTable::RangeTable.new(
|
|
23
|
+
"ナンバーワンノーマルくじ(phase 2)",
|
|
24
|
+
"1D6",
|
|
25
|
+
[
|
|
26
|
+
[1, "バロールたわし"],
|
|
27
|
+
[2, "イグニスジッポ"],
|
|
28
|
+
[3, "ヤコ仮面or梟の文鎮(選択可)"],
|
|
29
|
+
[4, "ナレッジのハンモックorジンジャビースト"],
|
|
30
|
+
[5..6, lambda { LOT_NORMAL_TABLES[3] }],
|
|
31
|
+
]
|
|
32
|
+
).freeze,
|
|
33
|
+
|
|
34
|
+
3 => DiceTable::RangeTable.new(
|
|
35
|
+
"ナンバーワンノーマルくじ(phase 3)",
|
|
36
|
+
"1D6",
|
|
37
|
+
[
|
|
38
|
+
[1, "特性HPポーション"],
|
|
39
|
+
[2, "特性MPポーション"],
|
|
40
|
+
[3, "黒い甲冑"],
|
|
41
|
+
[4, "天体望遠鏡"],
|
|
42
|
+
[5, "金獅子の剥製"],
|
|
43
|
+
[6, lambda { LOT_NORMAL_TABLES[4] }],
|
|
44
|
+
]
|
|
45
|
+
).freeze,
|
|
46
|
+
|
|
47
|
+
4 => DiceTable::RangeTable.new(
|
|
48
|
+
"ナンバーワンノーマルくじ(phase 4)",
|
|
49
|
+
"1D6",
|
|
50
|
+
[
|
|
51
|
+
[1, "特性スタミナポーション"],
|
|
52
|
+
[2, "戦乙女の兜"],
|
|
53
|
+
[3, "フェンリルの首輪"],
|
|
54
|
+
[4, "フェニックスカーペット"],
|
|
55
|
+
[5, "動くアダマンゴーレム"],
|
|
56
|
+
[6, lambda { LOT_NORMAL_TABLES[5] }],
|
|
57
|
+
]
|
|
58
|
+
).freeze,
|
|
59
|
+
|
|
60
|
+
5 => DiceTable::RangeTable.new(
|
|
61
|
+
"ナンバーワンノーマルくじ(phase 5)",
|
|
62
|
+
"1D6",
|
|
63
|
+
[
|
|
64
|
+
[1, "キャンディークッション"],
|
|
65
|
+
[2, "屑鉄の金床"],
|
|
66
|
+
[3, "薪割り王の斧"],
|
|
67
|
+
[4, "ロジエの水差し"],
|
|
68
|
+
[5, "箱舟の模型"],
|
|
69
|
+
[6, lambda { LOT_PREMIUM_TABLES[5] }],
|
|
70
|
+
]
|
|
71
|
+
).freeze,
|
|
72
|
+
}.freeze
|
|
73
|
+
|
|
74
|
+
# ナンバーワンプレミアムくじ表(GURPS-FW版)
|
|
75
|
+
#
|
|
76
|
+
# 別の表に飛ぶ場合は、遅延評価のためにlambdaでジャンプ先の表を括る。
|
|
77
|
+
LOT_PREMIUM_TABLES = {
|
|
78
|
+
1 => DiceTable::RangeTable.new(
|
|
79
|
+
"ナンバーワンプレミアムくじ(phase 1)",
|
|
80
|
+
"1D6",
|
|
81
|
+
[
|
|
82
|
+
[1..3, "プレミアムチキン"],
|
|
83
|
+
[4, lambda { LOT_NORMAL_TABLES[3] }],
|
|
84
|
+
[5..6, lambda { LOT_PREMIUM_TABLES[2] }],
|
|
85
|
+
]
|
|
86
|
+
).freeze,
|
|
87
|
+
|
|
88
|
+
2 => DiceTable::RangeTable.new(
|
|
89
|
+
"ナンバーワンプレミアムくじ(phase 2)",
|
|
90
|
+
"1D6",
|
|
91
|
+
[
|
|
92
|
+
[1, "親衛隊バッジ"],
|
|
93
|
+
[2, "ハタモトチャブダイ"],
|
|
94
|
+
[3, "星のコンパス"],
|
|
95
|
+
[4, "白銀の甲冑"],
|
|
96
|
+
[5, lambda { LOT_NORMAL_TABLES[4] }],
|
|
97
|
+
[6, lambda { LOT_PREMIUM_TABLES[3] }],
|
|
98
|
+
]
|
|
99
|
+
).freeze,
|
|
100
|
+
|
|
101
|
+
3 => DiceTable::RangeTable.new(
|
|
102
|
+
"ナンバーワンプレミアムくじ(phase 3)",
|
|
103
|
+
"1D6",
|
|
104
|
+
[
|
|
105
|
+
[1, "特性クイックHPポーション"],
|
|
106
|
+
[2, "特性クイックMPポーション"],
|
|
107
|
+
[3, "特製クイックスタミナポーション"],
|
|
108
|
+
[4, "火龍のフィギュアor氷龍のフィギュア(選択可)"],
|
|
109
|
+
[5, "ヒメショーグンドレス"],
|
|
110
|
+
[6, lambda { LOT_PREMIUM_TABLES[4] }],
|
|
111
|
+
]
|
|
112
|
+
).freeze,
|
|
113
|
+
|
|
114
|
+
4 => DiceTable::RangeTable.new(
|
|
115
|
+
"ナンバーワンプレミアムくじ(phase 4)",
|
|
116
|
+
"1D6",
|
|
117
|
+
[
|
|
118
|
+
[1, "クイックユグドラポーション"],
|
|
119
|
+
[2, "銀河龍のフィギュア/ドラゴン"],
|
|
120
|
+
[3, "銀河龍のフィギュア/魔族"],
|
|
121
|
+
[4, "魔族チェスセット"],
|
|
122
|
+
[5, "イグニスコンロ"],
|
|
123
|
+
[6, lambda { LOT_PREMIUM_TABLES[5] }],
|
|
124
|
+
]
|
|
125
|
+
).freeze,
|
|
126
|
+
|
|
127
|
+
5 => DiceTable::RangeTable.new(
|
|
128
|
+
"ナンバーワンプレミアムくじ(phase 5)",
|
|
129
|
+
"1D6",
|
|
130
|
+
[
|
|
131
|
+
[1, "グレヴディバリウス"],
|
|
132
|
+
[2, "天使の望遠鏡orデスの目覚まし時計(選択可)"],
|
|
133
|
+
[3, "世界樹の蔦"],
|
|
134
|
+
[4, "死神の飾りドレス"],
|
|
135
|
+
[5, "ザバーニヤ等身大フィギュア"],
|
|
136
|
+
[6, lambda { LOT_PREMIUM_TABLES[6] }],
|
|
137
|
+
]
|
|
138
|
+
).freeze,
|
|
139
|
+
|
|
140
|
+
6 => DiceTable::RangeTable.new(
|
|
141
|
+
"ナンバーワンプレミアムくじ(phase 6)",
|
|
142
|
+
"1D6",
|
|
143
|
+
[
|
|
144
|
+
[1, "イレブンチキン"],
|
|
145
|
+
[2, "イレブンチキン(2ピース)"],
|
|
146
|
+
[3, "イレブンチキン(3ピース)"],
|
|
147
|
+
[4, "イレブンチキン(6ピース)"],
|
|
148
|
+
[5, "イレブンチキン(12ピース)"],
|
|
149
|
+
[6, "wish star"],
|
|
150
|
+
]
|
|
151
|
+
).freeze,
|
|
152
|
+
}.freeze
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
data/lib/bcdice/loader.rb
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
module BCDice
|
|
2
2
|
class << self
|
|
3
|
-
#
|
|
3
|
+
# IDを指定してゲームシステムのクラスを取得する
|
|
4
4
|
#
|
|
5
|
-
# @param
|
|
5
|
+
# @param id [String] ID
|
|
6
6
|
# @return [Class, nil]
|
|
7
|
-
def game_system_class(
|
|
8
|
-
|
|
9
|
-
rescue NameError
|
|
10
|
-
return nil
|
|
7
|
+
def game_system_class(id)
|
|
8
|
+
all_game_systems.find { |game_system| game_system::ID == id }
|
|
11
9
|
end
|
|
12
10
|
|
|
13
11
|
# 現在ロードされているゲームシステムのクラス一覧を返す
|
|
@@ -29,8 +27,8 @@ module BCDice
|
|
|
29
27
|
|
|
30
28
|
require "bcdice/game_system/#{class_name}"
|
|
31
29
|
|
|
32
|
-
return
|
|
33
|
-
rescue LoadError
|
|
30
|
+
return BCDice::GameSystem.const_get(class_name)
|
|
31
|
+
rescue LoadError, NameError
|
|
34
32
|
return nil
|
|
35
33
|
end
|
|
36
34
|
end
|
data/lib/bcdice/preprocessor.rb
CHANGED
|
@@ -1,33 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module BCDice
|
|
2
4
|
# 入力文字列に対して前処理を行う
|
|
3
5
|
#
|
|
4
6
|
# @example
|
|
5
7
|
# Preprocessor.process(
|
|
6
|
-
# "1d6+
|
|
7
|
-
# randomizer,
|
|
8
|
+
# "1d6+4D+(3*4) 切り取られる部分",
|
|
8
9
|
# game_system
|
|
9
|
-
# ) #=> "1d6+
|
|
10
|
+
# ) #=> "1d6+4D6+7"
|
|
10
11
|
class Preprocessor
|
|
11
12
|
# @param (see #initialize)
|
|
12
13
|
# @return [String]
|
|
13
|
-
def self.process(text,
|
|
14
|
-
Preprocessor.new(text,
|
|
14
|
+
def self.process(text, game_system)
|
|
15
|
+
Preprocessor.new(text, game_system).process()
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
# @param text [String]
|
|
18
|
-
# @param randomizer [Randomizer]
|
|
19
19
|
# @param game_system [Base]
|
|
20
|
-
def initialize(text,
|
|
20
|
+
def initialize(text, game_system)
|
|
21
21
|
@text = text
|
|
22
|
-
@randomizer = randomizer
|
|
23
22
|
@game_system = game_system
|
|
24
23
|
end
|
|
25
24
|
|
|
26
25
|
# @return [String]
|
|
27
26
|
def process
|
|
28
27
|
trim_after_whitespace()
|
|
29
|
-
replace_preroll()
|
|
30
|
-
replace_range()
|
|
31
28
|
replace_parentheses()
|
|
32
29
|
|
|
33
30
|
@text = @game_system.change_text(@text)
|
|
@@ -44,38 +41,16 @@ module BCDice
|
|
|
44
41
|
@text = @text.strip.split(/\s/, 2).first
|
|
45
42
|
end
|
|
46
43
|
|
|
47
|
-
# [1D6]のような部分を事前ダイスロールする
|
|
48
|
-
def replace_preroll()
|
|
49
|
-
@text = @text.gsub(/\[\d+D\d+\]/i) do |matched|
|
|
50
|
-
# Remove '[' and ']'
|
|
51
|
-
command = matched[1..-2].upcase
|
|
52
|
-
times, sides = command.split("D").map(&:to_i)
|
|
53
|
-
|
|
54
|
-
@randomizer.roll_sum(times, sides)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# [1...6]のような部分を事前ダイスロールする
|
|
59
|
-
def replace_range
|
|
60
|
-
@text = @text.gsub(/\[(\d+)\.\.\.(\d+)\]/) do |matched|
|
|
61
|
-
first = Regexp.last_match(1).to_i
|
|
62
|
-
last = Regexp.last_match(2).to_i
|
|
63
|
-
|
|
64
|
-
if first > last
|
|
65
|
-
matched
|
|
66
|
-
else
|
|
67
|
-
steps = last - first + 1
|
|
68
|
-
dice = @randomizer.roll_once(steps)
|
|
69
|
-
|
|
70
|
-
first + dice - 1
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
44
|
# カッコ書きの数式を事前計算する
|
|
76
45
|
def replace_parentheses
|
|
77
|
-
|
|
78
|
-
|
|
46
|
+
loop do
|
|
47
|
+
prev = @text
|
|
48
|
+
@text = @text.gsub(%r{\([\d/\+\*\-]+\)}) do |expr|
|
|
49
|
+
ae = ArithmeticEvaluator.new(expr, round_type: @game_system.round_type)
|
|
50
|
+
val = ae.eval
|
|
51
|
+
ae.error? ? expr : val
|
|
52
|
+
end
|
|
53
|
+
break if prev == @text
|
|
79
54
|
end
|
|
80
55
|
end
|
|
81
56
|
|