轩辕春秋文化论坛 » 曹操传MOD制作交流 » 基于STAR 5.6 、5.7 的[原创武将] 修改


2010-3-12 22:41 蛇夫座
基于STAR 5.6 、5.7 的[原创武将] 修改

[color=blue]基于STAR 5.6 、5.7 的[原创武将] 修改[/color]

    支持创建6 名原创武将并且能够由玩家自由设定五围能力、头像、兵种,
    另一个方面MOD 作者则可以根据玩家所选择的兵种职业来为原创武将指定不同的R、S 造型、必杀与成长方向等等。
    由外部DLL 链接实现,游戏引擎只需少量修改(5.7 与 5.6 版的修改方法完全一样)


   
    *. 注: 1. 通过改造[71H: 特效请求] 指令, 特效值指定为原创武将的DATA 编号(若指定大于1023 的值会导致指令不被执行,
               MOD 作者可以自由定制这些值的处理)。

            2. 使用了[4050]、[4051]号整型变量来设置8 种玩家可选兵种职业,数值为修改器里看到的值加1,每一字节表示一种
               可选职业(如: 轻步兵的兵种编号为3,则这里应设置为4),若不指定可选职业则默认为群雄玩家将无其它选择。

            3. [71H: 特效请求] 指令处理函数返回时会在[4050]号整型变量返回玩家选择的职业项目,MOD作者可以测试这个变量
               的结果,若为0 表示玩家选择的是第一种职业(如:剧本设置了四种可选职业分别为群雄、轻骑兵、弓弩手和刺客
               当71H 指令返回后4050 号整型变量的值为1 表示玩家选择的职业为轻骑兵)。

            4. [71H: 特效请求] 指令处理函数返回时会在[4051]号整型变量返回原创武将的性别(0表示男性,1表示女性),MOD
               作者可以使用[77H: 变量运算] 指令针对[4051]号整型变量修改战场特殊形象编号。如:77: 整型变量 4051 += 5,
               若原创为男性则战场特殊形象编号将被指定为5,若原创为男性则战场特殊形象编号将被指定为6。

            5. 通过修改创建[原创武将] 对话框时压入的三个参数可以对自创武将能力范围加以控制,数据长度为有符号单字节:
               0051814B   6A 5A        push   5A        ; 极限能力值(取值范围:0 ~ 100)对应UE 地址:  0xE814C
               0051814D   6A 46        push   46        ; 标准能力值(取值范围:0 ~ 90 )对应UE 地址:  0xE814E
               0051814F   6A 28        push   28        ; 可分配点数(取值范围:标准+1 ~ 120)对应UE 地址:  0xE8150

            6. 剧本中少不免会使用武将名来作一些编排(最明显的就是S 剧本的[19H: 胜利条件]指令,如:“失败条件:XXX死亡
               ,若XXX 为原创武将时MOD 作者将无法知道玩家实际的输入的名字),所以为剧本中一些指令者都作了格式化处理
               只要剧本指令内容中包括*.x (x 的取值范围为1 ~6 对应1 ~6号原创武将)都可以自动转换为真实武将名。

               通过测试的指令包括:
               [12H: 选择框]
               [14H: 对话](如:&*.2\n你好!我的名字是*.2。)
               [15H: 战场对话2]
               [16H: 信息]
               [17H: 场所名]
               [18H: 事件名设定]
               [19H: 胜利条件]
               [1AH: 显示胜利条件]
               [2CH: 地图文字显示]
               [63H: 单挑对话]
               [67H: 章名]
               [69H: 旁白]
               (若测试中发现还有其它指令无法格式化的话请各位回复本贴子)

            7. 由于游戏程序不会主动刷新武将SAV 映射中的武将名和R 剧本武将名这两个字段,所以使用了一个name.e5 的文件
               来保存玩家输入的人物姓名,在游戏存档时写入到这个文件,读档时则先从data.e5 中读出存档中所有原创武将的姓
               名到SAV 映射,之后再从name.e5 文件中读入武将原创名,这样做目的是防止A 存档中有DATA 号XX 武将为原创武将
               ,而B 存档没有XX 号原创武将导致的武将名显示错误。

            8. 原创武将的真彩头像男女各10张,编号安排到600 (908 - 301 - 7) 处,所以Tou.dll 文件要增加头像了,与之对应
               的小头像 Face.e5 文件则应该增加导入到608 ~ 627 处

               对于Tou.dll 由于是借用别人MOD 里的我没有BMP 文件而一张一张重新导入十分浪费时间,我的做法是使用ResHacker
               将DLL 文件中的所有位图全部导出再修改资源脚本后重新编译,若想使用这种方法可以下载《源代码与旧版修改说明》
               真彩头像工程文件(编写语言为Win32asm)或者到岱大新引擎发布贴中下载VC 工程。

            9. 使用[71H: 特效请求] 指令之前必须先使用[3BH: 武将加入],另外本系统是基于五围能力单数显示的,大家测试代码
               前请先将引擎改为单数显示。

            10. STAR 5.7 版扩展了兵种数量到80种,如果用于5.6 版时要对dll 文件的兵种可选范围进行调整
                 源代码:           mov   dbMaxOccupCount, 80      ; 默认为5.7 版使用
                 反汇编形式:     C705 XXXXXXXX 50000000         mov     dword ptr [XXXXXXXX], 50
                 UE地址:          0x406    50(十进制:80)STAR5.6 版应改为 35(十进制:53)

                                                                                                                                  (详细语法请参照剧本事例)

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-25 20:20 编辑 [/i]][/color]

