返回列表 回复 发帖

[原创]仙剑三非存档文件修改初探(未完待续)

[原创]仙剑三非存档文件修改初探(未完待续)



  近日看到外塞之雾制作发布的DOS仙剑玩友梦幻版,于是就有了对仙剑三的非存档文件进行修改的想法。为了达到这一目的,我对这些文件进行了一些分析和研究。虽然我对仙剑三的研究远不及外塞之雾等人对仙剑DOS版的研究之深入、透彻,但亦可聊作一观,故将初步的成果公之于众,同时也希望能收到抛砖引玉的效果。诚邀各路高手对下文提出的疑点进行解答,对缺漏进行补充;如发现任何错误,敬请各位指正。

  注:本帖针对的主要是具有一定计算机水平和修改经历的读者。如果感到难以看懂其中的文字说明,那么只看看图片就可以了。


一、修改的原理及恢复方法

  众所周知,在仙剑三中,基础数据、场景、音乐、动画等文件都是储存在CPK文件中的。针对仙剑三及其外传中的CPK文件,现已涌现出一批优秀的提取器。但顾名思义,这些提取器只能提取其中的文件,而不能进行其反向过程,即将某些文件按相同的格式写入CPK文件。事实上,仙剑三或其外传的补丁中,Patcher.exe就具有这种功能。Patcher.exe是这样工作的:它检测它所在的目录下的文件夹,将\Root文件夹中所有文件复制到游戏安装目录下(不压缩为CPK),将\basedata文件夹中的文件写入"安装目录\basedata\basedata.cpk",将\scene\*中的文件写入"安装目录\scene\*.cpk。我所进行的修改正是基于此,思路是:将想要修改的文件用提取器解压,修改后按其原来目录放在Patcher.exe所在目录下,运行Patcher.exe即可。

  下述修改如需恢复,请将修改过的CPK文件从光盘复制到安装目录下原先所在的位置并替换之。如果修改前做好了备份,也可以通过Patcher.exe恢复。


二、对话的修改

  在仙三中,场景文件是安装目录下的\scene\*.cpk,而所有的对话包含在其中的\*.sce中,只要修改之即可达到目的。也许各位会发现其中的\object.asm也包含有对话,并且是以记事本为默认打开方式的,其中数据看起来似乎相当有条理。再用记事本打开*.sce就会发现其中看起来是充斥着乱码。但遗憾的是,修改object.asm对于游戏是毫无影响的,*.sce反而才是可以被程序解读的。到了外传,甚至就根本没有object.asm了。

*.sce修改要点:
  1.不能用记事本或UltraEdit的十六进制编辑,必须直接在UltraEdit中用十六进制数据代替。否则将导致文件中所有的 00 被 20 代替,而导致程序无法解读。
  2.必须用等字节的汉字GB码替换原来的汉字GB码,否则程序也会出现错误(也许通过某些方法可以做到用不等字节替换,但我一时间尚无法做到)。如不遵守1、2两条,后果详见附录一。
  3.UltraEdit对双字节字符没有很好的支持,有时会出现乱码。此时可用区位码或其他方法以GB码输入文字处理软件中,从而辨别是什么字。
  4.\n的作用是换行,\i和\r可以使它们中间的字以黄色显示。
  5.关于如何知道特定字符的GB码,这里提供一种方法:打开“开始\程序\附件\系统工具\字符映射表”,将“高级查看”钩上,在“字符集”中选择“Windows:中文(简体)”(或繁体),在“分组”中选择“按拼音分类的简体中文”(或“按注音符号分类的繁体中文”),然后即可查找所需的字。找到后点击那个字,看到下方的提示信息:“U+????(0x????):CJK统一表意符号”,其中0x后的四位数字就是其GB码。半角字符的查找可使用UltraEdit自带的ANSII代码表。

  下面是我用"E0 B1 A3 BF 5C 6E 5C 69 B2 BB D2 AA C1 E5 EE F5 C2 F0 A3 BF 5C 72"替换Q08.sce(蜀山)中的一段"5C 6E E0 B1 A3 BF D3 D6 B2 BB D2 AA C1 E5 EE F5 C1 CB C2 F0 A3 BF"(即以“啾?\n\i不要铃铛吗?\r”代替“\n啾?又不要铃铛了吗?”)得出的效果图:




  实际上,*.sce中还包含着很多的信息,但在下才疏学浅,已无法一一解读,愿有高手能指点一二。


三、买卖信息的修改

  买卖信息储存在\basedata\basedata.cpk中的\DealScript\*\*.txt中,下面以\DealScript\DragShop\q08drag.txt(蜀山凝气)为例:

以下是全文:

;--------ST--------        店铺类型
; 药店   = 0
; 武器店 = 1
; 杂货店 = 2
; 商人   = 3
;--------DK-------- 店铺是否有还价系统[0无,1有]
; M_Name $&                        商人名字
;--------MC-------- 商人性格
; 和善 = 0
; 暴躁 = 1
; 敦厚 = 2
; 软弱 = 3
; 谨慎 = 4
; 喜怒无常 = 5
;--------MC-------- 打折标识
;        FIVE        //五折
;        SIX        // 六折
;        SEVEN        // 七折
;        EIGHT        // 八折
;        NINE        // 九折
;------------------ 每折对应数据
;EntryBuy        // 进入买时对话
;EntrySale        // 进入卖时对话
;NormalAcptTalk        // 正常情况下的接收对话
;NormalCnslTalk        // 正常情况下取消的对话
;NoEnoughMoney        // 没有足够的钱时的对话
;Leave                // 离开时的对话
;HarshTalkbuy   // 严词拒绝后再买东西的对话

;[FIVE_]
;AcptQuantum                接收打折概率
;AcptTalk                        接收打折对话
;RfusQuantum                拒绝打折概率
;RfusTalk                        拒绝打折对话
;HarshQuantum                严词拒绝概率
;HarshTalk                        严词拒绝还价对话
;Patience                        经营者忍耐度
;ForceAcptTalkto        强制接收对话,[买卖双方对话]
;ForceAcptTalkback
;------------------ 经营数据类型
;        Equip(装备)
;        Prop(道具)
;-------------------------------------------


Begin,sec1        ;testsection
; --商人属性数据-----------------------
ST $0&
DK $0&
M_ID $1402&
M_Name $知月&
MC $2&
Patience $7&
BeginTalk $知月:\n我这儿货虽不多,可都是一等一的。&
EntryBuy $知月:\n有没有看到什么称心的?&
EntrySale $知月:\n客官最近手头不宽裕啊?唉,这种世道,也难怪的……&
NormalAcptTalk $知月:\n您真有眼光,挑的都是最好的。&
NormalCnslTalk $知月:\n不急,不急,慢慢看。&
NoEnoughMoney $知月:\n对不起,钱好像不够。&
Leave $知月:\n呵呵,客官您慢走。&
HarshTalkbuy $知月:\n难道我说得还不够清楚吗?小店就算背上拒客的恶名,也绝不再和你这种人做买卖!&


FIVE
AcptQuantum $0.0&
AcptTalk1 $&
AcptTalk2 $&
RfusQuantum $0.5&
RfusTalk1 $知月:\n客官您就别再逼我了,世道不好,生意难做,我也只求个养家糊口。&
RfusTalk2 $知月:\n客官,我真的没空陪您在这胡言乱语。&
HarshQuantum $0.5&
HarshTalk1 $知月:\n不知道你存的是什么心,但我不会再和你多说一句了!&
HarshTalk2 $知月:\n也不能因为我好说话就这样还价吧!&
ForceAcptTalkto1 $知月:\n客官,您可以去打听打听,我做生意从来童叟无欺,绝不缺斤少两,这价钱是一文钱也不能低了。&
ForceAcptTalkto2 $知月:\n客官,说句良心话,这样的货您还不买,要去别家店被骗了,别怪我没提醒您。&
ForceAcptTalkback $景天:\n这……说的也是。既然这样,就按原价成交吧。&
#
SIX
AcptQuantum $0.1&
AcptTalk1 $知月:\n唉,遇上您我也只能甘拜下风了。&
AcptTalk2 $知月:\n唉,您这本事,不做生意真有点可惜了。&
RfusQuantum $0.5&
RfusTalk1 $知月:\n请别再信口开河了。&
RfusTalk2 $知月:\n客官,我求您想好了再开口吧。&
HarshQuantum $0.4&
HarshTalk1 $知月:\n你、你别太过份了!不买请便!&
HarshTalk2 $知月:\n就算要得罪人,我也不卖给你了!&
ForceAcptTalkto1 $知月:\n客官,您可以去打听打听,我做生意从来童叟无欺,绝不缺斤少两,这价钱是一文钱也不能低了。&
ForceAcptTalkto2 $知月:\n客官,说句良心话,这样的货您还不买,要去别家店被骗了,别怪我没提醒您。&
ForceAcptTalkback $景天:\n这……说的也是。既然这样,就按原价成交吧。&
#
SEVEN
AcptQuantum $0.4&
AcptTalk1 $知月:\n您这眼光……唉,真厉害,看一眼就晓得东西值什么价了。&
AcptTalk2 $知月:\n唉,就这样吧,我也不贪心,有赚就行。&
RfusQuantum $0.4&
RfusTalk1 $知月:\n这货绝不止您开的价,您再考虑考虑?&
RfusTalk2 $知月:\n客官,我不骗您,这价钱真的不行,能卖我早卖了。&
HarshQuantum $0.2&
HarshTalk1 $知月:\n太欺负人了!怎么可以这样?&
HarshTalk2 $知月:\n果然是世风日下、人心不古……连买东西也有人这样得寸进尺。&
ForceAcptTalkto1 $知月:\n客官,您可以去打听打听,我做生意从来童叟无欺,绝不缺斤少两,这价钱是一文钱也不能低了。&
ForceAcptTalkto2 $知月:\n客官,说句良心话,这样的货您还不买,要去别家店被骗了,别怪我没提醒您。&
ForceAcptTalkback $景天:\n这……说的也是。既然这样,就按原价成交吧。&
#
EIGHT
AcptQuantum $0.5&
AcptTalk1 $知月:\n客官您真是识货,连还价也说得恰到好处。&
AcptTalk2 $知月:\n好好好,我没意见。&
RfusQuantum $0.35&
RfusTalk1 $知月:\n不行啊,这样我铁定赔了。&
RfusTalk2 $知月:\n这样不好吧,我连一点都赚不着了,还开什么店啊。&
HarshQuantum $0.15&
HarshTalk1 $知月:\n人善被人欺,马善被人骑,真是一点也没错!&
HarshTalk2 $知月:\n再善良的人也会有反抗的一天!不……不行!&
ForceAcptTalkto1 $知月:\n客官,您可以去打听打听,我做生意从来童叟无欺,绝不缺斤少两,这价钱是一文钱也不能低了。&
ForceAcptTalkto2 $知月:\n客官,说句良心话,这样的货您还不买,要去别家店被骗了,别怪我没提醒您。&
ForceAcptTalkback $景天:\n这……说的也是。既然这样,就按原价成交吧。&
#
NINE
AcptQuantum $0.6&
AcptTalk1 $知月:\n客官您太客气了,小店还能贪这点小钱坏了交情嘛~&
AcptTalk2 $知月:\n客官您说哪的话,当然可以啦。&
RfusQuantum $0.3&
RfusTalk1 $知月:\n货是贵了点,绝对没有偷工减料的,客官您再想想吧。&
RfusTalk2 $知月:\n您到底要货好还是价贱,这总不能两全啊。&
HarshQuantum $0.1&
HarshTalk1 $知月:\n今天算我倒霉!早点打烊回去了。恕不送客!&
HarshTalk2 $知月:\n流年不利才会遇上恶客人,我是不是该把店关了?!&
ForceAcptTalkto1 $知月:\n客官,您可以去打听打听,我做生意从来童叟无欺,绝不缺斤少两,这价钱是一文钱也不能低了。&
ForceAcptTalkto2 $知月:\n客官,说句良心话,这样的货您还不买,要去别家店被骗了,别怪我没提醒您。&
ForceAcptTalkback $景天:\n这……说的也是。既然这样,就按原价成交吧。&
#
; -------------------------------------

