打造自己的CCZ

原创 2007年10月01日 21:55:00

目录
Data文件结构
第一到第五讲
剧本十六进制修改示例
猎雕强化战役补丁中三项功能实现的原理
曹操传战斗剧情的一些修改方法
增加敌军或友军数量
剧本中测试条件的说明
其它(复活、头像变化、敌方武将撤退台词)
===
1、初始数据
改存档文件大家都很熟悉了,不过一般也就改改人物属性和宝物而已。借助于解压以后的data.e5文件,可以进行更多的修改。(data.e5文件放在www.freewebs.com/vbvan/data.rar
data.e5中包含了很多文件,下面依次进行解析。
第一个Char.dat。人物初始属性,512*20h。
0h~ch:Name
dh、fh:Index之类的东西(具体见下面的说明)
12h~16h:五围(*2就是统武政智魅)
17h:HP
19h:MP
1ah:兵种编号
1bh:Lv
附加说明:
这上面的fh就是武将在大地图上对应形象的index。譬如说游戏一开始曹操是一个穿绿衣服的小人,是因为它的f字节处的值为0,也就是对应pmapobj.e5的第一张图片。
下面是一些比较有趣的图片:典韦拿的旗190,关羽的人头189,皇帝205
在游戏中,也可以通过code35来改变这个Index,譬如游戏里就是通过这个来改变夏侯瞎眼之后的形象的
不过要注意的是,像一般主要人物对应的图片里面包含了全套的动作,如发怒,挥手等。但是其他的就只有一两个动作,比如皇帝就只有走路的形象,貂蝉也没有发怒的样子(保护美女的形象  )。因此改了之后,有些动作就做不出来了(没有相应的动作时人应当会突然消失)。
10h用来指明致命一击台词的类别(这个主要适用于没有特殊台词的小兵)。比如说曹彰对应的类别就是1,那他就会从“喝……!”“唔喔喔……!”“杀啊啊……!”中随机选一句。具体对应关系可以参考友盟piccolo的大作《评 曹操传致命一击台词 (中日文完全版) 》
11h用来指明武将归属的,data.e5文件里初始都是ff,也就是不属于曹操军(包括曹操也是ff,他是在第一个剧本里面通过code3b加入的),改动这个(改成0就变成我方了)可能可以改变我方的初始武将
dh开始的两个字节是武将的脸谱Index。曹操是0,夏侯是1……游戏内部根据情况还会调整。实际使用的脸谱,最普通的就是曹操的脸谱Index是0~7,而其他武将的脸谱Index要+7(因为曹操本身有8张脸谱)。
第二个是Item.dat。宝物,104*19h
0h~:Name
11h:宝物类型
12h:特殊效果的类型(没有则为ff)
13h:价格/100(ff表示非卖品)
14h:Icon
15h:基本效果值
16h:特殊效果值
17h:升级加的效果值
18h:是否是特殊宝物
第三个是跟开战前仓库有关的
第四个是Troop.dat。部队属性,53*1bh
0h:Speed
1h:攻击范围
2h~8h:每升一级加的属性值(2、3、4分别对应B、A、S)
9~1bh:可以装备的宝物类型(1表示可以,0表示不可以)
第五个是Terrain.dat。地形属性,27*3ch
0h~1dh:某个兵种对应的各种地形效果(例如a表示100%,b表示110%)
1eh~3bh:某个兵种对应的各种地形消耗移动力(ff表示不能移动)
第六个是Magic.dat。魔法属性,73*46h
0h~ah:Name
bh:魔法类型
ch:对敌为0,对己为1
dh:hitarea(攻击范围)
eh:effarea(效果范围)
fh:消耗的MP
10h:Icon
11~45h:不同兵种习得此项魔法所需的最小Lv(0表示不能学会)
2、图像资源。
酝酿中。。。不过估计还是需要用外部程序先将图片转换到指定的256色调色板位图。
3、剧本文件
详见后面的帖子

第一讲.修改敌人的出场设定
我想这个应该是许多人希望的,特别是喜欢自虐的朋友,可能希望敌人变态一点。下面的应当能满足你的要求
首先需要修改的文件是s_XX.eex。先查找“440045002600”(十六进制,一般出现在文件的第0x20~0x30字节之间),找到后在“0x45”处向后移18个字节,这个就是出场时敌人小兵的等级加成值。举个例子,比如根据计算我方的平均等级是20级(具体算法可以参考我以前的帖子),那么出场敌人小兵的等级就会在20的基础上根据这个加成值进行修正。我们一般看到的小兵都是18级,这是因为修正值是-2。具体的表达式是这样的,假设修正值为x,如果x<50,那么最后的等级要加上x,否则会减去x-50。你会看到文件里此处的修正值一般都是52,也就是减2
所以可以把它改成一个小于50的数,那么你会发现敌人的等级会高很多

在“0x45”处向后移46个字节,你应当发现前面的字节是0x46。好,这就是友军的出场数据了,具体结构如下
0200XXXX
2600XXXX
0400XXXXXXXX
0400XXXXXXXX
2b00XXXX
3e00XXXX
4500XXXX
0700XXXX
0200XXXX
0400XXXXXXXX
0400XXXXXXXX
一共有20个
接下来就是敌人的,结构如下
0200XXXX
2600XXXX
2600XXXX
0400XXXXXXXX
0400XXXXXXXX
2b00XXXX
3e00XXXX
4500XXXX
0700XXXX
0200XXXX
0400XXXXXXXX
0400XXXXXXXX
一共有80个。
换句话说,战场上至多有20个友军,80个敌军以及15个我方人员

其中0200后面跟的就是出场武将的编号,比如你把它后面的XXXX改成0300,那出场的就是关羽了。
第一个0400后面跟的是武将在地图上的横坐标,第二个0400是纵坐标
2b00后面是朝向,3e00后面是武将等级相对于小兵的加成

要想新增出场人物的话,找第一个0200后面跟ffff的,将ffff(表示没有武将)改成你要的武将编号,设定地图上的位置,并将3e00后面改成你要的等级加成即可

==========
第二讲.我军出场设定
我军出场的人物因为是由玩家选择的,所以剧本里的信息和前面的敌军出场设定的格式有所不同。
简单的方法,先搜索字符串“HEX我军设定”,在字符串后找到“0x4b”,就是我军的设定了。格式如下:
0400XXXXXXXX
0400XXXXXXXX
0400XXXXXXXX
2b00XXXX
2600XXXX
第一个0400后面跟的是武将的标号,比如你在出场武将选择里第一个选择的武将他的编号就是0。
后面两个0400后面跟的是武将在地图上的坐标
2b00后是武将的朝向

第三讲.敌人的特殊装备
一般,有名字的敌方武将会有一些区别于小兵的装备,主要是辅助系和特殊宝物。这也是剧本里面指定的。先搜索字符串“个人装备设定”,在字符串后找到“0x48”,格式如下:
0200XXXX
3b00XXXX
4900XXXX
3c00XXXX
4900XXXX
3d00XXXX
0200是武将编号。3b、3c、3d后面分别是攻防辅的装备对应的Index

==========
第四讲.战役的全局控制变量
战役的全局变量是由一开始的4500控制的。从上一贴的例子可以看到4400后面就是4500,它的结构如下:
2600XXXX
2600XXXX
0400XXXXXXXX
3e00XXXX
3200XXXX
0200XXXX
3200XXXX
0200XXXX
4700XXXX
2200XXXX
(前面已经提到,3e00是控制小兵等级加成的)
0400后面就是限制的回合数
第一个0200后面是胜利条件中“击退XX”中敌方武将的index
第二个0200后面是失败条件中“XX撤退”中我方武将的index

第五讲、我方武将不死
许多人对郭嘉、典韦死掉感到很惋惜。当然直接改存档文件可以让他们复活,不过也可以直接改剧本,这就是下面要介绍的3b00的功能
直接搜索"3b000200"(在r_XX.eex中搜)就会找到如下的数据
3b00
0200XXXX
0e00XXXX
3e00XXXX
其中第一个0200后面就是武将的Index,而0e00就是控制武将登场或死亡的,0表示登场,FF表示死亡。3e00和以前的含义一样,代表等级加成。

比如,典韦之死是s_11.eex里面的,在其中搜一下"3b00020010000e00ff00",并把最后的ff00改成0000就可以了。
郭嘉是s_25.eex,夏侯渊是s_36.eex,庞德是s_39.eex

当然,只是把3e00后面改成0000的话,过场动画还是会说那个武将死掉了,所以要想完美的解决这个问题,就要对剧情动动手脚了,这也是后面几讲的内容

总结一下,曹操传的剧本文件是通过Code来控制各项功能的(也可以把它看成是函数的代号),Code之后就是具体的参数,每个参数都由类型和具体的值组成。
比如说控制升级的3b00代码也可以写成:
3b00 (CharJoin()
0200XXXX(int CharIndex)
0e00XXXX(bool Option)
3e00XXXX(int LvAddOn))
而类型都是固定的,譬如说0200代表CharIndex,3e00代表LvAddon等等

-===============
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F

00000000 45 45 58 00 01 02 00 00 00 00 16 00 00 00 EE 1B EEX...........î.
00000010 00 00 31 38 00 00 01 00 D4 1B 02 00 05 00 00 00 ..18....Ô.......
00000020 00 CB 1B 44 00 45 00 26 00 00 00 26 00 00 00 04 .Ë.D.E.&...&....
00000030 00 14 00 00 00 3E 00 34 00 32 00 00 00 02 00 FF .....>.4.2.....ÿ
00000040 FF 32 00 01 00 02 00 00 00 47 00 00 00 22 00 01 ÿ2.......G..."..
00000050 00 46 00 02 00 03 00 26 00 FF FF 04 00 12 00 00 .F.....&.ÿÿ.....
00000060 00 04 00 0D 00 00 00 2B 00 03 00 3E 00 06 00 45 .......+...>...E
00000070 00 FF FF 07 00 01 00 02 00 FF FF 04 00 00 00 00 .ÿÿ......ÿÿ.....
00000080 00 04 00 00 00 00 00 02 00 63 00 26 00 FF FF 04 .........c.&.ÿÿ.
00000090 00 09 00 00 00 04 00 09 00 00 00 2B 00 03 00 3E ...........+...>
000000A0 00 04 00 45 00 FF FF 07 00 02 00 02 00 FF FF 04 ...E.ÿÿ......ÿÿ.

可能有些朋友对十六进制编辑不太熟悉,这里举个例子(汜水关,s_01.eex)。首先先要装一个十六进制编辑器,譬如winhex或者Ultraedit。打开s_XX.eex文件就会看到类似于上面的东西。(最左边的一排就是pos)。
先看pos=0xA的地方,也就是第一行,第A列处的值,它就是剧本数据开始的偏移量。这里是0x16,所以先移动到pos=0x16(winhex里面也可以使用position->go offset)。一般剧本一开始都是0100xxxx02000500000000xxxx,这些字节是控制用的,可以跳过。接着就是战场设定的数据了。对上面的例子,可以看到控制字节之后是4400(pos=0x23)。从这里开始搜索hex value“4600”就会跳到pos=0x51了,于是就可以修改后面的友军出场设定了。
譬如第一个人就是关羽,对应的数据是
02 00 03 00 26 00 FF FF 04 00 12 00 00 00 04 00 0D 00 00 00 2B 00 03 00 3E 00 06 00 45 00 FF FF 07 00 01 00

==================
介绍猎雕强化战役补丁中三项功能的实现的原理
1、战利品:特指战斗结束后得到的物品。代码是59
0400XXXXXXXX
1700XXXX
4900XXXX
1700XXXX
4900XXXX
1700XXXX
4900XXXX
2600XXXX
17后面就是宝物的代号,一场战斗至多可以给三件宝物。要多的话,可以通过3d来实现
1700XXXX
4900XXXX
2600XXXX
0200XXXX
2、战力削弱
许多人对如何让第二关孙坚军一开始不扣血很感兴趣,其实这是通过4d来实现的
4100XXXX
0200XXXX
0400XXXXXXXX
0400XXXXXXXX
0400XXXXXXXX
0400XXXXXXXX
0400XXXXXXXX
0300XXXX
2f00XXXX
1800XXXX
3000XXXX
0400XXXXXXXX
0400XXXXXXXX
其中最后两个4后面就分别代表了扣的hp和mp。而前面的4则划定了一个矩形,这个削弱操作会对矩形中所有的人进行
3、许子将不消失
这是由31控制的
2c00XXXX
0200XXXX
0400XXXXXXXX
0400XXXXXXXX
0400XXXXXXXX
0400XXXXXXXX
0300XXXX
2后面是消失的武将代码(需将2c后设为0),至于那些4,和4d中的是类似的,用来进行批量的武将消失(此时需将2c后面设为1,2后面设为ffff)
猎雕的版本里实际上是把武将代码改成了另外一个人,从而达到了偷天换日的目的
许子将的等级可比小兵要高30级哦

===============
曹操传战斗剧情的一些修改方法
战斗剧本存放在s_XX.eex中,它由三部分组成。
第一部分就是初始出场设定以及一开始的固定剧情。这个前面大概的介绍过了
第二部分就是各种事件。
第三部分是一些收尾的工作。
那么我们就来看看第二部分。这一部分的偏移存放在第e字节(比如说第一个剧本s_00.eex里,第二部分的偏移就是0x1dfe)。找到第二部分开始的地方以后,首先看到的是一个整数,说明这个剧本里面有多少个事件,之后我们就能看到许多个以0200050000开头的事件了。

事件的一般结构如下:
XXXX(事件的长度)
02000500
XX...XX(硬性测试条件)
0500XX...XX(事件测试条件)
{
XX(事件的代码)
0b00
0400XXXXXXXX
2700XXXX(对变量XXXXXXXX赋值XXXX)
}
当然,事件里面还能再嵌套0500操作符
所谓硬性测试条件是根据战场上的情况,当满足条件时会触发事件。而所谓事件测试条件,则是根据其他事件发生与否,来确定本事件是否发生

因为曹操传内部对事件的处理比较特殊,所以最好不要直接修改代码,但是可以对代码的参数进行修改

比较常见的硬性测试条件有以下一些,后面会有介绍
25:武将进入指定地点测试
26:武将进入指定区域测试
2e:武将相邻测试
36:武将撤退测试
41:战场人数测试
3f:回合测试
42:战斗胜利测试
43:战斗失败测试
===================
增加敌军或友军数量
需要分别设置0200(Index),2b00(朝向),pos,0700(一般设为01即可)后的值

至于要增加我军的出场武将数,则需要修改r_xx.eex
控制的代码是0600
2e00XXXX
0400XXXXXXXX
3800XXXX
3800XXXX
3800XXXX
3800XXXX
3800XXXX
3900XXXX
3900XXXX
3900XXXX
3900XXXX
3900XXXX
其中4后面就是出场的最大人数,38后面就是必须出场的武将(一般有两个0600,改2e00后面跟01的那个)
顺便提醒一下,我方至多出场15人,这是物理限制,无法突破
==========
这里对几个测试条件进行说明

25:武将进入指定地点测试
0200XXXX
0400XXXXXXXX
0400XXXXXXXX
这个很容易,4后面就是地点的坐标。至于2后面除了跟武将的Index之外,还可以跟通配符,比如401代表我方和友军的任何一个部队

26:武将进入指定区域测试
0200XXXX
0400XXXXXXXX
0400XXXXXXXX
0400XXXXXXXX
0400XXXXXXXX
和上面类似

2e:武将相邻测试
0200XXXX
0200XXXX
2600XXXX
武将相邻之后可以触发对话或者单挑。单挑本身并不是由单一的代码控制的,而是由一系列的6X的代码来实现的

36:武将撤退测试
0200XXXX
2300XXXX
0400XXXXXXXX
2400XXXX
实际是通过测试hp是否等于0来判断的。

41:战场人数测试
0300XXXX
0400XXXXXXXX
2400XXXX
3f00XXXX
0400XXXXXXXX
0400XXXXXXXX
0400XXXXXXXX
0400XXXXXXXX
3指明要统计的人物的属性。比如说0代表我军,1代表友军等等。4就是要求人数。24的含义见下面。3f=0时表示统计整个战场,否则统计由4指定区域内的武将数

3f:回合测试
0400XXXXXXXX
2400XXXX
24=0、1、2分别表示大于等于、小于、等于。4后面是回合数

42:战斗胜利测试
43:战斗失败测试
没有参数

这里介绍控制剧情分支最重要的Code--5
Code5类似于if语句,根据全局变量来决定跳转。其格式如下
0500
3500XXXX
...
3500XXXX
...
35后面跟的是变量个数,...就是具体变量的代号
比如说虎牢关之战后,如果孙坚撤退了,游戏中会设置全局变量2bd
之后在剧本R_02.eex中,就用如下的代码来判断
0500
35000100
bd02
35000000
其中第一个35后面的变量要求值为1,第二个35后面的变量要求值为0。和在一起取and
举个例子
0500
35000200
bd02
0100
35000100
0200
这个表达式在变量2bd、1为1,且变量2为0的时候才成立。
因此,可以通过这个来改变剧情的跳转。当然如果要改剧情,这些还是不够的
========
复活是通过剧本里面的55控制的,与兵种本身没有关系。本来一个事件发生以后,系统会设置某个随机变量为1,这样的事件只会执行一次。而木人复活这一事件会定期将变量重置为0,所以可以无限次复活

头像的变化是在程序里面设置的,不过还是可以通过剧本来修改
因为头像的变化是通过一个全局变量控制的,而剧本里面是用Code20设置这个全局变量的
4a00
XXXX
至于地图上的形象你应该已经找到了,是通过Code35控制的
0200
XXXX
1300
XXXX

本来敌方武将撤退的时候也是没有台词的,你看到的那些都是因为剧本里面特别设置了一个事件才有的。而我方武将的台词放在imsg.e5的中间,并不方便增加
至于让曹操不出场,你可以把Code6的后五个参数(39)的第一个改为0,那些是控制哪些人不上场的
下面是置顶帖里面的
控制的代码是0600
2e00XXXX
0400XXXXXXXX
3800XXXX
3800XXXX
3800XXXX
3800XXXX
3800XXXX
3900XXXX
3900XXXX
3900XXXX
3900XXXX
3900XXXX
其中4后面就是出场的最大人数,38后面就是必须出场的武将(一般有两个0600,改2e00后面跟01的那个)
 

相关文章推荐

pvr.ccz转换

  • 2015年05月26日 10:01
  • 98KB
  • 下载

【iOS-cocos2d-X 游戏开发之十一】New CCSprite()带来的错误&使用CCUserDefault及pvr.ccz在Cocos2dx中要注意!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2dx/703.html...

ccz mod 3

  • 2007年09月09日 15:33
  • 3.67MB
  • 下载

【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的".pvr.ccz",".plist"共用的终极精灵优化及注意事项!

Himi 原创,转载请注明! 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6761811           ...

per.ccz与png图片占用内存对比

pvr与png的内存占用    转载▼     Zwoptex生成的spritesheet除了可以导出png格式的图片外还有pvr格式。pvr格式是iOS的显示芯片可以直接读...

【iOS-Cocos2d游戏开发之九】讲解CCSpriteBatchNode与TP工具的”.pvr.ccz”,”.plist”共用的终极精灵优化及注意事项!

转载自【黑米GameDev街区】 原文链接:http://www.himigame.com/iphone-cocos2d/465.html 前几节由于时间紧张,只是将一些遇到的问题拿出来进行分享...

pvr/pvr.ccz文件转png,使用ant脚本实现

此处写了一个简单的ant的脚本,实现了pvr格式到

将Texture Packer制作的.pvr.ccz和.plist文件还原为多个原图

1、准备 1、安装 TexturePacker 2、安装python 3、安装Pillow-2.1.0.win-amd64-py2.7.exe  其他下载https://pypi.python....

cocos2d-x 内存优化之prv.ccz plist 文件加载

我在项目中遇到的问题解决了,我想总结的却说不出来,还好有人替我表达了。原文链接:http://www.himigame.com/iphone-cocos2d/465.html   首先对于使用过精...
  • yhhwatl
  • yhhwatl
  • 2013年08月15日 16:01
  • 2068
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:打造自己的CCZ
举报原因:
原因补充:

(最多只允许输入30个字)