2010-3-12 22:45 蛇夫座
[color=blue];--------------------------------------------------------------------------------------------------------------------[/color]
[color=blue]第一部分修改: 装配 _test2.bin 文件[/color]
[color=blue][/color]
[color=blue]    1. 运行LordPE ==> [选项] ==> 在[PE 编辑器] 一栏中选上[区段表:自动修正镜像大小] ==> [确定][/color]
[color=blue][/color]
[color=blue]    2. 点[PE编辑器] ==> 打开Ekd5.exe ==> [区段] ==> 右键 ==> [从磁盘载入段] ==> 打开 _test2.bin 文件
       ==>   提示:区段载入成功 :)[/color]
[color=blue][/color]
[color=blue]    3. 在[_test2.b] 区块上右键 ==> [编辑区段] ==> 将[名称] 改为:.test2[/color]
[color=blue][/color]
[color=blue]    4. 点[标志] 傍边的[ ..] 按钮设置[区段标志] ==> 取消[包含未初始化数据] 的勾选 ==> [确定]
       (此时[标志] 值为:E0000060) ==> [保存] ==> 退出LordPE[/color]
[color=blue][/color]
[color=blue];--------------------------------------------------------------------------------------------------------------------[/color]
[color=blue][/color]
[color=blue]第二部分修改: 反汇编修改[/color]
[color=blue][/color]
[color=blue]    (1). 游戏启动成功时装载DkOriPer.dll[/color]
[color=blue][/color]
[color=blue]       004755CF    - E9 042B0A00   jmp     005180D8[/color]
[color=blue][/color]
[color=blue]    (2). 游戏退出时卸载DkOriPer.dll[/color]
[color=blue][/color]
[color=blue]       00409239    - E9 BAEE1000   jmp     005180F8[/color]
[color=blue][/color]
[color=blue]    (3). 更改[武将情报]时真彩头像显示控制[/color]
[color=blue][/color]
[color=blue]       00407660     /E9 00010000   jmp     00407765[/color]
[color=blue][/color]
[color=blue]    (4). 注册[71H: 特效请求] 指令处理函数入口地址[/color]
[color=blue][/color]
[color=blue]       拷贝二进数据于00410C02 处: 10 81 51 00[/color]
[color=blue][/color]
[color=blue]    (6). 原创武将名存档写入处理[/color]
[color=blue][/color]
[color=blue]       0041B22E    - E9 39CF0F00   jmp     0051816C[/color]
[color=blue][/color]
[color=blue]    (7). 原创武将名存档读出处理[/color]
[color=blue][/color]
[color=blue]       0041ADC1    - E9 D4D30F00   jmp     0051819A[/color]
[color=blue][/color]
[color=blue]    (8). 从EEX 剧本映射中读取文字格式化处理[/color]
[color=blue][/color]
[color=blue]       004179C3     80FA 2A       |cmp     dl, 2A
       004179C6     75 06         |jnz     short 004179CE
       004179C8     FF15 A0805100 |call    dword ptr [5180A0]
       004179CE     80FA 20       cmp     dl, 20
       004179D1     7D 35         jge     short 00417A08
       004179D3     80FA 0A       cmp     dl, 0A
       004179D6     75 12         |jnz     short 004179EA
       004179D8     90            nop
       004179D9     90            |nop
       004179DA     90            nop[/color]
[color=blue]         二进制数据:[/color]
[color=blue][/color]
[color=blue]         80 FA 2A 75 06 FF 15 A0 80 51 00 80 FA 20 7D 35 80 FA 0A 75 12 90 90 90[/color]

[color=blue]    (9). [14H: 对话] 指令武将真彩头像显示格式化处理[/color]
[color=blue][/color]
[color=blue]       004137F3    80F9 0A           ||cmp     cl, 0A
       004137F6    74 26             ||je      short 0041381E
       004137F8    80F9 2A           ||cmp     cl, 2A
       004137FB    75 06             ||jnz     short 00413803
       004137FD    FF15 A4805100     call    dword ptr [5180A4]
       00413803    8B55 F4           mov     edx, dword ptr [ebp-C]
       00413806    888C2A F0FBFFFF   mov     byte ptr [edx+ebp-410], cl
       0041380D    FF45 F4           ||inc     dword ptr [ebp-C][/color]
[color=blue][/color]
[color=blue]         二进制数据:[/color]
[color=blue][/color]
[color=blue]         80 F9 0A 74 26 80 F9 2A 75 06 FF 15 A4 80 51 00 8B 55 F4 88 8C 2A F0 FB FF FF FF 45 F4[/color]
[color=blue][/color]
[color=blue]    (10). [1AH: 显示胜利条件] 指令内容格式化处理[/color]
[color=blue][/color]
[color=blue]       0044BF23    0FB602          ||movzx   eax, byte ptr [edx]
       0044BF26    84C0            test    al, al
       0044BF28    74 37           je      short 0044BF61
       0044BF2A    3C 2A           cmp     al, 2A
       0044BF2C    75 06           jnz     short 0044BF34
       0044BF2E    FF15 A8805100   call    dword ptr [5180A8]
       0044BF34    3C 0A           ||cmp     al, 0A
       0044BF36    75 0C           jnz     short 0044BF44
       0044BF38    90              nop[/color]
[color=blue][/color]
[color=blue]         二进制数据:[/color]
[color=blue][/color]
[color=blue]         0F B6 02 84 C0 74 37 3C 2A 75 06 FF 15 A8 80 51 00 3C 0A 75 0C 90[/color]
[color=blue][/color]
[color=blue]    (11). [18H: 事件名设定] 指令内容格式化处理[/color]
[color=blue]       0040BB4B   B8 28114A00     mov   eax, 004A1128
       0040BB50   50              push  eax
       0040BB51   FF75 08         push  dword ptr [ebp+8]
       0040BB54   50              push  eax
       0040BB55   E8 4BBE0000     call  004179A5
       0040BB5A   90              nop
       0040BB5B   90              nop
       0040BB5C   90              nop
       0040BB5D   90              nop
       0040BB5E   90              nop
       0040BB5F   90              nop
       0040BB60 |.E8 AAA90600     call  0047650F
       0040BB65   90              nop
       0040BB66   90              nop
       0040BB67   90              nop
       0040BB68   90              nop
       0040BB69   90              nop
       0040BB6A   90              nop
       0040BB6B   90              nop[/color]
[color=blue][/color]
[color=blue]         二进制数据:[/color]
[color=blue][/color]
[color=blue]         B8 28 11 4A 00 50 FF 75 08 50 E8 4B BE 00 00 90 90 90 90 90 90 E8 AA A9 06 00 90 90 90 90 90 90
         90[/color]
[color=blue];-----------------------------------------------------------------------------------------------------------[/color]

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-4 15:02 编辑 [/i]][/color]

