- UID
- 3252586
- 主题
- 2
- 阅读权限
- 50
- 帖子
- 62
- 精华
- 3
- 积分
- 1031
- 金钱
- 618
- 荣誉
- 40
- 人气
- 0
- 在线时间
- 9 小时
- 评议
- 0
- 帖子
- 62
- 精华
- 3
- 积分
- 1031
- 金钱
- 618
- 荣誉
- 40
- 人气
- 0
- 评议
- 0
|
如果你对于EVM文件中指令代码还有问题, 可参详下帖的1楼和12楼.
http://game.ali213.net/thread-2621026-1-1.html
和这个帖子:
http://game.ali213.net/thread-2621720-1-1.html
--------------------------------------------------------------------------------------------------------------
3月11日更新: 调查人物E有卡A
在剧本中写上这句话:
調査:(大名家::織田信長.外交同盟(織田信長))==(1)
它在EVM中表现为:
0A 80 22 00 91 02 48 08 13 00 D8 09 80 00 00 00
将其改为:
0A 80 22 00 03 49 A0 3F 1E 00 8F 7F 80 00 00 00
就可以了. 这句话表示类似以下的功能:
调查:(人物E.所持卡(卡A))==1
--------------------------------------------------------------------------------------------------------------
让剧本编写此功能更简便一步的方法!不用查表!(ericsim提出)
代入人物E:(要发卡人物)
代入カードA:(卡名)
更新:(大名家::織田信長.外交同盟(織田信長))(同盟)//这句话源码:10 06 00 00 91 02 48 08 13 00 D8 09
//将它改为10 04 00 00 03 49 A5 3F 1E 00 8D 7F
有这三句话就可以实现为人物发卡了.
后面那段数字代码实现类似为 "更新:(人物E.所持卡(卡A))(1)" 的功能. 就不用再去找人物和卡的EVM代码了.
-------------------------------------------------------------------------------------------------------------
以下为正文:
先给大家发个剧本, 这个剧本执行的结果(发生契机:进入任意设施)是人物青山忠成多出来一张剑客卡.
请大家试验看看成功与否.
首先看这几条源代码语句:
1.更新:(カード::カードA.所持フラグ)(1)
这句话在EVM文件中表示为:
10 04 00 00 9E 00 88 7F
其中10为指令代码; 04 00 00为更新后的值, 即1; 9E 00代表属性, 此处为卡持有标志(所持フラグ, 卡类的第二个属性); 88 7F代表需要更新属性的变量, 此处为卡A(カード::カードA). 通过这种方式可以获得卡A在更新语句中(注意:在其它语句中代码不一样)的EVM代码:88 7F.
如果改为:
更新:(カード::風林火山.所持フラグ)(1)
则:10 04 00 00 9E 00 57 65
通过这种方式获得了风林火山卡的更新语句EVM代码57 65
2.更新:(人物A.体力)(100)
10 90 01 00 03 3C 80 3F
同理, 可以获得人物A的更新语句EVM代码80 3F.
03 3C是人物的体力属性. 其实人物有很多的属性, 大部分都被编辑器隐藏了. 以前有帖子考证出来一个隐居标志的属性, 代号03 47, 就是隐藏属性之一. 根据日本人的说明, 人物的属性约有200个. 有关人物隐藏属性的帖子可以看这个:
http://game.ali213.net/thread-1982287-1-1.html
3.更新:(大名家::織田信長.外交同盟(大名家::武田信玄))(同盟)
一般来说更新语句只占八个字节, 但也有例外, 那就是对象的属性为函数的情形, 比如说本例中大名家类的属性外交同盟, 就是一个以大名家类型为参数的函数. 这时更新语句就扩充出了四个字节用来存放参数的数据. 本语句在EVM中:
10 06 00 00 91 02 48 08 13 00 C8 11,
上句中的13 00 C8 11就是代入函数的参数, 为武田信玄大名家的番号.
了解了以上的话, 再来看下面.
非主角发卡的实现:
其实人物类有一个所持卡属性, 代码03 49, 上面说到的差不多, 它是一个函数, 参数为卡对象. 那么非主角发卡就由这条语句实现:
10 04 00 00 03 49 03 00 1E 00 57 65
前面四位不多说;
03 49是人物的所持卡属性;
03 00代表人物, 此处为青山忠成, 可以代为人物A, 主人公之类的不确定的变量, 它们的EVM代码获取方法我已经在本文开头讲到了.
1E 00是卡类的第一个属性, 代表卡番号.
57 65代表卡, 此处为风林火, 可以代为卡A.
将这条语句写入EVM文件, 直接编译, 生成剧本, 再进入游戏就可以看到效果了.
举个例子:
太閤立志伝5イベントソース
//青山忠成搞到风林火山卡
チャプター:{//脚本开始
イベント:事件1{//事件1 开始
属性:何度でも
発生契機:室内画面表示後(無効,無効)
発生条件:{
}//条件结束
スクリプト:{ //执行开始
更新:(大名家::織田信長.外交同盟(大名家::武田信玄))(同盟)
}//执行结束
}//事件1 结束
}//脚本结束
编译这个文件, 然后从生成的EVM文件中找到10 06 00 00 91 02 48 08 13 00 C8 11, 这句话代表让织田家与武田家结盟,
将其改为10 04 00 00 03 49 03 00 1E 00 57 65,
直接编译EVM, 生成剧本, 进入游戏, 然后进入任一个设施, 青山忠成这个人物就有了风林火山这张卡.
具体大家可以实验一下.
让剧本编写此功能更简便一步的方法!不用查表!(ericsim提出)
代入人物E:(要发卡人物)
代入カードA:(卡名)
更新:(大名家::織田信長.外交同盟(織田信長))(同盟)//这句话源码:10 06 00 00 91 02 48 08 13 00 D8 09
将它改为10 04 00 00 03 49 A5 3F 1E 00 8D 7F 有这三句话就可以实现为人物发卡了.
后面那段代码实现类似为 "更新:(人物E.所持卡(卡A))(1)" 的功能. 就不用再去找人物和卡的EVM代码了.
到此为止, 四大难题都解决了吧. 其实我最关心的是时间流逝的问题, 到现在只有一点线索, 就是状况中有两个(属性), 表示休养标志和宿泊标志的. 可惜一点进展都没有.
唉, 其实写帖子比研究文件更累更让人不爽.
版主加精吧!
希望大家支持!
我的QQ:249476488
E-mail:nklinan@163.com
有什么意见和建议请与我联系.
PS:大家研究研究41和42这两条指令吧. 41可以用来改变主命状态; 42有效, 但是还不知道有什么用. 执行42 00 00 00会现这个, 大家知道他是谁吗?
[ 本帖最后由 nklinan 于 2009-3-11 20:19 编辑 ] |
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
-
总评分: 金钱 + 90
+ 5
查看全部评分
|