From 9173125b1b3d43161c33139dd02c431951b87d50 Mon Sep 17 00:00:00 2001 From: EATGamJaTang Date: Thu, 4 Sep 2025 13:51:12 +0900 Subject: [PATCH 1/3] Update Cthulhu7th_Korean.rb MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 韓国語版『クトゥルフの呼び声 第7版』のフルオート判定に、日本語版で実装されている d(難易度)、v(ボレー)機能を追加 Add the d (difficulty) and v (volley) features implemented in the Japanese version to the Korean version of Call of Cthulhu 7th Edition Full Auto roll. --- lib/bcdice/game_system/Cthulhu7th_Korean.rb | 122 +++++++++++++++----- 1 file changed, 92 insertions(+), 30 deletions(-) diff --git a/lib/bcdice/game_system/Cthulhu7th_Korean.rb b/lib/bcdice/game_system/Cthulhu7th_Korean.rb index d8c6a0e12..3fce8b407 100644 --- a/lib/bcdice/game_system/Cthulhu7th_Korean.rb +++ b/lib/bcdice/game_system/Cthulhu7th_Korean.rb @@ -17,23 +17,36 @@ class Cthulhu7th_Korean < Base ・판정 CC(x)<=(목표치)  x:보너스, 패널티 주사위:Bonus/Penalty Dice (2~-2). 생략 가능.  대실패:Fumble/실패:Failure/보통 성공:Regular success/ -  어려운 성공:Hard success/대단한 성공:Extreme success/ +  어려운 성공:Hard success/극단적 성공:Extreme success/  대성공:Critical success 을 자동판정. 예)CC<=30 CC(2)<=50 CC(-1)<=75 ・조합 판정 (CBR(x,y))  목표치 x 와 y 로 동시에 %판정을 한다. -  예)CBR(50,20) + 예)CBR(50,20) - ・연사(Full Auto)판정 FAR(w,x,y,z) -  w:탄수(1~100), x:기능 수치(1~100), y:고장 넘버 + ・연사(Full Auto)판정 FAR(w,x,y,z,d,v) + w:탄수(1~100) +  x:기능 수치(1~100) +  y:고장 넘버  z:보너스, 패널티 주사위(-2~2). 생략 가능. -  명중수와 관통수, 잔탄수만을 계산. 데미지는 계산하지 않습니다. +  d:지정 난이도에 도달하면 연사를 중단 (보통=r, 어려움=h, 극단적=e). 생략 가능. +  v:연발(Volley) 탄수 상한을 변경. 생략 가능. +  ※ 명중수/관통수/잔탄만 계산하며, 데미지는 계산하지 않습니다. 예)FAR(25,70,98) FAR(50,80,98,-1) + FAR(30,70,99,1,r) FAR(25,88,96,2,h,5) INFO_MESSAGE_TEXT register_prefix('CC', 'CBR', 'FAR') + # 대단한 성공 > 극단적 성공으로 용어 수정 + # 난이도 임계 상수 정의 추가 (일본 원본: FullAuto::BONUS_DICE_RANGE 와 같은 역할) + ROLL_FULL_AUTO_DIFFICULTY_THRESHOLD = { + "r" => 0, # 보통 성공 + "h" => 1, # 어려운 성공 + "e" => 2 # 극단적 성공 + }.freeze + def initialize(command) super(command) @@ -110,7 +123,7 @@ def getTotal(total_list, bonus_dice_count) def getCheckResultText(total, diff, fumbleable = false) if total <= diff return "대성공" if total == 1 - return "대단한 성공" if total <= (diff / 5) + return "극단적 성공" if total <= (diff / 5) return "어려운 성공" if total <= (diff / 2) return "보통 성공" @@ -142,7 +155,7 @@ def getCombineRoll(command) result_1 = getCheckResultText(total, diff_1) result_2 = getCheckResultText(total, diff_2) - successList = ["대성공", "대단한 성공", "어려운 성공", "보통성공"] + successList = ["대성공", "극단적 성공", "어려운 성공", "보통 성공"] succesCount = 0 succesCount += 1 if successList.include?(result_1) @@ -162,25 +175,43 @@ def getCombineRoll(command) end def getFullAutoResult(command) - return nil unless /^FAR\((-?\d+)(,(-?\d+))(,(-?\d+))(,(-?\d+))?\)/i =~ command - - bullet_count = Regexp.last_match(1).to_i - diff = Regexp.last_match(3).to_i - broken_number = Regexp.last_match(5).to_i - bonus_dice_count = (Regexp.last_match(7) || 0).to_i - + #return nil unless /^FAR\((-?\d+)(,(-?\d+))(,(-?\d+))(,(-?\d+))?\)/i =~ command + # FAR 인자 파싱을 일본판과 같은 6인자 형식으로 확장 + m = /^FAR\((-?\d+),(-?\d+),(-?\d+)(?:,(-?\d+)?)?(?:,(-?\w+)?)?(?:,(-?\d+)?)?\)$/i.match(command) + return nil unless m + + #bullet_count = Regexp.last_match(1).to_i + #diff = Regexp.last_match(3).to_i + #broken_number = Regexp.last_match(5).to_i + #bonus_dice_count = (Regexp.last_match(7) || 0).to_i + + bullet_count = m[1].to_i # w + diff = m[2].to_i # x + broken_number = m[3].to_i # y + bonus_dice_count = m[4].to_i # z + stop_count = m[5]&.downcase || "" # d + bullet_set_count_cap = m[6]&.to_i || (diff / 10) # v + output = "" # 최대(8번*(PC기능 수치 최대값/10))=72발밖에 쏠 수 없으니 상한 bullet_count_limit = 100 if bullet_count > bullet_count_limit - output += "\n탄약이 너무 많습니다. 장전된 탄약을 #{bullet_count_limit}개로 변경합니다.\n" + output += "\n탄약이 너무 많습니다. 장전된 탄약을 #{bullet_count_limit}발로 변경합니다.\n" bullet_count = bullet_count_limit end return "탄약은 1 이상입니다." if bullet_count <= 0 return "목표치는 1 이상입니다." if diff <= 0 + # 연발 상한은 (기능÷10(내림)) + if (bullet_set_count_cap > diff / 10) && !m[6].nil? + bullet_set_count_cap = diff / 10 + output += "연발 탄환 수 상한은 [기능÷10(내림)]발입니다. 그보다 높은 수를 지정할 수 없습니다. 연발 탄환 수를 #{bullet_set_count_cap}발로 변경합니다.\n" + end + + return "연발 탄환 수는 1 이상이어야 합니다." if (bullet_set_count_cap <= 0) && !m[6].nil? + if broken_number < 0 output += "\n고장 넘버는 1 이상입니다. 마이너스 기호를 제거합니다.\n" broken_number = broken_number.abs @@ -191,12 +222,15 @@ def getFullAutoResult(command) end output += "보너스, 패널티 주사위 [#{bonus_dice_count}]" - output += rollFullAuto(bullet_count, diff, broken_number, bonus_dice_count) - + #output += rollFullAuto(bullet_count, diff, broken_number, bonus_dice_count) + # d, v 추가 + output += rollFullAuto(bullet_count, diff, broken_number, bonus_dice_count, stop_count, bullet_set_count_cap) + return output end - def rollFullAuto(bullet_count, diff, broken_number, dice_num) + # stop_count, bullet_set_count_cap 추가 + def rollFullAuto(bullet_count, diff, broken_number, dice_num, stop_count, bullet_set_count_cap) output = "" loopCount = 0 @@ -223,7 +257,9 @@ def rollFullAuto(bullet_count, diff, broken_number, dice_num) end hit_type = getHitType(more_difficlty, hit_result) - hit_bullet, impale_bullet, lost_bullet = getBulletResults(counts[:bullet], hit_type, diff) + #hit_bullet, impale_bullet, lost_bullet = getBulletResults(counts[:bullet], hit_type, diff) + # v 반영 + hit_bullet, impale_bullet, lost_bullet = getBulletResults(counts[:bullet], hit_type, diff, bullet_set_count_cap) counts[:hit_bullet] += hit_bullet counts[:impale_bullet] += impale_bullet @@ -234,12 +270,24 @@ def rollFullAuto(bullet_count, diff, broken_number, dice_num) dice_num -= 1 end + # d(지정 난이도) 도달 시 연사 중단 + if shouldStopRollFullAuto?(stop_count, more_difficlty) + output += "\n지정 난이도에 도달하여 처리를 종료합니다." + break + end + dice_num += 1 end return getHitResultText(output, counts) end + # 일본판과 동일하게 d(난이도) 임계 도달 시 중단 + def shouldStopRollFullAuto?(stop_count, difficulty) + threshold = ROLL_FULL_AUTO_DIFFICULTY_THRESHOLD[stop_count] + return threshold && difficulty >= threshold + end + def getHitResultInfos(dice_num, diff, more_difficlty) units_digit = rollPercentD10 total_list = getTotalLists(dice_num, units_digit) @@ -264,8 +312,12 @@ def getHitType(more_difficlty, hit_result) return "" end - def getBulletResults(bullet_count, hit_type, diff) - bullet_set_count = getSetOfBullet(diff) + # bullet_set_count_cap 추가 + def getBulletResults(bullet_count, hit_type, diff, bullet_set_count_cap) + #bullet_set_count = getSetOfBullet(diff) + # 반영된 연발 계산 + bullet_set_count = getSetOfBullet(diff, bullet_set_count_cap) + hit_bullet_count_base = getHitBulletCountBase(diff, bullet_set_count) impale_bullet_count_base = (bullet_set_count / 2.to_f) @@ -293,10 +345,14 @@ def getBulletResults(bullet_count, hit_type, diff) hit_bullet_count = getLastHitBulletCount(bullet_count) when :impale - halfbull = bullet_count / 2.to_f - - hit_bullet_count = halfbull.floor - impale_bullet_count = halfbull.ceil + #halfbull = bullet_count / 2.to_f + #hit_bullet_count = halfbull.floor + #impale_bullet_count = halfbull.ceil + + # 일본판과 동일하게 수정 + imp = getLastHitBulletCount(bullet_count) # 관통 수 + hit_bullet_count = bullet_count - imp # 나머지는 명중 + impale_bullet_count = imp end lost_bullet_count = bullet_count @@ -312,13 +368,13 @@ def getSuccessListImpaleBulletList(more_difficlty) case more_difficlty when 0 successList = ["어려운 성공", "보통 성공"] - impaleBulletList = ["대성공", "대단한 성공"] + impaleBulletList = ["대성공", "극단적 성공"] when 1 successList = ["어려운 성공"] - impaleBulletList = ["대성공", "대단한 성공"] + impaleBulletList = ["대성공", "극단적 성공"] when 2 successList = [] - impaleBulletList = ["대성공", "대단한 성공"] + impaleBulletList = ["대성공", "극단적 성공"] when 3 successList = ["대성공"] impaleBulletList = [] @@ -332,7 +388,7 @@ def getNextDifficltyMessage(more_difficlty) when 1 return "\n 난이도가 어려운 성공으로 변경" when 2 - return "\n 난이도가 대단한 성공으로 변경" + return "\n 난이도가 극단적 성공으로 변경" when 3 return "\n 난이도가 대성공으로 변경" end @@ -340,9 +396,15 @@ def getNextDifficltyMessage(more_difficlty) return "" end - def getSetOfBullet(diff) + # bullet_set_count_cap 추가 + def getSetOfBullet(diff, bullet_set_count_cap) bullet_set_count = diff / 10 + # v(상한) 추가, 지정 상한이 기본값보다 작으면 상한으로 덮어쓰기 + if bullet_set_count_cap && bullet_set_count_cap > 0 && bullet_set_count_cap < bullet_set_count + bullet_set_count = bullet_set_count_cap + end + if (diff >= 1) && (diff < 10) bullet_set_count = 1 # 기능 수치가 9 이하일 때의 최저수치 보장 처리 end From cdcbe172f8be2e17c17f2b4d222315b09358af69 Mon Sep 17 00:00:00 2001 From: EATGamJaTang Date: Fri, 12 Sep 2025 11:46:28 +0900 Subject: [PATCH 2/3] Update Cthulhu7th_Korean.rb --- lib/bcdice/game_system/Cthulhu7th_Korean.rb | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/lib/bcdice/game_system/Cthulhu7th_Korean.rb b/lib/bcdice/game_system/Cthulhu7th_Korean.rb index 3fce8b407..a2b00f413 100644 --- a/lib/bcdice/game_system/Cthulhu7th_Korean.rb +++ b/lib/bcdice/game_system/Cthulhu7th_Korean.rb @@ -175,15 +175,9 @@ def getCombineRoll(command) end def getFullAutoResult(command) - #return nil unless /^FAR\((-?\d+)(,(-?\d+))(,(-?\d+))(,(-?\d+))?\)/i =~ command # FAR 인자 파싱을 일본판과 같은 6인자 형식으로 확장 m = /^FAR\((-?\d+),(-?\d+),(-?\d+)(?:,(-?\d+)?)?(?:,(-?\w+)?)?(?:,(-?\d+)?)?\)$/i.match(command) return nil unless m - - #bullet_count = Regexp.last_match(1).to_i - #diff = Regexp.last_match(3).to_i - #broken_number = Regexp.last_match(5).to_i - #bonus_dice_count = (Regexp.last_match(7) || 0).to_i bullet_count = m[1].to_i # w diff = m[2].to_i # x @@ -257,7 +251,6 @@ def rollFullAuto(bullet_count, diff, broken_number, dice_num, stop_count, bullet end hit_type = getHitType(more_difficlty, hit_result) - #hit_bullet, impale_bullet, lost_bullet = getBulletResults(counts[:bullet], hit_type, diff) # v 반영 hit_bullet, impale_bullet, lost_bullet = getBulletResults(counts[:bullet], hit_type, diff, bullet_set_count_cap) @@ -314,7 +307,6 @@ def getHitType(more_difficlty, hit_result) # bullet_set_count_cap 추가 def getBulletResults(bullet_count, hit_type, diff, bullet_set_count_cap) - #bullet_set_count = getSetOfBullet(diff) # 반영된 연발 계산 bullet_set_count = getSetOfBullet(diff, bullet_set_count_cap) @@ -344,11 +336,7 @@ def getBulletResults(bullet_count, hit_type, diff, bullet_set_count_cap) when :hit hit_bullet_count = getLastHitBulletCount(bullet_count) - when :impale - #halfbull = bullet_count / 2.to_f - #hit_bullet_count = halfbull.floor - #impale_bullet_count = halfbull.ceil - + when :impale # 일본판과 동일하게 수정 imp = getLastHitBulletCount(bullet_count) # 관통 수 hit_bullet_count = bullet_count - imp # 나머지는 명중 From 1799930a1ba0349d18ab961f1c3be80952dea345 Mon Sep 17 00:00:00 2001 From: EATGamJaTang Date: Fri, 12 Sep 2025 11:52:20 +0900 Subject: [PATCH 3/3] Update Cthulhu7th_Korean.toml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Conform to locale/dotted game_system IDs; add Full Auto d/v cases; update expected strings (“극단적 성공”, “100발”). 他言語・小数点付きの game_system ID に準拠、フルオートの d/v 追加、期待文言を調整(「극단적 성공」「100발」)。 --- test/data/Cthulhu7th_Korean.toml | 51 +++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/test/data/Cthulhu7th_Korean.toml b/test/data/Cthulhu7th_Korean.toml index 74e617f1d..f4bb26c45 100644 --- a/test/data/Cthulhu7th_Korean.toml +++ b/test/data/Cthulhu7th_Korean.toml @@ -25,7 +25,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "CBR(70,69) " -output = "(1d100<=70,69) > 14[대단한 성공,어려운 성공] > 성공" +output = "(1d100<=70,69) > 14[극단적 성공,어려운 성공] > 성공" rands = [ { sides = 100, value = 14 }, ] @@ -57,7 +57,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "CBR(25,1) " -output = "(1d100<=25,1) > 5[대단한 성공,실패] > 부분적 성공" +output = "(1d100<=25,1) > 5[극단적 성공,실패] > 부분적 성공" rands = [ { sides = 100, value = 5 }, ] @@ -194,7 +194,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "CC(2)<=73" -output = "(1D100<=73) 보너스, 패널티 주사위[2] > 24, 14, 54 > 14 > 대단한 성공" +output = "(1D100<=73) 보너스, 패널티 주사위[2] > 24, 14, 54 > 14 > 극단적 성공" rands = [ { sides = 10, value = 4 }, { sides = 10, value = 2 }, @@ -302,7 +302,7 @@ rands = [] [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(30,62,98)" -output = "보너스, 패널티 주사위 [0]\n1번째: > 52 > 보통 성공\n2번째: > 11, 81 > 실패\n3번째: > 2, 2, 2 > 대단한 성공\n 난이도가 어려운 성공으로 변경\n4번째: > 98, 88, 78 > 대실패 총알 걸림\n> 6발이 명중, 3발이 관통, 잔탄 12발" +output = "보너스, 패널티 주사위 [0]\n1번째: > 52 > 보통 성공\n2번째: > 11, 81 > 실패\n3번째: > 2, 2, 2 > 극단적 성공\n 난이도가 어려운 성공으로 변경\n4번째: > 98, 88, 78 > 대실패 총알 걸림\n> 6발이 명중, 3발이 관통, 잔탄 12발" rands = [ { sides = 10, value = 2 }, { sides = 10, value = 5 }, @@ -322,7 +322,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(30,62,98,-1)" -output = "보너스, 패널티 주사위 [-1]\n1번째: > 11, 81 > 실패\n2번째: > 2, 2, 2 > 대단한 성공\n 난이도가 어려운 성공으로 변경\n3번째: > 98, 88, 78 > 대실패 총알 걸림\n> 3발이 명중, 3발이 관통, 잔탄 18발" +output = "보너스, 패널티 주사위 [-1]\n1번째: > 11, 81 > 실패\n2번째: > 2, 2, 2 > 극단적 성공\n 난이도가 어려운 성공으로 변경\n3번째: > 98, 88, 78 > 대실패 총알 걸림\n> 3발이 명중, 3발이 관통, 잔탄 18발" rands = [ { sides = 10, value = 1 }, { sides = 10, value = 1 }, @@ -340,7 +340,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(30,62,98,-2)" -output = "보너스, 패널티 주사위 [-2]\n1번째: > 2, 2, 2 > 대단한 성공\n 난이도가 어려운 성공으로 변경\n2번째: > 98, 88, 78 > 대실패 총알 걸림\n> 3발이 명중, 3발이 관통, 잔탄 24발" +output = "보너스, 패널티 주사위 [-2]\n1번째: > 2, 2, 2 > 극단적 성공\n 난이도가 어려운 성공으로 변경\n2번째: > 98, 88, 78 > 대실패 총알 걸림\n> 3발이 명중, 3발이 관통, 잔탄 24발" rands = [ { sides = 10, value = 2 }, { sides = 10, value = 10 }, @@ -367,7 +367,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(30,14,98)" -output = "보너스, 패널티 주사위 [0]\n1번째: > 2 > 대단한 성공\n2번째: > 98, 88 > 대실패 총알 걸림\n> 0발이 명중, 1발이 관통, 잔탄 29발" +output = "보너스, 패널티 주사위 [0]\n1번째: > 2 > 극단적 성공\n2번째: > 98, 88 > 대실패 총알 걸림\n> 0발이 명중, 1발이 관통, 잔탄 29발" rands = [ { sides = 10, value = 2 }, { sides = 10, value = 10 }, @@ -391,7 +391,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(7,80,98)" -output = "보너스, 패널티 주사위 [0]\n1번째: > 10 > 대단한 성공\n> 3발이 명중, 4발이 관통, 잔탄 0발" +output = "보너스, 패널티 주사위 [0]\n1번째: > 10 > 극단적 성공\n> 3발이 명중, 4발이 관통, 잔탄 0발" rands = [ { sides = 10, value = 10 }, { sides = 10, value = 1 }, @@ -427,7 +427,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(1,80,98)" -output = "보너스, 패널티 주사위 [0]\n1번째: > 5 > 대단한 성공\n> 0발이 명중, 1발이 관통, 잔탄 0발" +output = "보너스, 패널티 주사위 [0]\n1번째: > 5 > 극단적 성공\n> 0발이 명중, 1발이 관통, 잔탄 0발" rands = [ { sides = 10, value = 5 }, { sides = 10, value = 10 }, @@ -475,7 +475,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(40,82,97,1)" -output = "보너스, 패널티 주사위 [1]\n1번째: > 52, 22 > 어려운 성공\n2번째: > 1 > 대성공\n3번째: > 15, 85 > 실패\n4번째: > 3, 13, 3 > 대단한 성공\n 난이도가 어려운 성공으로 변경\n5번째: > 98, 88, 78 > 대실패 총알 걸림\n> 12발이 명중, 8발이 관통, 잔탄 8발" +output = "보너스, 패널티 주사위 [1]\n1번째: > 52, 22 > 어려운 성공\n2번째: > 1 > 대성공\n3번째: > 15, 85 > 실패\n4번째: > 3, 13, 3 > 극단적 성공\n 난이도가 어려운 성공으로 변경\n5번째: > 98, 88, 78 > 대실패 총알 걸림\n> 12발이 명중, 8발이 관통, 잔탄 8발" rands = [ { sides = 10, value = 2 }, { sides = 10, value = 5 }, @@ -544,7 +544,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(72,82,97,2)" -output = "보너스, 패널티 주사위 [2]\n1번째: > 61, 71, 21 > 어려운 성공\n2번째: > 80, 70 > 보통 성공\n3번째: > 65 > 보통 성공\n4번째: > 15, 85 > 실패\n5번째: > 44, 14, 74 > 보통 성공\n 난이도가 어려운 성공으로 변경\n6번째: > 28, 88, 78 > 실패\n 난이도가 대단한 성공으로 변경\n7번째: > 83, 33, 33 > 실패\n 난이도가 대성공으로 변경\n8번째: > 68, 48, 68 > 보통 성공\n> 16발이 명중, 0발이 관통, 잔탄 8발" +output = "보너스, 패널티 주사위 [2]\n1번째: > 61, 71, 21 > 어려운 성공\n2번째: > 80, 70 > 보통 성공\n3번째: > 65 > 보통 성공\n4번째: > 15, 85 > 실패\n5번째: > 44, 14, 74 > 보통 성공\n 난이도가 어려운 성공으로 변경\n6번째: > 28, 88, 78 > 실패\n 난이도가 극단적 성공으로 변경\n7번째: > 83, 33, 33 > 실패\n 난이도가 대성공으로 변경\n8번째: > 68, 48, 68 > 보통 성공\n> 16발이 명중, 0발이 관통, 잔탄 8발" rands = [ { sides = 10, value = 1 }, { sides = 10, value = 6 }, @@ -579,7 +579,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(72,82,97,2)" -output = "보너스, 패널티 주사위 [2]\n1번째: > 61, 71, 21 > 어려운 성공\n2번째: > 90, 70 > 보통 성공\n3번째: > 65 > 보통 성공\n4번째: > 15, 95 > 실패\n5번째: > 44, 14, 74 > 보통 성공\n 난이도가 어려운 성공으로 변경\n6번째: > 58, 68, 78 > 보통 성공\n 난이도가 대단한 성공으로 변경\n7번째: > 23, 33, 23 > 어려운 성공\n 난이도가 대성공으로 변경\n8번째: > 16, 6, 16 > 대단한 성공\n> 16발이 명중, 0발이 관통, 잔탄 8발" +output = "보너스, 패널티 주사위 [2]\n1번째: > 61, 71, 21 > 어려운 성공\n2번째: > 90, 70 > 보통 성공\n3번째: > 65 > 보통 성공\n4번째: > 15, 95 > 실패\n5번째: > 44, 14, 74 > 보통 성공\n 난이도가 어려운 성공으로 변경\n6번째: > 58, 68, 78 > 보통 성공\n 난이도가 극단적 성공으로 변경\n7번째: > 23, 33, 23 > 어려운 성공\n 난이도가 대성공으로 변경\n8번째: > 16, 6, 16 > 극단적 성공\n> 16발이 명중, 0발이 관통, 잔탄 8발" rands = [ { sides = 10, value = 1 }, { sides = 10, value = 6 }, @@ -614,7 +614,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(72,82,97,2)" -output = "보너스, 패널티 주사위 [2]\n1번째: > 61, 71, 21 > 어려운 성공\n2번째: > 90, 70 > 보통 성공\n3번째: > 65 > 보통 성공\n4번째: > 15, 95 > 실패\n5번째: > 44, 14, 74 > 보통 성공\n 난이도가 어려운 성공으로 변경\n6번째: > 28, 38, 18 > 어려운 성공\n 난이도가 대단한 성공으로 변경\n7번째: > 13, 3, 13 > 대단한 성공\n 난이도가 대성공으로 변경\n8번째: > 1, 1, 1 > 대성공\n> 28발이 명중, 4발이 관통, 잔탄 8발" +output = "보너스, 패널티 주사위 [2]\n1번째: > 61, 71, 21 > 어려운 성공\n2번째: > 90, 70 > 보통 성공\n3번째: > 65 > 보통 성공\n4번째: > 15, 95 > 실패\n5번째: > 44, 14, 74 > 보통 성공\n 난이도가 어려운 성공으로 변경\n6번째: > 28, 38, 18 > 어려운 성공\n 난이도가 극단적 성공으로 변경\n7번째: > 13, 3, 13 > 극단적 성공\n 난이도가 대성공으로 변경\n8번째: > 1, 1, 1 > 대성공\n> 28발이 명중, 4발이 관통, 잔탄 8발" rands = [ { sides = 10, value = 1 }, { sides = 10, value = 6 }, @@ -649,7 +649,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(120,82,97,-2)" -output = "\n탄약이 너무 많습니다. 장전된 탄약을 100개로 변경합니다.\n보너스, 패널티 주사위 [-2]\n1번째: > 60, 100, 20 > 대실패 총알 걸림\n> 0발이 명중, 0발이 관통, 잔탄 100발" +output = "\n탄약이 너무 많습니다. 장전된 탄약을 100발로 변경합니다.\n보너스, 패널티 주사위 [-2]\n1번째: > 60, 100, 20 > 대실패 총알 걸림\n> 0발이 명중, 0발이 관통, 잔탄 100발" rands = [ { sides = 10, value = 10 }, { sides = 10, value = 6 }, @@ -682,7 +682,7 @@ rands = [] [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(1,98,5) 故障ナンバーが極端に低いありえない場合の処理" -output = "보너스, 패널티 주사위 [0]\n1번째: > 8 > 대단한 성공 총알 걸림\n> 0발이 명중, 0발이 관통, 잔탄 1발" +output = "보너스, 패널티 주사위 [0]\n1번째: > 8 > 극단적 성공 총알 걸림\n> 0발이 명중, 0발이 관통, 잔탄 1발" rands = [ { sides = 10, value = 8 }, { sides = 10, value = 10 }, @@ -691,7 +691,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(3,98,5) 故障ナンバーが極端に低いありえない場合の処理" -output = "보너스, 패널티 주사위 [0]\n1번째: > 8 > 대단한 성공 총알 걸림\n> 0발이 명중, 0발이 관통, 잔탄 3발" +output = "보너스, 패널티 주사위 [0]\n1번째: > 8 > 극단적 성공 총알 걸림\n> 0발이 명중, 0발이 관통, 잔탄 3발" rands = [ { sides = 10, value = 8 }, { sides = 10, value = 10 }, @@ -736,7 +736,7 @@ rands = [ [[ test ]] game_system = "Cthulhu7th:Korean" input = "FAR(1,99,-98) 故障ナンバーにマイナスがついている場合、絶対値を付ける処理の確認" -output = "\n고장 넘버는 1 이상입니다. 마이너스 기호를 제거합니다.\n보너스, 패널티 주사위 [0]\n1번째: > 8 > 대단한 성공\n> 0발이 명중, 1발이 관통, 잔탄 0발" +output = "\n고장 넘버는 1 이상입니다. 마이너스 기호를 제거합니다.\n보너스, 패널티 주사위 [0]\n1번째: > 8 > 극단적 성공\n> 0발이 명중, 1발이 관통, 잔탄 0발" rands = [ { sides = 10, value = 8 }, { sides = 10, value = 10 }, @@ -759,3 +759,20 @@ game_system = "Cthulhu7th:Korean" input = "FAR(1,99,98,3) ボーナスダイス異常パターン" output = "\n에러. 보너스, 패널티 주사위의 수치는 -2~2입니다." rands = [] + +[[ test ]] +game_system = "Cthulhu7th:Korean" +# v(연발 상한) 0 지정 → 하한 에러 +input = "FAR(30,70,98,0,,0) ボレー弾数上限(v)が0の異常パターン。" +output = "연발 탄환 수는 1 이상이어야 합니다." +rands = [] + +[[ test ]] +game_system = "Cthulhu7th:Korean" +# d=r(보통 성공 도달 시 중단) + v=1(1발만 처리) / 결과를 고정하기 위해 50이 나오게 난수 고정 +input = "FAR(30,62,98,0,r,1) d=r 到達で連射停止 / v=1 固定(判定50を出すため乱数固定)" +output = "보너스, 패널티 주사위 [0]\n1번째: > 50 > 보통 성공\n지정 난이도에 도달하여 처리를 종료합니다.\n> 1발이 명중, 0발이 관통, 잔탄 29발" +rands = [ + { sides = 10, value = 10 }, # 일의 자리 0 + { sides = 10, value = 5 }, # 십의 자리 5 → 50 +]