2010-3-12 22:46 雨影`
頂啊~~這個就無敵了:hz1023:

2010-3-12 22:47 蛇夫座
[color=blue];-----------------------------------------------------------------------------------------------------------
DkOriPer.dll 与游戏引擎接口的数据说明,非常重要!


    *. 注: 1. 这部分数据位于 _DkOriPerInitInsVar 函数内,当 DkOriPer.dll 被装入内存时被初始化为指定值,
               游戏改动导致无法自创武将、读写自创武将名失败、格式化自创武将名失败等时参考修改
            2. 提供DkOriPer.dll 源代码下载参考
            3. 源代码未经太大改动,未注释部分请参考旧版文本

mov     ecx, 004B6A60H
mov     eax, dword ptr [ecx]  ; 主模块句柄
mov hInstanceMain, eax
mov     eax, dword ptr [ecx+8H]  ; 主窗口句柄
mov hWinMain, eax
mov ecx, 500EF5H   ; TouDll模块句柄存放地址
mov eax, [ecx]
mov hTouDll, eax
mov ecx, 4CEA00H   ; 武将SAV映射指针
mov eax, [ecx]
mov lpSavImage, eax
mov lpNameImage, 518010H  ; 用于检索新建武将以及格式化武将名
mov _48BEA8H, 48BEA8H  ; 兵种名地址数组
mov     eax, 505F48H   ; 4050号整型变量地址
mov lpGalVar_4050, eax
mov _4179B4H, 4179B4H  ; 从EEX 剧本映射中读取文字格式化处理时成功返回
mov _417A08H, 417A08H  ; 从EEX 剧本映射中读取文字格式化处理时非自创武将返回
mov _41383CH, 41383CH  ; [14H: 对话] 指令武将真彩头像显示格式化处理时成功返回
mov _413801H, 413801H  ; [14H: 对话] 指令武将真彩头像显示格式化处理时非自创武将返回
mov _44BEF5H, 44BEF5H  ; [1AH: 显示胜利条件] 指令内容格式化处理时成功返回
mov _44BF44H, 44BF44H  ; [1AH: 显示胜利条件] 指令内容格式化处理时非自创武将返回

         反汇编形式:

B9 606A4B00              mov     ecx, 4B6A60
8B01                     mov     eax, dword ptr [ecx]
A3 26300502              mov     dword ptr [2053026], eax
8B41 08                  mov     eax, dword ptr [ecx+8]
A3 2A300502              mov     dword ptr [205302A], eax
B9 F50E5000              mov     ecx, 500EF5
8B01                     mov     eax, dword ptr [ecx]
A3 2E300502              mov     dword ptr [205302E], eax
B9 00EA4C00              mov     ecx, 4CEA00
8B01                     mov     eax, dword ptr [ecx]
A3 32300502              mov     dword ptr [2053032], eax
C705 36300502 10805100   mov     dword ptr [2053036], 518010
C705 3A300502 A8BE4800   mov     dword ptr [205303A], 48BEA8
B8 485F5000              mov     eax, 505F48
A3 3E300502              mov     dword ptr [205303E], eax
C705 56300502 B4794100   mov     dword ptr [2053056], 4179B4
C705 5A300502 087A4100   mov     dword ptr [205305A], 417A08
C705 5E300502 3C384100   mov     dword ptr [205305E], 41383C
C705 62300502 01384100   mov     dword ptr [2053062], 413801
C705 66300502 F5BE4400   mov     dword ptr [2053066], 44BEF5
C705 6A300502 44BF4400   mov     dword ptr [205306A], 44BF44

;-----------------------------------------------------------------------------------------------------------

_test2.bin 内容文件说明:

    *. 注: 1. 游戏改动导致无法自创武将、读写自创武将名失败、格式化自创武将名失败等时参考修改

一: 初始化原创武将检索区域内存,增加DkOriPer.dll 名字符串,初始化导入函数地址表
    (00 数据进入游戏时会被映射)

00518000  CE E4 BD AB BC EC CB F7 C7 F8 D3 F2 CA BC 00 00  武将检索区域始..
00518010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00518020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00518030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00518040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00518050  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00518060  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00518070  44 6B 4F 72 69 50 65 72 2E 64 6C 6C 00 00 00 00  DkOriPer.dll....
00518080  B5 BC C8 EB BA AF CA FD B5 D8 D6 B7 B1 ED 00 00  导入函数地址表..
00518090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
005180A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
005180B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
005180C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
005180D0  B4 FA C2 EB C7 F8 00 00                          代码区..

二: 反汇编代码部分

    (1). 游戏启动成功时装载DkOriPer.dll

005180D8    68 70805100     push    00518070                               ; ASCII "DkOriPer.dll"
005180DD    FF15 24614800   call    dword ptr [<&KERNEL32.LoadLibraryA>]   ; kernel32.LoadLibraryA
005180E3    BA 90805100     mov     edx, 00518090
005180E8    8902            mov     dword ptr [edx], eax
005180EA    68 A74B4700     push    00474BA7                               ; 入口地址
005180EF  - E9 E0D4F5FF     jmp     004755D4

    (2). 游戏退出时卸载DkOriPer.dll

005180F8    B8 90805100     mov     eax, 00518090
005180FD    FF30            push    dword ptr [eax]
005180FF    FF15 1C614800   call    dword ptr [<&KERNEL32.FreeLibrary>]    ; kernel32.FreeLibrary
00518105  - E9 F534F1FF     jmp     0042B5FF

    (3). [71H: 特效请求] 指令处理函数

00518110    55              push    ebp
00518111    8BEC            mov     ebp, esp
00518113    83C4 FC         add     esp, -4
00518116    6A 04           push    4
00518118    8B4D 08         mov     ecx, dword ptr [ebp+8]
0051811B    E8 D702F0FF     call    004183F7
00518120    3D 00000080     cmp     eax, 80000000
00518125    75 02           jnz     short 00518129
00518127    EB 34           jmp     short 0051815D
00518129    3D FF030000     cmp     eax, 3FF
0051812E    76 02           jbe     short 00518132
00518130    EB 2B           jmp     short 0051815D
00518132    8945 FC         mov     dword ptr [ebp-4], eax
00518135    B8 90805100     mov     eax, 00518090
0051813A    B9 03000000     mov     ecx, 3
0051813F    C1E1 02         shl     ecx, 2
00518142    03C1            add     eax, ecx
00518144    8B00            mov     eax, dword ptr [eax]
00518146    90              nop
00518147    0BC0            or      eax, eax
00518149    74 12           je      short 0051815D
0051814B    6A 5A           push    5A
0051814D    6A 46           push    46
0051814F    6A 28           push    28
00518151    FF75 FC         push    dword ptr [ebp-4]
00518154    FFD0            call    eax
00518156    B8 01000000     mov     eax, 1
0051815B    EB 05           jmp     short 00518162
0051815D    B8 05000000     mov     eax, 5
00518162    C9              leave
00518163    C2 0400         retn    4

    (4). 原创武将名存档写入处理

0051816C    FF75 08         push    dword ptr [ebp+8]
0051816F    E8 566DFBFF     call    004CEECA
00518174    B8 90805100     mov     eax, 00518090
00518179    B9 02000000     mov     ecx, 2
0051817E    C1E1 02         shl     ecx, 2
00518181    03C1            add     eax, ecx
00518183    8B00            mov     eax, dword ptr [eax]
00518185    09C0            or      eax, eax
00518187    74 05           je      short 0051818E
00518189    FF75 08         push    dword ptr [ebp+8]
0051818C    FFD0            call    eax
0051818E  - E9 A330F0FF     jmp     0041B236

    (5). 原创武将名存档读出处理

0051819A    B8 90805100     mov     eax, 00518090
0051819F    B9 01000000     mov     ecx, 1
005181A4    C1E1 02         shl     ecx, 2
005181A7    03C1            add     eax, ecx
005181A9    8B00            mov     eax, dword ptr [eax]
005181AB    09C0            or      eax, eax
005181AD    74 05           je      short 005181B4
005181AF    FF75 08         push    dword ptr [ebp+8]
005181B2    FFD0            call    eax
005181B4  - E9 9971FBFF     jmp     004CF352

    (6). 005181BA 以后未使用,可自由发挥

;-----------------------------------------------------------------------------------------------------------[/color]

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-4 15:07 编辑 [/i]][/color]

2010-3-12 22:48 蛇夫座
备用

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-4 15:06 编辑 [/i]][/color]

2010-3-12 22:48 蛇夫座
备用

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-4 15:05 编辑 [/i]][/color]

2010-3-12 22:49 蛇夫座
备用

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-4 15:05 编辑 [/i]][/color]

2010-3-12 22:49 蛇夫座
备用

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-4 15:05 编辑 [/i]][/color]

2010-3-13 08:40 godtype
data.e5用这个就可以了,无需要另外改一个出来。
PUSH Ekd5a.0048BB60                      ; |Arg1 = 0048BB60 ASCII "DATA.E5"
文中有好多字母+“)”的地方变成了表情了,改一改,加个空格之类的。

消化这些要些时间啊,看一下Q的留言,有空帮我搞。

2010-3-13 09:51 tydea
好帖,顶

2010-3-14 13:45 蛇夫座
补充一下:
刚才在帮论坛上的朋友试改一下引擎,发现他的资源数据已经修改过并且区块的空间基本用完了但又未超过原来的文件对齐大小,
按照我的方法转存资源区块后再装配PE 文件的话可能无法使新的资源区块物理大小增大,从而无法迁移数据。
其实解决方法很简单,就是让资源区块增大就可以。
1. 运行Stud_PE ==> 打开Ekd5.exe ==> 点[区段] ==> 在列表框最后一个区块[右键] ==> [New Section]
       ==> [原始大小]与[虚拟大小]设置为一样, 选择[用 NULL 字节填充区段] ==> [添加]  (图:_01)
2. 运行LordPE ==> [PE 编辑器] ==> 打开已添加区块的引擎文件 ==> 点[区段] ==> 在刚新增的区块上[右键]
       ==> [清除区段] ==> 在最后一个区块(这时应该为 .rsrc) [右键] ==> [编辑区块]
       ==> 调整[虚拟大小]与[物理大小]为原来的大小 + 第一步新添加区块的大小 ==> [确定](图:_02)

2010-3-15 06:47 蛇夫座
回复 #12 cronnin 的帖子

可以更换啊,需要重新导入一下或者使用我说的方法重新编译

2010-3-15 13:07 GA_Frank
想问下楼主可不可以实现由MOD制作人固定新人物的‘姓’?
假如要做二代武将的话…………玩家起一个姓不同的就比较囧了……

2010-3-15 20:29 蛇夫座
回复 #14 GA_Frank 的帖子

可以这样改代码:
1. 将你想要的武将姓氏的ASCII编码写到一个全局变量作为参数
2. 减少编辑框最大可输入字符数
3. 修改[确定]按钮响应函数,在获取玩家输入前先将武将姓氏的ASCII编码拷至缓冲区,
  再将当前缓冲区指针作为参数调用USER32.GetWindowTextA

2010-3-25 17:14 david8593
用大大所提供的引擎是不是 不用再弄ob修改?

2010-3-27 23:02 魏王孟德
支持啊,自创武将,顶一个

2010-5-4 20:12 Axie89
夫大哥啊.你得先告诉我们怎么增加exe的对话框啊..`我搞了几个小时拉.阴公.~:hz1008:

