From 668f125dbf5f3db48a2d865b5696bba8bf9374de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=A6=AC=EC=85=B0?= <37092106+kohashiwakaba@users.noreply.github.com> Date: Mon, 10 Jun 2024 02:12:29 +0900 Subject: [PATCH] ko_kr : General desc update and misc (#668) * ko_kr : general desc updates * bag of crafting recipe search for korean * change credits name --- CREDITS.md | 2 +- descriptions/ab+/ko_kr.lua | 112 ++++++- descriptions/rep/ko_kr.lua | 109 +++++-- eid_config.lua | 2 +- features/eid_bagofcrafting_search.lua | 25 +- features/eid_bagofcrafting_search_kr.lua | 373 +++++++++++++++++++++++ 6 files changed, 577 insertions(+), 46 deletions(-) create mode 100644 features/eid_bagofcrafting_search_kr.lua diff --git a/CREDITS.md b/CREDITS.md index 49b4c210..01e93de4 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -13,7 +13,7 @@ If you enjoy this mod and want to help on it, check it out on GitHub: https://gi - **Greek**: by vanillarat - **Italian**: by Klyser8, Denkishi, 2G - **Japanese**: by prefab -- **Korean**: by Blackcreamtea, 미카 +- **Korean**: by Blackcreamtea, 리셰(kohashiwakaba) - **Polish**: by Rickyy, Kennyluz, MERITT, DimonoKingoKongo - **Portuguese**: by Marcelino Cruz - **Russian**: by hell2Pay, fly_6, Dezzelshipc and Sekaz diff --git a/descriptions/ab+/ko_kr.lua b/descriptions/ab+/ko_kr.lua index b0c65b42..2908c830 100644 --- a/descriptions/ab+/ko_kr.lua +++ b/descriptions/ab+/ko_kr.lua @@ -55,7 +55,7 @@ EID.descriptions[languageCode].collectibles={ {"4", "크리켓의 머리", "↑ {{DamageSmall}}공격력 +0.5#↑ {{DamageSmall}}공격력 배율 x1.5"}, -- Cricket's Head {"5", "나의 모습", "↑ {{RangeSmall}}사거리 +1.5#↑ 눈물 높이 +1#↑ {{ShotspeedSmall}}탄속 +0.6#공격이 캐릭터가 있는 방향으로 되돌아옵니다."}, -- My Reflection {"6", "오줌싸개", "↑ {{TearsSmall}}연사 +1.5#↓ {{RangeSmall}}사거리 -17.62#↑ 눈물 높이 +0.76"}, -- Number One - {"7", "순교자의 피", "↑ {{DamageSmall}}공격력 +1#{{Collectible34}} Book of the Belial/{{Card16}}The Devil 효과 발동 중 {{DamageSmall}}추가 공격력 배율 x1.5"}, -- Blood of the Martyr + {"7", "순교자의 피", "↑ {{DamageSmall}}공격력 +1"}, -- Blood of the Martyr {"8", "보비", "공격하는 방향으로 공격력 3.5의 눈물을 발사합니다."}, -- Brother Bobby {"9", "스카톨", "파리류 적들이 공격하지 않거나 약해집니다."}, -- Skatole {"10", "파리떼", "캐릭터 주변을 돌며 적의 탄환을 막아주는 2마리의 파리 배리어를 얻습니다."}, -- Halo of Flies @@ -82,7 +82,7 @@ EID.descriptions[languageCode].collectibles={ {"31", "엄마의 립스틱", "↑ {{RangeSmall}}사거리 +5.25#↑ 눈물 높이 +0.5"}, -- Mom's Lipstick {"32", "철제 옷걸이", "↑ {{TearsSmall}}연사 +0.7"}, -- Wire Coat Hanger {"33", "성경", "사용 시 그 방에서 비행 능력을 얻습니다.#{{MomBossSmall}}Mom, {{MomsHeartSmall}}Mom's Heart/It Lives 보스에게 사용 시 보스를 즉사시킵니다.#!!! {{SatanSmall}}Satan 보스에게 사용 시 캐릭터가 즉사합니다."}, -- The Bible - {"34", "벨리알의 책", "{{DevilChanceSmall}} 소지중일 때 악마방 확률 +12.5%#사용 시 그 방에서 {{DamageSmall}}공격력 +2 증가하며;#{{Collectible7}} Blood of the Martyr 소지 시 {{DamageSmall}}공격력 배율 x1.5 추가 적용"}, -- The Book of Belial + {"34", "벨리알의 책", "{{DevilChanceSmall}} 소지중일 때 악마방 확률 +12.5%#사용 시 그 방에서 {{DamageSmall}}공격력 +2"}, -- The Book of Belial {"35", "네크로노미콘", "사용 시 방 전체 적에게 40의 피해를 줍니다."}, -- The Necronomicon {"36", "똥", "사용 시 똥을 싸며 주변의 적을 더 강하게 밀쳐냅니다.#1칸짜리 구덩이 바로 옆에서 똥을 싸고 폭탄으로 터트리면 해당 구덩이를 메울 수 있습니다."}, -- The Poop {"37", "미스터 붐", "사용 시 캐릭터의 위치에 공격력 110의 대형 폭탄을 설치합니다."}, -- Mr. Boom @@ -97,7 +97,7 @@ EID.descriptions[languageCode].collectibles={ {"46", "행운의 발", "↑ {{LuckSmall}}행운 +1#↑ 방 클리어 보상이 등장할 확률이 대폭 증가합니다.#야바위와 도박기계의 성공 확률이 증가합니다."}, -- Lucky Foot {"47", "박사의 원격 조종기", "{{Collectible168}} 사용 시 조준점을 이동시킨 곳으로 캐릭터의 공격력 x20의 미사일을 발사합니다."}, -- Doctor's Remote {"48", "큐피드의 화살", "공격이 적을 관통합니다."}, -- Cupid's Arrow - {"49", "모두 다 사라져빔!!", "사용 시 공격하는 방향으로 공격력 x4의 레이저포를 발사합니다."}, -- Shoop da Whoop! + {"49", "모두 다 사라져빔!!", "사용 시 공격하는 방향으로 공격력 x2의 레이저포를 발사합니다."}, -- Shoop da Whoop! {"50", "스티븐", "↑ {{DamageSmall}}공격력 +1"}, -- Steven {"51", "오망성", "↑ {{DamageSmall}}공격력 +1#↑ {{DevilChanceSmall}}악마방 확률 최대 +10%"}, -- Pentagram {"52", "태아 박사", "↓ {{TearsSmall}}공격 딜레이 x2.5#공격이 폭탄 발사 공격으로 변경됩니다.#{{Damage}} 폭탄 공격력: x5 +30"}, -- Dr. Fetus @@ -123,7 +123,7 @@ EID.descriptions[languageCode].collectibles={ {"72", "묵주", "↑ {{SoulHeart}}소울하트 +3#!!! {{Collectible33}}The Bible이 모든 배열에서 등장합니다."}, -- Rosary {"73", "고기조각", "획득할 때마다 성장합니다.#1단계: 캐릭터 주위를 돌며 적의 탄환을 막아줍니다.#2단계: 1단계 + 공격하는 방향으로 공격력 3.5의 눈물을 발사합니다.#3/4단계: 적을 따라다니며 접촉한 적에게 초당 7/11의 피해를 입힙니다."}, -- Cube of Meat {"74", "쿼터", "↑ {{Coin}}동전 +25"}, -- A Quarter - {"75", "박사학위", "↑ {{Heart}}빨간하트 +2#{{Pill}}알약을 하나 드랍합니다.#확인되지 않은 알약의 효과를 알 수 있습니다.#↑ 부정적인 알약 효과가 등장하지 않습니다.#헌혈기 및 {{Collectible135}}IV Bag 사용 시 동전 1~2개를 추가로 드랍합니다."}, -- PHD + {"75", "박사학위", "↑ {{Heart}}빨간하트 +2#{{Pill}}알약을 하나 드랍합니다.#확인되지 않은 알약의 효과를 알 수 있습니다.#↑ 부정적인 알약 효과가 등장하지 않습니다.#헌혈기 사용 시 동전 1~2개를 추가로 드랍합니다."}, -- PHD {"76", "투시 안경", "{{SecretRoom}}비밀방 및 {{SuperSecretRoom}}일급비밀방이 자동으로 열립니다."}, -- X-Ray Vision {"77", "나의 작은 유니콘", "사용 시 6초간 캐릭터의 {{SpeedSmall}}이동속도 +0.28, 무적 상태가 되며 접촉한 적에게 초당 40의 피해를 입힙니다."}, -- My Little Unicorn {"78", "요한묵시록", "{{DevilChanceSmall}} 소지중일 때 악마방 확률 +17.5%#사용 시 {{SoulHeart}}소울하트 +1#가능한 경우, 현재 층의 보스를 4기사로 교체합니다."}, -- Book of Revelations @@ -275,7 +275,7 @@ EID.descriptions[languageCode].collectibles={ {"224", "크리켓의 몸", "↑ {{TearsSmall}}연사 +0.2#↓ {{RangeSmall}}사거리 -10#눈물이 무언가에 부딪힐 때 네갈래로 갈라집니다."}, -- Cricket's Body {"225", "김피", "적 처치 시 일정 확률로 {{HalfHeart}}빨간하트가 반칸 드랍됩니다.#피격 시 8% 확률로 {{SoulHeart}}소울하트 또는 {{BlackHeart}}블랙하트를 드랍합니다.#{{LuckSmall}} 행운 46 이상일 때 100% 확률"}, -- Gimpy {"226", "검은 연꽃", "↑ {{Heart}}최대 체력 +1#↑ {{SoulHeart}}소울하트 +1#↑ {{BlackHeart}}블랙하트 +1"}, -- Black Lotus - {"227", "돼지 저금통", "↑ {{Coin}}동전 +3#피격 시 동전을 1~2개 드랍합니다.#!!! {{Player14}}/{{Player33}}Keeper: 0~1개"}, -- Piggy Bank + {"227", "돼지 저금통", "↑ {{Coin}}동전 +3#피격 시 동전을 1~2개 드랍합니다."}, -- Piggy Bank {"228", "엄마의 향수", "↑ {{TearsSmall}}연사 +0.2#15%의 확률로 적을 {{Fear}}도망가게 하는 공격이 나갑니다.#{{LuckSmall}} 행운 85 이상일 때 100% 확률"}, -- Mom's Perfume {"229", "몬스트로의 폐", "↓ {{TearsSmall}}공격 딜레이 x4.3#{{Chargeable}} 공격을 충전한 다음 여러 개의 눈물을 흩뿌리면서 발사합니다."}, -- Monstro's Lung {"230", "아바돈", "최대 체력이 모두 제거됩니다.#↑ {{BlackHeart}}블랙하트 +6#↑ {{DamageSmall}}공격력 +1.5#↑ {{SpeedSmall}}이동속도 +0.2#15%의 확률로 적을 {{Fear}}도망가게 하는 공격이 나갑니다.#{{LuckSmall}} 행운 85 이상일 때 100% 확률"}, -- Abaddon @@ -361,10 +361,10 @@ EID.descriptions[languageCode].collectibles={ {"310", "이브의 마스카라", "↑ {{DamageSmall}}공격력 배율 x2#↓ {{TearsSmall}}연사 배율 x0.2#↓ {{ShotspeedSmall}}탄속 -0.5"}, -- Eve's Mascara {"311", "유다의 그림자", "↑ 목숨 +1#{{Player12}} 사망 시 전 방에서 Black Judas 캐릭터#{{Blank}} (2{{BlackHeart}}/{{DamageSmall}}공격력 배율 x2/{{SpeedSmall}}이동속도 +0.1)로 부활합니다."}, -- Judas' Shadow {"312", "매기의 리본", "↑ {{Heart}}최대 체력 +1#{{Heart}}빨간하트 획득량이 2배로 증가합니다."}, -- Maggy's Bow - {"313", "신성한 망토", "피격 시 방당 1회 한정으로 피해를 무시합니다."}, -- Holy Mantle + {"313", "신성한 망토", "피격 시 방당 1회 한정으로 피해를 무시합니다.#!!! 헌혈류 피격은 막아주지 않습니다."}, -- Holy Mantle {"314", "살찐 허벅지", "↑ {{Heart}}최대 체력 +1#↓ {{SpeedSmall}}이동속도 -0.4#장애물을 부술 수 있습니다."}, -- Thunder Thighs {"315", "이상한 끌개", "적과 픽업이 공격에 끌려옵니다."}, -- Strange Attractor - {"316", "저주받은 눈알", "{{Chargeable}} 눈물을 충전한 다음 최대 4발의 눈물을 일렬로 발사합니다.#!!! 충전중 피격 시 스테이지 안의 랜덤한 방으로 순간이동합니다.#{{Blank}} ({{Collectible260}} 보유 시 순간이동 효과 면역)"}, -- Cursed Eye + {"316", "저주받은 눈알", "{{Chargeable}} 눈물을 충전한 다음 최대 4발의 눈물을 일렬로 발사합니다.#!!! 충전중 피격 시 스테이지 안의 랜덤한 방으로 순간이동합니다."}, -- Cursed Eye {"317", "이상한 액체", "공격이 무언가에 부딪힐 때 초록 장판이 생기며 장판에 닿은 적은 초당 30의 피해를 입습니다."}, -- Mysterious Liquid {"318", "쌍둥이자리", "캐릭터와 연결되어 이동하며 적을 따라다니며 접촉한 적에게 초당 6의 피해를 입힙니다."}, -- Gemini {"319", "카인의 왼쪽 눈", "대각선으로 이동하며 공격하는 방향으로 캐릭터의 공격력과 같은 눈물을 발사합니다."}, -- Cain's Other Eye @@ -549,7 +549,7 @@ EID.descriptions[languageCode].collectibles={ {"498", "이중성", "{{AngelDevilChanceSmall}} 악마방 등장 시 천사방이 함께 등장하며 두 방 중 한곳을 선택할 수 있습니다."}, -- Duality {"499", "성찬", "{{AngelChanceSmall}} 악마 거래 여부와 무관하게 천사방 등장 확률이 100%로 고정됩니다."}, -- Eucharist {"500", "자루 주머니", "{{GrabBag}} 방 5~6개 클리어 시 픽업 자루를 드랍합니다."}, -- Sack of Sacks - {"501", "탐욕의 식도", "동전 25개 당 {{EmptyHeart}}빈 최대 체력 +1#{{Player14}}/{{Player33}}Keeper: 동전 25개 당 체력 상한 +1#동전으로 늘어난 체력은 동전 소비 시 사라집니다."}, -- Greed's Gullet + {"501", "탐욕의 식도", "동전 25개 당 {{EmptyHeart}}빈 최대 체력 +1#동전으로 늘어난 체력은 동전 소비 시 사라집니다."}, -- Greed's Gullet {"502", "대왕 여드름", "확률적으로 적을 {{Slow}}둔화시키는 공격력 x2의 눈물이 나갑니다."}, -- Large Zit {"503", "작은 뿔", "5%의 확률로 적을 즉사시키는 눈물이 나갑니다.#적에게 접촉 시 3.5의 피해를 입힙니다."}, -- Little Horn {"504", "갈색 너겟", "사용 시 그 자리에서 주위의 적을 공격하는 파란 파리를 소환합니다."}, -- Brown Nugget @@ -812,7 +812,7 @@ EID.descriptions[languageCode].cards={ {"8", "VII - 전차", "{{Collectible77}} 6초간 무적 상태가 되며 접촉한 적에게 40의 피해를 입힙니다."}, -- VII - The Chariot {"9", "VIII - 정의", "{{Heart}}하트, {{Coin}}동전, {{Bomb}}폭탄, {{Key}}열쇠를 하나씩 드랍합니다."}, -- VIII - Justice {"10", "IX - 은둔자", "{{Shop}}상점으로 순간이동합니다."}, -- IX - The Hermit - {"11", "X - 운명의 수레바퀴", "도박기계, 혹은 운세기계를 생성합니다."}, -- X - Wheel of Fortune + {"11", "X - 운명의 수레바퀴", "{{Slotmachine}}도박기계 혹은 {{FortuneTeller}}운세기계를 생성합니다."}, -- X - Wheel of Fortune {"12", "XI - 힘", "그 방에서 {{Heart}}최대 체력 +1, {{DamageSmall}}공격력 +0.3, {{DamageSmall}}공격력 배율 +50%, {{RangeSmall}}사거리 +5.25, 눈물 높이 +0.5, {{SpeedSmall}}이동속도 +0.3"}, -- XI - Strength {"13", "XII - 매달린 남자", "{{Collectible20}} 그 방에서 비행 능력을 얻습니다."}, -- XII - The Hanged Man {"14", "XIII - 죽음", "{{Collectible35}} 방 안의 모든 적에게 40의 피해를 줍니다."}, -- XIII - Death @@ -1024,16 +1024,71 @@ EID.descriptions[languageCode].PickupNames = { ["5.350"] = "{{Trinket}}장신구", } +-- Card Buffs caused by Tarot Cloth (separate table from Rep due to how different they are) +-- Strings will be appended to the original description (with line breaks replaced with a Tarot Cloth icon) +-- Tables with one entry will completely replace the original description +-- Tables with two or more entries are find-replace pairs (the new text will be colored Shiny Purple) +EID.descriptions[languageCode].tarotClothBuffsAB = { + [4] = {0.3, 0.6, 1.5, 3}, -- III - The Empress + [6] = {2, 4}, -- V - The Hierophant + [7] = {2, 4}, -- VI - The Lovers + [8] = {6, 12}, -- VII - The Chariot + [9] = {"{{Heart}}하트, {{Coin}}동전, {{Bomb}}폭탄, {{Key}}열쇠를 {{ColorShinyPurple}}2{{CR}}개씩 드랍합니다."}, -- VIII - Justice + [11] = {"{{Slotmachine}}도박기계 혹은 {{FortuneTeller}}운세기계를 2개 생성합니다."}, -- X - Wheel of Fortune + [12] = {1, 2, 0.3, 0.6, 0.3, 0.6, 5.25, 10.5}, -- XI - Strength + [14] = {40, 80}, -- XIII - Death + [15] = {"{{DonationMachine}}헌혈기계를 {{ColorShinyPurple}}2{{CR}}개 생성합니다."}, -- XIV - Temperance + [17] = {6, 12}, -- XVI - The Tower + [20] = {100, 200}, -- XIX - The Sun + [21] = {"랜덤 거지를 {{ColorShinyPurple}}2{{CR}}명 소환합니다."}, -- XX - Judgement + [23] = {"x2", "x4"}, -- 2 of Clubs + [24] = {"x2", "x4"}, -- 2 of Diamonds + [25] = {"x2", "x4"}, -- 2 of Spades + [26] = {"x2", "x4"}, -- 2 of Hearts + [33] = {"x2", "x4"}, -- Jera + [35] = {1, 2}, -- Dagaz + [37] = "!!! 일부 아이템이 배열에서 지워질 수 있음", -- Perthro + [38] = {3, 6}, -- Berkano + [39] = {30, 60}, -- Algiz + [40] = "랜덤 효과 수 및 Blank Rune 드랍 횟수 x2", -- Blank Rune + [41] = {40, 80}, -- Black Rune + [46] = {10, 20}, -- Suicide King + [48] = "2회 사용", -- ? Card + [53] = {3, 6}, -- Ancient Recall +} + +-- Conditional descriptions +-- Strings will be appended to the original description +-- Tables with one entry will completely replace the original description +-- Tables with two or more entries are find-replace pairs EID.descriptions[languageCode].ConditionalDescs = { - ["5.300.48"] = "오류방으로 순간이동합니다.#Blank Card와 ? 카드가 제거됩니다.", -- Blank Card + Q Card + ["Overridden"] = "{1}에 의해 무효화", + ["Overrides"] = "{1}을(를) 무효화", + ["No Effect"] = "{1}에는 무효과", + + ["No Red"] = "최대 체력이 소울하트인 캐릭터에는 무효과", + ["5.100.81 (No Red)"] = "최대 체력이 소울하트인 캐릭터는 소울하트가 1칸이 됨", -- Dead Cat + + ["5.100.7"] = "The Book of Belial 혹은 XV - The Devil 효과 발동 중 {{DamageSmall}}공격력 배율 x1.5", -- Blood of the Martyr + ["5.100.34"] = "{{DamageSmall}}발동 중 공격력 배율 x1.5", -- Book of Belial + ["5.300.16"] = "{{DamageSmall}}발동 중 공격력 배율 x1.5", -- The Devil + + ["5.100.135 (PHD)"] = "{1} 소지 시 동전 2~3개 소환", -- IV Bag PHD + ["Keeper 0-1"] = "{1}: 0~1개", -- IV Bag/Piggy Bank Keeper - ["5.100.81"] = "!!! 최대 체력 = 소울하트 보정을 받는 캐릭터는 소울하트가 1칸이 됩니다.", -- Dead Cat ["5.100.241"] = "{{GreedModeSmall}} Greed 모드의 동전 보상은 영향 없음", -- Contract From Below - ["Keeper 0-1"] = "{{Player14}}Keeper: 0~1개", -- IV Bag Keeper - ["5.100.135 (PHD)"] = "{{Collectible75}} PHD 소지 시 2-3개로 증가", -- IV Bag PHD - ["No Red"] = "빨간하트를 소지할 수 없는 캐릭터는 무효과", -- Dark Prince's Crown - ["5.300.15"] = "{{DemonBeggar}} 악마거지를 소환합니다.", -- Temperance (Greed Mode effect) - -- ["5.350.23"] = "", -- Missing Poster (Unlock The Lost) + ["5.300.15"] = {"{{DemonBeggar}} 악마거지를 소환합니다."}, -- Temperance (Greed Mode effect) + ["5.300.15 (Tarot)"] = {"{{DemonBeggar}} 악마거지를 {{ColorShinyPurple}}2{{CR}}명 소환합니다."}, -- Temperance (Greed Mode + Tarot Cloth effect) + + ["5.350.23"] = "!!! {{SacrificeRoom}}희생방에서 사망 시 The Lost 캐릭터가 해금됩니다.", -- Missing Poster (Unlock The Lost) + + ["5.100.549"] = "{1}: ↑ {{TearsSmall}}연사 +0.4", -- Brittle Bones (Keeper+Lost) + + ["5.100.316"] = "{1} 소지 시 순간이동 면역", -- Cursed Eye + ["5.100.260"] = "{1}의 순간이동 효과를 제거합니다.", -- Black Candle + ["5.100.501"] = "{1}: 체력 상한을 초과할 수 있습니다.", -- Greed's Gullet + ["5.100.230 (Keeper)"] = "!!! {1}: {{ColorRed}}획득 시 사망", -- Abaddon + ["5.300.48"] = "!!! 오류방으로 순간이동합니다.#Blank Card와 ? 카드가 제거됩니다.", -- Blank Card + Q Card } EID.descriptions[languageCode].BFFSSynergies = { @@ -1046,3 +1101,28 @@ EID.descriptions[languageCode].BFFSSynergies = { ["5.100.537"] = "장판 크기 증가, 피해량이 증가하지 않음", -- Lil Spewer ["5.100.539"] = "소환되는 아군이 챔피언으로 등장", -- Mystery Egg } + + +-- TODO: make these more consistent with other descs, add icons, and is there any traits of the characters missing? +-- Soon, these descriptions, along with their starting item descriptions, will be in a tab in the Item Reminder +-- The character names here are also used in getPlayerName to provide localized character names +EID.descriptions[languageCode].characterInfo = { + [0] = {"Isaac", ""}, + {"Magdalene", ""}, + {"Cain", ""}, + {"Judas", ""}, + {"???", "{{SoulHeart}} 최대 체력 = 소울하트의 보정을 받습니다."}, + {"Eve", "{{Collectible122}} 바빌론의 창녀가 빨간하트가 1칸 이하여도 발동됩니다."}, --this could just be desc modifier? + {"Samson", ""}, + {"Azazel", "{{Collectible118}} 검은 날개로 날 수 있으며 사거리가 매우 짧은 혈사포를 발사합니다."}, + {"Lazarus", "{{Collectible332}} 사망 시 그 방에서 최대 체력 1칸으로 부활합니다."}, + {"Eden", "모든 능력치 및 시작 아이템이 랜덤으로 정해집니다."}, + {"The Lost", "지형 관통 공격 + 날아다닐 수 있으나 체력이 없어 한 번 맞으면 사망합니다.#모든 악마 거래를 체력 상관없이 획득할 수 있습니다."}, + {"Lazarus Risen", "부활 이후의 나사로로 능력치가 증가되어 있습니다."}, + {"Dark Judas", "{{DamageSmall}} 공격력 배율 x2"}, + {"Lilith", "{{Collectible360}} 공격할 수 없으며 모든 공격을 Incubus가 대신해 줍니다."}, + {"Keeper", "{{CoinHeart}} 체력이 하트가 아닌 코인으로 이루어져 있으며 2칸의 상한을 가집니다.#동전으로 체력 회복 가능#하트 픽업이 자폭 파리로 바뀝니다."}, + {"Apollyon", ""}, + {"The Forgotten", "{{Chargeable}} 공격 키로 뼈를 휘두르며 충전 시 충전 거리만큼 뼈다귀를 부메랑처럼 던질 수 있습니다.#{{BoneHeart}} 최대 체력 = 뼈하트의 보정을 받으며 6칸의 상한을 가집니다.#{{ButtonRT}} (Ctrl)키로 영혼과 교체할 수 있으며 영혼은 지형 관통 눈물을 발사합니다.{{SoulHeart}} 최대 체력 = 소울하트의 보정을 받으며 6칸의 상한을 가집니다.#영혼은 날아다닐 수 있으나 본체로부터 멀리 떨어질 수 없습니다."}, + {"The Forgotten Soul", "{{Chargeable}} 공격 키로 뼈를 휘두르며 충전 시 충전 거리만큼 뼈다귀를 부메랑처럼 던질 수 있습니다.#{{BoneHeart}} 최대 체력 = 뼈하트의 보정을 받으며 6칸의 상한을 가집니다.#{{ButtonRT}} (Ctrl)키로 영혼과 교체할 수 있으며 영혼은 지형 관통 눈물을 발사합니다.{{SoulHeart}} 최대 체력 = 소울하트의 보정을 받으며 6칸의 상한을 가집니다.#영혼은 날아다닐 수 있으나 본체로부터 멀리 떨어질 수 없습니다."}, +} \ No newline at end of file diff --git a/descriptions/rep/ko_kr.lua b/descriptions/rep/ko_kr.lua index b608f6e1..3c4ea9c3 100644 --- a/descriptions/rep/ko_kr.lua +++ b/descriptions/rep/ko_kr.lua @@ -29,6 +29,7 @@ local repCollectibles={ --[[ [44] = {"44", "순간이동!", "사용 시 스테이지 안의 랜덤한 방으로 순간이동합니다.#캐릭터의 이동방향의 영향을 받습니다."}, ]] -- Teleport! [45] = {"45", "맛난 하트", "사용 시 {{Heart}}빨간하트 1칸을 회복합니다.#다른 플레이어의 {{HalfHeart}}빨간하트를 반칸 회복합니다."}, -- Yum Heart [46] = {"46", "행운의 발", "↑ {{LuckSmall}}행운 +1#부정적인 알약 효과가 등장하지 않습니다.#방 클리어 보상이 등장할 확률이 대폭 증가합니다.#야바위와 도박기계의 성공 확률이 증가합니다."}, -- Lucky Foot + [49] = {"49", "모두 다 사라져빔!!", "사용 시 공격하는 방향으로 공격력 x4의 레이저포를 발사합니다."}, -- Shoop da Whoop! [52] = {"52", "태아 박사", "↓ {{TearsSmall}}연사 배율 x0.4#공격이 폭탄 발사 공격으로 변경됩니다.#{{DamageSmall}} 폭탄 공격력: x10#{{Blank}}폭탄 공격력 60 이상인 경우: x5 +30"}, -- Dr. Fetus [53] = {"53", "자석", "픽업이 캐릭터에게 끌려옵니다.#{{Chest}} 가까이에 있는 상자를 접촉 없이 열 수 있습니다."}, -- Magneto [55] = {"55", "엄마의 눈알", "50%의 확률로 캐릭터의 뒤에서 추가로 공격이 나갑니다.#{{LuckSmall}} 행운 5 이상일 때 100% 확률"}, -- Mom's Eye @@ -94,7 +95,6 @@ local repCollectibles={ [182] = {"182", "성스러운 심장", "↑ {{Heart}}최대 체력 +1#{{Heart}} 체력을 모두 회복합니다.#↑ {{DamageSmall}}공격력 +1#↑ {{DamageSmall}}공격력 배율 x2.3#↓ {{TearsSmall}}연사 -0.4#↓ {{ShotspeedSmall}}탄속 -0.25#공격에 유도 효과가 생깁니다.#폭탄에 유도 효과가 생깁니다."}, -- Sacred Heart [184] = {"184", "신성한 성배", "↑ {{Heart}}최대 체력 +1#↑ {{Heart}}빨간하트 +1#비행 능력을 얻습니다."}, -- Holy Grail [186] = {"186", "피의 권리", "사용 시 체력을 1칸 깎고 방 안의 모든 적에게 40의 피해를 줍니다.#그 방에서 연속적으로 사용 시 2번째 사용부터 깎이는 체력이 반칸으로 줄어듭니다.#빨간하트를 우선적으로 깎습니다."}, -- Blood Rights - [188] = {"188", "아벨", "캐릭터의 반대로 움직이며 캐릭터가 있는 방향으로 공격력 3.5의 눈물을 발사합니다.#{{Player2}} Cain: 공격력 5의 눈물을 발사합니다."}, -- Abel [189] = {"189", "슈미보 광팬", "↑ {{Heart}}최대 체력 +1#{{Heart}} 체력을 모두 회복합니다.#↑ {{DamageSmall}}공격력 +0.3#↑ {{TearsSmall}}연사 +0.2#↑ {{RangeSmall}}사거리 +2.5#↑ {{SpeedSmall}}이동속도 +0.2"}, -- SMB Super Fan [192] = {"192", "천재반을 위한 텔레파시법", "사용 시 그 방에서 {{RangeSmall}}사거리가 +3 증가하며 공격이 적에게 유도됩니다."}, -- Telepathy For Dummies [193] = {"193", "고기!", "↑ {{Heart}}최대 체력 +1#↑ {{Heart}}빨간하트 +1#↑ {{DamageSmall}}공격력 +0.3"}, -- MEAT! @@ -121,7 +121,7 @@ local repCollectibles={ [233] = {"233", "소행성", "↑ {{RangeSmall}}사거리 +6.5#공격이 장애물을 관통합니다.#공격이 캐릭터 주위를 돌면서 발사됩니다."}, -- Tiny Planet [240] = {"240", "임상시험", "!!! 아래의 능력치 중;#↑ 능력치 4종류 증가#↓ 능력치 2종류 감소#!!! {{EmptyHeart}}빈 최대 체력 ±1#{{Blank}} {{SpeedSmall}}이동속도 ±0.2#{{Blank}} {{TearsSmall}}연사{{ColorOrange}}(상한){{CR}} ±0.5#{{Blank}} {{DamageSmall}}최종 공격력 ±1#{{Blank}} {{RangeSmall}}사거리 ±2.5#{{Blank}} {{ShotspeedSmall}}탄속 ±0.2#{{Blank}} {{LuckSmall}}행운 ±1"}, -- Experimental Treatment [241] = {"241", "지하로부터의 계약", "방 클리어 보상이 하나 더 나옵니다.#방 클리어 보상이 33%의 확률로 등장하지 않습니다.#{{Blank}} (중첩 시 보상 개수 증가, 보상 미등장 확률 감소)"}, -- Contract from Below - [245] = {"245", "시력 2.0", "↓ {{DamageSmall}}공격력 배율 x0.8#공격이 2발로 나갑니다.#{{Collectible153}}Mutant Spider, {{Collectible2}}The Inner Eye, {{Collectible169}}Polyphemus 연사 감소 효과를 제거합니다."}, -- 20/20 + [245] = {"245", "시력 2.0", "↓ {{DamageSmall}}공격력 배율 x0.8#공격이 2발로 나갑니다."}, -- 20/20 [248] = {"248", "군체의식", "파란 아군 파리/거미와 파리/거미 타입의 패밀리어의 공격력이 2배 증가합니다."}, -- Hive Mind [249] = {"249", "추가 선택권", "{{BossRoom}}보스방 보상 아이템이 한개 더 추가되며 하나를 선택하면 나머지는 사라집니다."}, -- There's Options [253] = {"253", "마법의 딱쟁이", "↑ {{Heart}}최대 체력 +1#↑ {{Heart}}빨간하트 +1#↑ {{LuckSmall}}행운 +1"}, -- Magic Scab @@ -159,7 +159,7 @@ local repCollectibles={ [310] = {"310", "이브의 마스카라", "↑ {{DamageSmall}}공격력 배율 x2#↓ {{TearsSmall}}연사 배율 x0.66#↓ {{ShotspeedSmall}}탄속 -0.5"}, -- Eve's Mascara [314] = {"314", "살찐 허벅지", "↑ {{Heart}}최대 체력 +1#↑ {{Heart}}빨간하트 +1#↓ {{SpeedSmall}}이동속도 -0.4#장애물을 부술 수 있습니다."}, -- Thunder Thighs [315] = {"315", "이상한 끌개", "공격이 무언가에 부딪힐 때 적과 픽업이 공격에 끌려옵니다."}, -- Strange Attractor - [316] = {"316", "저주받은 눈알", "{{Chargeable}} 눈물을 충전한 다음 최대 5발의 눈물을 일렬로 발사합니다.#!!! 충전중 피격 시 스테이지 안의 랜덤한 방으로 순간이동합니다.#{{Blank}} ({{Collectible260}} 보유 시 순간이동 효과 면역)"}, -- Cursed Eye + [316] = {"316", "저주받은 눈알", "{{Chargeable}} 눈물을 충전한 다음 최대 5발의 눈물을 일렬로 발사합니다.#!!! 충전중 피격 시 스테이지 안의 랜덤한 방으로 순간이동합니다."}, -- Cursed Eye [319] = {"319", "카인의 왼쪽 눈", "랜덤 방향으로 캐릭터의 공격력 x0.75의 공격을 발사합니다."}, -- Cain's Other Eye [320] = {"320", "???의 하나뿐인 친구", "공격하는 방향으로 이동하며 접촉하는 적에게 틱 당 3.5의 피해를 입힙니다."}, -- ???'s Only Friend [323] = {"323", "아이작의 눈물", "사용 시 캐릭터 기준 8방향으로 캐릭터의 공격력 +5의 눈물을 발사합니다.#눈물을 발사할 때마다 충전량이 증가합니다."}, -- Isaac's Tears @@ -186,7 +186,7 @@ local repCollectibles={ [352] = {"352", "유리 대포", "사용 시 공격력 x10 +10의 눈물을 발사합니다.#!!! 패널티 피격 시 체력 2칸의 피해를 추가로 입으며 대포가 부서집니다.#부서진 대포의 충전량을 채우면 대포를 복구할 수 있습니다."}, -- Glass Cannon [354] = {"354", "식품 완구", "↑ {{Heart}}최대 체력 +1#↑ {{Heart}}빨간하트 +1#장신구를 하나 드랍합니다."}, -- Crack Jacks [355] = {"355", "엄마의 진주목걸이", "↑ {{SoulHeart}}소울하트 +1#↑ {{RangeSmall}}사거리 +2.5#↑ {{LuckSmall}}행운 +1"}, -- Mom's Pearls - [360] = {"360", "인큐버스", "공격하는 방향으로 캐릭터의 공격력 x0.75의 공격을 발사합니다.#{{Player13}} (Lilith류의 경우 공격력 x1.0)"}, -- Incubus + [360] = {"360", "인큐버스", "공격하는 방향으로 캐릭터의 공격력 x0.75의 공격을 발사합니다."}, -- Incubus [365] = {"365", "길잃은 파리", "벽과 장애물 둘레를 돌며 접촉하는 적에게 초당 56의 피해를 입힙니다.#주변의 적을 유인합니다."}, -- Lost Fly [366] = {"366", "분산형 폭탄", "↑ {{Bomb}}폭탄 +5#폭탄이 터지면 작은 폭탄 4~5개가 나와 한번 더 폭발합니다."}, -- Scatter Bombs [367] = {"367", "끈끈이 폭탄", "↑ {{Bomb}}폭탄 +5#{{Slow}} 폭탄이 터진 자리에 15초간 하얀 장판이 생기며 닿은 적은 느려집니다.#폭탄이 적에게 접촉 시 달라붙으며 해당 폭탄으로 달라붙은 적을 처치 시 파란 아군 거미 2~5마리를 소환합니다."}, -- Sticky Bombs @@ -265,7 +265,7 @@ local repCollectibles={ [496] = {"496", "안락사", "3.33%의 확률로 공격력 x3의 적을 즉사시키며 눈물이 10방향으로 퍼지는 공격이 나갑니다.#{{LuckSmall}} 행운 15 이상일 때 25% 확률"}, -- Euthanasia [497] = {"497", "위장 속옷", "{{Confusion}} {{ColorOrange}}공격키를 누르지 않은 상태에서{{CR}} 방 입장 시 방 안의 모든 적들이 혼란에 걸리며 캐릭터의 {{SpeedSmall}}이동속도 +0.5 증가합니다.#!!! 공격키를 누르면 효과가 풀리면서 이하 효과 발동:#주변의 적에게 15의 피해를 줍니다.#1초동안 매우 빠르게 감소하는 {{DamageSmall}}공격력 +10.5, {{TearsSmall}}연사(상한) +7.5"}, -- Camo Undies [498] = {"498", "이중성", "{{AngelDevilChanceSmall}} 악마방과 천사방이 함께 등장하며 두 방 중 한곳을 선택할 수 있습니다."}, -- Duality - [501] = {"501", "탐욕의 식도", "동전 25개 당 {{EmptyHeart}}빈 최대 체력 +1#99개 이후에는 동전 100개 당 {{EmptyHeart}}빈 최대 체력 +1#{{Player14}}/{{Player33}}Keeper: 동전 25개 당 체력 상한 +1#동전으로 늘어난 체력은 동전 소비 시 사라집니다."}, -- Greed's Gullet + [501] = {"501", "탐욕의 식도", "동전 25개 당 {{EmptyHeart}}빈 최대 체력 +1#동전으로 늘어난 체력은 동전 소비 시 사라집니다."}, -- Greed's Gullet [502] = {"502", "대왕 여드름", "{{Slow}} 확률적으로 공격력 x2의 적을 둔화시키는 눈물이 나갑니다."}, -- Large Zit [503] = {"503", "작은 뿔", "적에게 접촉 시 3.5의 피해를 입힙니다.#5%의 확률로 적을 즉사시키며 12 x3의 추가 피해를 주는 공격이 나갑니다.#{{LuckSmall}} 행운 15 이상일 때 20% 확률"}, -- Little Horn [504] = {"504", "갈색 너겟", "사용 시 그 자리에서 주위의 적에게 공격력 3.5의 눈물을 발사하는 파란 파리를 소환합니다."}, -- Brown Nugget @@ -375,7 +375,7 @@ local repCollectibles={ [639] = {"639", "역겨운 하트", "사용 시 {{RottenHeart}}썩은하트 +1"}, -- Yuck Heart [640] = {"640", "영혼의 항아리", "적 처치시 항아리에 불꽃이 저장됩니다.#사용 시 저장된 불꽃을 소모해 공격하는 방향으로 공격력 초당 22.5의 불꽃을 발사합니다.#!!! 불꽃의 공격력: 22.5 + (4.5 * 현재 스테이지)"}, -- Urn of Souls [641] = {"641", "아겔다마", "적이 있는 방에 입장 시 캐릭터의 뒤에 눈물끈이 생성됩니다.#눈물끈에 닿은 적은 3.5의 피해를 입습니다."}, -- Akeldama - [642] = {"642", "마법의 피부", "사용 시 {{Heart}}/{{BoneHeart}}1칸 또는 {{SoulHeart}}2칸을 {{BrokenHeart}}소지 불가능 체력 1칸으로 바꾸며 그 방의 아이템을 하나 생성합니다.#사용 횟수에 비례하여 {{Collectible642}} 미소지 시 일정 확률로 등장하는 아이템이 {{Collectible642}}으로 교체됩니다.#!!! {{ColorSilver}}1회:33%/2회:50%/3회+:100%{{CR}}#현재 층에 판매 중이지 않은 Magic Skin이 있을 경우 교체 확률 대폭 감소#!!! {{Player10}}/{{Player31}}The Lost: 일회용"}, -- Magic Skin + [642] = {"642", "마법의 피부", "사용 시 {{Heart}}/{{BoneHeart}}1칸 또는 {{SoulHeart}}2칸을 {{BrokenHeart}}소지 불가능 체력 1칸으로 바꾸며 그 방의 아이템을 하나 생성합니다.#사용 횟수에 비례하여 {{Collectible642}} 미소지 시 일정 확률로 등장하는 아이템이 {{Collectible642}}으로 교체됩니다.#!!! {{ColorSilver}}1회:33%/2회:50%/3회+:100%{{CR}}#현재 층에 판매 중이지 않은 Magic Skin이 있을 경우 교체 확률 대폭 감소"}, -- Magic Skin [643] = {"643", "계시", "↑ {{SoulHeart}}소울하트 +2#비행 능력을 얻습니다.#{{Chargeable}} 공격키를 2.5초 이상 누르면 충전되며 공격키를 떼면 일직선 방향으로 레이저를 발사합니다.#레이저는 다단히트로 적에게 최대 15번의 피해를 줍니다."}, -- Revelation [644] = {"644", "위로상", "↑ 가장 낮은 능력치가 특정 수치만큼 증가합니다.#{{DamageSmall}}:+1/{{TearsSmall}}:+0.5/{{SpeedSmall}}:+0.2/{{RangeSmall}}:+2.5#가장 적게 소지중인 픽업을 특정 개수만큼 드랍합니다."}, -- Consolation Prize [645] = {"645", "타이니토마", "캐릭터 주위를 돌며 적의 탄환을 막고 접촉한 적에게 3.5의 피해를 줍니다.#적과 3번 접촉 시 2조각으로 분열하며 2번 분열 시 파괴되어 파란 아군 거미를 3마리 소환합니다.#완전히 파괴된 경우 5초 후 재생성됩니다."}, -- Tinytoma @@ -437,7 +437,7 @@ local repCollectibles={ [701] = {"701", "아이작의 무덤", "{{DirtyChest}} 스테이지 첫 방에 오래된 잠긴상자를 1개 소환합니다.#{{DirtyChest}} 오래된 상자에는 {{SoulHeart}}/{{Trinket}}장신구/{{AngelRoom}}천사방/엄마아빠 관련 아이템이 등장할 수 있습니다."}, -- Isaac's Tomb [702] = {"702", "복수심의 영혼", "피격 시 그 스테이지에서 캐릭터 주위를 돌며 공격하는 방향으로 공격력 3의 눈물을 발사하는 불꽃을 소환합니다.#{{Blank}} (최대 6회 적용)"}, -- Vengeful Spirit [703] = {"703", "에사우 주니어", "사용 시 Esau 상태 ({{BlackHeart}}블랙하트 3, {{DamageSmall}}공격력 +2, 비행, 고유능력 취급)로 전환됩니다.#재사용 시 원래 캐릭터로 전환됩니다.#두 캐릭터는 체력과 아이템을 공유하지 않습니다.#처음 사용 시 Esau 캐릭터는 기존 캐릭터가 갖고 있는 아이템의 개수만큼 랜덤한 아이템을 가집니다."}, -- Esau Jr. - [704] = {"704", "폭주!", "사용 시 5초 동안 {{DamageSmall}}공격력이 +3, {{SpeedSmall}}이동속도가 +0.4 증가하며 공격이 공격력 x3의 휘두르는 뼈 공격으로 변경됩니다.#방 클리어로 충전되지 않으며 적에게 120 +(40 * 현재 스테이지)의 피해를 주면 충전됩니다.#폭주 상태에서 적 처치 시 지속 시간 1초 증가"}, -- Berserk! + [704] = {"704", "폭주!", "사용 시 5초 동안 {{DamageSmall}}공격력 +3, {{SpeedSmall}}이동속도 +0.4 증가하며 공격이 적의 탄환을 반사하는 공격력 x3의 휘두르는 뼈 공격으로 변경됩니다.#방 클리어로 충전되지 않으며 적에게 120 +(40 * 현재 스테이지)의 피해를 주면 충전됩니다.#폭주 상태에서 적 처치 시 지속 시간 1초 연장 + 처치한 순간 무적"}, -- Berserk! [705] = {"705", "흑마술", "사용 시 1초 동안 {{SpeedSmall}}이동속도가 +1.0 증가하고 무적 상태가 되며 적과 탄환을 통과할 수 있습니다.#효과가 끝나면 통과한 적들에게 공격력 x3의 피해를 줍니다.#발동 중 공격키를 누르면 즉시 해제됩니다."}, -- Dark Arts [706] = {"706", "무저갱", "사용 시 방 안의 아이템을 흡수하며 흡수한 아이템의 수만큼 특수한 아군 파리를 소환합니다.#소환된 아군 파리는 공격하는 방향으로 돌진하며 접촉한 적에게 초당 공격력 x3의 피해를 줍니다.#흡수한 아이템에 따라 소환되는 아군 파리의 능력이 달라집니다."}, -- Abyss [707] = {"707", "만찬", "↑ {{Heart}}최대 체력 +1#↑ {{Heart}}빨간하트 +1"}, -- Supper @@ -475,9 +475,9 @@ EID.descriptions[languageCode].birthright ={ {"Isaac", "", "방 안의 모든 아이템이 랜덤한 아이템과 1초마다 전환되며 두 아이템 중 하나를 선택할 수 있습니다."}, {"Magdalene", "", "↑ {{Heart}}최대 체력 +1#↑ 체력 상한 +6"}, {"Cain", "", "↑ {{LuckSmall}}행운 +1#오락실 구조가 특수하게 변경됩니다.#1~9스테이지(Cathedral/Sheol)에서 오락실이 생성됩니다."}, - {"Judas", "", "{{Collectible34}}Book of Belial이 다른 액티브와 결합되며 결합된 액티브 사용 시 그 방에서 액티브 충전량 1칸 당 {{DamageSmall}}공격력이 0.7 증가합니다.#일부 액티브 아이템에 특수한 효과를 추가합니다."}, + {"Judas", "", "{{Collectible34}} Book of Belial이 다른 액티브와 결합되며 결합된 액티브 사용 시 그 방에서 액티브 충전량 1칸 당 {{DamageSmall}}공격력이 0.7 증가합니다.#일부 액티브 아이템에 특수한 효과를 추가합니다."}, {"???", "", "최대 체력 증가 시 증가되는 {{SoulHeart}}소울하트의 양이 2배로 증가합니다."}, - {"Eve", "", "{{Collectible122}}Whore of Babylon과 {{Collectible117}}Dead Bird의 효과가 상시 발동됩니다."}, + {"Eve", "", "{{Collectible122}} Whore of Babylon과 {{Collectible117}} Dead Bird의 효과가 조건과 무관하게 항상 발동됩니다."}, {"Samson", "", "{{Collectible157}} Bloody Lust의 {{DamageSmall}}공격력 보너스 최대 스택 +4회(최대 +14)"}, {"Azazel", "", "혈사포의 굵기가 대폭 증가합니다."}, {"Lazarus", "", "부활 시마다 {{DamageSmall}}공격력 +7.2#증가한 공격력은 시간이 지날수록 천천히 감소됩니다.#부활 이전으로 돌아가도 잔여 공격력 증가는 유지됩니다."}, @@ -487,7 +487,7 @@ EID.descriptions[languageCode].birthright ={ {"Black Judas", "", "{{Collectible34}}Book of Belial이 다른 액티브와 결합되며 액티브 사용 시 그 방에서 액티브 충전량 1칸 당 {{DamageSmall}}공격력이 0.7 증가합니다."}, {"Lilith", "", "패밀리어의 위치가 캐릭터의 전방으로 고정됩니다."}, {"Keeper", "", "↑ {{CoinHeart}}최대 체력 +1#↑ 체력 상한 +1"}, - {"Apollyon", "", "{{Collectible477}}Void 사용 시 확률적으로 이전에 흡수했던 아이템을 생성합니다.#흡수한 아이템이 많을수록 아이템이 생성되는 확률이 증가합니다.#한 번 적용된 스탯 보너스는 감소하지 않습니다."}, + {"Apollyon", "", "{{Collectible477}} Void 사용 시 확률적으로 이전에 흡수했던 아이템을 생성합니다.#흡수한 아이템이 많을수록 아이템이 생성되는 확률이 증가합니다.#한 번 적용된 스탯 보너스는 감소하지 않습니다."}, {"The Forgotten", "", "영혼이 해골에 속박되지 않으며 방을 자유자재로 이동할 수 있습니다."}, {"The Forgotten Soul", "", "영혼이 해골에 속박되지 않으며 방을 자유자재로 이동할 수 있습니다."}, {"Bethany", "", "확률적으로 액티브 아이템 사용 시 소울하트가 감소하지 않습니다."}, @@ -497,7 +497,7 @@ EID.descriptions[languageCode].birthright ={ {"Tainted Magdalene", "", "↑ 고정 체력 +1#!!! 추가된 고정 체력은 악마방/천사방 확률에 영향을 끼칩니다."}, {"Tainted Cain", "", "↑ 아이템 분해 시 생성되는 픽업의 개수가 2배로 증가합니다."}, {"Tainted Judas", "", "{{Collectible705}} Dark Arts의 인식 범위 대폭 증가"}, - {"Tainted ???", "", "↑ {{PoopPickup}}소지 가능한 똥 개수 +20"}, + {"Tainted ???", "", "↑ {{PoopPickup}} 소지 가능한 똥 개수 +20"}, {"Tainted Eve", "", "빨간 클롯이 죽으면 2초 후 사라지는 {{Heart}}빨간하트를 드랍합니다."}, {"Tainted Samson", "", "{{Collectible704}} 적 처치시 늘어나는 광폭화 지속시간이 2초 증가합니다."}, {"Tainted Azazel", "", "{{Collectible726}} 재채기의 범위가 2배로 증가합니다."}, @@ -870,7 +870,7 @@ local repTrinkets={ [153] = {"153", "엄마의 머리뭉치", "방 입장 시 확률적으로 그 방에서 랜덤한 엄마 아이템 효과를 얻습니다."}, -- Mom's Lock [154] = {"154", "주사위 가방", "방 입장 시 확률적으로 그 방에서 랜덤한 일회용 주사위 아이템 픽업을 얻습니다."}, -- Dice Bag [155] = {"155", "신성한 왕관", "Cathedral 스테이지에서 {{TreasureRoom}}보물방과 {{Shop}}상점이 생성됩니다."}, -- Holy Crown - [156] = {"156", "어머니의 키스", "↑ 소지중일 때 {{Heart}}최대 체력 +1#↑ {{Player14}}/{{Player33}} Keeper: 소지중일 때 체력 상한 +1"}, -- Mother's Kiss + [156] = {"156", "어머니의 키스", "↑ 소지중일 때 {{Heart}}최대 체력 +1"}, -- Mother's Kiss [157] = {"157", "찢어진 카드", "!!! 눈물을 15번 발사할 때 마다:#{{Blank}} {{Collectible5}}{{Collectible149}}캐릭터에게 되돌아오는 폭발하는 독성 눈물을 발사합니다."}, -- Torn Card [158] = {"158", "찢어진 주머니", "피격 시 소지중인 픽업 중 2가지를 드랍합니다."}, -- Torn Pocket [159] = {"159", "도금 열쇠", "↑ {{Key}}열쇠 +1#{{GoldenChest}} 낡은상자, 메가상자를 제외한 모든 상자가 황금상자로 교체됩니다.#{{GoldenChest}} 황금상자가 드랍하는 픽업의 양이 종류와 상관없이 최소 2개가 보장됩니다.#{{GoldenChest}} 황금상자에서 {{Rune}}룬의 등장 확률이 증가하며 {{Pill}}알약과 {{Battery}}배터리가 등장할 수 있습니다."}, -- Gilded Key @@ -1281,14 +1281,20 @@ EID.descriptions[languageCode].CraftingBestQuality = "최고등급:" EID.descriptions[languageCode].CraftingHideKey = "숨기기:" EID.descriptions[languageCode].CraftingPreviewKey = "미리보기:" +-- {1} will be converted to the number of recipes +EID.descriptions[languageCode].CraftingMore = "...+{1}개 더" +-- {1} will be converted into the number of available items +EID.descriptions[languageCode].CraftingNumAvailableItems = "{1}/8개" +EID.descriptions[languageCode].CraftingWarningAvailableItems = "스테이지에 픽업이 최소 8개 이상이여야 제작 가능" +-- {1} will be converted into the name of the key that toggles the BoC visibility +EID.descriptions[languageCode].CraftingIsHidden = "현재 숨겨짐({1} 키로 표시)" EID.descriptions[languageCode].CraftingResults = "목록 스크롤: {{CONFIG_BoC_Toggle}}+{{ButtonY}}or{{ButtonA}}#목록 고정:{{ButtonX}}#목록 새로고침:{{ButtonB}}#초기화:{{ButtonRB}}꾹 누르기, 찾기:{{ButtonEnter}})" -EID.descriptions[languageCode].BlankCardCharge = "Blank Card 충전량:" EID.descriptions[languageCode].BlankCardEffect = "Blank Card로 사용 시:" -EID.descriptions[languageCode].ClearRuneCharge = "Clear Rune 충전량:" -EID.descriptions[languageCode].PlaceboCharge = "Placebo 충전량:" -EID.descriptions[languageCode].FlipItemToggleInfo = "( {{CONFIG_BoC_Toggle}} (맵 펼치기) 버튼을 꾹 눌러 설명 보기)" +EID.descriptions[languageCode].BlankCardQCard = "오류방으로 순간이동합니다.#Blank Card와 ? 카드가 제거됩니다." +EID.descriptions[languageCode].VariableCharge = "{1} 충전량:" +EID.descriptions[languageCode].FlipItemToggleInfo = "( {{CONFIG_BoC_Toggle}} 맵 버튼을 꾹 눌러 설명 보기)" EID.descriptions[languageCode].GlowingHourglassTransformed = "스테이지 진입 시 복원됨" @@ -1310,16 +1316,35 @@ EID.descriptions[languageCode].ModdedRecipesWarningText = "아이템 추가 모 EID.descriptions[languageCode].ResultsWithX = "({1} 사용 시 결과)" +-- Conditional descriptions +-- Strings will be appended to the original description +-- Tables with one entry will completely replace the original description +-- Tables with two or more entries are find-replace pairs local repConditions={ - ["5.100.161"] = "{{Player25}} Tainted ???의 경우 ??? 캐릭터로 변경되지 않습니다.", -- Ankh - ["5.350.28"] = "{{Player25}} Tainted ???의 경우 ??? 캐릭터로 변경되지 않습니다.", -- Broken Ankh - ["5.100.311"] = "{{Player24}} Tainted Judas의 경우 Black Judas 캐릭터로 변경되지 않습니다.", -- Judas's Shadow - ["5.100.332"] = "{{Player29}} TTainted Lazarus의 경우 Lazarus Risen 캐릭터로 변경되지 않습니다.", -- Lazarus's Rags - ["5.350.23 (Tainted Lost)"] = "{{Player31}} Tainted Lost의 경우 The Lost 캐릭터로 변경되지 않습니다.", -- Missing Poster - ["5.100.676"] = "빨간하트를 소지할 수 없는 캐릭터는 무효과", -- Empty Heart - ["5.300.15 (Tarot)"] = "{{DemonBeggar}} 악마거지를 {{ColorShinyPurple}}2{{CR}}명 소환합니다.", -- Temperance (Greed Mode + Tarot Cloth effect) - ["5.350.1"] = "{{Player14}} Keeper: 0~1개", -- Swallowed Penny + ["Tainted Revive"] = "{1}: 캐릭터 변경 없이 부활합니다.", + ["5.100.135 (Hard Mode)"] = {"1~2개", "1개", "2~3개", "2개"}, -- IV Bag Hard Mode (modify the PHD text too) + ["5.100.642"] = "{1}: 일회용", -- Magic Skin + ["5.100.240"] = "{1}: 아이템을 버려도 변경된 능력치 유지", -- Experimental Treatment + ["5.100.644"] = "{1}: 아이템을 버려도 변경된 능력치 유지", -- Consolation Prize + + ["5.100.549"] = "{1}: ↑ {{TearsSmall}}연사(상한) +0.4", -- Brittle Bones (Keeper+Lost) + ["5.100.694"] = "{1}: 추가 허용 피격 수 +4", -- Heartbreak + + ["5.100.201"] = "{1}을/를 완충합니다.", --Iron Bar + ["5.350.172"] = "{1} 소지 시 순간이동 면역", -- Cursed Penny + ["5.100.188"] = "{1}: 피해량 5로 증가", -- Cain + Abel + ["5.100.360"] = "{1}: 공격력 x1의 공격을 발사", -- Lilith + Incubus + ["5.100.501 (Deep Pockets)"] = "99개 이후에는 동전 100개 당 {{EmptyHeart}}빈 최대 체력 +1", -- Greed's Gullet + Deep Pockets + ["5.350.156"] = "{1}: 체력 상한 +1", -- Mother's Kiss + ["5.100.230 (Keeper)"] = "{1}: 체력 한칸을 유지", -- Abaddon + ["5.100.230 (Bethany)"] = "{1}: 체력 한칸 및 빨간하트 반칸을 유지", -- Abaddon + ["5.100.230 (Tainted Bethany)"] = "{1}: 빨간 충전량이 소멸되지 않음", -- Abaddon + + ["5.100.245"] = "{1}의 연사 감소 효과를 제거합니다.", -- 20/20 + Mutant Spider, The Inner Eye, Polyphemus + ["5.100.245 (Keeper)"] = "{1}: 연사 증가 및 발사 수 감소", -- 20/20 + Keeper + ["20/20"] = "{1} 소지 시 연사 감소 효과 제거됨", -- 20/20 + Mutant Spider, The Inner Eye, Polyphemus + ["5.100.705"] = "흑마술로 통과한 적과 탄환 수만큼 일시적 공격력 +1", -- Dark Arts + Dark/Tainted Judas } EID:updateDescriptionsViaTable(repConditions, EID.descriptions[languageCode].ConditionalDescs) @@ -1334,6 +1359,42 @@ local repBFFSSynergies = { } EID:updateDescriptionsViaTable(repBFFSSynergies, EID.descriptions[languageCode].BFFSSynergies) +-- TODO: make these more consistent with other descs, add icons, and is there any traits of the characters missing? +local repCharacterInfo = { + [4] = {"???", "{{SoulHeart}} 최대 체력 = 소울하트의 보정을 받습니다.#{{DevilChanceSmall}} 악마 거래 가격이 기존 최대 체력 가격으로 할인됩니다.#{{Trinket86}} 똥을 파괴할 때마다 파란 아군 파리를 하나 소환합니다."}, + [8] = {"Lazarus", "{{Collectible332}} 사망 시 그 방에서 최대 체력 1칸으로 부활합니다.#부활 상태는 스테이지 진입 시 초기화됩니다.#부활 시마다 {{DamageSmall}}공격력 + 0.5"}, + [10] = {"The Lost", "지형 관통 공격 + 날아다닐 수 있으나 체력이 없어 한 번 맞으면 사망합니다.#악마 거래를 체력 상관없이 획득할 수 있으나 하나 획득 시 나머지는 사라집니다."}, + [11] = {"Lazarus Risen", "부활 이후의 나사로로 능력치가 증가되어 있습니다.#스테이지 진입 시 부활 여부가 초기화되어 부활 이전 상태로 돌아갑니다."}, + [12] = {"Dark Judas", "{{DamageSmall}} 공격력 배율 x2#{{BlackHeart}} 최대 체력 = 블랙하트의 보정을 받습니다."}, + [14] = {"Keeper", "{{CoinHeart}} 체력이 하트가 아닌 코인으로 이루어져 있으며 3칸의 상한을 가집니다.#동전으로 체력 회복 가능#하트 픽업이 자폭 파리로 바뀝니다.#{{DevilChanceSmall} 악마 거래 가격이 기존 최대 체력 가격에 따라 15{{Coid}}/30{{Coin}}으로 바뀝니다."}, + [18] = {"Bethany", "소울하트를 소지할 수 없으며 모든 소울하트는 액티브 아이템의 게이지로 사용할 수 있습니다."}, + [19] = {"Jacob", "야곱과 에사우가 같이 움직이며 {{ButtonRT}} (Ctrl)키를 누르는 동안 에사우의 위치가 고정됩니다.#{{Bomb}} 폭탄 설치 시 두 캐릭터가 동시에 설치합니다.#한 쪽 사망 시 반대쪽도 사망합니다.#에사우의 액티브는 기존 카드/알약 사용 버튼으로 발동하며 카드/알약은 양 쪽 모두 {{ButtonRT}}+액티브 버튼으로 발동합니다.#선택형 아이템을 동시에 획득 시 양 쪽 모두 획득 가능"}, + [20] = {"Esau", ""}, + + [21] = {"Tainted Isaac", "모든 받침대 아이템이 2개의 선택지를 지닙니다.#패시브 아이템은 8개까지만 소지할 수 있으며 8개를 전부 소지한 상태에서 아이템 획득 시 선택된 아이템과 교체합니다.#교체할 아이템은 {{ButtonRT}} (Ctrl)키로 바꿀 수 있습니다."}, + [22] = {"Tainted Magdalene", "#기본 체력 2칸을 제외한 모든 체력은 서서히 반칸씩 사라집니다. 사라지는 체력을 잃어도 악마방/천사방 확률에 영향이 없습니다.#공격력이 약하지만 적과 접촉시 공격력 x6의 근접 공격을 합니다.#체력을 직접적으로 회복시켜주는 아이템의 회복량이 2배가 됩니다.#{{Collectible724}} 근접 공격으로 적을 처치하면 1.5초 후 사라지는 {{Heart}}빨간하트를 드랍합니다."}, + [23] = {"Tainted Cain", "아이템을 획득할 수 없으며 획득을 시도하면 픽업 아이템으로 분해됩니다.#특정 방에서 분해 시 특정 픽업 아이템이 반드시 하나 이상 등장합니다.#{{Collectible710}} 8개의 픽업 조합 시 아이템을 획득할 수 있으며 {{ButtonRT}}(Ctrl)키를 누르면 꽉 찼을 때 교체할 픽업을 선택할 수 있습니다."}, + [24] = {"Tainted Judas", "{{BlackHeart}} 최대 체력 = 블랙하트의 보정을 받습니다."}, + [25] = {"Tainted ???", "{{SoulHeart}} 최대 체력 = 소울하트 보정#{{Collectible725}} 폭탄을 사용할 수 없으며 폭탄 대신 여러 종류의 똥을 사용합니다.#적에게 피해를 줄 때마다 확률적으로 똥을 드랍합니다.#HUD 상에서 다음에 사용될 똥을 미리볼 수 있습니다.#{{Collectible715}} 똥은 반드시 순서대로만 사용할 수 있으며 Hold를 통해 똥을 하나 보관할 수 있습니다."}, + [26] = {"Tainted Eve", "{{Collectible713}} 공격 키를 2.5초동안 누르고 있으면 체력 반칸을 소모해 클롯 패밀리어를 소환합니다.#소모한 체력 종류에 따라 소환되는 클롯의 종류가 달라집니다.#클롯의 체력은 시간이 지날수록 줄어들며 {{Collectible713}}Sumptorium 사용 시 클롯을 체력으로 되돌립니다.#{{ButtonRT}} (Ctrl)키를 누르는 동안 클롯의 위치가 고정됩니다"}, + [27] = {"Tainted Samson", "{{Collectible704}} 일정 수만큼 피격 및 적 공격 시 폭주 상태로 돌입합니다.#{{Timer}} 폭주 상태 돌입 시 5초 동안 {{DamageSmall}}공격력 +3, {{SpeedSmall}}이동속도 +0.4 증가하며 공격이 적의 탄환을 반사하는 공격력 x3의 휘두르는 뼈 공격으로 변경됩니다.#폭주 상태에서 적 처치 시 지속 시간 1초 연장 + 처치한 순간 무적"}, + [28] = {"Tainted Azazel", "{{Collectible118}} 굵기가 매우 얇은 혈사포를 발사합니다.#혈사포는 적에게 공격력 x0.5의 피해를 입힙니다.#{{Collectible704}} 공격 시작 시 공격력 x1.5의 재채기를 하며 재채기 명중 시 혈사포를 절반만큼 충전시킵니다.#{{BrimstoneCurse}} 재채기에 맞은 적은 일정 시간 동안 유황 표식이 걸리며 혈사류 공격에 공격력 x2 +3의 피해 + 처치 시 주변의 적에게 유황 표식을 남깁니다."}, + [29] = {"Tainted Lazarus", "2가지의 폼이 있으며 삶/죽음 폼의 능력치 및 아이템은 따로 적용됩니다.#{{Collectible711}} 액티브 쿨타임이 채워지는 시점, 혹은 Flip 사용 시 죽음 폼으로 강제 전환됩니다."}, + [30] = {"Tainted Eden", "패널티 피격 시 능력치, 아이템, 장신구, 카드/알약 등이 바뀝니다.#바뀐 아이템은 획득했던 아이템의 배열로 바뀝니다."}, + [31] = {"Tainted Lost", "{{Card51}} 카드 등장 시 10%의 확률로 Holy Card로 교체됩니다.#{{Collectible691}} {{Quality2}} 이하의 아이템이 20%의 확률로 리롤되며 'offensive' 태그의 아이템만 등장합니다."}, + [32] = {"Tainted Lilith", "{{Collectible728}} 공격 키를 누르기 시작하면 태아를 발사 + 누르고 있는 동안 태아가 공격하며, 공격 키를 떼면 발사한 태아가 다시 들어갑니다."}, + [33] = {"Tainted Keeper", "{{CoinHeart}} 체력이 하트가 아닌 코인으로 이루어져 있으며 2칸의 상한을 가집니다.#적 처치 시 2초 후 사라지는 동전을 뿌립니다.#모든 아이템의 가격이 기존 최대 체력 가격에 따라 15{{Coid}}/30{{Coin}}으로 바뀝니다.#상점이 항상 열려 있으며 입고된 아이템이 늘어납니다."}, + [34] = {"Tainted Apollyon", ""}, + [35] = {"Tainted Forgotten", "{{SoulHeart}} 최대 체력 = 소울하트의 보정을 받습니다.#움직일 수 없으며 자유롭게 움직일 수 있는 영혼이 뼈 더미를 집고 던져야 합니다.#피격 판정은 영혼에게만 있습니다.#폭탄 설치 시 뼈 더미의 위치에서 설치됩니다."}, + [36] = {"Tainted Bethany", "{{SoulHeart}} 최대 체력 = 소울하트의 보정을 받습니다.#모든 빨간하트는 액티브 아이템의 게이지로 사용할 수 있습니다."}, + [37] = {"Tainted Jacob", "Dark Esau가 캐릭터를 향해 쫒아오며 가까이 있으면 돌진합니다.#{{Collectible722}} Anima Sola 사용 시 5초동안 Dark Esau를 묶으며 재사용, 혹은 시간 소진 시 더 크게 돌진합니다.#Dark Esau의 큰 돌진 공격은 지나가는 자리의 적에게 초당 300의 방어 무시+화상 피해를 줍니다.#Dark Esau에게 피격 시 유령 상태로 바뀌며 이후 1회 피격 시 사망합니다.#유령 상태에서 스테이지 진입 시 일반 상태로 돌아옵니다."}, + [38] = {"Dead Tainted Lazarus", "2가지의 폼이 있으며 삶/죽음 폼의 능력치 및 아이템은 따로 적용됩니다.#{{Collectible711}} 액티브 쿨타임이 채워지는 시점, 혹은 Flip 사용 시 죽음 폼으로 강제 전환됩니다."}, + [39] = {"Tainted Jacob 2", "!!! 유령 상태: {{ColorRed}}한 번이라도 피격 시 즉시 사망합니다.{{CR}}#악마 거래를 체력 상관없이 획득할 수 있으나 하나 획득 시 나머지는 사라집니다.#스테이지 진입 시 일반 상태로 돌아옵니다.#Dark Esau가 캐릭터를 향해 쫒아오며 가까이 있으면 돌진합니다.#{{Collectible722}} Anima Sola 사용 시 5초동안 Dark Esau를 묶으며 재사용, 혹은 시간 소진 시 더 크게 돌진합니다.#Dark Esau의 큰 돌진 공격은 지나가는 자리의 적에게 초당 300의 방어 무시+화상 피해를 줍니다."}, + [40] = {"Tainted Forgotten Soul", "{{SoulHeart}} 최대 체력 = 소울하트의 보정을 받습니다.#움직일 수 없으며 자유롭게 움직일 수 있는 영혼이 뼈 더미를 집고 던져야 합니다.#피격 판정은 영혼에게만 있습니다.#폭탄 설치 시 뼈 더미의 위치에서 설치됩니다."}, +} +EID:updateDescriptionsViaTable(repCharacterInfo, EID.descriptions[languageCode].characterInfo) + + local RepDemoObject = { DemoObjectName = "아이템 설명 모드 표시용", DemoObjectTransformation = "테스트 변신 세트 표시", diff --git a/eid_config.lua b/eid_config.lua index 0c1b7142..8df70c28 100644 --- a/eid_config.lua +++ b/eid_config.lua @@ -12,7 +12,7 @@ EID.UserConfig = { -- Greek = "el_gr" SPECIAL THANKS TO vanillarat -- Italian = "it" SPECIAL THANKS TO Denkishi, 2G -- Japanese = "ja_jp" SPECIAL THANKS TO prefab - -- Korean = "ko_kr" SPECIAL THANKS TO Blackcreamtea, 미카 + -- Korean = "ko_kr" SPECIAL THANKS TO Blackcreamtea, 리셰(kohashiwakaba) -- Polish = "pl" SPECIAL THANKS TO Rickyy -- Portuguese = "pt" SPECIAL THANKS TO Marcelino Cruz -- Brazilian Portuguese = "pt_br" SPECIAL THANKS TO Marcelino Cruz diff --git a/features/eid_bagofcrafting_search.lua b/features/eid_bagofcrafting_search.lua index a0c86bb1..de79b518 100644 --- a/features/eid_bagofcrafting_search.lua +++ b/features/eid_bagofcrafting_search.lua @@ -28,6 +28,8 @@ local function sanitizeName(name) return sanitized end +-- KR name search is complicated, divided into seperate file +require("features.eid_bagofcrafting_search_kr") --- Returns the current search query -- @param newValue new search query @@ -43,9 +45,23 @@ end --- Returns the current search query -- @return string function EID:BoCSGetSearchValue() - return searchValue + local s = searchValue + for _, callbackData in pairs(Isaac.GetCallbacks("EIDCallbacks.SEARCH_NAME_CONVERSION")) do + if callbackData.Param == EID:getLanguage() then + local newString = callbackData.Function(callbackData.Mod, callbackData.Param, s) + if newString and type(newString) == "string" then + s = newString + end + end + end + return s end +EID:AddCallback("EIDCallbacks.SEARCH_NAME_CONVERSION", function (_, lang, string) + -- TODO : make english search inside ko_kr language setting (priotity low though) + return EID.engKeystrokeToKor(string) +end, "ko_kr") + function EID:BoCSGetLocked() return locked end @@ -96,12 +112,13 @@ end --- Returns true if the item name is matched -- @returns boolean function EID:BoCSCheckItemName(itemName) - if searchValue == "" then + local s = EID:BoCSGetSearchValue() + if s == "" then return true end -- Check the name for matching our search string (accents removed) - return string.find(sanitizeName(itemName), sanitizeName(searchValue), 1, true) + return string.find(sanitizeName(itemName), sanitizeName(s), 1, true) end local function handleSearchInput() @@ -218,7 +235,7 @@ function EID:BoCSGetSearchLine() result = result .. "{{ColorLime}}" end local searchDescription = EID:getDescriptionEntry("CraftingSearch") - result = result .. searchDescription .. " " .. searchValue + result = result .. searchDescription .. " " .. EID:BoCSGetSearchValue() if EID.BoCSLockMode == 0 and EID:BoCSGetLocked() then result = result .. "{{Trinket159}}" diff --git a/features/eid_bagofcrafting_search_kr.lua b/features/eid_bagofcrafting_search_kr.lua new file mode 100644 index 00000000..42be3b6b --- /dev/null +++ b/features/eid_bagofcrafting_search_kr.lua @@ -0,0 +1,373 @@ +--- Eng char typed as korean keyboard conversion +--- source : https://blog.naver.com/milennium9/20205300449 + +local compConvertTable = { + {12593,4352}, -- ᄀ' == 'ㄱ' + {12594,4353}, -- ᄁ' == 'ㄲ' + {12596,4354}, -- ᄂ' == 'ㄴ' + {12599,4355}, -- ᄃ' == 'ㄷ' + {12600,4356}, -- ᄄ' == 'ㄸ' + {12601,4357}, -- ᄅ' == 'ㄹ' + {12609,4358}, -- ᄆ' == 'ㅁ' + {12610,4359}, -- ᄇ' == 'ㅂ' + {12611,4360}, -- ᄈ' == 'ㅃ' + {12613,4361}, -- ᄉ' == 'ㅅ' + {12614,4362}, -- ᄊ' == 'ㅆ' + {12615,4363}, -- ᄋ' == 'ㅇ' + {12616,4364}, -- ᄌ' == 'ㅈ' + {12617,4365}, -- ᄍ' == 'ㅉ' + {12618,4366}, -- ᄎ' == 'ㅊ' + {12619,4367}, -- ᄏ' == 'ㅋ' + {12620,4368}, -- ᄐ' == 'ㅌ' + {12621,4369}, -- ᄑ' == 'ㅍ' + {12622,4370}, -- ᄒ' == 'ㅎ' + {12645,4372}, -- ᄔ' == 'ㅥ' + {12646,4373}, -- ᄕ' == 'ㅦ' + {12653,4378}, -- ᄚ' == 'ㅭ' + {12654,4380}, -- ᄜ' == 'ㅮ' + {12657,4381}, -- ᄝ' == 'ㅱ' + {12658,4382}, -- ᄞ' == 'ㅲ' + {12659,4384}, -- ᄠ' == 'ㅳ' + {12612,4385}, -- ᄡ' == 'ㅄ' + {12660,4386}, -- ᄢ' == 'ㅴ' + {12661,4387}, -- ᄣ' == 'ㅵ' + {12662,4391}, -- ᄧ' == 'ㅶ' + {12663,4393}, -- ᄩ' == 'ㅷ' + {12664,4395}, -- ᄫ' == 'ㅸ' + {12665,4396}, -- ᄬ' == 'ㅹ' + {12666,4397}, -- ᄭ' == 'ㅺ' + {12667,4398}, -- ᄮ' == 'ㅻ' + {12668,4399}, -- ᄯ' == 'ㅼ' + {12669,4402}, -- ᄲ' == 'ㅽ' + {12670,4406}, -- ᄶ' == 'ㅾ' + {12613,4412}, -- ᄼ' == 'ㅅ' + {12614,4413}, -- ᄽ' == 'ㅆ' + {12613,4414}, -- ᄾ' == 'ㅅ' + {12614,4415}, -- ᄿ' == 'ㅆ' + {12671,4416}, -- ᅀ' == 'ㅿ' + {12674,4421}, -- ᅅ' == 'ㆂ' + {12675,4422}, -- ᅆ' == 'ㆃ' + {12672,4423}, -- ᅇ' == 'ㆀ' + {12615,4428}, -- ᅌ' == 'ㅇ' + {12616,4430}, -- ᅎ' == 'ㅈ' + {12617,4431}, -- ᅏ' == 'ㅉ' + {12616,4432}, -- ᅐ' == 'ㅈ' + {12617,4433}, -- ᅑ' == 'ㅉ' + {12618,4436}, -- ᅔ' == 'ㅊ' + {12618,4437}, -- ᅕ' == 'ㅊ' + {12676,4439}, -- ᅗ' == 'ㆄ' + {12677,4440}, -- ᅘ' == 'ㆅ' + {12678,4441}, -- ᅙ' == 'ㆆ' + {12644,4447}, -- ᅟ' == 'ㅤ' + {12623,4449}, -- ᅡ' == 'ㅏ' + {12624,4450}, -- ᅢ' == 'ㅐ' + {12625,4451}, -- ᅣ' == 'ㅑ' + {12626,4452}, -- ᅤ' == 'ㅒ' + {12627,4453}, -- ᅥ' == 'ㅓ' + {12628,4454}, -- ᅦ' == 'ㅔ' + {12629,4455}, -- ᅧ' == 'ㅕ' + {12630,4456}, -- ᅨ' == 'ㅖ' + {12631,4457}, -- ᅩ' == 'ㅗ' + {12632,4458}, -- ᅪ' == 'ㅘ' + {12633,4459}, -- ᅫ' == 'ㅙ' + {12634,4460}, -- ᅬ' == 'ㅚ' + {12635,4461}, -- ᅭ' == 'ㅛ' + {12636,4462}, -- ᅮ' == 'ㅜ' + {12637,4463}, -- ᅯ' == 'ㅝ' + {12638,4464}, -- ᅰ' == 'ㅞ' + {12639,4465}, -- ᅱ' == 'ㅟ' + {12640,4466}, -- ᅲ' == 'ㅠ' + {12641,4467}, -- ᅳ' == 'ㅡ' + {12642,4468}, -- ᅴ' == 'ㅢ' + {12643,4469}, -- ᅵ' == 'ㅣ' + {12679,4484}, -- ᆄ' == 'ㆇ' + {12680,4485}, -- ᆅ' == 'ㆈ' + {12681,4488}, -- ᆈ' == 'ㆉ' + {12682,4497}, -- ᆑ' == 'ㆊ' + {12683,4498}, -- ᆒ' == 'ㆋ' + {12684,4500}, -- ᆔ' == 'ㆌ' + {12685,4510}, -- ᆞ' == 'ㆍ' + {12686,4513}, -- ᆡ' == 'ㆎ' + {12593,4520}, -- ᆨ' == 'ㄱ' + {12594,4521}, -- ᆩ' == 'ㄲ' + {12595,4522}, -- ᆪ' == 'ㄳ' + {12596,4523}, -- ᆫ' == 'ㄴ' + {12597,4524}, -- ᆬ' == 'ㄵ' + {12598,4525}, -- ᆭ' == 'ㄶ' + {12599,4526}, -- ᆮ' == 'ㄷ' + {12601,4527}, -- ᆯ' == 'ㄹ' + {12602,4528}, -- ᆰ' == 'ㄺ' + {12603,4529}, -- ᆱ' == 'ㄻ' + {12604,4530}, -- ᆲ' == 'ㄼ' + {12605,4531}, -- ᆳ' == 'ㄽ' + {12606,4532}, -- ᆴ' == 'ㄾ' + {12607,4533}, -- ᆵ' == 'ㄿ' + {12608,4534}, -- ᆶ' == 'ㅀ' + {12609,4535}, -- ᆷ' == 'ㅁ' + {12610,4536}, -- ᆸ' == 'ㅂ' + {12612,4537}, -- ᆹ' == 'ㅄ' + {12613,4538}, -- ᆺ' == 'ㅅ' + {12614,4539}, -- ᆻ' == 'ㅆ' + {12615,4540}, -- ᆼ' == 'ㅇ' + {12616,4541}, -- ᆽ' == 'ㅈ' + {12618,4542}, -- ᆾ' == 'ㅊ' + {12619,4543}, -- ᆿ' == 'ㅋ' + {12620,4544}, -- ᇀ' == 'ㅌ' + {12621,4545}, -- ᇁ' == 'ㅍ' + {12622,4546}, -- ᇂ' == 'ㅎ' + {12646,4550}, -- ᇆ' == 'ㅦ' + {12647,4551}, -- ᇇ' == 'ㅧ' + {12648,4552}, -- ᇈ' == 'ㅨ' + {12649,4556}, -- ᇌ' == 'ㅩ' + {12650,4558}, -- ᇎ' == 'ㅪ' + {12651,4563}, -- ᇓ' == 'ㅫ' + {12652,4567}, -- ᇗ' == 'ㅬ' + {12653,4569}, -- ᇙ' == 'ㅭ' + {12654,4572}, -- ᇜ' == 'ㅮ' + {12655,4573}, -- ᇝ' == 'ㅯ' + {12656,4575}, -- ᇟ' == 'ㅰ' + {12664,4582}, -- ᇦ' == 'ㅸ' + {12666,4583}, -- ᇧ' == 'ㅺ' + {12668,4584}, -- ᇨ' == 'ㅼ' + {12669,4586}, -- ᇪ' == 'ㅽ' + {12671,4587}, -- ᇫ' == 'ㅿ' + {12672,4590}, -- ᇮ' == 'ㆀ' + {12615,4592}, -- ᇰ' == 'ㅇ' + {12674,4593}, -- ᇱ' == 'ㆂ' + {12675,4594}, -- ᇲ' == 'ㆃ' + {12676,4596}, -- ᇴ' == 'ㆄ' + {12678,4601}, -- ᇹ' == 'ㆆ' +} + +-- Convert Hangul Jamo to Hangul Compatibility Jamo code +-- - https://en.wikipedia.org/wiki/Hangul_Compatibility_Jamo +-- - https://en.wikipedia.org/wiki/Hangul_Jamo_(Unicode_block) +-- - There is no calculation for this, so we need to convert this code manually +local function jamoToCompJamo(code) + for _, e in ipairs(compConvertTable) do + if code == e[2] then + return e[1] + end + end + return 0 +end + +---Converts 0x1101 like unicode to string +---@param unicode_list UnicodeChar[] +---@return string convertedUnicodeChar +local function conv2utf8(unicode_list) + local result = '' + local w,x,y,z = 0,0,0,0 + local function modulo(a, b) + return a - math.floor(a/b) * b + end + for i,v in ipairs(unicode_list) do + if v ~= 0 and v ~= nil then + if utf8 then + -- Tested in REPENTOGON + result = result .. utf8.char(v) + else + -- Assume Lua 5.3 not supporting utf8 + if v <= 0x7F then -- same as ASCII + result = result .. string.char(v) + elseif v >= 0x80 and v <= 0x7FF then -- 2 bytes + y = math.floor(modulo(v, 0x000800) / 64) + z = modulo(v, 0x000040) + result = result .. string.char(0xC0 + y, 0x80 + z) + elseif (v >= 0x800 and v <= 0xD7FF) or (v >= 0xE000 and v <= 0xFFFF) then -- 3 bytes + x = math.floor(modulo(v, 0x010000) / 4096) + y = math.floor(modulo(v, 0x001000) / 64) + z = modulo(v, 0x000040) + result = result .. string.char(0xE0 + x, 0x80 + y, 0x80 + z) + elseif (v >= 0x10000 and v <= 0x10FFFF) then -- 4 bytes + w = math.floor(modulo(v, 0x200000) / 262144) + x = math.floor(modulo(v, 0x040000) / 4096) + y = math.floor(modulo(v, 0x001000) / 64) + z = modulo(v, 0x000040) + result = result .. string.char(0xF0 + w, 0x80 + x, 0x80 + y, 0x80 + z) + end + end + end + end + return result +end + +---converts single Korean word within string and index +---@param text string +---@param idx index +---@return string convertedKoreanWord +---@return integer newIndex +local function getFinalString(text, idx) + + local idxAppend = 0 + local res = "" + + -- ­한글의 초,중,종성의 인덱스 + -- Initial, Medial, Final index + local initialCode = 0; + local medialCode = 0; + local finalCode = 0; + + -- 초성 검색 (Initial char check) + local first = text:sub( idx, idx ) + local firstP1 = text:sub( idx, idx+1 ) + initialCode = getCode( 'initial', first ); + local tempMedialCodeP1 = getCode( 'medial', firstP1 ); + local tempMedialCodeP2 = getCode( 'medial', first ); + if tempMedialCodeP1 ~= -1 then + -- Medial came first + -- Medial char starts with 0x1161, 0x3131 + local code = jamoToCompJamo(0x1161 + (tempMedialCodeP1 // (1 * 28))) + local ch = conv2utf8({code}) + return ch, idx + 2 + elseif tempMedialCodeP2 ~= -1 then + -- Medial came first + -- Medial char starts with 0x1161, 0x3131 + local code = jamoToCompJamo(0x1161 + (tempMedialCodeP2 // (1 * 28))) + local ch = conv2utf8({code}) + return ch, idx + 1 + elseif initialCode < 0 then + -- This isn't Korean character, returning orignal char + return first, idx + 1 + end + + res = res .. first + idxAppend = 1 + + -- 중성 검색 (Medial char check) + local secondP1 = text:sub( idx+1, idx+2 ) + local secondP2 = text:sub( idx+1, idx+1 ) + local medialCodeP1 = getCode( 'medial', secondP1 ); -- 2 chars of medial position + local medialCodeP2 = getCode( 'medial', secondP2 ); -- 1 char of medial position + local medialCodeP3 = getCode( 'initial', secondP2 ); -- 1 char of medial position, but check for initial char + + if medialCodeP1 ~= -1 then + -- 2 word medials + res = res .. secondP1 + medialCode = medialCodeP1 + idxAppend = idxAppend + 2 + elseif medialCodeP2 ~= -1 then + -- 1 word medial + res = res .. secondP2 + medialCode = medialCodeP2 + idxAppend = idxAppend + 1 + else + -- no medials, returning initial char + -- initial char starts with 0x1100 + local code = jamoToCompJamo(0x1100 + (initialCode // (1 * 21 * 28))) + local ch = conv2utf8({code}) + return ch, idx + 1 + end + + -- 종성 검색 (Final char check) + local finalP1 = text:sub( idx+idxAppend, idx+idxAppend+1 ) + local finalP2 = text:sub( idx+idxAppend, idx+idxAppend ) + local finalP3 = text:sub( idx+idxAppend+1, idx+idxAppend+1 ) + local finalCodeP1 = getCode( 'final', finalP1 ); -- 2 chars of final position + local finalCodeP2 = getCode( 'final', finalP2 ); -- 1 char of final position + local finalCodeP3 = getCode( 'medial', finalP3 ); -- 1 char of final position, but check for medial char + + if finalCodeP1 ~= -1 then + -- 2 word finals + local nextIndex = idx + idxAppend + 2 + -- check initial position for next word + local tempExtraMedialCode = getCode( 'medial', text:sub( nextIndex, nextIndex ) ); + if tempExtraMedialCode ~= -1 or finalP1 == finalP2 then + -- medial was found in initial position. 1 word final is considered + finalCode = finalCodeP2 + idxAppend = idxAppend + 1 + else + -- 2 word finals truly + finalCode = finalCodeP1 + idxAppend = idxAppend + 2 + end + else + -- 0~1 word finals + if finalCodeP3 ~= -1 then + -- medial was found in final position. no word final is considered + finalCode = 0; + elseif finalCodeP2 ~= -1 then + -- 1 word final truly + finalCode = finalCodeP2 + idxAppend = idxAppend + 1 + else + -- no final was found + finalCode = 0; + end + end + + -- final return + local code = 0xAC00 + initialCode + medialCode + finalCode + local ch = conv2utf8({code}) + return ch, idx + idxAppend +end + +---Converts English typed string as Korean keyboard ('abc' returns 'ㅁㄴㅇ') +---@param msg string +---@return string +local function engToKor(msg) + if msg == nil then + return "nil" + end + + local text = msg; + + -- ­한글의 초,중,종성의 인덱스 + local initialCode = 0; + local medialCode = 0; + local finalCode = 0; + + -- 루프와 결과 저장을 위한 변수 + local textLength = #text + local ret = ""; + local idx = 1 + + while idx <= textLength do + local ch, index = getFinalString(msg, idx) + ret = ret .. ch + idx = index + end + return ret +end + +---@param tt "initial"|"medial"|"final"|"partialOnly" +---@param char char +---@return integer UnicodeChar +function getCode( tt, char ) + -- 초성 리스트 (initial list) + local initial = { 'r','R','s','e','E','f','a','q','Q','t','T','d','w','W','c','z','x','v','g'}; + -- 중성 리스트 (medial list) + local medial = { 'k', 'o', 'i', 'O', 'j', 'p', 'u', 'P', 'h', 'hk', 'ho', 'hl', 'y', 'n', 'nj', 'np', 'nl', 'b', 'm', 'ml', 'l' }; + -- 종성 리스트 (final list) + local final = { 'r', 'R', 'rt', 's', 'sw', 'sg', 'e', 'f', 'fr', 'fa', 'fq', 'ft', 'fx', 'fv', 'fg', 'a', 'q', 'qt', 't', 'T', 'd', 'w', 'c', 'z', 'x', 'v', 'g' }; + local returnCode = 0; -- 최종 인덱스 (return index) + local isFind = false; -- 발견 여부 (code found check) + + -- 각 리스트에서 인덱스를 검색하기 위한 로컬 함수 + local find = function(tb, ch) + for i = 1, #tb do + if tb[i] == ch then + returnCode = i-1; + isFind = true; + break; + end + end + end + + if char ~= nil then + if tt == 'initial' then + find( initial, char ) + returnCode = returnCode * 21 * 28 + elseif tt == 'medial' then + find( medial, char ) + returnCode = returnCode * 28 + elseif tt == 'final' then + find( final, char ) + returnCode = returnCode + 1 + end + end + if isFind == false then returnCode = -1; end + return returnCode; +end + +EID.engKeystrokeToKor = engToKor \ No newline at end of file