; --店铺经营数据-----------------------
Prop
; -- 药品
Item_ID $6202&                        ;金创药
Item_ID $6206&                        ;还神丹
Item_ID $6211&                        ;还魂香
Item_ID $6214&                        ;脉络散
Item_ID $6215&                        ;解咒草
Item_ID $6216&                        ;石南藤
Item_ID $6217&                        ;百里香
Item_ID $6218&                        ;抚心草
Item_ID $6219&                        ;定神丸
Item_ID $6225&                        ;冰蟾子
Item_ID $6226&                        ;赤炎果
Item_ID $6227&                        ;寒山枫
Item_ID $6228&                        ;紫石乳
Item_ID $6229&                        ;鬼蛤蜊
#
; -------------------------------------

end


  各个参数的作用,在其中都已写得很清楚了。修改时要注意将物品的代号与名称一起更改(直接用记事本即可更改),比如说将最后一段改为下面这样:

; --店铺经营数据-----------------------
Equip
; -- 装备
Item_ID $6414&                        ;银杏子
Item_ID $6415&                        ;舍利子
Item_ID $6416&                        ;试炼果
Item_ID $6417&                        ;八仙石
Item_ID $6418&                        ;女娲石
Item_ID $6419&                        ;金蝉蜕
Item_ID $6420&                        ;龙骨粉
Item_ID $6421&                        ;定风草
Item_ID $6422&                        ;雷鸣石
Item_ID $6423&                        ;水母精
Item_ID $6424&                        ;炎蛇丹
Item_ID $6425&                        ;仙炉灰
Item_ID $6426&                        ;金蛊王
Item_ID $6602&                        ;镇妖剑
Item_ID $6603&                        ;魔剑
Item_ID $82009&                        ;三刃封魔枪
Item_ID $82110&                        ;射日弓
Item_ID $82119&                        ;九转修罗斩
Item_ID $82220&                        ;双龙绝命针
Item_ID $82307&                        ;圣灵天煌杖
Item_ID $82316&                        ;天玄神刃
Item_ID $82005&                        ;星辰剑
Item_ID $82004&                        ;无尘剑
#
; -------------------------------------

end


  以上将店铺所卖的物品进行了大幅调整,并且将药店改为了装备店(于是有了还价系统)。效果如下:






  各位还可以试着将买卖对话及接受、拒绝、严辞拒绝概率进行修改(我本人尚未试过)。也可以试试将概率改为相加不等于一的三个数,看看会出现什么后果。


四、敌人的修改

  敌人的资料,连同所有物品的资料,都储存在basedata.cpk中的\cbdata\PAL3_Softstar.gdb中。与*.sce类似,敌人的资料也存在于\cbdata\Monster.attrib中(可用记事本打开),但修改必须在PAL3_Softstar.gdb中进行,否则同样是无效的。GDB文件同样需要在UltraEdit中替换其中数据。敌人的数据在前面的部分(后面为物品)。通过与Monster.attrib的对比,我得出了其中部分数据的含义。像ATTRIB、ASM文件这样的文件,在外传中都不复存在,使我不禁怀疑这些文件是为了让我们读懂*.sce,*.gdb而特别保留下来的(外传的引擎与仙三一样,数据格式多半也相同)。下面以“重楼变身”这一敌人为例说明数据含义。

E3 02 00 00 (RoleID[角色编号])

06 00 (RoleType[角色类型,用途不明])

