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
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module BCDice
|
|
4
|
+
module GameSystem
|
|
5
|
+
class NSSQ < Base
|
|
6
|
+
ID = "NSSQ"
|
|
7
|
+
NAME = "SRSじゃない世界樹の迷宮TRPG"
|
|
8
|
+
SORT_KEY = "えすああるえすしやないせかいしゆのめいきゆうTRPG"
|
|
9
|
+
|
|
10
|
+
HELP_MESSAGE = <<~MESSAGETEXT
|
|
11
|
+
■ 判定 (xSQ±y)
|
|
12
|
+
xD6の判定。3つ以上振ったとき、出目の高い2つを表示します。クリティカル、ファンブルも計算します。
|
|
13
|
+
±y: yに修正値を入力。±の計算に対応。省略可能。
|
|
14
|
+
|
|
15
|
+
■ ダメージロール (xDR(C)(+)y)
|
|
16
|
+
xD6のダメージロール。クリティカルの自動判定を行います。Cを付けるとクリティカルアップ状態で計算できます。+を付けるとクリティカル時のダイスが8個になります。
|
|
17
|
+
x: xに振るダイス数を入力。
|
|
18
|
+
y: yに耐性を入力。
|
|
19
|
+
例) 5DR3 5DRC4 5DRC+4
|
|
20
|
+
|
|
21
|
+
■ 回復ロール (xHRy)
|
|
22
|
+
xD6の回復ロール。クリティカルが発生しません。
|
|
23
|
+
x: xに振るダイス数を入力。
|
|
24
|
+
y: yに耐性を入力。省略した場合3。
|
|
25
|
+
例) 2HR 10HR2
|
|
26
|
+
|
|
27
|
+
■ 採取ロール (TC±z,SC±z,GC±z)
|
|
28
|
+
ちょっと(T)、そこそこ(S)、がっつり(G)採取採掘伐採を行う。
|
|
29
|
+
z: zに追加でロールする回数を入力。省略可能。
|
|
30
|
+
例) TC SC+1 GC-1
|
|
31
|
+
MESSAGETEXT
|
|
32
|
+
|
|
33
|
+
register_prefix('\d+SQ[\+\-\d]*', '\d+DR(C)?(\+)?\d+', '[TSG]C', '\d+HR\d*')
|
|
34
|
+
|
|
35
|
+
def eval_game_system_specific_command(command)
|
|
36
|
+
roll_sq(command) || damage_roll(command) || heal_roll(command) || collecting_roll(command)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
# 判定
|
|
42
|
+
def roll_sq(command)
|
|
43
|
+
m = /(\d+)SQ([\+\-\d]+)?/i.match(command)
|
|
44
|
+
return nil unless m
|
|
45
|
+
|
|
46
|
+
dice_count = m[1].to_i
|
|
47
|
+
modifier = ArithmeticEvaluator.eval(m[2])
|
|
48
|
+
|
|
49
|
+
dice_list = @randomizer.roll_barabara(dice_count, 6)
|
|
50
|
+
largest_two = dice_list.sort.reverse.take(2)
|
|
51
|
+
total = largest_two.sum + modifier
|
|
52
|
+
|
|
53
|
+
additional_result =
|
|
54
|
+
if largest_two == [6, 6]
|
|
55
|
+
" クリティカル!"
|
|
56
|
+
elsif largest_two == [1, 1]
|
|
57
|
+
" ファンブル!"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
sequence = [
|
|
61
|
+
"(#{command})",
|
|
62
|
+
"[#{dice_list.join(',')}]#{Format.modifier(modifier)}",
|
|
63
|
+
"#{total}[#{largest_two.join(',')}]#{additional_result}",
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
return sequence.join(" > ")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# ダメージロール
|
|
70
|
+
def damage_roll(command)
|
|
71
|
+
m = /(\d+)DR(C)?(\+)?(\d+)/i.match(command)
|
|
72
|
+
return nil unless m
|
|
73
|
+
|
|
74
|
+
dice_count = m[1].to_i
|
|
75
|
+
critical_up = !m[2].nil? # 強化効果 クリティカルアップ
|
|
76
|
+
increase_critical_dice = !m[3].nil?
|
|
77
|
+
resist = m[4].to_i
|
|
78
|
+
|
|
79
|
+
dice_list = @randomizer.roll_barabara(dice_count, 6)
|
|
80
|
+
|
|
81
|
+
result = "(#{command}) > [#{dice_list.join(',')}]#{resist} > #{damage(dice_list, resist)}ダメージ"
|
|
82
|
+
|
|
83
|
+
critical_target = critical_up ? 1 : 2
|
|
84
|
+
|
|
85
|
+
if dice_list.count(6) - dice_list.count(1) >= critical_target
|
|
86
|
+
result += " クリティカル!\n"
|
|
87
|
+
result += additional_damage_roll(increase_critical_dice, resist)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
return result
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def additional_damage_roll(increase_critical_dice, resist)
|
|
94
|
+
dice_count = increase_critical_dice ? 8 : 4
|
|
95
|
+
|
|
96
|
+
dice_list = @randomizer.roll_barabara(dice_count, 6)
|
|
97
|
+
"(#{dice_count}DR#{resist}) > [#{dice_list.join(',')}]#{resist} > #{damage(dice_list, resist)}ダメージ"
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# 回復ロール
|
|
101
|
+
def heal_roll(command)
|
|
102
|
+
m = /^(\d+)HR(\d+)?$/i.match(command)
|
|
103
|
+
return nil unless m
|
|
104
|
+
|
|
105
|
+
dice_count = m[1].to_i
|
|
106
|
+
resist = m[2]&.to_i || 3
|
|
107
|
+
|
|
108
|
+
dice_list = @randomizer.roll_barabara(dice_count, 6)
|
|
109
|
+
|
|
110
|
+
return "(#{command}) > [#{dice_list.join(',')}]#{resist} > #{damage(dice_list, resist)}回復"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def damage(dice_list, resist)
|
|
114
|
+
dice_list.count { |x| x > resist }
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# 採取ロール
|
|
118
|
+
def collecting_roll(command)
|
|
119
|
+
m = /([TSG])C([\+\-\d]+)?/i.match(command)
|
|
120
|
+
return nil unless m
|
|
121
|
+
|
|
122
|
+
type = m[1]
|
|
123
|
+
modifier = ArithmeticEvaluator.eval(m[2])
|
|
124
|
+
|
|
125
|
+
aatto_param =
|
|
126
|
+
case type
|
|
127
|
+
when "T"
|
|
128
|
+
3
|
|
129
|
+
when "S"
|
|
130
|
+
4
|
|
131
|
+
when "G"
|
|
132
|
+
5
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
roll_times = aatto_param - 2 + modifier
|
|
136
|
+
return nil if roll_times <= 0
|
|
137
|
+
|
|
138
|
+
results = Array.new(roll_times) do |i|
|
|
139
|
+
dice_list = @randomizer.roll_barabara(2, 6)
|
|
140
|
+
dice = dice_list.sum()
|
|
141
|
+
|
|
142
|
+
"(#{command}) > #{dice}[#{dice_list.join(',')}]: #{result_collecting(i, dice, aatto_param)}"
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
results.join("\n")
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def result_collecting(i, dice, aatto)
|
|
149
|
+
if (dice <= aatto) && (aatto - 2 > i)
|
|
150
|
+
"!ああっと!"
|
|
151
|
+
elsif aatto - 2 <= i
|
|
152
|
+
"成功(追加分)"
|
|
153
|
+
else
|
|
154
|
+
"成功"
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
@@ -51,7 +51,7 @@ module BCDice
|
|
|
51
51
|
public
|
|
52
52
|
|
|
53
53
|
def eval_game_system_specific_command(command)
|
|
54
|
-
return roll_tables(command, TABLES) || nechronica_check(command)
|
|
54
|
+
return roll_tables(command, self.class::TABLES) || nechronica_check(command)
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
private
|
|
@@ -60,17 +60,22 @@ module BCDice
|
|
|
60
60
|
return '' if target == '?'
|
|
61
61
|
return '' unless cmp_op == :>=
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
result =
|
|
64
|
+
if total >= 11
|
|
65
|
+
translate("Nechronica.critical")
|
|
66
|
+
elsif total >= target
|
|
67
|
+
translate("success")
|
|
68
|
+
elsif dice_list.count { |i| i <= 1 } == 0
|
|
69
|
+
translate("failure")
|
|
70
|
+
elsif dice_list.size > 1
|
|
71
|
+
fumble = translate("Nechronica.fumble")
|
|
72
|
+
break_all_parts = translate("Nechronica.break_all_parts")
|
|
73
|
+
"#{fumble} > #{break_all_parts}"
|
|
74
|
+
else
|
|
75
|
+
translate("Nechronica.fumble")
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
return " > #{result}"
|
|
74
79
|
end
|
|
75
80
|
|
|
76
81
|
def nechronica_check(string)
|
|
@@ -133,20 +138,13 @@ module BCDice
|
|
|
133
138
|
debug("getHitLocation dice", dice)
|
|
134
139
|
return output if dice <= 5
|
|
135
140
|
|
|
136
|
-
table =
|
|
137
|
-
'防御側任意',
|
|
138
|
-
'脚(なければ攻撃側任意)',
|
|
139
|
-
'胴(なければ攻撃側任意)',
|
|
140
|
-
'腕(なければ攻撃側任意)',
|
|
141
|
-
'頭(なければ攻撃側任意)',
|
|
142
|
-
'攻撃側任意',
|
|
143
|
-
]
|
|
141
|
+
table = translate("Nechronica.hit_location.table")
|
|
144
142
|
index = dice - 6
|
|
145
143
|
|
|
146
144
|
addDamage = ""
|
|
147
145
|
if dice > 10
|
|
148
146
|
index = 5
|
|
149
|
-
addDamage = "
|
|
147
|
+
addDamage = translate("Nechronica.hit_location.additional_damage", damage: dice - 10)
|
|
150
148
|
end
|
|
151
149
|
|
|
152
150
|
output = table[index] + addDamage
|
|
@@ -154,58 +152,21 @@ module BCDice
|
|
|
154
152
|
return output
|
|
155
153
|
end
|
|
156
154
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
]
|
|
173
|
-
),
|
|
174
|
-
'NMN' => DiceTable::Table.new(
|
|
175
|
-
'中立者への未練表',
|
|
176
|
-
'1D10',
|
|
177
|
-
[
|
|
178
|
-
'【忌避】[発狂:隔絶意識]あなたは未練の対象ないしサヴァントと同じエリアにいる間、「移動以外の効果を持つマニューバ」を宣言できない。また、「自身と未練の対象ないしサヴァント」以外を移動マニューバの対象にできない。',
|
|
179
|
-
'【嫉妬】[発狂:不協和音]全ての姉妹は行動判定に修正-1を受ける。',
|
|
180
|
-
'【依存】[発狂:幼児退行]最大行動値が減少する(-2)',
|
|
181
|
-
'【憐憫】[発狂:過情移入]あなたは「サヴァント」に対する攻撃判定の出目に修正-1を受ける。',
|
|
182
|
-
'【感謝】[発狂:病的返礼]発狂した際、あなたは任意の基本パーツ2つ(なければ最もレベルの低い強化パーツ1つ)を損傷する。',
|
|
183
|
-
'【悔恨】[発狂:自業自棄]あなたが失敗した攻撃判定は全て、あなた自身の任意の箇所にダメージを与える。',
|
|
184
|
-
'【期待】[発狂:希望転結]あなたは狂気点を追加して振り直しを行う際、出目に修正-1を受ける。(この効果は累積する)',
|
|
185
|
-
'【保護】[発狂:生前回帰]あなたは「レギオン」をマニューバの対象に選べない。',
|
|
186
|
-
'【尊敬】[発狂:神化崇拝]あなたは「他の姉妹」をマニューバの対象に選べない。',
|
|
187
|
-
'【信頼】[発狂:疑心暗鬼]あなた以外の全ての姉妹の最大行動値が減少する(-1)',
|
|
188
|
-
]
|
|
189
|
-
),
|
|
190
|
-
'NME' => DiceTable::Table.new(
|
|
191
|
-
'敵への未練表',
|
|
192
|
-
'1D10',
|
|
193
|
-
[
|
|
194
|
-
'【恐怖】[発狂:認識拒否]あなたは、行動判定・狂気判定の出目に修正-1を受ける。',
|
|
195
|
-
'【隷属】[発狂:造反有理]あなたが失敗した攻撃判定は全て、大失敗として扱う。',
|
|
196
|
-
'【不安】[発狂:挙動不審]最大行動値が減少する(-2)',
|
|
197
|
-
'【憐憫】[発狂:感情移入]あなたは「サヴァント」に対する攻撃判定の出目に修正-1を受ける。',
|
|
198
|
-
'【愛憎】[発狂:凶愛心中]あなたは狂気判定・攻撃判定で大成功するごとに[判定値-10]個の自身のパーツを選び、損傷させる。',
|
|
199
|
-
'【悔恨】[発狂:自業自棄]あなたが失敗した攻撃判定は全て、あなた自身の任意の箇所にダメージを与える。',
|
|
200
|
-
'【軽蔑】[発狂:眼中不在]同エリアの手駒があなたに対して行う攻撃判定の出目は修正+1を受ける。',
|
|
201
|
-
'【憤怒】[発狂:激情暴走]あなたは、攻撃判定・狂気判定の出目に修正-1を受ける。',
|
|
202
|
-
'【怨念】[発狂:不倶戴天]あなたは逃走判定ができない。あなたが「自身と未練の対象」以外を対象にしたマニューバを使用する際、行動値1点を追加で減らさなくてはいけない。',
|
|
203
|
-
'【憎悪】[発狂:痕跡破壊]この未練を発狂した際、あなた以外の姉妹から1人選ぶ。その姉妹は任意のパーツを2つ損傷する。',
|
|
204
|
-
]
|
|
205
|
-
)
|
|
206
|
-
}.freeze
|
|
207
|
-
|
|
208
|
-
register_prefix(['\d+NC.*', '\d+NA.*', '\d+R10.*'] + TABLES.keys)
|
|
155
|
+
class << self
|
|
156
|
+
private
|
|
157
|
+
|
|
158
|
+
def translate_tables(locale)
|
|
159
|
+
{
|
|
160
|
+
"NM" => DiceTable::Table.from_i18n("Nechronica.table.NM", locale),
|
|
161
|
+
"NMN" => DiceTable::Table.from_i18n("Nechronica.table.NMN", locale),
|
|
162
|
+
"NME" => DiceTable::Table.from_i18n("Nechronica.table.NME", locale),
|
|
163
|
+
}
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
TABLES = translate_tables(:ja_jp)
|
|
168
|
+
|
|
169
|
+
register_prefix('\d+NC.*', '\d+NA.*', '\d+R10.*', TABLES.keys)
|
|
209
170
|
end
|
|
210
171
|
end
|
|
211
172
|
end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "bcdice/game_system/Nechronica"
|
|
4
|
+
|
|
3
5
|
module BCDice
|
|
4
6
|
module GameSystem
|
|
5
|
-
class Nechronica_Korean <
|
|
7
|
+
class Nechronica_Korean < Nechronica
|
|
6
8
|
# ゲームシステムの識別子
|
|
7
9
|
ID = 'Nechronica:Korean'
|
|
8
10
|
|
|
@@ -20,141 +22,22 @@ module BCDice
|
|
|
20
22
|
・공격판정 (nNA+m)
|
|
21
23
|
주사위 수n、수정치m으로 공격판정굴림을 행합니다.
|
|
22
24
|
명중부위와 주사위 수가 2개 이상일 때에 파츠파손 수도 표시합니다.
|
|
25
|
+
|
|
26
|
+
表
|
|
27
|
+
・姉妹への未練表 nm
|
|
28
|
+
・中立者への未練表 nmn
|
|
29
|
+
・敵への未練表 nme
|
|
23
30
|
INFO_MESSAGE_TEXT
|
|
24
31
|
|
|
25
|
-
|
|
32
|
+
register_prefix_from_super_class()
|
|
26
33
|
|
|
27
34
|
def initialize(command)
|
|
28
35
|
super(command)
|
|
29
36
|
|
|
30
|
-
@
|
|
31
|
-
@sort_barabara_dice = true
|
|
32
|
-
@default_target_number = 6 # 목표치가 딱히 없을때의 난이도
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def replace_text(string)
|
|
36
|
-
string = string.gsub(/(\d+)NC(10)?([\+\-][\+\-\d]+)/i) { "#{Regexp.last_match(1)}R10#{Regexp.last_match(3)}[0]" }
|
|
37
|
-
string = string.gsub(/(\d+)NC(10)?/i) { "#{Regexp.last_match(1)}R10[0]" }
|
|
38
|
-
string = string.gsub(/(\d+)NA(10)?([\+\-][\+\-\d]+)/i) { "#{Regexp.last_match(1)}R10#{Regexp.last_match(3)}[1]" }
|
|
39
|
-
string = string.gsub(/(\d+)NA(10)?/i) { "#{Regexp.last_match(1)}R10[1]" }
|
|
40
|
-
|
|
41
|
-
return string
|
|
37
|
+
@locale = :ko_kr
|
|
42
38
|
end
|
|
43
39
|
|
|
44
|
-
|
|
45
|
-
return '' if target == '?'
|
|
46
|
-
return '' unless cmp_op == :>=
|
|
47
|
-
|
|
48
|
-
if total >= 11
|
|
49
|
-
" > 대성공"
|
|
50
|
-
elsif total >= target
|
|
51
|
-
" > 성공"
|
|
52
|
-
elsif dice_list.count { |i| i <= 1 } == 0
|
|
53
|
-
" > 실패"
|
|
54
|
-
elsif dice_list.size > 1
|
|
55
|
-
" > 대실패 > 사용파츠 전부 손실"
|
|
56
|
-
else
|
|
57
|
-
" > 대실패"
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def eval_game_system_specific_command(string)
|
|
62
|
-
string = replace_text(string)
|
|
63
|
-
|
|
64
|
-
debug("nechronica_check string", string)
|
|
65
|
-
|
|
66
|
-
unless /(^|\s)S?((\d+)[rR]10([\+\-\d]+)?(\[(\d+)\])?)(\s|$)/i =~ string
|
|
67
|
-
debug("nechronica_check unmuched")
|
|
68
|
-
return nil
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
string = Regexp.last_match(2)
|
|
72
|
-
|
|
73
|
-
dice_n = 1
|
|
74
|
-
dice_n = Regexp.last_match(3).to_i if Regexp.last_match(3)
|
|
75
|
-
|
|
76
|
-
battleMode = Regexp.last_match(6).to_i
|
|
77
|
-
|
|
78
|
-
modText = Regexp.last_match(4)
|
|
79
|
-
mod = ArithmeticEvaluator.eval(modText)
|
|
80
|
-
|
|
81
|
-
# 0=판정모드, 1=전투모드
|
|
82
|
-
isBattleMode = (battleMode == 1)
|
|
83
|
-
debug("nechronica_check string", string)
|
|
84
|
-
debug("isBattleMode", isBattleMode)
|
|
85
|
-
|
|
86
|
-
diff = 6
|
|
87
|
-
|
|
88
|
-
dice = @randomizer.roll_barabara(dice_n, 10).sort
|
|
89
|
-
n_max = dice.max
|
|
90
|
-
|
|
91
|
-
total_n = n_max + mod
|
|
92
|
-
|
|
93
|
-
output = "(#{string}) > [#{dice.join(',')}]"
|
|
94
|
-
if mod < 0
|
|
95
|
-
output += mod.to_s
|
|
96
|
-
elsif mod > 0
|
|
97
|
-
output += "+#{mod}"
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
n1 = 0
|
|
101
|
-
cnt_max = 0
|
|
102
|
-
|
|
103
|
-
dice.length.times do |i|
|
|
104
|
-
dice[i] += mod
|
|
105
|
-
n1 += 1 if dice[i] <= 1
|
|
106
|
-
cnt_max += 1 if dice[i] >= 10
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
dice_str = dice.join(",")
|
|
110
|
-
output += " > #{total_n}[#{dice_str}]"
|
|
111
|
-
|
|
112
|
-
dice_total = dice.inject(&:+)
|
|
113
|
-
output += check_nD10(total_n, dice_total, dice, :>=, diff)
|
|
114
|
-
|
|
115
|
-
debug("dice_n, n1, total_n diff", dice_n, n1, total_n, diff)
|
|
116
|
-
|
|
117
|
-
# β판의 실장
|
|
118
|
-
# if( (dice_n > 1) and (n1 >= 1) and (total_n <= diff) )
|
|
119
|
-
# output += " > 파손#{n1}"
|
|
120
|
-
# end
|
|
121
|
-
|
|
122
|
-
if isBattleMode
|
|
123
|
-
hit_loc = getHitLocation(total_n)
|
|
124
|
-
if hit_loc != '1'
|
|
125
|
-
output += " > #{hit_loc}"
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
return output
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
def getHitLocation(dice)
|
|
133
|
-
output = '1'
|
|
134
|
-
|
|
135
|
-
debug("getHitLocation dice", dice)
|
|
136
|
-
return output if dice <= 5
|
|
137
|
-
|
|
138
|
-
table = [
|
|
139
|
-
'방어측 임의',
|
|
140
|
-
'다리(없으면 공격측 임의)',
|
|
141
|
-
'몸통(없으면 공격측 임의)',
|
|
142
|
-
'팔(없으면 공격측 임의)',
|
|
143
|
-
'머리(없으면 공격측 임의)',
|
|
144
|
-
'공격측 임의',
|
|
145
|
-
]
|
|
146
|
-
index = dice - 6
|
|
147
|
-
|
|
148
|
-
addDamage = ""
|
|
149
|
-
if dice > 10
|
|
150
|
-
index = 5
|
|
151
|
-
addDamage = "(추가 데미지#{dice - 10})"
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
output = table[index] + addDamage
|
|
155
|
-
|
|
156
|
-
return output
|
|
157
|
-
end
|
|
40
|
+
TABLES = translate_tables(:ko_kr)
|
|
158
41
|
end
|
|
159
42
|
end
|
|
160
43
|
end
|