
标题: 人物信息扩充纪要 [打印本页]
作者:
砖家叫兽 时间: 2012-2-21 16:57 标题: 人物信息扩充纪要
Data编号*0x48,加上D60000就能得到对应的Data位置武将信息
00~01 表示武将代码 00 10 第二个是01 10
02~03 R剧本形象代号
04~05 武将头象地址
06~07
08~0F 武将姓名(8字节,4个中文)
10 保留给武将姓名的结束符
11~12 攻击力
13~14 防御力
15~16 精神力
17~18 爆发力
19~1a 士气
1b
1C~1F HP
20 MP
21 武
22 统
23 精
24 爆
25 士
26 致命一击台词类型
27 出阵场数
28
29 撤退场数
2a 是否我军 00是我军,FF不是我军
2b 兵种代码
2C 人物等级
2d 经验值
2e 武器
2f 等级
30 经验
31 防具
32 防具等级
33 防具经验
34 辅助
35 FF
36 FF
37~48 R剧本点击该人物是显示的名字
STAR引擎 ALLOC 大小是20000 修改一处 12000 变成1C000 即 腾出来 每个人物 0x70大小
00~01 表示武将代码 00 10 第二个是01 10
这个可以有6万5 的人物 暂时足够不需要扩充
02~03 R剧本形象代号
文件还没有这么大 双字节完全足够
04~05 武将头象地址
头像编号 6万5 最多也没有这么多头像,够用
06~07
08~15 武将姓名(7个中文)
16 17 保留给武将姓名的结束符 00 00
18 攻击力
1C 防御力
20 精神力
24 爆发力
28 士气
五围变四字节 死活都够用了吧
2C HP
30 MP
34 SP
四字节 MP上限总不是问题了吧 双字节SP 哈哈
36 武
38 统
3A 精
3C 爆
3E 士
这个都扩双字节了
40 致命一击台词类型
42 出阵场数
44 撤退场数
46 兵种代码
48 是否我军 00是我军,FF不是我军
4A 人物等级
全部双字节
4C 经验值
四字节经验 那就可以 第一级100 二级 150 到99级是……
50 武器
52 等级
54 经验
56 防具
58 防具等级
5A 防具经验
5C 辅助
5E FF
60 FF
62-6F R剧本点击该人物是显示的名字 显示7个汉字
70 0
[ 本帖最后由 砖家叫兽 于 2012-2-21 17:10 编辑 ]
作者:
砖家叫兽 时间: 2012-2-21 17:12
STAR引擎有一点好 所有人物地址计算都变成了 CALL
所以 只要修改 DATA导入 以及取出的偏移就可以
作者:
star175 时间: 2012-2-21 17:54 标题: 回复 #2 砖家叫兽 的帖子
五围2字节足够了,省下2字节可以用来存放功勋
5.8引擎已经把R形象放到exe里去了,所以这2个字节可以用来做其他的
还有就是SP,其实当初设计SP时就犯了一个大错误,当是设计每人的sp max都是255,所以没有单独保存这个数据,但是错就错在把SPcur和data挂钩了,结果白费了1024字节来存放SPcur,事实上,SPcur应该和战场编号挂钩才是正确的
作者:
砖家叫兽 时间: 2012-2-21 17:57
原帖由 star175 于 2012-2-21 17:54 发表
五围2字节足够了,省下2字节可以用来存放功勋
5.8引擎已经把R形象放到exe里去了,所以这2个字节可以用来做其他的
还有就是SP,其实当初设计SP时就犯了一个大错误,当是设计每人的sp max都是255,所以没有单独保 ...
也不是这么说
SP 完全可以开启一种模式 就是 从头至尾可以积累 可以积累到下一关
同样 可以把 HPcurrent MPcurrent保存留到下一关 这样 连打三关的英杰模式 可以再次重现
四字节的情况属于太过于保守估计 还有就是为了格式美观
ALLOC 大小是20000 而实际上 +14000 的样子数据都是00 00 所以 完全可以把 +12000改 +1E000 ,就相当于每个人是0x78字节
另外 关于存档的修改
我就是直接 把每个人 的0X48 (修改后的按实际值算)的信息全部按顺序保存到存档
读档也是按顺序 全部取出来
这样的话 ,除了要重新开始存档以外,姓名可以保存下来
至少存档这里不用考虑地址对应的问题
DATA中长度明显不够的 所以引擎里头实际上读取了 武力以后 复制了一份给攻击力 那个偏移改一改就可以了
[ 本帖最后由 砖家叫兽 于 2012-2-21 18:03 编辑 ]
作者:
砖家叫兽 时间: 2012-2-21 18:05
00408C07 /$ 55 PUSH EBP ; 读取DATA人物信息
00408C08 |. 8BEC MOV EBP,ESP
00408C0A |. 56 PUSH ESI
00408C0B |. 8BF1 MOV ESI,ECX
00408C0D |. 57 PUSH EDI
00408C0E |. 8B7D 0C MOV EDI,DWORD PTR SS:[EBP+C]
00408C11 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00408C14 |. 80CC 10 OR AH,10
00408C17 |. 66:8906 MOV WORD PTR DS:[ESI],AX
00408C1A |. 8BCE MOV ECX,ESI
00408C1C |. 83C1 08 ADD ECX,8
00408C1F |. 51 PUSH ECX
00408C20 |. 6A 09 PUSH 9
00408C22 |. 6A 00 PUSH 0
00408C24 |. 6A 00 PUSH 0
00408C26 |. E8 05B10C00 CALL Ekd5.004D3D30
00408C2B |. 8BD7 MOV EDX,EDI
00408C2D |. 8BCE MOV ECX,ESI
00408C2F |. 83C1 08 ADD ECX,8
00408C32 |. 52 PUSH EDX
00408C33 |. 51 PUSH ECX
00408C34 |. 6A 00 PUSH 0
00408C36 |. E8 25AB0C00 CALL Ekd5.004D3760
00408C3B |. C646 10 00 MOV BYTE PTR DS:[ESI+10],0
00408C3F |. 8BCE MOV ECX,ESI
00408C41 |. E8 56E90200 CALL Ekd5.0043759C
00408C46 |. 83C7 0D ADD EDI,0D
00408C49 |. 0FB70F MOVZX ECX,WORD PTR DS:[EDI]
00408C4C |. 83C7 02 ADD EDI,2
00408C4F |. 837D 10 00 CMP DWORD PTR SS:[EBP+10],0
00408C53 |. 75 08 JNZ SHORT Ekd5.00408C5D
00408C55 |. 894E 04 MOV DWORD PTR DS:[ESI+4],ECX
00408C58 |. 8A07 MOV AL,BYTE PTR DS:[EDI]
00408C5A |. 8846 02 MOV BYTE PTR DS:[ESI+2],AL
去掉MOV 只从DATA取数据 不存 那么R形象的地址还是可以用原来位置 只是DATA指定无效
00408C5D |> 47 INC EDI
00408C5E |. 8A07 MOV AL,BYTE PTR DS:[EDI]
00408C60 |. 8846 26 MOV BYTE PTR DS:[ESI+26],AL
00408C63 |. 47 INC EDI
00408C64 |. 8A07 MOV AL,BYTE PTR DS:[EDI]
00408C66 |. 8846 2A MOV BYTE PTR DS:[ESI+2A],AL
00408C69 |. 47 INC EDI
00408C6A |. 33D2 XOR EDX,EDX
00408C6C |> 83FA 05 /CMP EDX,5
00408C6F |. 73 15 |JNB SHORT Ekd5.00408C86
00408C71 |. 0FB607 |MOVZX EAX,BYTE PTR DS:[EDI]
00408C74 |. 884432 21 |MOV BYTE PTR DS:[EDX+ESI+21],AL
00408C78 |. 6BC0 03 |IMUL EAX,EAX,3
00408C7B |. D1E8 |SHR EAX,1
00408C7D |. 66:894456 11 |MOV WORD PTR DS:[ESI+EDX*2+11],AX
00408C82 |. 47 |INC EDI
00408C83 |. 42 |INC EDX
00408C84 |.^ EB E6 \JMP SHORT Ekd5.00408C6C
00408C86 |> 0FB707 MOVZX EAX,WORD PTR DS:[EDI]
00408C89 |. 8A4F 02 MOV CL,BYTE PTR DS:[EDI+2]
00408C8C |. 8946 1C MOV DWORD PTR DS:[ESI+1C],EAX
00408C8F |. 884E 20 MOV BYTE PTR DS:[ESI+20],CL
00408C92 |. 83C7 03 ADD EDI,3
00408C95 |. 33D2 XOR EDX,EDX
00408C97 |> 83FA 05 /CMP EDX,5
00408C9A |. 73 0A |JNB SHORT Ekd5.00408CA6
00408C9C |. 8A07 |MOV AL,BYTE PTR DS:[EDI]
00408C9E |. 884432 2B |MOV BYTE PTR DS:[EDX+ESI+2B],AL
00408CA2 |. 47 |INC EDI
00408CA3 |. 42 |INC EDX
00408CA4 |.^ EB F1 \JMP SHORT Ekd5.00408C97
00408CA6 |> 33D2 XOR EDX,EDX
00408CA8 |. EB 01 JMP SHORT Ekd5.00408CAB
00408CAA |> 42 /INC EDX
00408CAB |> 83FA 01 CMP EDX,1
00408CAE |. 7F 23 |JG SHORT Ekd5.00408CD3
00408CB0 |. 8BCA |MOV ECX,EDX
00408CB2 |. 6BC9 03 |IMUL ECX,ECX,3
00408CB5 |. 0FB607 |MOVZX EAX,BYTE PTR DS:[EDI]
00408CB8 |. 884431 2E |MOV BYTE PTR DS:[ECX+ESI+2E],AL
00408CBC |. 2D FF000000 |SUB EAX,0FF
00408CC1 |. F7D8 |NEG EAX
00408CC3 |. 1BC0 |SBB EAX,EAX
00408CC5 |. 8AE0 |MOV AH,AL
00408CC7 |. 24 02 |AND AL,2
00408CC9 |. 80E4 01 |AND AH,1
00408CCC |. 66:894431 2F |MOV WORD PTR DS:[ECX+ESI+2F],AX
00408CD1 |.^ EB D7 \JMP SHORT Ekd5.00408CAA
00408CD3 |> 8A07 MOV AL,BYTE PTR DS:[EDI]
00408CD5 |. 8846 34 MOV BYTE PTR DS:[ESI+34],AL
00408CD8 |. C646 35 FF MOV BYTE PTR DS:[ESI+35],0FF
00408CDC |. C646 36 FF MOV BYTE PTR DS:[ESI+36],0FF
00408CE0 |. 807E 2C 00 CMP BYTE PTR DS:[ESI+2C],0
00408CE4 |. 75 03 JNZ SHORT Ekd5.00408CE9
00408CE6 |. FE46 2C INC BYTE PTR DS:[ESI+2C]
00408CE9 |> 47 INC EDI
00408CEA |. 8BC7 MOV EAX,EDI
00408CEC |. 5F POP EDI
00408CED |. 5E POP ESI
00408CEE |. 8BE5 MOV ESP,EBP
00408CF0 |. 5D POP EBP
00408CF1 \. C2 0C00 RETN 0C
像我已经把攻击力的初始值改到了1.5倍武力
00408F2E /$ 55 PUSH EBP ; 存档
00408F2F |. 8BEC MOV EBP,ESP
00408F31 |. 51 PUSH ECX
00408F32 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00408F35 |. 53 PUSH EBX
00408F36 |. 33DB XOR EBX,EBX
00408F38 |> 83FB 48 /CMP EBX,48
00408F3B |. 73 09 |JNB SHORT Ekd5.00408F46
00408F3D |. 8A11 |MOV DL,BYTE PTR DS:[ECX]
00408F3F |. 8810 |MOV BYTE PTR DS:[EAX],DL
00408F41 |. 40 |INC EAX
00408F42 |. 41 |INC ECX
00408F43 |. 43 |INC EBX
00408F44 |.^ EB F2 \JMP SHORT Ekd5.00408F38
00408F46 |> 5B POP EBX
00408F47 |. 8BE5 MOV ESP,EBP
00408F49 |. 5D POP EBP
00408F4A \. C2 0400 RETN 4
存档也是 全部信息保存
00409018 /$ 55 PUSH EBP ; 读档
00409019 |. 8BEC MOV EBP,ESP
0040901B |. 51 PUSH ECX
0040901C |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0040901F |. 53 PUSH EBX
00409020 |. 33DB XOR EBX,EBX
00409022 |> 83FB 48 /CMP EBX,48
00409025 |. 73 09 |JNB SHORT Ekd5.00409030
00409027 |. 8A10 |MOV DL,BYTE PTR DS:[EAX]
00409029 |. 8811 |MOV BYTE PTR DS:[ECX],DL
0040902B |. 40 |INC EAX
0040902C |. 41 |INC ECX
0040902D |. 43 |INC EBX
0040902E |.^ EB F2 \JMP SHORT Ekd5.00409022
00409030 |> 5B POP EBX
00409031 |. 8BE5 MOV ESP,EBP
00409033 |. 5D POP EBP
00409034 \. C2 0400 RETN 4
[ 本帖最后由 砖家叫兽 于 2012-2-21 18:12 编辑 ]
作者:
砖家叫兽 时间: 2012-2-21 18:10
最常见的那些 HP 攻击力 姓名 等 都可以直接搜索相应的偏量
比方搜索1C 找到【XX+1C】 判断是否血量
而R形象的话 其实完全可以靠剧本指令,每个R中出场人物 第一次出场加一条R形象指定 现在问题是在DATA编辑器不能输入双字节 要么修改DATA编辑器 要么就用剧本指定 从DATA复制信息时可以 只取 不存
应该对于制作者来讲 用编辑器在引擎中指定R形象应该比 剧本中指定复杂一些吧
超过255的不需要DATA,那么完全可以在导入时判断一次 是否 FF 不是的话 继续从DATA取值 是则靠剧本指定
如果扩充需要对DATA进行大手术,首先需要设置一下新的DATA文件格式,是用字符 还是用数值(字符转换数值这个我已经导入了若干TXT文件)使用TXT格式 还是用XLS 的EXCEL格式 文件信息就是个编码与解码的过程,用UE来研究文件中信息的格式很有效
我一直以来尝试着另外一条路,就是脱离编号。
首先是剧本和地图,采用汉字命名的文件,依靠剧本来衔接。
其实这条路如果走下去的话,完全可以无视编号,而唯一的限制 是硬盘的大小。
[ 本帖最后由 砖家叫兽 于 2012-2-21 18:27 编辑 ]
欢迎光临 轩辕春秋文化论坛 (http://www.xycq.org.cn/forum/) |
Powered by Discuz! 5.0.0 |