第二部分: 第四层 SLK地图的汉化 魔兽的数据 字符串分布位置及手工汉化流程 确定需要汉化的项目 Units里文件的汉化(***String.txt) 背景图片里文字的处理 我接触到的第一个SLK地图是在 2005年玩到的 NOTD 1.3,后来还接触到了 DOTA 和 NOTD AM. 直到 06年 夏天,我才开始汉化这类地图, 并在 06年10月开始在中文地图里使用 SLK技术(NOTD 1.4 Beta) 虽然PitzerMike推出 Widgetizer 已经两年多了,但实际上大家使用的还是很少的. 到目前为止,我所看到的优秀的SLK地图不过是DOTA 和 NOTD 当然,也可能是部分优秀地图作者考虑到各国语言版本的汉化方便,多只用vexorian 的Wc3MapOptimizer 优化地图. 下面简单说一些深入点的知识以了解其结构,便于理解汉化过程. 魔兽的数据: MPQ:早在星际争霸,暗黑破坏神等游戏里,暴雪公司就开始把游戏要用到的素材打包,放到一个后缀为.mpq的压缩包里. 如: 星际争霸的StarDat.mpq 而魔兽的相关数据储存在war3.mpq, War3x.mpq, War3xlocal.mpq, War3Patch.mpq的相关目录里. 并以下面格式储存: ***Func.txt(图标信息) ***.slk(单位,物品,技能参数等) ***.mp3(背景音乐,战役对话等)等等 而文字介绍信息的原始储存格式文件是 ***String.txt 前面讲过魔兽地图也是这种格式的压缩包,但地图里的war3map.w3?系列文件是WE生成地图的数据储存方式. 所以, 当我们开始读取魔兽地图时,魔兽会把war3map.w3?系列文件 里面的数据进行分解,以匹配魔兽原始的数据格式 然后在读取数据时,当遇到MPQ里和地图的相同项目时,则优先采用地图里的该项目数据. 直至完成地图数据的读取. 字符串分布位置及手工汉化流程: 我们通过对魔兽读图过程了解,知道Widgetizer 的功能是把 war3map.w3?系列文件进一步分解成 ***String.txt, ***Func.txt, ***.slk 以匹配魔兽原始的数据格式,减少了地图在加载数据时的分解步骤,即减少了读图时间. 我们期待优化后的最好的结果是war3map.w3?系列文件全部被分解,这样就不用处理war3map.w3?系列文件了. 但实际情况是, Widgetizer目前不支持高于4级的技能分解及某些不规范代码, 所以会有部分项目的字符串(包括其参数)残留在war3map.w3?系列文件里. 这样,字符串就分布在地图的下列文件里. 字符串分布位置(一般为32个文件): war3map.wts 字符串,所有外文文本的原始存放位置(残留部分) war3map.j jass数据库,剧情文本,有部分文本会保留在war3map.wts 里(加密后通常在/scrtips目录下) war3map.w3u 单位的介绍,名字等(残留部分) war3map.w3t 物品的介绍,描述等(残留部分) war3map.w3a 技能的介绍,每级描述等(残留部分) war3map.w3h 魔法特效的介绍,描述等(残留部分) war3map.w3q 升级的介绍,描述等(残留部分) war3map.w3b 可破坏的介绍,描述等(Widgetizer默认不分解可破坏物) war3map.w3d 装饰物的介绍,描述等(Widgetizer默认不分解装饰物) war3map.w3i 地图信息 基本介绍 war3mapSkin.txt 界面,系统提示信息 以及Units目录里(一般21个,Widgetizer默认不分解装饰物和可破坏物) CampaignAbilityStrings.txt CampaignUnitStrings.txt CampaignUpgradeStrings.txt CommonAbilityStrings.txt HumanAbilityStrings.txt HumanUnitStrings.txt HumanUpgradeStrings.txt ItemAbilityStrings.txt ItemStrings.txt NeutralAbilityStrings.txt NeutralUnitStrings.txt NeutralUpgradeStrings.txt NightElfAbilityStrings.txt NightElfUnitStrings.txt NightElfUpgradeStrings.txt OrcAbilityStrings.txt OrcUnitStrings.txt OrcUpgradeStrings.txt UndeadAbilityStrings.txt UndeadUnitStrings.txt UndeadUpgradeStrings.txt Units目录里的上述文件以魔兽的种族而归类分解: **AbilityStrings.txt 技能信息(魔法效果信息也在这类文件中) **UnitStrings.txt 单位信息 **UpgradeStrings.txt 升级信息 ItemStrings.txt 物品信息 另外: 部分地图如DOTA ,NOTD AM 的地图介绍都直接做到了读图背景图片里,所以还要用PS 处理图片里的字符串 手工汉化流程: (该流程是目前手工处理最优方案,但可能会出现极个别参数丢失现象,产生后果很小可忽略.后面介绍完善解决方案) 1. 用 MPQMaster打开要汉化的地图,解压出 war3map.wts, war3map.j, war3mapSkin.txt, Units目录里***String.txt(一般21个) 2. 用 DataMapGen 选择要汉化的地图,生成一个新地图(数据地图) 3. 用WE 打开新地图(数据地图),导出字符串 ***.wts (***为你自己命名的文件名) 4. 翻译war3map.wts, war3map.j, ***.wts(该文件前部分和war3map.wts 内容会相同,不翻译即可), 5. 根据刚才翻译前面文本的经验, 翻译 ***String.txt (21个,许多魔兽标准项,地图未使用的部分都不用翻译) 6. 把翻译好后的 ***.wts 导入字符串到 WE 里面 7. 然后打开 WE的物体编辑器 导出 单位设置,装饰物设置,可破坏物设置,物品设置,技能设置,魔法效果设置,科技设置(文件名都是war3map) 8. 把翻译好后的war3map.wts, war3map.j, ***String.txt(21个)和刚才导出的war3map.w3?系列文件 添加到地图里,替换掉原来的war3map.wts, war3map.j, ***String.txt(21个), war3map.w3?系列文件 9. 用ShadowEditor打开汉化地图,把里面的相关项目(地图名,地图简介,部队名等)翻译替换掉 10. 用ShadowEditor修改文件头的地图名 (即建主机时看到的地图名) 11. 用ShadowEditor删除 (attributes) 文件 (该文件用于检查地图是否被修改,不删除会造成魔兽出错,而删除对游戏没有影响) 12. 用ShadowEditor重新压缩地图 (减少地图大小) 13. 修改文件名 (通常在文件名后加上 CN 标识,主要用作玩家在HF下载地图时识别) 14. 完成! 从上面的汉化流程我可以看到,我把那些文件分三类来处理.. 可以直接处理的: war3map.wts, war3map.j, war3mapSkin.txt, war3map.w3i, 需要用PS处理的图片(后面讲) 需要从文件里提取字符串来处理的(残留字符串的文件)(汇总成一个 ***.wts 来处理): war3map.w3u,war3map.w3t,war3map.w3a,war3map.w3h,war3map.w3q, war3map.w3b,war3map.w3d Units目录里的: ***String.txt 系列文件 我在第一部分已经介绍了 可以直接处理的, 需要从文件里提取字符串来处理的 两类文件的汉化方法. 相同的文件汉化看前面介绍. 第一层 字符串文件的汉化(war3map.wts 的汉化) 第二层 触发器里文本的汉化(war3map.j 的汉化) 第三层 各设置里文本的汉化(war3map.w3? war3map.skin 的汉化) 下面讲 Units目录里的: ***String.txt 系列文件的处理 确定需要汉化的项目: 第一次看到上面那32个文件是否有头晕的感觉,特别是打开21个 ***String.txt 看看里面,更是晕呼哀哉... 初次手工汉化整理过程相当繁琐,以DOTA 6.3为例, 21个 ***String.txt 有900k, 即90万英文 面对庞大的信息需要处理,必须首先筛选信息,以确定哪些是需要处理的,而哪些项目是不用处理的. 如果已经玩过很多次,对游戏的细节相当熟悉了,筛选信息会有效率许多.可不用下面方法筛选,直接进入下一节. 无论那类地图,在单位,技能,效果,物品,科技几类信息中,技能都是翻译量最大的部分 所以,下面以技能为突破口,通过分析 UnitAbilities.slk 来先确定哪些技能和单位需要翻译 此处以不熟悉游戏的情况下,手工完成信息筛选工作.这里只能提供一些通用方法,具体情况还需要大家自己判断 在 UnitAbilities.slk 里涉及到下面三部分数据(UnitAbilities.slk 在Units目录里) unitAbilID abilList heroAbilList 单位技能ID 技能列表 英雄技能列表 在 EXCEL 里打开 UnitAbilities.slk 并以heroAbilList 为关键字排序. 下面是截取的一段数据. unitAbilID abilList heroAbilList Ubal AInv A00T,A0CA,A0CG,A0CT,Aamk Hmkg AInv A011,A04W,A083,A088,Aamk UC76 AInv A02C,Aamk,A02M,ANsi,A073 Oshd AInv A02Q,A0GK,A04V,A04Y,Aamk H00V AInv A02V,A0G2,A0MP,A012,Aamk H00F A0O4,AInv A03G,A03F,Aamk,A0AR,A0CL H00E AInv A03G,A03F,Aamk,A0AR,A0CL Hlgr AInv A03G,A03F,Aamk,A0AR,A0CL H00G AInv,Afrb A03G,A03F,Aamk,A0AR,A0CL U00A A00R,AInv A03O,A03N,A0K9,A055,Aamk Uanb AInv A03V,Aamk,A04G,A0AS,A08O E004 AInv A04Q,A025,A030,Aamk,AHfa Hgry Asth hgyr Agyb,Agyv,Aflk hkni Aihn hmil Ahar,Amil,Ahrp hmpr Ahea,Ainf,Adis,Aihn heroAbilList 中有4个以上代码的行,多为我们游戏中要控制的英雄或 NPC的BOSS 前面绿色的,为DOTA各酒馆的英雄 unitAbilID 里的项目是游戏中选择英雄看到的介绍. 需要翻译 heroAbilList 里的项目是用英雄游戏时,看见的技能介绍. 需要翻译 abilList 里的项目为被动技能,一般情况下是看不见的. 可不翻译 对于NPC 的BOSS unitAbilID 里的项目是游戏中选择英雄看到的介绍. 需要翻译 heroAbilList 里的项目的技能,一般情况下是看不见的.(用MH除外) 不用翻译, heroAbilList 中没有技能代码的行,多为一般NPC 后面蓝色的,为一般的小怪,野怪(没有检查,推测而已) unitAbilID 里的项目是游戏中看到的NPC,视情况翻译 abilList 里的项目一般为被动技能,一般情况下是看不见的. 不翻译 我们还需要了解代码的几个规则来进一步筛选: 首先 单位,技能,效果,物品,科技几个类别的代码识别是通过的第一个字母来区分的: 单位 H,O,E,U,N 技能 A 如: Obla 物品 I 如: Aamk A04Q 效果 B 如: Bvng 科技 R 如: Rura 其中单位又分为几个种族 H 人族 如: Hblm O 兽族 如: Obla E 暗夜 如: Edmm U 不死 如: Ubal N 中立 如: Npbm 其次 代码 根据数据修改的情况分为: 原始标准项目(包括修改过的标准项目): 部分可不翻译(对于标准项目,我是用工具直接读取魔兽中文版的数据进行替换的) Hlgr Uanb hkni Edmm Aamk Bvng Rura 自定义项目: 基本都要翻译(个别弃用代码不用翻译) U00A n00Y A04Q A03G H008 B00Z R004 单位 根据英雄属性还分为: 英雄单位: 第一个字母是大写: 最少也要翻译英雄名字 Hlgr U00A Uanb 一般单位: 第一个字母是小写: 根据情况可不用翻译 hmil u001 n00Y 另外 效果还有个规则: 与其对应技能的代码后3个字母是相同的.怎么用看自己了 如: 复仇之魂 技能:[AEsv] 效果:[BEsv] 最后 在一般情况下,效果,科技的数量都不多,且区别哪些在游戏中不会看到较烦琐, 我的观点是都翻译,且用工具替换后翻译多余的项目会很少. Units里文件的汉化(***String.txt): 通过上面讲的,我们大致知道了哪些信息是需要处理的. 这里谈的是Units目录里的 ***String.txt 文件中那些需要处理的项目中涉及的子项目的处理规则 下面是 ***String.txt 系列文件中我们汉化需要涉及的项目(不是都要处理) 单位: ***UnitStrings.txt Name,Tip,Ubertip,Hotkey,Propernames,Revivetip,Awakentip,Casterupgradename,Casterupgradetip,EditorSuffix 技能: ***AbilityStrings.txt Name,Tip,Ubertip,Hotkey,Researchtip,Researchubertip,Researchhotkey, Untip,Unubertip,Unhotkey,Bufftip,Buffubertip,EditorSuffix 科技: ***UpgradeStrings.txt Name,Tip,Ubertip,Hotkey,EditorSuffix 物品: ItemStrings.txt Name,Tip,Ubertip,Hotkey,Description,EditorSuffix 常常需要翻译的子项目 Name --->项目名 Tip --->项目提示 Ubertip --->项目详细说明 Researchtip --->技能研究提示 Researchubertip --->技能研究详细说明 Bufftip --->魔法效果提示 Buffubertip --->魔法效果详细说明 Description --->物品描述 Propernames --->单位的称谓 下面几项常常被误翻: Hotkey=F --->热键,不用翻译 Researchhotkey=F --->学习热键,不用翻译 EditorSuffix= (Upgrade Level 1) --->编辑器扩展(用于在WE里提示用,不用翻译) 翻译的格式处理: 第一层的汉化提到的规则和汉化细节里的翻译的格式处理提到的热键,特殊标识符部分不再重复,该部分主要针对SLK地图. 需要注意(有许多的文本显示问题都因为没按下面要求引起.): 逗号: 多用于多级技能的介绍,作为不同级别技能的文本分隔标识, 必须是半角逗号(英文的逗号) 双引号: 多用于多级技能的介绍,用于标识双引号之间的部分为一个引用段,特别是这个引用段内包含逗号时,(所以我全都打上) 留意双引号是否成对.双引号必须是半角引号(英文的双引号)
手工解决办法是,在文本编辑器里用半角双引号,逗号全部替换掉全角双引号, 逗号
下面是例子: Name --->项目名 Name=Breath of Fire Name=火焰呼吸 Tip --->项目提示 Tip=Breath of |cffffcc00F|rire - [|cffffcc00Level 1|r],Breath of |cffffcc00F|rire - [|cffffcc00Level 2|r],Breath of |cffffcc00F|rire - [|cffffcc00Level 3|r] Tip=火焰呼吸(|cffffcc00F|r) - [|cffffcc00等级 1|r],火焰呼吸(|cffffcc00F|r) - [|cffffcc00等级 2|r],火焰呼吸(|cffffcc00F|r) - [|cffffcc00等级 3|r] Ubertip --->项目详细说明 Ubertip="Breathes a cone of fire at enemy units, dealing <ANbf,DataA1> initial damage. Units that have Drunken Haze on them will ignite and burn for <ANbf,DataE1> damage per second over <ANbf,Dur1> seconds.","Breathes a cone of fire at enemy units, dealing <ANbf,DataA2> initial damage. Units that have Drunken Haze on them will ignite and burn for <ANbf,DataE2> damage per second over <ANbf,Dur2> seconds.","Breathes a cone of fire at enemy units, dealing <ANbf,DataA3> initial damage. Units that have Drunken Haze on them will ignite and burn for <ANbf,DataE3> damage per second over <ANbf,Dur3> seconds." Ubertip="对敌人呼出带有攻击力的火焰。最初造成<ANbf,DataA1>点的伤害。并在<ANbf,Dur1>秒内持续受到每秒 <ANbf,DataE1>点的伤害。","对敌人呼出带有攻击力的火焰。最初造成<ANbf,DataA2>点的伤害。并在<ANbf,Dur2>秒内持续受到每秒<ANbf,DataE2>点的伤害。","对敌人呼出带有攻击力的火焰。最初造成<ANbf,DataA3>点的伤害。并在<ANbf,Dur3>秒内持续受到每秒<ANbf,DataE3>点的伤害。" Researchtip --->技能研究提示 Researchtip="Learn Breath of |cffffcc00F|rire - [|cffffcc00Level %d|r]" Researchtip="学习火焰呼吸(|cffffcc00F|r) - [|cffffcc00等级 %d|r]" Researchubertip --->学习技能详细说明 Researchubertip="Breathes a cone of fire at enemy units which deals damage. Units that have Drunken Haze on them will ignite and take burn damage over time. |nLasts <ANbf,Dur1> seconds. |n|n|cffffcc00Level 1|r - <ANbf,DataA1> initial damage, <ANbf,DataE1> damage per second. |n|cffffcc00Level 2|r - <ANbf,DataA2> initial damage, <ANbf,DataE2> damage per second. |n|cffffcc00Level 3|r - <ANbf,DataA3> initial damage, <ANbf,DataE3> damage per second." Researchubertip="对敌人吐出一道火焰,在一开始对其就造成伤害之后,如果对方身上有醉酒云雾的话那还能在一定时间内持续地对其造成伤害。|n持续<ANbf,Dur1>秒。 |n|n|cffffcc00等级 1|r -最初造成<ANbf,DataA1>点的伤害,随后造成每秒<ANbf,DataE1>点的伤害。|n|cffffcc00等级 2|r -最初造成<ANbf,DataA2>点的伤害,随后造成每秒<ANbf,DataE2>点的伤害。|n|cffffcc00等级 3|r -最初造成<ANbf,DataA3>点的伤害,随后造成每秒<ANbf,DataE3>点的伤害。" Bufftip --->魔法效果提示 Bufftip=Incinerate Bufftip=燃灰 Buffubertip --->魔法效果详细说明 Buffubertip="This target is partially aflame, and will incinerate if it dies, causing damage to nearby units." Buffubertip="这个单位处于了烈焰之中,在死去之后会对周围的单位造成一定的伤害。" Description --->物品描述 Description="Allows reincarnation upon death." Description="能让携带者重生。" Propernames --->单位的称谓 Propernames=Mojo Dark-Ale,Sinjo Honeybrew,Kesha Wildbarley,Tatsa Sweetbarrow,Mushi Ale-Hearth,Jinto Reedwine Propernames=魔杰-黑啤酒,辛杰-蜜酒,克沙-野麦,塔特萨-甜猪,姆斯-酒炉,金托-芦苇酒 Untip<>Unubertip --->自动施放技能 Untip="|cffc3dbffRight-click to activate auto-casting.|r" Untip="|cffc3dbff点击右键以激活自动施放功能。|r" Unubertip="|cffc3dbffRight-click to deactivate auto-casting.|r" Unubertip="|cffc3dbff点击右键以取消自动施放功能。|r" 我们翻译完了Units目录里的***String.txt 系列文件, war3map.wts, war3map.j, war3mapskin.txt并检查后,加上导出的各war3map.w3?文件, 参看汉化必须了解的几个细节,搞定细节问题,然后就可以添加的地图里,启动魔兽先看看效果.记下有问题的部分 完成修改后,就可以按照汉化流程完成全部工作. 补充:有些优秀地图还会涉及下面的背景图片里文字的处理. 背景图片里文字的处理: 许多优秀地图的背景介绍放在读图背景图片里,我们需要把图片提取出来处理. 提取出来的图片,其格式一般为 *.BLP或 *.TGA 两种 对于 *.BLP ,还需要用工具将其转换为PS可编辑格式 背景图片的处理步骤: 1. 用 MPQMaster打开要汉化的地图,解压出背景图片 ***.blp(***.tga),[如果背景图片为***.tga,2.4.两步可忽略] 2. 用 Warcraft 3 Viewer v2.3c 或其他工具 把***.blp 转换为PS可编辑的格式(我通常用BMP) 3. 用 S 修改(参看PS教程) ,完成后保存为 ***.bmp(或.tga) 4. 用 Warcraft 3 Viewer v2.3c 或其他工具 把***. Bmp 转换为***.blp 5. 把 做好的背景图片添加到地图里,替换掉原来的背景图片 6. 完成! 魔兽只支持最大512*512尺寸的背景图片, 有些是背景图片是一张图片拉伸而成,显示效果不好 高质量的背景图片一般是由 4张图片拼接而成,如OTA, NOTD AM 如果找不到图片,可以查看,地图根目录里的 LoadingScreen.mdx 魔兽一般通过读取 LoadingScreen.mdx 文件来获取背景图片的位置 附OTA 6.43B 背景图片位置 \loadingscreenbl.tga \loadingscreenbr.tga \loadingscreentl.tga \loadingscreentr.tga NOTD AM背景图片位置 \UI\Glues\Loading\Backgrounds\Campaigns\BarrensExpansionQuest01-TopLeft.blp \UI\Glues\Loading\Backgrounds\Campaigns\BarrensExpansionQuest01-TopRight.blp \UI\Glues\Loading\Backgrounds\Campaigns\BarrensExpansionQuest01-BotLeft.blp \UI\Glues\Loading\Backgrounds\Campaigns\BarrensExpansionQuest01-BotRight.blp 位置说明: 左上: Tl, TopLeft 右上: Tr, TopRight 左下: Bl, BotLeft 右下: Br, BotRight 到现在,已经介绍完手工汉化所有的情况了. 下面是一年多汉化魔兽地图的心得及经验不完全汇总 和有过地图汉化经历的朋友交流,分享汉化者的汉化之路 如果你从未有过汉化经历,请先熟悉前面的一二部分! 如果能坚持看到这里,说明你还是有较强的愿望了解汉化的知识的 手头上事情较多,以后会补充 2007-8-14 13:36:50 星期二 优秀地图汉化之我的方案 我的汉化探索历程(汉化者大都遇到过类似经历) 我为什么要汉化这个地图(是否值得汉化) 资料库的整理 我的汉化工具的应用 升级版本的汉化 繁体版本的汉化 团队协作汉化 优秀地图的汉化授权 SLK 技术之我的中文地图应用探索
|