我正在尝试从1997年的一款名为Swing(美国:大理石大师)的游戏中获得游戏画面。该文件称为NORMAL.SET,其中包含一组精灵。有一个名为SHOWSET.EXE的可执行文件,可在每个精灵上打印一个数字后显示整个集合。

还有一个名为HINTERH.SWG的文件(SWG可能代表SWING)。我能够使用TiledGGD弄清楚此文件类型是什么!它是不带标题的原始数据,大小为640x480、16 bpp,大字节序(A)RGB。请参阅下面的屏幕快照。



在TiledGGD中使用相同的设置,我得到了NORMAL.SET图像的近似值。在下面您可以找到SHOWSET.EXE的输出(左)以及TiledGGD如何显示它的图像(右)。



使用SHOWSET.EXE的屏幕截图输出,我能够接近用于NORMAL.SET中像素数据的编解码器(“正确术语”)。我确实相信它基于16位ARGB1555,但仍然有所不同。在下面,您可以看到从屏幕截图中提取的图像。让我们将其称为screenshot-sprite。



那是NORMAL.SET中的前192个字节。

47 69 62 20 6D 69 72 20 27 6E 65 20 4B 75 67 65
6C 0A 00 1A 73 74 61 6E 64 61 72 64 00 00 00 00
00 00 00 00 9D 4F DD 32 00 00 00 00 68 27 01 00
14 00 01 0F 1E 00 1E 00 2C 03 00 00 03 00 00 00
00 00 00 00 03 00 0A 00 90 08 90 08 90 08 90 08 <1,2---
8F 08 8F 08 8E 08 6D 08 6C 04 6B 04 03 00 0A 00
03 00 08 00 90 08 91 08 91 08 91 08 91 08 91 08
90 08 90 08 8F 08 8E 08 6D 08 6C 04 6A 04 4A 04
03 00 08 00 03 00 06 00 91 08 91 08 B2 08 B2 08
B2 08 B2 08 B2 08 B2 08 B2 08 91 08 90 08 8F 08
8E 08 6D 08 6C 04 6B 04 49 04 48 04 03 00 06 00
03 00 05 00 90 08 B2 08 B2 08 B3 08 B3 0C B3 0C


这些是屏幕快照精灵的前192个字节。

42 4D 50 07 00 00 00 00 00 00 46 00 00 00 38 00
00 00 1E 00 00 00 E2 FF FF FF 01 00 10 00 03 00
00 00 0A 07 00 00 3B 00 00 00 3B 00 00 00 00 00
00 00 00 00 00 00 00 7C 00 00 E0 03 00 00 1F 00
00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 <1---
00 00 00 00 00 00 00 00 00 00 90 08 90 08 90 08 <2---
90 08 8F 08 8F 08 8E 08 6D 08 6C 04 6B 04 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 90 08 91 08 91 08 91 08 91 08 91 08 90 08
90 08 8F 08 8E 08 6D 08 6C 04 6A 04 4A 04 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


您可以看到数据可能开始的位置(箭头1),您会看到类似的内容十六进制字符串90 08 90 08 90 08

您还可以看到screenshot-sprite中的数据可能以10个字节对开头(箭头2)。在NORMAL.SET中找到0A 00。现在,我读到有关RLE的内容,并且有些幻想,我可以看到10个字节对与0A 00之间的链接,我可以将其转换为“十倍的黑色像素”。

我仍然困惑为什么我看到两个NORMAL.SET中的蓝色精灵,屏幕截图中只有一个蓝色球体。但这是我以后会关心的事情。

注意
在这一点上,我非常确定自己的方向正确!我认为RLE解压缩是唯一缺少的地方,除了弄清楚数据从何处开始以及标头应该意味着什么。也许它们对我没有多大用处。

我不确定,如果我现在还有一个问题。如果没有人不同意,我会把它保留在这里,直到我找出其余部分,希望有一天对某人有帮助。一旦解决了难题,我将立即更新。

直到,如果您已经为RLE准备好了解决方案,请不要害羞发表;)

评论

从这是什么文件格式开始,您将必须提供更多的信息,然后任何人才能帮助您。某种编辑器的屏幕截图并没有真正的帮助。哪些游戏使用了它?你在哪里找到它?文件扩展名?是否基于已知格式(JPG,PNG,TGA)?您尝试了哪个编辑器?你有主意...

知道了:)

现在,这是一个精心设计的问题!希望有人可以帮助您。 ;)

您可以尝试Resource Hacker

在这种情况下,文件扩展名与文件类型无关。

#1 楼

快速的答案是:

14 00是子画面的前两个字节。原始位图数据从偏移量20开始,在这种情况下为03 00 0A 00。该文件经过RLE编码,03 00是转义序列,而0A 00告诉我,紧随其后的是20个像素,带有00 00(16 bpp)。

利用此信息,我可以对Sprite组进行反向工程。