From 0a040837d9df12dc064591f64b9de69af476ca7f Mon Sep 17 00:00:00 2001 From: gahusb Date: Wed, 1 Jul 2026 22:36:49 +0900 Subject: [PATCH] feat(rogue): balance cards and campaign progression --- RootDesk/MyDesk/SlayDeckController.codeblock | 8 +- data/cards.json | 342 +++++++------------ data/cards.xlsx | Bin 21934 -> 21303 bytes docs/attack-poison.md | 13 +- docs/bandit-card-audit.md | 62 +++- tools/balance/card-efficiency.mjs | 246 +++++++++++++ tools/balance/card-efficiency.test.mjs | 30 ++ tools/balance/rogue-campaign.mjs | 314 +++++++++++++++++ tools/balance/rogue-campaign.test.mjs | 28 ++ tools/balance/sim-balance.mjs | 74 +++- tools/balance/sim-balance.test.mjs | 23 ++ tools/deck/cb/run.mjs | 5 +- tools/deck/lib/codeblock.mjs | 3 +- tools/deck/lib/data.mjs | 8 +- 14 files changed, 911 insertions(+), 245 deletions(-) create mode 100644 tools/balance/card-efficiency.mjs create mode 100644 tools/balance/card-efficiency.test.mjs create mode 100644 tools/balance/rogue-campaign.mjs create mode 100644 tools/balance/rogue-campaign.test.mjs diff --git a/RootDesk/MyDesk/SlayDeckController.codeblock b/RootDesk/MyDesk/SlayDeckController.codeblock index 3d77bbb..6d9d559 100644 --- a/RootDesk/MyDesk/SlayDeckController.codeblock +++ b/RootDesk/MyDesk/SlayDeckController.codeblock @@ -1069,7 +1069,7 @@ "Name": null }, "Arguments": [], - "Code": "self.Cards = {\n\tStrike = { name = \"파워 스트라이크\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tDefend = { name = \"아이언 바디\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tBash = { name = \"슬래시 블러스트\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10, class = \"warrior\", rarity = \"normal\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tWarLeap = { name = \"워 리프\", cost = 1, desc = \"피해 4, 방어도 3\", kind = \"Attack\", damage = 4, block = 3, class = \"warrior\", rarity = \"normal\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBrandish = { name = \"브랜디시\", cost = 2, desc = \"피해 13\", kind = \"Attack\", damage = 13, class = \"warrior\", rarity = \"unique\", fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tChargedBlow = { name = \"차지 블로우\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, firstCardDamageBonus = 2, vuln = 2, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tThreaten = { name = \"위협\", cost = 0, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"warrior\", rarity = \"normal\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEnrage = { name = \"인레이지\", cost = 1, desc = \"힘 +2\", kind = \"Skill\", strength = 2, class = \"warrior\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tRage = { name = \"분노\", cost = 1, desc = \"모든 적에게 피해를 4 줍니다.\", kind = \"Attack\", damage = 4, class = \"warrior\", rarity = \"legend\", aoe = true, image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 1, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBerserk = { name = \"버서크\", cost = 2, desc = \"매턴 에너지 +1, 취약 1 자가\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"fighter\", rarity = \"legend\", selfVuln = 1, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tRisingAttack = { name = \"라이징 어택\", cost = 2, desc = \"피해 12\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"115e309771604743853abad2d8d186bc\" },\n\tThunderCharge = { name = \"썬더 차지\", cost = 1, desc = \"피해 7, 약화 1\", kind = \"Attack\", damage = 7, weak = 1, class = \"page\", rarity = \"unique\", fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tBlizzardCharge = { name = \"블리자드 차지\", cost = 1, desc = \"피해 7, 취약 1\", kind = \"Attack\", damage = 7, vuln = 1, class = \"page\", rarity = \"unique\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tPowerGuard = { name = \"파워 가드\", cost = 1, desc = \"방어도 10\", kind = \"Skill\", block = 10, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPierce = { name = \"피어스\", cost = 1, desc = \"피해 9, 방어 무시\", kind = \"Attack\", damage = 9, class = \"spearman\", rarity = \"unique\", pierce = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tIronWall = { name = \"아이언 월\", cost = 2, desc = \"방어도 12\", kind = \"Skill\", block = 12, class = \"spearman\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHyperBody = { name = \"하이퍼 바디\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"spearman\", rarity = \"legend\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tEnergyBolt = { name = \"에너지 볼트\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"magician\", rarity = \"normal\", fx = \"1d5877e1120a42d0907f204c959888b1\", image = \"e84880eaf89442128d3af2be5c80a74f\" },\n\tMagicGuard = { name = \"매직 가드\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"magician\", rarity = \"normal\", image = \"01b249c26eb34b8aaab774bf221907a1\" },\n\tMagicClaw = { name = \"매직 클로\", cost = 1, desc = \"피해 3 × 2회\", kind = \"Attack\", damage = 3, class = \"magician\", rarity = \"normal\", hits = 2, fx = \"ba4ac7c8f24845b68b7e689b7effcc93\", image = \"f3fcac2d460041b288cc1973caaaf30f\" },\n\tTeleport = { name = \"텔레포트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"magician\", rarity = \"normal\", discardAll = true, drawPerDiscarded = 1, image = \"7f70a9dc7e304433bb8121dd9c4df98b\" },\n\tSlow = { name = \"슬로우\", cost = 1, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"magician\", rarity = \"normal\", image = \"7224cd3f9b7e497d9dd65f32a50865e4\" },\n\tFireArrow = { name = \"파이어 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"firepoison\", rarity = \"unique\", fx = \"4a937e208875468eb63d891806fba3cd\", image = \"6fa15fd3a0004b409ea516c11a67e533\" },\n\tPoisonBreath = { name = \"포이즌 브레스\", cost = 1, desc = \"독 4 부여\", kind = \"Skill\", class = \"firepoison\", rarity = \"unique\", poison = 4, image = \"07200f3c74854022baa7ebbefdc4ad8c\" },\n\tElementAmp = { name = \"엘레멘트 앰플\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"firepoison\", rarity = \"legend\", image = \"06865473977849bebe79062dbd608944\" },\n\tThunderBolt = { name = \"썬더 볼트\", cost = 2, desc = \"모든 적에게 피해 6\", kind = \"Attack\", damage = 6, class = \"icelightning\", rarity = \"legend\", aoe = true, fx = \"7d52f5e389bd4d44a30cf7cc54538f8f\", image = \"c6685d33cb2641f09d11cfa2d5cc820c\" },\n\tColdBeam = { name = \"콜드 빔\", cost = 2, desc = \"피해 7, 약화 2\", kind = \"Attack\", damage = 7, weak = 2, class = \"icelightning\", rarity = \"unique\", image = \"e8f7c148c79f497d83014e3361f59f5c\" },\n\tChillingStep = { name = \"칠링 스텝\", cost = 1, desc = \"방어도 8\", kind = \"Skill\", block = 8, class = \"icelightning\", rarity = \"unique\", image = \"bef20873a68a4651a91d74be457c2cfc\" },\n\tHeal = { name = \"힐\", cost = 1, desc = \"HP 10 회복\", kind = \"Skill\", class = \"cleric\", rarity = \"unique\", heal = 10, image = \"8b935b7d7066493cb462834bbe287c74\" },\n\tBless = { name = \"블레스\", cost = 1, desc = \"힘 +1, 방어도 5\", kind = \"Skill\", block = 5, strength = 1, class = \"cleric\", rarity = \"unique\", image = \"607fc5457c1c44a0993a5c2fe3fb0c68\" },\n\tHolyArrow = { name = \"홀리 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"cleric\", rarity = \"unique\", fx = \"4faa7b78e09643cf86339b8b7cf2abac\", image = \"a80127195bf7471f9545b70e491f4719\" },\n\tWound = { name = \"상처\", cost = 0, desc = \"사용할 수 없다. 손패를 막는 저주.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true },\n\tBurn = { name = \"화상\", cost = 0, desc = \"사용 불가. 손패에 있으면 턴 종료 시 피해 2.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true, endTurnDamage = 2 },\n\tNeutralize = { name = \"무력화\", cost = 0, desc = \"피해를 3 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 3, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSilentStrike = { name = \"타격\", cost = 1, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tSurvivor = { name = \"생존자\", cost = 1, desc = \"방어도를 8 얻습니다. 카드를 1장 버립니다.\", kind = \"Skill\", block = 8, class = \"rogue\", rarity = \"normal\", discard = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSilentDefend = { name = \"수비\", cost = 1, desc = \"방어도를 5 얻습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDoubleStab = { name = \"더블 스탭\", cost = 1, desc = \"피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tLuckySeven = { name = \"럭키 세븐\", cost = 1, desc = \"피해를 3만큼 3번 줍니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"unique\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHaste = { name = \"헤이스트\", cost = 1, desc = \"카드를 1장 뽑습니다. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", draw = 1, gainEnergy = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDarkSight = { name = \"다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"rogue\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tFlashJump = { name = \"플래시 점프\", cost = 0, desc = \"방어도를 4 얻습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", draw = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNimbleBody = { name = \"님블 바디\", cost = 1, desc = \"민첩을 1 얻습니다. 매 턴 방어도를 2 얻습니다.\", kind = \"Power\", dex = 1, powerEffect = \"blockPerTurn\", value = 2, class = \"rogue\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSlice = { name = \"칼질\", cost = 0, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShiv = { name = \"표창\", cost = 0, desc = \"피해를 4 줍니다. 소멸.\", kind = \"Attack\", damage = 4, class = \"shiv\", rarity = \"normal\", exhaust = true, token = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerSpray = { name = \"단검 분사\", cost = 1, desc = \"모든 적에게 피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", hits = 2, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerThrow = { name = \"단검 투척\", cost = 1, desc = \"피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Attack\", damage = 9, class = \"rogue\", rarity = \"normal\", drawUntilHandSize = 6, discard = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPoisonedStab = { name = \"독 찌르기\", cost = 1, desc = \"피해를 6 줍니다. 중독을 3 부여합니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", poison = 3, image = \"19361e72087946b1888684185b40d935\" },\n\tSuckerPunch = { name = \"불의의 일격\", cost = 1, desc = \"피해를 8 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 8, cardPlayedDamage = 2, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tLeadingStrike = { name = \"선제 타격\", cost = 1, desc = \"피해를 3 줍니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFollowThrough = { name = \"완수\", cost = 1, desc = \"피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.\", kind = \"Attack\", damage = 7, otherHandAtLeast = 5, bonusHitsWhenOtherHandAtLeast = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlickFlack = { name = \"재주넘기\", cost = 1, desc = \"교활. 모든 적에게 피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", sly = true, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tRicochet = { name = \"도탄\", cost = 2, desc = \"교활. 무작위 적에게 피해를 3만큼 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, sly = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPrepared = { name = \"예비\", cost = 0, desc = \"카드를 1장 버리고, 이번 턴에 준 피해만큼 방어를 얻습니다.\", kind = \"Skill\", blockPerDamageDealtThisTurn = 1, class = \"rogue\", rarity = \"normal\", discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAnticipate = { name = \"예측\", cost = 0, desc = \"이번 턴 동안 민첩을 2 얻습니다.\", kind = \"Skill\", dex = 2, class = \"rogue\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tDeflect = { name = \"튕겨내기\", cost = 0, desc = \"방어도를 4 얻습니다.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tBladeDance = { name = \"검무\", cost = 1, desc = \"표창을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", addShiv = 3, exhaust = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBackflip = { name = \"공중제비\", cost = 1, desc = \"방어도를 5 얻습니다. 카드를 2장 뽑습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", draw = 2, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDodgeAndRoll = { name = \"구르기\", cost = 1, desc = \"방어도를 4 얻습니다. 다음 턴에, 방어도를 4 얻습니다\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", nextTurnBlock = 4, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPiercingWail = { name = \"귀를 찢는 비명\", cost = 1, desc = \"이번 턴 동안 모든 적이 힘을 6 잃습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", draw = 1, affectsAllEnemies = true, enemyStrengthLossThisTurn = 6, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCloakAndDagger = { name = \"망토와 단검\", cost = 1, desc = \"방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Skill\", block = 6, class = \"rogue\", rarity = \"normal\", addShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDeadlyPoison = { name = \"맹독\", cost = 1, desc = \"중독을 5 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", poison = 5, image = \"19361e72087946b1888684185b40d935\" },\n\tSnakebite = { name = \"뱀 물기\", cost = 2, desc = \"보존. 중독을 7 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", poison = 7, retain = true, image = \"19361e72087946b1888684185b40d935\" },\n\tUntouchable = { name = \"범접 불가\", cost = 2, desc = \"교활. 방어도를 6 얻습니다.\", kind = \"Skill\", block = 6, class = \"rogue\", rarity = \"normal\", sly = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSkewer = { name = \"꼬챙이\", cost = 2, desc = \"피해를 8만큼 X번 줍니다.\", kind = \"Attack\", class = \"rogue\", rarity = \"unique\", draw = 1, useAllEnergy = true, xDamagePerEnergy = 8, image = \"92a5020c978c46bdabab910598118b86\" },\n\tBackstab = { name = \"배신\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 소멸.\", kind = \"Attack\", damage = 11, class = \"rogue\", rarity = \"unique\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPreciseCut = { name = \"정밀한 베기\", cost = 0, desc = \"피해를 13 줍니다. 손에 있는 다른 카드 1장당 피해량이 2 감소합니다.\", kind = \"Attack\", damage = 13, damagePerOtherHandCard = -2, class = \"rogue\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFinisher = { name = \"마무리\", cost = 1, desc = \"이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.\", kind = \"Attack\", damage = 0, damagePerAttackPlayedThisTurn = 6, class = \"rogue\", rarity = \"unique\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMementoMori = { name = \"메멘토 모리\", cost = 1, desc = \"피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.\", kind = \"Attack\", damage = 9, damagePerDiscardedThisTurn = 4, class = \"rogue\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStrangle = { name = \"목 조르기\", cost = 1, desc = \"피해를 8 줍니다.\", kind = \"Attack\", damage = 8, class = \"rogue\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlechettes = { name = \"프레췌\", cost = 1, desc = \"손에 있는 스킬 카드 1장당 피해를 5 줍니다.\", kind = \"Attack\", damage = 0, damagePerSkillInHand = 5, class = \"rogue\", rarity = \"unique\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPounce = { name = \"덮치기\", cost = 2, desc = \"피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.\", kind = \"Attack\", damage = 12, class = \"rogue\", rarity = \"unique\", nextSkillCostZero = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDash = { name = \"돌진\", cost = 2, desc = \"방어도를 10 얻습니다. 피해를 10 줍니다.\", kind = \"Attack\", damage = 10, block = 10, class = \"rogue\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPredator = { name = \"천적\", cost = 2, desc = \"피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.\", kind = \"Attack\", damage = 15, class = \"rogue\", rarity = \"unique\", nextTurnDraw = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPinpoint = { name = \"정밀 사격\", cost = 3, desc = \"피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.\", kind = \"Attack\", damage = 15, class = \"rogue\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tCalculatedGamble = { name = \"계산된 도박\", cost = 0, desc = \"손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", discardAll = true, drawPerDiscarded = 1, exhaust = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpose = { name = \"들춰내기\", cost = 0, desc = \"대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.\", kind = \"Skill\", vuln = 2, class = \"rogue\", rarity = \"unique\", affectsAllEnemies = true, removeEnemyBlock = true, removeEnemyArtifact = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHiddenDaggers = { name = \"숨겨진 단검\", cost = 0, desc = \"카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", discard = 2, addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tEscapePlan = { name = \"탈출구\", cost = 0, desc = \"카드를 1장 뽑습니다. 뽑은 카드가 스킬 카드라면, 방어도를 3 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 1, drawSkillBlock = 3, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tAcrobatics = { name = \"곡예\", cost = 1, desc = \"카드를 3장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 3, discard = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tHandTrick = { name = \"손기술\", cost = 1, desc = \"방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.\", kind = \"Skill\", block = 7, class = \"rogue\", rarity = \"unique\", turnHandSlyCount = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tMirage = { name = \"신기루\", cost = 1, desc = \"카드를 1장 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tExpertise = { name = \"전문성\", cost = 1, desc = \"손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", drawUntilHandSize = 6, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tBubbleBubble = { name = \"차오르는 독\", cost = 1, desc = \"적이 중독을 보유하고 있다면, 중독을 9 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 9, poisonIfTargetPoisoned = true, image = \"19361e72087946b1888684185b40d935\" },\n\tBlur = { name = \"흐릿함\", cost = 1, desc = \"방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"unique\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tLegSweep = { name = \"다리 걸기\", cost = 2, desc = \"약화를 2 부여합니다. 방어도를 11 얻습니다.\", kind = \"Skill\", block = 11, weak = 2, class = \"rogue\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tUpMySleeve = { name = \"비책\", cost = 2, desc = \"표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", addShiv = 3, combatCostReductionOnPlay = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBouncingFlask = { name = \"탄성 플라스크\", cost = 2, desc = \"무작위 적에게 중독을 3만큼 3번 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 3, poisonHits = 3, poisonRandomTargets = true, image = \"19361e72087946b1888684185b40d935\" },\n\tReflex = { name = \"반사신경\", cost = 3, desc = \"교활. 카드를 2장 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 2, sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tHaze = { name = \"아지랑이\", cost = 3, desc = \"교활. 모든 적에게 중독을 4 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 4, sly = true, image = \"19361e72087946b1888684185b40d935\" },\n\tTactician = { name = \"전략가\", cost = 3, desc = \"교활. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", gainEnergy = 1, sly = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tWellLaidPlans = { name = \"괜찮은 전략\", cost = 1, desc = \"내 턴 종료 시, 카드를 최대 1장까지 보존합니다.\", kind = \"Power\", powerEffect = \"retainOne\", value = 1, class = \"rogue\", rarity = \"unique\", image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tInfiniteBlades = { name = \"무한의 검날\", cost = 1, desc = \"내 턴 시작 시, 표창을 1장 손으로 가져옵니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", turnStartShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFootwork = { name = \"발놀림\", cost = 1, desc = \"민첩을 2 얻습니다.\", kind = \"Power\", dex = 2, class = \"rogue\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tOutbreak = { name = \"발병\", cost = 1, desc = \"독이 3번 부여될 때마다 모든 적에게 11 피해를 줍니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 11, image = \"19361e72087946b1888684185b40d935\" },\n\tNoxiousFumes = { name = \"유독 가스\", cost = 1, desc = \"내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.\", kind = \"Power\", powerEffect = \"poisonPerTurn\", value = 2, class = \"rogue\", rarity = \"unique\", poison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tAccuracy = { name = \"정밀\", cost = 1, desc = \"표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", shivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPhantomBlades = { name = \"환영검\", cost = 1, desc = \"표창이 보존을 얻습니다. 매 턴마다 처음으로 사용하는 표창의 피해량이 9 증가합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", firstShivDamageBonus = 9, shivRetain = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpeedster = { name = \"스피드스터\", cost = 2, desc = \"내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 2 줍니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", drawDamage = 2, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tGrandFinale = { name = \"대단원의 막\", cost = 0, desc = \"뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 60 줍니다.\", kind = \"Attack\", damage = 60, class = \"rogue\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tAssassinate = { name = \"암살\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.\", kind = \"Attack\", damage = 10, vuln = 1, class = \"rogue\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tEchoingSlash = { name = \"메아리 참격\", cost = 1, desc = \"모든 적에게 피해를 10 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.\", kind = \"Attack\", damage = 10, class = \"rogue\", rarity = \"legend\", repeatOnKill = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tTheHunt = { name = \"사냥\", cost = 1, desc = \"피해를 10 줍니다. 치명타라면, 카드 보상을 추가로 얻습니다. 소멸.\", kind = \"Attack\", damage = 10, rewardOnKill = 1, class = \"rogue\", rarity = \"legend\", exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMurder = { name = \"살해\", cost = 3, desc = \"피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.\", kind = \"Attack\", damage = 1, damagePerCardDrawnThisCombat = 1, class = \"rogue\", rarity = \"legend\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMalaise = { name = \"불쾌\", cost = 2, desc = \"에너지를 모두 사용하고, 사용한 에너지만큼 적에게 약화를 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", useAllEnergy = true, xWeakPerEnergy = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"에너지를 1 얻습니다. 카드를 2장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 2, gainEnergy = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tStormOfSteel = { name = \"강철의 폭풍\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", discardAll = true, addShivPerDiscard = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShadowStep = { name = \"그림자 걸음\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", discardAll = true, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShadowmeld = { name = \"그림자 은신\", cost = 1, desc = \"이번 턴 동안 얻는 방어도가 2배가 됩니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCorrosiveWave = { name = \"부식성 파도\", cost = 1, desc = \"이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", drawPoison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tBladeOfInk = { name = \"잉크 칼날\", cost = 1, desc = \"잉크투성이 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBurst = { name = \"폭주\", cost = 1, desc = \"이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 1, nextSkillRepeatCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKnifeTrap = { name = \"칼날 함정\", cost = 2, desc = \"카드를 1장 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBulletTime = { name = \"불릿 타임\", cost = 3, desc = \"이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", handCostZeroThisTurn = true, drawDisabledThisTurn = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNightmare = { name = \"악몽\", cost = 3, desc = \"카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", nextTurnCopies = 3, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tToolsOfTheTrade = { name = \"작업 도구\", cost = 1, desc = \"내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", turnStartDraw = 1, turnStartDiscard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAfterimage = { name = \"잔상\", cost = 1, desc = \"카드를 사용할 때마다, 방어도를 1 얻습니다.\", kind = \"Power\", cardPlayedBlock = 1, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAccelerant = { name = \"촉진제\", cost = 1, desc = \"적 턴 시작 시 독이 한 번 더 틱합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tEnvenom = { name = \"독 바르기\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다, 중독을 1 부여합니다.\", kind = \"Power\", attackPoison = 1, class = \"rogue\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tMasterPlanner = { name = \"설계의 대가\", cost = 2, desc = \"사용한 스킬 카드는 교활해집니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", skillSlyOnPlay = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tTracking = { name = \"추적\", cost = 2, desc = \"약화 상태의 적이 공격 카드로 받는 피해가 2배가 됩니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tFanOfKnives = { name = \"칼날 부채\", cost = 2, desc = \"표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", addShiv = 4, shivAoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSerpentForm = { name = \"구렁이의 형상\", cost = 3, desc = \"카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 4, class = \"rogue\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tAbrasive = { name = \"연마\", cost = 3, desc = \"교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.\", kind = \"Power\", dex = 1, thorns = 4, class = \"rogue\", rarity = \"legend\", sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSuppress = { name = \"진압\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 약화를 3 부여합니다.\", kind = \"Attack\", damage = 11, weak = 3, class = \"rogue\", rarity = \"legend\", innate = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tWraithForm = { name = \"유령의 형상\", cost = 3, desc = \"불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.\", kind = \"Power\", intangible = 2, endTurnDexLoss = 1, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSavageBlow = { name = \"새비지 블로우\", cost = 1, desc = \"피해를 3만큼 2번 줍니다. 이번 턴에 사용한 공격 카드 1장당 피해가 2 증가합니다.\", kind = \"Attack\", damage = 3, damagePerAttackPlayedThisTurn = 2, class = \"thief\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tCriticalEdge = { name = \"크리티컬 엣지\", cost = 1, desc = \"카드를 1장 뽑습니다. 다음 턴에 공격 카드의 피해량이 2배가 됩니다. 보존.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 1, nextTurnAttackMultiplier = 2, retain = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tSteal = { name = \"스틸\", cost = 0, desc = \"피해를 3 줍니다. 이번 턴에 버린 카드 1장당 피해가 3 증가합니다. 에너지를 1 얻습니다.\", kind = \"Attack\", damage = 3, damagePerDiscardedThisTurn = 3, class = \"thief\", rarity = \"normal\", gainEnergy = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerAcceleration = { name = \"대거 액셀레이션\", cost = 0, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 카드를 1장 더 뽑고, 표창 1장을 손에 넣습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", draw = 1, discard = 1, drawPerDiscarded = 1, addShiv = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKarma = { name = \"카르마\", cost = 1, desc = \"피해를 7 줍니다. 방어도를 무시합니다. 약화 상태의 적에게는 피해가 2배가 됩니다.\", kind = \"Attack\", damage = 7, class = \"thief\", rarity = \"unique\", pierce = true, attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tDaggerMastery = { name = \"대거 마스터리\", cost = 1, desc = \"카드를 사용할 때마다 방어도를 1 얻습니다. 매 턴 첫 카드의 피해가 3 증가합니다.\", kind = \"Power\", firstCardDamageBonus = 3, cardPlayedBlock = 1, class = \"thief\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 1, desc = \"힘을 1 얻습니다. 민첩을 1 얻습니다. 방어도를 4 얻습니다.\", kind = \"Skill\", block = 4, strength = 1, dex = 1, class = \"thief\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tShieldMastery = { name = \"실드 마스터리\", cost = 1, desc = \"방어도를 7 얻습니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 7, class = \"thief\", rarity = \"normal\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tThiefAgility = { name = \"시프 어질리티\", cost = 1, desc = \"방어도를 5 얻습니다. 민첩을 1 얻습니다. 이번 턴 동안 손의 다른 스킬 카드 1장이 교활해집니다.\", kind = \"Skill\", block = 5, dex = 1, class = \"thief\", rarity = \"unique\", turnHandSlyCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tEdgeCarnival = { name = \"엣지 카니발\", cost = 1, desc = \"무작위 적에게 피해를 2만큼 4번 줍니다. 표창 1장을 손에 넣습니다.\", kind = \"Attack\", damage = 2, class = \"thiefmaster\", rarity = \"unique\", hits = 4, addShiv = 1, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tMuspelHeim = { name = \"무스펠 하임\", cost = 2, desc = \"모든 적에게 피해를 4 줍니다. 이번 턴에 버린 카드 1장당 피해가 2 증가합니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 4, damagePerDiscardedThisTurn = 2, weak = 1, class = \"thiefmaster\", rarity = \"unique\", aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMesoExplosion = { name = \"메소 익스플로젼\", cost = 1, desc = \"피해를 2 줍니다. 이번 턴에 버린 카드 1장당 피해가 7 증가합니다. 방어도를 무시합니다.\", kind = \"Attack\", damage = 2, damagePerDiscardedThisTurn = 7, class = \"thiefmaster\", rarity = \"unique\", pierce = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDarkFlare = { name = \"다크 플레어\", cost = 2, desc = \"매 턴 모든 적에게 피해를 2 줍니다. 카드를 사용할 때마다 무작위 적에게 피해를 2 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 2, powerEffect = \"damagePerTurn\", value = 2, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tPickPocket = { name = \"픽 파킷\", cost = 1, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 표창 1장을 손에 넣고, 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", draw = 1, gainEnergy = 1, discard = 1, addShivPerDiscard = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowPartner = { name = \"쉐도우 파트너\", cost = 2, desc = \"카드를 1장 선택합니다. 다음 턴에 그 카드의 복사본 1장을 손에 넣습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnCopies = 1, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요.\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdvancedDarkSight = { name = \"어드밴스드 다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", intangible = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tIntoDarkness = { name = \"인투 다크니스\", cost = 1, desc = \"모든 적에게 약화를 1 부여합니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", weak = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, affectsAllEnemies = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tVenom = { name = \"베놈\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독을 1 부여합니다. 적 턴 시작 시 독이 한 번 더 적용됩니다.\", kind = \"Power\", attackPoison = 1, class = \"thiefmaster\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tGrid = { name = \"그리드\", cost = 1, desc = \"가시를 3 얻습니다. 카드를 사용할 때마다 방어도를 1 얻습니다.\", kind = \"Power\", thorns = 3, cardPlayedBlock = 1, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tRadicalDarkness = { name = \"래디컬 다크니스\", cost = 2, desc = \"카드를 1장 뽑습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShurikenBurst = { name = \"슈리켄 버스트\", cost = 1, desc = \"무작위 적에게 피해를 3씩 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"assassin\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tWindTalisman = { name = \"윈드 탈리스만\", cost = 1, desc = \"카드를 1장 뽑고, 에너지를 1 얻습니다. 이번 턴 동안 스킬 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", draw = 1, gainEnergy = 1, skillCostReductionThisTurn = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMarkOfAssassin = { name = \"마크 오브 어쌔신\", cost = 1, desc = \"약화 1을 부여합니다. 약화 상태의 적에게 주는 공격 피해가 2배가 됩니다.\", kind = \"Power\", weak = 1, class = \"assassin\", rarity = \"unique\", attackDamageVsWeakMultiplier = 2, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowRush = { name = \"쉐도우 러쉬\", cost = 1, desc = \"피해 7, 방어도 5를 얻습니다.\", kind = \"Attack\", damage = 7, block = 5, class = \"assassin\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShadowLeap = { name = \"쉐도우 리프\", cost = 0, desc = \"방어도 4를 얻습니다. 다음 턴에 방어도 4를 얻습니다.\", kind = \"Skill\", block = 4, class = \"assassin\", rarity = \"normal\", nextTurnBlock = 4, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tShadowBlink = { name = \"쉐도우 블링크\", cost = 1, desc = \"무형 1을 얻습니다. 다음 스킬 카드의 비용이 0이 됩니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"assassin\", rarity = \"unique\", nextSkillCostZero = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tJavelinMastery = { name = \"자벨린 마스터리\", cost = 1, desc = \"표창의 피해량이 2 증가합니다.\", kind = \"Power\", class = \"assassin\", rarity = \"unique\", shivDamageBonus = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tJavelinAcceleration = { name = \"자벨린 액셀레이션\", cost = 0, desc = \"카드를 2장 뽑습니다. 카드를 1장 버립니다. 표창 1장을 손에 넣습니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"normal\", draw = 2, discard = 1, addShiv = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tCriticalThrow = { name = \"크리티컬 스로우\", cost = 1, desc = \"피해를 7씩 2번 줍니다. 방어도를 무시합니다. 이번 턴 첫 카드라면 피해가 더 강해집니다.\", kind = \"Attack\", damage = 7, firstCardDamageBonus = 3, class = \"assassin\", rarity = \"unique\", hits = 2, pierce = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tAssassinPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 1, desc = \"힘 1, 민첩 1을 얻고 카드를 1장 뽑습니다.\", kind = \"Skill\", strength = 1, dex = 1, class = \"assassin\", rarity = \"normal\", draw = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tTripleThrow = { name = \"트리플 스로우\", cost = 1, desc = \"피해를 4씩 3번 줍니다.\", kind = \"Attack\", damage = 4, class = \"hermit\", rarity = \"normal\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShurikenChallenge = { name = \"슈리켄 챌린지\", cost = 1, desc = \"피해를 5씩 2번 줍니다. 다음 턴에 카드를 1장 더 뽑습니다.\", kind = \"Attack\", damage = 5, class = \"hermit\", rarity = \"unique\", hits = 2, nextTurnDraw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitDarkFlare = { name = \"다크 플레어\", cost = 2, desc = \"매 턴 모든 적에게 피해 3을 줍니다. 턴 시작마다 표창 1장을 손에 넣습니다.\", kind = \"Power\", powerEffect = \"damagePerTurn\", value = 3, class = \"hermit\", rarity = \"unique\", turnStartShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitShadowPartner = { name = \"쉐도우 파트너\", cost = 2, desc = \"카드를 1장 뽑습니다. 다음 턴 공격 카드의 피해가 2배가 됩니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpiritJavelin = { name = \"스피릿 자벨린\", cost = 1, desc = \"표창이 턴 종료 시 사라지지 않습니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", firstShivDamageBonus = 4, shivRetain = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitRadicalDarkness = { name = \"래디컬 다크니스\", cost = 1, desc = \"방어도 4를 얻습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 소멸.\", kind = \"Skill\", block = 4, blockGainMultiplier = 2, class = \"hermit\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitVenom = { name = \"베놈\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독 1을 부여합니다. 전투 중 독 부여 3회마다 모든 적에게 피해 8을 줍니다.\", kind = \"Power\", attackPoison = 1, class = \"hermit\", rarity = \"legend\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 8, image = \"19361e72087946b1888684185b40d935\" },\n\tSkilledJavelin = { name = \"숙련된 표창술\", cost = 1, desc = \"표창의 피해량이 2 증가합니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", shivDamageBonus = 2, firstShivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"에너지를 1 얻고 카드를 1장 뽑습니다. 표창 1장을 손에 넣습니다. 소멸.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, gainEnergy = 1, addShiv = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n}\nself.CardFrames = {\n\twarrior = { normal = \"4bb57ef88ef449fdaf958f6cf37fe44b\", unique = \"4f71c124c8bc4e13b5e9fad392995f68\", legend = \"6d741a60c60743cb98ee740a1e2dbfed\" },\n\tmagician = { normal = \"d788d09f6f50467ebc67f01dec45f9e2\", unique = \"f5def2e8022b4e59a17d3c16414034fe\", legend = \"cff71f2e472041ce80c6fbd296f42e2d\" },\n\trogue = { normal = \"9487b06867bc46269ed1d855420f457f\", unique = \"b3081fb2fb1445fa90b12b01481a78ef\", legend = \"c357d2daf31a489d95b8fa47e50dd879\" },\n}\nself.ClassToFrame = {\n\twarrior = \"warrior\",\n\tfighter = \"warrior\",\n\tpage = \"warrior\",\n\tspearman = \"warrior\",\n\tmagician = \"magician\",\n\tfirepoison = \"magician\",\n\ticelightning = \"magician\",\n\tcleric = \"magician\",\n\tcurse = \"rogue\",\n\tshiv = \"rogue\",\n\trogue = \"rogue\",\n\tassassin = \"rogue\",\n\thermit = \"rogue\",\n\tthief = \"rogue\",\n\tthiefmaster = \"rogue\",\n}\nself.NodeIcons = {\n\tcombat = \"f98db6823e894a4f90308d61f75894ac\",\n\telite = \"793ed8a757534b89a82f460747d2df24\",\n\tboss = \"423056cdbbc04f4da131b9721c404d96\",\n\tshop = \"da37e1fac55d455b9ade08569f09f798\",\n\trest = \"b86c1b0568bd45f3ae4a4b97e1b4a594\",\n\ttreasure = \"f8a6d58e20f54e2ca899485055df1ce4\",\n}\nself.ClassPortraits = {\n\twarrior = \"28c88fdc5ab44f34a8b3fc1e19d4ce78\",\n\tmagician = \"3b9ea1f066a744bb859df47fef817277\",\n\trogue = \"efa920e58d31426486ef974106e7dc8b\",\n}\nself.SoulShopDef = {\n\t{ key = \"meso\", name = \"두둑한 지갑\", desc = \"런 시작 시 메소 +60\", cost = 3 },\n\t{ key = \"hp\", name = \"단련된 육체\", desc = \"시작 최대 HP +15\", cost = 4 },\n\t{ key = \"trim\", name = \"덱 정제\", desc = \"시작 덱에서 기본 카드 1장 제거\", cost = 5 },\n\t{ key = \"relic\", name = \"유물 수집가\", desc = \"런 시작 시 유물 1개 추가\", cost = 6 },\n}\nself.SoulUnlocks = {}\nself.SoulPoints = self.SoulPoints or 0\nlocal uiTries = 0\nlocal uiInit = 0\nuiInit = _TimerService:SetTimerRepeat(function()\n\tuiTries = uiTries + 1\n\tif _EntityService:GetEntityByPath(\"/ui/DeckUIGroup\") ~= nil then\n\t\tself:ActivateUIGroups()\n\t\t-- MainMenu는 한동안 비활성화: 시작 시 바로 로비로 진입.\n\t\t-- 추후 싱글/멀티/종료 선택 메뉴가 필요하면 self:ShowMainMenu()로 되돌린다(메서드·UI 유지됨).\n\t\tself:ShowLobby()\n\t\t_TimerService:ClearTimer(uiInit)\n\telseif uiTries > 80 then\n\t\t_TimerService:ClearTimer(uiInit)\n\tend\nend, 0.1)\nlocal lp = _UserService.LocalPlayer\nif lp ~= nil then\n\tself:ReqLoadAscension(lp.PlayerComponent.UserId)\n\tself:ReqLoadSouls(lp.PlayerComponent.UserId)\nend\n_InputService:ConnectEvent(KeyDownEvent, function(e)\n\tif e.key == KeyboardKey.LeftControl then\n\t\tself.DebugCtrlDown = true\n\t\tlocal lp2 = _UserService.LocalPlayer\n\t\tif lp2 ~= nil and lp2.CurrentMapName == \"lobby\" and self.RunActive ~= true then\n\t\t\tself:PlayerAttackMotion()\n\t\tend\n\telseif e.key == KeyboardKey.LeftShift or e.key == KeyboardKey.RightShift then\n\t\tself.DebugShiftDown = true\n\telseif e.key == KeyboardKey.C then\n\t\tif self.DebugCtrlDown == true and self.DebugShiftDown == true then\n\t\t\tself:OpenDebugCardPicker()\n\t\tend\n\telseif e.key == KeyboardKey.E then\n\t\tif self.DebugCtrlDown == true and self.DebugShiftDown == true then\n\t\t\tself:CheatFillEnergy()\n\t\tend\n\tend\nend)\n_InputService:ConnectEvent(KeyUpEvent, function(e)\n\tif e.key == KeyboardKey.LeftControl then\n\t\tself.DebugCtrlDown = false\n\telseif e.key == KeyboardKey.LeftShift or e.key == KeyboardKey.RightShift then\n\t\tself.DebugShiftDown = false\n\tend\nend)", + "Code": "self.Cards = {\n\tStrike = { name = \"파워 스트라이크\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tDefend = { name = \"아이언 바디\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tBash = { name = \"슬래시 블러스트\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10, class = \"warrior\", rarity = \"normal\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tWarLeap = { name = \"워 리프\", cost = 1, desc = \"피해 4, 방어도 3\", kind = \"Attack\", damage = 4, block = 3, class = \"warrior\", rarity = \"normal\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBrandish = { name = \"브랜디시\", cost = 2, desc = \"피해 13\", kind = \"Attack\", damage = 13, class = \"warrior\", rarity = \"unique\", fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tChargedBlow = { name = \"차지 블로우\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, firstCardDamageBonus = 2, vuln = 2, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tThreaten = { name = \"위협\", cost = 0, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"warrior\", rarity = \"normal\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEnrage = { name = \"인레이지\", cost = 1, desc = \"힘 +2\", kind = \"Skill\", strength = 2, class = \"warrior\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tRage = { name = \"분노\", cost = 1, desc = \"모든 적에게 피해를 4 줍니다.\", kind = \"Attack\", damage = 4, class = \"warrior\", rarity = \"legend\", aoe = true, image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 1, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBerserk = { name = \"버서크\", cost = 2, desc = \"매턴 에너지 +1, 취약 1 자가\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"fighter\", rarity = \"legend\", selfVuln = 1, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tRisingAttack = { name = \"라이징 어택\", cost = 2, desc = \"피해 12\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"115e309771604743853abad2d8d186bc\" },\n\tThunderCharge = { name = \"썬더 차지\", cost = 1, desc = \"피해 7, 약화 1\", kind = \"Attack\", damage = 7, weak = 1, class = \"page\", rarity = \"unique\", fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tBlizzardCharge = { name = \"블리자드 차지\", cost = 1, desc = \"피해 7, 취약 1\", kind = \"Attack\", damage = 7, vuln = 1, class = \"page\", rarity = \"unique\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tPowerGuard = { name = \"파워 가드\", cost = 1, desc = \"방어도 10\", kind = \"Skill\", block = 10, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPierce = { name = \"피어스\", cost = 1, desc = \"피해 9, 방어 무시\", kind = \"Attack\", damage = 9, class = \"spearman\", rarity = \"unique\", pierce = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tIronWall = { name = \"아이언 월\", cost = 2, desc = \"방어도 12\", kind = \"Skill\", block = 12, class = \"spearman\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHyperBody = { name = \"하이퍼 바디\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"spearman\", rarity = \"legend\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tEnergyBolt = { name = \"에너지 볼트\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"magician\", rarity = \"normal\", fx = \"1d5877e1120a42d0907f204c959888b1\", image = \"e84880eaf89442128d3af2be5c80a74f\" },\n\tMagicGuard = { name = \"매직 가드\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"magician\", rarity = \"normal\", image = \"01b249c26eb34b8aaab774bf221907a1\" },\n\tMagicClaw = { name = \"매직 클로\", cost = 1, desc = \"피해 3 × 2회\", kind = \"Attack\", damage = 3, class = \"magician\", rarity = \"normal\", hits = 2, fx = \"ba4ac7c8f24845b68b7e689b7effcc93\", image = \"f3fcac2d460041b288cc1973caaaf30f\" },\n\tTeleport = { name = \"텔레포트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"magician\", rarity = \"normal\", discardAll = true, drawPerDiscarded = 1, image = \"7f70a9dc7e304433bb8121dd9c4df98b\" },\n\tSlow = { name = \"슬로우\", cost = 1, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"magician\", rarity = \"normal\", image = \"7224cd3f9b7e497d9dd65f32a50865e4\" },\n\tFireArrow = { name = \"파이어 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"firepoison\", rarity = \"unique\", fx = \"4a937e208875468eb63d891806fba3cd\", image = \"6fa15fd3a0004b409ea516c11a67e533\" },\n\tPoisonBreath = { name = \"포이즌 브레스\", cost = 1, desc = \"독 4 부여\", kind = \"Skill\", class = \"firepoison\", rarity = \"unique\", poison = 4, image = \"07200f3c74854022baa7ebbefdc4ad8c\" },\n\tElementAmp = { name = \"엘레멘트 앰플\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"firepoison\", rarity = \"legend\", image = \"06865473977849bebe79062dbd608944\" },\n\tThunderBolt = { name = \"썬더 볼트\", cost = 2, desc = \"모든 적에게 피해 6\", kind = \"Attack\", damage = 6, class = \"icelightning\", rarity = \"legend\", aoe = true, fx = \"7d52f5e389bd4d44a30cf7cc54538f8f\", image = \"c6685d33cb2641f09d11cfa2d5cc820c\" },\n\tColdBeam = { name = \"콜드 빔\", cost = 2, desc = \"피해 7, 약화 2\", kind = \"Attack\", damage = 7, weak = 2, class = \"icelightning\", rarity = \"unique\", image = \"e8f7c148c79f497d83014e3361f59f5c\" },\n\tChillingStep = { name = \"칠링 스텝\", cost = 1, desc = \"방어도 8\", kind = \"Skill\", block = 8, class = \"icelightning\", rarity = \"unique\", image = \"bef20873a68a4651a91d74be457c2cfc\" },\n\tHeal = { name = \"힐\", cost = 1, desc = \"HP 10 회복\", kind = \"Skill\", class = \"cleric\", rarity = \"unique\", heal = 10, image = \"8b935b7d7066493cb462834bbe287c74\" },\n\tBless = { name = \"블레스\", cost = 1, desc = \"힘 +1, 방어도 5\", kind = \"Skill\", block = 5, strength = 1, class = \"cleric\", rarity = \"unique\", image = \"607fc5457c1c44a0993a5c2fe3fb0c68\" },\n\tHolyArrow = { name = \"홀리 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"cleric\", rarity = \"unique\", fx = \"4faa7b78e09643cf86339b8b7cf2abac\", image = \"a80127195bf7471f9545b70e491f4719\" },\n\tWound = { name = \"상처\", cost = 0, desc = \"사용할 수 없다. 손패를 막는 저주.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true },\n\tBurn = { name = \"화상\", cost = 0, desc = \"사용 불가. 손패에 있으면 턴 종료 시 피해 2.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true, endTurnDamage = 2 },\n\tNeutralize = { name = \"무력화\", cost = 0, desc = \"피해를 3 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 3, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSilentStrike = { name = \"타격\", cost = 1, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tSurvivor = { name = \"생존자\", cost = 1, desc = \"방어도를 8 얻습니다. 카드를 1장 버립니다.\", kind = \"Skill\", block = 8, class = \"rogue\", rarity = \"normal\", discard = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSilentDefend = { name = \"수비\", cost = 1, desc = \"방어도를 5 얻습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDoubleStab = { name = \"더블 스탭\", cost = 1, desc = \"피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tLuckySeven = { name = \"럭키 세븐\", cost = 1, desc = \"피해를 3만큼 3번 줍니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"unique\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHaste = { name = \"헤이스트\", cost = 1, desc = \"카드를 1장 뽑습니다. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", draw = 1, gainEnergy = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDarkSight = { name = \"다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"rogue\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tFlashJump = { name = \"플래시 점프\", cost = 0, desc = \"방어도를 4 얻습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", draw = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNimbleBody = { name = \"님블 바디\", cost = 1, desc = \"민첩을 1 얻습니다. 매 턴 방어도를 2 얻습니다.\", kind = \"Power\", dex = 1, powerEffect = \"blockPerTurn\", value = 2, class = \"rogue\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSlice = { name = \"칼질\", cost = 0, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShiv = { name = \"표창\", cost = 0, desc = \"피해를 4 줍니다. 소멸.\", kind = \"Attack\", damage = 4, class = \"shiv\", rarity = \"normal\", exhaust = true, token = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerSpray = { name = \"단검 분사\", cost = 1, desc = \"모든 적에게 피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"thief\", rarity = \"normal\", hits = 2, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerThrow = { name = \"단검 투척\", cost = 1, desc = \"피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Attack\", damage = 9, class = \"thief\", rarity = \"normal\", draw = 1, discard = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPoisonedStab = { name = \"독 찌르기\", cost = 1, desc = \"피해를 6 줍니다. 중독을 3 부여합니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", poison = 3, image = \"19361e72087946b1888684185b40d935\" },\n\tSuckerPunch = { name = \"불의의 일격\", cost = 1, desc = \"피해를 7 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 7, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tLeadingStrike = { name = \"선제 타격\", cost = 1, desc = \"피해를 3 줍니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", addShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFollowThrough = { name = \"완수\", cost = 1, desc = \"피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.\", kind = \"Attack\", damage = 7, otherHandAtLeast = 5, bonusHitsWhenOtherHandAtLeast = 1, class = \"thief\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlickFlack = { name = \"재주넘기\", cost = 1, desc = \"교활. 모든 적에게 피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"thief\", rarity = \"normal\", sly = true, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tRicochet = { name = \"도탄\", cost = 2, desc = \"교활. 무작위 적에게 피해를 3만큼 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"assassin\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, sly = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPrepared = { name = \"예비\", cost = 1, desc = \"카드를 1장 버리고, 이번 턴에 준 피해의 절반만큼 방어를 얻습니다.\", kind = \"Skill\", blockPerDamageDealtThisTurn = 0.5, class = \"thief\", rarity = \"normal\", discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAnticipate = { name = \"예측\", cost = 0, desc = \"이번 턴 동안 민첩을 2 얻습니다.\", kind = \"Skill\", endTurnDexLoss = 2, dex = 2, class = \"rogue\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tDeflect = { name = \"튕겨내기\", cost = 0, desc = \"방어도를 4 얻습니다.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tBladeDance = { name = \"검무\", cost = 1, desc = \"표창을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"assassin\", rarity = \"normal\", addShiv = 3, exhaust = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBackflip = { name = \"공중제비\", cost = 1, desc = \"방어도를 5 얻습니다. 카드를 2장 뽑습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", draw = 2, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDodgeAndRoll = { name = \"구르기\", cost = 1, desc = \"방어도를 4 얻습니다. 다음 턴에, 방어도를 4 얻습니다\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", nextTurnBlock = 4, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPiercingWail = { name = \"귀를 찢는 비명\", cost = 1, desc = \"이번 턴 동안 모든 적이 힘을 6 잃습니다. 소멸.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", affectsAllEnemies = true, enemyStrengthLossThisTurn = 6, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCloakAndDagger = { name = \"망토와 단검\", cost = 1, desc = \"방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Skill\", block = 6, class = \"assassin\", rarity = \"normal\", addShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDeadlyPoison = { name = \"맹독\", cost = 1, desc = \"중독을 5 부여합니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", poison = 5, image = \"19361e72087946b1888684185b40d935\" },\n\tSnakebite = { name = \"뱀 물기\", cost = 2, desc = \"보존. 중독을 7 부여합니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", poison = 7, retain = true, image = \"19361e72087946b1888684185b40d935\" },\n\tUntouchable = { name = \"범접 불가\", cost = 2, desc = \"교활. 방어도를 6 얻습니다.\", kind = \"Skill\", block = 6, class = \"rogue\", rarity = \"normal\", sly = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSkewer = { name = \"꼬챙이\", cost = 2, desc = \"피해를 8만큼 X번 줍니다.\", kind = \"Attack\", class = \"assassin\", rarity = \"unique\", useAllEnergy = true, xDamagePerEnergy = 8, image = \"92a5020c978c46bdabab910598118b86\" },\n\tBackstab = { name = \"배신\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 소멸.\", kind = \"Attack\", damage = 10, class = \"rogue\", rarity = \"unique\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPreciseCut = { name = \"정밀한 베기\", cost = 0, desc = \"피해를 13 줍니다. 손에 있는 다른 카드 1장당 피해량이 2 감소합니다.\", kind = \"Attack\", damage = 13, damagePerOtherHandCard = -2, class = \"thief\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFinisher = { name = \"마무리\", cost = 1, desc = \"이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.\", kind = \"Attack\", damage = 0, damagePerAttackPlayedThisTurn = 6, class = \"thief\", rarity = \"unique\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMementoMori = { name = \"메멘토 모리\", cost = 1, desc = \"피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.\", kind = \"Attack\", damage = 9, damagePerDiscardedThisTurn = 4, class = \"thief\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStrangle = { name = \"목 조르기\", cost = 1, desc = \"피해를 8 줍니다.\", kind = \"Attack\", damage = 8, class = \"thief\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlechettes = { name = \"프레췌\", cost = 1, desc = \"손에 있는 스킬 카드 1장당 피해를 5 줍니다.\", kind = \"Attack\", damage = 0, damagePerSkillInHand = 5, class = \"assassin\", rarity = \"unique\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPounce = { name = \"덮치기\", cost = 2, desc = \"피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.\", kind = \"Attack\", damage = 12, class = \"assassin\", rarity = \"unique\", nextSkillCostZero = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDash = { name = \"돌진\", cost = 2, desc = \"방어도를 10 얻습니다. 피해를 10 줍니다.\", kind = \"Attack\", damage = 10, block = 10, class = \"thief\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPredator = { name = \"천적\", cost = 2, desc = \"피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.\", kind = \"Attack\", damage = 15, class = \"assassin\", rarity = \"unique\", nextTurnDraw = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPinpoint = { name = \"정밀 사격\", cost = 3, desc = \"피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.\", kind = \"Attack\", damage = 15, class = \"assassin\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tCalculatedGamble = { name = \"계산된 도박\", cost = 0, desc = \"손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", discardAll = true, drawPerDiscarded = 1, exhaust = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpose = { name = \"들춰내기\", cost = 0, desc = \"대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.\", kind = \"Skill\", vuln = 2, class = \"thief\", rarity = \"unique\", removeEnemyBlock = true, removeEnemyArtifact = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHiddenDaggers = { name = \"숨겨진 표창\", cost = 0, desc = \"카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", discard = 2, addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tEscapePlan = { name = \"탈출구\", cost = 0, desc = \"카드를 1장 뽑습니다. 뽑은 카드가 스킬 카드라면, 방어도를 3 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 1, drawSkillBlock = 3, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tAcrobatics = { name = \"곡예\", cost = 1, desc = \"카드를 3장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 3, discard = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tHandTrick = { name = \"손기술\", cost = 1, desc = \"방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.\", kind = \"Skill\", block = 7, class = \"thief\", rarity = \"unique\", turnHandSlyCount = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpertise = { name = \"전문성\", cost = 1, desc = \"손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", drawUntilHandSize = 6, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tBubbleBubble = { name = \"차오르는 독\", cost = 1, desc = \"적이 중독을 보유하고 있다면, 중독을 9 부여합니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", poison = 9, poisonIfTargetPoisoned = true, image = \"19361e72087946b1888684185b40d935\" },\n\tBlur = { name = \"흐릿함\", cost = 1, desc = \"방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 5, class = \"thief\", rarity = \"unique\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tLegSweep = { name = \"다리 걸기\", cost = 2, desc = \"약화를 2 부여합니다. 방어도를 11 얻습니다.\", kind = \"Skill\", block = 11, weak = 2, class = \"thief\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tUpMySleeve = { name = \"비책\", cost = 2, desc = \"표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", addShiv = 3, combatCostReductionOnPlay = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBouncingFlask = { name = \"탄성 플라스크\", cost = 2, desc = \"무작위 적에게 중독을 3만큼 3번 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", poison = 3, poisonHits = 3, poisonRandomTargets = true, image = \"19361e72087946b1888684185b40d935\" },\n\tReflex = { name = \"반사신경\", cost = 3, desc = \"교활. 카드를 2장 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 2, sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tHaze = { name = \"아지랑이\", cost = 3, desc = \"교활. 모든 적에게 중독을 4 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", poison = 4, sly = true, image = \"19361e72087946b1888684185b40d935\" },\n\tTactician = { name = \"전략가\", cost = 3, desc = \"교활. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", gainEnergy = 1, sly = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tWellLaidPlans = { name = \"괜찮은 전략\", cost = 1, desc = \"내 턴 종료 시, 카드를 최대 1장까지 보존합니다.\", kind = \"Power\", powerEffect = \"retainOne\", value = 1, class = \"thief\", rarity = \"unique\", image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tInfiniteBlades = { name = \"무한의 검날\", cost = 1, desc = \"내 턴 시작 시, 표창을 1장 손으로 가져옵니다.\", kind = \"Power\", class = \"assassin\", rarity = \"unique\", turnStartShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFootwork = { name = \"발놀림\", cost = 1, desc = \"민첩을 2 얻습니다.\", kind = \"Power\", dex = 2, class = \"thief\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tOutbreak = { name = \"발병\", cost = 2, desc = \"독이 3번 부여될 때마다 모든 적에게 6 피해를 줍니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"unique\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 6, image = \"19361e72087946b1888684185b40d935\" },\n\tNoxiousFumes = { name = \"유독 가스\", cost = 1, desc = \"내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.\", kind = \"Power\", powerEffect = \"poisonPerTurn\", value = 2, class = \"thief\", rarity = \"unique\", poison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tSpeedster = { name = \"스피드스터\", cost = 2, desc = \"내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 1 줍니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"unique\", drawDamage = 1, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tGrandFinale = { name = \"대단원의 막\", cost = 0, desc = \"뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 45 줍니다.\", kind = \"Attack\", damage = 45, class = \"thiefmaster\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tAssassinate = { name = \"암살\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.\", kind = \"Attack\", damage = 10, vuln = 1, class = \"thiefmaster\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tEchoingSlash = { name = \"메아리 참격\", cost = 2, desc = \"모든 적에게 피해를 6 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.\", kind = \"Attack\", damage = 10, class = \"thiefmaster\", rarity = \"legend\", repeatOnKill = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tTheHunt = { name = \"사냥\", cost = 1, desc = \"피해를 10 줍니다. 이 카드로 적을 처치하면 카드 보상을 추가로 얻습니다. 소멸.\", kind = \"Attack\", damage = 6, rewardOnKill = 1, class = \"assassin\", rarity = \"legend\", exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMurder = { name = \"살해\", cost = 3, desc = \"피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.\", kind = \"Attack\", damage = 1, damagePerCardDrawnThisCombat = 1, class = \"thiefmaster\", rarity = \"legend\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMalaise = { name = \"불쾌\", cost = 2, desc = \"에너지를 모두 사용하고, 사용한 에너지만큼 적에게 약화를 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", useAllEnergy = true, xWeakPerEnergy = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStormOfSteel = { name = \"강철의 폭풍\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"legend\", discardAll = true, addShivPerDiscard = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShadowStep = { name = \"그림자 걸음\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", discardAll = true, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShadowmeld = { name = \"그림자 은신\", cost = 1, desc = \"이번 턴 동안 얻는 방어도가 2배가 됩니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"thiefmaster\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCorrosiveWave = { name = \"부식성 파도\", cost = 1, desc = \"이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", drawPoison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tBladeOfInk = { name = \"잉크 칼날\", cost = 1, desc = \"잉크투성이 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBurst = { name = \"폭주\", cost = 1, desc = \"이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", nextSkillRepeatCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKnifeTrap = { name = \"칼날 함정\", cost = 2, desc = \"교활. 모든 적에게 피해를 7 주고 중독을 2 부여합니다.\", kind = \"Attack\", damage = 7, class = \"thiefmaster\", rarity = \"legend\", poison = 2, sly = true, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBulletTime = { name = \"불릿 타임\", cost = 3, desc = \"이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", handCostZeroThisTurn = true, drawDisabledThisTurn = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNightmare = { name = \"악몽\", cost = 3, desc = \"카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", nextTurnCopies = 3, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tToolsOfTheTrade = { name = \"작업 도구\", cost = 1, desc = \"내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"legend\", turnStartDraw = 1, turnStartDiscard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tMasterPlanner = { name = \"설계의 대가\", cost = 2, desc = \"사용한 스킬 카드는 교활해집니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"legend\", skillSlyOnPlay = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tFanOfKnives = { name = \"칼날 부채\", cost = 2, desc = \"표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", addShiv = 4, shivAoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSerpentForm = { name = \"구렁이의 형상\", cost = 2, desc = \"카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 4, class = \"thiefmaster\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tAbrasive = { name = \"연마\", cost = 2, desc = \"교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.\", kind = \"Power\", dex = 1, thorns = 4, class = \"thiefmaster\", rarity = \"legend\", sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSuppress = { name = \"진압\", cost = 0, desc = \"선천성. 피해를 9 줍니다. 약화를 2 부여합니다. 소멸.\", kind = \"Attack\", damage = 9, weak = 2, class = \"thiefmaster\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tWraithForm = { name = \"유령의 형상\", cost = 3, desc = \"불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.\", kind = \"Power\", intangible = 2, endTurnDexLoss = 1, class = \"thiefmaster\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSavageBlow = { name = \"새비지 블로우\", cost = 1, desc = \"피해를 3만큼 2번 줍니다. 이번 턴에 사용한 공격 카드 1장당 피해가 2 증가합니다.\", kind = \"Attack\", damage = 3, damagePerAttackPlayedThisTurn = 2, class = \"thief\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tCriticalEdge = { name = \"크리티컬 엣지\", cost = 1, desc = \"카드를 1장 뽑습니다. 다음 턴에 공격 카드의 피해량이 2배가 됩니다. 보존.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 1, nextTurnAttackMultiplier = 2, retain = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tSteal = { name = \"스틸\", cost = 1, desc = \"피해를 3 줍니다. 이번 턴에 버린 카드 1장당 피해가 3 증가합니다. 에너지를 1 얻습니다.\", kind = \"Attack\", damage = 3, damagePerDiscardedThisTurn = 3, class = \"thief\", rarity = \"normal\", gainEnergy = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerAcceleration = { name = \"대거 액셀레이션\", cost = 0, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 카드를 1장 더 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", draw = 1, discard = 1, drawPerDiscarded = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKarma = { name = \"카르마\", cost = 1, desc = \"피해를 7 줍니다. 방어도를 무시합니다. 약화 상태의 적에게는 피해가 2배가 됩니다.\", kind = \"Attack\", damage = 7, class = \"thief\", rarity = \"unique\", pierce = true, attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tDaggerMastery = { name = \"대거 마스터리\", cost = 1, desc = \"카드를 사용할 때마다 방어도를 1 얻습니다. 매 턴 첫 카드의 피해가 3 증가합니다.\", kind = \"Power\", firstCardDamageBonus = 3, cardPlayedBlock = 1, class = \"thief\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 2, desc = \"힘을 1 얻습니다. 민첩을 1 얻습니다.\", kind = \"Power\", strength = 1, dex = 1, class = \"thief\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tShieldMastery = { name = \"실드 마스터리\", cost = 1, desc = \"방어도를 7 얻습니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 7, class = \"thief\", rarity = \"normal\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tThiefAgility = { name = \"시프 어질리티\", cost = 1, desc = \"방어도를 5 얻습니다. 이번 턴 동안 민첩을 1 얻습니다. 손의 다른 스킬 카드 1장이 교활해집니다.\", kind = \"Skill\", endTurnDexLoss = 1, block = 5, dex = 1, class = \"thief\", rarity = \"unique\", turnHandSlyCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tEdgeCarnival = { name = \"엣지 카니발\", cost = 1, desc = \"무작위 적에게 피해를 2만큼 4번 줍니다.\", kind = \"Attack\", damage = 2, class = \"thiefmaster\", rarity = \"unique\", hits = 4, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tMuspelHeim = { name = \"무스펠 하임\", cost = 1, desc = \"모든 적에게 피해를 4 줍니다. 이번 턴에 버린 카드 1장당 피해가 2 증가합니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 4, damagePerDiscardedThisTurn = 2, weak = 1, class = \"thiefmaster\", rarity = \"unique\", aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMesoExplosion = { name = \"메소 익스플로젼\", cost = 1, desc = \"피해를 2 줍니다. 이번 턴에 버린 카드 1장당 피해가 7 증가합니다. 방어도를 무시합니다.\", kind = \"Attack\", damage = 2, damagePerDiscardedThisTurn = 7, class = \"thiefmaster\", rarity = \"unique\", pierce = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDarkFlare = { name = \"다크 플레어\", cost = 1, desc = \"매 턴 모든 적에게 피해를 2 줍니다. 카드를 사용할 때마다 무작위 적에게 피해를 2 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 2, powerEffect = \"damagePerTurn\", value = 2, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tPickPocket = { name = \"픽 파킷\", cost = 1, desc = \"카드를 1장 뽑습니다. 카드를 1장 버리고, 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", draw = 1, gainEnergy = 1, discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowPartner = { name = \"쉐도우 파트너\", cost = 2, desc = \"카드를 1장 선택합니다. 다음 턴에 그 카드의 복사본 1장을 손에 넣습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnCopies = 1, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요.\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdvancedDarkSight = { name = \"어드밴스드 다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", intangible = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tIntoDarkness = { name = \"인투 다크니스\", cost = 1, desc = \"모든 적에게 약화를 1 부여합니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", weak = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, affectsAllEnemies = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tVenom = { name = \"베놈\", cost = 1, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독을 1 부여합니다. 적 턴 시작 시 독이 한 번 더 적용됩니다.\", kind = \"Power\", attackPoison = 1, class = \"thiefmaster\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tGrid = { name = \"그리드\", cost = 2, desc = \"가시를 3 얻습니다. 카드를 사용할 때마다 방어도를 1 얻습니다.\", kind = \"Power\", thorns = 3, cardPlayedBlock = 1, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tRadicalDarkness = { name = \"래디컬 다크니스\", cost = 2, desc = \"카드를 1장 뽑습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShurikenBurst = { name = \"슈리켄 버스트\", cost = 1, desc = \"무작위 적에게 피해를 3씩 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"assassin\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tWindTalisman = { name = \"윈드 탈리스만\", cost = 1, desc = \"카드를 1장 뽑습니다. 이번 턴 동안 스킬 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", draw = 1, skillCostReductionThisTurn = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMarkOfAssassin = { name = \"마크 오브 어쌔신\", cost = 1, desc = \"약화 1을 부여합니다. 약화 상태의 적에게 주는 공격 피해가 1.5배가 됩니다.\", kind = \"Power\", weak = 1, class = \"assassin\", rarity = \"unique\", attackDamageVsWeakMultiplier = 1.5, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowRush = { name = \"쉐도우 러쉬\", cost = 1, desc = \"피해 7, 방어도 5를 얻습니다.\", kind = \"Attack\", damage = 7, block = 5, class = \"assassin\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShadowLeap = { name = \"쉐도우 리프\", cost = 0, desc = \"방어도 4를 얻습니다. 다음 턴에 방어도 4를 얻습니다. 소멸.\", kind = \"Skill\", block = 4, class = \"assassin\", rarity = \"normal\", nextTurnBlock = 4, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tShadowBlink = { name = \"쉐도우 블링크\", cost = 1, desc = \"무형 1을 얻습니다. 다음 스킬 카드의 비용이 0이 됩니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"assassin\", rarity = \"unique\", nextSkillCostZero = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tJavelinMastery = { name = \"자벨린 마스터리\", cost = 1, desc = \"표창의 피해량이 2 증가합니다.\", kind = \"Power\", class = \"assassin\", rarity = \"unique\", shivDamageBonus = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tJavelinAcceleration = { name = \"자벨린 액셀레이션\", cost = 1, desc = \"카드를 2장 뽑습니다. 카드를 1장 버립니다. 표창 1장을 손에 넣습니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"normal\", draw = 2, discard = 1, addShiv = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tCriticalThrow = { name = \"크리티컬 스로우\", cost = 1, desc = \"피해를 6씩 2번 줍니다. 방어도를 무시합니다. 이번 턴 첫 카드라면 피해가 더 강해집니다.\", kind = \"Attack\", damage = 6, firstCardDamageBonus = 2, class = \"assassin\", rarity = \"unique\", hits = 2, pierce = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tAssassinPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 2, desc = \"힘 1, 민첩 1을 얻고 카드를 1장 뽑습니다.\", kind = \"Power\", strength = 1, dex = 1, class = \"assassin\", rarity = \"normal\", draw = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tTripleThrow = { name = \"트리플 스로우\", cost = 1, desc = \"피해를 4씩 3번 줍니다.\", kind = \"Attack\", damage = 4, class = \"hermit\", rarity = \"normal\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShurikenChallenge = { name = \"슈리켄 챌린지\", cost = 1, desc = \"피해를 5씩 2번 줍니다. 다음 턴에 카드를 1장 더 뽑습니다.\", kind = \"Attack\", damage = 5, class = \"hermit\", rarity = \"unique\", hits = 2, nextTurnDraw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitDarkFlare = { name = \"다크 플레어\", cost = 2, desc = \"매 턴 모든 적에게 피해 3을 줍니다. 턴 시작마다 표창 1장을 손에 넣습니다.\", kind = \"Power\", powerEffect = \"damagePerTurn\", value = 3, class = \"hermit\", rarity = \"unique\", turnStartShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitShadowPartner = { name = \"쉐도우 파트너\", cost = 2, desc = \"카드를 1장 뽑습니다. 다음 턴 공격 카드의 피해가 2배가 됩니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpiritJavelin = { name = \"스피릿 자벨린\", cost = 1, desc = \"표창이 턴 종료 시 사라지지 않습니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", firstShivDamageBonus = 4, shivRetain = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitRadicalDarkness = { name = \"래디컬 다크니스\", cost = 1, desc = \"방어도 4를 얻습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 소멸.\", kind = \"Skill\", block = 4, blockGainMultiplier = 2, class = \"hermit\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitVenom = { name = \"베놈\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독 1을 부여합니다. 전투 중 독 부여 3회마다 모든 적에게 피해 8을 줍니다.\", kind = \"Power\", attackPoison = 1, class = \"hermit\", rarity = \"legend\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 8, image = \"19361e72087946b1888684185b40d935\" },\n\tSkilledJavelin = { name = \"숙련된 표창술\", cost = 1, desc = \"표창의 피해량이 2 증가합니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", shivDamageBonus = 2, firstShivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"에너지를 1 얻고 카드를 1장 뽑습니다. 표창 1장을 손에 넣습니다. 소멸.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, gainEnergy = 1, addShiv = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n}\nself.CardFrames = {\n\twarrior = { normal = \"4bb57ef88ef449fdaf958f6cf37fe44b\", unique = \"4f71c124c8bc4e13b5e9fad392995f68\", legend = \"6d741a60c60743cb98ee740a1e2dbfed\" },\n\tmagician = { normal = \"d788d09f6f50467ebc67f01dec45f9e2\", unique = \"f5def2e8022b4e59a17d3c16414034fe\", legend = \"cff71f2e472041ce80c6fbd296f42e2d\" },\n\trogue = { normal = \"9487b06867bc46269ed1d855420f457f\", unique = \"b3081fb2fb1445fa90b12b01481a78ef\", legend = \"c357d2daf31a489d95b8fa47e50dd879\" },\n}\nself.ClassToFrame = {\n\twarrior = \"warrior\",\n\tfighter = \"warrior\",\n\tpage = \"warrior\",\n\tspearman = \"warrior\",\n\tmagician = \"magician\",\n\tfirepoison = \"magician\",\n\ticelightning = \"magician\",\n\tcleric = \"magician\",\n\tcurse = \"rogue\",\n\tshiv = \"rogue\",\n\trogue = \"rogue\",\n\tassassin = \"rogue\",\n\thermit = \"rogue\",\n\tthief = \"rogue\",\n\tthiefmaster = \"rogue\",\n}\nself.NodeIcons = {\n\tcombat = \"f98db6823e894a4f90308d61f75894ac\",\n\telite = \"793ed8a757534b89a82f460747d2df24\",\n\tboss = \"423056cdbbc04f4da131b9721c404d96\",\n\tshop = \"da37e1fac55d455b9ade08569f09f798\",\n\trest = \"b86c1b0568bd45f3ae4a4b97e1b4a594\",\n\ttreasure = \"f8a6d58e20f54e2ca899485055df1ce4\",\n}\nself.ClassPortraits = {\n\twarrior = \"28c88fdc5ab44f34a8b3fc1e19d4ce78\",\n\tmagician = \"3b9ea1f066a744bb859df47fef817277\",\n\trogue = \"efa920e58d31426486ef974106e7dc8b\",\n}\nself.SoulShopDef = {\n\t{ key = \"meso\", name = \"두둑한 지갑\", desc = \"런 시작 시 메소 +60\", cost = 3 },\n\t{ key = \"hp\", name = \"단련된 육체\", desc = \"시작 최대 HP +15\", cost = 4 },\n\t{ key = \"trim\", name = \"덱 정제\", desc = \"시작 덱에서 기본 카드 1장 제거\", cost = 5 },\n\t{ key = \"relic\", name = \"유물 수집가\", desc = \"런 시작 시 유물 1개 추가\", cost = 6 },\n}\nself.SoulUnlocks = {}\nself.SoulPoints = self.SoulPoints or 0\nlocal uiTries = 0\nlocal uiInit = 0\nuiInit = _TimerService:SetTimerRepeat(function()\n\tuiTries = uiTries + 1\n\tif _EntityService:GetEntityByPath(\"/ui/DeckUIGroup\") ~= nil then\n\t\tself:ActivateUIGroups()\n\t\t-- MainMenu는 한동안 비활성화: 시작 시 바로 로비로 진입.\n\t\t-- 추후 싱글/멀티/종료 선택 메뉴가 필요하면 self:ShowMainMenu()로 되돌린다(메서드·UI 유지됨).\n\t\tself:ShowLobby()\n\t\t_TimerService:ClearTimer(uiInit)\n\telseif uiTries > 80 then\n\t\t_TimerService:ClearTimer(uiInit)\n\tend\nend, 0.1)\nlocal lp = _UserService.LocalPlayer\nif lp ~= nil then\n\tself:ReqLoadAscension(lp.PlayerComponent.UserId)\n\tself:ReqLoadSouls(lp.PlayerComponent.UserId)\nend\n_InputService:ConnectEvent(KeyDownEvent, function(e)\n\tif e.key == KeyboardKey.LeftControl then\n\t\tself.DebugCtrlDown = true\n\t\tlocal lp2 = _UserService.LocalPlayer\n\t\tif lp2 ~= nil and lp2.CurrentMapName == \"lobby\" and self.RunActive ~= true then\n\t\t\tself:PlayerAttackMotion()\n\t\tend\n\telseif e.key == KeyboardKey.LeftShift or e.key == KeyboardKey.RightShift then\n\t\tself.DebugShiftDown = true\n\telseif e.key == KeyboardKey.C then\n\t\tif self.DebugCtrlDown == true and self.DebugShiftDown == true then\n\t\t\tself:OpenDebugCardPicker()\n\t\tend\n\telseif e.key == KeyboardKey.E then\n\t\tif self.DebugCtrlDown == true and self.DebugShiftDown == true then\n\t\t\tself:CheatFillEnergy()\n\t\tend\n\tend\nend)\n_InputService:ConnectEvent(KeyUpEvent, function(e)\n\tif e.key == KeyboardKey.LeftControl then\n\t\tself.DebugCtrlDown = false\n\telseif e.key == KeyboardKey.LeftShift or e.key == KeyboardKey.RightShift then\n\t\tself.DebugShiftDown = false\n\tend\nend)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1852,7 +1852,7 @@ "Name": null }, "Arguments": [], - "Code": "if self.SelectedClass == \"magician\" then\n\tself.PlayerMaxHp = 70\nself.RunDeck = { \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicClaw\" }\nelseif self.SelectedClass == \"rogue\" then\n\tself.PlayerMaxHp = 70\n\tself.RunDeck = { \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"Neutralize\", \"Survivor\" }\nelse\n\tself.PlayerMaxHp = 80\n\tself.RunDeck = { \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Defend\", \"Defend\", \"Defend\", \"Defend\", \"Bash\" }\nend\nself.PlayerMaxHp = self.PlayerMaxHp - self:AscStartHpPenalty()\nself.PlayerHp = self.PlayerMaxHp\nself.Gold = 0\nself.Floor = 1\nself.RunLength = 5\nself.RunActive = true\nself.RunRelics = {}\nself.RunPotions = {}\nself.PotionSlots = 3\nself.Potions = {\n\tredPotion = { name = \"빨간 포션\", desc = \"HP 20 회복\", effect = \"heal\", value = 20, icon = \"393e2a0d8da544899eaa8b22c97f832b\" },\n\tfirebomb = { name = \"화염병\", desc = \"적에게 피해 20\", effect = \"damage\", value = 20, icon = \"7ddb464c2574456289a4eb72ce86f193\" },\n\twarriorElixir = { name = \"전사의 물약\", desc = \"힘 +2\", effect = \"strength\", value = 2, icon = \"7cfbd410581e4073815daaf5f3e6c72f\" },\n\tguardPotion = { name = \"수호의 물약\", desc = \"방어도 +12\", effect = \"block\", value = 12, icon = \"8f8402dfa0f746e18bf606ed74302c0a\" },\n\tmanaElixir = { name = \"마나 엘릭서\", desc = \"에너지 +2\", effect = \"energy\", value = 2, icon = \"ec2778c366f6477ab0f8e7f06bcd73f4\" },\n\tcursedVial = { name = \"저주의 병\", desc = \"적에게 약화 3\", effect = \"weak\", value = 3, icon = \"a9a2763fdb6849dcba3028c737487680\" },\n}\nself.Relics = {\n\tironHeart = { name = \"강철 심장\", desc = \"전투 시작 시 방어도 +6\", hook = \"combatStart\", effect = \"block\", value = 6, icon = \"e555b3a62f3c49dbb2c53784e6bd481f\" },\n\tenergyCore = { name = \"에너지 코어\", desc = \"턴 시작 시 에너지 +1\", hook = \"turnStart\", effect = \"energy\", value = 1, icon = \"a41014f28b47434ab9f49ef104523862\" },\n\tvampire = { name = \"흡혈 송곳니\", desc = \"공격 카드 사용 시 HP +1\", hook = \"cardPlayed\", effect = \"healOnAttack\", value = 1, icon = \"ed64cde7e6c44b9e99502847e54f04e9\" },\n\tgoldIdol = { name = \"황금 우상\", desc = \"전투 승리 시 메소 +10\", hook = \"combatReward\", effect = \"gold\", value = 10, icon = \"03bb05c92b8f45edb0f3dad2e118fd5a\" },\n\tpotionBelt = { name = \"장인의 벨트\", desc = \"물약 슬롯이 5칸으로 늘어난다\", hook = \"passive\", effect = \"potionSlots\", value = 5, icon = \"36725b4566ac40d4902e2ab2113c2096\" },\n\tburningBlood = { name = \"자쿰의 투구\", desc = \"전투 승리 시 HP 6 회복\", hook = \"combatEnd\", effect = \"healOnWin\", value = 6, icon = \"07f994825ce34131b419d43e890c878d\" },\n\tvajra = { name = \"미스릴 해머\", desc = \"전투 시작 시 힘 +1\", hook = \"combatStart\", effect = \"strength\", value = 1, icon = \"59d2579d46dc41d590a9e6b141ad458b\" },\n\tanchor = { name = \"메이플 실드\", desc = \"첫 턴 방어도 +10\", hook = \"combatStart\", effect = \"block\", value = 10, icon = \"6349413e08cc49848862591863d056a0\" },\n\tbagOfPrep = { name = \"모험가의 배낭\", desc = \"첫 턴 드로우 +2\", hook = \"combatStart\", effect = \"draw\", value = 2, icon = \"77b240cb8af245b4801a714380267ae9\" },\n\tbloodVial = { name = \"피의 목걸이\", desc = \"전투 시작 시 HP 2 회복\", hook = \"combatStart\", effect = \"heal\", value = 2, icon = \"c782e949506a42c49eb139c7e65527d7\" },\n\tbronzeScales = { name = \"브론즈 체인메일\", desc = \"피격 시 공격자에게 3 반사\", hook = \"onPlayerDamaged\", effect = \"thorns\", value = 3, icon = \"87272346b145412391622cf803f888d1\" },\n\tstrawberry = { name = \"건강의 반지\", desc = \"획득 시 최대 HP +7\", hook = \"passive\", effect = \"maxHp\", value = 7, icon = \"58f643e29c354c2783a5ce9a72ec155c\" },\n\tpenNib = { name = \"황금 깃펜\", desc = \"10번째 공격마다 피해 2배\", hook = \"attackCalc\", effect = \"penNib\", value = 10, icon = \"4d38d721cc064d14b31b9e9a92754139\" },\n\tboot = { name = \"브론즈 부츠\", desc = \"5 미만 공격 피해가 5로\", hook = \"attackCalc\", effect = \"boot\", value = 5, icon = \"d572b3aa4dac4162aa0d9e551b055dce\" },\n\takabeko = { name = \"황소 투구\", desc = \"전투 첫 공격 피해 +8\", hook = \"attackCalc\", effect = \"akabeko\", value = 8, icon = \"eb3330a6e2274eff958639f8792119d3\" },\n\tcentennialPuzzle = { name = \"백년의 부적\", desc = \"전투 첫 피격 시 드로우 3\", hook = \"onPlayerDamaged\", effect = \"firstLossDraw\", value = 3, icon = \"cfe5ed6556b944fc83ab58b774bb2b73\" },\n\tmeatOnBone = { name = \"고기 망치\", desc = \"승리 시 HP 50% 이하면 12 회복\", hook = \"combatEnd\", effect = \"healIfLow\", value = 12, icon = \"a93e8e87f184411c98c96b877d9f8b10\" },\n\tselfFormingClay = { name = \"점토 갑옷\", desc = \"피해를 받으면 다음 턴 방어 +3\", hook = \"onPlayerDamaged\", effect = \"clayBlock\", value = 3, icon = \"bb446793c5204d5db7d33563fe79f648\" },\n\tchampionBelt = { name = \"챔피언 벨트\", desc = \"취약 부여 시 약화 1 추가\", hook = \"cardDebuff\", effect = \"vulnAddsWeak\", value = 1, icon = \"7ca8c63026034113a561d6adf679fed2\" },\n}\nself.RelicPool = { \"energyCore\", \"vampire\", \"goldIdol\", \"potionBelt\", \"burningBlood\", \"vajra\", \"anchor\", \"bagOfPrep\", \"bloodVial\", \"bronzeScales\", \"strawberry\", \"penNib\", \"boot\", \"akabeko\", \"centennialPuzzle\", \"meatOnBone\", \"selfFormingClay\", \"championBelt\" }\nself.Enemies = {\n\tslime = { name = \"슬라임\", maxHp = 45, intents = { { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 8 } } },\n\tslime_elite = { name = \"정예 슬라임\", maxHp = 70, intents = { { kind = \"Attack\", value = 14 }, { kind = \"Attack\", value = 8 }, { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tslime_boss = { name = \"슬라임 킹\", maxHp = 120, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 12 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 22 } } },\n\torange_mushroom = { name = \"주황버섯\", maxHp = 16, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 4 }, { kind = \"Attack\", value = 8 } } },\n\tblue_mushroom = { name = \"파란버섯\", maxHp = 22, intents = { { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 10 }, { kind = \"AddCard\", value = 0, card = \"Wound\", count = 1 } } },\n\tpig = { name = \"돼지\", maxHp = 18, intents = { { kind = \"Attack\", value = 6 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 5 } } },\n\tgreen_mushroom = { name = \"초록버섯\", maxHp = 20, intents = { { kind = \"Attack\", value = 7 }, { kind = \"Defend\", value = 3 }, { kind = \"Attack\", value = 9 } } },\n\tred_snail = { name = \"빨간 달팽이\", maxHp = 14, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 6 }, { kind = \"Attack\", value = 7 } } },\n\tstump = { name = \"나무토막\", maxHp = 19, intents = { { kind = \"Defend\", value = 5 }, { kind = \"Attack\", value = 8 }, { kind = \"Attack\", value = 6 } } },\n\tmushmom = { name = \"머쉬맘\", maxHp = 75, intents = { { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 2, effect = \"weak\" }, { kind = \"Attack\", value = 16 }, { kind = \"Attack\", value = 9 }, { kind = \"Defend\", value = 6 }, { kind = \"AddCard\", value = 0, card = \"Burn\", count = 1 } } },\n\tmodified_snail = { name = \"변형된 달팽이\", maxHp = 60, intents = { { kind = \"Attack\", value = 12 }, { kind = \"Defend\", value = 8 }, { kind = \"Attack\", value = 7 }, { kind = \"Attack\", value = 14 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tking_slime = { name = \"킹 슬라임\", maxHp = 130, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 14 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 12 }, { kind = \"Attack\", value = 24 } } },\n\toctopus = { name = \"문어\", maxHp = 15, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 4 } } },\n\tkapa_drake = { name = \"카파 드레이크\", maxHp = 24, intents = { { kind = \"Attack\", value = 9 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 6 }, { kind = \"Attack\", value = 11 } } },\n\tjunior_neki = { name = \"주니어 네키\", maxHp = 18, intents = { { kind = \"Attack\", value = 6 }, { kind = \"Attack\", value = 8 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tjunior_bugi = { name = \"주니어 부기\", maxHp = 20, intents = { { kind = \"Attack\", value = 7 }, { kind = \"Defend\", value = 5 }, { kind = \"Attack\", value = 9 } } },\n\tdile = { name = \"다일\", maxHp = 65, intents = { { kind = \"Attack\", value = 13 }, { kind = \"Defend\", value = 9 }, { kind = \"Attack\", value = 8 }, { kind = \"Attack\", value = 16 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tmano = { name = \"마노\", maxHp = 80, intents = { { kind = \"Defend\", value = 12 }, { kind = \"Attack\", value = 14 }, { kind = \"Debuff\", value = 1, effect = \"vuln\" }, { kind = \"Attack\", value = 10 }, { kind = \"AddCard\", value = 0, card = \"Wound\", count = 1 } } },\n}\nself.CurrentNodeId = \"\"\nself.CurrentEnemyId = \"\"\nself.PlayerJob = \"\"\nself.Jobs = {\n\twarrior = {\n\t\t{ id = \"fighter\", name = \"파이터\", desc = \"공격 특화\\n콤보 어택 · 버서크\\n라이징 어택\", starter = \"ComboAttack\", tier = 2, parent = \"warrior\" },\n\t\t{ id = \"page\", name = \"페이지\", desc = \"속성 차지 특화\\n썬더/블리자드 차지\\n파워 가드\", starter = \"ThunderCharge\", tier = 2, parent = \"warrior\" },\n\t\t{ id = \"spearman\", name = \"스피어맨\", desc = \"방어·관통 특화\\n피어스 · 아이언 월\\n하이퍼 바디\", starter = \"Pierce\", tier = 2, parent = \"warrior\" },\n\t},\n\tmagician = {\n\t\t{ id = \"firepoison\", name = \"위자드(불·독)\", desc = \"화염·독 특화\\n파이어 애로우\\n포이즌 브레스 · 앰플\", starter = \"FireArrow\", tier = 2, parent = \"magician\" },\n\t\t{ id = \"icelightning\", name = \"위자드(썬·콜)\", desc = \"광역·빙결 특화\\n썬더 볼트(전체)\\n콜드 빔 · 칠링 스텝\", starter = \"ThunderBolt\", tier = 2, parent = \"magician\" },\n\t\t{ id = \"cleric\", name = \"클레릭\", desc = \"회복·축복 특화\\n힐 · 블레스\\n홀리 애로우\", starter = \"Heal\", tier = 2, parent = \"magician\" },\n\t},\n\trogue = {\n\t\t{ id = \"assassin\", name = \"Assassin\", desc = \"표창 중심 전직\\n단일 화력과 독 압박\\n빠른 마무리\", starter = \"DeadlyPoison\", tier = 2, parent = \"rogue\" },\n\t\t{ id = \"thief\", name = \"Thief\", desc = \"단검 중심 전직\\n드로우와 운영 강화\\n빠른 연계\", starter = \"Acrobatics\", tier = 2, parent = \"rogue\" },\n\t},\n\tassassin = {\n\t\t{ id = \"hermit\", name = \"Hermit\", desc = \"Assassin의 3차 전직\\n표창과 독 운영 심화\\n누적 압박 강화\", starter = \"NoxiousFumes\", tier = 3, parent = \"assassin\" },\n\t},\n\tthief = {\n\t\t{ id = \"thiefmaster\", name = \"Thief Master\", desc = \"Thief의 3차 전직\\n단검 운영 심화\\n드로우와 템포 강화\", starter = \"ToolsOfTheTrade\", tier = 3, parent = \"thief\" },\n\t},\n}\nself.JobMeta = {\n\tfighter = { name = \"파이터\", starter = \"ComboAttack\", tier = 2, parent = \"warrior\", sourceClass = \"warrior\" },\n\tpage = { name = \"페이지\", starter = \"ThunderCharge\", tier = 2, parent = \"warrior\", sourceClass = \"warrior\" },\n\tspearman = { name = \"스피어맨\", starter = \"Pierce\", tier = 2, parent = \"warrior\", sourceClass = \"warrior\" },\n\tfirepoison = { name = \"위자드(불·독)\", starter = \"FireArrow\", tier = 2, parent = \"magician\", sourceClass = \"magician\" },\n\ticelightning = { name = \"위자드(썬·콜)\", starter = \"ThunderBolt\", tier = 2, parent = \"magician\", sourceClass = \"magician\" },\n\tcleric = { name = \"클레릭\", starter = \"Heal\", tier = 2, parent = \"magician\", sourceClass = \"magician\" },\n\tassassin = { name = \"Assassin\", starter = \"DeadlyPoison\", tier = 2, parent = \"rogue\", sourceClass = \"rogue\" },\n\tthief = { name = \"Thief\", starter = \"Acrobatics\", tier = 2, parent = \"rogue\", sourceClass = \"rogue\" },\n\thermit = { name = \"Hermit\", starter = \"NoxiousFumes\", tier = 3, parent = \"assassin\", sourceClass = \"assassin\" },\n\tthiefmaster = { name = \"Thief Master\", starter = \"ToolsOfTheTrade\", tier = 3, parent = \"thief\", sourceClass = \"thief\" },\n}\nself.ClassGroups = {\n\twarrior = { \"warrior\", \"fighter\", \"page\", \"spearman\" },\n\tmagician = { \"magician\", \"firepoison\", \"icelightning\", \"cleric\" },\n\trogue = { \"rogue\", \"assassin\", \"hermit\", \"thief\", \"thiefmaster\" },\n}\nself.ClassLineages = {\n\twarrior = { \"warrior\" },\n\tfighter = { \"warrior\", \"fighter\" },\n\tpage = { \"warrior\", \"page\" },\n\tspearman = { \"warrior\", \"spearman\" },\n\tmagician = { \"magician\" },\n\tfirepoison = { \"magician\", \"firepoison\" },\n\ticelightning = { \"magician\", \"icelightning\" },\n\tcleric = { \"magician\", \"cleric\" },\n\trogue = { \"rogue\" },\n\tassassin = { \"rogue\", \"assassin\" },\n\thermit = { \"rogue\", \"assassin\", \"hermit\" },\n\tthief = { \"rogue\", \"thief\" },\n\tthiefmaster = { \"rogue\", \"thief\", \"thiefmaster\" },\n}\nself.CardFrames = {\n\twarrior = { normal = \"4bb57ef88ef449fdaf958f6cf37fe44b\", unique = \"4f71c124c8bc4e13b5e9fad392995f68\", legend = \"6d741a60c60743cb98ee740a1e2dbfed\" },\n\tmagician = { normal = \"d788d09f6f50467ebc67f01dec45f9e2\", unique = \"f5def2e8022b4e59a17d3c16414034fe\", legend = \"cff71f2e472041ce80c6fbd296f42e2d\" },\n\trogue = { normal = \"9487b06867bc46269ed1d855420f457f\", unique = \"b3081fb2fb1445fa90b12b01481a78ef\", legend = \"c357d2daf31a489d95b8fa47e50dd879\" },\n}\nself.ClassToFrame = {\n\twarrior = \"warrior\",\n\tfighter = \"warrior\",\n\tpage = \"warrior\",\n\tspearman = \"warrior\",\n\tmagician = \"magician\",\n\tfirepoison = \"magician\",\n\ticelightning = \"magician\",\n\tcleric = \"magician\",\n\tcurse = \"rogue\",\n\tshiv = \"rogue\",\n\trogue = \"rogue\",\n\tassassin = \"rogue\",\n\thermit = \"rogue\",\n\tthief = \"rogue\",\n\tthiefmaster = \"rogue\",\n}\nself.NodeIcons = {\n\tcombat = \"f98db6823e894a4f90308d61f75894ac\",\n\telite = \"793ed8a757534b89a82f460747d2df24\",\n\tboss = \"423056cdbbc04f4da131b9721c404d96\",\n\tshop = \"da37e1fac55d455b9ade08569f09f798\",\n\trest = \"b86c1b0568bd45f3ae4a4b97e1b4a594\",\n\ttreasure = \"f8a6d58e20f54e2ca899485055df1ce4\",\n}\nself.ClassPortraits = {\n\twarrior = \"28c88fdc5ab44f34a8b3fc1e19d4ce78\",\n\tmagician = \"3b9ea1f066a744bb859df47fef817277\",\n\trogue = \"efa920e58d31426486ef974106e7dc8b\",\n}\nself:GenerateMap()\nself:BindButtons()\nself:AddRelic(\"ironHeart\")\nself:ApplySoulUnlocks()\nself:RenderPotions()\nself:TeleportToActMap()\nself:ShowMap()", + "Code": "if self.SelectedClass == \"magician\" then\n\tself.PlayerMaxHp = 70\nself.RunDeck = { \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"EnergyBolt\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicGuard\", \"MagicClaw\" }\nelseif self.SelectedClass == \"rogue\" then\n\tself.PlayerMaxHp = 70\n\tself.RunDeck = { \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentStrike\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"SilentDefend\", \"Neutralize\", \"Survivor\" }\nelse\n\tself.PlayerMaxHp = 80\n\tself.RunDeck = { \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Strike\", \"Defend\", \"Defend\", \"Defend\", \"Defend\", \"Bash\" }\nend\nself.PlayerMaxHp = self.PlayerMaxHp - self:AscStartHpPenalty()\nself.PlayerHp = self.PlayerMaxHp\nself.Gold = 0\nself.Floor = 1\nself.RunLength = 5\nself.RunActive = true\nself.RunRelics = {}\nself.RunPotions = {}\nself.PotionSlots = 3\nself.Potions = {\n\tredPotion = { name = \"빨간 포션\", desc = \"HP 20 회복\", effect = \"heal\", value = 20, icon = \"393e2a0d8da544899eaa8b22c97f832b\" },\n\tfirebomb = { name = \"화염병\", desc = \"적에게 피해 20\", effect = \"damage\", value = 20, icon = \"7ddb464c2574456289a4eb72ce86f193\" },\n\twarriorElixir = { name = \"전사의 물약\", desc = \"힘 +2\", effect = \"strength\", value = 2, icon = \"7cfbd410581e4073815daaf5f3e6c72f\" },\n\tguardPotion = { name = \"수호의 물약\", desc = \"방어도 +12\", effect = \"block\", value = 12, icon = \"8f8402dfa0f746e18bf606ed74302c0a\" },\n\tmanaElixir = { name = \"마나 엘릭서\", desc = \"에너지 +2\", effect = \"energy\", value = 2, icon = \"ec2778c366f6477ab0f8e7f06bcd73f4\" },\n\tcursedVial = { name = \"저주의 병\", desc = \"적에게 약화 3\", effect = \"weak\", value = 3, icon = \"a9a2763fdb6849dcba3028c737487680\" },\n}\nself.Relics = {\n\tironHeart = { name = \"강철 심장\", desc = \"전투 시작 시 방어도 +6\", hook = \"combatStart\", effect = \"block\", value = 6, icon = \"e555b3a62f3c49dbb2c53784e6bd481f\" },\n\tenergyCore = { name = \"에너지 코어\", desc = \"턴 시작 시 에너지 +1\", hook = \"turnStart\", effect = \"energy\", value = 1, icon = \"a41014f28b47434ab9f49ef104523862\" },\n\tvampire = { name = \"흡혈 송곳니\", desc = \"공격 카드 사용 시 HP +1\", hook = \"cardPlayed\", effect = \"healOnAttack\", value = 1, icon = \"ed64cde7e6c44b9e99502847e54f04e9\" },\n\tgoldIdol = { name = \"황금 우상\", desc = \"전투 승리 시 메소 +10\", hook = \"combatReward\", effect = \"gold\", value = 10, icon = \"03bb05c92b8f45edb0f3dad2e118fd5a\" },\n\tpotionBelt = { name = \"장인의 벨트\", desc = \"물약 슬롯이 5칸으로 늘어난다\", hook = \"passive\", effect = \"potionSlots\", value = 5, icon = \"36725b4566ac40d4902e2ab2113c2096\" },\n\tburningBlood = { name = \"자쿰의 투구\", desc = \"전투 승리 시 HP 6 회복\", hook = \"combatEnd\", effect = \"healOnWin\", value = 6, icon = \"07f994825ce34131b419d43e890c878d\" },\n\tvajra = { name = \"미스릴 해머\", desc = \"전투 시작 시 힘 +1\", hook = \"combatStart\", effect = \"strength\", value = 1, icon = \"59d2579d46dc41d590a9e6b141ad458b\" },\n\tanchor = { name = \"메이플 실드\", desc = \"첫 턴 방어도 +10\", hook = \"combatStart\", effect = \"block\", value = 10, icon = \"6349413e08cc49848862591863d056a0\" },\n\tbagOfPrep = { name = \"모험가의 배낭\", desc = \"첫 턴 드로우 +2\", hook = \"combatStart\", effect = \"draw\", value = 2, icon = \"77b240cb8af245b4801a714380267ae9\" },\n\tbloodVial = { name = \"피의 목걸이\", desc = \"전투 시작 시 HP 2 회복\", hook = \"combatStart\", effect = \"heal\", value = 2, icon = \"c782e949506a42c49eb139c7e65527d7\" },\n\tbronzeScales = { name = \"브론즈 체인메일\", desc = \"피격 시 공격자에게 3 반사\", hook = \"onPlayerDamaged\", effect = \"thorns\", value = 3, icon = \"87272346b145412391622cf803f888d1\" },\n\tstrawberry = { name = \"건강의 반지\", desc = \"획득 시 최대 HP +7\", hook = \"passive\", effect = \"maxHp\", value = 7, icon = \"58f643e29c354c2783a5ce9a72ec155c\" },\n\tpenNib = { name = \"황금 깃펜\", desc = \"10번째 공격마다 피해 2배\", hook = \"attackCalc\", effect = \"penNib\", value = 10, icon = \"4d38d721cc064d14b31b9e9a92754139\" },\n\tboot = { name = \"브론즈 부츠\", desc = \"5 미만 공격 피해가 5로\", hook = \"attackCalc\", effect = \"boot\", value = 5, icon = \"d572b3aa4dac4162aa0d9e551b055dce\" },\n\takabeko = { name = \"황소 투구\", desc = \"전투 첫 공격 피해 +8\", hook = \"attackCalc\", effect = \"akabeko\", value = 8, icon = \"eb3330a6e2274eff958639f8792119d3\" },\n\tcentennialPuzzle = { name = \"백년의 부적\", desc = \"전투 첫 피격 시 드로우 3\", hook = \"onPlayerDamaged\", effect = \"firstLossDraw\", value = 3, icon = \"cfe5ed6556b944fc83ab58b774bb2b73\" },\n\tmeatOnBone = { name = \"고기 망치\", desc = \"승리 시 HP 50% 이하면 12 회복\", hook = \"combatEnd\", effect = \"healIfLow\", value = 12, icon = \"a93e8e87f184411c98c96b877d9f8b10\" },\n\tselfFormingClay = { name = \"점토 갑옷\", desc = \"피해를 받으면 다음 턴 방어 +3\", hook = \"onPlayerDamaged\", effect = \"clayBlock\", value = 3, icon = \"bb446793c5204d5db7d33563fe79f648\" },\n\tchampionBelt = { name = \"챔피언 벨트\", desc = \"취약 부여 시 약화 1 추가\", hook = \"cardDebuff\", effect = \"vulnAddsWeak\", value = 1, icon = \"7ca8c63026034113a561d6adf679fed2\" },\n}\nself.RelicPool = { \"energyCore\", \"vampire\", \"goldIdol\", \"potionBelt\", \"burningBlood\", \"vajra\", \"anchor\", \"bagOfPrep\", \"bloodVial\", \"bronzeScales\", \"strawberry\", \"penNib\", \"boot\", \"akabeko\", \"centennialPuzzle\", \"meatOnBone\", \"selfFormingClay\", \"championBelt\" }\nself.Enemies = {\n\tslime = { name = \"슬라임\", maxHp = 45, intents = { { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 8 } } },\n\tslime_elite = { name = \"정예 슬라임\", maxHp = 70, intents = { { kind = \"Attack\", value = 14 }, { kind = \"Attack\", value = 8 }, { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tslime_boss = { name = \"슬라임 킹\", maxHp = 120, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 12 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 10 }, { kind = \"Attack\", value = 22 } } },\n\torange_mushroom = { name = \"주황버섯\", maxHp = 16, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 4 }, { kind = \"Attack\", value = 8 } } },\n\tblue_mushroom = { name = \"파란버섯\", maxHp = 22, intents = { { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 4 }, { kind = \"Attack\", value = 10 }, { kind = \"AddCard\", value = 0, card = \"Wound\", count = 1 } } },\n\tpig = { name = \"돼지\", maxHp = 18, intents = { { kind = \"Attack\", value = 6 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 5 } } },\n\tgreen_mushroom = { name = \"초록버섯\", maxHp = 20, intents = { { kind = \"Attack\", value = 7 }, { kind = \"Defend\", value = 3 }, { kind = \"Attack\", value = 9 } } },\n\tred_snail = { name = \"빨간 달팽이\", maxHp = 14, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Defend\", value = 6 }, { kind = \"Attack\", value = 7 } } },\n\tstump = { name = \"나무토막\", maxHp = 19, intents = { { kind = \"Defend\", value = 5 }, { kind = \"Attack\", value = 8 }, { kind = \"Attack\", value = 6 } } },\n\tmushmom = { name = \"머쉬맘\", maxHp = 75, intents = { { kind = \"Defend\", value = 10 }, { kind = \"Debuff\", value = 2, effect = \"weak\" }, { kind = \"Attack\", value = 16 }, { kind = \"Attack\", value = 9 }, { kind = \"Defend\", value = 6 }, { kind = \"AddCard\", value = 0, card = \"Burn\", count = 1 } } },\n\tmodified_snail = { name = \"변형된 달팽이\", maxHp = 60, intents = { { kind = \"Attack\", value = 12 }, { kind = \"Defend\", value = 8 }, { kind = \"Attack\", value = 7 }, { kind = \"Attack\", value = 14 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tking_slime = { name = \"킹 슬라임\", maxHp = 130, intents = { { kind = \"Attack\", value = 18 }, { kind = \"Defend\", value = 14 }, { kind = \"Debuff\", value = 2, effect = \"vuln\" }, { kind = \"Attack\", value = 12 }, { kind = \"Attack\", value = 24 } } },\n\toctopus = { name = \"문어\", maxHp = 15, intents = { { kind = \"Attack\", value = 5 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 4 } } },\n\tkapa_drake = { name = \"카파 드레이크\", maxHp = 24, intents = { { kind = \"Attack\", value = 9 }, { kind = \"Attack\", value = 6 }, { kind = \"Defend\", value = 6 }, { kind = \"Attack\", value = 11 } } },\n\tjunior_neki = { name = \"주니어 네키\", maxHp = 18, intents = { { kind = \"Attack\", value = 6 }, { kind = \"Attack\", value = 8 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tjunior_bugi = { name = \"주니어 부기\", maxHp = 20, intents = { { kind = \"Attack\", value = 7 }, { kind = \"Defend\", value = 5 }, { kind = \"Attack\", value = 9 } } },\n\tdile = { name = \"다일\", maxHp = 65, intents = { { kind = \"Attack\", value = 13 }, { kind = \"Defend\", value = 9 }, { kind = \"Attack\", value = 8 }, { kind = \"Attack\", value = 16 }, { kind = \"Debuff\", value = 1, effect = \"weak\" } } },\n\tmano = { name = \"마노\", maxHp = 80, intents = { { kind = \"Defend\", value = 12 }, { kind = \"Attack\", value = 14 }, { kind = \"Debuff\", value = 1, effect = \"vuln\" }, { kind = \"Attack\", value = 10 }, { kind = \"AddCard\", value = 0, card = \"Wound\", count = 1 } } },\n}\nself.CurrentNodeId = \"\"\nself.CurrentEnemyId = \"\"\nself.PlayerJob = \"\"\nself.Jobs = {\n\twarrior = {\n\t\t{ id = \"fighter\", name = \"파이터\", desc = \"공격 특화\\n콤보 어택 · 버서크\\n라이징 어택\", starter = \"ComboAttack\", tier = 2, parent = \"warrior\" },\n\t\t{ id = \"page\", name = \"페이지\", desc = \"속성 차지 특화\\n썬더/블리자드 차지\\n파워 가드\", starter = \"ThunderCharge\", tier = 2, parent = \"warrior\" },\n\t\t{ id = \"spearman\", name = \"스피어맨\", desc = \"방어·관통 특화\\n피어스 · 아이언 월\\n하이퍼 바디\", starter = \"Pierce\", tier = 2, parent = \"warrior\" },\n\t},\n\tmagician = {\n\t\t{ id = \"firepoison\", name = \"위자드(불·독)\", desc = \"화염·독 특화\\n파이어 애로우\\n포이즌 브레스 · 앰플\", starter = \"FireArrow\", tier = 2, parent = \"magician\" },\n\t\t{ id = \"icelightning\", name = \"위자드(썬·콜)\", desc = \"광역·빙결 특화\\n썬더 볼트(전체)\\n콜드 빔 · 칠링 스텝\", starter = \"ThunderBolt\", tier = 2, parent = \"magician\" },\n\t\t{ id = \"cleric\", name = \"클레릭\", desc = \"회복·축복 특화\\n힐 · 블레스\\n홀리 애로우\", starter = \"Heal\", tier = 2, parent = \"magician\" },\n\t},\n\trogue = {\n\t\t{ id = \"assassin\", name = \"Assassin\", desc = \"표창 중심 전직\\n표창 생성과 연속 공격\\n빠른 마무리\", starter = \"JavelinAcceleration\", tier = 2, parent = \"rogue\" },\n\t\t{ id = \"thief\", name = \"Thief\", desc = \"단검 중심 전직\\n드로우와 운영 강화\\n빠른 연계\", starter = \"DaggerAcceleration\", tier = 2, parent = \"rogue\" },\n\t},\n\tassassin = {\n\t\t{ id = \"hermit\", name = \"Hermit\", desc = \"Assassin의 3차 전직\\n표창 생성과 강화 심화\\n연속 공격 완성\", starter = \"SpiritJavelin\", tier = 3, parent = \"assassin\" },\n\t},\n\tthief = {\n\t\t{ id = \"thiefmaster\", name = \"Thief Master\", desc = \"Thief의 3차 전직\\n단검·교활·중독 심화\\n연계 운영 완성\", starter = \"Venom\", tier = 3, parent = \"thief\" },\n\t},\n}\nself.JobMeta = {\n\tfighter = { name = \"파이터\", starter = \"ComboAttack\", tier = 2, parent = \"warrior\", sourceClass = \"warrior\" },\n\tpage = { name = \"페이지\", starter = \"ThunderCharge\", tier = 2, parent = \"warrior\", sourceClass = \"warrior\" },\n\tspearman = { name = \"스피어맨\", starter = \"Pierce\", tier = 2, parent = \"warrior\", sourceClass = \"warrior\" },\n\tfirepoison = { name = \"위자드(불·독)\", starter = \"FireArrow\", tier = 2, parent = \"magician\", sourceClass = \"magician\" },\n\ticelightning = { name = \"위자드(썬·콜)\", starter = \"ThunderBolt\", tier = 2, parent = \"magician\", sourceClass = \"magician\" },\n\tcleric = { name = \"클레릭\", starter = \"Heal\", tier = 2, parent = \"magician\", sourceClass = \"magician\" },\n\tassassin = { name = \"Assassin\", starter = \"JavelinAcceleration\", tier = 2, parent = \"rogue\", sourceClass = \"rogue\" },\n\tthief = { name = \"Thief\", starter = \"DaggerAcceleration\", tier = 2, parent = \"rogue\", sourceClass = \"rogue\" },\n\thermit = { name = \"Hermit\", starter = \"SpiritJavelin\", tier = 3, parent = \"assassin\", sourceClass = \"assassin\" },\n\tthiefmaster = { name = \"Thief Master\", starter = \"Venom\", tier = 3, parent = \"thief\", sourceClass = \"thief\" },\n}\nself.ClassGroups = {\n\twarrior = { \"warrior\", \"fighter\", \"page\", \"spearman\" },\n\tmagician = { \"magician\", \"firepoison\", \"icelightning\", \"cleric\" },\n\trogue = { \"rogue\", \"assassin\", \"hermit\", \"thief\", \"thiefmaster\" },\n}\nself.ClassLineages = {\n\twarrior = { \"warrior\" },\n\tfighter = { \"warrior\", \"fighter\" },\n\tpage = { \"warrior\", \"page\" },\n\tspearman = { \"warrior\", \"spearman\" },\n\tmagician = { \"magician\" },\n\tfirepoison = { \"magician\", \"firepoison\" },\n\ticelightning = { \"magician\", \"icelightning\" },\n\tcleric = { \"magician\", \"cleric\" },\n\trogue = { \"rogue\" },\n\tassassin = { \"rogue\", \"assassin\" },\n\thermit = { \"rogue\", \"assassin\", \"hermit\" },\n\tthief = { \"rogue\", \"thief\" },\n\tthiefmaster = { \"rogue\", \"thief\", \"thiefmaster\" },\n}\nself.CardFrames = {\n\twarrior = { normal = \"4bb57ef88ef449fdaf958f6cf37fe44b\", unique = \"4f71c124c8bc4e13b5e9fad392995f68\", legend = \"6d741a60c60743cb98ee740a1e2dbfed\" },\n\tmagician = { normal = \"d788d09f6f50467ebc67f01dec45f9e2\", unique = \"f5def2e8022b4e59a17d3c16414034fe\", legend = \"cff71f2e472041ce80c6fbd296f42e2d\" },\n\trogue = { normal = \"9487b06867bc46269ed1d855420f457f\", unique = \"b3081fb2fb1445fa90b12b01481a78ef\", legend = \"c357d2daf31a489d95b8fa47e50dd879\" },\n}\nself.ClassToFrame = {\n\twarrior = \"warrior\",\n\tfighter = \"warrior\",\n\tpage = \"warrior\",\n\tspearman = \"warrior\",\n\tmagician = \"magician\",\n\tfirepoison = \"magician\",\n\ticelightning = \"magician\",\n\tcleric = \"magician\",\n\tcurse = \"rogue\",\n\tshiv = \"rogue\",\n\trogue = \"rogue\",\n\tassassin = \"rogue\",\n\thermit = \"rogue\",\n\tthief = \"rogue\",\n\tthiefmaster = \"rogue\",\n}\nself.NodeIcons = {\n\tcombat = \"f98db6823e894a4f90308d61f75894ac\",\n\telite = \"793ed8a757534b89a82f460747d2df24\",\n\tboss = \"423056cdbbc04f4da131b9721c404d96\",\n\tshop = \"da37e1fac55d455b9ade08569f09f798\",\n\trest = \"b86c1b0568bd45f3ae4a4b97e1b4a594\",\n\ttreasure = \"f8a6d58e20f54e2ca899485055df1ce4\",\n}\nself.ClassPortraits = {\n\twarrior = \"28c88fdc5ab44f34a8b3fc1e19d4ce78\",\n\tmagician = \"3b9ea1f066a744bb859df47fef817277\",\n\trogue = \"efa920e58d31426486ef974106e7dc8b\",\n}\nself:GenerateMap()\nself:BindButtons()\nself:AddRelic(\"ironHeart\")\nself:ApplySoulUnlocks()\nself:RenderPotions()\nself:TeleportToActMap()\nself:ShowMap()", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1882,7 +1882,7 @@ "Name": null }, "Arguments": [], - "Code": "self:ShowState(\"combat\")\nself:KickCombatCamera()\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/Result\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/PotionMenu\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/TooltipBox\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/DiscardPrompt\", false)\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/Name\", self:JobLabel())\nself.MaxEnergy = 3\nself.Turn = 0\nself.PlayerBlock = 0\nself.BlockGainMultiplier = 1\nself.CardsDrawnThisCombat = 0\nself.HandCostZeroThisTurn = false\nself.DrawDisabledThisTurn = false\nself.NextSkillCostZero = false\nself.NextSkillRepeatCount = 0\nself.SkillCostReductionThisTurn = 0\nself.CombatCardCostReduction = {}\nself.SkillSlyOnPlayCards = {}\nself.TurnSkillSlyCards = {}\nself.ShivFirstDamageBonusUsed = false\nself.ActiveAttackDamageVsWeakMultiplier = 1\nself.DrawDamageThisTurn = 0\nself.DrawPoisonThisTurn = 0\nself.ShivAoeThisCombat = false\nself.PoisonApplicationsThisCombat = 0\nself.EnemyStrengthLossThisTurn = 0\nself.PlayerStr = 0\nself.PlayerDex = 0\nself.PlayerThorns = 0\nself.PlayerWeak = 0\nself.PlayerVuln = 0\nself.PlayerIntangible = 0\nself.BonusRewardScreens = 0\nself.ActiveKillReward = 0\nself.PlayerPowers = {}\nself.FightAttackCount = 0\nself.TurnAttackCardsPlayed = 0\nself.TurnDiscardedCards = 0\nself.TurnCardsPlayedThisTurn = 0\nself.DamageDealtThisTurn = 0\nself.DmgPopSeq = 0\nself.FirstHpLossDone = false\nself.ClayBlockNext = 0\nself.DiscardSelectRemaining = 0\nself.DiscardSelectTotal = 0\nself.DiscardPostShiv = 0\nself.DiscardShivPerPick = 0\nself.RetainSelectActive = false\nself.ReserveSelectActive = false\nself.NextTurnBlock = 0\nself.NextTurnDraw = 0\nself.NextTurnKeepBlock = false\nself.NextTurnAttackMultiplier = 1\nself.TurnAttackMultiplier = 1\nself.NextTurnSelectPrompt = \"\"\nself.NextTurnSelectCopies = 0\nself.NextTurnAddCards = {}\nself.CombatOver = false\nself.DiscardPile = {}\nself.ExhaustPile = {}\nself.Hand = {}\nself.Cards = {\n\tStrike = { name = \"파워 스트라이크\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tDefend = { name = \"아이언 바디\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tBash = { name = \"슬래시 블러스트\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10, class = \"warrior\", rarity = \"normal\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tWarLeap = { name = \"워 리프\", cost = 1, desc = \"피해 4, 방어도 3\", kind = \"Attack\", damage = 4, block = 3, class = \"warrior\", rarity = \"normal\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBrandish = { name = \"브랜디시\", cost = 2, desc = \"피해 13\", kind = \"Attack\", damage = 13, class = \"warrior\", rarity = \"unique\", fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tChargedBlow = { name = \"차지 블로우\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, firstCardDamageBonus = 2, vuln = 2, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tThreaten = { name = \"위협\", cost = 0, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"warrior\", rarity = \"normal\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEnrage = { name = \"인레이지\", cost = 1, desc = \"힘 +2\", kind = \"Skill\", strength = 2, class = \"warrior\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tRage = { name = \"분노\", cost = 1, desc = \"모든 적에게 피해를 4 줍니다.\", kind = \"Attack\", damage = 4, class = \"warrior\", rarity = \"legend\", aoe = true, image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 1, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBerserk = { name = \"버서크\", cost = 2, desc = \"매턴 에너지 +1, 취약 1 자가\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"fighter\", rarity = \"legend\", selfVuln = 1, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tRisingAttack = { name = \"라이징 어택\", cost = 2, desc = \"피해 12\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"115e309771604743853abad2d8d186bc\" },\n\tThunderCharge = { name = \"썬더 차지\", cost = 1, desc = \"피해 7, 약화 1\", kind = \"Attack\", damage = 7, weak = 1, class = \"page\", rarity = \"unique\", fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tBlizzardCharge = { name = \"블리자드 차지\", cost = 1, desc = \"피해 7, 취약 1\", kind = \"Attack\", damage = 7, vuln = 1, class = \"page\", rarity = \"unique\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tPowerGuard = { name = \"파워 가드\", cost = 1, desc = \"방어도 10\", kind = \"Skill\", block = 10, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPierce = { name = \"피어스\", cost = 1, desc = \"피해 9, 방어 무시\", kind = \"Attack\", damage = 9, class = \"spearman\", rarity = \"unique\", pierce = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tIronWall = { name = \"아이언 월\", cost = 2, desc = \"방어도 12\", kind = \"Skill\", block = 12, class = \"spearman\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHyperBody = { name = \"하이퍼 바디\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"spearman\", rarity = \"legend\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tEnergyBolt = { name = \"에너지 볼트\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"magician\", rarity = \"normal\", fx = \"1d5877e1120a42d0907f204c959888b1\", image = \"e84880eaf89442128d3af2be5c80a74f\" },\n\tMagicGuard = { name = \"매직 가드\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"magician\", rarity = \"normal\", image = \"01b249c26eb34b8aaab774bf221907a1\" },\n\tMagicClaw = { name = \"매직 클로\", cost = 1, desc = \"피해 3 × 2회\", kind = \"Attack\", damage = 3, class = \"magician\", rarity = \"normal\", hits = 2, fx = \"ba4ac7c8f24845b68b7e689b7effcc93\", image = \"f3fcac2d460041b288cc1973caaaf30f\" },\n\tTeleport = { name = \"텔레포트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"magician\", rarity = \"normal\", discardAll = true, drawPerDiscarded = 1, image = \"7f70a9dc7e304433bb8121dd9c4df98b\" },\n\tSlow = { name = \"슬로우\", cost = 1, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"magician\", rarity = \"normal\", image = \"7224cd3f9b7e497d9dd65f32a50865e4\" },\n\tFireArrow = { name = \"파이어 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"firepoison\", rarity = \"unique\", fx = \"4a937e208875468eb63d891806fba3cd\", image = \"6fa15fd3a0004b409ea516c11a67e533\" },\n\tPoisonBreath = { name = \"포이즌 브레스\", cost = 1, desc = \"독 4 부여\", kind = \"Skill\", class = \"firepoison\", rarity = \"unique\", poison = 4, image = \"07200f3c74854022baa7ebbefdc4ad8c\" },\n\tElementAmp = { name = \"엘레멘트 앰플\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"firepoison\", rarity = \"legend\", image = \"06865473977849bebe79062dbd608944\" },\n\tThunderBolt = { name = \"썬더 볼트\", cost = 2, desc = \"모든 적에게 피해 6\", kind = \"Attack\", damage = 6, class = \"icelightning\", rarity = \"legend\", aoe = true, fx = \"7d52f5e389bd4d44a30cf7cc54538f8f\", image = \"c6685d33cb2641f09d11cfa2d5cc820c\" },\n\tColdBeam = { name = \"콜드 빔\", cost = 2, desc = \"피해 7, 약화 2\", kind = \"Attack\", damage = 7, weak = 2, class = \"icelightning\", rarity = \"unique\", image = \"e8f7c148c79f497d83014e3361f59f5c\" },\n\tChillingStep = { name = \"칠링 스텝\", cost = 1, desc = \"방어도 8\", kind = \"Skill\", block = 8, class = \"icelightning\", rarity = \"unique\", image = \"bef20873a68a4651a91d74be457c2cfc\" },\n\tHeal = { name = \"힐\", cost = 1, desc = \"HP 10 회복\", kind = \"Skill\", class = \"cleric\", rarity = \"unique\", heal = 10, image = \"8b935b7d7066493cb462834bbe287c74\" },\n\tBless = { name = \"블레스\", cost = 1, desc = \"힘 +1, 방어도 5\", kind = \"Skill\", block = 5, strength = 1, class = \"cleric\", rarity = \"unique\", image = \"607fc5457c1c44a0993a5c2fe3fb0c68\" },\n\tHolyArrow = { name = \"홀리 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"cleric\", rarity = \"unique\", fx = \"4faa7b78e09643cf86339b8b7cf2abac\", image = \"a80127195bf7471f9545b70e491f4719\" },\n\tWound = { name = \"상처\", cost = 0, desc = \"사용할 수 없다. 손패를 막는 저주.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true },\n\tBurn = { name = \"화상\", cost = 0, desc = \"사용 불가. 손패에 있으면 턴 종료 시 피해 2.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true, endTurnDamage = 2 },\n\tNeutralize = { name = \"무력화\", cost = 0, desc = \"피해를 3 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 3, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSilentStrike = { name = \"타격\", cost = 1, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tSurvivor = { name = \"생존자\", cost = 1, desc = \"방어도를 8 얻습니다. 카드를 1장 버립니다.\", kind = \"Skill\", block = 8, class = \"rogue\", rarity = \"normal\", discard = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSilentDefend = { name = \"수비\", cost = 1, desc = \"방어도를 5 얻습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDoubleStab = { name = \"더블 스탭\", cost = 1, desc = \"피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tLuckySeven = { name = \"럭키 세븐\", cost = 1, desc = \"피해를 3만큼 3번 줍니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"unique\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHaste = { name = \"헤이스트\", cost = 1, desc = \"카드를 1장 뽑습니다. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", draw = 1, gainEnergy = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDarkSight = { name = \"다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"rogue\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tFlashJump = { name = \"플래시 점프\", cost = 0, desc = \"방어도를 4 얻습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", draw = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNimbleBody = { name = \"님블 바디\", cost = 1, desc = \"민첩을 1 얻습니다. 매 턴 방어도를 2 얻습니다.\", kind = \"Power\", dex = 1, powerEffect = \"blockPerTurn\", value = 2, class = \"rogue\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSlice = { name = \"칼질\", cost = 0, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShiv = { name = \"표창\", cost = 0, desc = \"피해를 4 줍니다. 소멸.\", kind = \"Attack\", damage = 4, class = \"shiv\", rarity = \"normal\", exhaust = true, token = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerSpray = { name = \"단검 분사\", cost = 1, desc = \"모든 적에게 피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", hits = 2, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerThrow = { name = \"단검 투척\", cost = 1, desc = \"피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Attack\", damage = 9, class = \"rogue\", rarity = \"normal\", drawUntilHandSize = 6, discard = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPoisonedStab = { name = \"독 찌르기\", cost = 1, desc = \"피해를 6 줍니다. 중독을 3 부여합니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", poison = 3, image = \"19361e72087946b1888684185b40d935\" },\n\tSuckerPunch = { name = \"불의의 일격\", cost = 1, desc = \"피해를 8 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 8, cardPlayedDamage = 2, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tLeadingStrike = { name = \"선제 타격\", cost = 1, desc = \"피해를 3 줍니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFollowThrough = { name = \"완수\", cost = 1, desc = \"피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.\", kind = \"Attack\", damage = 7, otherHandAtLeast = 5, bonusHitsWhenOtherHandAtLeast = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlickFlack = { name = \"재주넘기\", cost = 1, desc = \"교활. 모든 적에게 피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", sly = true, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tRicochet = { name = \"도탄\", cost = 2, desc = \"교활. 무작위 적에게 피해를 3만큼 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, sly = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPrepared = { name = \"예비\", cost = 0, desc = \"카드를 1장 버리고, 이번 턴에 준 피해만큼 방어를 얻습니다.\", kind = \"Skill\", blockPerDamageDealtThisTurn = 1, class = \"rogue\", rarity = \"normal\", discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAnticipate = { name = \"예측\", cost = 0, desc = \"이번 턴 동안 민첩을 2 얻습니다.\", kind = \"Skill\", dex = 2, class = \"rogue\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tDeflect = { name = \"튕겨내기\", cost = 0, desc = \"방어도를 4 얻습니다.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tBladeDance = { name = \"검무\", cost = 1, desc = \"표창을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", addShiv = 3, exhaust = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBackflip = { name = \"공중제비\", cost = 1, desc = \"방어도를 5 얻습니다. 카드를 2장 뽑습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", draw = 2, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDodgeAndRoll = { name = \"구르기\", cost = 1, desc = \"방어도를 4 얻습니다. 다음 턴에, 방어도를 4 얻습니다\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", nextTurnBlock = 4, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPiercingWail = { name = \"귀를 찢는 비명\", cost = 1, desc = \"이번 턴 동안 모든 적이 힘을 6 잃습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", draw = 1, affectsAllEnemies = true, enemyStrengthLossThisTurn = 6, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCloakAndDagger = { name = \"망토와 단검\", cost = 1, desc = \"방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Skill\", block = 6, class = \"rogue\", rarity = \"normal\", addShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDeadlyPoison = { name = \"맹독\", cost = 1, desc = \"중독을 5 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", poison = 5, image = \"19361e72087946b1888684185b40d935\" },\n\tSnakebite = { name = \"뱀 물기\", cost = 2, desc = \"보존. 중독을 7 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", poison = 7, retain = true, image = \"19361e72087946b1888684185b40d935\" },\n\tUntouchable = { name = \"범접 불가\", cost = 2, desc = \"교활. 방어도를 6 얻습니다.\", kind = \"Skill\", block = 6, class = \"rogue\", rarity = \"normal\", sly = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSkewer = { name = \"꼬챙이\", cost = 2, desc = \"피해를 8만큼 X번 줍니다.\", kind = \"Attack\", class = \"rogue\", rarity = \"unique\", draw = 1, useAllEnergy = true, xDamagePerEnergy = 8, image = \"92a5020c978c46bdabab910598118b86\" },\n\tBackstab = { name = \"배신\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 소멸.\", kind = \"Attack\", damage = 11, class = \"rogue\", rarity = \"unique\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPreciseCut = { name = \"정밀한 베기\", cost = 0, desc = \"피해를 13 줍니다. 손에 있는 다른 카드 1장당 피해량이 2 감소합니다.\", kind = \"Attack\", damage = 13, damagePerOtherHandCard = -2, class = \"rogue\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFinisher = { name = \"마무리\", cost = 1, desc = \"이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.\", kind = \"Attack\", damage = 0, damagePerAttackPlayedThisTurn = 6, class = \"rogue\", rarity = \"unique\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMementoMori = { name = \"메멘토 모리\", cost = 1, desc = \"피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.\", kind = \"Attack\", damage = 9, damagePerDiscardedThisTurn = 4, class = \"rogue\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStrangle = { name = \"목 조르기\", cost = 1, desc = \"피해를 8 줍니다.\", kind = \"Attack\", damage = 8, class = \"rogue\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlechettes = { name = \"프레췌\", cost = 1, desc = \"손에 있는 스킬 카드 1장당 피해를 5 줍니다.\", kind = \"Attack\", damage = 0, damagePerSkillInHand = 5, class = \"rogue\", rarity = \"unique\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPounce = { name = \"덮치기\", cost = 2, desc = \"피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.\", kind = \"Attack\", damage = 12, class = \"rogue\", rarity = \"unique\", nextSkillCostZero = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDash = { name = \"돌진\", cost = 2, desc = \"방어도를 10 얻습니다. 피해를 10 줍니다.\", kind = \"Attack\", damage = 10, block = 10, class = \"rogue\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPredator = { name = \"천적\", cost = 2, desc = \"피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.\", kind = \"Attack\", damage = 15, class = \"rogue\", rarity = \"unique\", nextTurnDraw = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPinpoint = { name = \"정밀 사격\", cost = 3, desc = \"피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.\", kind = \"Attack\", damage = 15, class = \"rogue\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tCalculatedGamble = { name = \"계산된 도박\", cost = 0, desc = \"손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", discardAll = true, drawPerDiscarded = 1, exhaust = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpose = { name = \"들춰내기\", cost = 0, desc = \"대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.\", kind = \"Skill\", vuln = 2, class = \"rogue\", rarity = \"unique\", affectsAllEnemies = true, removeEnemyBlock = true, removeEnemyArtifact = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHiddenDaggers = { name = \"숨겨진 단검\", cost = 0, desc = \"카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", discard = 2, addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tEscapePlan = { name = \"탈출구\", cost = 0, desc = \"카드를 1장 뽑습니다. 뽑은 카드가 스킬 카드라면, 방어도를 3 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 1, drawSkillBlock = 3, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tAcrobatics = { name = \"곡예\", cost = 1, desc = \"카드를 3장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 3, discard = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tHandTrick = { name = \"손기술\", cost = 1, desc = \"방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.\", kind = \"Skill\", block = 7, class = \"rogue\", rarity = \"unique\", turnHandSlyCount = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tMirage = { name = \"신기루\", cost = 1, desc = \"카드를 1장 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tExpertise = { name = \"전문성\", cost = 1, desc = \"손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", drawUntilHandSize = 6, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tBubbleBubble = { name = \"차오르는 독\", cost = 1, desc = \"적이 중독을 보유하고 있다면, 중독을 9 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 9, poisonIfTargetPoisoned = true, image = \"19361e72087946b1888684185b40d935\" },\n\tBlur = { name = \"흐릿함\", cost = 1, desc = \"방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"unique\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tLegSweep = { name = \"다리 걸기\", cost = 2, desc = \"약화를 2 부여합니다. 방어도를 11 얻습니다.\", kind = \"Skill\", block = 11, weak = 2, class = \"rogue\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tUpMySleeve = { name = \"비책\", cost = 2, desc = \"표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", addShiv = 3, combatCostReductionOnPlay = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBouncingFlask = { name = \"탄성 플라스크\", cost = 2, desc = \"무작위 적에게 중독을 3만큼 3번 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 3, poisonHits = 3, poisonRandomTargets = true, image = \"19361e72087946b1888684185b40d935\" },\n\tReflex = { name = \"반사신경\", cost = 3, desc = \"교활. 카드를 2장 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 2, sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tHaze = { name = \"아지랑이\", cost = 3, desc = \"교활. 모든 적에게 중독을 4 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", poison = 4, sly = true, image = \"19361e72087946b1888684185b40d935\" },\n\tTactician = { name = \"전략가\", cost = 3, desc = \"교활. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", gainEnergy = 1, sly = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tWellLaidPlans = { name = \"괜찮은 전략\", cost = 1, desc = \"내 턴 종료 시, 카드를 최대 1장까지 보존합니다.\", kind = \"Power\", powerEffect = \"retainOne\", value = 1, class = \"rogue\", rarity = \"unique\", image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tInfiniteBlades = { name = \"무한의 검날\", cost = 1, desc = \"내 턴 시작 시, 표창을 1장 손으로 가져옵니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", turnStartShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFootwork = { name = \"발놀림\", cost = 1, desc = \"민첩을 2 얻습니다.\", kind = \"Power\", dex = 2, class = \"rogue\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tOutbreak = { name = \"발병\", cost = 1, desc = \"독이 3번 부여될 때마다 모든 적에게 11 피해를 줍니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 11, image = \"19361e72087946b1888684185b40d935\" },\n\tNoxiousFumes = { name = \"유독 가스\", cost = 1, desc = \"내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.\", kind = \"Power\", powerEffect = \"poisonPerTurn\", value = 2, class = \"rogue\", rarity = \"unique\", poison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tAccuracy = { name = \"정밀\", cost = 1, desc = \"표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", shivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPhantomBlades = { name = \"환영검\", cost = 1, desc = \"표창이 보존을 얻습니다. 매 턴마다 처음으로 사용하는 표창의 피해량이 9 증가합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", firstShivDamageBonus = 9, shivRetain = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpeedster = { name = \"스피드스터\", cost = 2, desc = \"내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 2 줍니다.\", kind = \"Power\", class = \"rogue\", rarity = \"unique\", drawDamage = 2, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tGrandFinale = { name = \"대단원의 막\", cost = 0, desc = \"뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 60 줍니다.\", kind = \"Attack\", damage = 60, class = \"rogue\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tAssassinate = { name = \"암살\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.\", kind = \"Attack\", damage = 10, vuln = 1, class = \"rogue\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tEchoingSlash = { name = \"메아리 참격\", cost = 1, desc = \"모든 적에게 피해를 10 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.\", kind = \"Attack\", damage = 10, class = \"rogue\", rarity = \"legend\", repeatOnKill = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tTheHunt = { name = \"사냥\", cost = 1, desc = \"피해를 10 줍니다. 치명타라면, 카드 보상을 추가로 얻습니다. 소멸.\", kind = \"Attack\", damage = 10, rewardOnKill = 1, class = \"rogue\", rarity = \"legend\", exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMurder = { name = \"살해\", cost = 3, desc = \"피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.\", kind = \"Attack\", damage = 1, damagePerCardDrawnThisCombat = 1, class = \"rogue\", rarity = \"legend\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMalaise = { name = \"불쾌\", cost = 2, desc = \"에너지를 모두 사용하고, 사용한 에너지만큼 적에게 약화를 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", useAllEnergy = true, xWeakPerEnergy = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"에너지를 1 얻습니다. 카드를 2장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 2, gainEnergy = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tStormOfSteel = { name = \"강철의 폭풍\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", discardAll = true, addShivPerDiscard = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShadowStep = { name = \"그림자 걸음\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", discardAll = true, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShadowmeld = { name = \"그림자 은신\", cost = 1, desc = \"이번 턴 동안 얻는 방어도가 2배가 됩니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCorrosiveWave = { name = \"부식성 파도\", cost = 1, desc = \"이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", drawPoison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tBladeOfInk = { name = \"잉크 칼날\", cost = 1, desc = \"잉크투성이 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBurst = { name = \"폭주\", cost = 1, desc = \"이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 1, nextSkillRepeatCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKnifeTrap = { name = \"칼날 함정\", cost = 2, desc = \"카드를 1장 뽑습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", draw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBulletTime = { name = \"불릿 타임\", cost = 3, desc = \"이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", handCostZeroThisTurn = true, drawDisabledThisTurn = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNightmare = { name = \"악몽\", cost = 3, desc = \"카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", nextTurnCopies = 3, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tToolsOfTheTrade = { name = \"작업 도구\", cost = 1, desc = \"내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", turnStartDraw = 1, turnStartDiscard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAfterimage = { name = \"잔상\", cost = 1, desc = \"카드를 사용할 때마다, 방어도를 1 얻습니다.\", kind = \"Power\", cardPlayedBlock = 1, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAccelerant = { name = \"촉진제\", cost = 1, desc = \"적 턴 시작 시 독이 한 번 더 틱합니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tEnvenom = { name = \"독 바르기\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다, 중독을 1 부여합니다.\", kind = \"Power\", attackPoison = 1, class = \"rogue\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tMasterPlanner = { name = \"설계의 대가\", cost = 2, desc = \"사용한 스킬 카드는 교활해집니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", skillSlyOnPlay = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tTracking = { name = \"추적\", cost = 2, desc = \"약화 상태의 적이 공격 카드로 받는 피해가 2배가 됩니다.\", kind = \"Power\", class = \"rogue\", rarity = \"legend\", attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tFanOfKnives = { name = \"칼날 부채\", cost = 2, desc = \"표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"legend\", addShiv = 4, shivAoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSerpentForm = { name = \"구렁이의 형상\", cost = 3, desc = \"카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 4, class = \"rogue\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tAbrasive = { name = \"연마\", cost = 3, desc = \"교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.\", kind = \"Power\", dex = 1, thorns = 4, class = \"rogue\", rarity = \"legend\", sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSuppress = { name = \"진압\", cost = 0, desc = \"선천성. 피해를 11 줍니다. 약화를 3 부여합니다.\", kind = \"Attack\", damage = 11, weak = 3, class = \"rogue\", rarity = \"legend\", innate = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tWraithForm = { name = \"유령의 형상\", cost = 3, desc = \"불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.\", kind = \"Power\", intangible = 2, endTurnDexLoss = 1, class = \"rogue\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSavageBlow = { name = \"새비지 블로우\", cost = 1, desc = \"피해를 3만큼 2번 줍니다. 이번 턴에 사용한 공격 카드 1장당 피해가 2 증가합니다.\", kind = \"Attack\", damage = 3, damagePerAttackPlayedThisTurn = 2, class = \"thief\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tCriticalEdge = { name = \"크리티컬 엣지\", cost = 1, desc = \"카드를 1장 뽑습니다. 다음 턴에 공격 카드의 피해량이 2배가 됩니다. 보존.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 1, nextTurnAttackMultiplier = 2, retain = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tSteal = { name = \"스틸\", cost = 0, desc = \"피해를 3 줍니다. 이번 턴에 버린 카드 1장당 피해가 3 증가합니다. 에너지를 1 얻습니다.\", kind = \"Attack\", damage = 3, damagePerDiscardedThisTurn = 3, class = \"thief\", rarity = \"normal\", gainEnergy = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerAcceleration = { name = \"대거 액셀레이션\", cost = 0, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 카드를 1장 더 뽑고, 표창 1장을 손에 넣습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", draw = 1, discard = 1, drawPerDiscarded = 1, addShiv = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKarma = { name = \"카르마\", cost = 1, desc = \"피해를 7 줍니다. 방어도를 무시합니다. 약화 상태의 적에게는 피해가 2배가 됩니다.\", kind = \"Attack\", damage = 7, class = \"thief\", rarity = \"unique\", pierce = true, attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tDaggerMastery = { name = \"대거 마스터리\", cost = 1, desc = \"카드를 사용할 때마다 방어도를 1 얻습니다. 매 턴 첫 카드의 피해가 3 증가합니다.\", kind = \"Power\", firstCardDamageBonus = 3, cardPlayedBlock = 1, class = \"thief\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 1, desc = \"힘을 1 얻습니다. 민첩을 1 얻습니다. 방어도를 4 얻습니다.\", kind = \"Skill\", block = 4, strength = 1, dex = 1, class = \"thief\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tShieldMastery = { name = \"실드 마스터리\", cost = 1, desc = \"방어도를 7 얻습니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 7, class = \"thief\", rarity = \"normal\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tThiefAgility = { name = \"시프 어질리티\", cost = 1, desc = \"방어도를 5 얻습니다. 민첩을 1 얻습니다. 이번 턴 동안 손의 다른 스킬 카드 1장이 교활해집니다.\", kind = \"Skill\", block = 5, dex = 1, class = \"thief\", rarity = \"unique\", turnHandSlyCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tEdgeCarnival = { name = \"엣지 카니발\", cost = 1, desc = \"무작위 적에게 피해를 2만큼 4번 줍니다. 표창 1장을 손에 넣습니다.\", kind = \"Attack\", damage = 2, class = \"thiefmaster\", rarity = \"unique\", hits = 4, addShiv = 1, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tMuspelHeim = { name = \"무스펠 하임\", cost = 2, desc = \"모든 적에게 피해를 4 줍니다. 이번 턴에 버린 카드 1장당 피해가 2 증가합니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 4, damagePerDiscardedThisTurn = 2, weak = 1, class = \"thiefmaster\", rarity = \"unique\", aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMesoExplosion = { name = \"메소 익스플로젼\", cost = 1, desc = \"피해를 2 줍니다. 이번 턴에 버린 카드 1장당 피해가 7 증가합니다. 방어도를 무시합니다.\", kind = \"Attack\", damage = 2, damagePerDiscardedThisTurn = 7, class = \"thiefmaster\", rarity = \"unique\", pierce = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDarkFlare = { name = \"다크 플레어\", cost = 2, desc = \"매 턴 모든 적에게 피해를 2 줍니다. 카드를 사용할 때마다 무작위 적에게 피해를 2 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 2, powerEffect = \"damagePerTurn\", value = 2, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tPickPocket = { name = \"픽 파킷\", cost = 1, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 표창 1장을 손에 넣고, 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", draw = 1, gainEnergy = 1, discard = 1, addShivPerDiscard = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowPartner = { name = \"쉐도우 파트너\", cost = 2, desc = \"카드를 1장 선택합니다. 다음 턴에 그 카드의 복사본 1장을 손에 넣습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnCopies = 1, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요.\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdvancedDarkSight = { name = \"어드밴스드 다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", intangible = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tIntoDarkness = { name = \"인투 다크니스\", cost = 1, desc = \"모든 적에게 약화를 1 부여합니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", weak = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, affectsAllEnemies = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tVenom = { name = \"베놈\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독을 1 부여합니다. 적 턴 시작 시 독이 한 번 더 적용됩니다.\", kind = \"Power\", attackPoison = 1, class = \"thiefmaster\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tGrid = { name = \"그리드\", cost = 1, desc = \"가시를 3 얻습니다. 카드를 사용할 때마다 방어도를 1 얻습니다.\", kind = \"Power\", thorns = 3, cardPlayedBlock = 1, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tRadicalDarkness = { name = \"래디컬 다크니스\", cost = 2, desc = \"카드를 1장 뽑습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShurikenBurst = { name = \"슈리켄 버스트\", cost = 1, desc = \"무작위 적에게 피해를 3씩 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"assassin\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tWindTalisman = { name = \"윈드 탈리스만\", cost = 1, desc = \"카드를 1장 뽑고, 에너지를 1 얻습니다. 이번 턴 동안 스킬 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", draw = 1, gainEnergy = 1, skillCostReductionThisTurn = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMarkOfAssassin = { name = \"마크 오브 어쌔신\", cost = 1, desc = \"약화 1을 부여합니다. 약화 상태의 적에게 주는 공격 피해가 2배가 됩니다.\", kind = \"Power\", weak = 1, class = \"assassin\", rarity = \"unique\", attackDamageVsWeakMultiplier = 2, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowRush = { name = \"쉐도우 러쉬\", cost = 1, desc = \"피해 7, 방어도 5를 얻습니다.\", kind = \"Attack\", damage = 7, block = 5, class = \"assassin\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShadowLeap = { name = \"쉐도우 리프\", cost = 0, desc = \"방어도 4를 얻습니다. 다음 턴에 방어도 4를 얻습니다.\", kind = \"Skill\", block = 4, class = \"assassin\", rarity = \"normal\", nextTurnBlock = 4, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tShadowBlink = { name = \"쉐도우 블링크\", cost = 1, desc = \"무형 1을 얻습니다. 다음 스킬 카드의 비용이 0이 됩니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"assassin\", rarity = \"unique\", nextSkillCostZero = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tJavelinMastery = { name = \"자벨린 마스터리\", cost = 1, desc = \"표창의 피해량이 2 증가합니다.\", kind = \"Power\", class = \"assassin\", rarity = \"unique\", shivDamageBonus = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tJavelinAcceleration = { name = \"자벨린 액셀레이션\", cost = 0, desc = \"카드를 2장 뽑습니다. 카드를 1장 버립니다. 표창 1장을 손에 넣습니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"normal\", draw = 2, discard = 1, addShiv = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tCriticalThrow = { name = \"크리티컬 스로우\", cost = 1, desc = \"피해를 7씩 2번 줍니다. 방어도를 무시합니다. 이번 턴 첫 카드라면 피해가 더 강해집니다.\", kind = \"Attack\", damage = 7, firstCardDamageBonus = 3, class = \"assassin\", rarity = \"unique\", hits = 2, pierce = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tAssassinPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 1, desc = \"힘 1, 민첩 1을 얻고 카드를 1장 뽑습니다.\", kind = \"Skill\", strength = 1, dex = 1, class = \"assassin\", rarity = \"normal\", draw = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tTripleThrow = { name = \"트리플 스로우\", cost = 1, desc = \"피해를 4씩 3번 줍니다.\", kind = \"Attack\", damage = 4, class = \"hermit\", rarity = \"normal\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShurikenChallenge = { name = \"슈리켄 챌린지\", cost = 1, desc = \"피해를 5씩 2번 줍니다. 다음 턴에 카드를 1장 더 뽑습니다.\", kind = \"Attack\", damage = 5, class = \"hermit\", rarity = \"unique\", hits = 2, nextTurnDraw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitDarkFlare = { name = \"다크 플레어\", cost = 2, desc = \"매 턴 모든 적에게 피해 3을 줍니다. 턴 시작마다 표창 1장을 손에 넣습니다.\", kind = \"Power\", powerEffect = \"damagePerTurn\", value = 3, class = \"hermit\", rarity = \"unique\", turnStartShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitShadowPartner = { name = \"쉐도우 파트너\", cost = 2, desc = \"카드를 1장 뽑습니다. 다음 턴 공격 카드의 피해가 2배가 됩니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpiritJavelin = { name = \"스피릿 자벨린\", cost = 1, desc = \"표창이 턴 종료 시 사라지지 않습니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", firstShivDamageBonus = 4, shivRetain = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitRadicalDarkness = { name = \"래디컬 다크니스\", cost = 1, desc = \"방어도 4를 얻습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 소멸.\", kind = \"Skill\", block = 4, blockGainMultiplier = 2, class = \"hermit\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitVenom = { name = \"베놈\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독 1을 부여합니다. 전투 중 독 부여 3회마다 모든 적에게 피해 8을 줍니다.\", kind = \"Power\", attackPoison = 1, class = \"hermit\", rarity = \"legend\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 8, image = \"19361e72087946b1888684185b40d935\" },\n\tSkilledJavelin = { name = \"숙련된 표창술\", cost = 1, desc = \"표창의 피해량이 2 증가합니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", shivDamageBonus = 2, firstShivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"에너지를 1 얻고 카드를 1장 뽑습니다. 표창 1장을 손에 넣습니다. 소멸.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, gainEnergy = 1, addShiv = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n}\nself.DrawPile = {}\nfor i = 1, #self.RunDeck do\n\tself.DrawPile[i] = self.RunDeck[i]\nend\nself:Shuffle(self.DrawPile)\nself:PrepareCombatDrawPile()\nself:BuildMonsters()\nself:RenderCombat()\nself:StartPlayerTurn()\nself:ApplyRelics(\"combatStart\")\nself:RenderCombat()\nlocal slotTid = 0\nslotTid = _TimerService:SetTimerRepeat(function()\n\tif self.CombatOver == true or self.Monsters == nil or #self.Monsters == 0 then\n\t\t_TimerService:ClearTimer(slotTid)\n\t\treturn\n\tend\n\tfor i = 1, #self.Monsters do\n\t\tif self.Monsters[i] ~= nil and self.Monsters[i].alive == true then\n\t\t\tself:PositionMonsterSlot(i)\n\t\tend\n\tend\nend, 0.15)", + "Code": "self:ShowState(\"combat\")\nself:KickCombatCamera()\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/Result\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/PotionMenu\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/TooltipBox\", false)\nself:SetEntityEnabled(\"/ui/RunUIGroup/CombatHud/DiscardPrompt\", false)\nself:SetText(\"/ui/RunUIGroup/CombatHud/PlayerPanel/Name\", self:JobLabel())\nself.MaxEnergy = 3\nself.Turn = 0\nself.PlayerBlock = 0\nself.BlockGainMultiplier = 1\nself.CardsDrawnThisCombat = 0\nself.HandCostZeroThisTurn = false\nself.DrawDisabledThisTurn = false\nself.NextSkillCostZero = false\nself.NextSkillRepeatCount = 0\nself.SkillCostReductionThisTurn = 0\nself.CombatCardCostReduction = {}\nself.SkillSlyOnPlayCards = {}\nself.TurnSkillSlyCards = {}\nself.ShivFirstDamageBonusUsed = false\nself.ActiveAttackDamageVsWeakMultiplier = 1\nself.DrawDamageThisTurn = 0\nself.DrawPoisonThisTurn = 0\nself.ShivAoeThisCombat = false\nself.PoisonApplicationsThisCombat = 0\nself.EnemyStrengthLossThisTurn = 0\nself.PlayerStr = 0\nself.PlayerDex = 0\nself.PlayerThorns = 0\nself.PlayerWeak = 0\nself.PlayerVuln = 0\nself.PlayerIntangible = 0\nself.BonusRewardScreens = 0\nself.ActiveKillReward = 0\nself.PlayerPowers = {}\nself.FightAttackCount = 0\nself.TurnAttackCardsPlayed = 0\nself.TurnDiscardedCards = 0\nself.TurnCardsPlayedThisTurn = 0\nself.DamageDealtThisTurn = 0\nself.DmgPopSeq = 0\nself.FirstHpLossDone = false\nself.ClayBlockNext = 0\nself.DiscardSelectRemaining = 0\nself.DiscardSelectTotal = 0\nself.DiscardPostShiv = 0\nself.DiscardShivPerPick = 0\nself.RetainSelectActive = false\nself.ReserveSelectActive = false\nself.NextTurnBlock = 0\nself.NextTurnDraw = 0\nself.NextTurnKeepBlock = false\nself.NextTurnAttackMultiplier = 1\nself.TurnAttackMultiplier = 1\nself.NextTurnSelectPrompt = \"\"\nself.NextTurnSelectCopies = 0\nself.NextTurnAddCards = {}\nself.CombatOver = false\nself.DiscardPile = {}\nself.ExhaustPile = {}\nself.Hand = {}\nself.Cards = {\n\tStrike = { name = \"파워 스트라이크\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"warrior\", rarity = \"normal\", fx = \"291b2298db88476f8ae3c6c78f53c9b7\", image = \"e4acdf27d68549db8858d6082169c70c\" },\n\tDefend = { name = \"아이언 바디\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"warrior\", rarity = \"normal\", image = \"7648c3b8e1ca44fc8ec353561207a670\" },\n\tBash = { name = \"슬래시 블러스트\", cost = 2, desc = \"피해 10\", kind = \"Attack\", damage = 10, class = \"warrior\", rarity = \"normal\", fx = \"863812c5c2f84132ac7465b50ec2283e\", image = \"4cbbe8cfc3e840e4a76379498d8eb012\" },\n\tWarLeap = { name = \"워 리프\", cost = 1, desc = \"피해 4, 방어도 3\", kind = \"Attack\", damage = 4, block = 3, class = \"warrior\", rarity = \"normal\", image = \"992dabf6aff2400e92b2f4f705d8ebe7\" },\n\tBrandish = { name = \"브랜디시\", cost = 2, desc = \"피해 13\", kind = \"Attack\", damage = 13, class = \"warrior\", rarity = \"unique\", fx = \"e8a145a6c43d493f9ad50fab03b200aa\", image = \"21af4bccc5054a5dbc8245dfa7f08681\" },\n\tChargedBlow = { name = \"차지 블로우\", cost = 2, desc = \"피해 8, 취약 2\", kind = \"Attack\", damage = 8, firstCardDamageBonus = 2, vuln = 2, class = \"warrior\", rarity = \"unique\", image = \"fe83c7635b0e49ed83d75a2833adb53e\" },\n\tThreaten = { name = \"위협\", cost = 0, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"warrior\", rarity = \"normal\", image = \"64daadf1a98e490d9c14ef52ec776e63\" },\n\tEnrage = { name = \"인레이지\", cost = 1, desc = \"힘 +2\", kind = \"Skill\", strength = 2, class = \"warrior\", rarity = \"unique\", image = \"09370fc7551e47238fd103a80fba558e\" },\n\tRage = { name = \"분노\", cost = 1, desc = \"모든 적에게 피해를 4 줍니다.\", kind = \"Attack\", damage = 4, class = \"warrior\", rarity = \"legend\", aoe = true, image = \"379d86e3de064959aa4612f71e84ccfb\" },\n\tComboAttack = { name = \"콤보 어택\", cost = 1, desc = \"피해 5 × 2회\", kind = \"Attack\", damage = 5, class = \"fighter\", rarity = \"unique\", hits = 2, fx = \"48754be05be344358cddd55aa8fe11f4\", image = \"1bc3e52b330648faae9eafd5a205e37b\" },\n\tBerserk = { name = \"버서크\", cost = 2, desc = \"매턴 에너지 +1, 취약 1 자가\", kind = \"Power\", powerEffect = \"energyPerTurn\", value = 1, class = \"fighter\", rarity = \"legend\", selfVuln = 1, image = \"e2580523efc6457385114b78ad0d7cce\" },\n\tRisingAttack = { name = \"라이징 어택\", cost = 2, desc = \"피해 12\", kind = \"Attack\", damage = 12, class = \"fighter\", rarity = \"unique\", fx = \"6f283d96d5804b4fb88009685a11c1f8\", image = \"115e309771604743853abad2d8d186bc\" },\n\tThunderCharge = { name = \"썬더 차지\", cost = 1, desc = \"피해 7, 약화 1\", kind = \"Attack\", damage = 7, weak = 1, class = \"page\", rarity = \"unique\", fx = \"997fa6999aa04dbb97a1dd99025fa2ba\", image = \"b7030d8caedc4fbc9f38fe1e541d6e6b\" },\n\tBlizzardCharge = { name = \"블리자드 차지\", cost = 1, desc = \"피해 7, 취약 1\", kind = \"Attack\", damage = 7, vuln = 1, class = \"page\", rarity = \"unique\", fx = \"2799562e984c4a4da3b73e1f3431057c\", image = \"9aac955d159f49c1bc913ef96128e781\" },\n\tPowerGuard = { name = \"파워 가드\", cost = 1, desc = \"방어도 10\", kind = \"Skill\", block = 10, class = \"page\", rarity = \"unique\", image = \"90a9bf8eeb844b578b4e2d93ac43fedf\" },\n\tPierce = { name = \"피어스\", cost = 1, desc = \"피해 9, 방어 무시\", kind = \"Attack\", damage = 9, class = \"spearman\", rarity = \"unique\", pierce = true, fx = \"1b0afc410a1a458598eb7ca2fb26e97d\", image = \"251b6e12329048429490049a4f3cf564\" },\n\tIronWall = { name = \"아이언 월\", cost = 2, desc = \"방어도 12\", kind = \"Skill\", block = 12, class = \"spearman\", rarity = \"unique\", image = \"92021d62341a4bce9cfd09d1b4b865db\" },\n\tHyperBody = { name = \"하이퍼 바디\", cost = 1, desc = \"매턴 방어도 +3\", kind = \"Power\", powerEffect = \"blockPerTurn\", value = 3, class = \"spearman\", rarity = \"legend\", image = \"b4020dbadee6401f9893a020fe4154b1\" },\n\tEnergyBolt = { name = \"에너지 볼트\", cost = 1, desc = \"피해 6\", kind = \"Attack\", damage = 6, class = \"magician\", rarity = \"normal\", fx = \"1d5877e1120a42d0907f204c959888b1\", image = \"e84880eaf89442128d3af2be5c80a74f\" },\n\tMagicGuard = { name = \"매직 가드\", cost = 1, desc = \"방어도 5\", kind = \"Skill\", block = 5, class = \"magician\", rarity = \"normal\", image = \"01b249c26eb34b8aaab774bf221907a1\" },\n\tMagicClaw = { name = \"매직 클로\", cost = 1, desc = \"피해 3 × 2회\", kind = \"Attack\", damage = 3, class = \"magician\", rarity = \"normal\", hits = 2, fx = \"ba4ac7c8f24845b68b7e689b7effcc93\", image = \"f3fcac2d460041b288cc1973caaaf30f\" },\n\tTeleport = { name = \"텔레포트\", cost = 1, desc = \"방어도 3, 드로 1\", kind = \"Skill\", block = 3, class = \"magician\", rarity = \"normal\", discardAll = true, drawPerDiscarded = 1, image = \"7f70a9dc7e304433bb8121dd9c4df98b\" },\n\tSlow = { name = \"슬로우\", cost = 1, desc = \"약화 2 부여\", kind = \"Skill\", weak = 2, class = \"magician\", rarity = \"normal\", image = \"7224cd3f9b7e497d9dd65f32a50865e4\" },\n\tFireArrow = { name = \"파이어 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"firepoison\", rarity = \"unique\", fx = \"4a937e208875468eb63d891806fba3cd\", image = \"6fa15fd3a0004b409ea516c11a67e533\" },\n\tPoisonBreath = { name = \"포이즌 브레스\", cost = 1, desc = \"독 4 부여\", kind = \"Skill\", class = \"firepoison\", rarity = \"unique\", poison = 4, image = \"07200f3c74854022baa7ebbefdc4ad8c\" },\n\tElementAmp = { name = \"엘레멘트 앰플\", cost = 1, desc = \"매 턴 힘 +1\", kind = \"Power\", powerEffect = \"strengthPerTurn\", value = 1, class = \"firepoison\", rarity = \"legend\", image = \"06865473977849bebe79062dbd608944\" },\n\tThunderBolt = { name = \"썬더 볼트\", cost = 2, desc = \"모든 적에게 피해 6\", kind = \"Attack\", damage = 6, class = \"icelightning\", rarity = \"legend\", aoe = true, fx = \"7d52f5e389bd4d44a30cf7cc54538f8f\", image = \"c6685d33cb2641f09d11cfa2d5cc820c\" },\n\tColdBeam = { name = \"콜드 빔\", cost = 2, desc = \"피해 7, 약화 2\", kind = \"Attack\", damage = 7, weak = 2, class = \"icelightning\", rarity = \"unique\", image = \"e8f7c148c79f497d83014e3361f59f5c\" },\n\tChillingStep = { name = \"칠링 스텝\", cost = 1, desc = \"방어도 8\", kind = \"Skill\", block = 8, class = \"icelightning\", rarity = \"unique\", image = \"bef20873a68a4651a91d74be457c2cfc\" },\n\tHeal = { name = \"힐\", cost = 1, desc = \"HP 10 회복\", kind = \"Skill\", class = \"cleric\", rarity = \"unique\", heal = 10, image = \"8b935b7d7066493cb462834bbe287c74\" },\n\tBless = { name = \"블레스\", cost = 1, desc = \"힘 +1, 방어도 5\", kind = \"Skill\", block = 5, strength = 1, class = \"cleric\", rarity = \"unique\", image = \"607fc5457c1c44a0993a5c2fe3fb0c68\" },\n\tHolyArrow = { name = \"홀리 애로우\", cost = 1, desc = \"피해 8\", kind = \"Attack\", damage = 8, class = \"cleric\", rarity = \"unique\", fx = \"4faa7b78e09643cf86339b8b7cf2abac\", image = \"a80127195bf7471f9545b70e491f4719\" },\n\tWound = { name = \"상처\", cost = 0, desc = \"사용할 수 없다. 손패를 막는 저주.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true },\n\tBurn = { name = \"화상\", cost = 0, desc = \"사용 불가. 손패에 있으면 턴 종료 시 피해 2.\", kind = \"Status\", class = \"curse\", rarity = \"normal\", unplayable = true, curse = true, endTurnDamage = 2 },\n\tNeutralize = { name = \"무력화\", cost = 0, desc = \"피해를 3 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 3, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSilentStrike = { name = \"타격\", cost = 1, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tSurvivor = { name = \"생존자\", cost = 1, desc = \"방어도를 8 얻습니다. 카드를 1장 버립니다.\", kind = \"Skill\", block = 8, class = \"rogue\", rarity = \"normal\", discard = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSilentDefend = { name = \"수비\", cost = 1, desc = \"방어도를 5 얻습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDoubleStab = { name = \"더블 스탭\", cost = 1, desc = \"피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"rogue\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tLuckySeven = { name = \"럭키 세븐\", cost = 1, desc = \"피해를 3만큼 3번 줍니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"unique\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHaste = { name = \"헤이스트\", cost = 1, desc = \"카드를 1장 뽑습니다. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"normal\", draw = 1, gainEnergy = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDarkSight = { name = \"다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"rogue\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tFlashJump = { name = \"플래시 점프\", cost = 0, desc = \"방어도를 4 얻습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", draw = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNimbleBody = { name = \"님블 바디\", cost = 1, desc = \"민첩을 1 얻습니다. 매 턴 방어도를 2 얻습니다.\", kind = \"Power\", dex = 1, powerEffect = \"blockPerTurn\", value = 2, class = \"rogue\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSlice = { name = \"칼질\", cost = 0, desc = \"피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShiv = { name = \"표창\", cost = 0, desc = \"피해를 4 줍니다. 소멸.\", kind = \"Attack\", damage = 4, class = \"shiv\", rarity = \"normal\", exhaust = true, token = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerSpray = { name = \"단검 분사\", cost = 1, desc = \"모든 적에게 피해를 4만큼 2번 줍니다.\", kind = \"Attack\", damage = 4, class = \"thief\", rarity = \"normal\", hits = 2, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerThrow = { name = \"단검 투척\", cost = 1, desc = \"피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Attack\", damage = 9, class = \"thief\", rarity = \"normal\", draw = 1, discard = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPoisonedStab = { name = \"독 찌르기\", cost = 1, desc = \"피해를 6 줍니다. 중독을 3 부여합니다.\", kind = \"Attack\", damage = 6, class = \"rogue\", rarity = \"normal\", poison = 3, image = \"19361e72087946b1888684185b40d935\" },\n\tSuckerPunch = { name = \"불의의 일격\", cost = 1, desc = \"피해를 7 줍니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 7, weak = 1, class = \"rogue\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tLeadingStrike = { name = \"선제 타격\", cost = 1, desc = \"피해를 3 줍니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Attack\", damage = 3, class = \"rogue\", rarity = \"normal\", addShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFollowThrough = { name = \"완수\", cost = 1, desc = \"피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.\", kind = \"Attack\", damage = 7, otherHandAtLeast = 5, bonusHitsWhenOtherHandAtLeast = 1, class = \"thief\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlickFlack = { name = \"재주넘기\", cost = 1, desc = \"교활. 모든 적에게 피해를 6 줍니다.\", kind = \"Attack\", damage = 6, class = \"thief\", rarity = \"normal\", sly = true, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tRicochet = { name = \"도탄\", cost = 2, desc = \"교활. 무작위 적에게 피해를 3만큼 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"assassin\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, sly = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPrepared = { name = \"예비\", cost = 1, desc = \"카드를 1장 버리고, 이번 턴에 준 피해의 절반만큼 방어를 얻습니다.\", kind = \"Skill\", blockPerDamageDealtThisTurn = 0.5, class = \"thief\", rarity = \"normal\", discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tAnticipate = { name = \"예측\", cost = 0, desc = \"이번 턴 동안 민첩을 2 얻습니다.\", kind = \"Skill\", endTurnDexLoss = 2, dex = 2, class = \"rogue\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tDeflect = { name = \"튕겨내기\", cost = 0, desc = \"방어도를 4 얻습니다.\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tBladeDance = { name = \"검무\", cost = 1, desc = \"표창을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"assassin\", rarity = \"normal\", addShiv = 3, exhaust = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBackflip = { name = \"공중제비\", cost = 1, desc = \"방어도를 5 얻습니다. 카드를 2장 뽑습니다.\", kind = \"Skill\", block = 5, class = \"rogue\", rarity = \"normal\", draw = 2, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDodgeAndRoll = { name = \"구르기\", cost = 1, desc = \"방어도를 4 얻습니다. 다음 턴에, 방어도를 4 얻습니다\", kind = \"Skill\", block = 4, class = \"rogue\", rarity = \"normal\", nextTurnBlock = 4, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPiercingWail = { name = \"귀를 찢는 비명\", cost = 1, desc = \"이번 턴 동안 모든 적이 힘을 6 잃습니다. 소멸.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", affectsAllEnemies = true, enemyStrengthLossThisTurn = 6, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCloakAndDagger = { name = \"망토와 단검\", cost = 1, desc = \"방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.\", kind = \"Skill\", block = 6, class = \"assassin\", rarity = \"normal\", addShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tDeadlyPoison = { name = \"맹독\", cost = 1, desc = \"중독을 5 부여합니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", poison = 5, image = \"19361e72087946b1888684185b40d935\" },\n\tSnakebite = { name = \"뱀 물기\", cost = 2, desc = \"보존. 중독을 7 부여합니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", poison = 7, retain = true, image = \"19361e72087946b1888684185b40d935\" },\n\tUntouchable = { name = \"범접 불가\", cost = 2, desc = \"교활. 방어도를 6 얻습니다.\", kind = \"Skill\", block = 6, class = \"rogue\", rarity = \"normal\", sly = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSkewer = { name = \"꼬챙이\", cost = 2, desc = \"피해를 8만큼 X번 줍니다.\", kind = \"Attack\", class = \"assassin\", rarity = \"unique\", useAllEnergy = true, xDamagePerEnergy = 8, image = \"92a5020c978c46bdabab910598118b86\" },\n\tBackstab = { name = \"배신\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 소멸.\", kind = \"Attack\", damage = 10, class = \"rogue\", rarity = \"unique\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPreciseCut = { name = \"정밀한 베기\", cost = 0, desc = \"피해를 13 줍니다. 손에 있는 다른 카드 1장당 피해량이 2 감소합니다.\", kind = \"Attack\", damage = 13, damagePerOtherHandCard = -2, class = \"thief\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFinisher = { name = \"마무리\", cost = 1, desc = \"이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.\", kind = \"Attack\", damage = 0, damagePerAttackPlayedThisTurn = 6, class = \"thief\", rarity = \"unique\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMementoMori = { name = \"메멘토 모리\", cost = 1, desc = \"피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.\", kind = \"Attack\", damage = 9, damagePerDiscardedThisTurn = 4, class = \"thief\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStrangle = { name = \"목 조르기\", cost = 1, desc = \"피해를 8 줍니다.\", kind = \"Attack\", damage = 8, class = \"thief\", rarity = \"unique\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tFlechettes = { name = \"프레췌\", cost = 1, desc = \"손에 있는 스킬 카드 1장당 피해를 5 줍니다.\", kind = \"Attack\", damage = 0, damagePerSkillInHand = 5, class = \"assassin\", rarity = \"unique\", image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tPounce = { name = \"덮치기\", cost = 2, desc = \"피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.\", kind = \"Attack\", damage = 12, class = \"assassin\", rarity = \"unique\", nextSkillCostZero = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tDash = { name = \"돌진\", cost = 2, desc = \"방어도를 10 얻습니다. 피해를 10 줍니다.\", kind = \"Attack\", damage = 10, block = 10, class = \"thief\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tPredator = { name = \"천적\", cost = 2, desc = \"피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.\", kind = \"Attack\", damage = 15, class = \"assassin\", rarity = \"unique\", nextTurnDraw = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tPinpoint = { name = \"정밀 사격\", cost = 3, desc = \"피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.\", kind = \"Attack\", damage = 15, class = \"assassin\", rarity = \"unique\", skillCostReductionThisTurn = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tCalculatedGamble = { name = \"계산된 도박\", cost = 0, desc = \"손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", discardAll = true, drawPerDiscarded = 1, exhaust = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpose = { name = \"들춰내기\", cost = 0, desc = \"대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.\", kind = \"Skill\", vuln = 2, class = \"thief\", rarity = \"unique\", removeEnemyBlock = true, removeEnemyArtifact = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHiddenDaggers = { name = \"숨겨진 표창\", cost = 0, desc = \"카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", discard = 2, addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tEscapePlan = { name = \"탈출구\", cost = 0, desc = \"카드를 1장 뽑습니다. 뽑은 카드가 스킬 카드라면, 방어도를 3 얻습니다.\", kind = \"Skill\", class = \"rogue\", rarity = \"unique\", draw = 1, drawSkillBlock = 3, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tAcrobatics = { name = \"곡예\", cost = 1, desc = \"카드를 3장 뽑습니다. 카드를 1장 버립니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 3, discard = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tHandTrick = { name = \"손기술\", cost = 1, desc = \"방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.\", kind = \"Skill\", block = 7, class = \"thief\", rarity = \"unique\", turnHandSlyCount = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tExpertise = { name = \"전문성\", cost = 1, desc = \"손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", drawUntilHandSize = 6, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tBubbleBubble = { name = \"차오르는 독\", cost = 1, desc = \"적이 중독을 보유하고 있다면, 중독을 9 부여합니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", poison = 9, poisonIfTargetPoisoned = true, image = \"19361e72087946b1888684185b40d935\" },\n\tBlur = { name = \"흐릿함\", cost = 1, desc = \"방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 5, class = \"thief\", rarity = \"unique\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tLegSweep = { name = \"다리 걸기\", cost = 2, desc = \"약화를 2 부여합니다. 방어도를 11 얻습니다.\", kind = \"Skill\", block = 11, weak = 2, class = \"thief\", rarity = \"unique\", image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tUpMySleeve = { name = \"비책\", cost = 2, desc = \"표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", addShiv = 3, combatCostReductionOnPlay = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBouncingFlask = { name = \"탄성 플라스크\", cost = 2, desc = \"무작위 적에게 중독을 3만큼 3번 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", poison = 3, poisonHits = 3, poisonRandomTargets = true, image = \"19361e72087946b1888684185b40d935\" },\n\tReflex = { name = \"반사신경\", cost = 3, desc = \"교활. 카드를 2장 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 2, sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tHaze = { name = \"아지랑이\", cost = 3, desc = \"교활. 모든 적에게 중독을 4 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", poison = 4, sly = true, image = \"19361e72087946b1888684185b40d935\" },\n\tTactician = { name = \"전략가\", cost = 3, desc = \"교활. 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", gainEnergy = 1, sly = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tWellLaidPlans = { name = \"괜찮은 전략\", cost = 1, desc = \"내 턴 종료 시, 카드를 최대 1장까지 보존합니다.\", kind = \"Power\", powerEffect = \"retainOne\", value = 1, class = \"thief\", rarity = \"unique\", image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tInfiniteBlades = { name = \"무한의 검날\", cost = 1, desc = \"내 턴 시작 시, 표창을 1장 손으로 가져옵니다.\", kind = \"Power\", class = \"assassin\", rarity = \"unique\", turnStartShiv = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tFootwork = { name = \"발놀림\", cost = 1, desc = \"민첩을 2 얻습니다.\", kind = \"Power\", dex = 2, class = \"thief\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tOutbreak = { name = \"발병\", cost = 2, desc = \"독이 3번 부여될 때마다 모든 적에게 6 피해를 줍니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"unique\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 6, image = \"19361e72087946b1888684185b40d935\" },\n\tNoxiousFumes = { name = \"유독 가스\", cost = 1, desc = \"내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.\", kind = \"Power\", powerEffect = \"poisonPerTurn\", value = 2, class = \"thief\", rarity = \"unique\", poison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tSpeedster = { name = \"스피드스터\", cost = 2, desc = \"내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 1 줍니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"unique\", drawDamage = 1, aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tGrandFinale = { name = \"대단원의 막\", cost = 0, desc = \"뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 45 줍니다.\", kind = \"Attack\", damage = 45, class = \"thiefmaster\", rarity = \"legend\", playableWhenDrawPileEmpty = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tAssassinate = { name = \"암살\", cost = 0, desc = \"선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.\", kind = \"Attack\", damage = 10, vuln = 1, class = \"thiefmaster\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tEchoingSlash = { name = \"메아리 참격\", cost = 2, desc = \"모든 적에게 피해를 6 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.\", kind = \"Attack\", damage = 10, class = \"thiefmaster\", rarity = \"legend\", repeatOnKill = true, aoe = true, image = \"dbdbb1b56ae54672ae68ac6882fff6a2\" },\n\tTheHunt = { name = \"사냥\", cost = 1, desc = \"피해를 10 줍니다. 이 카드로 적을 처치하면 카드 보상을 추가로 얻습니다. 소멸.\", kind = \"Attack\", damage = 6, rewardOnKill = 1, class = \"assassin\", rarity = \"legend\", exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMurder = { name = \"살해\", cost = 3, desc = \"피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.\", kind = \"Attack\", damage = 1, damagePerCardDrawnThisCombat = 1, class = \"thiefmaster\", rarity = \"legend\", image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tMalaise = { name = \"불쾌\", cost = 2, desc = \"에너지를 모두 사용하고, 사용한 에너지만큼 적에게 약화를 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", useAllEnergy = true, xWeakPerEnergy = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tStormOfSteel = { name = \"강철의 폭풍\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"legend\", discardAll = true, addShivPerDiscard = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShadowStep = { name = \"그림자 걸음\", cost = 1, desc = \"손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", discardAll = true, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShadowmeld = { name = \"그림자 은신\", cost = 1, desc = \"이번 턴 동안 얻는 방어도가 2배가 됩니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"thiefmaster\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tCorrosiveWave = { name = \"부식성 파도\", cost = 1, desc = \"이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", drawPoison = 2, image = \"19361e72087946b1888684185b40d935\" },\n\tBladeOfInk = { name = \"잉크 칼날\", cost = 1, desc = \"잉크투성이 표창을 2장 손으로 가져옵니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", addShiv = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBurst = { name = \"폭주\", cost = 1, desc = \"이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", nextSkillRepeatCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKnifeTrap = { name = \"칼날 함정\", cost = 2, desc = \"교활. 모든 적에게 피해를 7 주고 중독을 2 부여합니다.\", kind = \"Attack\", damage = 7, class = \"thiefmaster\", rarity = \"legend\", poison = 2, sly = true, aoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tBulletTime = { name = \"불릿 타임\", cost = 3, desc = \"이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", handCostZeroThisTurn = true, drawDisabledThisTurn = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tNightmare = { name = \"악몽\", cost = 3, desc = \"카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", nextTurnCopies = 3, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tToolsOfTheTrade = { name = \"작업 도구\", cost = 1, desc = \"내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"legend\", turnStartDraw = 1, turnStartDiscard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tMasterPlanner = { name = \"설계의 대가\", cost = 2, desc = \"사용한 스킬 카드는 교활해집니다.\", kind = \"Power\", class = \"thiefmaster\", rarity = \"legend\", skillSlyOnPlay = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tFanOfKnives = { name = \"칼날 부채\", cost = 2, desc = \"표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", addShiv = 4, shivAoe = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tSerpentForm = { name = \"구렁이의 형상\", cost = 2, desc = \"카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 4, class = \"thiefmaster\", rarity = \"legend\", image = \"19361e72087946b1888684185b40d935\" },\n\tAbrasive = { name = \"연마\", cost = 2, desc = \"교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.\", kind = \"Power\", dex = 1, thorns = 4, class = \"thiefmaster\", rarity = \"legend\", sly = true, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tSuppress = { name = \"진압\", cost = 0, desc = \"선천성. 피해를 9 줍니다. 약화를 2 부여합니다. 소멸.\", kind = \"Attack\", damage = 9, weak = 2, class = \"thiefmaster\", rarity = \"legend\", innate = true, exhaust = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tWraithForm = { name = \"유령의 형상\", cost = 3, desc = \"불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.\", kind = \"Power\", intangible = 2, endTurnDexLoss = 1, class = \"thiefmaster\", rarity = \"legend\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSavageBlow = { name = \"새비지 블로우\", cost = 1, desc = \"피해를 3만큼 2번 줍니다. 이번 턴에 사용한 공격 카드 1장당 피해가 2 증가합니다.\", kind = \"Attack\", damage = 3, damagePerAttackPlayedThisTurn = 2, class = \"thief\", rarity = \"normal\", hits = 2, image = \"92a5020c978c46bdabab910598118b86\" },\n\tCriticalEdge = { name = \"크리티컬 엣지\", cost = 1, desc = \"카드를 1장 뽑습니다. 다음 턴에 공격 카드의 피해량이 2배가 됩니다. 보존.\", kind = \"Skill\", class = \"thief\", rarity = \"unique\", draw = 1, nextTurnAttackMultiplier = 2, retain = true, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tSteal = { name = \"스틸\", cost = 1, desc = \"피해를 3 줍니다. 이번 턴에 버린 카드 1장당 피해가 3 증가합니다. 에너지를 1 얻습니다.\", kind = \"Attack\", damage = 3, damagePerDiscardedThisTurn = 3, class = \"thief\", rarity = \"normal\", gainEnergy = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDaggerAcceleration = { name = \"대거 액셀레이션\", cost = 0, desc = \"카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 카드를 1장 더 뽑습니다.\", kind = \"Skill\", class = \"thief\", rarity = \"normal\", draw = 1, discard = 1, drawPerDiscarded = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tKarma = { name = \"카르마\", cost = 1, desc = \"피해를 7 줍니다. 방어도를 무시합니다. 약화 상태의 적에게는 피해가 2배가 됩니다.\", kind = \"Attack\", damage = 7, class = \"thief\", rarity = \"unique\", pierce = true, attackDamageVsWeakMultiplier = 2, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tDaggerMastery = { name = \"대거 마스터리\", cost = 1, desc = \"카드를 사용할 때마다 방어도를 1 얻습니다. 매 턴 첫 카드의 피해가 3 증가합니다.\", kind = \"Power\", firstCardDamageBonus = 3, cardPlayedBlock = 1, class = \"thief\", rarity = \"unique\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 2, desc = \"힘을 1 얻습니다. 민첩을 1 얻습니다.\", kind = \"Power\", strength = 1, dex = 1, class = \"thief\", rarity = \"normal\", image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tShieldMastery = { name = \"실드 마스터리\", cost = 1, desc = \"방어도를 7 얻습니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", block = 7, class = \"thief\", rarity = \"normal\", nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tThiefAgility = { name = \"시프 어질리티\", cost = 1, desc = \"방어도를 5 얻습니다. 이번 턴 동안 민첩을 1 얻습니다. 손의 다른 스킬 카드 1장이 교활해집니다.\", kind = \"Skill\", endTurnDexLoss = 1, block = 5, dex = 1, class = \"thief\", rarity = \"unique\", turnHandSlyCount = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tEdgeCarnival = { name = \"엣지 카니발\", cost = 1, desc = \"무작위 적에게 피해를 2만큼 4번 줍니다.\", kind = \"Attack\", damage = 2, class = \"thiefmaster\", rarity = \"unique\", hits = 4, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tMuspelHeim = { name = \"무스펠 하임\", cost = 1, desc = \"모든 적에게 피해를 4 줍니다. 이번 턴에 버린 카드 1장당 피해가 2 증가합니다. 약화를 1 부여합니다.\", kind = \"Attack\", damage = 4, damagePerDiscardedThisTurn = 2, weak = 1, class = \"thiefmaster\", rarity = \"unique\", aoe = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMesoExplosion = { name = \"메소 익스플로젼\", cost = 1, desc = \"피해를 2 줍니다. 이번 턴에 버린 카드 1장당 피해가 7 증가합니다. 방어도를 무시합니다.\", kind = \"Attack\", damage = 2, damagePerDiscardedThisTurn = 7, class = \"thiefmaster\", rarity = \"unique\", pierce = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tDarkFlare = { name = \"다크 플레어\", cost = 1, desc = \"매 턴 모든 적에게 피해를 2 줍니다. 카드를 사용할 때마다 무작위 적에게 피해를 2 줍니다.\", kind = \"Power\", cardPlayedRandomDamage = 2, powerEffect = \"damagePerTurn\", value = 2, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tPickPocket = { name = \"픽 파킷\", cost = 1, desc = \"카드를 1장 뽑습니다. 카드를 1장 버리고, 에너지를 1 얻습니다.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"unique\", draw = 1, gainEnergy = 1, discard = 1, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowPartner = { name = \"쉐도우 파트너\", cost = 2, desc = \"카드를 1장 선택합니다. 다음 턴에 그 카드의 복사본 1장을 손에 넣습니다. 카드를 1장 뽑습니다. 소멸.\", kind = \"Skill\", class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnCopies = 1, nextTurnSelectHandCard = true, nextTurnSelectPrompt = \"복사할 카드를 선택하세요.\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tAdvancedDarkSight = { name = \"어드밴스드 다크 사이트\", cost = 1, desc = \"무형을 1 얻습니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", intangible = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tIntoDarkness = { name = \"인투 다크니스\", cost = 1, desc = \"모든 적에게 약화를 1 부여합니다. 이번 턴 동안 손의 다른 스킬 카드 2장이 교활해집니다.\", kind = \"Skill\", weak = 1, class = \"thiefmaster\", rarity = \"unique\", turnHandSlyCount = 2, affectsAllEnemies = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tVenom = { name = \"베놈\", cost = 1, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독을 1 부여합니다. 적 턴 시작 시 독이 한 번 더 적용됩니다.\", kind = \"Power\", attackPoison = 1, class = \"thiefmaster\", rarity = \"legend\", extraPoisonTicks = 1, image = \"19361e72087946b1888684185b40d935\" },\n\tGrid = { name = \"그리드\", cost = 2, desc = \"가시를 3 얻습니다. 카드를 사용할 때마다 방어도를 1 얻습니다.\", kind = \"Power\", thorns = 3, cardPlayedBlock = 1, class = \"thiefmaster\", rarity = \"unique\", image = \"0946f69d84464df29b24b94c744c868d\" },\n\tRadicalDarkness = { name = \"래디컬 다크니스\", cost = 2, desc = \"카드를 1장 뽑습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 다음 턴에 방어도가 사라지지 않습니다.\", kind = \"Skill\", blockGainMultiplier = 2, class = \"thiefmaster\", rarity = \"legend\", draw = 1, nextTurnKeepBlock = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tShurikenBurst = { name = \"슈리켄 버스트\", cost = 1, desc = \"무작위 적에게 피해를 3씩 4번 줍니다.\", kind = \"Attack\", damage = 3, class = \"assassin\", rarity = \"normal\", hits = 4, randomTargetEachHit = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tWindTalisman = { name = \"윈드 탈리스만\", cost = 1, desc = \"카드를 1장 뽑습니다. 이번 턴 동안 스킬 카드의 비용이 1 감소합니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"unique\", draw = 1, skillCostReductionThisTurn = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tMarkOfAssassin = { name = \"마크 오브 어쌔신\", cost = 1, desc = \"약화 1을 부여합니다. 약화 상태의 적에게 주는 공격 피해가 1.5배가 됩니다.\", kind = \"Power\", weak = 1, class = \"assassin\", rarity = \"unique\", attackDamageVsWeakMultiplier = 1.5, image = \"c1e19219745e44c39ae6ac2f77e347d9\" },\n\tShadowRush = { name = \"쉐도우 러쉬\", cost = 1, desc = \"피해 7, 방어도 5를 얻습니다.\", kind = \"Attack\", damage = 7, block = 5, class = \"assassin\", rarity = \"normal\", image = \"92a5020c978c46bdabab910598118b86\" },\n\tShadowLeap = { name = \"쉐도우 리프\", cost = 0, desc = \"방어도 4를 얻습니다. 다음 턴에 방어도 4를 얻습니다. 소멸.\", kind = \"Skill\", block = 4, class = \"assassin\", rarity = \"normal\", nextTurnBlock = 4, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tShadowBlink = { name = \"쉐도우 블링크\", cost = 1, desc = \"무형 1을 얻습니다. 다음 스킬 카드의 비용이 0이 됩니다. 소멸.\", kind = \"Skill\", intangible = 1, class = \"assassin\", rarity = \"unique\", nextSkillCostZero = true, exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tJavelinMastery = { name = \"자벨린 마스터리\", cost = 1, desc = \"표창의 피해량이 2 증가합니다.\", kind = \"Power\", class = \"assassin\", rarity = \"unique\", shivDamageBonus = 2, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tJavelinAcceleration = { name = \"자벨린 액셀레이션\", cost = 1, desc = \"카드를 2장 뽑습니다. 카드를 1장 버립니다. 표창 1장을 손에 넣습니다.\", kind = \"Skill\", class = \"assassin\", rarity = \"normal\", draw = 2, discard = 1, addShiv = 1, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n\tCriticalThrow = { name = \"크리티컬 스로우\", cost = 1, desc = \"피해를 6씩 2번 줍니다. 방어도를 무시합니다. 이번 턴 첫 카드라면 피해가 더 강해집니다.\", kind = \"Attack\", damage = 6, firstCardDamageBonus = 2, class = \"assassin\", rarity = \"unique\", hits = 2, pierce = true, image = \"b1360ed0c4b942309d240634b8f36872\" },\n\tAssassinPhysicalTraining = { name = \"피지컬 트레이닝\", cost = 2, desc = \"힘 1, 민첩 1을 얻고 카드를 1장 뽑습니다.\", kind = \"Power\", strength = 1, dex = 1, class = \"assassin\", rarity = \"normal\", draw = 1, image = \"49c8f279bfa64bf3954037f17da0052d\" },\n\tTripleThrow = { name = \"트리플 스로우\", cost = 1, desc = \"피해를 4씩 3번 줍니다.\", kind = \"Attack\", damage = 4, class = \"hermit\", rarity = \"normal\", hits = 3, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tShurikenChallenge = { name = \"슈리켄 챌린지\", cost = 1, desc = \"피해를 5씩 2번 줍니다. 다음 턴에 카드를 1장 더 뽑습니다.\", kind = \"Attack\", damage = 5, class = \"hermit\", rarity = \"unique\", hits = 2, nextTurnDraw = 1, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitDarkFlare = { name = \"다크 플레어\", cost = 2, desc = \"매 턴 모든 적에게 피해 3을 줍니다. 턴 시작마다 표창 1장을 손에 넣습니다.\", kind = \"Power\", powerEffect = \"damagePerTurn\", value = 3, class = \"hermit\", rarity = \"unique\", turnStartShiv = 1, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitShadowPartner = { name = \"쉐도우 파트너\", cost = 2, desc = \"카드를 1장 뽑습니다. 다음 턴 공격 카드의 피해가 2배가 됩니다.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, nextTurnAttackMultiplier = 2, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tSpiritJavelin = { name = \"스피릿 자벨린\", cost = 1, desc = \"표창이 턴 종료 시 사라지지 않습니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", firstShivDamageBonus = 4, shivRetain = true, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitRadicalDarkness = { name = \"래디컬 다크니스\", cost = 1, desc = \"방어도 4를 얻습니다. 이번 턴 동안 얻는 방어도가 2배가 됩니다. 소멸.\", kind = \"Skill\", block = 4, blockGainMultiplier = 2, class = \"hermit\", rarity = \"unique\", exhaust = true, image = \"0946f69d84464df29b24b94c744c868d\" },\n\tHermitVenom = { name = \"베놈\", cost = 2, desc = \"공격 카드가 막히지 않은 피해를 줄 때마다 중독 1을 부여합니다. 전투 중 독 부여 3회마다 모든 적에게 피해 8을 줍니다.\", kind = \"Power\", attackPoison = 1, class = \"hermit\", rarity = \"legend\", poisonApplicationBurstEvery = 3, poisonApplicationBurstDamage = 8, image = \"19361e72087946b1888684185b40d935\" },\n\tSkilledJavelin = { name = \"숙련된 표창술\", cost = 1, desc = \"표창의 피해량이 2 증가합니다. 매 턴 처음 사용하는 표창의 피해량이 4 증가합니다.\", kind = \"Power\", class = \"hermit\", rarity = \"unique\", shivDamageBonus = 2, firstShivDamageBonus = 4, image = \"1b0f2dc8abd0434990eee1befefcbe0d\" },\n\tHermitAdrenaline = { name = \"아드레날린\", cost = 0, desc = \"에너지를 1 얻고 카드를 1장 뽑습니다. 표창 1장을 손에 넣습니다. 소멸.\", kind = \"Skill\", class = \"hermit\", rarity = \"legend\", draw = 1, gainEnergy = 1, addShiv = 1, exhaust = true, image = \"91a2d1c16cb041549adbf1a0d7b1f37f\" },\n}\nself.DrawPile = {}\nfor i = 1, #self.RunDeck do\n\tself.DrawPile[i] = self.RunDeck[i]\nend\nself:Shuffle(self.DrawPile)\nself:PrepareCombatDrawPile()\nself:BuildMonsters()\nself:RenderCombat()\nself:StartPlayerTurn()\nself:ApplyRelics(\"combatStart\")\nself:RenderCombat()\nlocal slotTid = 0\nslotTid = _TimerService:SetTimerRepeat(function()\n\tif self.CombatOver == true or self.Monsters == nil or #self.Monsters == 0 then\n\t\t_TimerService:ClearTimer(slotTid)\n\t\treturn\n\tend\n\tfor i = 1, #self.Monsters do\n\t\tif self.Monsters[i] ~= nil and self.Monsters[i].alive == true then\n\t\t\tself:PositionMonsterSlot(i)\n\t\tend\n\tend\nend, 0.15)", "Scope": 2, "ExecSpace": 6, "Attributes": [], @@ -1941,7 +1941,7 @@ "Name": null }, "Arguments": [], - "Code": "self.Monsters = {}\nlocal g = \"combat\"\nlocal node = self.MapNodes[self.CurrentNodeId]\nif node ~= nil and node.type ~= nil then g = node.type end\nlocal pmap = \"\"\nlocal lp = _UserService.LocalPlayer\nif lp ~= nil and lp.CurrentMapName ~= nil then pmap = lp.CurrentMapName end\nlocal reg = self.Registered or {}\nfor i = 1, #reg do\n\tif reg[i].entity ~= nil and isvalid(reg[i].entity) then\n\t\treg[i].entity:SetVisible(false)\n\tend\nend\nlocal byGroup = {}\nfor i = 1, #reg do\n\tlocal r = reg[i]\n\tif r.entity ~= nil and isvalid(r.entity) and (r.map == nil or r.map == \"\" or pmap == \"\" or r.map == pmap) then\n\t\tlocal gg = r.group\n\t\tif gg == nil or gg == \"\" then gg = \"combat\" end\n\t\tif byGroup[gg] == nil then byGroup[gg] = {} end\n\t\tlocal x = 0\n\t\tif r.entity.TransformComponent ~= nil then\n\t\t\tx = r.entity.TransformComponent.WorldPosition.x\n\t\tend\n\t\ttable.insert(byGroup[gg], { entity = r.entity, enemyId = r.enemyId, x = x })\n\tend\nend\n-- 노드 타입별 랜덤 구성: 일반 1~3 / 엘리트 1+일반0~2 / 보스 1\nlocal chosen = {}\nlocal function takeFrom(key, k)\n\tlocal src = byGroup[key] or {}\n\tlocal pool = {}\n\tfor i = 1, #src do pool[i] = src[i] end\n\tself:Shuffle(pool)\n\tlocal taken = 0\n\tfor i = 1, #pool do\n\t\tif taken >= k then break end\n\t\ttable.insert(chosen, pool[i])\n\t\ttaken = taken + 1\n\tend\nend\nif g == \"boss\" then\n\ttakeFrom(\"boss\", 1)\nelseif g == \"elite\" then\n\ttakeFrom(\"elite\", 1)\n\ttakeFrom(\"combat\", math.random(0, 2))\nelse\n\ttakeFrom(\"combat\", math.random(1, 3))\nend\nif #chosen == 0 then takeFrom(g, 1) end\nif #chosen == 0 then takeFrom(\"combat\", 1) end\ntable.sort(chosen, function(a, b) return a.x < b.x end)\nlocal mult = 1 + (self.Floor - 1) * 0.45\nif g == \"elite\" or g == \"boss\" then\n\tmult = mult + self:AscEliteBonus()\nend\nlocal n = #chosen\nif n > 4 then n = 4 end\nfor i = 1, n do\n\tlocal item = chosen[i]\n\tlocal e = self.Enemies[item.enemyId]\n\tif e == nil then e = { name = item.enemyId, maxHp = 10, intents = { { kind = \"Attack\", value = 5 } } } end\n\tlocal intents = {}\n\tfor k = 1, #e.intents do\n\t\tlocal v = e.intents[k].value or 0\n\t\tif e.intents[k].kind == \"Attack\" then\n\t\t\tv = math.floor(v * mult * self:AscAtkMult())\n\t\telseif e.intents[k].kind ~= \"Debuff\" then\n\t\t\tv = math.floor(v * mult)\n\t\tend\n\t\tintents[k] = { kind = e.intents[k].kind, value = v, effect = e.intents[k].effect, card = e.intents[k].card, count = e.intents[k].count }\n\tend\n\tlocal maxHp = math.floor(e.maxHp * mult * self:AscHpMult())\n\tlocal hitClip = nil\n\tlocal standClip = nil\n\tif item.entity.StateAnimationComponent ~= nil then\n\t\tpcall(function()\n\t\t\thitClip = item.entity.StateAnimationComponent.ActionSheet[\"hit\"]\n\t\t\tstandClip = item.entity.StateAnimationComponent.ActionSheet[\"stand\"]\n\t\tend)\n\tend\n\tlocal startIdx = 1\n\tif #intents > 0 then startIdx = math.random(1, #intents) end\n\tself.Monsters[i] = { entity = item.entity, enemyId = item.enemyId, name = e.name,\n\t\thp = maxHp, maxHp = maxHp, block = 0, str = e.str or 0, weak = 0, vuln = 0, poison = 0, artifact = e.artifact or 0,\n\t\thitClip = hitClip, standClip = standClip, motionBusy = false,\n\t\tintents = intents, intentIdx = startIdx, alive = true, slot = i }\n\tself:ReviveMonsterEntity(item.entity)\n\tself:PositionMonsterSlot(i)\nend\nself.TargetIndex = 1", + "Code": "self.Monsters = {}\nlocal g = \"combat\"\nlocal node = self.MapNodes[self.CurrentNodeId]\nif node ~= nil and node.type ~= nil then g = node.type end\nlocal pmap = \"\"\nlocal lp = _UserService.LocalPlayer\nif lp ~= nil and lp.CurrentMapName ~= nil then pmap = lp.CurrentMapName end\nlocal reg = self.Registered or {}\nfor i = 1, #reg do\n\tif reg[i].entity ~= nil and isvalid(reg[i].entity) then\n\t\treg[i].entity:SetVisible(false)\n\tend\nend\nlocal byGroup = {}\nfor i = 1, #reg do\n\tlocal r = reg[i]\n\tif r.entity ~= nil and isvalid(r.entity) and (r.map == nil or r.map == \"\" or pmap == \"\" or r.map == pmap) then\n\t\tlocal gg = r.group\n\t\tif gg == nil or gg == \"\" then gg = \"combat\" end\n\t\tif byGroup[gg] == nil then byGroup[gg] = {} end\n\t\tlocal x = 0\n\t\tif r.entity.TransformComponent ~= nil then\n\t\t\tx = r.entity.TransformComponent.WorldPosition.x\n\t\tend\n\t\ttable.insert(byGroup[gg], { entity = r.entity, enemyId = r.enemyId, x = x })\n\tend\nend\n-- 노드 타입별 랜덤 구성: 일반 1~3 / 엘리트 1+일반0~2 / 보스 1\nlocal chosen = {}\nlocal function takeFrom(key, k)\n\tlocal src = byGroup[key] or {}\n\tlocal pool = {}\n\tfor i = 1, #src do pool[i] = src[i] end\n\tself:Shuffle(pool)\n\tlocal taken = 0\n\tfor i = 1, #pool do\n\t\tif taken >= k then break end\n\t\ttable.insert(chosen, pool[i])\n\t\ttaken = taken + 1\n\tend\nend\nif g == \"boss\" then\n\ttakeFrom(\"boss\", 1)\nelseif g == \"elite\" then\n\ttakeFrom(\"elite\", 1)\n\ttakeFrom(\"combat\", math.random(0, 2))\nelse\n\ttakeFrom(\"combat\", math.random(1, 3))\nend\nif #chosen == 0 then takeFrom(g, 1) end\nif #chosen == 0 then takeFrom(\"combat\", 1) end\ntable.sort(chosen, function(a, b) return a.x < b.x end)\nlocal actMultipliers = { 1, 1.075, 1.15, 1.3, 1.45 }\nlocal mult = actMultipliers[self.Floor] or actMultipliers[#actMultipliers]\nif g == \"elite\" or g == \"boss\" then\n\tmult = mult + self:AscEliteBonus()\nend\nlocal n = #chosen\nif n > 4 then n = 4 end\nfor i = 1, n do\n\tlocal item = chosen[i]\n\tlocal e = self.Enemies[item.enemyId]\n\tif e == nil then e = { name = item.enemyId, maxHp = 10, intents = { { kind = \"Attack\", value = 5 } } } end\n\tlocal intents = {}\n\tfor k = 1, #e.intents do\n\t\tlocal v = e.intents[k].value or 0\n\t\tif e.intents[k].kind == \"Attack\" then\n\t\t\tv = math.floor(v * mult * self:AscAtkMult())\n\t\telseif e.intents[k].kind ~= \"Debuff\" then\n\t\t\tv = math.floor(v * mult)\n\t\tend\n\t\tintents[k] = { kind = e.intents[k].kind, value = v, effect = e.intents[k].effect, card = e.intents[k].card, count = e.intents[k].count }\n\tend\n\tlocal maxHp = math.floor(e.maxHp * mult * self:AscHpMult())\n\tlocal hitClip = nil\n\tlocal standClip = nil\n\tif item.entity.StateAnimationComponent ~= nil then\n\t\tpcall(function()\n\t\t\thitClip = item.entity.StateAnimationComponent.ActionSheet[\"hit\"]\n\t\t\tstandClip = item.entity.StateAnimationComponent.ActionSheet[\"stand\"]\n\t\tend)\n\tend\n\tlocal startIdx = 1\n\tif #intents > 0 then startIdx = math.random(1, #intents) end\n\tself.Monsters[i] = { entity = item.entity, enemyId = item.enemyId, name = e.name,\n\t\thp = maxHp, maxHp = maxHp, block = 0, str = e.str or 0, weak = 0, vuln = 0, poison = 0, artifact = e.artifact or 0,\n\t\thitClip = hitClip, standClip = standClip, motionBusy = false,\n\t\tintents = intents, intentIdx = startIdx, alive = true, slot = i }\n\tself:ReviveMonsterEntity(item.entity)\n\tself:PositionMonsterSlot(i)\nend\nself.TargetIndex = 1", "Scope": 2, "ExecSpace": 6, "Attributes": [], diff --git a/data/cards.json b/data/cards.json index f70665f..d90f433 100644 --- a/data/cards.json +++ b/data/cards.json @@ -508,7 +508,7 @@ "name": "단검 분사", "cost": 1, "kind": "Attack", - "class": "rogue", + "class": "thief", "rarity": "normal", "desc": "모든 적에게 피해를 4만큼 2번 줍니다.", "aoe": true, @@ -520,10 +520,10 @@ "name": "단검 투척", "cost": 1, "kind": "Attack", - "class": "rogue", + "class": "thief", "rarity": "normal", "desc": "피해를 9 줍니다. 카드를 1장 뽑습니다. 카드를 1장 버립니다.", - "drawUntilHandSize": 6, + "draw": 1, "damage": 9, "discard": 1, "image": "1b0f2dc8abd0434990eee1befefcbe0d" @@ -545,10 +545,9 @@ "kind": "Attack", "class": "rogue", "rarity": "normal", - "desc": "피해를 8 줍니다. 약화를 1 부여합니다.", + "desc": "피해를 7 줍니다. 약화를 1 부여합니다.", "weak": 1, - "damage": 8, - "cardPlayedDamage": 2, + "damage": 7, "image": "92a5020c978c46bdabab910598118b86" }, "LeadingStrike": { @@ -557,16 +556,16 @@ "kind": "Attack", "class": "rogue", "rarity": "normal", - "desc": "피해를 3 줍니다. 표창을 2장 손으로 가져옵니다.", + "desc": "피해를 3 줍니다. 표창을 1장 손으로 가져옵니다.", "damage": 3, - "addShiv": 2, + "addShiv": 1, "image": "1b0f2dc8abd0434990eee1befefcbe0d" }, "FollowThrough": { "name": "완수", "cost": 1, "kind": "Attack", - "class": "rogue", + "class": "thief", "rarity": "normal", "desc": "피해를 7 줍니다. 손에 다른 카드가 5장 이상 있다면, 1번 추가로 적중합니다.", "damage": 7, @@ -578,7 +577,7 @@ "name": "재주넘기", "cost": 1, "kind": "Attack", - "class": "rogue", + "class": "thief", "rarity": "normal", "desc": "교활. 모든 적에게 피해를 6 줍니다.", "aoe": true, @@ -590,7 +589,7 @@ "name": "도탄", "cost": 2, "kind": "Attack", - "class": "rogue", + "class": "assassin", "rarity": "normal", "desc": "교활. 무작위 적에게 피해를 3만큼 4번 줍니다.", "damage": 3, @@ -601,12 +600,12 @@ }, "Prepared": { "name": "예비", - "cost": 0, + "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "normal", - "desc": "카드를 1장 버리고, 이번 턴에 준 피해만큼 방어를 얻습니다.", - "blockPerDamageDealtThisTurn": 1, + "desc": "카드를 1장 버리고, 이번 턴에 준 피해의 절반만큼 방어를 얻습니다.", + "blockPerDamageDealtThisTurn": 0.5, "discard": 1, "image": "c1e19219745e44c39ae6ac2f77e347d9" }, @@ -618,6 +617,7 @@ "rarity": "normal", "desc": "이번 턴 동안 민첩을 2 얻습니다.", "dex": 2, + "endTurnDexLoss": 2, "image": "49c8f279bfa64bf3954037f17da0052d" }, "Deflect": { @@ -634,7 +634,7 @@ "name": "검무", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "assassin", "rarity": "normal", "desc": "표창을 3장 손으로 가져옵니다. 소멸.", "addShiv": 3, @@ -667,19 +667,19 @@ "name": "귀를 찢는 비명", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "normal", "desc": "이번 턴 동안 모든 적이 힘을 6 잃습니다. 소멸.", - "draw": 1, "image": "0946f69d84464df29b24b94c744c868d", "affectsAllEnemies": true, - "enemyStrengthLossThisTurn": 6 + "enemyStrengthLossThisTurn": 6, + "exhaust": true }, "CloakAndDagger": { "name": "망토와 단검", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "assassin", "rarity": "normal", "desc": "방어도를 6 얻습니다. 표창을 1장 손으로 가져옵니다.", "block": 6, @@ -690,7 +690,7 @@ "name": "맹독", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "normal", "desc": "중독을 5 부여합니다.", "poison": 5, @@ -700,7 +700,7 @@ "name": "뱀 물기", "cost": 2, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "normal", "desc": "보존. 중독을 7 부여합니다.", "poison": 7, @@ -722,12 +722,11 @@ "name": "꼬챙이", "cost": 2, "kind": "Attack", - "class": "rogue", + "class": "assassin", "rarity": "unique", "desc": "피해를 8만큼 X번 줍니다.", "useAllEnergy": true, "xDamagePerEnergy": 8, - "draw": 1, "image": "92a5020c978c46bdabab910598118b86" }, "Backstab": { @@ -736,16 +735,17 @@ "kind": "Attack", "class": "rogue", "rarity": "unique", - "desc": "선천성. 피해를 11 줍니다. 소멸.", + "desc": "선천성. 피해를 10 줍니다. 소멸.", "innate": true, - "damage": 11, + "damage": 10, + "exhaust": true, "image": "b1360ed0c4b942309d240634b8f36872" }, "PreciseCut": { "name": "정밀한 베기", "cost": 0, "kind": "Attack", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "피해를 13 줍니다. 손에 있는 다른 카드 1장당 피해량이 2 감소합니다.", "damage": 13, @@ -756,7 +756,7 @@ "name": "마무리", "cost": 1, "kind": "Attack", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "이번 턴에 사용한 공격 카드 1장당 피해를 6 줍니다.", "damage": 0, @@ -767,7 +767,7 @@ "name": "메멘토 모리", "cost": 1, "kind": "Attack", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "피해를 9 줍니다. 이번 턴에 버린 카드 1장당 피해량이 4 증가합니다.", "damage": 9, @@ -778,7 +778,7 @@ "name": "목 조르기", "cost": 1, "kind": "Attack", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "피해를 8 줍니다.", "damage": 8, @@ -788,7 +788,7 @@ "name": "프레췌", "cost": 1, "kind": "Attack", - "class": "rogue", + "class": "assassin", "rarity": "unique", "desc": "손에 있는 스킬 카드 1장당 피해를 5 줍니다.", "damage": 0, @@ -799,7 +799,7 @@ "name": "덮치기", "cost": 2, "kind": "Attack", - "class": "rogue", + "class": "assassin", "rarity": "unique", "desc": "피해를 12 줍니다. 다음에 사용하는 스킬 카드의 비용이 0 이 됩니다.", "damage": 12, @@ -810,7 +810,7 @@ "name": "돌진", "cost": 2, "kind": "Attack", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "방어도를 10 얻습니다. 피해를 10 줍니다.", "block": 10, @@ -821,7 +821,7 @@ "name": "천적", "cost": 2, "kind": "Attack", - "class": "rogue", + "class": "assassin", "rarity": "unique", "desc": "피해를 15 줍니다. 다음 턴에, 카드를 2장 뽑습니다.", "nextTurnDraw": 2, @@ -832,7 +832,7 @@ "name": "정밀 사격", "cost": 3, "kind": "Attack", - "class": "rogue", + "class": "assassin", "rarity": "unique", "desc": "피해를 15 줍니다. 이번 턴에 스킬을 사용할 때마다 비용이 1 감소합니다.", "damage": 15, @@ -843,31 +843,32 @@ "name": "계산된 도박", "cost": 0, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "손에 있는 모든 카드를 버린 뒤, 버린 카드의 수만큼 카드를 뽑습니다. 소멸.", "image": "c1e19219745e44c39ae6ac2f77e347d9", "discardAll": true, - "drawPerDiscarded": 1 + "drawPerDiscarded": 1, + "exhaust": true }, "Expose": { "name": "들춰내기", "cost": 0, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "대상 적의 모든 인공물과 방어도를 제거합니다. 취약을 2 부여합니다. 소멸.", "vuln": 2, "image": "0946f69d84464df29b24b94c744c868d", - "affectsAllEnemies": true, "removeEnemyBlock": true, - "removeEnemyArtifact": true + "removeEnemyArtifact": true, + "exhaust": true }, "HiddenDaggers": { - "name": "숨겨진 단검", + "name": "숨겨진 표창", "cost": 0, "kind": "Skill", - "class": "rogue", + "class": "assassin", "rarity": "unique", "desc": "카드를 2장 버립니다. 표창을 2장 손으로 가져옵니다.", "discard": 2, @@ -889,7 +890,7 @@ "name": "곡예", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "카드를 3장 뽑습니다. 카드를 1장 버립니다.", "draw": 3, @@ -900,28 +901,18 @@ "name": "손기술", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "방어도를 7 얻습니다. 이번 턴 동안 손에 있는 스킬 카드 1장에 교활을 추가합니다.", "block": 7, "image": "c1e19219745e44c39ae6ac2f77e347d9", "turnHandSlyCount": 1 }, - "Mirage": { - "name": "신기루", - "cost": 1, - "kind": "Skill", - "class": "rogue", - "rarity": "unique", - "desc": "카드를 1장 뽑습니다.", - "draw": 1, - "image": "0946f69d84464df29b24b94c744c868d" - }, "Expertise": { "name": "전문성", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "손에 있는 카드가 6장이 될 때까지 카드를 뽑습니다.", "image": "c1e19219745e44c39ae6ac2f77e347d9", @@ -931,7 +922,7 @@ "name": "차오르는 독", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "적이 중독을 보유하고 있다면, 중독을 9 부여합니다.", "poison": 9, @@ -942,7 +933,7 @@ "name": "흐릿함", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "방어도를 5 얻습니다. 다음 턴 시작 시 방어도가 사라지지 않습니다.", "block": 5, @@ -953,7 +944,7 @@ "name": "다리 걸기", "cost": 2, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "약화를 2 부여합니다. 방어도를 11 얻습니다.", "block": 11, @@ -964,7 +955,7 @@ "name": "비책", "cost": 2, "kind": "Skill", - "class": "rogue", + "class": "assassin", "rarity": "unique", "desc": "표창을 3장 손으로 가져옵니다. 이 카드의 비용이 1 감소합니다.", "addShiv": 3, @@ -975,7 +966,7 @@ "name": "탄성 플라스크", "cost": 2, "kind": "Skill", - "class": "rogue", + "class": "thiefmaster", "rarity": "unique", "desc": "무작위 적에게 중독을 3만큼 3번 부여합니다.", "poison": 3, @@ -987,7 +978,7 @@ "name": "반사신경", "cost": 3, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "교활. 카드를 2장 뽑습니다.", "draw": 2, @@ -998,7 +989,7 @@ "name": "아지랑이", "cost": 3, "kind": "Skill", - "class": "rogue", + "class": "thiefmaster", "rarity": "unique", "desc": "교활. 모든 적에게 중독을 4 부여합니다.", "poison": 4, @@ -1009,7 +1000,7 @@ "name": "전략가", "cost": 3, "kind": "Skill", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "교활. 에너지를 1 얻습니다.", "gainEnergy": 1, @@ -1020,7 +1011,7 @@ "name": "괜찮은 전략", "cost": 1, "kind": "Power", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "내 턴 종료 시, 카드를 최대 1장까지 보존합니다.", "powerEffect": "retainOne", @@ -1031,7 +1022,7 @@ "name": "무한의 검날", "cost": 1, "kind": "Power", - "class": "rogue", + "class": "assassin", "rarity": "unique", "desc": "내 턴 시작 시, 표창을 1장 손으로 가져옵니다.", "turnStartShiv": 1, @@ -1041,7 +1032,7 @@ "name": "발놀림", "cost": 1, "kind": "Power", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "민첩을 2 얻습니다.", "dex": 2, @@ -1049,20 +1040,20 @@ }, "Outbreak": { "name": "발병", - "cost": 1, + "cost": 2, "kind": "Power", - "class": "rogue", + "class": "thiefmaster", "rarity": "unique", - "desc": "독이 3번 부여될 때마다 모든 적에게 11 피해를 줍니다.", + "desc": "독이 3번 부여될 때마다 모든 적에게 6 피해를 줍니다.", "image": "19361e72087946b1888684185b40d935", "poisonApplicationBurstEvery": 3, - "poisonApplicationBurstDamage": 11 + "poisonApplicationBurstDamage": 6 }, "NoxiousFumes": { "name": "유독 가스", "cost": 1, "kind": "Power", - "class": "rogue", + "class": "thief", "rarity": "unique", "desc": "내 턴 시작 시, 모든 적에게 중독을 2 부여합니다.", "poison": 2, @@ -1070,69 +1061,49 @@ "value": 2, "image": "19361e72087946b1888684185b40d935" }, - "Accuracy": { - "name": "정밀", - "cost": 1, - "kind": "Power", - "class": "rogue", - "rarity": "unique", - "desc": "표창의 피해량이 4 증가합니다.", - "shivDamageBonus": 4, - "image": "1b0f2dc8abd0434990eee1befefcbe0d" - }, - "PhantomBlades": { - "name": "환영검", - "cost": 1, - "kind": "Power", - "class": "rogue", - "rarity": "unique", - "desc": "표창이 보존을 얻습니다. 매 턴마다 처음으로 사용하는 표창의 피해량이 9 증가합니다.", - "shivRetain": true, - "firstShivDamageBonus": 9, - "image": "0946f69d84464df29b24b94c744c868d" - }, "Speedster": { "name": "스피드스터", "cost": 2, "kind": "Power", - "class": "rogue", + "class": "thiefmaster", "rarity": "unique", - "desc": "내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 2 줍니다.", + "desc": "내 턴 동안 카드를 뽑을 때마다, 모든 적에게 피해를 1 줍니다.", "aoe": true, - "drawDamage": 2, + "drawDamage": 1, "image": "91a2d1c16cb041549adbf1a0d7b1f37f" }, "GrandFinale": { "name": "대단원의 막", "cost": 0, "kind": "Attack", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", - "desc": "뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 60 줍니다.", + "desc": "뽑을 카드 더미에 카드가 없을 때만 사용할 수 있습니다. 모든 적에게 피해를 45 줍니다.", "playableWhenDrawPileEmpty": true, "aoe": true, - "damage": 60, + "damage": 45, "image": "dbdbb1b56ae54672ae68ac6882fff6a2" }, "Assassinate": { "name": "암살", "cost": 0, "kind": "Attack", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "선천성. 피해를 10 줍니다. 취약을 1 부여합니다. 소멸.", "innate": true, "vuln": 1, "damage": 10, + "exhaust": true, "image": "b1360ed0c4b942309d240634b8f36872" }, "EchoingSlash": { "name": "메아리 참격", - "cost": 1, + "cost": 2, "kind": "Attack", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", - "desc": "모든 적에게 피해를 10 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.", + "desc": "모든 적에게 피해를 6 줍니다. 적을 처치할 때마다 이 효과를 반복합니다.", "aoe": true, "damage": 10, "image": "dbdbb1b56ae54672ae68ac6882fff6a2", @@ -1142,18 +1113,19 @@ "name": "사냥", "cost": 1, "kind": "Attack", - "class": "rogue", + "class": "assassin", "rarity": "legend", - "desc": "피해를 10 줍니다. 치명타라면, 카드 보상을 추가로 얻습니다. 소멸.", - "damage": 10, + "desc": "피해를 10 줍니다. 이 카드로 적을 처치하면 카드 보상을 추가로 얻습니다. 소멸.", + "damage": 6, "rewardOnKill": 1, + "exhaust": true, "image": "b1360ed0c4b942309d240634b8f36872" }, "Murder": { "name": "살해", "cost": 3, "kind": "Attack", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "피해를 1 줍니다. 이번 전투 동안 뽑은 카드 1장당 피해량이 1 증가합니다.", "damage": 1, @@ -1164,29 +1136,18 @@ "name": "불쾌", "cost": 2, "kind": "Skill", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "에너지를 모두 사용하고, 사용한 에너지만큼 적에게 약화를 부여합니다.", "useAllEnergy": true, "xWeakPerEnergy": 1, "image": "0946f69d84464df29b24b94c744c868d" }, - "Adrenaline": { - "name": "아드레날린", - "cost": 0, - "kind": "Skill", - "class": "rogue", - "rarity": "legend", - "desc": "에너지를 1 얻습니다. 카드를 2장 뽑습니다. 소멸.", - "draw": 2, - "gainEnergy": 1, - "image": "91a2d1c16cb041549adbf1a0d7b1f37f" - }, "StormOfSteel": { "name": "강철의 폭풍", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "assassin", "rarity": "legend", "desc": "손에 있는 모든 카드를 버립니다. 버린 카드의 수만큼 표창을 손으로 가져옵니다.", "discardAll": true, @@ -1197,7 +1158,7 @@ "name": "그림자 걸음", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "손에 있는 모든 카드를 버립니다. 다음 턴에, 공격 카드의 피해량이 2배가 됩니다.", "nextTurnAttackMultiplier": 2, @@ -1208,7 +1169,7 @@ "name": "그림자 은신", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "이번 턴 동안 얻는 방어도가 2배가 됩니다.", "blockGainMultiplier": 2, @@ -1218,7 +1179,7 @@ "name": "부식성 파도", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "이번 턴에 카드를 뽑을 때마다, 모든 적에게 중독을 2 부여합니다.", "drawPoison": 2, @@ -1228,7 +1189,7 @@ "name": "잉크 칼날", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "hermit", "rarity": "legend", "desc": "잉크투성이 표창을 2장 손으로 가져옵니다.", "addShiv": 2, @@ -1238,28 +1199,30 @@ "name": "폭주", "cost": 1, "kind": "Skill", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "이번 턴에 다음에 사용하는 스킬 카드가 1번 추가로 사용됩니다.", - "draw": 1, "nextSkillRepeatCount": 1, "image": "91a2d1c16cb041549adbf1a0d7b1f37f" }, "KnifeTrap": { "name": "칼날 함정", "cost": 2, - "kind": "Skill", - "class": "rogue", + "kind": "Attack", + "class": "thiefmaster", "rarity": "legend", - "desc": "카드를 1장 뽑습니다.", - "draw": 1, + "desc": "교활. 모든 적에게 피해를 7 주고 중독을 2 부여합니다.", + "aoe": true, + "damage": 7, + "poison": 2, + "sly": true, "image": "1b0f2dc8abd0434990eee1befefcbe0d" }, "BulletTime": { "name": "불릿 타임", "cost": 3, "kind": "Skill", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "이번 턴 동안 더 이상 카드를 뽑을 수 없습니다. 이번 턴 동안 손에 있는 모든 카드를 비용 없이 사용할 수 있습니다.", "handCostZeroThisTurn": true, @@ -1270,80 +1233,41 @@ "name": "악몽", "cost": 3, "kind": "Skill", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "카드를 1장 선택합니다. 다음 턴에, 그 카드의 복사본을 3장 손으로 가져옵니다. 소멸.", "nextTurnCopies": 3, "nextTurnSelectHandCard": true, "nextTurnSelectPrompt": "복사할 카드를 선택하세요", + "exhaust": true, "image": "0946f69d84464df29b24b94c744c868d" }, "ToolsOfTheTrade": { "name": "작업 도구", "cost": 1, "kind": "Power", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "내 턴 시작 시, 카드를 1장 뽑고 카드를 1장 버립니다.", "turnStartDraw": 1, "turnStartDiscard": 1, "image": "c1e19219745e44c39ae6ac2f77e347d9" }, - "Afterimage": { - "name": "잔상", - "cost": 1, - "kind": "Power", - "class": "rogue", - "rarity": "legend", - "desc": "카드를 사용할 때마다, 방어도를 1 얻습니다.", - "image": "0946f69d84464df29b24b94c744c868d", - "cardPlayedBlock": 1 - }, - "Accelerant": { - "name": "촉진제", - "cost": 1, - "kind": "Power", - "class": "rogue", - "rarity": "legend", - "desc": "적 턴 시작 시 독이 한 번 더 틱합니다.", - "image": "19361e72087946b1888684185b40d935", - "extraPoisonTicks": 1 - }, - "Envenom": { - "name": "독 바르기", - "cost": 2, - "kind": "Power", - "class": "rogue", - "rarity": "legend", - "desc": "공격 카드가 막히지 않은 피해를 줄 때마다, 중독을 1 부여합니다.", - "attackPoison": 1, - "image": "19361e72087946b1888684185b40d935" - }, "MasterPlanner": { "name": "설계의 대가", "cost": 2, "kind": "Power", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "사용한 스킬 카드는 교활해집니다.", "image": "c1e19219745e44c39ae6ac2f77e347d9", "skillSlyOnPlay": true }, - "Tracking": { - "name": "추적", - "cost": 2, - "kind": "Power", - "class": "rogue", - "rarity": "legend", - "desc": "약화 상태의 적이 공격 카드로 받는 피해가 2배가 됩니다.", - "attackDamageVsWeakMultiplier": 2, - "image": "b1360ed0c4b942309d240634b8f36872" - }, "FanOfKnives": { "name": "칼날 부채", "cost": 2, "kind": "Skill", - "class": "rogue", + "class": "hermit", "rarity": "legend", "desc": "표창이 이제 모든 적을 대상으로 합니다. 표창을 4장 손으로 가져옵니다.", "addShiv": 4, @@ -1352,9 +1276,9 @@ }, "SerpentForm": { "name": "구렁이의 형상", - "cost": 3, + "cost": 2, "kind": "Power", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "카드를 사용할 때마다, 무작위 적에게 피해를 4 줍니다.", "cardPlayedRandomDamage": 4, @@ -1362,9 +1286,9 @@ }, "Abrasive": { "name": "연마", - "cost": 3, + "cost": 2, "kind": "Power", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "교활. 민첩을 1 얻습니다. 가시를 4 얻습니다.", "dex": 1, @@ -1376,19 +1300,20 @@ "name": "진압", "cost": 0, "kind": "Attack", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", - "desc": "선천성. 피해를 11 줍니다. 약화를 3 부여합니다.", + "desc": "선천성. 피해를 9 줍니다. 약화를 2 부여합니다. 소멸.", "innate": true, - "weak": 3, - "damage": 11, + "weak": 2, + "damage": 9, + "exhaust": true, "image": "b1360ed0c4b942309d240634b8f36872" }, "WraithForm": { "name": "유령의 형상", "cost": 3, "kind": "Power", - "class": "rogue", + "class": "thiefmaster", "rarity": "legend", "desc": "불가침을 2 얻습니다. 내 턴 종료 시 민첩을 1 잃습니다.", "intangible": 2, @@ -1421,7 +1346,7 @@ }, "Steal": { "name": "스틸", - "cost": 0, + "cost": 1, "kind": "Attack", "class": "thief", "rarity": "normal", @@ -1437,11 +1362,10 @@ "kind": "Skill", "class": "thief", "rarity": "normal", - "desc": "카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 카드를 1장 더 뽑고, 표창 1장을 손에 넣습니다.", + "desc": "카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 카드를 1장 더 뽑습니다.", "draw": 1, "discard": 1, "drawPerDiscarded": 1, - "addShiv": 1, "image": "91a2d1c16cb041549adbf1a0d7b1f37f" }, "Karma": { @@ -1469,14 +1393,13 @@ }, "PhysicalTraining": { "name": "피지컬 트레이닝", - "cost": 1, - "kind": "Skill", + "cost": 2, + "kind": "Power", "class": "thief", "rarity": "normal", - "desc": "힘을 1 얻습니다. 민첩을 1 얻습니다. 방어도를 4 얻습니다.", + "desc": "힘을 1 얻습니다. 민첩을 1 얻습니다.", "strength": 1, "dex": 1, - "block": 4, "image": "49c8f279bfa64bf3954037f17da0052d" }, "ShieldMastery": { @@ -1496,9 +1419,10 @@ "kind": "Skill", "class": "thief", "rarity": "unique", - "desc": "방어도를 5 얻습니다. 민첩을 1 얻습니다. 이번 턴 동안 손의 다른 스킬 카드 1장이 교활해집니다.", + "desc": "방어도를 5 얻습니다. 이번 턴 동안 민첩을 1 얻습니다. 손의 다른 스킬 카드 1장이 교활해집니다.", "block": 5, "dex": 1, + "endTurnDexLoss": 1, "turnHandSlyCount": 1, "image": "91a2d1c16cb041549adbf1a0d7b1f37f" }, @@ -1508,16 +1432,15 @@ "kind": "Attack", "class": "thiefmaster", "rarity": "unique", - "desc": "무작위 적에게 피해를 2만큼 4번 줍니다. 표창 1장을 손에 넣습니다.", + "desc": "무작위 적에게 피해를 2만큼 4번 줍니다.", "damage": 2, "hits": 4, "randomTargetEachHit": true, - "addShiv": 1, "image": "1b0f2dc8abd0434990eee1befefcbe0d" }, "MuspelHeim": { "name": "무스펠 하임", - "cost": 2, + "cost": 1, "kind": "Attack", "class": "thiefmaster", "rarity": "unique", @@ -1542,7 +1465,7 @@ }, "DarkFlare": { "name": "다크 플레어", - "cost": 2, + "cost": 1, "kind": "Power", "class": "thiefmaster", "rarity": "unique", @@ -1558,10 +1481,9 @@ "kind": "Skill", "class": "thiefmaster", "rarity": "unique", - "desc": "카드를 1장 뽑습니다. 카드를 1장 버립니다. 버린 카드마다 표창 1장을 손에 넣고, 에너지를 1 얻습니다.", + "desc": "카드를 1장 뽑습니다. 카드를 1장 버리고, 에너지를 1 얻습니다.", "draw": 1, "discard": 1, - "addShivPerDiscard": true, "gainEnergy": 1, "image": "c1e19219745e44c39ae6ac2f77e347d9" }, @@ -1604,7 +1526,7 @@ }, "Venom": { "name": "베놈", - "cost": 2, + "cost": 1, "kind": "Power", "class": "thiefmaster", "rarity": "legend", @@ -1615,7 +1537,7 @@ }, "Grid": { "name": "그리드", - "cost": 1, + "cost": 2, "kind": "Power", "class": "thiefmaster", "rarity": "unique", @@ -1654,9 +1576,8 @@ "kind": "Skill", "class": "assassin", "rarity": "unique", - "desc": "카드를 1장 뽑고, 에너지를 1 얻습니다. 이번 턴 동안 스킬 카드의 비용이 1 감소합니다.", + "desc": "카드를 1장 뽑습니다. 이번 턴 동안 스킬 카드의 비용이 1 감소합니다.", "draw": 1, - "gainEnergy": 1, "skillCostReductionThisTurn": 1, "image": "91a2d1c16cb041549adbf1a0d7b1f37f" }, @@ -1666,9 +1587,9 @@ "kind": "Power", "class": "assassin", "rarity": "unique", - "desc": "약화 1을 부여합니다. 약화 상태의 적에게 주는 공격 피해가 2배가 됩니다.", + "desc": "약화 1을 부여합니다. 약화 상태의 적에게 주는 공격 피해가 1.5배가 됩니다.", "weak": 1, - "attackDamageVsWeakMultiplier": 2, + "attackDamageVsWeakMultiplier": 1.5, "image": "c1e19219745e44c39ae6ac2f77e347d9" }, "ShadowRush": { @@ -1688,9 +1609,10 @@ "kind": "Skill", "class": "assassin", "rarity": "normal", - "desc": "방어도 4를 얻습니다. 다음 턴에 방어도 4를 얻습니다.", + "desc": "방어도 4를 얻습니다. 다음 턴에 방어도 4를 얻습니다. 소멸.", "block": 4, "nextTurnBlock": 4, + "exhaust": true, "image": "91a2d1c16cb041549adbf1a0d7b1f37f" }, "ShadowBlink": { @@ -1717,7 +1639,7 @@ }, "JavelinAcceleration": { "name": "자벨린 액셀레이션", - "cost": 0, + "cost": 1, "kind": "Skill", "class": "assassin", "rarity": "normal", @@ -1733,17 +1655,17 @@ "kind": "Attack", "class": "assassin", "rarity": "unique", - "desc": "피해를 7씩 2번 줍니다. 방어도를 무시합니다. 이번 턴 첫 카드라면 피해가 더 강해집니다.", - "damage": 7, + "desc": "피해를 6씩 2번 줍니다. 방어도를 무시합니다. 이번 턴 첫 카드라면 피해가 더 강해집니다.", + "damage": 6, "hits": 2, "pierce": true, - "firstCardDamageBonus": 3, + "firstCardDamageBonus": 2, "image": "b1360ed0c4b942309d240634b8f36872" }, "AssassinPhysicalTraining": { "name": "피지컬 트레이닝", - "cost": 1, - "kind": "Skill", + "cost": 2, + "kind": "Power", "class": "assassin", "rarity": "normal", "desc": "힘 1, 민첩 1을 얻고 카드를 1장 뽑습니다.", diff --git a/data/cards.xlsx b/data/cards.xlsx index 3ab9ad01449ae49569343b3b2890b9d97453bc0b..d28cf2e17749cbd31121dd5bddc5c03717032f5e 100644 GIT binary patch delta 18749 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 A8UO$Q delta 19410 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 { + if (values.length === 0) return 0; + const sorted = values.slice().sort((a, b) => a - b); + const middle = Math.floor(sorted.length / 2); + return sorted.length % 2 === 1 + ? sorted[middle] + : (sorted[middle - 1] + sorted[middle]) / 2; +}; + +function validateContextDecks(cards) { + for (const [classId, deck] of Object.entries(CONTEXT_DECKS)) { + for (const cardId of deck) { + if (!cards[cardId]) throw new Error(`${classId} 효율 기준 덱에 없는 카드: ${cardId}`); + } + } +} + +function outcomeScore(result) { + if (result.draw) return -60; + if (!result.win) return -100 - result.turns; + return 100 + (result.playerHpRemaining / PLAYER_HP) * 30 - result.turns * 2; +} + +function scaledEncounter(data, classId) { + const scale = ENCOUNTER_SCALE[classId]; + return { + ...data, + monsters: data.monsters.map((monster) => ({ + ...monster, + maxHp: Math.round(monster.maxHp * scale.hp), + intents: monster.intents.map((intent) => intent.kind === 'Attack' + ? { ...intent, value: Math.round(intent.value * scale.attack) } + : { ...intent }), + })), + }; +} + +function simulateDeck(baseData, deck, runs, seed, trackedCardId = null) { + let wins = 0; + let totalTurns = 0; + let totalHp = 0; + let totalScore = 0; + let totalPlays = 0; + for (let i = 0; i < runs; i++) { + const stats = {}; + const rng = mulberry32((seed + Math.imul(i + 1, 0x9e3779b1)) >>> 0); + const result = simulateCombat({ ...baseData, starterDeck: deck }, rng, stats); + if (result.win) { + wins++; + totalHp += result.playerHpRemaining; + } + totalTurns += result.turns; + totalScore += outcomeScore(result); + if (trackedCardId && stats[trackedCardId]) totalPlays += stats[trackedCardId].plays; + } + return { + winRate: wins / runs, + avgTurns: totalTurns / runs, + avgHpOnWin: wins > 0 ? totalHp / wins : 0, + score: totalScore / runs, + avgPlays: totalPlays / runs, + }; +} + +function replacementIndex(deck, cards, candidate) { + const preferredKind = candidate.kind === 'Attack' ? 'Attack' : 'Skill'; + const preferred = deck.findIndex((id) => cards[id]?.kind === preferredKind); + if (preferred >= 0) return preferred; + return 0; +} + +export function structuralRisks(card) { + const risks = []; + const cost = card.cost || 0; + const exhaust = card.exhaust === true; + const permanentDex = Math.max(0, (card.dex || 0) - (card.endTurnDexLoss || 0)); + const permanentStats = (card.strength || 0) + permanentDex + (card.thorns || 0); + const generatedCards = (card.addShiv || 0) + (card.addShivPerDiscard ? 1 : 0); + + if (cost === 0 && !exhaust && (card.gainEnergy || 0) > 0) { + risks.push('0코스트 비소멸 카드가 에너지를 생성'); + } + if (cost === 0 && !exhaust && (card.draw || 0) >= 2 && generatedCards > 0) { + risks.push('0코스트 비소멸 카드가 2장 이상 드로우하면서 카드를 생성'); + } + if (card.kind !== 'Power' && !exhaust && permanentStats > 0) { + risks.push('재사용 가능한 카드가 영구 능력치를 누적'); + } + if (card.kind === 'Power' && (card.attackDamageVsWeakMultiplier || 0) >= 2 && cost <= 1) { + risks.push('저비용 지속 효과가 공격 피해를 2배 이상 증폭'); + } + if ((card.poisonApplicationBurstEvery || 0) > 0) { + const burstPerApplication = (card.poisonApplicationBurstDamage || 0) / card.poisonApplicationBurstEvery; + if (burstPerApplication > 3 && cost <= 1) { + risks.push('저비용 독 누적 폭발 피해가 부여 1회당 3을 초과'); + } + } + if (cost === 0 && !exhaust && (card.block || 0) + (card.nextTurnBlock || 0) >= 8) { + risks.push('0코스트 비소멸 카드의 현재·다음 턴 방어 합계가 8 이상'); + } + if (cost === 0 && !exhaust && (card.blockPerDamageDealtThisTurn || 0) >= 1) { + risks.push('0코스트 비소멸 카드가 이번 턴 누적 피해 전부를 방어로 전환'); + } + if (!exhaust && (card.gainEnergy || 0) > 0 && (card.gainEnergy || 0) >= cost && (card.draw || 0) > 0 && generatedCards > 0) { + risks.push('에너지 손실 없이 드로우와 카드 생성을 동시에 수행'); + } + if (!exhaust && (card.skillCostReductionThisTurn || 0) > 0 && (card.gainEnergy || 0) > 0 && (card.gainEnergy || 0) >= cost && (card.draw || 0) > 0) { + risks.push('에너지 손실 없이 드로우하고 이번 턴 스킬 비용까지 감소'); + } + return risks; +} + +export function auditCardEfficiency({ runs = 300, seed = 20260701 } = {}) { + const data = loadData(); + const cards = data.cards; + validateContextDecks(cards); + + const baselines = {}; + for (const [classId, deck] of Object.entries(CONTEXT_DECKS)) { + baselines[classId] = simulateDeck(scaledEncounter(data, classId), deck, runs, seed); + } + + const rows = []; + for (const [id, card] of Object.entries(cards)) { + if (!ROGUE_CLASSES.has(card.class)) continue; + const deck = CONTEXT_DECKS[card.class].slice(); + deck[replacementIndex(deck, cards, card)] = id; + const result = simulateDeck(scaledEncounter(data, card.class), deck, runs, seed, id); + rows.push({ + id, + name: card.name, + classId: card.class, + rarity: card.rarity, + kind: card.kind, + cost: card.cost || 0, + delta: result.score - baselines[card.class].score, + ...result, + risks: structuralRisks(card), + }); + } + + for (const row of rows) { + const peers = rows.filter((other) => other.classId === row.classId && other.rarity === row.rarity); + row.peerMedianDelta = median(peers.map((peer) => peer.delta)); + row.peerGap = row.delta - row.peerMedianDelta; + } + + return { runs, seed, baselines, rows }; +} + +function formatPercent(value) { + return `${(value * 100).toFixed(1)}%`; +} + +export function formatEfficiencyReport(report) { + const lines = []; + lines.push(`도적 카드 효율 검증: 카드 ${report.rows.length}장, 카드당 ${report.runs}회`); + lines.push('기준 덱:'); + for (const [classId, baseline] of Object.entries(report.baselines)) { + lines.push(` ${classId}: 승률 ${formatPercent(baseline.winRate)}, 평균 ${baseline.avgTurns.toFixed(2)}턴, 승리 HP ${baseline.avgHpOnWin.toFixed(1)}`); + } + + const risky = report.rows.filter((row) => row.risks.length > 0); + lines.push(''); + lines.push(`구조적 위험 ${risky.length}장:`); + for (const row of risky) { + lines.push(` ${row.name}(${row.id}, ${row.classId}): ${row.risks.join(' / ')}`); + } + + lines.push(''); + lines.push('동급 대비 효율 상위:'); + for (const row of report.rows.slice().sort((a, b) => b.peerGap - a.peerGap).slice(0, 10)) { + lines.push(` ${row.name}(${row.id}): 중앙값 대비 +${row.peerGap.toFixed(1)}, 승률 ${formatPercent(row.winRate)}, 평균 사용 ${row.avgPlays.toFixed(2)}회`); + } + lines.push(''); + lines.push('동급 대비 효율 하위:'); + for (const row of report.rows.slice().sort((a, b) => a.peerGap - b.peerGap).slice(0, 10)) { + lines.push(` ${row.name}(${row.id}): 중앙값 대비 ${row.peerGap.toFixed(1)}, 승률 ${formatPercent(row.winRate)}, 평균 사용 ${row.avgPlays.toFixed(2)}회`); + } + return lines.join('\n'); +} + +function main() { + const args = process.argv.slice(2); + let runs = 300; + let seed = 20260701; + for (let i = 0; i < args.length; i++) { + if (args[i] === '--runs') runs = Number.parseInt(args[++i], 10); + else if (args[i] === '--seed') seed = Number.parseInt(args[++i], 10); + } + const report = auditCardEfficiency({ runs, seed }); + console.log(formatEfficiencyReport(report)); + if (report.rows.some((row) => row.risks.length > 0)) process.exitCode = 1; +} + +if (process.argv[1] && process.argv[1].endsWith('card-efficiency.mjs')) main(); diff --git a/tools/balance/card-efficiency.test.mjs b/tools/balance/card-efficiency.test.mjs new file mode 100644 index 0000000..a7e9b09 --- /dev/null +++ b/tools/balance/card-efficiency.test.mjs @@ -0,0 +1,30 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import { structuralRisks } from './card-efficiency.mjs'; + +test('0코스트 에너지 생성 카드를 위험으로 분류', () => { + const risks = structuralRisks({ cost: 0, kind: 'Skill', gainEnergy: 1 }); + assert.ok(risks.some((risk) => risk.includes('에너지를 생성'))); +}); + +test('재사용 가능한 영구 능력치 스킬을 위험으로 분류', () => { + const risks = structuralRisks({ cost: 1, kind: 'Skill', strength: 1, dex: 1 }); + assert.ok(risks.some((risk) => risk.includes('영구 능력치'))); +}); + +test('소멸하거나 파워인 능력치 카드는 허용', () => { + assert.deepEqual(structuralRisks({ cost: 1, kind: 'Skill', strength: 1, exhaust: true }), []); + assert.deepEqual(structuralRisks({ cost: 1, kind: 'Power', dex: 1 }), []); + assert.deepEqual(structuralRisks({ cost: 0, kind: 'Skill', dex: 2, endTurnDexLoss: 2 }), []); +}); + +test('저비용 2배 피해 증폭을 위험으로 분류', () => { + const risks = structuralRisks({ cost: 1, kind: 'Power', attackDamageVsWeakMultiplier: 2 }); + assert.ok(risks.some((risk) => risk.includes('2배'))); +}); + +test('0코스트 누적 피해 전체 방어 전환을 위험으로 분류', () => { + const risks = structuralRisks({ cost: 0, kind: 'Skill', blockPerDamageDealtThisTurn: 1 }); + assert.ok(risks.some((risk) => risk.includes('누적 피해'))); + assert.deepEqual(structuralRisks({ cost: 0, kind: 'Skill', blockPerDamageDealtThisTurn: 0.5 }), []); +}); diff --git a/tools/balance/rogue-campaign.mjs b/tools/balance/rogue-campaign.mjs new file mode 100644 index 0000000..fd9501e --- /dev/null +++ b/tools/balance/rogue-campaign.mjs @@ -0,0 +1,314 @@ +import { readFileSync } from 'node:fs'; +import { mulberry32, rarityForRoll, simulateCombat } from './sim-balance.mjs'; +import { ACT_DIFFICULTY_MULTIPLIERS } from '../deck/lib/codeblock.mjs'; + +const cardsData = JSON.parse(readFileSync('data/cards.json', 'utf8')); +const enemiesData = JSON.parse(readFileSync('data/enemies.json', 'utf8')); +const relicsData = JSON.parse(readFileSync('data/relics.json', 'utf8')); + +const PLAYER_MAX_HP = 70; +const REST_HEAL = 30; +const SECTION_COUNT = 5; +const NORMAL_FIGHTS = 4; +export const DEFAULT_SECTION_MULTIPLIERS = ACT_DIFFICULTY_MULTIPLIERS; +const COMBAT_POOL = ['orange_mushroom', 'green_mushroom', 'pig', 'blue_mushroom', 'red_snail', 'stump']; +const ELITE_POOL = ['mushmom', 'modified_snail']; +const BOSS_POOL = ['king_slime', 'slime_boss']; + +const JOBS = { + thief: { tier2: 'thief', tier3: 'thiefmaster', tier2Starter: 'DaggerAcceleration', tier3Starter: 'Venom' }, + assassin: { tier2: 'assassin', tier3: 'hermit', tier2Starter: 'JavelinAcceleration', tier3Starter: 'SpiritJavelin' }, +}; + +const LINEAGES = { + rogue: ['rogue'], + thief: ['rogue', 'thief'], + thiefmaster: ['rogue', 'thief', 'thiefmaster'], + assassin: ['rogue', 'assassin'], + hermit: ['rogue', 'assassin', 'hermit'], +}; + +const pick = (rng, values) => values[Math.floor(rng() * values.length)]; + +export function campaignJobAtSection(branch, section) { + if (section <= 1) return 'rogue'; + if (section === 2) return JOBS[branch].tier2; + return JOBS[branch].tier3; +} + +export function playableClassesForJob(job) { + return LINEAGES[job] || [job]; +} + +export function scaleEnemy(enemy, section, rng = () => 0, scaleStep = null) { + const multiplier = scaleStep == null + ? (DEFAULT_SECTION_MULTIPLIERS[section - 1] || DEFAULT_SECTION_MULTIPLIERS.at(-1)) + : 1 + (section - 1) * scaleStep; + const offset = enemy.intents.length > 0 ? Math.floor(rng() * enemy.intents.length) : 0; + const rotatedIntents = enemy.intents.map((_, index) => enemy.intents[(index + offset) % enemy.intents.length]); + return { + ...enemy, + maxHp: Math.floor(enemy.maxHp * multiplier), + intents: rotatedIntents.map((intent) => ({ + ...intent, + value: intent.kind === 'Debuff' || intent.value == null + ? intent.value + : Math.floor(intent.value * multiplier), + })), + }; +} + +function buildEncounter(kind, section, rng, scaleStep) { + const ids = []; + if (kind === 'normal') { + const count = 1 + Math.floor(rng() * 3); + for (let i = 0; i < count; i++) ids.push(pick(rng, COMBAT_POOL)); + } else if (kind === 'elite') { + ids.push(pick(rng, ELITE_POOL)); + const extra = Math.floor(rng() * 3); + for (let i = 0; i < extra; i++) ids.push(pick(rng, COMBAT_POOL)); + } else { + ids.push(pick(rng, BOSS_POOL)); + } + return ids.map((id) => scaleEnemy(enemiesData.enemies[id], section, rng, scaleStep)); +} + +function baseCardValue(card) { + const hits = card.hits || 1; + const targets = card.aoe ? 1.7 : 1; + let value = (card.damage || 0) * hits * targets; + value += (card.block || 0) + (card.nextTurnBlock || 0) * 0.7; + value += (card.poison || 0) * (card.poisonHits || 1) * (card.affectsAllEnemies ? 2 : 1) * 1.5; + value += (card.draw || 0) * 4 + (card.gainEnergy || 0) * 5; + value += (card.addShiv || 0) * 4; + value += (card.strength || 0) * 6 + (card.dex || 0) * 5; + value += (card.weak || 0) * 3 + (card.vuln || 0) * 4; + value += (card.intangible || 0) * 12; + value += (card.turnStartShiv || 0) * 8 + (card.shivDamageBonus || 0) * 4; + value += (card.cardPlayedBlock || 0) * 8 + (card.attackPoison || 0) * 8; + value += (card.powerEffect ? 7 : 0) + (card.retain ? 2 : 0) + (card.sly ? 3 : 0); + value += (card.damagePerDiscardedThisTurn || 0) * 2; + value += (card.damagePerAttackPlayedThisTurn || 0) * 2; + value += (card.firstShivDamageBonus || 0) * 2; + value -= (card.cost || 0) * 5; + if (card.exhaust) value -= 2; + return value; +} + +function branchCardValue(card, branch, deck, id) { + let value = baseCardValue(card); + if (branch === 'thief') { + value += (card.poison || 0) * 1.5 + (card.attackPoison || 0) * 8; + value += card.sly ? 5 : 0; + value += (card.discard || 0) * 2 + (card.drawPerDiscarded || 0) * 4; + value += (card.poisonApplicationBurstDamage || 0) * 1.5; + } else { + value += (card.addShiv || 0) * 3 + (card.turnStartShiv || 0) * 8; + value += (card.shivDamageBonus || 0) * 6 + (card.firstShivDamageBonus || 0) * 3; + value += card.shivAoe ? 12 : 0; + value += card.shivRetain ? 5 : 0; + } + const copies = deck.filter((cardId) => cardId === id).length; + value -= copies * (card.kind === 'Power' ? 10 : 3); + return value; +} + +function rewardPool(job) { + const classes = new Set(playableClassesForJob(job)); + return Object.entries(cardsData.cards) + .filter(([, card]) => classes.has(card.class) && card.token !== true && card.unplayable !== true); +} + +function offerReward(job, branch, deck, rng, minimumValue) { + const pool = rewardPool(job); + const choices = []; + for (let i = 0; i < 3; i++) { + const rarity = rarityForRoll(1 + Math.floor(rng() * 100)); + const bucket = pool.filter(([, card]) => card.rarity === rarity); + choices.push(pick(rng, bucket.length > 0 ? bucket : pool)); + } + choices.sort((a, b) => branchCardValue(b[1], branch, deck, b[0]) - branchCardValue(a[1], branch, deck, a[0])); + const [id, card] = choices[0]; + if (branchCardValue(card, branch, deck, id) >= minimumValue) deck.push(id); +} + +function relicModifiers(state) { + const result = { + playerStartBlock: 0, + playerStrength: 0, + playerThorns: 0, + energyBonus: 0, + openingDrawBonus: 0, + healOnAttack: 0, + }; + for (const id of state.relics) { + const relic = relicsData.relics[id]; + if (!relic) continue; + if (relic.hook === 'combatStart' && relic.effect === 'block') result.playerStartBlock += relic.value; + else if (relic.hook === 'combatStart' && relic.effect === 'strength') result.playerStrength += relic.value; + else if (relic.hook === 'turnStart' && relic.effect === 'energy') result.energyBonus += relic.value; + else if (relic.hook === 'combatStart' && relic.effect === 'draw') result.openingDrawBonus += relic.value; + else if (relic.effect === 'thorns') result.playerThorns += relic.value; + else if (relic.effect === 'healOnAttack') result.healOnAttack += relic.value; + } + return result; +} + +function healFromRelics(state, hook) { + for (const id of state.relics) { + const relic = relicsData.relics[id]; + if (!relic || relic.hook !== hook) continue; + if (relic.effect === 'heal') state.hp = Math.min(state.maxHp, state.hp + relic.value); + else if (relic.effect === 'healOnWin') state.hp = Math.min(state.maxHp, state.hp + relic.value); + else if (relic.effect === 'healIfLow' && state.hp <= state.maxHp * 0.5) state.hp = Math.min(state.maxHp, state.hp + relic.value); + } +} + +function acquireRelic(state, rng) { + const available = relicsData.relicPool.filter((id) => !state.relics.includes(id)); + if (available.length === 0) return; + const id = pick(rng, available); + state.relics.push(id); + const relic = relicsData.relics[id]; + if (relic?.effect === 'maxHp') { + state.maxHp += relic.value; + state.hp += relic.value; + } +} + +function fight(state, branch, kind, section, rng, options) { + const monsters = buildEncounter(kind, section, rng, options.scaleStep); + healFromRelics(state, 'combatStart'); + const result = simulateCombat({ + cards: cardsData.cards, + starterDeck: state.deck, + monsters, + playerHp: state.hp, + playerMaxHp: state.maxHp, + smartPlayer: true, + ...relicModifiers(state), + }, rng); + state.hp = result.playerHpRemaining; + state.turns += result.turns; + if (!result.win) return false; + healFromRelics(state, 'combatEnd'); + if (kind !== 'boss') offerReward(state.job, branch, state.deck, rng, options.minimumRewardValue); + return true; +} + +export function simulateCampaign(branch, rng, { + restHeal = REST_HEAL, + sectionHeal = 0, + scaleStep = null, + minimumRewardValue = 10, +} = {}) { + if (!JOBS[branch]) throw new Error(`지원하지 않는 도적 분기: ${branch}`); + const state = { + hp: PLAYER_MAX_HP, + maxHp: PLAYER_MAX_HP, + deck: cardsData.starterDecks.rogue.slice(), + job: 'rogue', + turns: 0, + sectionCleared: 0, + diedAt: '', + hpAfterSections: [], + relics: [relicsData.startingRelic], + }; + const options = { scaleStep, minimumRewardValue }; + + for (let section = 1; section <= SECTION_COUNT; section++) { + state.job = campaignJobAtSection(branch, section); + for (let fightIndex = 1; fightIndex <= NORMAL_FIGHTS; fightIndex++) { + if (!fight(state, branch, 'normal', section, rng, options)) { + state.diedAt = `${section}-normal`; + return state; + } + } + state.hp = Math.min(state.maxHp, state.hp + restHeal); + if (!fight(state, branch, 'elite', section, rng, options)) { + state.diedAt = `${section}-elite`; + return state; + } + acquireRelic(state, rng); + if (!fight(state, branch, 'boss', section, rng, options)) { + state.diedAt = `${section}-boss`; + return state; + } + state.sectionCleared = section; + state.hpAfterSections.push(state.hp); + if (section === 1) state.deck.push(JOBS[branch].tier2Starter); + if (section === 2) state.deck.push(JOBS[branch].tier3Starter); + if (section >= 3) acquireRelic(state, rng); + if (section < SECTION_COUNT) state.hp = Math.min(state.maxHp, state.hp + sectionHeal); + } + return state; +} + +export function runCampaignBatch(branch, runs = 1000, seed = 20260701, options = {}) { + const sectionReached = Array(SECTION_COUNT).fill(0); + const sectionClears = Array(SECTION_COUNT).fill(0); + const deaths = {}; + let fullClears = 0; + let totalDeckSize = 0; + let totalFinalHp = 0; + let totalTurns = 0; + for (let i = 0; i < runs; i++) { + const rng = mulberry32((seed + Math.imul(i + 1, 0x9e3779b1)) >>> 0); + const result = simulateCampaign(branch, rng, options); + for (let section = 0; section < SECTION_COUNT; section++) { + if (result.sectionCleared >= section) sectionReached[section]++; + if (result.sectionCleared >= section + 1) sectionClears[section]++; + } + if (result.sectionCleared === SECTION_COUNT) { + fullClears++; + totalFinalHp += result.hp; + } + if (result.diedAt) deaths[result.diedAt] = (deaths[result.diedAt] || 0) + 1; + totalDeckSize += result.deck.length; + totalTurns += result.turns; + } + return { + branch, + runs, + fullClearRate: fullClears / runs, + avgFinalHp: fullClears > 0 ? totalFinalHp / fullClears : 0, + avgDeckSize: totalDeckSize / runs, + avgTurns: totalTurns / runs, + sectionConditionalClearRates: sectionClears.map((clears, index) => sectionReached[index] > 0 ? clears / sectionReached[index] : 0), + sectionReachRates: sectionReached.map((reached) => reached / runs), + deaths, + }; +} + +export function formatCampaignReport(result) { + const lines = []; + lines.push(`${result.branch} 캠페인 ${result.runs}회`); + lines.push(` 전체 클리어 ${(result.fullClearRate * 100).toFixed(1)}%, 클리어 HP ${result.avgFinalHp.toFixed(1)}, 평균 덱 ${result.avgDeckSize.toFixed(1)}장`); + result.sectionConditionalClearRates.forEach((rate, index) => { + lines.push(` 섹션 ${index + 1}: 도달 ${(result.sectionReachRates[index] * 100).toFixed(1)}%, 도달자 클리어 ${(rate * 100).toFixed(1)}%`); + }); + return lines.join('\n'); +} + +function main() { + const args = process.argv.slice(2); + let runs = 1000; + let seed = 20260701; + let restHeal = REST_HEAL; + let sectionHeal = 0; + let scaleStep = null; + let minimumRewardValue = 10; + for (let i = 0; i < args.length; i++) { + if (args[i] === '--runs') runs = Number.parseInt(args[++i], 10); + else if (args[i] === '--seed') seed = Number.parseInt(args[++i], 10); + else if (args[i] === '--rest-heal') restHeal = Number.parseInt(args[++i], 10); + else if (args[i] === '--section-heal') sectionHeal = Number.parseInt(args[++i], 10); + else if (args[i] === '--scale-step') scaleStep = Number.parseFloat(args[++i]); + else if (args[i] === '--reward-min') minimumRewardValue = Number.parseFloat(args[++i]); + } + for (const branch of ['thief', 'assassin']) { + console.log(formatCampaignReport(runCampaignBatch(branch, runs, seed, { restHeal, sectionHeal, scaleStep, minimumRewardValue }))); + } +} + +if (process.argv[1] && process.argv[1].endsWith('rogue-campaign.mjs')) main(); diff --git a/tools/balance/rogue-campaign.test.mjs b/tools/balance/rogue-campaign.test.mjs new file mode 100644 index 0000000..ac3591f --- /dev/null +++ b/tools/balance/rogue-campaign.test.mjs @@ -0,0 +1,28 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import { + campaignJobAtSection, + playableClassesForJob, + scaleEnemy, +} from './rogue-campaign.mjs'; + +test('도적 전직 시점: 1섹션 Rogue, 2섹션 2차, 3섹션부터 3차', () => { + assert.equal(campaignJobAtSection('thief', 1), 'rogue'); + assert.equal(campaignJobAtSection('thief', 2), 'thief'); + assert.equal(campaignJobAtSection('thief', 3), 'thiefmaster'); + assert.equal(campaignJobAtSection('assassin', 2), 'assassin'); + assert.equal(campaignJobAtSection('assassin', 5), 'hermit'); +}); + +test('3차 직업은 자기 계보 카드만 사용', () => { + assert.deepEqual(playableClassesForJob('thiefmaster'), ['rogue', 'thief', 'thiefmaster']); + assert.deepEqual(playableClassesForJob('hermit'), ['rogue', 'assassin', 'hermit']); +}); + +test('섹션 난이도는 3차 이후 더 빠르게 증가', () => { + const enemy = { maxHp: 100, intents: [{ kind: 'Attack', value: 10 }, { kind: 'Debuff', value: 2 }] }; + const scaled = scaleEnemy(enemy, 3, () => 0); + assert.equal(scaled.maxHp, 114); + assert.equal(scaled.intents[0].value, 11); + assert.equal(scaled.intents[1].value, 2); +}); diff --git a/tools/balance/sim-balance.mjs b/tools/balance/sim-balance.mjs index 20bcb5e..4045879 100644 --- a/tools/balance/sim-balance.mjs +++ b/tools/balance/sim-balance.mjs @@ -130,6 +130,19 @@ export function chooseAction(hand, cards, energy, ctx = {}) { const dmgEff = (x) => (cards[x.id].damage || 0) / Math.max(effectiveCost(x), 1); const blkEff = (x) => (cards[x.id].block || 0) / Math.max(effectiveCost(x), 1); const bestBy = (list, fn) => list.slice().sort((a, b) => fn(b) - fn(a))[0]; + if ((ctx.incomingDamage || 0) > (ctx.currentBlock || 0)) { + const defensive = entries.filter((x) => { + const card = cards[x.id]; + return (card.block || 0) > 0 || (card.intangible || 0) > 0 || (card.enemyStrengthLossThisTurn || 0) > 0; + }); + if (defensive.length) { + return bestBy(defensive, (x) => { + const card = cards[x.id]; + const protection = (card.block || 0) + (card.intangible || 0) * 15 + (card.enemyStrengthLossThisTurn || 0) * 2; + return protection / Math.max(effectiveCost(x), 1); + }).i; + } + } if (powers.length) return powers[0].i; if (attacks.length) return bestBy(attacks, dmgEff).i; if (skills.length) return bestBy(skills, blkEff).i; @@ -154,13 +167,15 @@ function bump(s, cost, dmg, blk) { // 반환: { win, turns, playerHpRemaining, draw? } export function simulateCombat(data, rng, stats) { const { cards, starterDeck, monsters } = data; - if (monsters.length === 0) return { win: true, turns: 0, playerHpRemaining: PLAYER_HP }; + const playerMaxHp = data.playerMaxHp || PLAYER_HP; + const startingPlayerHp = Math.min(data.playerHp ?? playerMaxHp, playerMaxHp); + if (monsters.length === 0) return { win: true, turns: 0, playerHpRemaining: startingPlayerHp }; let drawPile = prepareCombatDrawPile(shuffle(starterDeck, rng), cards); let discard = []; const exhaust = []; let hand = []; - let pHp = PLAYER_HP, pBlock = 0; - let pStr = 0, pDex = 0, pThorns = 0, pWeak = 0, pVuln = 0, pIntangible = 0; + let pHp = startingPlayerHp, pBlock = data.playerStartBlock || 0; + let pStr = data.playerStrength || 0, pDex = 0, pThorns = data.playerThorns || 0, pWeak = 0, pVuln = 0, pIntangible = 0; let blockGainMultiplier = 1; let handCostZeroThisTurn = false; let drawDisabledThisTurn = false; @@ -200,6 +215,16 @@ export function simulateCombat(data, rng, stats) { if (!alive.length) return null; return alive[Math.floor(rng() * alive.length)]; }; + const expectedIncomingDamage = () => mob.filter((m) => m.alive).reduce((total, m) => { + if (!m.intents || m.intents.length === 0) return total; + const expected = m.intents.reduce((sum, intent) => { + if (intent.kind !== 'Attack') return sum; + let amount = calcEnemyAttack(intent.value, m.str, m.weak, pVuln, enemyStrengthLossThisTurn); + if (pIntangible > 0 && amount > 1) amount = 1; + return sum + amount; + }, 0) / m.intents.length; + return total + expected; + }, 0); const removeEnemyBlock = (target) => { if (target) target.block = 0; }; @@ -308,10 +333,30 @@ export function simulateCombat(data, rng, stats) { pBlock += amount; return amount; } + function smartDiscardIndex() { + if (hand.length === 0) return -1; + if (data.smartPlayer !== true) return hand.length - 1; + const ranked = hand.map((id, index) => { + const card = cards[id] || {}; + const isSly = card.sly === true || skillSlyOnPlayCards.has(id) || turnSkillSlyCards.has(id); + const utility = (card.damage || 0) * (card.hits || 1) + + (card.block || 0) + + (card.draw || 0) * 4 + + (card.addShiv || 0) * 4 + + (card.poison || 0) * 2; + return { index, isSly, unplayable: card.unplayable === true, tooExpensive: (card.cost || 0) > energy, utility }; + }); + ranked.sort((a, b) => Number(b.isSly) - Number(a.isSly) + || Number(b.unplayable) - Number(a.unplayable) + || Number(b.tooExpensive) - Number(a.tooExpensive) + || a.utility - b.utility + || a.index - b.index); + return ranked[0].index; + } function discardForTurnStart(n) { const cnt = Math.min(n, hand.length); for (let i = 0; i < cnt; i++) { - const idx = hand + const idx = data.smartPlayer === true ? smartDiscardIndex() : hand .map((id, k) => ({ id, k, card: cards[id] })) .sort((a, b) => { const ac = a.card?.cost || 0; @@ -525,7 +570,7 @@ export function simulateCombat(data, rng, stats) { if (c.dex) pDex += c.dex; if (c.thorns) pThorns += c.thorns; if (c.selfVuln) pVuln += c.selfVuln; - if (c.heal) pHp = Math.min(pHp + c.heal, PLAYER_HP); + if (c.heal) pHp = Math.min(pHp + c.heal, playerMaxHp); if (c.gainEnergy) energy += c.gainEnergy; activeKillReward = c.rewardOnKill || 0; if (c.intangible) pIntangible += c.intangible; @@ -588,7 +633,7 @@ export function simulateCombat(data, rng, stats) { while (hand.length) { discardHandCard(hand.length - 1, true); discarded++; } } else if (c.discard) { const n = Math.min(c.discard, hand.length); - for (let i = 0; i < n; i++) { discardHandCard(hand.length - 1, true); discarded++; } + for (let i = 0; i < n; i++) { discardHandCard(smartDiscardIndex(), true); discarded++; } } if (c.addShiv && (c.discard || c.discardAll === true)) addCardsToHand('Shiv', c.addShiv); if (c.addShivPerDiscard === true) addCardsToHand('Shiv', discarded); @@ -642,15 +687,23 @@ export function simulateCombat(data, rng, stats) { for (const entry of nextTurnAddCards) addCardsToHand(entry.cardId, entry.amount); nextTurnAddCards = []; } - energy = ENERGY + energyBonus; + energy = ENERGY + (data.energyBonus || 0) + energyBonus; const drawBonus = nextTurnDraw + powerTurnDraw; nextTurnDraw = 0; - draw(HAND_SIZE + drawBonus); + draw(HAND_SIZE + drawBonus + (turns === 1 ? (data.openingDrawBonus || 0) : 0)); if (powerTurnDiscard > 0) discardForTurnStart(powerTurnDiscard); while (true) { const alive = aliveList(); if (alive.length === 0) break; - const idx = chooseAction(hand, cards, energy, { drawPileCount: drawPile.length, nextSkillCostZero, skillCostReductionThisTurn, handCostZeroThisTurn, combatCardCostReduction }); + const idx = chooseAction(hand, cards, energy, { + drawPileCount: drawPile.length, + nextSkillCostZero, + skillCostReductionThisTurn, + handCostZeroThisTurn, + combatCardCostReduction, + incomingDamage: data.smartPlayer === true ? expectedIncomingDamage() : 0, + currentBlock: pBlock, + }); if (idx < 0) break; const id = hand[idx], c = cards[id]; let dmg = 0; @@ -662,6 +715,9 @@ export function simulateCombat(data, rng, stats) { const finalCost = c.useAllEnergy === true ? cost : Math.max(0, cost - combatReduction); energy -= finalCost; resolveCardEffects(id, c, finalCost); + if (c.kind === 'Attack' && (data.healOnAttack || 0) > 0) { + pHp = Math.min(playerMaxHp, pHp + data.healOnAttack); + } const playedBlock = powerFieldTotal('cardPlayedBlock'); if (playedBlock > 0) addBlock(playedBlock); if (skillRepeat > 0) { diff --git a/tools/balance/sim-balance.test.mjs b/tools/balance/sim-balance.test.mjs index 3bf6a8c..cd672ca 100644 --- a/tools/balance/sim-balance.test.mjs +++ b/tools/balance/sim-balance.test.mjs @@ -121,6 +121,14 @@ test('chooseAction: 공격 없으면 스킬 선택', () => { assert.equal(idx, 0); }); +test('chooseAction: 예상 피해가 남으면 방어 카드를 우선 선택', () => { + const cards = { + Hit: { kind: 'Attack', cost: 1, damage: 12 }, + Guard: { kind: 'Skill', cost: 1, block: 8 }, + }; + assert.equal(chooseAction(['Hit', 'Guard'], cards, 1, { incomingDamage: 8, currentBlock: 0 }), 1); +}); + test('chooseAction: 사용 가능 카드 없으면 -1', () => { const idx = chooseAction(['Bash'], CARDS, 1); assert.equal(idx, -1); @@ -220,6 +228,21 @@ test('simulateCombat: 복합 카드(공격+방어) 블록이 적 공격을 흡 assert.equal(r.playerHpRemaining, 80); }); +test('simulateCombat: 캠페인 시작 체력과 유물 전투 보너스를 반영', () => { + const data = { + cards: { Guard: { name: 'Guard', cost: 1, kind: 'Skill', block: 1 } }, + starterDeck: ['Guard'], + monsters: [{ name: 'Dummy', maxHp: 1, intents: [{ kind: 'Attack', value: 1 }] }], + playerHp: 37, + playerMaxHp: 70, + playerStartBlock: 6, + energyBonus: 1, + openingDrawBonus: 2, + }; + const result = simulateCombat(data, mulberry32(3)); + assert.ok(result.playerHpRemaining <= 37); +}); + test('calcAttack: 힘·약화·취약 공식 (Lua CalcPlayerAttack·DealDamageToTarget 동기화)', () => { assert.equal(calcAttack(6, 0, 0, 0), 6); // 기본 assert.equal(calcAttack(6, 2, 0, 0), 8); // 힘+2 diff --git a/tools/deck/cb/run.mjs b/tools/deck/cb/run.mjs index 2ddad39..ac6e2a5 100644 --- a/tools/deck/cb/run.mjs +++ b/tools/deck/cb/run.mjs @@ -1,4 +1,4 @@ -import { method, RUN_LENGTH, GOLD_PER_WIN, CARD_PRICE, REST_HEAL, RELIC_PRICE, ACT_COUNT, ACT_MAPS, LOBBY_MAP, LOBBY_SPAWN } from '../lib/codeblock.mjs'; +import { method, RUN_LENGTH, GOLD_PER_WIN, CARD_PRICE, REST_HEAL, RELIC_PRICE, ACT_COUNT, ACT_MAPS, ACT_DIFFICULTY_MULTIPLIERS, LOBBY_MAP, LOBBY_SPAWN } from '../lib/codeblock.mjs'; import { CARDS, ENEMIES, CLASSES, JOBS, JOB_META, CLASS_GROUPS, CLASS_LINEAGES, SOUL_UNLOCKS, CARDFRAMES, RARITIES, MAP_ROWS, MAP_COLS, CHEST_CLOSED_RUID, CHEST_OPEN_RUID, NODEICONS, CHARS, CAM, RELICS, POTIONS, luaSoulShopTable, frameRuid, luaFramesTable, luaNodeIconsTable, luaCharsTable, luaRelicsTable, luaPotionsTable, luaIntentsArray, luaEnemiesTable, luaStr, luaJobsTable, luaClassGroupsTable, luaClassLineagesTable, luaJobMetaTable, luaCardsTable, luaDeckTable } from '../lib/data.mjs'; import { UI_FILE, COMMON_FILE, UI_ROOT, GENERATED_UI_SECTIONS, UI_APPEND_ORDER, DISABLED_STOCK_CONTROLS, TRANSPARENT, DARK, GOLD, ATTACK, DEFEND, SKILL, DAMAGE_DIGIT_RUIDS, DAMAGE_POP_MAX_DIGITS, DAMAGE_POP_DIGIT_W, DAMAGE_POP_DIGIT_H, DAMAGE_POP_DIGIT_SPACING, MAX_MONSTERS, HEAD_OFFSET_Y, HP_BAR_W, WHITE, CARD_NAME_TEXT, CARD_DESC_TEXT, cardFaceLayout, CARD_W, CARD_H, CARD_SPACING, CARD_XS, ALIGN_CENTER, ALIGN_BOTTOM_CENTER, guid, transform, sprite, button, text, scrollLayoutGroup, popupLayerFor, uiOrderFor, displayOrderFor, applySortingOverride, entity, uiPath, sectionRoot, isGeneratedUiEntity, appendUiSection } from '../lib/ui-helpers.mjs'; @@ -211,7 +211,8 @@ end if #chosen == 0 then takeFrom(g, 1) end if #chosen == 0 then takeFrom("combat", 1) end table.sort(chosen, function(a, b) return a.x < b.x end) -local mult = 1 + (self.Floor - 1) * 0.45 +local actMultipliers = { ${ACT_DIFFICULTY_MULTIPLIERS.join(', ')} } +local mult = actMultipliers[self.Floor] or actMultipliers[#actMultipliers] if g == "elite" or g == "boss" then mult = mult + self:AscEliteBonus() end diff --git a/tools/deck/lib/codeblock.mjs b/tools/deck/lib/codeblock.mjs index 6127768..18700c5 100644 --- a/tools/deck/lib/codeblock.mjs +++ b/tools/deck/lib/codeblock.mjs @@ -54,7 +54,8 @@ const REST_HEAL = 30; const RELIC_PRICE = 60; const ACT_COUNT = 5; const ACT_MAPS = ['map01', 'map02', 'map03', 'map04', 'map05']; +const ACT_DIFFICULTY_MULTIPLIERS = [1, 1.075, 1.15, 1.3, 1.45]; const LOBBY_MAP = 'lobby'; const LOBBY_SPAWN = 'Vector3(-5, 0.03, 0)'; // 정찰: map01 지면 좌측 -export { prop, method, codeblock, RUN_LENGTH, GOLD_PER_WIN, CARD_PRICE, REST_HEAL, RELIC_PRICE, ACT_COUNT, ACT_MAPS, LOBBY_MAP, LOBBY_SPAWN }; +export { prop, method, codeblock, RUN_LENGTH, GOLD_PER_WIN, CARD_PRICE, REST_HEAL, RELIC_PRICE, ACT_COUNT, ACT_MAPS, ACT_DIFFICULTY_MULTIPLIERS, LOBBY_MAP, LOBBY_SPAWN }; diff --git a/tools/deck/lib/data.mjs b/tools/deck/lib/data.mjs index 71cb8bb..f0148fe 100644 --- a/tools/deck/lib/data.mjs +++ b/tools/deck/lib/data.mjs @@ -29,14 +29,14 @@ const JOBS = { { id: 'cleric', name: '클레릭', desc: '회복·축복 특화\n힐 · 블레스\n홀리 애로우', starter: 'Heal', tier: 2, parent: 'magician' }, ], rogue: [ - { id: 'assassin', name: 'Assassin', desc: '표창 중심 전직\n단일 화력과 독 압박\n빠른 마무리', starter: 'DeadlyPoison', tier: 2, parent: 'rogue' }, - { id: 'thief', name: 'Thief', desc: '단검 중심 전직\n드로우와 운영 강화\n빠른 연계', starter: 'Acrobatics', tier: 2, parent: 'rogue' }, + { id: 'assassin', name: 'Assassin', desc: '표창 중심 전직\n표창 생성과 연속 공격\n빠른 마무리', starter: 'JavelinAcceleration', tier: 2, parent: 'rogue' }, + { id: 'thief', name: 'Thief', desc: '단검 중심 전직\n드로우와 운영 강화\n빠른 연계', starter: 'DaggerAcceleration', tier: 2, parent: 'rogue' }, ], assassin: [ - { id: 'hermit', name: 'Hermit', desc: 'Assassin의 3차 전직\n표창과 독 운영 심화\n누적 압박 강화', starter: 'NoxiousFumes', tier: 3, parent: 'assassin' }, + { id: 'hermit', name: 'Hermit', desc: 'Assassin의 3차 전직\n표창 생성과 강화 심화\n연속 공격 완성', starter: 'SpiritJavelin', tier: 3, parent: 'assassin' }, ], thief: [ - { id: 'thiefmaster', name: 'Thief Master', desc: 'Thief의 3차 전직\n단검 운영 심화\n드로우와 템포 강화', starter: 'ToolsOfTheTrade', tier: 3, parent: 'thief' }, + { id: 'thiefmaster', name: 'Thief Master', desc: 'Thief의 3차 전직\n단검·교활·중독 심화\n연계 운영 완성', starter: 'Venom', tier: 3, parent: 'thief' }, ], }; for (const [cls, jobs] of Object.entries(JOBS)) {