nds吧 关注:84,667贴子:1,553,693
  • 0回复贴,共1

全民总动员,游戏汉化速成教程<中》

只看楼主收藏回复


2.0 一个例子 

打开你的windows记事本, 往里面写入 "ABCDE你好", 然后保存为abc.txt。
现在的问题是,在这个文本文件里,记录了什么信息?是这几个字在屏幕上的图形吗?

现在,用UltraEdit(或其它你爱用的16进制编辑器)打开abc.txt, 按一下"Ctrl-H",切换到16进制显示,你看到的应该是下面这样子:

0000000000h: 41 42 43 44 45 C4 E3 BA C3 ; ABCDE你好

左边的000000000h是地址,右边的"ABCDE你好"就是这个文件显示在屏幕上的样子;注意!中间的 41 42 43 44 45 C4 E3 BA C3, 这才是真正记录在文件中的信息!

你可能看出来了,这绝不是这些字显示在屏幕上的图形。就算41-45是ABCDE的图形;“你好”两个字这么多笔划,也绝不可能用C4 E3 BA C3这几个字节就能完全记录下来。你是对的,这个文件里记录的只是字母(和汉字)的代码,并没有任何“怎么画这些字”的信息。那么“画字”的信息存在哪呢?打开你的C:\Windows\fonts目录看看,看见“宋体”、“楷体”等字体了吗?就是这里啊! 
这说明了什么?说明PC机把如何显示文字的具体信息存在windows字库里;而我们平常写的文件(不管你是存成Word文件还是txt文件),里面只包含字的编码。 

2.1 计算机是如何显示文字的

还是说刚才的abc.txt。你打开这个文件时,写字板程序先取出第一个字节41,然后,它去查一张对照表,这张表是这个样子的:
......
41 - A
42 - B
43 - C 
44 - D
45 - E
......
从表中找到41对应字母A。现在计算机知道要在屏幕上显示"A"了,它就会从某个字库中(比如说宋体)去找字母A的字模(通俗的说就是如何画出宋体的A),并把字模显示在屏幕上。然后,取abc.txt的下一个字节42,以此类推。
那么,这张对照表就很重要了。它就是ASCII码表!所有PC上的公共标准。所以,你在自己机器上写的文件abc.txt,不会在朋友机器上显示成“KGTYU”,因为你们都用相同的ASCII码表!

2.2 SFC是怎样显示文字的

原理上基本和计算机一样。假设要显示的文本是"04 78 9A",码表是
......
04=孙
78=悟
9A=空
......
SFC先取出第一个字节04,查码表,是“孙”,再从字库里找到“孙”字的字模,显示在屏幕上;下一步取出78,查表是“悟”,显示字库里的相应字模,下一步...(算了,没稿费,不多写了,否则我打算写50个“下一步” :))
最后,“孙悟空”三个字就显示在屏幕上了。

2.3 SFC的码表

很遗憾,并不是所有的机器都使用ASCII码表,Machintosh就不用。而大多数游戏机,包括SFC,也都不用ASCII。不仅如此,各游戏开发小组根据自己的喜好和方便,随意安排每个字的编码,造成的结果就是:每一个Rom的码表都不相同!(标准的重要性在这里体现出来,要是有个统一标准,我们就不用费劲去找码表了,这也是为什么Microsoft总是力图让自己的产品成为标准)。
所以,Rom hacker的首要工作,就是找出码表。只有完成这步工作,才能按图索骥,顺利导出对话脚本、菜单、物品名等。

3. 寻找码表 

3.1 最简单的情况-单字节码表 

尽管每个SNES游戏用的码表都不一样,我们还是有规律可循的。对于英文字母,大家总是习惯按照字母表ABCDEFG....XYZ来排列顺序,SFC程序员也一样,所以假如"A" 的编码是1,那么"B"就是2,"C"就是3,以此类推。

同样,日文假名也是按固定顺序排列的(五十音图),如下图。 


1 あ a 2 い i 3 う u 4 え e 5 お o
6 か ka 7 き ki 8 く ku 9 け ke 10 こ ko
11 さ sa 12 し shi 13 す su 14 せ se 15 そ so
16 た ta 17 ち chi 18 つ tsu 19 て te 20 と to
21 な na 22 に ni 23 ぬ nu 24 ね ne 25 の no
26 は ha 27 ひ hi 28 ふ fu 29 へ he 30 ほ ho
31 ま ma 32 み mi 33 む mu 34 め me 35 も mo
36 や ya 37 ゆ yu 38 よ yo
39 ら ra 40 り ri 41 る ru 42 れ re 43 ろ ro



IP属地:广东1楼2007-10-14 06:35回复