2010-9-4 03:41 天翼之神
这个帖子看的有点晕, 慢慢研究下, 不太懂反汇编.

2010-9-22 11:52 狂煞∑小星
蛇夫同学啊,能不能做个5.7的,让我们这些不懂OB的同学能在5.7里实现自创武将,最好多扩展几个职业供选择,再多加点点数,50点差不多了吧,40感觉少了点。

[color=Silver][[i] 本帖最后由 狂煞∑小星 于 2010-9-22 15:18 编辑 [/i]][/color]

2010-9-22 14:22 蛇夫座
回复 #20 狂煞∑小星 的帖子

顶楼已更新~~,由外部DLL 链接实现,游戏引擎只需少量修改(5.7 与 5.6 版的修改方法完全一样)

修改原理是:在DkOriPer.dll 中编写代码并预先填写好所涉及的引擎内存地址,在游戏主程序
                  运行时使用LoadLibrary  函数装入DLL,再使用GetProcAddress 函数动态获取
                  所需导出函数地址,当剧本指令触发时引擎线执行线程会转到DLL  内部执行代
                  码,DLL 与EXE 一样也是PE 文件同样可以有资源数据

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-4 15:37 编辑 [/i]][/color]

2010-9-22 15:17 狂煞∑小星
好吧,QQ被盗了,请求再加次你的QQ,OK?

