从文件中提取纹理(Gamecube 游戏)

逆向工程 文件格式 解压
2021-06-10 07:25:19

我想翻译一个 gamecube 电子游戏(称为 Winning Eleven),但我没有成功从包含它们的文件中提取纹理。

我尝试了多种工具,其中一个是用于特定游戏方块游戏 (Mario Sunshine iirc) 的工具,但没有奏效,很可能是因为它使用了不同的、独特的解压方法。

包含纹理的文件是 .bin 文件,这是我在 zlib 工具的帮助下从所谓的 .txs 文件中提取的。

如果在这方面知识渊博的人能够查看此文件,我将不胜感激。

有人可能会认出它,甚至已经知道如何解决这个问题。

我上传了从 txs 文件中提取的 4 个 bin 文件,并且我还添加了一个名为 AFS Explorer 的工具。

下载链接:http : //s000.tinyupload.com/download.php?file_id= 30125217858357016099& t=3012521785835701609927187

为了提取 bin 文件,我使用了 AFS Explorer 的内置 Zlib 管理器。

如何打开和浏览 txs 文件:

  1. 打开 AFS 资源管理器
  2. 转到顶部栏上的“查看”并选择“Zlib 管理器”
  3. 选择“从文件加载部分”并打开 txs 文件。

我只是提到这一点,让您看看如何首先提取 bin 文件,以便更好地理解。

如果您能帮我解决这个问题,我将不胜感激。

编辑:那些绝对不是动画,只是以文本为内容的普通位图。我什至可以向你展示它们的样子,这些来自同一个游戏的 PS2 版本,形成完全相同的名为“form.txs”的文件,唯一的区别显然是 PS2 版本使用了不同的压缩方法,这已经是发现。

有几种工具可以处理 PS2 文件,但没有一种可以处理 NGC 文件,这显然是因为格式不同。

编辑2:

我上传了一个适用于 PS2 bin 文件的纹理工具,但显然不适用于 GameCube 文件。尽管进行了大量搜索(也在旧的存档网站上),我还是找不到这个纹理工具的源代码。但我想我还是应该上传它,它可能也有帮助。我希望 tinyupload.com 可以上传。

下载链接:http : //s000.tinyupload.com/index.php? file_id= 92363414871112387548

1个回答

这看起来……很有趣。

当我在十六进制编辑器中打开第一个和第二个文件时,一个有 20240 字节,另一个有 10240 字节(所有数字均为十六进制)。因此,在一种情况下为 2^16+220,在另一种情况下为 2^17+220。

这两个文件的前 240 个字节都有“看起来像某种方式”的数据,然后数据开始看起来不同。例子:

在此处输入图片说明

对我来说,这闻起来像:

0000-003F 元数据,无论 0040-0240 调色板;可能是 256d 个 2 字节的条目,565 编码?静止图像数据

请注意当您设置十六进制显示的宽度时图案看起来有多规则。这似乎是一个 20x20(32x32 十进制)像素位图。但是,在文件中进一步向下看,似乎还有其他宽度。

所以不,这不是一种(由我)可识别的格式,但解码它应该不会太难。

其他 2 个文件似乎具有不同的格式,它们仅比 2 的幂大 30 个字节,并且文件中的 30 个字节没有明显的模式变化。不知道该怎么做,但。

编辑:

将 AFS73DB.tmp_0.bin 文件的图像数据解释为 32x128 块并将它们彼此相邻放置会产生(省略某些部分):

在此处输入图片说明

这在我看来就像一个动画,可能是爆炸或类似的东西。不过,颜色可能相差甚远。这是否敲响了警钟?你有一个或两个屏幕截图,这在 Gamecube 上应该是什么样子的?

此外,似乎没有使用纹理的下部,因此填充了随机字节。

如果您想查看我对解码器的尝试,请查看https://github.com/gbl/GamecubeTextureDisplay

编辑2:

有一个输出应该是什么样子的例子很有帮助,我能够更新我的解码器。

每个 32 个输入字节的块在输出中存储为一个 8x4 像素块,下一个块在它的右侧,直到达到整个行长度,如下所示:

00 01 02 03 04 05 06 07     20 21 22 23 24 25 26 27   ....
08 09 0a 0b 0c 0d 0e 0f     28 29 2a 2b 2c 2d 2e 2f 
10 11 12 13 14 15 16 17     .....
18 19 1a 1b 1c 1d 1e 1f

每个调色板条目似乎是一个大端 2 字节字,msb 未知(alpha 值?),后跟红、绿、蓝的 5 位。因此,例如,调色板条目8CE2转换为1000 1100 1110 0010、拆分为1|00011|00111|00010|、结果(当各个颜色填充为 8 位时)在r=00011000=24g=00111000=56、 中b=00010000=16

使用这个,你的文件会导致

在此处输入图片说明 在此处输入图片说明

这看起来很不错。然而,第一张图像中有一些不应该存在的红色像素,而第二张图像中的字母几乎看起来像是带有绿色/红色像素移位的 3D 字母。这可能与 alpha 值有关吗?

仍然不确定如何制作黑白照片。

(待续)