D7 D4 B9 C5 CF E0 B4 AB A3 AC C4 A7 BD E7 B5 C4 C4 A7 C9 F1 B6 BC D3 D0 B1 E4 C9 ED B5 C4 C4 DC C1 A6 A3 AC BE CD CA C7 BD AB C8 AB C9 ED B5 C4 C4 A7 C1 A6 BE DB BC AF D4 DA CC E5 C4 DA A3 AC C1 EE C9 ED CC E5 C5 F2 D5 CD A3 AC B4 D3 B6 F8 CA B9 D7 D4 C9 ED C1 A6 C1 BF BB F1 B5 C3 B4 F3 B7 F9 CC E1 C9 FD A1 A3 B5 AB CA C7 B1 E4 C9 ED B5 C4 B4 FA BC DB CA C7 BB E1 C9 A5 CA A7 B4 F3 C1 BF B5 C4 C4 A7 C1 A6 A3 AC C9 F5 D6 C1 BB E1 B3 C9 CE AA B7 B2 C8 CB D6 AE CC E5 A3 AC D2 F2 B4 CB C4 A7 C9 F1 B2 BB B5 BD BD F4 D2 AA B9 D8 CD B7 B4 D3 B2 BB C7 E1 D2 D7 B1 E4 C9 ED A1 A3 D7 F7 CE AA C4 A7 BD E7 B5 DA D2 BB C7 BF D5 DF D6 D8 C2 A5 B5 C4 B1 E4 C9 ED A3 AC CA CD B7 C5 B3 F6 C1 CB CB FB CC E5 C4 DA CB F9 D3 D0 B5 C4 C4 A7 C1 A6 A3 AC D5 E2 D6 D6 C1 A6 C1 BF D7 E3 D2 D4 C5 A4 D7 AA C7 AC C0 A4 A3 AC BC B4 CA B9 CA C7 CC EC C9 F1 D2 B2 B2 BB C4 DC D3 EB D6 AE BF B9 BA E2 A1 A3 (Role Remark[降妖谱说明文字(GB码)]) 0A(说明文字终止) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (以上为为说明文字预留之空间,说明文字总共占据512字节)

42 33 39 00(RoleModelID[角色模型编号(ANSI)])

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (未知)

31 (RoleImageID[角色形象编号(ANSI)])

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (未知)

02 00 00 00 (RoleAttShui) 02 00 00 00 (RoleAttHuo) 04 00 00 00 (RoleAttFeng) 05 00 00 00 (RoleAttLei) 01 00 00 00 (RoleAttTu)

D6 D8 C2 A5 B1 E4 C9 ED (RoleName[角色名]) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (以上为为角色名称预留之空间,角色名共占据32字节)

09 00 00 00 (RoleLevel[角色等级]) B8 88 00 00 (RoleJing[精]) 00 00 00 00 (RoleQi[气]) F4 01 00 00 (RoleShen[神]) D0 02 00 00 (RoleWu[武]) 64 00 00 00 (RoleFang[防]) 06 00 00 00 (RoleSu[速]) 0F 00 00 00 (RoleYun[运]) 02 00 00 00 (RoleShui[水]) 02 00 00 00 (RoleHuo[火]) 04 00 00 00 (RoleFeng[风]) 05 00 00 00 (RoleLei[雷]) 01 00 00 00 (RoleTu[土])

00 (RS_ShuiDu[战斗开始时中水毒,00为不中,01为中,以下同]) 00 (RS_HuoDu[火毒]) 00 (RS_FengDu[风毒]) 00 (RS_LeiDu[雷毒]) 00 (RS_TuDu[土毒]) 00 (RS_WuAdd[武增]) 00 (RS_WuSub[武减]) 00 (RS_FangAdd[防增]) 00 (RS_FangSub[防减]) 00 (RS_YunAdd[运增]) 00 (RS_YunSub[运减]) 00 (RS_SuAdd[速增]) 00 (RS_SuSub[速减]) 00 (RS_Ding[定]) 00 (RS_Feng[封]) 00 (RS_Jin[禁]) 00 (RS_Mian[眠]) 00 (RS_Luan[乱]) 00 (RS_Kuang[狂]) 00 (RS_Jing[镜]) 00 (RS_Jie[界]) 00 (RS_Yin[隐]) 00 (RS_PinSi[濒死]) 00 (RS_SiWang[死亡]) 01 (RS_BiDu[避毒])

00 00 00 00 00 00 FF FF FF FF (未知)

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (未知)

40 A8 00 00 (RoleExp[经验])

00 00 00 00 (未知)

9C 03 00 00 (RoleNormalAtkID,用途不明)

00 00 00 00 00 (以上五字节分别是HouseHeight、MoveRange(移动范围)、AttackRange(攻击范围)、MoveSpeed(移动速度)、PursuitSpeed(追击速度))00 00 00(未知)

F7 00 00 00 (TheugyID_1[第一仙术]) F6 00 00 00 (TheugyID_2) 00 00 00 00 (TheugyID_3) 1D 1E 00 00 (TheugyID_B[特殊仙术,在这里是心波] 02 (TheugyLv_1[第一仙术等级]) 02 (TheugyLv_2) 02 (TheugyLv_3) 00 (未知)

08 00 00 00 (RoleQiAdd[普通攻击击中使被攻击者增加“气”数量])

00 00 00 43 00 00 10 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (未知)

00 00 00 00 (Special_PlunderID[战利品编号]) 00 00 00 00 (GetPlunderMode[得到战利品模式,用途不明]) 00 00 (Special_Plunder_Odds[得到战利品几率(%)])00 00 (StolenMoney[偷得钱数]) 00 00 00 00 (StolenPropID[偷得物品编号]) 00 00 (StolenPropNum[最高偷得物品次数]) 00 0F(GetMoney[战斗结束得到钱数])


  每个敌人的资料占据852字节。

  修改时须注意:每项数据中,各字节的顺序是颠倒的。如“重楼变身”的精 B8 88 实际表示16进制数88B8,也即十进制数35000。关于各种进制数的转换请使用Windows自带的计算器。打开“开始\程序(所有程序)\附件\计算器”,在“查看”中选择“科学型”,先选择下方的“十进制”,输入十进制数,再选择“十六进制”,即可将十进制数转化为十六进制数,反之亦然。另外,如果把武防速运等的值调得过高,可能会适得其反,而变得极低。由于个人水平所限,以上含义解释难免会有错误,且有不少未知含义的代码,这都需要大家的补充更正。

  以下附Monster.attrib中“重楼变身”部分:

RoleName:     重楼变身
RoleID:        739
RoleModelID:  B39
RoleImageID:  1
RoleType:     6
RoleNormalAtkID:            924
RoleAttShui:  2
RoleAttHuo:   2
RoleAttFeng:  4
RoleAttLei:   5
RoleAttTu:    1
RoleJing:     35000
RoleQi:       0
RoleShen:     500
RoleWu:       720
RoleFang:     100
RoleExp:      43072
RoleSu:       6
RoleYun:      15
RoleLevel:    9
RoleMoney:    0
RoleShui:     2
RoleHuo:      2
RoleFeng:     4
RoleLei:      5
RoleTu:       1
HouseHeight:  0
MoveRange:    0
AttackRange:  0
MoveSpeed:    0
PursuitSpeed: 0
TheurgyID_1:  247
TheurgyLv_1:  2
TheurgyID_2:  246
TheurgyLv_2:  2
TheurgyID_3:  244
TheurgyLv_3:  2
TheurgyID_B:  7709
StolenPropID: Null
StolenPropNum:              Null
StolenMoney:  Null
GetMoney:      9999
NormalPlunderID:            Null
NormalPlunderNum:           Null
Special_PlunderID:          Null
GetPlunderMode:             Null
RoleQiAdd:    8
Special_Plunder_Odds:       Null
RS_ShuiDu:    Null
RS_HuoDu:     Null
RS_FengDu:    Null
RS_LeiDu:     Null
RS_TuDu:      Null
RS_Ding:      Null
RS_Feng:      Null
RS_Jin:       Null
RS_Mian:      Null
RS_Luan:      Null
RS_Kuang:     Null
RS_Jing:      Null
RS_Bi:        Null
RS_Jie:       Null
RS_Yin:       Null
RS_PinSi:     Null
RS_SiWang:    Null
RS_BiDu:      1
RS_WuAdd:     Null
RS_WuSub:     Null
RS_FangAdd:   Null
RS_FangSub:   Null
RS_SuAdd:     Null
RS_SuSub:     Null
RS_YunAdd:    Null
RS_YunSub:    Null
Role_RoundNum:              -1
Role_SpecialActionID:       Null
Role_Escape:  Null
Append_0:     128
Append_1:     36
Append_2:     Null
Append_3:     Null
Append_4:     Null
Append_5:     Null
Append_6:     Null
Append_7:     Null
Append_8:     Null
Append_9:     Null
Role_Remark:  自古相传,魔界的魔神都有变身的能力,就是将全身的魔力聚集在体内,令身体膨胀,从而使自身力量获得大幅提升。但是变身的代价是会丧失大量的魔力,甚至会成为凡人之体,因此魔神不到紧要关头从不轻易变身。作为魔界第一强者重楼的变身,释放出了他体内所有的魔力,这种力量足以扭转乾坤,即使是天神也不能与之抗衡。
#
#End_Current

  其中RoleMoney、Role_RoundNum、Role_SpecialActionID、Role_Escape、Append_1~9尚不知其对应代码。

  下面是修改了“蜀山女弟子”的生命、战斗开始时状态,以及战胜所得经验值后的效果图:





五、各类物品属性修改

  上面说过,物品资料也应在Pal3_Softstar.gdb中修改。物品种类虽各有不同,但数据格式却完全相同。物品数据也存在于Item.attrib(供使用物品、剧情物品)、Plunder.attrib(尸块)、Weapon.attrib(武器)、Equip.attrib(其他装备)中。下面就以“天冥束”(装备类物品)为例:


F2 38 01 00 (Item_ID[物品编号])

CC EC DA A4 CA F8 (Item_Name[物品名称]) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (为物品名称预留32字节)

4D 43 (Item_ModelID[物品模型编号])

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (未知)

32 (Item_ImageID[物品形象编号])

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (未知)

CC EC C8 BB D0 CE B3 C9 B5 C4 B7 A2 B9 BF A3 AC D6 CA B5 D8 B7 C7 BD F0 B7 C7 D3 F1 A3 AC BC E1 D3 B2 B6 F8 CE C2 C8 F3 A3 AC CA AE B7 D6 CF A1 D3 D0 A1 A3 24 C0 D7 20 B7 C0 2B 34 30 20 CB D9 2D 31 (ItemRemark[说明文字]) 0A (说明文字结束) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (为说明文字预留512字节)

68 42 00 00 (Item_Price[价格(买入价)])

08 (Item_Type[物品类型:1为随时使用,2为战斗使用,3为非战斗使用,4为古董,5为矿石,6为剧情,7为防具,8为头戴,9为脚穿,10为饰物,11为武器,12为尸块]) 00 (Item_TypeVal) 00 (Item_Use_JingTian[为01:景天可使用,00:不可使用,下同]) 01 (Item_Use_XueJian[雪见]) 01 (Item_Use_LongKui[龙葵]) 01 (Item_Use_ZiXuan[紫萱]) 00 (Item_Use_ChangQing[长卿])

00 (Item_AttShui[水属性攻击]) 00 (Item_AttHuo[火]) 00 (Item_AttFeng[风]) 01 (Item_AttLei[雷]) 00 (Item_AttTu[土])

32 00 (Item_Old_Val[装备古值]) 00 00

00 00 (Item_Special[物品特殊,用途未知])

00  00 (Item_UseRange[使用范围:00为不能使用,01为战斗时我方单人,02为非战斗时我方使用,03为敌方单人,04为敌方全体]) 00 00 (Item_UsePlace[使用地点:00不能使用,01为战斗时,02非战斗时,03为随时])

00 00 00 00 00 00 00 00 00 00

00 00 (Item_Effect_Jing[装备精恢复(%)]) 00 00 (Item_Effect_Qi[气恢复])00 00 (Item_Effect_Shen[神恢复])

00 00 (Item_Effect_Wu[装备对武影响]) 28 00 (Item_Effect_Fang[对防影响]) FF FF (Item_Effect_Su[对速影响]) 00 00 (Item_Effect_Yun[对运影响])

00 00 (Item_Effect_Shui[装备对水属性影响]) 00 00 (Item_Effect_Huo[对火影响]) 00 00 (Item_Effect_Feng[对风影响]) 00 00 (Item_Effect_Lei[对雷影响]) 00 00 (Item_Effect_Tu[对土影响])

00 (Item_ShuiDu[为01有一定几率使被攻击者中水毒,为00则无,下同]) 00 (Item_HuoDu[火毒]) 00 (Item_FengDu[风毒]) 00 (Item_LeiDu[雷毒]) 00 (Item_TuDu[土毒])

00 (Item_WuAdd1[非装备:武增]) 00 (Item_WuSub1[武减]) 00 (Item_FangAdd1[防增]) 00 (Item_FangSub1[防减]) 00 (Item_YunAdd1[运增]) 00 (Item_YunSub1[运减]) 00 (Item_SuAdd1[速增]) 00 (Item_SuSub1[速减])

00 (Ding[武器:使敌方定]) 00 (Feng[封]) 00 (Jin[禁]) 00 (Mian[眠]) 00 (Luan[乱]) 00 (Kuang[狂]) 00(Jing[镜]) 00 (Bi[壁]) 00 (Jie[界]) 00 (Yin[隐]) 00 (PinSi[濒死]) 00 (SiWang[死亡])

00 (BiDu1[避毒]) 00 (BiXie1[避邪]) 00 (TuiMo1[退魔]) 00 (ShenYan1[神眼]) 00 (JingJin1[精进])

00 00 (未知)

00 00 (水毒几率) 00 00(火毒几率) 00 00 (风毒几率) 00 00 (雷毒几率) 00 00 (土毒几率)

00 00 (Item_WuAdd2) 00 00 (Item_WuSub2) 00 00 (Item_FangAdd2) 00 00 (Item_FangSub2) 00 00 (Item_YunAdd2) 00 00 (Item_YunSub2) 00 00 (Item_SuAdd2) 00 00 (Item_SuSub2)

00 00 (定几率) 00 00 (封几率) 00 00 (禁几率) 00 00 (眠几率) 00 00(乱几率) 00 00 (狂几率) 00 00 (镜几率) 00 00 (壁几率) 00 00 (界几率) 00 00 (隐几率) 00 00 (眠几率) 00 00 (乱几率) 00 00(狂几率) 00 00 (濒死几率) 00 00 (死亡几率)

00 00 (BiDu2) 00 00 (BiXie2) 00 00 (TuiMo2) 00 00 (ShenYan2) 00 00 (JingJin2)

00 00 00 00 (未知)

00 00 (Item_Lian[连击次数]) 00 00 (Item_BaoJi[加暴击几率(%,下同)]) 00 00 (Item_TeJi[加特技威力]) 00 00 (Item_QiSub[气耗减]) 00 00 (Item_ShenSub[神耗减])

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (未知)


修改须知及疑点:
  1.负数的表示方法:十六进制负数 –XXXX 表示为10000-XXXX(并且前后倒置),如FF FF 在文件中表示 –1,F6 FF 表示 -10等。所以只要看到较大的数字,一般即可认定为是负数。但区分正负数的界限尚未确定。
  2.非武器的装备如果有五灵属性,则只增加Item_AttShui(或Huo Feng Lei Tu),而不增加Item_Effect_Shui等五项;而武器类则两样都加。但有的装备连Item_AttShui等五项也不加(如“圣灵披风”),就不知何故了。
  3.修改装备的避毒或物品的增减武防速运或避邪、退魔、神眼、精进这几项,不需要改动Item_WuAdd1等项(全部为00),只需改动Item_WuAdd2等项(01 00为具有此种性质,00 00为不具有)。
  4.“隐身符”可以使人物在战斗开始时有一定几率处于“隐”状态,但在PAL3_Softstar.gdb中我却找不到控制它实现的代码。
  5.无论实际上五灵属性值加了多少点,在装备中都只显示为1点,见下面图示(景天和紫萱的五灵属性各增2点(第三图),但在装备栏中只显示为1点(第1、2图))。
  6.经实验,可以通过攻击给敌方加上正性状态镜、壁、界、隐。


  以下附Equip.attrib中“天冥束”一段:

Item_Name:    天冥束
Item_ID:       80114
Item_ModelID: MC
Item_ImageID: 2
Item_Type:    8
Item_TypeVal: 0
Item_UseRange:              0
Item_UsePlace:              0
Item_Use_JingTian:          Null
Item_Use_XueJian:           1
Item_Use_ChangQing:         Null
Item_Use_LongKui:           1
Item_Use_ZiXuan:            1
Item_Old_Val: 50
Item_Price:   17000
Item_AttShui: 0
Item_AttHuo:  0
Item_AttFeng: 0
Item_AttLei:  1
Item_AttTu:   0
Item_Special: 0
Item_Effect_Shui:           0             Null
Item_Effect_Huo:            0             Null
Item_Effect_Feng:           0             Null
Item_Effect_Lei:            0             Null
Item_Effect_Tu:             0             Null
Item_Effect_Jing:           0             Null
Item_Effect_Qi:             0             Null
Item_Effect_Shen:           0             Null
Item_Effect_Wu:             0             Null
Item_Effect_Fang:           0             40
Item_Effect_Su:             0             -1
Item_Effect_Yun:            0             Null
Item_ShuiDu:  0             0
Item_HuoDu:   0             0
Item_FengDu:  0             0
Item_LeiDu:   0             0
Item_TuDu:    0             0
Item_Ding:    0             0
Item_Feng:    0             0
Item_Jin:     0             0
Item_Mian:    0             0
Item_Luan:    0             0
Item_Kuang:   0             0
Item_Jing:    0             0
Item_Bi:      0             0
Item_Jie:     0             0
Item_Yin:     0             0
Item_WuAdd:   0             0
Item_WuSub:   0             0
Item_FangAdd: 0             0
Item_FangSub: 0             0
Item_SuAdd:   0             0
Item_SuSub:   0             0
Item_YunAdd:  0             0
Item_YunSub:  0             0
Item_PinSi:   Null          0
Item_SiWang:  0             0
Item_BiDu:    0             0
Item_BiXie:   0             0
Item_TuiMo:   0             0
Item_ShenYan: 0             0
Item_JingJin: 0             0
Item_Lian:    0
Item_BaoJi:   0
Item_TeJi:    0
Item_QiSub:   0
Item_ShenSub: 0
Item_ComposeID_1:           0
Item_ComposeID_2:           0
Item_Compose_PropID:        0
Item_StoneID: 0
Item_SmeltPropID:           0
Item_SmeltPrice:            0
Item_Remark:  天然形成的发箍,质地非金非玉,坚硬而温润,十分稀有。$雷 防+40 速-1
#
#End_Current


  以下是修改“无尘剑”和“圣灵披风”资料后的效果图(没有改原来的说明文字,但改动了各项属性,注意左上角的数值):







附录一:错误修改的一些后果(以下图均在蜀山)

  错误修改会导致一些奇异的现象,其中有的是很有趣的,列举其主要者如下:

1.读取场景文件速度减慢甚多,且容易跳出:
2.无法与某些人物对话;
3.任务完成判定紊乱,包括(1)某些支线任务消失;(2)某些主线任务提前,如初入蜀山时即可与邪剑仙交战(不过在那时我无法战胜它),如下图(注意人物那极少的精气神(相对于正常对敌邪剑仙时而言):



4.某些人物形象无法正常显示,如下图;




5.如图,人物竟然可以穿越黄色的箭头到达下方。




附录二:《仙剑奇侠传三》、《仙剑奇侠传三外传·问情篇》中能学到所有双属性仙术的仙术书唯一安排方法的推导与证明

  这一篇我曾经在某一跟帖里发过,但没有引起重视。现在仍有人不时提出此问题,所以附在这篇里一并贴上来。


双属性仙术列举如下:
风露饮  :水+风
风雪冰天:水+风
灵血咒  :水+火
举火燎天:火+风
星沉地动:火+土
烈焰燃雷:火+雷
赎魂光  :水+雷
天魔附体:雷+土

为学得某双属性仙术,必须由双属性中一种属性的人物学习双属性中另一属性的仙术,或者由其他三种属性的人物同时学习这双属性中两种属性的仙术。但因为属性相克的原因,并非上述提到的每种情况都能够实现。以1代表风,2代表雷,3代表水,4代表火,5代表土,nm代表n属性的人物学习m属性的仙术书,以u代表“或”,以n代表“且”。因仙术书每种仅一本,所以有am n bm=φ(1≤a≠b≤5,1≤m≤5)。又因雷克风,火克雷,土克水,水克火,风克土,故12=24=35=43=51=φ。以下逐一分析:
水+风:31 u 13 u (23 n 21) u (43 n 41) u (53 n 51)=31 u 13 u (23 n 21)
水+火:34 u 43 u (13 n 14) u (23 n 24) u (53 n 54)=34 u (13 n 14) u (53 n 54)
火+风:41 u 14 u (21 n 24) u (31 n 34) u (51 n 54)=41 u 14 u (31 n 34)
火+土:45 u 54 u (14 n 15) u (24 n 25) u (34 n 35)=45 u 54 u (14 n 15)
火+雷:42 u 24 u (12 n 14) u (32 n 34) u (52 n 54)=42 u (32 n 34) u (52 n 54)
水+雷:32 u 23 u (12 n 13) u (42 n 43) u (52 n 53)=32 u 23 u (52 n 53)
雷+土:25 u 52 u (12 n 15) u (32 n 35) u (42 n 45)=25 u 52 u (42 n 45)

下面开始计算:
[31 u 13 u (23 n 21)] n [34 u (13 n 14) u (53 n 54)]=(31 n 34) u (31 n 53 n 54) u (13 n 34) u (13 n 14) u (23 n 21 n 34)
[(31 n 34) u (31 n 53 n 54) u (13 n 34) u (13 n 14) u (23 n 21 n 34)] n [41 u 14 u (31 n 34)]=(31 n 34) u (13 n 34 n 41) u (13 n 14)
[(31 n 34) u (13 n 34 n 41) u (13 n 14)] n [45 u 54 u (14 n 15)]=(31 n 34 n 45) u (13 n 34 n 41 n 45) u (13 n 14 n 45) u (13 n 14 n 15)
[(31 n 34 n 45) u (13 n 34 n 41 n 45) u (13 n 14 n 45) u (13 n 14 n 15)] n [42 u (32 n 34) u (52 n 54)]=(31 n 34 n 45 n 42) u (31 n 34 n 45 n 32) u (13 n 34 n 41 n 45 n 42) u (13 n 34 n 41 n 45 n 32) u (13 n 14 n 45 n 42) u (13 n 14 n 15 n 42)
[(31 n 34 n 45 n 42) u (31 n 34 n 45 n 32) u (13 n 34 n 41 n 45 n 42) u (13 n 34 n 41 n 45 n 32) u (13 n 14 n 45 n 42) u (13 n 14 n 15 n 42)] n [32 u 23 u (52 n 53)]=(31 n 34 n 45 n 42 n 23) u (31 n 34 n 45 n 32) u (13 n 34 n 41 n 45 n 32)
[(31 n 34 n 45 n 42 n 23) u (31 n 34 n 45 n 32) u (13 n 34 n 41 n 45 n 32)] n [25 u 52 u (42 n 45)]=(31 n 34 n 45 n 42 n 23)
即31 n 42 n 23 n 34 n 45

计算完毕,得出结论:
唯一的一种方法是:
人物属性(人物)        仙术书
风(景  天、王蓬絮)        —
雷(龙  葵、雷元戈)        水境
水(紫  萱、温  慧)        风源、炎宿
火(长  卿、南宫煌)        雷觉、土隐
土(雪  见、星  璇)        —

推导及证明完毕。█

  如果看不懂推导的过程,那么只需记住最后的结论即可。如果不相信这一推导,那就寄望于能有数学高手用使你看得懂的方法导出此结论吧:

唯一的一种方法是:
人物属性(人物)        仙术书
风(景  天、王蓬絮)        —
雷(龙  葵、雷元戈)        水境
水(紫  萱、温  慧)        风源、炎宿
火(长  卿、南宫煌)        雷觉、土隐
土(雪  见、星  璇)        —



2005-5-20:

1.破译控制战斗开始时中毒状态以及属性增减状态的代码。
2.补上序文。


2005-5-22:

补上“物品修改”部分。


(未完待续,今后将不定期更新)

[ 本帖最后由 e时代之猪 于 2006-7-29 20:51 编辑 ]
4

评分次数

  • ★水灵神★

  • Nerimth

  • 换巢鸾凤

  • e时代之猪

  [size=2][color=#a0522d]          道通天地有形外 思入風雲變態中          [/color] [color=darkblue]  眼底煙霞付筆端 忽耽冷趣忽濃歡 畫船燈火層寮月 都作登州海市觀  [/color] [color=#228b22]逍遙漆園吏 冥沒不知年 世事浮雲外 閒居大道邊 古來同一馬 今我已忘筌[/color] [color=brown]          高不成,低不就 博不精,專不透          [/color]
哇………………好厉害,我一句也看不懂哦………………好深奥啊,不过我强烈推荐加3精,斑斑同意吗??(不过既然是仙3修改,是不是转仙3呢?)

[ Last edited by hf53b on 2005-5-16 at 05:02 ]
加3精……
厉害啊:wahaha::wahaha::han::wahaha:
  原帖已更新,请各位多提出自己的见解。


2005-5-20:

1.破译控制战斗开始时中毒状态以及属性增减状态的代码。
2.补上序文。


2005-5-22:

补上“物品修改”部分。
  [size=2][color=#a0522d]          道通天地有形外 思入風雲變態中          [/color] [color=darkblue]  眼底煙霞付筆端 忽耽冷趣忽濃歡 畫船燈火層寮月 都作登州海市觀  [/color] [color=#228b22]逍遙漆園吏 冥沒不知年 世事浮雲外 閒居大道邊 古來同一馬 今我已忘筌[/color] [color=brown]          高不成,低不就 博不精,專不透          [/color]
Originally posted by 易之道 at 2005-5-23 01:19 AM:
  原帖已更新,请各位多提出自己的见解。


2005-5-20:

1.破译控制战斗开始时中毒状态以及属性增减状态的代码。
2.补上序文。


2005-5-22:

补上“物品修改”部分。
唯一的意见:太多了…………且很深奥,看不懂啊………………………………
提示: 作者被禁止或删除 内容自动屏蔽

圣童降临
不错!

还是近几年的游戏好改啊,不论是DIABLO、星际还是仙剑3,脚本都写得十分明确,不像DOS游戏的脚本,几乎全是代码……
Originally posted by 外塞之雾 at 2005-5-25 13:04:
不错!

还是近几年的游戏好改啊,不论是DIABLO、星际还是仙剑3,脚本都写得十分明确,不像DOS游戏的脚本,几乎全是代码……
呵呵,外塞天天泡在dos版pal里面,看这些自然觉得简单^_^
太强了,强到不适合我~~~

膜拜楼主~
仙剑OL 2测留念
我在玩外传。
把basedata解开,目录名改成basedata.cpk就行了。
启动有点慢
[img]http://stat.popo.163.com/?u=redtin@163.com[/img] 点此给我发送消息
哈哈,我喜欢的就是这种详细又深的东西,谢谢楼主了,希望楼主把战斗时的一些计算也列上来
仙剑不是游戏,不是故事,而是我人生中刻骨铭心的一段经历
你永远活在我心中,你是美与爱与纯的化身。我心中最重要的位置永远留给你,那里是你幸福的港湾
仙剑升华论坛招聘斑竹
哇,,我最讨厌看大串大串的字符了
看来只能靠自己拼命打怪升级赚钱了
[img]http://bbs.ccqtv.com/discuz/attachments/43_of8ZjpeTbb4j.jpg[/img] 相爱不如相知与其执著痴念不如化为祝福不要让爱你的人被你的爱所磨蚀反过来以你的爱让她得到力量展翅高飞!
主要是有点麻烦
大宇现在都把数据压缩成CPK~ ·#¥……¥%……
可不可以把游戏改为非独占?
返回列表