2010-9-22 23:22 狂煞∑小星
好像不能用唉。求解,自创武将时出现异常退出。

2010-9-23 10:35 蛇夫座
回复 #23 狂煞∑小星 的帖子

顶楼已更新~~,由外部DLL 链接实现,游戏引擎只需少量修改(5.7 与 5.6 版的修改方法完全一样)



修改原理是:在DkOriPer.dll 中编写代码并预先填写好所涉及的引擎内存地址,在游戏主程序
                  运行时使用LoadLibrary  函数装入DLL,再使用GetProcAddress 函数动态获取
                  所需导出函数地址,当剧本指令触发时引擎线执行线程会转到DLL  内部执行代
                  码,DLL 与EXE 一样也是PE 文件同样可以有资源数据

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-4 15:37 编辑 [/i]][/color]

2010-9-23 16:23 狂煞∑小星
还差哪些工作呢?

2010-9-27 08:57 天翼之神
看来很麻烦啊, 期待5.7版修改法.

2010-9-27 22:44 狂煞∑小星
好久都不能上轩辕了,提个建议吧,希望下次来的时候蛇夫同学能改好它。
1.应该加个头像的变量,根据大头像设置小头像,否则选择了大头像,小头像还是原来的,囧。
2.男的和女的也应该搞个变量,否则男的形象是男的,女的形象是男的。。。
3.职业个数应该再增加点,4个有点少
4.分配点数应当适量加多一些
5.引擎加个显示人物特技的系统,自创主角加入绝招设定,这样自创的主角就有自己的绝招了。
当然,实现不了也罢了,要求不能太高,是吧,呵呵。

