轩辕春秋文化论坛 » 设计与修改 » 三国志系列码表与字库分析


2004-11-26 23:50 van
三国志从3代开始自带字库,而且不断的增加字的数量,也修改过很少一部分的字形,其实它的码序与big5是基本一致的.到5代,big5字基本全了.虽然这些都是dos时代的技术,但是从9代来看,自己带字库对提升显示效果还是很有帮助的,特别是要支持多内码的时候.像magicwin的字库就远不如9代的好,而且9代还对字用了反走样(其实就是使用了16色且包含透明色的调色板),效果看上去很不错
下面简单介绍一下三3~5的字符编码
我想big5码大家都应该比较熟悉了,两字节编码.第一个字节范围是a1~fe,第二个字节范围是40~7f,a1~fe.不过三国志里没有直接使用big5编码,但是它的编码顺序是基本相同的.它的第一个字节从92开始,到b0有间断,第二个字节分成很多段,分别是48~56,65~90,97~121,128~254,一共使用了188个码位
下面的对应是从第一个汉字开始的
转换代码如下
For j = 0 To 7 Step 2
If t(j) = 0 Or t(j) = 32 Then Exit For
tt = t(j + 1)
If t(j) < 176 Then
p = 1 - 188 + (188 * (t(j) - &H92)) * 2
Else
p = 11619 + (188 * (t(j) - 176)) * 2
End If
If tt > 47 Then tt = tt - 48
If t(j + 1) > 64 Then tt = tt - 7
If t(j + 1) > 96 Then tt = tt - 6
If t(j + 1) > 127 Then tt = tt - 5
p = p + tt + tt
Get #2, p, t(j)
Get #2, p + 1, t(j + 1)
Next j
其中#2是码表文件.这里有一个我处理过的码表,改变了某些编码的次序.不过限于时间,只保证人名的对应关系是正确

顺带说一下三国的字库.
它是14*16而不是一般的16*16.格式就是magicwin的那种啦,一位一个像素.
字库文件的名称是ziku.16p.
三九的是f_font.s9,开头就是big5码列表。
至于三十和三九差不多,只不过像素是倒序存放的

2004-11-28 11:40 gameplore
请教van:

三九和三十中历史武将的姓名编码是放在哪个文件中的呢?按照什么格式编码?

2004-11-28 14:10 van
主程序里,现在当然是用Big5编码了

2004-11-28 18:58 gameplore
[quote]原帖由[i]van[/i]于2004-11-28, 14:10:29发表
主程序里,现在当然是用Big5编码了 [/quote]
主程序中的姓名似乎并不是直接的big5码,或许是某种索引到f_font.s9码表的编码?

一个简单的例子:张飞的“张”字big5码是[b]B1 69[/b],ultraedit打开san9.exe(普通版脱掉了safedisc的),查找[b]B1 69[/b],共找到2处。如果姓名是直接big5编码,那么其中之一应该是姓“张”字的编码了,将他们替换,但运行san9.exe进游戏后姓名并没有变。由此可以肯定的是,找到的两处[b]B1 69[/b]都不是姓名的big5码。倒是如果替换f_font.s9中前面的码表中的[b]B1 69[/b],那么进游戏后所有的“张”字都变了。

2004-11-28 20:59 van
big5码是肯定的,至于三9里武将姓名是如何存放的,我没什么印象了

2004-12-1 20:27 gameplore
van兄能不能研究一下怎么修改三九中历史武将的姓名?

我试了好多方法都不知道怎么改:

1)查找存档文件,里面肯定没有;

2)剧本文件,好像也没有,据本里面只有武将能力数值;

3)改内存,也不行。方法是用金山游侠搜索。比如,要搜索张飞的big5码,就找[b]B1 69 AD B8[/b],可以找到好几处,全部替换;再回到游戏,发现张飞的名字的确是变了,但是只要一存档再取档,立刻又变回张飞了(由此也可以可肯定存档里面没有保存名字)。

4)根据van兄前面的介绍,应该是在san9pk.exe中找,但是却找不到,不知道怎么存放的。

2004-12-1 21:54 Maxwell
好像pk版加密了吧。

2004-12-1 23:28 van
是我记错了,在m_msg.s9里面的,你解压之后就可以看到人物名字了

2004-12-1 23:30 van
你可以参考友盟的帖子
[url=http://www.e3ol.com/bbs/dispbbs.asp?Boardid=62&ID=15972]http://www.e3ol.com/bbs/dispbbs.asp?Boardi...did=62&ID=15972[/url]
不过里面的附件已经失效了

2004-12-1 23:54 van
对了,其实San9普通版也不过是用safedisc2 cleaner自动脱壳的。你也可以用它对pk版试试看

2004-12-2 00:20 三国在飞
[quote]原帖由[i]van[/i]于2004-12-01, 23:54:49发表
对了,其实San9普通版也不过是用safedisc2 cleaner自动脱壳的。你也可以用它对pk版试试看 [/quote]
东方给过我转换后的文件,可不能用啊。
这两个文件,一个是列传之类的,一个是游戏里面的所有文字,包括剧本说明在内。不过我把东方给我的弄丢啦。
M_MsgPK.s9
M_RtdnPK.s9

2004-12-2 11:23 gameplore
[quote]原帖由[i]van[/i]于2004-12-01, 23:54:49发表
对了,其实San9普通版也不过是用safedisc2 cleaner自动脱壳的。你也可以用它对pk版试试看 [/quote]
试过safedisc 2 cleaner,它只能脱掉safeddisc 2.60以前的壳;但是PK1.01使用safedisc 2.90加的,san X使用3.10加的,safedisc 2 cleaner都不能脱壳。

我的水平很菜的  ,不会手动脱

2004-12-2 11:37 gameplore
用applocale开ue32看了一下m_msg.s9,还是乱码太多,可能ue32没能区分开控制字符和big5码

2004-12-2 11:53 东方无翼
三九的msg也是LS11压缩的,我对他解压的算法跟sanx一样。但是sanx的就好用,san9的解压后可以看到内容,却不能正确载入。  不知为何。难道非要压缩回去他才肯认?

脱壳的时候同gameplore

附我解压的列传文件,van看看是怎么回事儿?

2004-12-2 12:20 gameplore
[quote]原帖由[i]东方无翼[/i]于2004-12-02, 11:53:22发表
三九的msg也是LS11压缩的,我对他解压的算法跟sanx一样。但是sanx的就好用,san9的解压后可以看到内容,却不能正确载入。  不知为何。难道非要压缩回去他才肯认?

脱壳的时候同gameplore

附我解压的列传文件,van看看是怎么回事儿? [/quote]
谢谢东方兄的解压文件,看到正确的文本了。

刚才看M_msg.s9时发现开头是LS11,不知道其含义,以为仅仅是个文件标记。听东方兄这么一说,才知道是压缩算法。怪不得applocale直接看m_msg.s9不行

2004-12-2 12:30 gameplore
请教一下东方兄:那个LS压缩算法是标准的算法还是KOEI自创的?好像找不到这个算法,只有一个LZ压缩算法

2004-12-2 12:32 Maxwell
[quote]原帖由[i]gameplore[/i]于2004-12-02, 12:30:02发表
请教一下东方兄:那个LS压缩算法是标准的算法还是KOEI自创的?好像找不到这个算法,只有一个LZ压缩算法 [/quote]
这个不是标准的lz系列算法,不过有lz的一部分思想,目前还没有看到某种已经命名的算法与这个完全相同。

2004-12-2 13:08 van
解压以后的三9Msg文件,可以直接替换原来的文件

2004-12-2 13:31 gameplore
[quote]原帖由[i]van[/i]于2004-12-02, 13:08:07发表
解压以后的三9Msg文件,可以直接替换原来的文件 [/quote]
找到人名了,就在解压缩后的m_msg.s9的FDAA开始。

谢谢van  ,谢谢各位高手

2004-12-2 13:33 gameplore
[quote]原帖由[i]Maxwell[/i]于2004-12-02, 12:32:28发表
这个不是标准的lz系列算法,不过有lz的一部分思想,目前还没有看到某种已经命名的算法与这个完全相同。 [/quote]
是这个么:

[url=http://www.gameres.com/Articles/Program/Other/LZSS.htm]http://www.gameres.com/Articles/Program/Other/LZSS.htm[/url]

2004-12-2 13:36 van
具体的压缩算法可以参考
[url=http://www.xycq.net/forum/index.php?showtopic=34612]http://www.xycq.net/forum/index.php?showtopic=34612[/url]

2004-12-2 13:43 Maxwell
[quote]原帖由[i]gameplore[/i]于2004-12-02, 13:33:17发表
是这个么:

[url=http://www.gameres.com/Articles/Program/Other/LZSS.htm]http://www.gameres.com/Articles/Program/Other/LZSS.htm[/url] [/quote]
不完全是,你可以参照van的文章,过会儿我也会写一篇文章。

2004-12-2 13:47 gameplore
[quote]原帖由[i]van[/i]于2004-12-02, 13:36:55发表
具体的压缩算法可以参考
[url=http://www.xycq.net/forum/index.php?showtopic=34612]http://www.xycq.net/forum/index.php?showtopic=34612[/url] [/quote]
van研究的真深啊,pfpf

2004-12-2 13:50 gameplore
[quote]原帖由[i]Maxwell[/i]于2004-12-02, 13:43:56发表
[quote]原帖由[i]gameplore[/i]于2004-12-02, 13:33:17发表
是这个么:

[url=http://www.gameres.com/Articles/Program/Other/LZSS.htm]http://www.gameres.com/Articles/Program/Other/LZSS.htm[/url] [/quote]
不完全是,你可以参照van的文章,过会儿我也会写一篇文章。 [/quote]
期待ing

2007-8-26 16:27 小平头
看来想要做游戏还是太难了,我根本就学不会
太难了,要是有图文说明就好啦

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.