번역 안되는 스크립트 번역법 #2 (esp에서 스트링값이 지정된 경우)(예: Apocalypse)
2015. 7. 7. 21:17 - renn1. 번역 안되는 스크립트 번역법 #1 (변수와 스트링값이 같은 경우. 예: Skyrim Unbound)
2. 번역 안되는 스크립트 번역법 #2 (esp에서 스트링값이 지정된 경우. 예: Apocalypse)
3. 번역 안되는 스크립트 번역법 #3 (String Property 구문에서 바로 스트링값이 지정된 경우. 예: iNeed)
한글번역이 안되는 스크립트는 크게 위의 3가지 경우로 나뉩니다.
그중 1번은 번역할 스크립트(pex) 파일을 열어보면 변수와 스트링값이 같은 일부 줄(보라색 자물쇠 줄)을 제외하고는 번역할 스트링이 있는데(주황색 줄), 2번은 아예 전체 혹은 대부분이 자물쇠 표시만 있고 번역할 스트링이 보이지 않습니다. (예: 아포칼립스 모드) 특히 번역할 스크립트가 MCM인 경우 Interface/Translations 폴더 안에 모드.txt (mcm txt)가 있지도 않아서 번역이 불가능한데, 이런 모드는 esp 자체에서 스크립트의 속성(Property) 값으로 스트링값이 지정되어 있습니다. 이런 경우 esp를 TesVTranslator로 열어봐도 번역할 스트링이 보이지 않고, CK툴에서는 한글번역이 불가능하므로 번역가능하도록 수정작업을 해줘야 합니다.
이때 스크립트 소스(psc)가 있는지 없는지에 따라 작업방식이 2가지로 나뉩니다.
- 참고 : TesVTranslator 모드 번역시 주의점 (http://renn.tistory.com/494)
- 필요 : 수정할 스크립트 소스(.psc), Notepad++ , TesVTranslator , SKSE & SkyUI의 스크립트 소스(.psc) (bsa 추출 필요)(번역법 #1 하단에서 다운로드)
- 예시 모드 : Viewable Faction Ranks, Apocalypse
- 수정할 파일 : ViewableFactionRanksBothDLC.esp, wb_mcmquest_script.psc
[1. PSC 없는 경우]
스크립트 소스(psc)도 없고 MCM.txt도 없는 경우입니다. (예: Viewable Faction Ranks 모드)
이 모드의 MCM 스크립트(pex)를 TesVTranslator로 열어보면 번역할 부분이 거의 보이지 않고, 번역법 #1처럼 변수와 스트링값이 같은 경우도 아닙니다.
이런 모드의 경우 esp를 CK툴로 Active 상태에서 열고 MCM 스크립트 속성(Property)에 지정된 스트링값을 수정하면 번역가능한 MCM.txt를 뽑을 수 있습니다.
Object Window의 Character -> Quest -> 모드 MCM 더블클릭 -> Scripts 탭 선택 ->
MCM 스크립트 선택 후 Properties 버튼 클릭 -> 속성창에서 Type이 String인 항목 확인
위 스샷에서 붉게 표시된 String 항목들이 바로 수정할 부분들입니다. (Array 변수일 경우 Type이 String[]일 수도 있습니다)
이 항목을 각각 클릭해서 위 스샷처럼 스트링값(String Value) 앞에 $를 붙이면 됩니다.
이렇게 $를 붙이면 번역이 가능한 MCM.txt를 뽑을 수 있게 됩니다.
이때 스트링값이 다른 모드와 겹치지 않도록 해당 모드만의 고유한 이름으로 붙이는 것이 좋습니다. txt로 출력하는 스트링값이 다른 모드와 겹칠 경우 간섭이 일어나 게임상에서 의도하지 않은 번역으로 출력될 수 있습니다. 위의 예시에서는 $VFR 을 붙였습니다.
이렇게 String 타입을 모두 수정한 다음에는 esp를 저장한 뒤, Interface/Traslations 폴더 안에 esp이름_English.txt 파일을 새로 만들어 줍니다. (예시 모드의 경우 ViewableFactionRanksBothDLC_English.txt) 이때 MCM.txt 파일의 인코딩은 UTF16 LE with BOM이어야 게임상에서 제대로 출력됩니다.
txt 내용은 esp에서 지정해준 스트링값Tab키로 간격띄움번역문 구조로 만들면 됩니다.
(주의: 번역문이 길어 줄을 나눌 경우 엔터 대신 \n을 입력해야 합니다)
아포칼립스 모드도 이렇게 esp 스트링값에 $를 붙인 뒤 MCM.txt를 뽑는 방식으로 번역할 수 있습니다.
단 아포칼립스처럼 모더가 psc를 제공하는 경우에는 esp를 직접 수정하지 않고 psc를 수정한 뒤 컴파일하는 방식이 더 편리합니다.
[2. PSC 있는 경우]
스크립트 소스(psc)는 있고 MCM.txt가 없는 경우입니다. (예: Apocalypse 모드)
아포칼립스처럼 모더가 psc를 제공하는 경우에는 psc 내용을 수정한 뒤 컴파일하면 번역가능한 pex를 만들 수 있습니다.
Notepad++로 psc를 열면 String Property 변수 Auto로 쓰여진 부분이 있습니다.
만약 String Property 변수 = "스트링값" Auto라면 스크립트 내에서 바로 스트링값이 지정된 경우지만, 아포칼립스처럼 변수 Auto만으로 끝나면 스크립트와 연결된 esp에서 대신 속성값이 지정됩니다. 이것을 스크립트 내부에서 바로 지정하도록 바꿔주면 됩니다. (esp에서 지정한 값보다 스크립트 내부의 값이 우선합니다)
단 String Property 변수 = "스트링값" Auto 방식으로 바꾸면 이것도 한글번역이 제대로 출력되지 않습니다. (예: iNeed) 제대로 출력되게 하려면 String Property 변수 Auto는 그대로 놔둔 채 다른 곳에서 변수의 스트링값을 지정해주어야 합니다.
아포칼립스의 경우 아래 부분을 삽입하면 됩니다.
int function GetVersion()
return 스크립트 버전 ;
endFunction
event OnVersionUpdate(int a_version)
if (a_version >= 스크립트 버전 && CurrentVersion < 스크립트 버전)
refreshPages()
endif
endEvent
event OnConfigInit()
refreshPages()
endEvent
function refreshPages()
변수1 = "스트링값1" ;반드시 큰따옴표로 묶어야 합니다
변수2 = "스트링값2"
변수3 = "스트링값3"
endFunction
function refreshPages()
WB_Alteration_Collapse_Highlight_XP = "The amount of experience granted by the Collapse spell per point of damage dealt."
WB_Alteration_Collapse_Setting_XP = "Collapse"
WB_Alteration_Grindstone_Format_Mult = "Dmg {0}% Stamina Lost"
WB_Alteration_Grindstone_Highlight_Mult = "The amount of damage dealt by Grindstone when the target loses Stamina."
WB_Alteration_Grindstone_Highlight_XP = "The amount of experience granted by the Grindstone spell per point of damage dealt."
WB_Alteration_Grindstone_Setting_Mult = "Grindstone"
WB_Alteration_Grindstone_Setting_XP = "Grindstone"
WB_Alteration_Wither_Setting_Race = "Wither Decrepifies Targets"
WB_Conjuration_AtronachMark_Highlight_XP = "The amount of experience granted by the Atronach Mark spell per point of damage dealt."
WB_Conjuration_AtronachMark_Setting_XP = "Atronach Mark"
WB_Conjuration_ConjureAvengingWraith_Format_Mult = "Stats {0}% Killer"
WB_Conjuration_ConjureAvengingWraith_Highlight_Mult = "The percentage of the killer's stats inherited by the next Avenging Wraith summoned. Should an Avenging Wraith die of natural causes, it defaults to 50 Health, Magicka and Stamina."
WB_Conjuration_ConjureAvengingWraith_Setting_Mult = "Avenging Wraith"
WB_Conjuration_ConjureDremoraAssassin_Format_Health = "Mark {0} Health"
WB_Conjuration_ConjureDremoraAssassin_Highlight_Health = "A Dremora Assassin will curse targets below this amount of Health with Death Mark, temporarily reducing their Health to 1."
WB_Conjuration_ConjureDremoraAssassin_Setting_Health = "Dremora Assassin"
WB_Conjuration_ConjureLich_Format_Cost = "Costs {0} Charge"
WB_Conjuration_ConjureLich_Highlight_Cost = "The amount of weapon charge required to summon a Lich."
WB_Conjuration_ConjureLich_Setting_Cost = "Lich"
WB_Destruction_Shockbloom_Format_Percentage = "Dmg {0}% Health"
WB_Destruction_Shockbloom_Highlight_Percentage = "The percentage of each target's current Health dealt as damage by the Shockbloom spell. The target also loses Magicka equal to half this percentage of its current Magicka."
WB_Destruction_Shockbloom_Highlight_XP = "The amount of experience granted by the Shockbloom spell per point of damage dealt."
WB_Destruction_Shockbloom_Setting_Percentage = "Shockbloom"
WB_Destruction_Shockbloom_Setting_XP = "Shockbloom"
WB_Destruction_ShockScythe_Format_Threshold = "{0} Hit Threshold"
WB_Destruction_ShockScythe_Highlight_Threshold = "The minimum number of targets affected by Shock Scythe to trigger the bonus damage."
WB_Destruction_ShockScythe_Setting_Threshold = "Shock Scythe"
WB_General_Format_XP = "{2}x"
WB_General_Highlight_Repopulate = "This option first cleans up spell vendor inventories and drop lists by removing all Apocalypse tomes, scrolls and staves, then repopulates those lists with the latest Apocalypse items. Use this option when upgrading from an older version of Apocalypse and certain spells are missing.\nThis will not affect other mods that modify leveled lists UNLESS they do so through scripting, in which case it will remove those changes. Please note that spell vendors require 48 hours to restock."
WB_General_Highlight_XP = "Multiplier for the experience granted by spells with variable experience rewards (for instance, instant death spells that grant experience based on the remaining Health of the target). These experience rewards are not affected by mods that change experience gain. This setting also affects the spells below."
WB_General_Setting_Repopulate = "Repopulate Leveled Lists"
WB_General_Setting_XP = "Scripted Experience Gain"
WB_Header_Alteration = "Alteration Balance"
WB_Header_Conjuration = "Conjuration Balance"
WB_Header_Destruction = "Destruction Balance"
WB_Header_Experience = "Experience Gain Modifiers"
WB_Header_Features = "Features"
WB_Header_Illusion = "Illusion Balance"
WB_Header_Restoration = "Restoration Balance"
WB_Header_Troubleshooting = "Troubleshooting"
WB_Illusion_CloakOfMimicry_Format_XP = "{0} Points"
WB_Illusion_CloakOfMimicry_Highlight_XP = "The amount of experience granted by the Cloak of Mimicry spell per spell copied."
WB_Illusion_CloakOfMimicry_Setting_XP = "Cloak of Mimicry"
WB_Illusion_Counterspell_Format_Percentage = "{0}% Magicka Loss"
WB_Illusion_Counterspell_Highlight_Percentage = "The percentage of a target's current Magicka drained when its spell is interrupted by a Counterspell spell."
WB_Illusion_Counterspell_Setting_Percentage = "Counterspell"
WB_Illusion_EmpathicAgony_Highlight_XP = "The amount of experience granted by the Empathic Agony spell per point of damage dealt."
WB_Illusion_EmpathicAgony_Setting_XP = "Empathic Agony"
WB_Illusion_Highlight_AllowNNPC = "Allows spells that control other actors (Daedric Mind, Mind Control, Mirror Entity) to affect targets of any race. Non-humanoid races may randomly become invisible or immobile or fail to attack. But if you want to try it anyway, enable this option."
WB_Illusion_Lobotomize_Format_Mult = "Dmg {0}% Magicka Lost"
WB_Illusion_Lobotomize_Highlight_Mult = "The amount of damage dealt by Lobotomize when the target loses Magicka."
WB_Illusion_Lobotomize_Highlight_XP = "The amount of experience granted by the Lobotomize spell per point of damage dealt."
WB_Illusion_Lobotomize_Setting_Mult = "Lobotomize"
WB_Illusion_Lobotomize_Setting_XP = "Lobotomize"
WB_Illusion_MagickaVoid_Highlight_XP = "The amount of experience granted by the Magicka Void spell per point of damage dealt."
WB_Illusion_MagickaVoid_Setting_XP = "Magicka Void"
WB_Illusion_PaleMoon_Format_Drain = "Struck -{0} Magicka"
WB_Illusion_PaleMoon_Highlight_Drain = "The amount of Magicka drained when a target affected by Pale Moon is struck by an attack. When the target runs out of Magicka, Pale Moon is dispelled."
WB_Illusion_PaleMoon_Setting_Drain = "Pale Moon"
WB_Illusion_Reave_Format_Percentage = "Dmg {0}% Max Health"
WB_Illusion_Reave_Highlight_Percentage = "The percentage of each target's maximum Health dealt as damage by the Reave spell when an affected target dies."
WB_Illusion_Reave_Highlight_XP = "The amount of experience granted by the Reave spell per point of damage dealt to other affected targets when an affected target dies."
WB_Illusion_Reave_Setting_Percentage = "Reave"
WB_Illusion_Reave_Setting_XP = "Reave"
WB_Illusion_ScreamOfPain_Highlight_XP = "The amount of experience granted by the Scream of Pain spell per point of temporary Health loss."
WB_Illusion_ScreamOfPain_Setting_XP = "Scream of Pain"
WB_Illusion_Setting_AllowNNPC = "Mind Control Spells can affect Any Target"
WB_Restoration_Bleedout_Format_Threshold = "{0}% Max Health Lost"
WB_Restoration_Bleedout_Highlight_Threshold = "The amount of Health the target must lose during the course of a Bleedout spell to trigger the instant death effect."
WB_Restoration_Bleedout_Setting_Threshold = "Bleedout"
WB_Restoration_Bloodseeker_Format_Mult = "{0}% Dmg/Heal"
WB_Restoration_Bloodseeker_Highlight_Mult = "The percentage of Health the target has lost or gained while Bloodseeker is in flight that is applied as damage or healing when it hits the target."
WB_Restoration_Bloodseeker_Setting_Mult = "Bloodseeker"
WB_Restoration_Bloodseeker_Highlight_XP = "The amount of experience granted by the Bloodseeker spell per point of damage or healing."
WB_Restoration_Bloodseeker_Setting_XP = "Bloodseeker"
WB_Restoration_CullingRune_Format_Threshold = "{0} LVL DIFF"
WB_Restoration_CullingRune_Highlight_Threshold = "When the target of a Culling Rune spell is this many levels below the caster, the target instantly dies."
WB_Restoration_CullingRune_Setting_Threshold = "Culling Rune"
WB_Restoration_CullingRune_Highlight_XP = "The amount of experience granted by the Culling Rune spell per point of Health of the targets that fall victim to its instant death."
WB_Restoration_CullingRune_Setting_XP = "Culling Rune"
WB_Restoration_FingerOfDeath_Format_Percentage = "Self Dmg {0}%"
WB_Restoration_FingerOfDeath_Highlight_Percentage = "The percentage of a target's Health dealt as damage to the caster of Finger of Death."
WB_Restoration_FingerOfDeath_Setting_Percentage = "Finger of Death"
WB_Vendor_Highlight_EnableKyrgar = "Apocalypse features scripting to dynamically populate the inventories of spell vendors and drop lists. If this script fails for any reason, use this option to spawn a backup vendor at the Lady Stone. Kyrgar the Hidden sells all spells you meet the skill level requirements for. This could be considered cheating and is immersion breaking, so this option is disabled by default."
WB_Vendor_Setting_EnableKyrgar = "Spawn Backup Vendor"
endFunction
psc를 수정한 뒤에는 CK툴로 esp를 열어 MCM 스크립트를 찾아간 뒤 Edit Source로 컴파일하면 됩니다. (컴파일 방법은 번역법 #1 참고)
컴파일된 스크립트.pex를 TesVTranslator로 열어보면 번역가능한 주황색 줄이 생겨나 있습니다. 이 부분을 번역하고 저장하면 게임상에서 제대로 출력됩니다.