Java解析魔兽争霸3录像W3G文件(三):解析游戏开始前的信息

本文介绍如何使用Java解析魔兽争霸3录像(W3G)文件中游戏开始前的信息,包括游戏地图、玩家详情、游戏设置、地图校验等。通过解码特殊编码的数据,获取游戏版本、时长、玩家队伍和种族等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇博文中,通过对压缩数据块的解压缩以及合并,得到了解压缩的字节数组。从现在开始,就要处理这个数据。

这个部分的数据主要包括两大类信息:一类是游戏开始前的信息,例如游戏地图,游戏玩家,队伍、种族情况,高级选项等等,这些信息都是在进入游戏之前已经确定的东西;另一类是游戏进行时的信息,这块包括玩家游戏过程中的操作、游戏中的聊天等。其中,游戏开始前的信息占解压缩后的数据的前一小部分,紧接着后面的一大部分保存着游戏进行时的信息。

本文介绍如何解析游戏开始前的信息。

游戏开始前的信息的结构:

注:在下面各部分结构解释中,灰色字体标注的信息不对其进行解析,就不再详细介绍,要想了解可以参考w3g_format.txt文档。

一、总体结构

1、4 字节:未知。
2、variable字节:主机玩家记录(详细查看【二、玩家记录】)。
3、variable字节:游戏名称,字符串,以0x00结束。
4、1字节:空字节,0x00。
5、variable字节:特殊编码的数据(包括游戏设置、地图、创建者),以0x00结束(详细查看【三、特殊编码的数据】)。
6、4字节:玩家数量。
7、4字节:游戏类型。
8、4字节:未知。

9、variable字节:加入游戏的玩家列表(详细查看:【四、加入游戏的玩家列表】以及【二、玩家记录】)。
10、variable字节:Slot列表(详细查看:【五、Slot列表】)。

二、玩家记录

1、1字节:玩家类型,0x00主机,0x16加入游戏的玩家(【四、加入游戏的玩家列表】)。
2、1字节:玩家ID。
3、variable字节:玩家名称,以0x00结束。
4、1字节:附加数据大小,0x01或0x08。
5、1或8字节:附加数据。

三、特殊编码的数据

这是一段特殊编码的数据,该部分需要解码后才能继续解析,解码的方式直接看下面的代码,这里不再介绍。

解码后:
1、4字节:游戏设置,这部分包含一些高级选项,如下图,不过这部分很少有人去改变,所以这里不再去解析了。


2、5字节:未知。
3、4字节:地图校验。

4、variable字节:地图路径,字符串,以0x00结束。
5、variable字节:创建者,字符串,以0x00结束。

四、加入游戏的玩家列表

如果有多个玩家加入游戏,每个玩家对应一个下面的结构。由于是加入游戏的玩家,所以每个玩家对应的数据都是0x16开头。当遍历到第一个字节不是0x16时玩家列表就结束了。注意,加入游戏的玩家列表中不包含电脑玩家,电脑玩家在【五、Slot列表】中。

1、variable字节:玩家记录(详细查看【二、玩家记录】)。
2、4字节:0x00000000。

五、Slot列表

一个Slot是指游戏开始前的界面的一个玩家位置。如下图,即是4个Slot。


1、1字节:固定0x19。
2、2字节:下面的数据的字节数。

3、1字节:Slot数量。
4、variable字节:Slot记录的列表,其中包含多个Slot记录,数量即上面一个字节的值(详细查看【六、Slot记录】)。
5、4字节:随机种子。
6、1字节:队伍、种族是否可选择。
7、1字节:地图中的位置数量。

六、Slot记录

每个Slot占9个字节:

1、1字节:对应的玩家ID,电脑玩家是0x00。
2、1字节:地图下载百分比(一般都是100)。
3、1字节:Slot状态,0x00空的,0x01关闭着的,0x02使用中的。
4、1字节:是否是电脑玩家,0x00非电脑玩家,0x01电脑玩家。
5、1字节:队伍,0~11分别表示队伍1到队伍12,12表示裁判或观看者。
6、1字节:颜色,0红1蓝2青3紫4黄5橘黄6绿7粉8灰9浅蓝10深绿11棕12裁判或观看者
7、1字节:种族,0x01/0x41人族,0x02/0x42兽族,0x04/0x44暗夜精灵,0x08/0x48不死族,0x20/0x60随机。
8、1字节:电脑难度,0x00简单的,0x01中等难度的,0x02令人发狂的。
9、1字节:障碍(也就是血量百分比),0x32,0x3C,0x46,0x50,0x5A,0x64之一&#x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值