2010-9-28 23:00 天翼之神
希望楼主能实现更多的功能, 我支持下.
PS: 我看不太懂代码, 但是能不能把自创武将弄成DATA里另外的一些武将, 而不是0号武将呢?

2010-9-28 23:00 蛇夫座
回复 #27 狂煞∑小星 的帖子

回复29楼:
          可以指定0~1023任一个武将,还可以同时创作6个


顶楼已更新~~,由外部DLL 链接实现,游戏引擎只需少量修改(5.7 与 5.6 版的修改方法完全一样)


修改原理是:在DkOriPer.dll 中编写代码并预先填写好所涉及的引擎内存地址,在游戏主程序
                  运行时使用LoadLibrary  函数装入DLL,再使用GetProcAddress 函数动态获取
                  所需导出函数地址,当剧本指令触发时引擎线执行线程会转到DLL  内部执行代
                  码,DLL 与EXE 一样也是PE 文件同样可以有资源数据

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-4 15:36 编辑 [/i]][/color]

2010-9-29 20:41 狂煞∑小星
好的,支持下,希望尽快完成5.7的,或者把方法告诉我吧,我来做做看哈。

2010-10-1 09:10 狂煞∑小星
不好意思哈,QQ设成拒绝加好友了,重加一遍吧,顺便祝国庆快乐!

2010-10-2 10:50 狂煞∑小星
不想再弄新引擎了,形象指定麻烦了,兵种也够了。希望蛇夫同学可以将查看历史情报和点击人物头像显示兵种特性的功能迁移到5.6中来。可以吗?

2010-10-2 14:03 狂煞∑小星
最后再啰嗦一下哈,能否把[url]http://www.xycq.net/forum/thread-203914-1-1.html[/url]这篇你的文章中的装备交换应用大众的EXE中去?

2010-10-4 15:22 狂煞∑小星
男女之间的R和S形象都可以通过变量来指定了么?帖有点看不懂,求解。

2010-10-4 15:48 蛇夫座
回复 #35 狂煞∑小星 的帖子

将男女的R 形象或S 形象相伦存放即可,也可自己通过剧本指令调整

如图:

77: 整型变量 4051 += 5

若自创武将是女性则4051 号整型变量的返回值会是 1

计算 1 + 5 = 6

若自创武将是男性则4051 号整型变量的返回值会是 0

计算 0 + 5 = 5

再将运算后的4051 号整型变量的值导入到R 形象或S 形象

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-4 15:54 编辑 [/i]][/color]

2010-10-4 15:54 狂煞∑小星
我想问的是S形象的78指令用后,还能再跟一个78指令指定R形象吗?如果不能的话该怎么做呢?

2010-10-4 17:55 蛇夫座
回复 #37 狂煞∑小星 的帖子

还不简单,在运算之前拷贝一下即可:

加一条:     77: 整型变量 110 = 整型变量(a) 4051
                 77: 整型变量 4051 += 5

2010-10-4 19:08 狂煞∑小星
好吧,我烧饼了,但是不想再改5.6的引擎了,形象指定得手都瘫了,想增加5.7引擎的记录历史情报的对话框及增加一个在武将情报栏显示绝招的对话框,能教我怎么做么?

2010-10-5 18:18 冯励
好东西,收藏了。:hz1019:

2010-10-6 13:49 狂煞∑小星
汗,报告一下,UE修改EXE的0xE814C、0xE814E、0xE8150这三个地址的数值后,真正起作用的只有分配点数的地址,其余两个都没用,虽然改了之后游戏内创建角色时是成功了,但是完了之后又变回老样子了,相当于没改,只有分配点数的改了起作用。

2010-10-6 18:00 蛇夫座
回复 #41 狂煞∑小星 的帖子

非常感谢指出!

      我拷贝原来的代码编写DLL 时忘记将 ADD   AL, 70
      改为 add    al, byte ptr[dwStandardPoint],还有一处小参数用错了~~
      顶楼已更新,请继续努力!


#39 楼的问题要上班啊可能没有时间,也不太大兴趣~~

2010-10-8 22:46 狂煞∑小星
好的,那也没关系了,以后有时间自己慢慢研究(研究毅大的OD教程ING)。
再提个意见吧,倒是没什么BUG了,只是能否在创建角色时加个变量赋值,在与场景人物对话时可以根据性别显示对话,如男性称呼“公子”。女性称呼“小姐”,不然的话玩起来选择了女性的玩家还是会很难受滴...:hz1064:

2010-10-9 18:15 蛇夫座
回复 #43 狂煞∑小星 的帖子

使用剧本指令即可,在[71H: 特效请求] 之后测试玩家选择兵种之前加一条[B: 变量赋值],之后有关男女性的问题都测试这个变量

话说楼上的剧本指令语法真的要补一补..

看图:

2010-10-9 21:35 狂煞∑小星
还是求教一下怎样增加对话框吧,只想加个显示绝招的就好了,别的不想。

2010-10-10 00:30 狂煞∑小星
总是梦想着能让自己的MOD实现瓦岗的绝招显示,star175的引擎只实现了第一步,显示却没有,觉得很尴尬,所以跪求啊,55555

2010-10-10 20:07 kc_flea
这个膜拜啦,太强悍了~高人啊

2010-10-17 15:06 狂煞∑小星
问一下哈,如何改成双数五围,5.7版本star175提供data是双数制的,不想改,累...

2010-10-18 17:21 蛇夫座
回复 #48 狂煞∑小星 的帖子

我之前发过一个工具用来调整新引擎DATA.E5 与 SVD.E5S 的五围数据,太久我自己都忘记在那一贴子发的了,

现在重发一下吧~~ 请到顶楼下载使用! 如果引擎版本更新导至程序调整错误的话,请通知我。

[color=Silver][[i] 本帖最后由 蛇夫座 于 2010-10-18 17:32 编辑 [/i]][/color]

2010-10-24 22:15 狂煞∑小星
汗,又发现BUG了,今天才改完的5.7的S形象,累死,然后在剧本中把老的职业换成了扩充后的兵种,一个是63,一个是70号,结果到了界面中只剩下6个兵种,这两个就不见了...

2010-10-25 20:30 蛇夫座
回复 #50 狂煞∑小星 的帖子

感谢指出,源代码中有一句:   .if        dl != 0 && dl <= 53
由于STAR 5.7 版扩展了兵种数量到80种,所以设置大于53的值时被忽略了..

请到顶楼重新下载dll 文件

如果有时间的话可能会用VC++ 将代码重写,以后发表的所有修改都直接添加
代码就行,这样调试是方便的, 反汇编实在太慢了太累了..

2010-10-27 21:31 狂煞∑小星
感觉发个自己添加兵种个数的源代码比较好,可以自由定制。

2010-11-27 08:35 513633522
5.7版本更新了,看看还能用吗:hz1024:

2010-11-29 12:42 449091
:hz1018:鼓掌~!

2010-11-29 21:20 狂煞∑小星
star175的5.7正式版已出,请更新,哈哈。

2010-12-13 18:51 lun1988win
问一个问题,   自创武将后编剧怎么编???

2010-12-31 02:19 永不言弃
登陆忘了,更新贴请转到:
[url]http://www.xycq.net/forum/viewthread.php?tid=220681&pid=3077934&page=1&extra=page%3D1#pid3077934[/url]

[color=Silver][[i] 本帖最后由 永不言弃 于 2010-12-31 02:26 编辑 [/i]][/color]

2011-1-1 14:37 wd79223203
内个。。。能不能给自创武将加个规则,就是不能使用标点符号和数字,不然名字太雷人了

2011-1-1 15:39 永不言弃
回复 #58 wd79223203 的帖子

楼上可能还没试用过本程序,_DkOriPerNameEdit 函数已经将标点数字过涵掉了

2011-4-16 07:39 王友良
支持

2011-4-24 20:41 tswing
哪有5.7版本的,没看到:hz1001:

页: [1] 2


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.