-
Notifications
You must be signed in to change notification settings - Fork 19
Home
flwmxd edited this page Jan 6, 2017
·
1 revision
游戏资源打包几乎是一个网络游戏客户端必备的功能。页游和微端根据实际需求可能不打包资源或者使用小包。
资源打包有这么几个好处:
1、加快客户端安装时间。拷贝3000个1mb文件所消耗的时间要远大于拷贝一个3g的文件所消耗的时间
2、客户端更加整洁,也可以“稍微”避免游戏资源被他人使用。
3、ios和android上面可以避免文件名大小写不一致造成的文件读取失败。或者说包内可以做到全平台大小写无关
4、压缩资源,如果是大量png等图片资源可能还体现不出来,但是如果有大量文本和未压缩模型资源,那么打包可以有效减小客户端。
MapleStory资源文件全部都已wz为后缀,Wz文件是Maplestory的基础文件,使用wizet公司为扩展名来加密、加压游戏资源,以减少游戏资源所占用的空间以及防止有人对wz文件作非法的修改,简单的说MapleStory这款游戏所有的图片、音乐、脚本等资源都包含在Wz文件中。
一个常规的MapleStory客户端内包括以下几个wz文件:
wz文件名 | 内容介绍 |
---|---|
Base.wz | wz文件全体列表,不包括任何资源文件 |
Character.wz | 游戏角色形象资源,包括人物发型、衣服、鞋子、武器等,另外坐骑、称号都在该文件内 |
Effect.wz | 一些游戏效果,例如一些职业的剧情大图、人物身边的某些特效图 |
Etc.wz | 这里包含的资源较少,列表数据较多 |
Item.wz | 各种物品图标资源、椅子资源等 |
List.wz | 暂不明用处的列表wz,后期已被删除 |
Map.wz | 游戏地图资源,包括背景、前景、路面、摆设物、世界地图等 |
Mob.wz | 怪物资源图 |
Morph.wz | 角色变身形象资源图 |
Npc.wz | NPC的资源图 |
Quest.wz | 游戏任务相关文字内容 |
Reactor.wz | 敲击物(反应器)的资源图,例如一些需要普通攻击敲打的木箱等 |
Skill.wz | 包含各职业技能图、怪物技能图等 |
Sound.wz | 声音资源,包含各个地图的背景音乐、技能音效、界面音效等 |
String.wz | 包含一些物品、地图、怪物、NPC名称等文字资源 |
TamingMob.wz | 原用于归类坐骑图片资源,后来的坐骑图片资源都归类至Character.wz文件了 |
UI.wz | 界面相关资源,包括游戏界面、职业创建界面、名片对话框、商城界面、鼠标指针等 |
Wz文件可以称为MapleStory游戏的文件系统。包含了目录和对象实体,在对象实体下面又包含了多个属性。
整个资源文件对于其字符串进行了加密(不属于本节讨论的范畴)
50 4B 47 31 - "PKG1", 文件头/标识/签名(0x31474b50)4bytes
UINT64 - 文件大小
INT32 - 头部大小
'\O' 结尾的字符串(C字符串 44 bytes) - 文件描述 'Package file v1.0 Copyright 2002 Wizet, ZMS'
头部数据之后紧接着为wz文件的主体内容
UINT16 - 加密的客户端版本号
Directory - 根目录
每一个目录下面包含了多个子目录和对象。
Read WZ-INT - size 对象数量
for i = 0; i <size ; i++ {
UINT8 - 类型 1 为目录 否则为对象
SERIALIZED-STRING- 名字
WZ-INT - 大小
WZ-INT - 校验和
WZ-OFFSET - 文件中实际位置的偏移量
}
一个对象用一个字符串描述了当前的对象类型 MapleStory中支持以下的对象类型:
- Property
- Canvas
- Shape2D#Convex2D
- Shape2D#Vector2D
- UOL
- Sound_DX8
Read SERIALIZED-STRING - 类型名称
- Property (属性) 包含了若干个键值对,Key 为 string,Value为一个variant
UINT8 - Unknown
UINT8 - Unknown
WZ-INT - variant数量(size)
for (i = 0; i < size i++) {
SERIALIZED-STRING - 节点名称
Variant - 值
}
Variant(变体类型)
Ms中支持多种Variants
UINT8 - Type
if Type == 0 {
Nothing
} else if Type == 2 || Type == 11 {
INT16 - Value
} else if Type == 3 || Type == 19 {
WZ-INT - Value
} else if Type == 20 {
WZ-LONG - Value
} else if Type == 4 {
UINT8 - Flag for set float
if Flag for set float == 0x80 {
FLOAT32 - Value
} else {
// Default value is FLOAT32(0.0)
}
} else if Type == 5 {
FLOAT64 - Value
} else if Type == 8 {
SERIALIZED-STRING - Value
} else if Type == 9 {
// An Object
INT32 - Size
Object - The serialized object (= Value) (可以继续展开)
}
- Canvas(图片资源)
UINT8 - Unknown
UINT8 - Type 1为Property 则继续展开 否则为Canvas
WZInt - width
WZInt - height
WzInt - format1 指定纹理渲染方式
WzInt - format2
Int32 - unknown
Int32 - Size
byte * data = read(Size);二进制数据
- Shape2D#Convex2D()
WzInt - count 子节点个数
for i = 0;i<count;i++
{
expandNode(currentOffset);
}
- Shape2D#Vector2D(向量)
WzInt - x
WzInt - y
- UOL (资源重定向)
UINT8 - unknown
SERIALIZED-STRING - 重定向地址
- Sound_DX8(声音)
UINT8 - unknown
WzInt - size
WzInt - unknown
51 Bytes - 表述当前音频的信息
以上为MS资源的解析
扫码关注: