设为首页收藏本站官方微博

汉化资料 营火传说:铁钩人 字库定义文件结构及转换浅析

[复制链接]
查看: 3702|回复: 8
打印 上一主题 下一主题

[汉化资料] 营火传说:铁钩人 字库定义文件结构及转换浅析

跳转到指定楼层
楼主
发表于 2010-5-22 08:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

营火传说:铁钩人 字库定义文件结构及转换浅析

本帖最后由 naptid 于 2011-3-28 02:27 编辑 + }1 ?: C7 F8 D  s
8 R5 m8 Y* K2 x) S# ^
2011/03/28修正:论坛系统升级时,自动将文中某些符号全部替换为html代码,现手动修正。- m) h- q! C4 k0 L& u- ]1 Z9 q) p4 ?

; P% a. D! p0 n. j& R9 j因为自己制作了这款游戏的图片字库,故将字体定义文件的初步分析粘贴在这里,也许可以作为以后同引擎游戏字库汉化的参考;由于本人不懂编程,分析水平及其有限,未明之处很多,还请懂行的高手不吝指点。
9 ?) d2 R( R) W8 {- b4 ]
& {4 z6 L8 D" C7 I! Y3 `' L6 S: `2 @) X首先图片字库和字库定义文件位于游戏目录的fonts子目录(汉化版的相关路径有所更改)% r" `3 ^) M9 h4 F4 w
图片字库:带阴影及外框的字符字库一套五张,分别为xxx.png(核心字库图)、xxx_shadow.png(阴影字库图)、xxx_shadow.jpg(未明,估计为阴影字库图的背景)、xxx_stroke.png(外框字库图)、xxx_stroke.jpg(未明,估计为外框字库图的背景);无阴影及外框的字库只有一张对应的图片文件
! y) x- a5 F9 [6 l4 |  }9 i0 A& ~字库定义文件:同名的xxx.xml5 t  C8 R" p- j! ]$ a

" ?# }- U" R5 F8 K! I字库定义文件结构:
4 c( @& H; p' U6 s) a! o  g9 f* \   <Font id="font" spacewidth="5" charspacing="0" lineheight="0">! h$ @$ ]3 b; B9 H" c1 b; ?# ^% }" u
主要定义字符间距和行高# M3 [- E8 B$ U' N6 R: _- w
      <Layer mask="xxx.png" padding="0" color="#000000" />
7 N% Z) u4 X3 D0 u) ^      <Layer color="#00ff00" image="xxx_stroke.jpg" mask="xxx_stroke.png" padding="10" />/ n; Z1 U! h4 g3 e. K" V" Y
定义字库对应图片及填充色,其中部分未明,若仅定义 image="xxx_stroke.jpg" ,则游戏中将显示字库的原始着色,但透明背景将被识别为黑色;若仅定义mask="xxx_stroke.png" ,透明背景可正常识别,但字库原始着色将被填充色代替变成单色字库,且必须定义填充色,否则程序出错;padding参数定义未明;这里的定义对本人而言太复杂,没法研究清楚,因此实际汉化中仅采用了mask参数,导致字库显示为白色无外框效果,比较可惜。* n, t# c3 i1 f/ G3 ?0 \2 b& l
# m9 `/ \* l, h
接下来为单字符定义,仅列两行为例:- g7 N7 ^1 A5 N9 H
     <Char c="#0041" bx="0" by="0" ix="0" iy="0" sx="0" sy="0" sw="12" sh="20" width="10" />
& ]3 R( b' O( ^# D; n, MChar c:字符utf8码(16进制);"#0041"表示大写字母A;1 f9 e% O" z+ P" q- x  x5 Q) W
bx、by猜测为字符前间距,单位为像素,未经验证;! [# K- w. ]% S( k1 P
ix、iy为字符在字库中的行数与列数,从0开始;
; T* p6 v  ?, U$ t+ L0 ?4 msx、sy为字符起始取值坐标;
. j; y5 s- W( j# k, B' }7 J: b' Tsw为本字符的sx到下一字符的sx之间的距离(字宽),单位为像素;
6 r+ u, L4 N+ K$ k( I8 u1 x7 Ish为本字符的sy到下一字符的sy之间的距离(字高);7 s+ }% h- k7 y+ ]
width猜测应为字符的显示宽度(如字母i的sw很小,实际显示可能较窄,可在width处适当加大宽度)
$ |: z( y* h' M' P3 r! Y以上仅适用于单字节utf8,汉字UTF8码为3字节,直接输入"#E38082"在游戏中显示为黑框……一开始卡在这儿,后来发现将其中一个参数略加修改即可显示汉字,如下:" U" _& _% y" |% o1 [* M4 S
      <Char c='赞' bx="0" by="0" ix="0" iy="2" sx="0" sy="40" sw="21" sh="20" width="20" />
1 K- m4 d  d! l- e将char c=后的双引号改为单引号,直接加UTF8码汉字即可。其他参数请参考上文。汉字字库定义不像英文字符的宽度会产生变化,字高和字宽都是统一的,修改定义文件的相关参数非常容易;值得一提的是本次汉字字库的提取及整理利用了sspking制作的“通用提取非重复字符及排序工具”,非常好用,建议有需要的人拿去试试(相关页面点此但本人忘记把其大名加入汉化人员技术名单了,直到在这里码字的时候才想起来;在此向sspking说声对不起……
( Y# s. T$ i0 G7 `- r* f; B4 ^# ~1 s2 M
& C/ O' ?% e1 I) x% N原来以为到这一步就算大功告成了,没想到游戏实测时发现大问题:顶端任务文字及底部的思考线索文字竟然无法显示完全,缺了很多字,只有三分之一不到的汉字能够正常显示;当时完全蒙了,以为没戏了,后来不甘心做卧槽马死马当活马盲人摸瞎马,竟然给我找到了原因及解决方法——虽然方法比较笨,但终究是解决了……' c; i- U+ ^& Q+ D$ Y9 m# k
1)首先发现只有任务文字和思考文字无法全部显示,单词及短语全部显示正常,查看脚本索引文件dialogs.xml发现,有一项LabelLetters(本人无编程经验,姑且称之为函数)仅在任务及思考相关的定义行中出现,其他地方都没有,猜想多半是受到了这个函数的影响,又想到游戏中的任务文字全部为大写字母,此函数的功能可能是负责转换在某一区间内的utf8码字符,该函数会自动将小写字符转换为大写或其他相应字符,比如小写a(0x0061)转换为大写A(0x0041),而大部分中文字符不幸落入了该函数的作用区间,导致转换后的UTF8码显示为空白!曾尝试用多处出现的label函数直接取代labelletters,游戏报错,于是对我而言这条路堵死了,只能从字库本身着手;但应用转换的具体区间到底是多少尚未得知,于是……
9 P3 z; c4 F: Y" O3 e2)进行了换字测试,将字库中的所有字逐个显示,对能够正常显示的汉字总结后找到了安全区间(即肯定可以正常显示的UTF8码)末四位的规律:8181-899A,81A0-81BA,8581-859A,85A0-85BA,8981-899A,89A0-89BA,8D81-8D9A,8DA0-8DBA……之后只要在第三位依次+4即可
/ E$ q4 T- n8 L. U; t+ s' G4 P3)码表转换:有了思路之后,就准备人工转换码表了,原本打算拜托shane帮忙做一个简单的转换小软件,后来自己琢磨着用按键精灵的宏编程搞定了,转码后字库经实测后全部显示正常,于是搞定。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2010-5-22 10:35 | 只看该作者
将char c=后的双引号改为单引号,直接加UTF8码汉字即可
" T/ @5 _$ j) V" w/ _; q# v
7 _  K) B0 `$ f; ?6 Y' x; \0 o0 D! O这个是一个关键啊,你如何发现的?
回复 支持 反对

使用道具 举报

板凳
发表于 2010-5-22 10:43 | 只看该作者
对了,如果发现有相同引擎的游戏,到时候有问题还请指教。
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2010-5-22 11:01 | 只看该作者

又忘了加标题……

引用第1楼shane007于2010-05-22 10:35发表的  :
# @8 e! Q$ U' i* v将char c=后的双引号改为单引号,直接加UTF8码汉字即可1 d2 M( c3 o2 o6 a

% t; P+ m3 ?" h; {这个是一个关键啊,你如何发现的?

1 e6 H- c/ O7 w. d说的好听点是灵光乍现,说的实在点是瞎猫逮着死耗子了
0 m  c: X; H6 T% g8 |3 A( ]指教不敢当,多一个人就多一份力量倒是真的,有时破解疑难的关键就是点子
回复 支持 反对

使用道具 举报

5#
发表于 2010-5-22 23:57 | 只看该作者
看完了。牛逼啊。。。[s:77]
回复 支持 反对

使用道具 举报

6#
发表于 2010-7-31 22:02 | 只看该作者
我是通关汉化版后回头看汉化研究的,牛啊~8 H5 l/ c5 U1 V6 H/ O
' J' @* Z' I4 f0 C. W2 I
里面有的xml文件有日文想到双引号改为单引号吧。$ V2 [- B! D& }1 M4 ]; y
& ]3 t6 h0 u5 T" [( `# t. f3 a$ K
有个问题,你那个码表引擎和图片都是手工做的吗?还是有工具。。。我很头疼图片字库的x y轴定位
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2010-8-1 15:48 | 只看该作者

回 5楼(byp100) 的帖子

双引号改单引号纯粹是自己试出来的没想什么日文版,只想了几秒钟就想到了这个法子,所以说有时候点子是天赐的……
  ^# s% w/ r7 _( t  y/ H# L3 J另外码表和图片都是手工做的,汉字方便就方便在长宽一样,改的时候XY轴定位倒不麻烦,细心点就好了,真正麻烦的是找那些无法显示的字码区间
回复 支持 反对

使用道具 举报

8#
发表于 2010-11-9 21:07 | 只看该作者
顶上来
回复 支持 反对

使用道具 举报

笨蛋狐狸 该用户已被删除
9#
发表于 2011-3-28 14:37 | 只看该作者
仔细学习了N的帖子,获益匪浅:)特别是双引号改单引号简直是神来之笔,为以后的分析提供了一个全新的方向。[s:67]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表