ryan_knight_12吧 关注:46,281贴子:2,740,562

回复:【教程】eve文件详解、如何自定义剧情、如何制作称霸模式

取消只看楼主收藏回复

今天就更到这里。之后,我将会详细说说不同的剧情语句,以帮助大家丰富剧情内容。


IP属地:北京48楼2019-04-26 14:29
收起回复
    下面讲讲剧情语句(开头的ffffffff00 04自动略去)
    显示类:主要是对007f 0e这个类的函数调用
    1号函数:(显示CG图,san11pkres.bin 10~58号图片)
    显示X1号CG:
    X1 42 04 00 7f 0e 0201 00
    2号函数:(画面切换)
    花X1秒时间切入黑暗:
    X1 02 04 00 02 04 007f 0e 10 02 00
    切入设置好的场景:
    3e8 02 04 ff 02 04 007f 0e 10 02 00
    3号函数:(CG图消失)
    取消cg
    00 7f 0e 03 00 00
    4号函数:(设定之后要切入的场景)
    设定场景序号为X1:(san11pkres.bin 59~66号图片,若X1为-1,代表大地图)
    00 7e 04 X1 09 04 007f 0e 04 02 00
    d号函数:(移动地图)
    移动地图至武将X1处,移动耗时X2
    X2 02 04 X1 14 04 007f 0e 0d 02 00
    移动地图至城池X1处,移动耗时X2
    X2 02 04 X1 16 04 007f 0e 0a 02 00
    移动地图至坐标X1X2,耗时X3
    X3 02 04 X2 02 04 X102 04 00 7f 0e 09 03 00
    11号函数:(一闪而过的动画,san11pkres.bin67~89号图片)
    一闪而过的动画X1
    ffffffff 02 04ffffffff 5d 04 ffffffff 02 04 ffffffff 02 04 ffffffff 02 04 X1 43 04 00 7f 0e11 06 00
    1a号函数:(决战称霸模式关卡开头的关卡名字幕动画)
    播放关卡X1名字(0~19为20个关卡的关卡名,20~39为20个关卡胜利动画,40~59为20个关卡败北动画):
    9c4 02 04 X1 8f 04 007f 0e 1a 02 00
    其他的一些与007f 0e无关的显示相关函数:
    高亮坐标 X1, X2
    01 01 04 X2 02 04 X102 04 00 80 0e 0d 03 00
    取消所有坐标高亮
    00 80 0e 0f 00 00
    画面暂停X1毫秒:
    00 01 04 ffffffff 0204 X1 02 0c 00 03 00


    IP属地:北京56楼2019-04-27 16:05
    回复
      声音类:对008a 0e类的操作
      0号函数:(播放一个很短的音效)
      播放音效X1
      64 02 04 X1 5d 04 008a 0e 00 02 00
      8号函数:(设置游戏的BGM)
      设置背景音乐为X1号BGM
      64 02 04 01 01 04 X15e 04 00 8a 0e 08 03 00
      对话框及MSG设置:
      人物X1对人物X2说msgX3,对话框中说话者名字为msgX4
      (若X1=-1,则为旁白)
      (若X4=-1,则采用人物X1的名字)
      X4 12 04 X2 14 04 X114 04 X3 12 0c 0b 04 00
      编辑MSG中出现的[0x02][0x0A]、[0x02][0x0B]指的与这个msg相关的0号武将、1号武将。。。
      使用上述对话框的语句,0号武将([0x02][0x0A])默认为X1,1号武将默认为X2。
      那么,如何设置2号武将([0x02][0x0C]),3号武将。。。呢?需要用到如下语句:
      设置人物X1为与MSG相关的X2号武将:
      X1 14 04 X2 73 04 007d 0e 0a 02 00
      编辑MSG中出现的[0x02][0x32][0x32]代表与这个msg相关的0号城市,[0x02][0x14][0x33]代表与这个msg相关的0号势力。。设置这两个的语句为:
      设定城池X1为与MSG相关的X2号城池
      X1 16 04 X2 77 04 007d 0e 0e 02 00
      设定武将X1所属势力为与MSG相关的X2号势力
      X1 14 0e 1b 00 04 X274 04 00 7d 0e 0b 02 00


      IP属地:北京57楼2019-04-27 16:05
      回复
        整理个武将类的函数整理个半天,明天继续吧。


        IP属地:北京59楼2019-04-27 16:07
        回复
          武将属性读取、设置:
          这一块的函数比较多,在列述之前,有必要做一些概念讲解。
          对武将属性的读写,实际上是调用武将类的函数,函数语句可以表述为如下形式:
          【输入N】。。。【输入2】【输入1】【武将类】【末尾三双字】
          末尾三双字,形式为:
          X N 0,其中X为函数号,Y为这个函数所需的输入数量,最末的双字锁定为0
          武将类,可以直接以X 14 0e表示(X为武将id),也可以通过调用其他类的函数获取,比如,调用这个玩家势力类的4号函数,可以得到玩家君主的武将类:
          00 1d 0e 04 00 0e
          其中,00 1d0e代表玩家势力,04代表4号函数
          更复杂一点的用法,首先调用武将X类的1b号函数,即读取所属势力,来得到武将X的所属势力的势力类,接着调用这个势力类的4号函数,得到该势力的君主的武将类。:
          X 14 0e 1b 00 0e 04 00 0e
          这三个三双字连起来,就是武将X所属势力的君主的武将类
          后面的输入,可以直接声明一个值,也可以是调用其他类的函数
          直接声明一个值,那就是一个三双字:
          X Y 04
          这里X为所声明的值,Y为该值的类别(这个值代表武将id?还是代表城市id?还是。。。?)


          IP属地:北京69楼2019-04-28 14:23
          回复
            常用到的类别有:
            01 变量(理论上所有其他类别都可以用变量替代)
            01 逻辑值
            区别是变量还是逻辑值,需要用到这个输入往前的一个双字,如果是变量,那么往前的一个双字会出现原本应该是04,却变成06或17的情况。
            02 常数
            12 MSG id
            13势力id
            14 武将id
            15 据点id(含关港)
            16 城市id
            18宝物id
            1a官职id
            1b爵位id
            1e部队id
            22国号id
            26剧本编号
            31五维id(0、1、2、3、4分别代表统武智政魅)
            3c宝物状态
            3d玩家势力序号
            3f部队目标
            41 兵种\兵装id(剑、枪、戟、弩、骑等。。)
            45 设施菜单中选项id
            48部队菜单中选项id
            5d音效id
            5e BGM id
            如果输入是一个常数0x64,那么就写成64 0204。如果输入是0x64号武将,就写成64 1404. 以此类推。
            输入也可以是调用其他类的函数,比如,如果输入是武将X所属势力的君主,那么输入将写成:
            X 14 0e 1b 00 0e 04 00 04
            这里也可以看出,输入都是以04为最末的双字,类都是以0e为最末的双字。
            接下来列述的武将类函数,都不写十六进制码的表示形式了,而是写出函数号、所需的输入数量,每个输入的类别。结合上面所讲的概念,不难根据这些信息写出函数的十六进制码。


            IP属地:北京70楼2019-04-28 14:24
            收起回复
              武将类的各号函数为:
              04号函数:读取其所属,无输入,返回据点id
              06号函数:读取武将所在部队,无输入,返回部队
              1a号函数:读取其所属军团,无输入,返回军团
              1b号函数:读取其所属势力,无输入,返回势力
              1e号函数:读取其身份,无输入,返回常数
              21号函数:读取其忠诚,无输入,返回常数
              22号函数:读取其功绩,无输入,返回常数
              29、2a、2b、2c、2d号函数:分别为读取统、武、智、政、魅,无输入,返回常数
              3b号函数:返回其是否处于留守状态的逻辑值,无输入
              43号函数:返回是否处于任务中的逻辑值,无输入
              45号函数:返回是否在野或未发现的逻辑值,无输入
              47号函数:设置忠诚,输入1为常数(忠诚)
              48号函数:设置功绩,输入1为常数(功绩)
              49号函数:设置以月为单位的留守计数,输入1为常数(月数)
              4a号函数:设置以旬为单位的留守计数,输入1为常数(旬数)
              4b号函数:设置夫妻,输入1为武将(配偶)
              51号函数:设置所在,输入1为据点(所在)
              53号函数:设置头像id,输入1为常数(头像id)
              5b号函数:增减忠诚,输入1为常数(忠诚变化数)
              5c号函数:增减功绩,输入1为常数(功绩变化数)
              关于增减函数额外说一句,如果是增加,那么常数定义形式为X 02 04。如果是减少,那么常数定义形式为X 02 15 01 00 04。
              5e号函数:设置五维,输入1为五维id,输入2为常数(五维值)
              68号函数:设置官职,输入1为官职(官职id)
              6e号函数:该武将被登庸,输入1为势力(加入势力),输入2为武将(登庸者)
              6f号函数:设置所属,输入1为据点(所属)
              这个列表并不完善,对其他函数的探索有两种方法:
              1、对原版eve文件的探索解析
              2、对游戏汇编代码的阅读(调用武将类函数的地址在66F47C处)


              IP属地:北京71楼2019-04-28 14:24
              收起回复
                势力属性读取设置:
                势力类亦有多种表述方式:
                1. 00 1d 0e,代表玩家势力,确切的说,代表处于当前回合的玩家势力。
                2. 调用武将类的1b号函数获取武将所属势力类,即X 14 0e 1b 00 0e,代表武将X所属势力
                势力类的各号函数为:
                04号函数:读取势力君主,无输入,返回武将
                05号函数:读取势力军师,无输入,返回武将
                10号函数:读取势力爵位,无输入,返回爵位id
                16号函数:读取势力支配都市数量,无输入,返回常数
                1b号函数:设置势力的玩家势力序号,输入1为玩家势力序号
                28号函数:设置势力国号,输入1为国号
                29号函数:设置势力军师,输入1为武将(军师)
                2a号函数:设置势力爵位,输入1为爵位
                2d号函数:设置势力技巧P,输入1为常数(技巧值)
                2e号函数:增减势力技巧P,输入1为常数(技巧值变化)
                2f号函数:替换势力君主,输入1为常数(武将id,如果常数为-1,将由玩家选择继承人)
                (X2 0204 X1 14 0e 1b 00 0e 2f 01 00:替换武将X1势力君主为武将X2)
                30号函数:势力灭亡,输入1为逻辑值0(00 01 04),输入2为灭亡该势力的势力
                游戏汇编代码中调用势力类函数的地址是670FBC


                IP属地:北京72楼2019-04-28 14:25
                收起回复
                  部队类函数:
                  一般,通过调用武将类的6号函数,来获取武将所在部队的武将类:
                  X 14 0e 06 00 0e(武将X所在部队)
                  部队类各号函数:
                  05号函数:获取横坐标,无输入,返回常数
                  06号函数:获取纵坐标,无输入,返回常数
                  0d号函数:获取士兵数,无输入,返回常数
                  16号函数:设置部队目标为坐标,输入1为目标种类,输入2、3为常数(横、纵坐标)
                  常用目标种类一览:
                  01 移动至
                  03 攻击(优先攻击据点)
                  05 驱逐(如果敌军全部退出据点范围,就撤退,否则追击)
                  09 征服(优先清扫据点范围内的敌方部队)
                  17号函数:设置部队目标为据点,输入1为目标种类,输入2为据点id
                  18号函数:设置部队目标为部队,输入1为目标种类,输入2为部队
                  1c号函数:设置士气,输入1为常数
                  1d号函数:士气增减,输入1为常数
                  23号函数:删除部队,无输入
                  28号函数:获取该部队与另外一个部队之间的距离,输入1为部队,返回常数
                  宝物类函数:
                  宝物类,一般通过X18 0e表示,X为宝物id
                  宝物类各号函数:
                  04号函数:读取宝物状态,无输入,返回常数
                  05号函数:读取宝物所属,无输入,返回武将
                  08号函数:设置宝物所属,输入1为武将
                  0a号函数:设置宝物状态,输入1为宝物状态(01为登场,00为未登场)


                  IP属地:北京74楼2019-04-28 14:26
                  收起回复
                    决战称霸、新手教程设置:
                    主要是对00 8c 0e这个类进行操作。
                    03号函数:读取剩余天数,无输入,返回常数
                    0a号函数:禁用SL(存档的储存读取),输入1为逻辑值(1为禁用,0为不禁用)
                    0c号函数:设置设施菜单中某选项不可使用,输入1为要设置的设施菜单选项id(若该输入为-1,则设置所有选项),输入2为逻辑值(是否可以使用,1为不可使用,0为可使用)
                    0d号函数:设置部队菜单中某选项不可使用,输入1为要设置的部队菜单选项id(若该输入为-1,则设置所有选项),输入2为逻辑值(是否可以使用,1为不可使用,0为可使用)
                    13号函数:设置某城市境内是否可以行军,输入1为要设置的城市id(若该输入为-1,则设置所有城市),输入2为逻辑值(是否可以行军,1为可,0为不可)
                    14号函数:关闭或开启势力AI,输入1为要设置的势力(若为-1,则设置所有势力),输入2为逻辑值(1为关闭,0为开启)
                    例:关闭所有势力AI:01 01 04 ffffffff 13 04 00 8c 0e 1402 00
                    1c号函数:设置右上角的说明框,说明框由3个可切换的说明文字、显示的剩余天数组成。输入1、2、3为说明文字1、2、3的MSG,输入4为常数(剩余天数)
                    其他几个常用的:
                    不可攻击据点:0101 04 14 49 04 00 8c 0e 0b 02 00
                    不可使用计略:0101 04 ffffffff 8b 04 00 8c 0e 0f 02 00


                    IP属地:北京75楼2019-04-28 14:26
                    回复
                      全局类函数操作:
                      全局类,即001c 0e,里面主要是剧本开始日期、剧本编号等这样一些全局信息:
                      全局类各函数:
                      2号函数:读取剧本编号,无输入,返回剧本编号
                      5号函数:读取汉帝,无输入,返回武将
                      14号函数:读取剧本开始日期,无输入
                      返回的日期是一个比较复杂的结构体,举例说明:
                      例:读取剧本开始日期并和某个日期进行比较的子条件:
                      00 1c 0e 14 00 04 01 02 04 08 02 04 bd 02 0c 12 03 15 0c 00 ??
                      这个条件的含义是剧本开始日期小于等于189年8月1日
                      15号函数:读取当前日期,无输入
                      16号函数:读取剧本开始后到当前为止的日数,无输入,返回常数
                      18号函数:设置汉帝,输入1为武将(新汉帝)
                      函数列举到此为止,以后可能还会不断的补充。另外,有一些比如让部队陷入混乱的语句,我还没有完全吃透,所以没有列出来。目前我还只能照抄原版eve文件中让部队陷入混乱的语句(称霸模式赤壁之战甘宁、黄盖的剧情)。


                      IP属地:北京76楼2019-04-28 14:26
                      回复
                        据点属性读取、设置:
                        据点类,一般使用X15 0e表示,其中X为据点id,0~41是41个城市,42~51是9个关隘,52~86是34个港口。
                        据点类函数:
                        13号函数:从据点出征部队出现在大地图上,输入1、2、3为武将(主将、副将、副将),输入4为士兵数,输入5为陆上兵种,输入6为水上兵种,输入7、8、9、10为常数(金钱、兵粮、部队横坐标、部队纵坐标)
                        值得一提的是,调用这个函数,并不要求主副将所属所在为当前据点,调用后据点亦不会减少相应兵粮金钱士兵兵装。唯一用到据点信息的是出征部队的士气会采用据点的士气值。
                        1f号函数:设置据点兵力值,输入1为常数(兵力值)
                        26号函数:设置据点所属军团,输入1为军团(军团可以通过调用武将类1a号函数获取)
                        据点类函数搜集的不多,因为我自己主要还是用城市类的函数。


                        IP属地:北京78楼2019-04-28 14:32
                        回复
                          重新以图片形式补上城市类函数


                          IP属地:北京80楼2019-04-28 14:34
                          回复
                            一边写教程一边整理,一边又发现了之前整理的一些错误,已在5、6楼的楼中楼重新更正。另外,之前发的例子也删去,多加了一个例子重新发出来。
                            例1:武将X1所在部队与武将X2所在部队相邻的子条件?
                            答:部队类的28号函数返回与其他部队的距离,那么首先写出这个函数的形式
                            X2 14 0e 06 00 04 X1 14 0e 06 00 0e 28 01 00
                            相邻即意味着距离=1,即上面的返回值与常数1进行比较。将上面这一段最末接15,常数1接04:
                            01 02 04 X2 14 0e 06 00 0e X1 14 0e 06 00 0e 28 01 15
                            最后,再接上0800 ??,以比较两个量是否相等。
                            例2:武将X1不在部队中的子条件?
                            答:武将类的06号函数返回武将所在部队,若不在部队值,将返回-1(ffffffff),1e代表值的类别为部队id。因此,这个子条件是X1 14 0e 06 00 ??和ffffffff 1e ??的比较,将这两个一个接04,一个接15:
                            X1 14 0e 06 00 04 ffffffff 1e 15
                            最后,再接上0800 ??,以比较两个量是否相等。
                            例3:武将X1所属城市治安大于等于X2的子条件?
                            答:治安需要通过城市类13号函数读取,武将类75号函数返回其所属城市,武将X1所属城市治安可写成:X1 14 0e 75 00 0e 13 00 ??。返回治安为常数,需与常数X2比较,即X2 02 ??.
                            由于是所属城市治安>=X2,故将常数X2后接04,武将X1所属城市治安后接15。两个量后面需接0c 00 ??,以比较15所接的量大于等于04所接的量。最终表述形式为:
                            X2 02 04 X1 14 0e 75 00 0e 13 00 15 0c 00 ??
                            例4:设置武将X1所属为武将X1所属势力君主的所属(即让某武将和其君主同城)
                            答:武将类的6f号函数为设置武将所属,那么,写出这个函数的形式
                            【输入1】X1 14 0e 6f 01 00
                            输入1为武将X1所属势力君主所属的城市,通过武将类的1b号函数调用武将X1所属势力:
                            X1 14 0e 1b 00 0e
                            再通过势力类04号函数调用势力君主
                            X1 14 0e 1b 00 0e 04 00 0e
                            再通过武将类04号函数调用其所属城市
                            X1 14 0e 1b 00 0e 04 00 0e 04 00 0e
                            由于这个城市就是我们要的输入,将最末的0e改成04,以示是输入而非要调用自身函数的类。
                            整个语句写为:
                            X1 14 0e 1b 00 0e 04 00 0e 04 00 04 X1 14 0e 6f 01 00
                            例5:设置金陵城的斗舰数+10
                            答:城市类的28号函数为兵装增减,
                            用van查看游戏Scenario文件可得金陵城的城市id为22,即十六进制0x16。
                            用van查看游戏Scenario文件可得斗舰在所有兵种中的id为11,即十六进制0x0b。
                            斗舰数+10,10在十六进制下为0x0a
                            41代表值的类别是兵种\兵装。
                            代入以上信息至28号函数语句,语句最终表述形式为:
                            0a 02 04 0b 41 04 16 16 0e 28 02 00


                            IP属地:北京81楼2019-04-28 16:56
                            收起回复
                              回过头看教程已经码了2万字了,明天开始讲实战,手把手教你做玄武门之变~


                              IP属地:北京82楼2019-04-28 16:57
                              回复