三国群英传1代Sango.pak文件结构简述
--------------------------------------------------------------------------------
应某朋友之请,特发此帖,如有雷同帖在先,则请父母官弃之..
Sango.pak文件其实是一个资源包文件,在其中包含了所有时期的君主,武将,城市,城市间行军路线,及时期的属性如开始年份等等的配置文件.武将对决时的对话文字等.以及部分动画/君主旗子/武将动作/兵种动作/武将技的定义及其他资源图片,这些图象/定义资源在我们的实际修改中很少涉及,所以一般只是关注其中包含的配置文件.
用Uedit(或其他可以hex模式编辑文件的软件)打开此文件.可以从第904393字节开始的263个字节范围的数据中可以看出,这里定义了各时期配置文件在这个资源包中的地址及字体目录地址和默认字体,具体如下:
[SYSTEM]
TotalTimes = 6
TotalGeneralType=3
TotalThings = 99
Times01 = Times1.INI, 黄巾之乱
Times02 = Times2.INI, 讨伐董卓
Times03 = Times3.INI, 群雄割剧
Times04 = Times4.INI, 赤壁之战
Times05 = Times5.INI, 三国鼎立
FontDirectory = FONTS\
DefaultFont = 1
正是由此,我们判断出这个文件本身就是一个资源包类型的文件.(有编程经验的朋友应该都清楚的.)
按照这段数据的定义,我们可以知道,每一个时期,它都有对应的配置文件(在这个资源包中某个地址的一部分字节的数据)来定义这个时期的君主/武将/城市等等的设置.从程序开发的角度来看,这些配置文件的格式都应该是类似于Ini文件的格式,而且项的结构也一样.那么,我们从Sango.pak文件的开始往下看吧.
将编辑指针移动到文件开始,取消hex模式,我们可以清晰看到很多Ini格式的文本.(也从此可以看到那个时代的配置数据保存方法的原始 ),来看第一个[SYSTEM]组的数据吧:
[SYSTEM]
TIME=讨伐董卓 ;时期名称
YEAR=171 ;开始年份
TotalKing=19 ;君主数目,将会LOAD KING01-KING##, ##为君主数目
TotalGeneral=300 ;所有武将数目(包括君主、登用、被俘、在野...)
TotalCity=64 ;所有城市数目(包括占领&无人占领)
[KING01]
NAME=曹操
FLAGNUM=05 ;本人的理解是旗子
SELECT=4 ;若为0表示不可以选,其号码为音轨号码 .作用未明,望高人指点
Type = 0 ;ai type 0表示强攻,4表示强守
....
[CITY01]
NAME=襄平
KING= ;君主
MAJOR= ;太守
POPULATION=77000 ;人口
DEFENSE=369 ;防御
MONEY=2827 ;增加金钱
POS=1120 80 ;位置
FLAGPOS=1113 79 ;有效点击响应范围
RATE=3 ;暂时不明
FLAGS= ;貌似是有效与否的控制,不敢确定
....
[PATH001] ;城市间行军路线的设定
Start=襄平
End=北平
Length=12
Point=1122,78 1110,66 1093,53 1067,50 1041,51 1021,62 1008,75 986,84 967,96 948,113 932,125 909,130 893,123
....
[GENERAL]
NAME= //武将姓名
FACE= //大头照档名
skill= //特殊技
INT= //智力
STR= //武力
baseHP= //hp
baseMP= //mp
baseEXP= //exp
force= //可用兵种
useforce= //使用兵种
thing= //携带物品
CITY=成都 //所在城市
STATUS=登用 //状态
TYPE= //图形的type
LOYAL= //忠诚\君主
BLOOD= //父亲
CONSTANCY= //节操
POS= //每个时期的位置
[GENERAL000]
NAME=盗贼\
FACE=FACE\FACE001
Skill=01,02,03,04
STR=99
INT=99
BaseHP=99
BaseMP=99
BaseEXP=9999
POS=未 未 未 未 未
CITY=
Status=未
Thing=
BattleArray=方 圆 锥 雁 玄 鱼 钩
UseBattleArray=方
Force=刀
UseForce=刀
LOYAL=
BLOOD=
CONSTANCY=9
TYPE=30
SKILLLEVEL1=01
SKILLLEVEL2=01,01,01
SKILLLEVEL3=01,01,01
SKILLLEVEL4=01
[GENERAL001]
NAME=丁奉
FACE=FACE\FACE001
Skill=01,02,03,04
STR=84
INT=68
BaseHP=82
BaseMP=40
POS=未 未 未 庐江 江夏
BaseEXP=200
CITY=
Status=未
Thing=
BattleArray=方 雁 鱼
UseBattleArray=方
Force=刀 弓
UseForce=刀
LOYAL=
BLOOD=
CONSTANCY=4
TYPE=30
FLAGS=
SKILLLEVEL1=58
SKILLLEVEL2=61,63,68
SKILLLEVEL3=71,74,74
SKILLLEVEL4=81
...
这就是第一个[SYSTEM]组所定义的数据,包括了君主城市武将路径等.
在整个Sango.pak中,这个第一组就是默认未通关时默认的时期,即讨伐董卓时期的定义了,但在这个组的后面,还是有一个讨伐董卓的组,不过好象通关后选择讨伐董卓时期的话,数据定义还是现在这个组的.奥汀貌似有故意充大文件的嫌疑
由上面可以看出,此文件中已经提供了很多的详尽说明,所以修改起来应该是毫不费力的.但在修改的过程中要注意以下几个部分:
1.程序可能检测了资源包的文件长度,所以我尝试给某些原来值为空的项赋值(如给某无宝物的武将加宝物,甚至是将其2位数的数值改为1位)皆以失败告终,有哪位高手如果有好的办法还请告之...
2.编辑要在hex模式下,使用替换功能,选上ascii模式,不能直接覆盖,因为文件内的中文编码问题,往往导致直接覆盖后游戏启动失败.
3.当要覆盖的值比原值的字节长时尚未想到有解决的办法,但如果是比原值短的话,可以在替换功能中不使用ascii模式.然后将要替换的值先在另一个编辑窗口中得到其字节值.然后后面用20补齐至原值的字节长度
4.切记不要用简体中文编码的文本去替换原来里面的繁体中文
5.更多的部分留待大家补充了
6.把常用的武将/君主名的繁体对应简体的编码保存下来,如变巨-曹操,化冻-赵云,糁称-刘备等等.
可能很多朋友对我在编辑界面中能看见繁体中文的文本而不是看见乱码感觉迷惑吧?其实答案很简单d..我的系统中还有其他几个虚拟系统,其中就有繁体的windows2000(工作需要,歪打正着了 )..
没有繁体系统的朋友,其实也有很简单的解决办法去查看里面的内容,你可以在Uedit中取消hex模式编辑,然后就可以复制你要查看的那段字节数据,保存为一个.htm文件,然后用IE打开,看到乱码?不要紧,选择编码为繁体中文就可以了.什么?你的IE繁体中文支持包还没安装?
实在简陋,惭愧,惭愧..
分享本文地址:https://www.sanguogame.com.cn/issue/sgqyz1-data.html