终于完成FACEDAT.R3的纯算法解码
三国英杰传吧
全部回复
仅看楼主
level 7
DC_danelchen 楼主
正确的提示词下,费时2小时,完成对TFDED.COM的解析,实现纯算法的资源解码。色板之前已经解决。这次还发现可以通过GRPDRV.exe来解决色板问题。不用拟合了。这周末解决色板问题。
见图:
2026年03月17日 08点03分 1
level 12
大佬大佬带带我
2026年03月17日 10点03分 2
带哪部分?
2026年03月17日 12点03分
level 6
压缩块所含的全部解码指令有没有可能罗列出来?
2026年03月17日 10点03分 3
还得实现写回,写回是不是你已经实现过了?
2026年03月17日 10点03分
@DC_danelchen 用7x指令即可写回,但已失去压缩功能。
2026年03月17日 11点03分
@parallelucky 写回可能对MOD有帮助,而我本轮主要完成解析即可,就差原生色板数据了,拟合的总有一些还原有问题
2026年03月17日 11点03分
@DC_danelchen 色板用Van现成的也差不多了。我主攻的课题是将曹操传的头像写入FACEDAT后保真。还有个大胆的想法,试图呈现抠掉背景的轮廓式头像。
2026年03月17日 11点03分
level 7
DC_danelchen 楼主
已经实现了typescript算法复现
2026年03月17日 10点03分 4
level 7
DC_danelchen 楼主
终于不用打脸了。
2026年03月17日 14点03分 6
level 7
DC_danelchen 楼主
全面对比
2026年03月17日 14点03分 7
level 7
DC_danelchen 楼主
请AI给解释了一下。
TFDED int62读取块头后,不是直接展开像素,而是解释一串小命令:有的命令从数据流取字节写入当前 plane,有的按行重复填充,有的把已写好的 plane/行再复制到别处,有的通过掩码旋转和步进方向切换,把同一批数据映射到相邻字节、下一行或另一 plane。这样能高效表达头像/位图里大量重复区域、左右相邻位移和跨 plane 共用结构。解码结果先落到 640x480 的 EGA planar VRAM;FACEDAT再取其中 64x80 头像区,PACKGRP/FUCKGRP2则直接使用整屏或其有效 bbox。所谓“编码原理”,就是反过来把位图拆成这些写入、复制、重复、旋转更省字节的操作序列。
2026年03月18日 07点03分 8
它追求的是当年 DOS/EGA 环境下最划算的三件事:省磁盘、省内存、解码快。 EGA 是四平面显存,不是今天常见的线性像素缓冲;如果直接存 4bpp 原始位图,体积大,而且写屏时还得自己拆 plane。int62这种“显存操作流”编码,能直接描述“往某 plane 写一串字节”“重复上一行”“复制另一 plane”“掩码旋转后平移一位”这类很贴合头像和界面图案结构的动作。这样一来,重复区域不用重存,跨 plane 共性也能复用,解码时又基本是顺手写 VRAM 的简单寄存器流程,对 8086/286 时代特别合适。换句话说,它不是为了通用性,而是为了针对 REKO3 这类资源在当时硬件上做到“足够小、足够快、实现也可控”。
2026年03月18日 07点03分
4 层逻辑,从低到高叠起来: 位级/平面级EGA 不直接存RGBA,而是 4 个 plane 分开存位。一个像素的颜色索引由 4 个 plane 在同一位置上的 bit 组合出来。所以最底层动作不是“画一个像素”,而是“往 plane 2 的这个字节写0xA4”。显存步进级写入不是随便落点,而是由DI、BP、DX、步长方向共同控制:当前行写几个字节,写完是跳到下一行、回退一行,还是做蛇形/折返。这层决定“数据流如何在 640x480 的平面显存里铺开”。 微操作级这里就是你提到的核心动作:直接从流里取字节写入同一字节按行重复把已解出的某 plane/某段复制到另一处依据掩码旋转,把已有位图左移/右移后再写这层本质上是在复用图像中的重复纹理、边缘偏移、跨 plane 相似结构。 块控制级每个压缩块前面有块头,先给出宽高相关参数、plane 分派顺序、是否启用某些模式、自修改立即数种子等。之后主循环按模式分派到不同子流程,比如0x0326主循环再调0x0392/0x03C2/0x040C/0x0448/0x0552/0x0609。这一层决定“接下来这段数据应该按哪种写法解释”。
2026年03月18日 07点03分
如果再抽象一层,还可以说有第5层: 资源语义级同一套int62内核,FACEDAT用来解64x80头像,PACKGRP/FUCKGRP2用来解整屏或局部资源。也就是说,算法层并不知道“这是头像还是界面图”,它只负责把操作流还原成平面显存,资源层再决定取哪块区域、怎么上色。 所以它不是“单层压缩”,而是:块头控制->模式分派->微操作执行->显存步进->plane组合成像这也是为什么它看起来像“小型图形虚拟机”,而不只是普通RLE。
2026年03月18日 07点03分
块控制级特点是“先定规则,再跑数据”。块头不会直接给像素,而是先设置这次解码的环境: 数据流起始跳转量宽度/高度相关参数DI/BP/DX一类步进种子plane 分派顺序包标志位几个会写回到后续指令立即数位置的“自修改参数” 种类上,不像固定 opcode 表那样容易数成几十条;更像“1 个块头 + 1 个模式分派器”。实际我们复现时,主控流程集中在: 0x018C:读块头、装载控制量0x0298:按 mode 分派0x0326:进入主循环也就是“1 组块头配置逻辑 + 4 路 plane/mode 执行次序”。
2026年03月18日 07点03分
level 10
强!我有生之年能等到自定义头像录入了。
2026年03月18日 08点03分 9
level 11

2026年03月21日 00点03分 12
1