标题: 请高人指点(关于《三国志英杰传》人物头像提取问题), 谁能提供解压原理或代码?
性别:未知-离线 封剑尘

Rank: 5Rank: 5
组别 羽林都尉
级别 仁勇校尉
好贴 1
功绩 77
帖子 167
编号 29062
注册 2004-12-29


发表于 2006-9-25 21:45 资料 文集 短消息 只看该作者
请高人指点(关于《三国志英杰传》人物头像提取问题)

本人想把《三国志英杰传》的人物头像提取出来,结果发现困难重重。

《三国志英杰传》的人物头像应该是存储在 FACEDAT.R3 文件中。共有 240 幅,尺寸为 64 X 80 ,颜色只有 8 色,如果是类似 BMP 格式存储,每幅图应该是 1920 字节,总大小至少是 460800 字节。

而 DOS 版英杰传 FACEDAT.R3 文件大小只有 341808 字节,所以应该是压缩过的,但看文件头又不是 LS11 压缩。van 太守解释

QUOTE:
压缩了,TFDED.COM这个程序负责解压缩

。可惜我不会汇编,勉强用 DEBUG 对 TFDED.COM 跟踪了几行,结果更是莫名其妙:( AX  BX  CX  DX  SP  BP  SI  DI  DS  ES  SS  CS  IP 等省略)
DEBUG TFDED.COM
( 0B68:0100 E90506        JMP     0708 )
-t
0B68:0708 FC            CLD
-t
0B68:0709 B062          MOV     AL,62
-t
0B68:070B 2E            CS:
0B68:070C A23B07        MOV     [073B],AL                          CS:073B=62
-t
0B68:070F 2E            CS:
0B68:0710 A24B07        MOV     [074B],AL                          CS:074B=62
-t
0B68:0713 2E            CS:
0B68:0714 A25F07        MOV     [075F],AL                          CS:075F=62
-t
0B68:0717 2E            CS:
0B68:0718 A27107        MOV     [0771],AL                          CS:0771=62
-t
0B68:071B 32C0          XOR     AL,AL  ;不管前面的内容有没有意义,这一下必然是 0 了吧
-t
0B68:071D 3A068000      CMP     AL,[0080]                          DS:0080=00
-t
0B68:0721 7438          JZ      075B
-t
0B68:075B A28107        MOV     [0781],AL                          DS:0781=00
-t
0B68:075E B86235        MOV     AX,3562  ;直接指定了AX,前面那些还有什么用?
-t
0B68:0761 CD21          INT     21
……
有没有哪位高人能帮忙分析一下 TFDED.COM ,找出解压原理,不胜感激。文件不长,只有 1985 字节。

然后我又下载了 WIN 版英杰传(这个版本在我的机器上无法运行,硬盘会响将近一分钟,还是什么都没出来)。 WIN 版英杰传的 FACEDAT.R3 文件是 LS11 压缩的,解压后分为 240 段,可是每段长度不一,最少 1197 字节,最多 2339 字节,而且每段都包含 48 字节的头部信息,这部分信息完全相同:
00000000h: 4E 50 4B 30 31 36 04 00 80 02 90 01 40 00 50 00
00000010h: 00 00 0F 00 F0 00 FF 00 00 0F 0F 0F F0 0F FF 0F
00000020h: 77 07 0A 00 A0 00 AA 00 00 0A 0A 0A A0 0A AA 0A
前六个字节是 NPK016 ,第 13 和 15 字节我怀疑是图像的宽度和高度,其他的就不明白了。难道又是编了码?这编码也够奇怪的,编码后的长度有的是原来的一半多点,有的比原来还大,谁能知道这是什么编码?

(van 太守的 RPGViewer 无法打开 DOS 版的 FACEDAT.R3 , WIN 版的能识别出有 240 幅图片,但无法正常显示,唯一能显示的两幅都是花的,而且高度也不对,显示的是 64 X 64 ,实际是 64 X 80 )

有请各位高人指点迷津,助我解开难题,感激不尽!


顶部
性别:未知-离线 shadewither

Rank: 2Rank: 2
组别 百姓
级别 奋威校尉
功绩 1
帖子 106
编号 78831
注册 2006-8-12


发表于 2006-9-26 00:08 资料 短消息 只看该作者
虽然十年以前就开始用pc了,但是一直不会用debug
既然LZ连DEBUG都会用,还是自己琢磨一下吧
附件是sourcer8的反汇编结果,应该能看看了;我是看不懂

[ 本帖最后由 shadewither 于 2006-9-26 15:48 编辑 ]


附件: TFDED.LST (2006-9-26 15:48, 56.56 K)
该附件被下载次数 231


附件: TFDED.SDF (2006-9-26 15:48, 8.91 K)
该附件被下载次数 200


顶部
性别:未知-离线 金圭子

白衣伯爵中大夫

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14
组别 白衣卿相
级别 征西将军
好贴 4
功绩 265
帖子 4926
编号 27961
注册 2004-12-16


发表于 2006-9-26 09:21 资料 文集 短消息 只看该作者
48色,可能性最大的其实还是个16色的颜色表,就是3位1色(解过几个Hgame,除了标准的bmp。都是3位的,bmp这种浪费1位的情况在dos时代很少,当然当时的格式都是随时写随时换,可能到3代就和2代的数据格式不一样了,所以不像bmp这种“永流传”的还用到了保留位…………)

看看后面一段有点像(间隔的出现00 ff或者00 f0的多是颜色表),前面一行多的可能是格式吧(图片长宽等等)…………
顶部
性别:未知-离线 封剑尘

Rank: 5Rank: 5
组别 羽林都尉
级别 仁勇校尉
好贴 1
功绩 77
帖子 167
编号 29062
注册 2004-12-29


发表于 2006-9-26 21:00 资料 文集 短消息 只看该作者


QUOTE:
既然LZ连DEBUG都会用,还是自己琢磨一下吧

我说了我不会汇编,像 MOV ADD JZ 这类的命令还能顾名思义, INT 21 之后干了什么就一点儿概念也没有了……

QUOTE:
可能性最大的其实还是个16色的颜色表,就是3位1色

从抓下来的图看,人物头像应该只用了 8 色,我说的每幅图 1920 字节就是按每像素 3 位算的,不压缩情况下这是最小的尺寸了。最大的问题是每段长度不一,最少 1197 字节,最多 2339 字节,显然不是按固定尺寸格式保存的。

唉!实在不行我先抓 240 幅图剪切下来用,具体格式以后再研究吧,浪费时间啊……(可惜也没办法替换人物头像了)
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-2-11 05:03
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.010373 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP