feat(rogue): localize custom card names

This commit is contained in:
2026-07-01 22:53:54 +09:00
parent 0a040837d9
commit e3a75c33a3
6 changed files with 262 additions and 81 deletions

File diff suppressed because one or more lines are too long

View File

@@ -373,7 +373,7 @@
"endTurnDamage": 2
},
"Neutralize": {
"name": "무력화",
"name": "커닝식 견제",
"cost": 0,
"kind": "Attack",
"class": "rogue",
@@ -384,7 +384,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"SilentStrike": {
"name": "타격",
"name": "초보 도적의 칼끝",
"cost": 1,
"kind": "Attack",
"class": "rogue",
@@ -394,7 +394,7 @@
"image": "92a5020c978c46bdabab910598118b86"
},
"Survivor": {
"name": "생존",
"name": "골목길 생존",
"cost": 1,
"kind": "Skill",
"class": "rogue",
@@ -405,7 +405,7 @@
"image": "49c8f279bfa64bf3954037f17da0052d"
},
"SilentDefend": {
"name": "수비",
"name": "낡은 가죽 방패",
"cost": 1,
"kind": "Skill",
"class": "rogue",
@@ -483,7 +483,7 @@
"image": "49c8f279bfa64bf3954037f17da0052d"
},
"Slice": {
"name": "질",
"name": "짧은 단검질",
"cost": 0,
"kind": "Attack",
"class": "rogue",
@@ -505,7 +505,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"DaggerSpray": {
"name": "단검 분사",
"name": "단검",
"cost": 1,
"kind": "Attack",
"class": "thief",
@@ -517,7 +517,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"DaggerThrow": {
"name": "단검 투척",
"name": "비도 투척",
"cost": 1,
"kind": "Attack",
"class": "thief",
@@ -529,7 +529,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"PoisonedStab": {
"name": "독 찌르기",
"name": "초록 독단검",
"cost": 1,
"kind": "Attack",
"class": "rogue",
@@ -540,7 +540,7 @@
"image": "19361e72087946b1888684185b40d935"
},
"SuckerPunch": {
"name": "불의의 일격",
"name": "골목 기습",
"cost": 1,
"kind": "Attack",
"class": "rogue",
@@ -551,7 +551,7 @@
"image": "92a5020c978c46bdabab910598118b86"
},
"LeadingStrike": {
"name": "선제 타격",
"name": "초보 표창 던지기",
"cost": 1,
"kind": "Attack",
"class": "rogue",
@@ -562,7 +562,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"FollowThrough": {
"name": "완수",
"name": "연달아 찌르기",
"cost": 1,
"kind": "Attack",
"class": "thief",
@@ -574,7 +574,7 @@
"image": "92a5020c978c46bdabab910598118b86"
},
"FlickFlack": {
"name": "재주넘기",
"name": "커닝 난무",
"cost": 1,
"kind": "Attack",
"class": "thief",
@@ -586,7 +586,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"Ricochet": {
"name": "도탄",
"name": "통통 튀는 표창",
"cost": 2,
"kind": "Attack",
"class": "assassin",
@@ -599,7 +599,7 @@
"randomTargetEachHit": true
},
"Prepared": {
"name": "비",
"name": "비장의 패",
"cost": 1,
"kind": "Skill",
"class": "thief",
@@ -610,7 +610,7 @@
"image": "c1e19219745e44c39ae6ac2f77e347d9"
},
"Anticipate": {
"name": "예측",
"name": "럭키 예감",
"cost": 0,
"kind": "Skill",
"class": "rogue",
@@ -621,7 +621,7 @@
"image": "49c8f279bfa64bf3954037f17da0052d"
},
"Deflect": {
"name": "튕겨내기",
"name": "단검 쳐내기",
"cost": 0,
"kind": "Skill",
"class": "rogue",
@@ -631,7 +631,7 @@
"image": "0946f69d84464df29b24b94c744c868d"
},
"BladeDance": {
"name": "검무",
"name": "표창 별무리",
"cost": 1,
"kind": "Skill",
"class": "assassin",
@@ -642,7 +642,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"Backflip": {
"name": "공중제비",
"name": "커닝 곡예",
"cost": 1,
"kind": "Skill",
"class": "rogue",
@@ -653,7 +653,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"DodgeAndRoll": {
"name": "구르기",
"name": "골목 구르기",
"cost": 1,
"kind": "Skill",
"class": "rogue",
@@ -664,7 +664,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"PiercingWail": {
"name": "귀를 찢는 비명",
"name": "골목의 살기",
"cost": 1,
"kind": "Skill",
"class": "thief",
@@ -676,7 +676,7 @@
"exhaust": true
},
"CloakAndDagger": {
"name": "망토와 단검",
"name": "망토 속 별",
"cost": 1,
"kind": "Skill",
"class": "assassin",
@@ -687,7 +687,7 @@
"image": "0946f69d84464df29b24b94c744c868d"
},
"DeadlyPoison": {
"name": "맹독",
"name": "맹독 조제",
"cost": 1,
"kind": "Skill",
"class": "thief",
@@ -697,7 +697,7 @@
"image": "19361e72087946b1888684185b40d935"
},
"Snakebite": {
"name": "뱀 물기",
"name": "독니 단검",
"cost": 2,
"kind": "Skill",
"class": "thief",
@@ -708,7 +708,7 @@
"image": "19361e72087946b1888684185b40d935"
},
"Untouchable": {
"name": "범접 불가",
"name": "연막 속 숨기",
"cost": 2,
"kind": "Skill",
"class": "rogue",
@@ -719,7 +719,7 @@
"image": "0946f69d84464df29b24b94c744c868d"
},
"Skewer": {
"name": "꼬챙이",
"name": "꿰뚫는 표창",
"cost": 2,
"kind": "Attack",
"class": "assassin",
@@ -730,7 +730,7 @@
"image": "92a5020c978c46bdabab910598118b86"
},
"Backstab": {
"name": "배신",
"name": "그림자 등찌르기",
"cost": 0,
"kind": "Attack",
"class": "rogue",
@@ -742,7 +742,7 @@
"image": "b1360ed0c4b942309d240634b8f36872"
},
"PreciseCut": {
"name": "정밀한 베기",
"name": "급소 절개",
"cost": 0,
"kind": "Attack",
"class": "thief",
@@ -753,7 +753,7 @@
"image": "92a5020c978c46bdabab910598118b86"
},
"Finisher": {
"name": "마무리",
"name": "마지막 칼끝",
"cost": 1,
"kind": "Attack",
"class": "thief",
@@ -764,7 +764,7 @@
"image": "b1360ed0c4b942309d240634b8f36872"
},
"MementoMori": {
"name": "메멘토 모리",
"name": "사신의 장부",
"cost": 1,
"kind": "Attack",
"class": "thief",
@@ -775,7 +775,7 @@
"image": "0946f69d84464df29b24b94c744c868d"
},
"Strangle": {
"name": "목 조르기",
"name": "그림자 올가미",
"cost": 1,
"kind": "Attack",
"class": "thief",
@@ -785,7 +785,7 @@
"image": "92a5020c978c46bdabab910598118b86"
},
"Flechettes": {
"name": "프레췌",
"name": "표창 셈법",
"cost": 1,
"kind": "Attack",
"class": "assassin",
@@ -796,7 +796,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"Pounce": {
"name": "덮치기",
"name": "어둠을 가르는 도약",
"cost": 2,
"kind": "Attack",
"class": "assassin",
@@ -807,7 +807,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"Dash": {
"name": "돌진",
"name": "뒷골목 돌파",
"cost": 2,
"kind": "Attack",
"class": "thief",
@@ -818,7 +818,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"Predator": {
"name": "천적",
"name": "표창 끝의 추격",
"cost": 2,
"kind": "Attack",
"class": "assassin",
@@ -829,7 +829,7 @@
"image": "b1360ed0c4b942309d240634b8f36872"
},
"Pinpoint": {
"name": "정밀 사격",
"name": "한 점 겨냥",
"cost": 3,
"kind": "Attack",
"class": "assassin",
@@ -840,7 +840,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"CalculatedGamble": {
"name": "계산된 도박",
"name": "메소 건 승부",
"cost": 0,
"kind": "Skill",
"class": "thief",
@@ -852,7 +852,7 @@
"exhaust": true
},
"Expose": {
"name": "들춰내기",
"name": "약점 들추기",
"cost": 0,
"kind": "Skill",
"class": "thief",
@@ -865,7 +865,7 @@
"exhaust": true
},
"HiddenDaggers": {
"name": "숨겨 표창",
"name": "숨겨 표창",
"cost": 0,
"kind": "Skill",
"class": "assassin",
@@ -876,7 +876,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"EscapePlan": {
"name": "탈출구",
"name": "비상용 연막탄",
"cost": 0,
"kind": "Skill",
"class": "rogue",
@@ -887,7 +887,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"Acrobatics": {
"name": "곡예",
"name": "지붕 위 곡예",
"cost": 1,
"kind": "Skill",
"class": "thief",
@@ -898,7 +898,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"HandTrick": {
"name": "손기술",
"name": "재빠른 손놀림",
"cost": 1,
"kind": "Skill",
"class": "thief",
@@ -909,7 +909,7 @@
"turnHandSlyCount": 1
},
"Expertise": {
"name": "전문성",
"name": "노련한 단검술",
"cost": 1,
"kind": "Skill",
"class": "thief",
@@ -919,7 +919,7 @@
"drawUntilHandSize": 6
},
"BubbleBubble": {
"name": "차오르는 독",
"name": "독액 농축",
"cost": 1,
"kind": "Skill",
"class": "thief",
@@ -930,7 +930,7 @@
"poisonIfTargetPoisoned": true
},
"Blur": {
"name": "흐릿함",
"name": "흐린 잔영",
"cost": 1,
"kind": "Skill",
"class": "thief",
@@ -941,7 +941,7 @@
"image": "0946f69d84464df29b24b94c744c868d"
},
"LegSweep": {
"name": "다리 걸기",
"name": "발목 베기",
"cost": 2,
"kind": "Skill",
"class": "thief",
@@ -952,7 +952,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"UpMySleeve": {
"name": "비책",
"name": "소매 속 표창",
"cost": 2,
"kind": "Skill",
"class": "assassin",
@@ -963,7 +963,7 @@
"combatCostReductionOnPlay": 1
},
"BouncingFlask": {
"name": "탄성 플라스크",
"name": "통통 독병",
"cost": 2,
"kind": "Skill",
"class": "thiefmaster",
@@ -975,7 +975,7 @@
"image": "19361e72087946b1888684185b40d935"
},
"Reflex": {
"name": "반사신경",
"name": "찰나의 반응",
"cost": 3,
"kind": "Skill",
"class": "thief",
@@ -986,7 +986,7 @@
"image": "49c8f279bfa64bf3954037f17da0052d"
},
"Haze": {
"name": "아지랑이",
"name": "보랏빛 독연기",
"cost": 3,
"kind": "Skill",
"class": "thiefmaster",
@@ -997,7 +997,7 @@
"image": "19361e72087946b1888684185b40d935"
},
"Tactician": {
"name": "전략가",
"name": "골목길 책략",
"cost": 3,
"kind": "Skill",
"class": "thief",
@@ -1008,7 +1008,7 @@
"image": "c1e19219745e44c39ae6ac2f77e347d9"
},
"WellLaidPlans": {
"name": "괜찮은 전략",
"name": "빈틈없는 작전",
"cost": 1,
"kind": "Power",
"class": "thief",
@@ -1019,7 +1019,7 @@
"image": "c1e19219745e44c39ae6ac2f77e347d9"
},
"InfiniteBlades": {
"name": "무한의 검날",
"name": "끝없는 표창통",
"cost": 1,
"kind": "Power",
"class": "assassin",
@@ -1029,7 +1029,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"Footwork": {
"name": "발놀림",
"name": "사뿐한 발놀림",
"cost": 1,
"kind": "Power",
"class": "thief",
@@ -1039,7 +1039,7 @@
"image": "49c8f279bfa64bf3954037f17da0052d"
},
"Outbreak": {
"name": "발병",
"name": "독맥 터뜨리기",
"cost": 2,
"kind": "Power",
"class": "thiefmaster",
@@ -1050,7 +1050,7 @@
"poisonApplicationBurstDamage": 6
},
"NoxiousFumes": {
"name": "유독 가스",
"name": "숨막히는 독연기",
"cost": 1,
"kind": "Power",
"class": "thief",
@@ -1062,7 +1062,7 @@
"image": "19361e72087946b1888684185b40d935"
},
"Speedster": {
"name": "스피드스터",
"name": "그림자 속도전",
"cost": 2,
"kind": "Power",
"class": "thiefmaster",
@@ -1073,7 +1073,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"GrandFinale": {
"name": "대단원의 막",
"name": "커닝의 대단원",
"cost": 0,
"kind": "Attack",
"class": "thiefmaster",
@@ -1085,7 +1085,7 @@
"image": "dbdbb1b56ae54672ae68ac6882fff6a2"
},
"Assassinate": {
"name": "암살",
"name": "어둠 속 급소",
"cost": 0,
"kind": "Attack",
"class": "thiefmaster",
@@ -1098,7 +1098,7 @@
"image": "b1360ed0c4b942309d240634b8f36872"
},
"EchoingSlash": {
"name": "메아리 참격",
"name": "메아리 칼자국",
"cost": 2,
"kind": "Attack",
"class": "thiefmaster",
@@ -1110,7 +1110,7 @@
"repeatOnKill": true
},
"TheHunt": {
"name": "사냥",
"name": "커닝 현상금",
"cost": 1,
"kind": "Attack",
"class": "assassin",
@@ -1122,7 +1122,7 @@
"image": "b1360ed0c4b942309d240634b8f36872"
},
"Murder": {
"name": "살해",
"name": "쌓여가는 살의",
"cost": 3,
"kind": "Attack",
"class": "thiefmaster",
@@ -1133,7 +1133,7 @@
"image": "b1360ed0c4b942309d240634b8f36872"
},
"Malaise": {
"name": "불쾌",
"name": "기운 빼는 독",
"cost": 2,
"kind": "Skill",
"class": "thiefmaster",
@@ -1144,7 +1144,7 @@
"image": "0946f69d84464df29b24b94c744c868d"
},
"StormOfSteel": {
"name": "강철의 폭풍",
"name": "쇠별 폭풍",
"cost": 1,
"kind": "Skill",
"class": "assassin",
@@ -1155,7 +1155,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"ShadowStep": {
"name": "그림자 걸음",
"name": "그림자 발자국",
"cost": 1,
"kind": "Skill",
"class": "thiefmaster",
@@ -1166,7 +1166,7 @@
"image": "0946f69d84464df29b24b94c744c868d"
},
"Shadowmeld": {
"name": "그림자 은신",
"name": "연막 속 은신",
"cost": 1,
"kind": "Skill",
"class": "thiefmaster",
@@ -1176,7 +1176,7 @@
"image": "0946f69d84464df29b24b94c744c868d"
},
"CorrosiveWave": {
"name": "부식성 파도",
"name": "부식 독물결",
"cost": 1,
"kind": "Skill",
"class": "thiefmaster",
@@ -1186,7 +1186,7 @@
"image": "19361e72087946b1888684185b40d935"
},
"BladeOfInk": {
"name": "잉크 칼날",
"name": "먹빛 표창",
"cost": 1,
"kind": "Skill",
"class": "hermit",
@@ -1196,7 +1196,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"Burst": {
"name": "폭주",
"name": "연속 술수",
"cost": 1,
"kind": "Skill",
"class": "thiefmaster",
@@ -1206,7 +1206,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"KnifeTrap": {
"name": "칼날 함정",
"name": "숨은 칼날덫",
"cost": 2,
"kind": "Attack",
"class": "thiefmaster",
@@ -1219,7 +1219,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"BulletTime": {
"name": "불릿 타임",
"name": "멈춘 듯한 순간",
"cost": 3,
"kind": "Skill",
"class": "thiefmaster",
@@ -1230,7 +1230,7 @@
"image": "91a2d1c16cb041549adbf1a0d7b1f37f"
},
"Nightmare": {
"name": "악몽",
"name": "검은 꿈",
"cost": 3,
"kind": "Skill",
"class": "thiefmaster",
@@ -1243,7 +1243,7 @@
"image": "0946f69d84464df29b24b94c744c868d"
},
"ToolsOfTheTrade": {
"name": "작업 도구",
"name": "도적의 연장통",
"cost": 1,
"kind": "Power",
"class": "thiefmaster",
@@ -1254,7 +1254,7 @@
"image": "c1e19219745e44c39ae6ac2f77e347d9"
},
"MasterPlanner": {
"name": "설계의 대가",
"name": "작전의 달인",
"cost": 2,
"kind": "Power",
"class": "thiefmaster",
@@ -1264,7 +1264,7 @@
"skillSlyOnPlay": true
},
"FanOfKnives": {
"name": "칼날 부채",
"name": "사방 표창비",
"cost": 2,
"kind": "Skill",
"class": "hermit",
@@ -1275,7 +1275,7 @@
"image": "1b0f2dc8abd0434990eee1befefcbe0d"
},
"SerpentForm": {
"name": "구렁이의 형상",
"name": "독사의 몸놀림",
"cost": 2,
"kind": "Power",
"class": "thiefmaster",
@@ -1285,7 +1285,7 @@
"image": "19361e72087946b1888684185b40d935"
},
"Abrasive": {
"name": "연마",
"name": "거친 숫돌질",
"cost": 2,
"kind": "Power",
"class": "thiefmaster",
@@ -1297,7 +1297,7 @@
"image": "49c8f279bfa64bf3954037f17da0052d"
},
"Suppress": {
"name": "압",
"name": "소리 없는 제압",
"cost": 0,
"kind": "Attack",
"class": "thiefmaster",
@@ -1310,7 +1310,7 @@
"image": "b1360ed0c4b942309d240634b8f36872"
},
"WraithForm": {
"name": "유령의 형상",
"name": "유령 같은 몸놀림",
"cost": 3,
"kind": "Power",
"class": "thiefmaster",

Binary file not shown.

View File

@@ -57,7 +57,9 @@ Rogue 단계에서도 분기 방향을 미리 경험할 수 있도록 약한 입
- 0코스트 에너지 생성, 재사용 가능한 영구 능력치, 저비용 2배 증폭처럼 자동 플레이가 놓치기 쉬운 구조도 별도로 검사합니다.
- 교활, 조건부 중독, 카드 보존처럼 플레이 순서 의존성이 큰 효과는 자동 시뮬레이션 하위권만으로 상향하지 않습니다.
2026-07-01 검증 결과 구조적 위험은 0장입니다. 주요 조정은 `발병`, `메아리 참격`, `압`, `그리드`, `스피드스터`, `스틸`, 두 계열의 `피지컬 트레이닝`, `마크 오브 어쌔신`, `자벨린 액셀레이션`, `비`에 반영했습니다.
2026-07-01 검증 결과 구조적 위험은 0장입니다. 주요 조정은 `독맥 터뜨리기`, `메아리 칼자국`, `소리 없는 제압`, `그리드`, `그림자 속도전`, `스틸`, 두 계열의 `피지컬 트레이닝`, `마크 오브 어쌔신`, `자벨린 액셀레이션`, `비장의 패`에 반영했습니다.
비스킬 카드 78장의 메이플풍 표시 이름은 `docs/rogue-card-names.md`에서 관리합니다. 메이플 원본 스킬 카드 45장의 이름은 변경하지 않습니다.
## 5섹션 캠페인 검증

97
docs/rogue-card-names.md Normal file
View File

@@ -0,0 +1,97 @@
# 도적 비스킬 카드 이름
메이플스토리 원본 스킬을 바탕으로 만든 카드 45장은 이름을 고정합니다.
아래 78장은 다른 직업의 스킬명을 점유하지 않도록 도적 계열의 독자적인 이름으로 변경했습니다.
## Rogue
- `Neutralize`: 무력화 -> 커닝식 견제
- `SilentStrike`: 타격 -> 초보 도적의 칼끝
- `Survivor`: 생존자 -> 골목길 생존술
- `SilentDefend`: 수비 -> 낡은 가죽 방패
- `Slice`: 칼질 -> 짧은 단검질
- `PoisonedStab`: 독 찌르기 -> 초록 독단검
- `SuckerPunch`: 불의의 일격 -> 골목 기습
- `LeadingStrike`: 선제 타격 -> 초보 표창 던지기
- `Anticipate`: 예측 -> 럭키 예감
- `Deflect`: 튕겨내기 -> 단검 쳐내기
- `Backflip`: 공중제비 -> 커닝 곡예
- `DodgeAndRoll`: 구르기 -> 골목 구르기
- `Untouchable`: 범접 불가 -> 연막 속 숨기
- `Backstab`: 배신 -> 그림자 등찌르기
- `EscapePlan`: 탈출구 -> 비상용 연막탄
## Thief
- `DaggerSpray`: 단검 분사 -> 단검비
- `DaggerThrow`: 단검 투척 -> 비도 투척
- `FollowThrough`: 완수 -> 연달아 찌르기
- `FlickFlack`: 재주넘기 -> 커닝 난무
- `Prepared`: 예비 -> 비장의 패
- `PiercingWail`: 귀를 찢는 비명 -> 골목의 살기
- `DeadlyPoison`: 맹독 -> 맹독 조제
- `Snakebite`: 뱀 물기 -> 독니 단검
- `PreciseCut`: 정밀한 베기 -> 급소 절개
- `Finisher`: 마무리 -> 마지막 칼끝
- `MementoMori`: 메멘토 모리 -> 사신의 장부
- `Strangle`: 목 조르기 -> 그림자 올가미
- `Dash`: 돌진 -> 뒷골목 돌파
- `CalculatedGamble`: 계산된 도박 -> 메소 건 승부
- `Expose`: 들춰내기 -> 약점 들추기
- `Acrobatics`: 곡예 -> 지붕 위 곡예
- `HandTrick`: 손기술 -> 재빠른 손놀림
- `Expertise`: 전문성 -> 노련한 단검술
- `BubbleBubble`: 차오르는 독 -> 독액 농축
- `Blur`: 흐릿함 -> 흐린 잔영
- `LegSweep`: 다리 걸기 -> 발목 베기
- `Reflex`: 반사신경 -> 찰나의 반응
- `Tactician`: 전략가 -> 골목길 책략
- `WellLaidPlans`: 괜찮은 전략 -> 빈틈없는 작전
- `Footwork`: 발놀림 -> 사뿐한 발놀림
- `NoxiousFumes`: 유독 가스 -> 숨막히는 독연기
## Thief Master
- `BouncingFlask`: 탄성 플라스크 -> 통통 독병
- `Haze`: 아지랑이 -> 보랏빛 독연기
- `Outbreak`: 발병 -> 독맥 터뜨리기
- `Speedster`: 스피드스터 -> 그림자 속도전
- `GrandFinale`: 대단원의 막 -> 커닝의 대단원
- `Assassinate`: 암살 -> 어둠 속 급소
- `EchoingSlash`: 메아리 참격 -> 메아리 칼자국
- `Murder`: 살해 -> 쌓여가는 살의
- `Malaise`: 불쾌 -> 기운 빼는 독
- `ShadowStep`: 그림자 걸음 -> 그림자 발자국
- `Shadowmeld`: 그림자 은신 -> 연막 속 은신
- `CorrosiveWave`: 부식성 파도 -> 부식 독물결
- `Burst`: 폭주 -> 연속 술수
- `KnifeTrap`: 칼날 함정 -> 숨은 칼날덫
- `BulletTime`: 불릿 타임 -> 멈춘 듯한 순간
- `Nightmare`: 악몽 -> 검은 꿈
- `ToolsOfTheTrade`: 작업 도구 -> 도적의 연장통
- `MasterPlanner`: 설계의 대가 -> 작전의 달인
- `SerpentForm`: 구렁이의 형상 -> 독사의 몸놀림
- `Abrasive`: 연마 -> 거친 숫돌질
- `Suppress`: 진압 -> 소리 없는 제압
- `WraithForm`: 유령의 형상 -> 유령 같은 몸놀림
## Assassin
- `Ricochet`: 도탄 -> 통통 튀는 표창
- `BladeDance`: 검무 -> 표창 별무리
- `CloakAndDagger`: 망토와 단검 -> 망토 속 별
- `Skewer`: 꼬챙이 -> 꿰뚫는 표창
- `Flechettes`: 프레췌 -> 표창 셈법
- `Pounce`: 덮치기 -> 어둠을 가르는 도약
- `Predator`: 천적 -> 표창 끝의 추격
- `Pinpoint`: 정밀 사격 -> 한 점 겨냥
- `HiddenDaggers`: 숨겨진 표창 -> 숨겨둔 표창
- `UpMySleeve`: 비책 -> 소매 속 표창
- `InfiniteBlades`: 무한의 검날 -> 끝없는 표창통
- `TheHunt`: 사냥 -> 커닝 현상금
- `StormOfSteel`: 강철의 폭풍 -> 쇠별 폭풍
## Hermit
- `BladeOfInk`: 잉크 칼날 -> 먹빛 표창
- `FanOfKnives`: 칼날 부채 -> 사방 표창비

View File

@@ -0,0 +1,82 @@
import { readFileSync } from 'node:fs';
const cards = JSON.parse(readFileSync('data/cards.json', 'utf8')).cards;
const rogueClasses = new Set(['rogue', 'thief', 'thiefmaster', 'assassin', 'hermit']);
const mapleSkillCards = {
DoubleStab: '더블 스탭',
LuckySeven: '럭키 세븐',
Haste: '헤이스트',
DarkSight: '다크 사이트',
FlashJump: '플래시 점프',
NimbleBody: '님블 바디',
SavageBlow: '새비지 블로우',
CriticalEdge: '크리티컬 엣지',
Steal: '스틸',
DaggerAcceleration: '대거 액셀레이션',
Karma: '카르마',
DaggerMastery: '대거 마스터리',
PhysicalTraining: '피지컬 트레이닝',
ShieldMastery: '실드 마스터리',
ThiefAgility: '시프 어질리티',
EdgeCarnival: '엣지 카니발',
MuspelHeim: '무스펠 하임',
MesoExplosion: '메소 익스플로젼',
DarkFlare: '다크 플레어',
PickPocket: '픽 파킷',
ShadowPartner: '쉐도우 파트너',
AdvancedDarkSight: '어드밴스드 다크 사이트',
IntoDarkness: '인투 다크니스',
Venom: '베놈',
Grid: '그리드',
RadicalDarkness: '래디컬 다크니스',
ShurikenBurst: '슈리켄 버스트',
WindTalisman: '윈드 탈리스만',
MarkOfAssassin: '마크 오브 어쌔신',
ShadowRush: '쉐도우 러쉬',
ShadowLeap: '쉐도우 리프',
ShadowBlink: '쉐도우 블링크',
JavelinMastery: '자벨린 마스터리',
JavelinAcceleration: '자벨린 액셀레이션',
CriticalThrow: '크리티컬 스로우',
AssassinPhysicalTraining: '피지컬 트레이닝',
TripleThrow: '트리플 스로우',
ShurikenChallenge: '슈리켄 챌린지',
HermitDarkFlare: '다크 플레어',
HermitShadowPartner: '쉐도우 파트너',
SpiritJavelin: '스피릿 자벨린',
HermitRadicalDarkness: '래디컬 다크니스',
HermitVenom: '베놈',
SkilledJavelin: '숙련된 표창술',
HermitAdrenaline: '아드레날린',
};
const errors = [];
for (const [id, expectedName] of Object.entries(mapleSkillCards)) {
if (!cards[id]) errors.push(`원본 스킬 카드 없음: ${id}`);
else if (cards[id].name !== expectedName) errors.push(`원본 스킬명 변경: ${id} (${cards[id].name} != ${expectedName})`);
}
const customCards = Object.entries(cards).filter(([id, card]) => rogueClasses.has(card.class) && !mapleSkillCards[id]);
if (customCards.length !== 78) errors.push(`도적 비스킬 카드 수 불일치: ${customCards.length} != 78`);
const names = new Map();
for (const [id, card] of Object.entries(cards)) {
if (!names.has(card.name)) names.set(card.name, []);
names.get(card.name).push(id);
}
const nonRogueNames = new Set(Object.values(cards).filter((card) => !rogueClasses.has(card.class) && card.class !== 'shiv').map((card) => card.name));
for (const [id, card] of customCards) {
const sameNameIds = names.get(card.name) || [];
if (sameNameIds.length > 1) errors.push(`비스킬 카드명 중복: ${id} ${card.name} (${sameNameIds.join(', ')})`);
if (nonRogueNames.has(card.name)) errors.push(`다른 직업 카드명 충돌: ${id} ${card.name}`);
}
console.log(`메이플 원본 스킬명 고정 ${Object.keys(mapleSkillCards).length}장 | 도적 비스킬 고유 이름 ${customCards.length}`);
if (errors.length > 0) {
for (const error of errors) console.error(`ERROR: ${error}`);
process.exitCode = 1;
} else {
console.log('RESULT: 도적 카드 이름 규칙 이상 0');
}