希望制作游戏修改器的请进 神器CheatMaker_1.80【附实例】
本帖最后由 含烟 于 2018-12-26 16:29 编辑制作者 天枫十一郎
CheatMaker是一个内存修改&游戏修改器制作工具.可以用以修改程序的内存数据及文件数据.它除了具备基本修改器的功能外 最大的特点就是你可以使用它来制作基于任何程序的专用修改器 而且它不但支持直接修改电脑程序/电脑游戏在内存中的数据 并且可以制作运行于模拟器上的电视游戏的修改器.
CM(简称)支持普通游戏修改器的大部分功能:数据搜索 数据修改 内存管理 地址管理...等等.而CM不仅仅是这样 它可以制作基于任何程序的专用修改器 静态修改(文件修改) 动态修改(内存修改)皆可.当然也包括任何游戏!它不仅支持PC程序 还支持大多数的EMU数据修改.使用灵活强大的{支持程序}(PC/EMU动态修改)设定功能 能够固定的处理PC动态地址数据.CM是实际上是可以对任何类型数据进行操作的 因为它的最小单位可以支持数据位(bit) 使得操纵二进制数据成为可能.
在数据处理方面 如果内置功能还不能满足修改需求的话 还可以自己制插件来支持各种数据操作.使CM对于数据的操作能依照插件设计的意图工作.输出最原始的数据 输入自定义的数据 完全由用户自己发挥.新版本中还加入了脚本功能.使得修改器的界面及数据可以在运行时被动态设定.更增加了修改器使用的自由度.
除去对数据处理的强大支持外 使用CM制作出来的修改器 控件功能强大 灵活多变 自由度极高.完全能满足制作专用修改器需要.除去丰富的控件外 CM还加入图形资源 使得整个修改器的界面可以设计得非常美观.使得任何人都能轻松制作出属于自己幻想中的修改器!
特性:
.制作静态与动态修改器
.生成独立运行的修改器
.同时支持PC/EMU
.自定义支持程序
.完整的修改器功能
.极高的自由度
.插件与脚本的支持
希望CheatMaker能给你带来游戏的乐趣!
CheatMaker v1.80 beta
====================
创造幻想的游戏修改器 这一直是我们期待的......
◆ 增加 GridList控件
◆ 增加 Slider控件
◇ 增加 TabCtrl垂直显示属性
◇ 增加 控件"文本属性"中加入了"\r\n"字符来实现显示字符的换行操作了
◇ 增加 RadioButton控件支持Checked脚本控制选择状态的脚本
◇ 增加 TextBox, CheckBox, RadioButton 透明属性
◇ 增加 图像大小的自动拆分功能
◆ 增加 更改Script属性的脚本.这下牛B了.脚本也可以动态修改了
◆ 增加 "我的修改器"功能
◇ 修正 Code_Mapping插件修改读取数据如果不能与映射表文件匹配则返回原值(以前返回为空值)
◇ 修正 弹出窗体按ESC键关闭时锁定功能还有效问题
◇ 修正 一些其它问题
◆ 优化 许多其它功能
◆ 升级 脚本的支持
========================================
取消了ListBox, CombBox"功能类型"属性中的"值列表数据"选项数据控制功能.将统一使用"值数据"选项来实际原来的功能.(老版本将自动升级)
ComboBox, ListBox中的"附加值"(1)自动步长已经弃用.系统将自动转换成专用的"数据步长"属性来代替.(老版本将自动升级)
ListTrueVal, ListTrueValEx脚本已弃用.脚本ValueList可以代替ListTrueVal的功能.脚本ListStep可以代替ListTrueValEx的功能.(不兼容老版本)
ListBox, ComboBox, TabCtrl, GridList的Selected,SelectText脚本用来动态控制当前控件的"选择项索引"和"选择项文本".它们是循环搜索."选择项文本"是前缀完全匹配模式.
GroupBox, ProgressBox, Lable, TextBox添加了脚本.但只能使用自定义方法.没有系统触发方法.现在所有控件都有了"脚本"属性.
现在"图像属性"中的图片会自动拆分.可以使用多行多列的图像的.它会根据"图像大小"属性来进行拆分操作.当长度不够后将换行拆分.如果行数也不够了则认为结束.
CheckBox 集合数据中的勾选启用功能已弃用.默认的所有数据都是有效的.(不兼容老版本)
CheckListBox 集合数据中的勾选启用功能已弃用.初始时将不勾选任何数据.(不兼容老版本)
另外"默认值"属性可能在以后的版本中被脚本替代而弃用.现在起请尽量少使用它.
读取HEX类型数据匹配时.可能需要使用完整的数据.比如匹配0时.读取出来的数据为"00".当你设置匹配值时必需设置为"00"而不是"0".
"我的修改器"功能是新增加的一个独特创意功能.它只对CME修改器用效.
在生成CME修改器的时候 会有一个新的选项.你可以选择对当前生成的CME修改器使用或不使用这个功能.你最好输入完整的修改器标题与作者以便后面查询.
当你选择使用它之后生成的独立EXE修改器就会记录下这个修改器的使用位置信息.然后在CM的网站上你可以在世界地图上看到你的这个修改器被世界哪些城市的人使用过了.
默认显示的前10位使用最多的修改器显示在地图上.你可以使用你修改器的"名称"属性中的值来查询你自己修改器使用情况.
再次解释下Code_Mapping插件
格式: 25(code.txt,2,1)
code.txt为与插件同一目录下的映射文件.
2代表读取判断数据时每2位一步长,假如"值长度"为4,就需要进行两次映射判断.这可以完成对一个值映射两次的处理.如名称之类的长字符.
1代表写入数据时将"当前值"以每1位步长对映射文件进行判断.直到没有值判断完成或设置长度大于读取长度
如果2,1的值不写或全为0.那么代表2=数据长度.1=当前写入值长度.也就是默认值为1只全部都操作一次.
Code_Mapping插件中的写入操作要十分注意.
如果读取时没有匹配到数据.那么它的值在写入时也是有可能被匹配到的.
所造成的结果就是读取后显示的是内存原值.写入时变成了匹配Code_Mapping后的值.造成数据不一致.特别是数字容易有这样的情况
现在的脚本是被升级到了一个新的高度.它对于兼容性与自由度都非常的高.
但也放弃了一些老的编写方式及功能 所以 它现在是不完全兼容老版本的.
请参考DEMO文件来编写最新的脚本.因为它们是更改了非常多...
点击本人制作修改器范例
程序下载
**** Hidden Message *****
帝國復興黨 本帖最后由 含烟 于 2018-12-23 17:12 编辑
文件目录结构 完整的CM主程序目录下会有:
◇ "CheatMaker.exe" (主程序)执行它来开启管理器,设计器及运行器(修改器).
◇ "Update.exe" (更新程序)系统调用的自动更新程式.有些必要的更新可能会调用它来执行.不能删除它.否则会导致主程式不能运行.
◇ "CheatMaker.ini" (主程序配置文件)保存了个人习惯的一些CM配置信息.它的名称是根据主程式的名称而变化的.
◇ "EmuList.cml" (支持程序数据文件)是专属的CM支持程序文件 对于修改模拟器游戏来说非常重要 因为里面存放着所有支持模拟器和PC程序的信息 所以 如果没有了这个文件的话 CM就不能自动识别支持的程序(模拟器) 而只能修改PC程序了.你可以在程序选项中调出{支持程序管理}来修改它 让CM能支持你自定义的任何程序.你可以手动添加对模拟器 只要你懂得一些这方面的知识 你就可以让CM支持对任何模拟器游戏数据的修改!
◇ "License.txt" (使用许可文件)记录了最终用户使用CM的许可协议.保证你同意并能遵守它.否则你将被视为非法使用未授权的CM软体.
◇ "Data" (修改器数据文件目录)是存放所有修改器文件的地方 当运行修改器文件时 也是从这里读取文件.使用设计器设计好的修改器文件都存放在这里.修改器不能放到别的地方 因为CM是根据你所选择程序的类型 来读取相应文件夹中的修改器文件.比如你在CM中选择了"FC"类型的模拟器 则CM修改器选择里只会列出这个目录下的"FC"目录里的所有修改器文件.所以 正确的修改器文件放到相应的文件夹内非常重要."PC"文件夹中存放着所有PC类型的修改器.
旧版的CM中会有类似Image,Images,Res目录(根据版本不同.只存在一个).存放着所有修改器文件所使用的图形文件 包括icon文件.可以是.bmp .jpg .jpeg .gif .ico图像格式.但从v1.42版本开始 已将资源文件内置于cm修改器中.
◇ "Languages" (界面语言文件目录)目录则存放的是多语言数据.你可以自己根据其中内容自定义语言文件.默认有三种语言供选择: 简体中文,繁体中文,English.
◇ "Plugins" (插件目录)里面有官方发布的一些重要插件.某些程序及模拟器脱离了插件将不能正确读写数据.修改器将不能正确运行 所以官方自带的插件要保证其完整.
◇ "Cheats" (地址码目录)保存着搜索时的地址结果记录 可直接用于动态修改.
◆ 程序界面结构
主程序界面(修改器管理) 此界面为CM软件的主界面.可以由这里打开"设计器"来制作属于你自己的修改器.也可以选择程序或者游戏来进行一般的修改.当然也可以使用已经存在的修改器来修改程序或游戏.
1. 列出了所有当前运行的程序.而这里显示的程序是可以根据"选项设置"中的"视觉选项"来控制的.它可以显示程序的标题 也可以显示程序的进程名 还可以决定是否筛选系统进程等.注意第一列为存档与源文件的修改项 可以单击它来选择要修改的存档或文件实现静态修改.如果在这里看不到你所需要修改的进程.那么先确认"选项设置"中是否启用了筛选进程.或者去掉选择显示"进程标题"功能.
2. 勾选了此项的话 则只显示EmuList.cml文件中支持的程序 主要用于快速筛选模拟器或支持的程序.
3. 刷新显示当前系统下运行的进程列表.
4. 根据当前选择程序的类型列出了相应目录下的所有可用修改器文件.选择了这里的修改器文件后 就可以执行它来修改游戏了.
5. 显示了当前选择的修改器文件信息.
6. 这是针对特殊要求的高级操作.如果支持程序的基址或地址有误差 在此处填上误差值即可修正.详细请见附录的介绍.
7. 同基址修正一样 不过此处是修正实际地址的误差.
8. 列出了所有可供选择"支持程序"的名称.当选择了程序或模拟器之后 如果"支持程序"中有多个针对此程序或模拟器的设置.那么必需在这里选择正确的一个.这里出现的设置一般来说只有一个 但也有可能多个.例如针对一个游戏有多个版本时 而多个版本的"支持程序"配置又不一样.那这里就要选择正确的一个.而部分模拟器也会出现多个"支持程序"配置名称.
9. 选择好了名称之后 那么此处就会列出此名称所支持的类型.对于PC(程序)类型只有一个 即PC类型.而对于EMU程式来说 那么类型将会由"支持程序"中存在的类别决定.一般模拟器支持的类型都会存在.另外EMU程式中一般会加入PC类型供选择 是因为在EMU类型不能正确操作数据时 用于将其当成PC程式操作进行临时搜索数据操作.如果是File(存档/文件)修改的话 此处则会列出所有支持的类型以供选择不同的修改器.
10. 显示了当前"支持程序"的配置信息.
11. 当一切选择正确之后 则可以点击运行相应的CM修改器.
12. 点击后显示当前使用插件的信息.默认有一些修改器是必需要选择插件的.有些系统插件也是必需要勾选的.但这些都是自动完成的 除非你需要手动指定 否则不要动它 以免修改器不能正确的读取与写入数据.
数据搜索界面 如果你需要搜索游戏中某个数值的内存地址 那么请从这里开始.设计修改器所需的内存地址都需要从这里搜索找出来.
1. 输入要搜索的数值.这个数值可以是十六进制,二进制,浮点数等.也可以是模糊搜索功能符号.例如?,-,+等.
2. 输出搜索动作的状态信息.
3. 执行搜索内存数据.
4. 清除上一次搜索结果 并重新开始新的搜索.
5. 搜索的结果显示.内存地址是程序实际分布在操作系统中的相对地址.CM地址则是根据"内存编辑"中的数据长度来定的一个内部相对地址.
6. 指定搜索的数据类型.默认为"自动计算字节位".对于一般的数值搜索 CM将会根据输入的数值计算它的长度.然而如果你知道要搜索的数值长度 那么手动选择 将会大大提高搜索速度.如果需要搜索十六进制字符串 那么也有相应的类型选择 供高级操作.按"字符串"类型搜索的话 还可支持ASCII编码汉字.
7. 数据匹配的方式.其中的选项会根据当前的搜索次数而动态变化.当选择模糊初始化时 搜索类型只能是指定的字节位类型.
8. 指定搜索的内存长度范围.搜索长度范围越小 搜索花的时间就越少.
9. 添加选中的结果至"数据管理"模块中.
10. 删除选中结果.
11. 转到"内存编辑"模块中定位当前选中的这个地址.以便供进阶用户快速编辑此内存地址数据.
12. 重新载入"搜索结果"中的内存地址数据.用于刷新结果中当前内存的值.
数据管理界面 管理搜索到的数据.并可以手动添加新的数据直接应用于内存的修改.在这里 可以安全快速的修改指定内存地址的值.注意 这里操作的数据都是即时写入内存的.
1. 手动添加一个新的地址中的数据到管理器.新添加的值将立即写入内存中.
2. 修改当前选择一条记录的地址与数据.
3. 删除当前所有选择的记录.
4. 不管选择与否 全部删除结果表格中的记录.
5. 加锁或解锁当前选中的记录.这样一来 被加锁的记录将持续将设置的值写入内存中.
6. 保存当前所有表格数据到.chs文件.
7. 读取已存在的.chs文件到表格.注意 读取后数据将立即写入内存中.
8. 直接跳到当前选择记录的地址在"内存编辑"模块中.
9. 重新从内存中读取表格中的所有值.
10. 所有被管理的内存地址以及它的数据.
内存编辑界面 查看当前操作程序的实时内存数据 并且执行快速编辑修改操作.注意对它的操作将直接写入内存.特别注意的是存档或源文件修改 请先做好备份.红色的部分是代表已经更改过的数据.重新选择进程后则会自动消除.也可使用撤消手动消除.
1. 当前地址.注意 这里可以是CM地址也可能是内存实际地址.(输入回车可跳到指定地址)
2. 默认使用的是CM地址来操作.勾选后 将使用内存地址来操作定位.
3. 按下后内存数据跳转到当前地址的位置.
4. 当前地址的数值.编辑后回车可以直接修改.
5. 撤消上一步所做的数值更改.(组合按下Ctrl键撤消所有已更改.组合按下Shift键清除所有更改)
6. 重新读取当前范围显示的内存数据.
7. 显示了当前选择程序的内存 如果是PC程序则按实际内存地址显示所有数据.
8. 显示了当前地址的内存实际地址.
9. 显示了当前地址各种数据类型的信息
10. 勾选此项将实时更新显示内存数据.注意 这将占用更多的资源 影响CM运行性能.
选项设置界面1. 在"数据管理"和运行的修改器中锁定数据的延时设置.数值越小则越快 当然程序性能也就会降低.
2. 指定运行程序启动CM主程序(管理器)还是"设计器"模式.
3. "设计器"打开后自动打开最后一次编辑的修改器.
4. 在一运行修改器就直接执行读取内存数据.这样修改器就能在一开始就获取当前程序运行的数据.(一般情况下都需要开启)
5. 是否关联.cmf类型文件.开启后则双击.cmf文件时 自动打开CM程序在"设计器"状态.
6. 指定程序列表中显示的程序是否要进行筛选 不显示系统进程.一般是不需要修改一些系统程序的.但也有些程序会假装成系统进程.如果你看不到它 可以不勾选它试试.
7. 指定程序列表中是显示程序进程名还是标题名.如果设置显示标题名 那么CM会隐藏一些无窗口UI的程序.如果你看不到你想要修改的程序 可以试试不勾选它.
8. 是否在程序列表中显示程序图标.
9. 程序语言的切换.系统默认则表示程序会根据当前操作系统所使用的语言来自动切换.
10. 选择不处理的内存类型.(建议默认)
11. 搜索数据时暂停目标程序.搜索完毕后自动恢复.如果要修改的程序或游戏数据变化得很快 可能你就要使用这个功能了.它可以防止数据在搜索的时候不会变化 以至于一直搜索不到想要的数值.
12. 打开"支持程序"管理.EmuList.cml文件中的数据 可以从这里更改.也可以从程序列表的右键中开启它.关于"支持程序" 详见后章的解释.
13. 恢复系统默认的设置选项.如果你改乱了系统默认的设置或CM运行不稳定 请记得点击这里恢复它.
支持制作修改器的游戏类型本人制作修改器界面截图
本帖最后由 含烟 于 2018-12-23 15:48 编辑
每一个控件都必有8个基本属性:名称,文本,坐标,大小,是否禁用,是否显示,附加数据,字体.不同的控件可能扩展有更多的属性 这也是它们功能的不同之处.CM共设计有12个控件 已经完全能满足设计修改器所需要.最为重要的就是"数据控件" 它们操作的对象主要是数据 而共同之处就是它们都有地址属性 也有值属性和值大小属性.灵活运用 功能甚为强大.只有完全了解控件属性的含意 才能发挥CM强大的功能.
◆ 控件资料
名称说明附加值(非公共)
按钮控件(Button) 功能有:读取数据,写入数据,锁定保存,锁定读取,读取默认值,创建文档窗体,退出窗体,执行脚本功能.在将它加入到项目中后你可以在属性中指定它其中的一个功能.在一个项目中你可以随意添加多少个按钮控件 但是实现的功能只有这7种.它的有效范围可以在属性中设置 如果设置为Frame则表示控件所在的整个窗体.如果设置了"创建文件窗体"功能 则还需要在下面选择要创建的窗体 并且还要设置是否模态显示.如果你需要在当前窗体中显示创建的新窗体 则可以在"内置窗体"中输入要显示窗体的起始坐标.默认值为0则表示不在当前窗体内部显示.
文本控件(TextBox) 数据控件.在运行时供使用者输入数值 然后写入到内存中 或显示内存中的数值到控件中.支持多值多地址方式.它是非常重要的数据控件 因为它可以提供十进制数方式供使用者操作.还可接受各种数据格式输入.但最为重要的-它的数据是可以动态由用户指定的.
标签控件(Lable) 提供显示信息使用.也可作为美化窗体控件来使用.
选择控件(CheckBox) 让用户设置是否勾选来达到控制内存数据的效果.关联了"数据格式"属性.能够动态使其支持"数据集合"属性.从而灵活的控制更多地址数据.不勾选则写入"取消值"
组合控件(ComboBox) 非常优秀的数据控件 自由设置度极高.可以提供多个选项以供选择.并且支持多值数据.还可支持图像列表显示.它能够进行"数据功能"与"控制功能"两者操作 可以随意动态改变.关于这两者属性详细说明 请参照属性资料表.统一设置"数据"的偏移值.如果"数据"属性的每个值的偏差都是固定的 你可以使用这个附加值统一设置它的值.程序会将括号里的值与当前选择项相乘 得出来的数据就是当前要操作的数据.第一个选择的数据总是从0开始.格式例: 1(2F)
框架控件(GroupBox) 起初设计为美化界面的控件.但之后版本加强了它的功能 使之成为一个操作范围计算基准.在所有"控制功能"的控件中 都将有一个"操作范围"属性.而这个范围 就是由GroupBox控件来设定的.如果选择了某个GroupBox作为操作范围 则坐标在其内的所有控件都将被操作.
图像控件(PictureBox) 美化界面的控件.支持的格式有: .bmp .jpg .jpeg .gif 及其它一些能够导入CM的图像格式.并支持gif动画格式.使修改器界面更加动感.
列表控件(ListBox) 可以操作数据也可控制数据.用来解决批量数据操作的功能.主要一般用于"控制功能".支持图像列表.运行时 默认首次会自动选择项目数据为0的行.统一设置"数据"的偏移值.如果"数据"属性的每个值的偏差都是固定的 你可以使用这个附加值统一设置它的值.程序会将括号里的值与当前选择项相乘 得出来的数据就是当前要操作的数据.第一个选择的数据总是从0开始.格式例: 1(2F)
多选列表(CheckListBox) 解决操纵多项数据的开关问题.支持多值数据.支持图像列表.
老版本使用不勾选则写入value值.格式例: 1(2F)来设置取消值.而从v1.50版本开始 该控件加入了"取消值"属性直接设置.不勾选则写入"取消值"
进度控件(ProgressBox) 可以图形化显示一个数据范围的进度控件.它的固定值可以手动设置也可以直接从内存中读取.如地址: 1000,1001 则代表动态值从1000地址读取.固定值从1001地址读取.
多标框架(TabCtrl) 能在一个界面上实现多个窗体的切换.实际上只是做为一个切换功能使用.本质还是显示已设计好的窗体.变通使用 亦可做集成多种修改功能为一体的修改器.如多版本切换.内存/文件/存档修改为一体的修改器.
单选按钮(RadioButton) 在界面上自由的进行互斥操作.能够同时操作一个内存地址而只保留当前选择的值.不但是这样.它还能互斥不同的地址.灵活运用 将会有更多意想不到的效果.不勾选则写入"取消值"
◆ 属性资料
属性名称功能描述
名称 对象名称的标识.在同一个文档窗体中 控件名称的设定只能唯一.并且文档窗体与修改器项目的名称也不能相同.不要使用",. /;'~!@#$%^&*()_+{}|\\<>?:\"[]`-="等符号.
文本 对象信息的属性.对于可以显示信息的对象 则会显示出此处设置的信息.
坐标 可以指定对象的起始坐标.如果是控件 则此坐标是相对于所在的文档窗体左上角而言.
大小 标识对象的完整大小.
是否禁用 标识了对象是否响应操作.对于控件 在修改器运行时 对其进行写入数据操作是无效的 但对于读取数据是有效的.禁用的控件会呈灰色显示.
是否显示 标识是否在运行时显示对象.运用这个功能 可以巧妙的完成某些功能而不显示对象本身.
附加数据 相对于对象的扩展功能.关于所有"附加值"的详细资料 请看后面的"其它功能"章节.每个对象设定的附加数据含意不一致 请参考控件资料查看.公共附加值则对任何控件都起着相同功能.现已拥有的公共附加值功能如下:
1 对于有"取消值"属性的数据类型控件一般作为启用"取消值"标识.
6 使其控件中的"地址"属性中的值永远为内存实际地址值.而不根据是否当前程序加入了支持程序使用CM地址.
7(value) 当一个数据控件"数值"属性是多值时 这个附加值标识了下一个要写入值的地址基于上一个地址偏移多少位再开始操作.
字体 改变对象的字体及字体颜色功能.对于某些控件 字体颜色功能将无效.
风格 改变当前对象各种显示的样式风格.有浮动框架与三维边框供选择.
背景颜色 可以改变对象的背景颜色.默认的值为系统默认的颜色.
排列 指示对象中文本的对齐风格.有居左 居中 居右供选择.
地址(HEX) 数据控件专用的属性.接受十六进制数据.标识要操作的内存地址.对于PC程序 这个值是内存的实际地址.对于EMU程序或支持程序 这个值是CM地址.支持多值数据.另外要注意的是 如果此数据是多值数据 在修改器运行时 "数据读取"操作会截取第一个地址数据来进行读取.而"数据保存"操作时才会对所有地址进行操作.
数值 一般与地址(HEX)属性共同存在.默认接受十进制数据 也有的会根据"数据类型"属性设置的标识改变数据类型.支持多值数据.用它来标识你要写入内存的数据.推荐除TextBox之外的控件 都使用多值方式来操纵1字节数据 这样的兼容性最高.对于浮点型操作 这里最多只能操作7位数据.对于二进制操作 这里只能设置0或1的数值.
数值列表 用于解决多"数值"属性选择的功能 并能提供信息以便选择操作.功能与"数值"属性一致.但它的值设定格式为:0-None 每一行代表一项数据 0代表实际操作数据 为十六进制格式 -符号代表分隔 None则代表显示数据.
数值大小 一般与"数值"和"数据(HEX)"属性组合使用 标识了它们值的操作字节位数.<=255为1字节数据.<=65535为2字节数据.<=4294967295为4字节数据.但一般最好设定为1字节对单个地址进行操作.对于"数据类型"为二进制时候 这个属性则标识了一个1字节8位数据的操作位置.例如一个8位字节:10010110 如果此处设置为1 则代表操作的是第一位数值1.如果此处设置为8 则代表操作第8位0 实际上是将高位列在前 低位列在后.
默认值 与"数值"属性对应的功能.并且只在设定了按钮的"功能"属性才有效.当操作"读取默认值"功能时 将此值替换控件当前的"数值"属性值.
默认值(List) 与"数据(HEX)"属性对应的功能.并且只在设定了按钮的"功能"属性才有效.当操作"读取默认值"功能时 将此值替换控件当前的"数据(HEX)"属性值.
取消值 标识了不勾选其控件时需要写入的数值.要说明的是 仅当在设定了相关控件的"附加值"属性标识为1时才有效.设置它的值时需要注意当前的"数据类型"属性值 它是与之相关联的.如果你"数据类型"为十进制 那么取消值值应该是255这样形式的十进制格式.如果"数据类型"为十六进制 那么取消值值应该是FF这样的形式.如果"数据类型"为浮点数那么取消值值应该为1.234这样的格式.
类型 标识修改器项目的所属类型.不但用于标识类型 也标识了文件保存的目录.
功能 只有Button有此属性关联.能够控制某个范围内所有控件的保存 读取 锁定等功能.并可以控制来创建新的窗体.
创建文档 在"功能"属性中指定"创建文档窗体"功能后 还需要在此属性中指定要创建的文档窗体.
模态显示 如果指定是 则表示创建的文档窗体显示后位于其它窗体之上 并且其它窗体都不能操作.如果指定否则与之相反.
内置窗体 默认值为0,0 表示不生效.如果设置值的话 则代表位于当前窗体内的起始坐标.这样 在创建新的窗体后 新文档窗体不在外部显示 而是直接附加于当前窗体中.
信息 表示修改器中的相关信息.
密码 设定修改器的密码.之后再打开编辑的话 则需要输入此密码.而运行修改器时则需要密码.
数据集合 可以批量设定操作地址与数据的属性.非常灵活的数据属性.
图像文件 指定关联图像的名称.这个名称最早是基于.\Data\Images目录下的图像文件.后期版本已经将图像文件集成于修改器文件中 所以这里只需要指定图像名称即可.如果是非单幅位图 则它的大小由"图像大小"指定.然后沿右边一直自动截取图像.默认的透明值是RGB(255,0,255)
窗体位置 主要用于控制修改器窗体运行时的位置.可以设置为基于坐标设定 也就是根据"坐标"属性来规定.也可以指定为屏幕中心 则表示位于显示器正中央.如果指定为窗体中心的话 则表示会显示在基于上一个窗体的中心.
图标文件 用于修改器左上角图标的设定.
图像大小 与"图像文件"属性相应对.控制显示图像的大小.对于多位图 则由这里设定截取大小位.被应用此属性的控件 有可能会自动改变其大小以完全显示图像.
操作范围 表示具有"控制功能"控件的有效范围.它是以Frame文档窗体与GroupBox控件来判断范围的.如果指定为Frame则表示在当前文档窗体中所有控件都被控制.如果指定相关的GroupBox控件 则表示在此GroupBox坐标内的控件都被控制.
功能类型 将会改变其它属性的动态属性 主要是指定控件的操作功能.可以选择的功能有:"数据操作","控制地址","控制数值","控制数值列表"."数据操作"以一般的操作数据为主要功能.根据其设定的"地址"与"数值"属性进行内存操作.而"控制地址"则可以操纵有"地址"属性的其它控件 动态改变其数据 从而进行控件地址的动态变化."控制数值"功能则控制变化的是目标控件的"数值"属性."控制数值列表"属性 则可控制目标控制的"数值列表"属性中的值.灵活运用 则可达到具有控制功能属性的相关控件链式控制.
还需要注意的就是.当是"数据操作"功能时 控件使用"数据类型"属性指定的类型.而当是其它控制功能时 固定使用十六进制类型.
数据类型 对于内存中各种不同的数据进行处理这里要设置正确的数据类型.默认是对十进制处理.这个属性是与"数值"属性相关联的.这里设置了什么样的类型 "数值"属性中就应该设置什么样格式的数据.推荐一般都使用十六进制数据格式.因为它的数据不需要转换 并且是兼容性最好的数据格式.除非你使用TextBox这样可视化的需要使用者输入十进制数据的控件 否则都应当使用十六进制数据格式.
如果使用二进制格式.那么值将只会是0或1两种.而你除了指定地址外 还需要手动指定要操作哪个bit位的值.二进制格式只能操作一个字节中的8个bit位数据.指定的位置在"数值大小"属性中设定.且支持多值格式.
窗体透明度 只有窗体才拥有此属性.它能使目标窗体界面透明化.这里要注意的是只支持第一个显示的窗体(首窗体)具有此功能.
无标题栏 只有窗体才拥有此属性.可设置窗体不显示上方的标题栏.设置之后 窗体的移动由鼠标随意拖动.Alt+F4关闭窗体或使用"按钮控件"的"关闭窗体"功能.
数据格式 动态属性.可以指定控件的数据操作是使用单值数据还是集合数据方式.虽然单值也能拥有多值功能 但通常集合数据更灵活些.
修改器版本 只在工程中拥有此属性.显示了当前修改器的版本标识.
绑定插件 标识了当前修改器需要使用的插件.多插件以","符号分隔.
脚本 可以编写规定格式的CM脚本 用来动态改变修改器的功能.
背景透明 可以使控件或窗体背景透明化 从而达到与背景的图像重叠效果.
图像模式 指定窗体背景图像是以平铺还是自动伸展效果显示.
本帖最后由 含烟 于 2018-12-23 15:53 编辑
本帖最后由 含烟 于 2018-12-23 16:03 编辑
CM使用特有的"支持程序"来管理EMU数据.并且也支持PC数据.它使制作动态内存游戏的修改器成为可能.开放与自由的数据格式 让高级进阶者能够处理几乎任何数据.
支持程序管理界面 CM默认加入了对常用模拟器的支持(详细见"进阶文档").使用支持程序的确需要用户对修改知识了较多.每一个程序可以对应多个类型 每个类型又可对应多个地址 这些地址可以是由基址获取 也可以是直接内存地址.
如果需要更新EmuList.cml文件 则应该使用界面中的"导入"按钮功能 这样可以保留原来的数据.如果名称 标识 类名 特征地址 特征数据一致的记录则不会导入.
◆ 程序信息
◇ 系统: 如果勾选此项 则表示下次打开管理器 则隐藏该项.一般来说请勿勾选此项 否则你将不能再次看到这条配置记录.
◇ 名称: 一般用来标识程序的版本或做特殊的标记用于区分同一个类型程序不同的版本或功能.
◇ 标识: 用来识别这个程序的文件名(进程名).当在进程列表中点击这个程序时 会根据这个标识来判断是否支持.它与类名同属于一个功能.支持多值设置 以","号分隔.
◇ 类名: 唯一的用来判断程序是否被CM所支持.支持多值设置 以","号分隔.
◇ 特征地址: 标识某一个地址 用来确定程序所读取的内存地址起始位置.(保留)
◇ 特征数据: 标识某一个唯一数据 用来确定程序所读取的内存地址起始位置.(保留)
◇ 附加数据: 保留
◇ 说明: 对此程序的简要说明.选择此支持程序后 会在界面中显示此信息.
◆ 支持类型
支持类型分为三大类:一类为PC程式 一类为EMU程式 一类为FILE文件(存档/源文件).系统默认是有PC与FILE支持的.EMU程序类型也存在于EmuList.cml文件中.用户也可自行添加 添加新类型后 .\DATA目录中将会自动产生一个新的类型目录 用于保存此类型的CM修改器文件.
支持类型 一个程序可以支持多种类型 对于PC程式和FILE文件来说 都只有一个类型.但对于EMU程式来说 所支持的类型也许就不止一个了.不同的类型基址 实际地址 长度等都有可能不同 所以就需要分别设置.
◆ 支持类型数据
◇ 基址: 读取这个地址所指向的数据(地址).用于初始的CM地址 也就是起始地址.CM一开始将会查找这个基址的数据 将其数据设定为起始地址 然后对应修改的所有地址操作 都是基于此地址偏移的.对于PC类型也就是非支持程序来说 一般设置为0.表示直接使用PC程序在操作系统中的起始地址.
在新版中 此基址支持多级设定.格式为:0018A041,0,7,2,0 表示首地址为0018A041 然后依次读取4级地址后使用最后一个读取的地址数据.在读取第一个地址数据后根据第一个,号后面的值0进行偏移查找 然后再进行第二个,号偏移7进行查找 再依次到最后一个 获取到的地址数据为最终使用 将其设定为起始地址.
◇ 基址特征数据: 标识某一个唯一十六进制数据 用来确定基址的位置.如果希望设置一个基址就能完成对某个程序大多数版本都支持话 那么使用特征数据是很好的方法.使用单个基址设定有个不好的问题就是 如果程序版本升级 代码有改动甚至长度改变都有可能影响基址的正确性 模拟器就是比较典型的例子.CM使用特征数据查找到定位相同程序不同版本的基址.
基址特征数据格式: 6FEC9807E9,3,1
1位是特征数据用来查找指向基址的内存地址.查找到此数据后的地址中的数据即为基址.
2位是找到的地址偏移多少位再取值设定为基址.(可以负数,可忽略)
3位是找到的基址修正大小.(可以负数,可忽略)
4位是使用顺序第几次的查询结果(可以忽略则表示使用第一次查询到的地址).也可使用负值 -1表示使用最后一次查找到的值.
可使用?符号通配符 例如: 6FEC????????98??E9,4 则表示使用查找到的数据中????????中的数据为基址.
组合使用其它数据段 将发挥更多作用.例如特征码数据搜索game.dll模块并使用4级指针格式为: 8DB0A9,4|5(game.dll)|7(2,0,7)
2(03000000) 表示使用搜索 设置搜索起始地址(优先于搜索模块5标识)
3(04000000) 表示搜索范围 0则表示从2标识的起始地址到最后
4 保留设置为到某一个地址值 而不是大小(范围) 还未使用
5 搜索指定模块.例: 8DB0A9,4|5(game.dll)
6 表示直接使用搜索到的地址作为基址 否则读取此地址的数据作为基址
7(4,0,2,1) 多级指针.数值表示偏移量.个数表示每次的偏移次数.
◇ 数据大小: 读取数据的长度.对于PC类型来说 一般为0 则自动使用程序的长度.
◇ 附加数据:
0或""空值表示使用基址.(通过基址来读内存地址)
1表示使用直接内存地址为实际地址.(不读基址来定位实际地址).使用基址特征地址时指向地址为实际地址起始.
2(-4000) 表示修正地址
3(8)表示此基址为相对于上一个基址的偏移地址(要减去4位自身长度)
4(4)表示使用基于上一个实际内存地址的偏移
5(80)表示修正基址
9(Turn_Data)表示自动应用Plugins目录下的此插件.可同时应用多个插件 例: 9(CPS3_Emu_Fix,Turn_Data)
以上附加数据可以多重设定 以|为分隔符.如: 1|2(800) 并且它是同时支持"基址"与"基址特征码"数据栏的.
从v1.40版开始 CM支持插件的使用.最初插件被设计成为解决不同程序及不同游戏类型在内存中处理的数据类型不一致的问题.当然 对于修改器中只使用十六进制HEX一种数据类型来说 你不必专门设计插件来解决数据存储问题.因为十六进制是能操纵任何数据的.但如果同一类型某一个程序会使用一种存储结构 其它一个程序会使用另一种存储结构或数据结构 那么这样的话 一个修改器是不能同时兼容这两个程序的.这时你就需要使用的插件来帮助解决.它可以指定哪个程序需要处理 哪个程序不需要处理 灵活方便.另外 如果你需要使用十六进制以外的数据类型 如十进制类型 而且还要使用TextBox控件手动输入十进制类型的数据 那么也不得不使用插件来处理.并且 在搜索时 你运用插件能使用普通的方式搜索出专属某一程序的数据结构. 插件信息 点击主界面中的"插件"按钮 则会列出程序目录下"Plugins"文件夹下的所有有效插件.打勾则表示应用此插件.那么当运行修改器时 会自动根据插件中相应的处理过程来处理不同时刻的数据.当进行数据搜索时 也将会应用当前选择的插件.但此插件中应该包含搜索时处理的过程 否则也不会生效.插件是可以多选的 按从上至下的顺序生效.
现在插件是设计成为动态形式的 也就是每次都需要重新设置才能应用于当前操作.它目前的作用范围在修改器运行时和搜索数据时.当然插件的处理过程中应当包含这几个接口处理 否则也不会有效果.如果你改变当前操作程序或当前选择类型和名称 那么插件的勾选应用也会跟随改变.默认是会全部清除选择的.但如果"支持程序"中设定有关联的插件 那么将会自动选择.这些都是内部处理的 除非你需要对自己的"支持程序"设定插件应用.
现在可以使用脚本让修改器"动"起来了.在修改器中编写脚本 然后在修改器运行时执行脚本 从而动态改变控件的属性功能.现在 你可以使图像控件变换不同的图片.你可以拥有多个默认值.你可以使CheckBox自动勾选.你可以让列表数据动态变化.你可以一键切换内存/ROM/文件/存档修改模式...真是太让人惊喜了...脚本功能规定的语法比较简单 格式为:
作用域名称
{
控件名称.控件属性=属性值;
}
当然在作用域名称中可以定义多个控件名称.所有字符都区分大小写.作用域名称会有固定的规定.例如要在按钮按下时触发脚本 那么名称应为: ClickBegin.还有ClickEnd则为按钮按下结束后触发.两者不同是中间执行了按钮的"功能属性".如果"功能属性"设定为保存功能的话 那么在ClickBegin和ClickEnd则会进行保存数据处理.
所有脚本都必需在{}大括号中间.格式为: [对象名].[属性]=[值];固定的符号{,},.,=,;是必不可少的.{,}这两个符号是必需的 它指明了该作用域的范围 里面的数据就是控件要设置的属性值.系统会自动移除空格字符与无效的数据 所以脚本书写可以比较随意 但不能随意书写以上系统规定的字符 否则脚本将无效.例如我们要按钮按下时动态改变一个控件的名称 那么可以使用如下语法: CheckBox1.Text = 改变文本;
//与--符号都是注释符.在此符号后面的数据都会被忽略处理.另外不要随意加入",. /;'~!@#$%^&*()_+{}|\\<>?:\"[]`-="等符号信息(除指定符号外).否则得到的数据可能不准确.
全部的脚本格式则为:
ClickBegin
{
CheckBox1.Text = 改变文本;
}
以下是所有支持使用脚本动态修改的属性信息.可以依次使用观看效果.
CheckBox1.Checked = True;
Label1.FontColor = FF00EE;
TextBox1.Text = 动态改名
PictureBox1.Point = 150, 113;
PictureBox1.Size = 150, 113;
PictureBox1.Disabled = True;
PictureBox1.Visible = True;
TextBox1.Tag = 1|6;
PictureBox1.BackColor = 2F00EE;
PictureBox1.Style = 1;
GroupBox1.Align = 2;
TextBox1.Address = 10000;
TextBox1.Value = 2;
ListBox1.ValueList = 0-0 & 7-7 & 0-值已经改变;
TextBox1.ValueSize = 2;
TextBox1.DefaultValue = 99;
ListBox1.DefaultValueList = 7-7;
CheckBox1.CancelValue = 8;
Button1.CreateForm = 窗体名称;
Button1.ShowModal = 1;
Button1.InnerPoint = 0, 200;
PictureBox1.Picture = 图像名称;
Button1.Bound = GroupBox1 & GroupBox2;
ListBox1.ControlType = 2;
TextBox1.DataType = 3;
PictureBox1.TranBack = True;
本帖最后由 含烟 于 2018-12-23 16:14 编辑
◆ 常规信息
DEC 表示转换成十进制
HEX 表示转换成十六进制
(HEX)表示值为十六进制格式
浮点数操作的有效位是7位.包括小数点符号.符号位不算.可负数.例: 9.87655,-9876.55,9887655
浮点数数据长度固定为4字节
二进制数据长度固定为1字节
图像文件的透明掩码是RGB(255,0,255).这样能让使用的图像背景透明.
设计器撤消的有效数量为128个操作.
设计器历史文档的列表总数为10个.
多值数据/地址:
格式为(十进制表示): 23,157,99,1,77.(十六进制表示): 000CB051,0157,00EF,200001,F0177.
为了方便处理连续的数据 CM加入了多值数据功能.使用一个单一控件就可以完成连续地址不同数据的操作.以,号为分隔符 依次处理每个分隔符的数据 下一个数据操作的地址需要以控件中"数值大小"来决定递增.
地址属性也是支持多值数据操作方式的.所有拥有"地址"属性的数据控件都可以接受连续的多值地址设置 格式与"数值"属性设置一样.
在新版本中.加入了简易的地址属性多值方式(不支持多值数据).格式如: 10000-20000
地址常见数据格式:
一般格式: 10000
多值格式: 10000,10001,10002
简化多值格式: 10000-20000
数值常见数据格式:
十进制格式: 100
十六进制格式: C7
二进制格式: 1010
字符格式: A
小数点格式: 1.2
以上格式全部可加逗号,分隔符为多值格式.例十六进制格式: FF,AA,C7
数值大小常见数据格式:
一般格式: 4
使用二进制格式: 1,2,4,5
◆ 常见问题
1.不能够显示已经运行的程序.
这很可能是"选项设置"中视觉显示的设置问题 将里面的是否筛选程序和显示进程名/标题勾选去掉即可.另外也有一些特殊的程式被保护不能被修改 CM会将其屏蔽掉.
2.修改器不能正确读取到数据.
如果是PC程序 则先确认搜索到的地址是否是动态地址(每次程序重运行后会改变).对于这种程序 建议使用存档修改或文件修改 否则需要专业知识来搜索相关的相对基址来进各高级操作.将其加入到"支持程序"文件中.
如果是EMU程序的话 要确认当前运行的模拟器版本是否与选择的模拟器版本一致 如果不一致 一般都会有警告提示.还有就是要确认模拟器是否已经载入并且运行了游戏 否则也会有这样的问题.一个支持多类型的模拟器载入不同的游戏类型需要正确的选择"类型"否则也不能获取正确的地址.
3.不能够查找到数值的地址.
对于PC程序来说 这种情况很少见 因为CM是支持程序全内存搜索的 除非程序是对数据加密或数据的地址是动态的.首先 你要确认"选项设置"中的搜索选项是否设置正确.对于EMU程序则比较常见.最大可能就是数据超出支持程序设定的范围 但是这个范围在搜索中是可以更改的.而且 你也可以将EMU程序当PC程序对待 对全内存进行搜索来解决这个问题 一般在"修改器管理"的"类型"选项中都有PC类型选择.还有一种可能就是此模拟器数据存储结构不一样 这时你不能使用十进制搜索数据 你可以使用十六进制方式来搜索.但也有的数据格式是需要深入研究规律的.知道这种格式的操作方法后 那么就可以使用十六进制搜索了.或者自己制作一个插件来支持它.
4.不能识别支持程序或模拟器.
CM是根据程序的类名与程序名两者来识别{支持程序}的.一般默认的EMU程序会根据官方编译的名称来加入到系统列表中.CM优先判断类名是否符合条件 否则判断程序名是否符合.如果CM是支持此程序但没有被识别 那么请检查这个程式是否是官方版本或被修改过.你可以尝试将其文件名改为官方原.exe文件名.
如果你需要自定义支持程序 请使用主界面中进程右键功能加入到"支持程序"中.
5.为什么读取不到数据 控件没有反映?
检查你数据控件的地址属性设置是否正确.大多数可能是因为此控件使用了多数据.并且确认按钮控件功能是否设置为"读取数据".
6.每次重新打开或重启电脑后.查找出来的内存地址不一样
最大的可能就是因为此程式地址是动态变化的.一般PC程式才会这样.EMU模拟器程式则不会.这种情况则需要将其加入[支持程式]中.详细说明请参考帮助文档中的[支持程序]章节.
◆ 进阶说明
1.如果是PC程序类型 其所使用的修改器地址 将被视为内存实际地址.如果程序加入到了支持程序列表中 则使用修改器的地址为CM虚拟地址.当你要修改的程序地址是动态地址时 你就要在修改器中使用CM虚拟地址来指定基址修改它;如果数据的地址是固定不变的 则可以使用内存地址.
2.当不能获取支持程序中的基址时 那么CM将会自动将此程序视为PC程式.
3.数据控件中的"数值大小"设置 在多值情况下 还有一个很有用的功能.
例如:
多值数据:257,9,9999,14 数值大小=8
写入内存则为:
01 01 00 00 00 00 00 00 09 00 00 00 00 00 00 00
0F 27 00 00 00 00 00 00 0E 00 00 00 00 00 00 00
......
也就是说 它写值的时候与平时没什么不同 只是在处理下一个数据的时候 它会根据你设置的"数值大小"大小来自动跳位.
4.如果你需要修改EMU游戏 但CM又不支持此模拟器 那么还可以在使用PC类型进行一般的搜索来修改它的数据.只是搜索结果的地址不能够用来制作修改器.如果"类型"选项中没有PC类型 则可以直接右键选择此进程 在弹出的菜单中选择添加到"支持程序"即可.
5.动态调节搜索数据长度.如果在搜索时 搜索类型选择"自动计算字节位" 则第二次搜索也会重新计算数据长度.这对动态变化长度的数据是很有用的.
6.当你使用PC类型搜索数据时 查找到的数据要以内存地址为参考.而CM地址则是会动态变化的.不仅是在搜索中 其它任何地方 你都应当以内存地址为参考.而对[支持程序]中的程序操作 则应当使用CM地址为参考.
7."控制功能"属性的控件中 "附加值"属性的增量值(1)也可为负数.这样不但可以使用增量偏移地址 也可以处理负偏移地址.
8.改变"Plugins"目录下的插件名称顺序可以改变插件的实际的使用顺序.这样可以达到按自定义顺序使用多插件的功能.
9.在程序根目录下放置一个BackImage.jpg文件 则CM会自动将其作为设计器的背景显示.
10.1.40版本开始支持命令参数启动.暂时只支持是从管理器启动还是设计器启动.如下图 在快捷方式命令后面加入 manager或designer 则表示是从管理器或设计器启动."选项设置"里面也有这个功能的设置 有冲突时候 以参数设置为准.
11.二进制(Binary)数据操作时 可以设置"数值大小"属性为多值方式(可同时操作多个bit位)
12.如果控件"地址"属性使用多值方式.那么在读取时.CM自动使用第一个地址进行操作.而写入时则是使用全部地址.如果使用了"数据集合"属性.则读取时也是取第一条记录为判断基准.
13.修改器运行时.直接在ListBox控件中输入中文/英文/数字/字符可自动快速匹配首字相同的记录.这样对有很多记录的控件来说非常有用.
14.生成的exe独立修改器程式不能运行 一打开就报错误.这种情况一般有三种可能.首先就是确认你的电脑是否已安装相应的运行库 这个可以到CM官网上下载.然后就是确认你要修改的程序或游戏是否已经运行 否则会报找不到进程信息.最后就是确认这个修改器是否已被人为修改过 这样会导致运行器内部错误运行不了.
◆ 快捷键列表(设计器)
新建项目 Ctrl+N
新建文档窗体 Ctrl+Shift+N
打开 Ctrl+O
保存 Ctrl+S
另存为 Ctrl+Shift+S
生成修改器程序 Ctrl+E
撤消 Ctrl+Z
剪切 Ctrl+X
复制 Ctrl+C
粘贴 Ctrl+V
删除 DELETE
全局复制 Ctrl+Shift+C
全选 Ctrl+A
调整顺序 Ctrl+D
属性 Alt+Enter
按钮控件 Ctrl+1
文本控件 Ctrl+2
标签控件 Ctrl+3
选择控件 Ctrl+4
组合控件 Ctrl+5
框架控件 Ctrl+6
图像控件 Ctrl+7
列表控件 Ctrl+8
多选列表 Ctrl+9
进度控件 Ctrl+Alt+1
多标框架 Ctrl+Alt+2
单选按钮 Ctrl+Alt+3
运行管理器 F5
自动数据生成 F7
资源管理 F8
运行计算器 F9
打开记事本 F10
帮助 F1
所选控件相等大小 Ctrl+B
所选控件上对齐 Ctrl+↑
所选控件下对齐 Ctrl+↓
所选控件左对齐 Ctrl+←
所选控件右对齐 Ctrl+→
◆ 模拟器支持
所有支持的模拟器及游戏类型信息(支持大多数模拟器全版本且兼容一些较早版本)
==========
FB Alpha,FBA Shuffle ,,,,,,
Nebula ,,,,
WinKawaks ,,
NeoRAGEx
Callus95 v0.42
Rainew32 ,, (v0.51.7,v0.51.0,v0.50.17,v0.50.7 Test)
NeoRaine32
NeoGeoCD
Zinc
Impact
Mame32 Plus ,,,
MAME-CPS3
Mame32 v0.120 ,,,
CPS3 Emulator
==========
Chankast
NullDC ,
DEmul,DEmul All ,
Makaron
==========
DOSBox
DOSBox v1.72
DOSBox v1.73
==========
VirtuaNES
Smynes
NNNesterJ
RockNES
RockNES v5.00 Beta
RockNESX v2.0 Final
Nintendulator
Jnes
Famtasia
FCE Ultra
FCEUX
==========
VisualBoyAdvance ,,
VBA Link
VBA-M
Rew v1.2 ,,,
==========
Gens&G.Surreal ,
Gens Plus ,,
DGen v1.21
Fusion ,, (v3.63,v3.62,v3.6,v3.511 Test)
Regen , (v0.97,v0.96,v0.95 Test)
==========
Project64
1964 All,1964
Mupen64
==========
NO$GBA
iDeaS (v1.0.3.3,v1.0.2.0,v1.0.3.0,v1.0.3.2 Test)
DeSmuME (v0.9.6,v0.9.4,v0.9.2,v0.9 Test)
==========
NeoPop
NeoPocott
NGPocket
Koyote
==========
MagicEngine
Ootake (v2.29,v2.16,v2.07,v2.00 Test)
Ootake v1.23~v1.39 (v1.32~v1.39,v1.23 Test)
TurboEngine
==========
ePSXe
VGS & Emurayden
pSX
PSXeven v0.19
SSSPSX
XEBRA
==========
PCSX2 TLB
PCSX2
==========
Snes9x (v1.52,v1.51,v1.39 Test)
ZSNESW
SNEShout v3.3
SNESGT
bsnes (v0.059,v0.048,v0.041 Test)
bsnes Old
==========
SMS Plus
FreezeSMS
Meka
Dega
Past-O-Rama
==========
SSF (v0.11 alpha R2 Test)
Yabause
GiriGiri
==========
WSCamp ,
Oswan ,
Cygne ,
==========
Dolphin ,
gCube v0.4,v0.5
==========
Model 2 Emulator
◆ 地址/基址修正 在CM的主界面上有"基址修正"与"地址修正"功能.它们主要是供使用者快速来人为控制CM读取的内存起始地址.但这个操作只针对已经在"支持程序"配置中加入了的程序.
"基址修正"就表示对于现有加入到"支持程序"配置信息中的"基址"项的这个值进行动态修正.假设"支持程序"中设定的"基址"是000127290.但我们实际需要这个值临时增加1字节 那么就可以在主界面的"基址修正"中填入1这个值.然后最直观的就是到"内存编辑"中去查看现在CM获取到的地址数据有没有变化.
"地址修正"就是对现在CM管理的内存起始地址进行手动偏移处理.我们可以先找到一个"支持程序" 最好是模拟器能直观的看来出.使用CM打开它之后在"内存编辑"中看它的起始地址数据.然后转到主界面的"地址修正"中填入1这个值 再返回"内存编辑"中就能看到 CM读取的数据已经整体向前移动了1字节.
一般情况下你不要设置这些值 除非你知道如何使用.否则会影响"数据搜索"与"内存编辑"的结果 导致CM地址错误.但不会影响修改器的正常使用.
◆ 附加值(Tag)解释
附加值作为CM特殊的一种数据格式存在.它能在尽量少改变现有架构的基础上增加新的特定功能.也因为它的这种非标准特性导致学习起来相对较困难.但是 使用它扩展的功能是强大的 我想任何一个进阶者都不会想错过对它的了解.
对附加值的设定可以在控件的"附加值"属性栏中找到.它的使用范围: 0-1F为控件用.20-5F为系统用.60-FF为使用者定义.使用者只能使用60-FF范围的附加值标识.否则有可能会与系统冲突.现系统已使用的附加值如下:
◇ "1" 取消值标识.对于有"取消值"属性的控件 用于控制"取消值"是否生效的开关.对于有"列表数据"属性的控件 用于控制它的自动递增值步长.它属性控件专属附加值 详细说明可参见控件资料.
◇ "6" 内存地址标识.对于有"地址"属性的控件 标识了这个地址永远都是使用内存实际地址.无论此修改器是否被"支持程序"支持 对这个地址的操作 全部都是使用内存实际地址.
◇ "7(value)" 跳址标识.当一个数据控件"数值"属性是多值时 这个附加值标识了下一个要写入值的地址基于上一个地址偏移多少位再开始操作.例如:
地址: 10000
数值: 3,5
数值大小: 4
假如没有设置7附加值的话 那么最终内存结果为 : 03 00 00 00 05 00 00 00 FF FF FF FF
如果有设置7(8)附加值的话 那么最终内存结果为: 03 00 00 00 FF FF FF FF 05 00 00 00
FF代表内存原有值.未设置了7跳址标识的结果按"数值大小"设置了下一个值的写入地址.设置了7跳址标识的结果按给定的附加值8设置了下一个值的写入地址.这样的好处就是你可以随意设置下一个写入地址偏移上一个地址多少字节.
◇ "20" 已经被官方插件使用.
◇ "21" 已经被官方插件使用.
附加值是可以使用多值格式的.多个附加值使用"|"符号分隔.例如: 1|6|7(8)
◆ 二进制多值
二进制数据类型也是支持多值格式的.标准的格式是在"数值"属性中输入要设定的值(0或1)."数值大小"属性中输入具体是哪1位.而这个某1位是可以多位的 格式为: 1,2,6 这样就表示了对某个地址单字节的1,2,6位进行修改.如下所示:
地址: 10000
数值: 1
数值大小: 1,2,6
数据类型: 二进制
先将地址10000的值清为0.再将以上设置的值写入内存后可以发现地址10000的值变成了0xC4.转换成二进制为11000100.这就代表CM已经将第1,2,6位数值改成了1值了.
除了以上做法外.CM还提供更自由的数据格式 即一个位对一个值格式.如下所示:
地址: 10000
数值: 1,0,1
数值大小: 1,2,6
数据类型: 二进制
与标准方式不同的是数值格式也变成了多值方式.最终看到的结果值为0x84.转换为二进制为10000100."数值大小"属性中指定的三个位地址分别入了1,0,1值.这样的方式相对于标准多值方式来说可以自由的设定某位的值是0还是1.但要记住 仅当"数值"与"数值大小"中多值位数相同时 此功能才会生效.也就是说"数值大小"有三个位地址 那么"数值"属性中也需要有三个值来对应.
◆ 官方插件解释
默认CM发布时自带了一些官方插件.它们分别如下:
◇ CPS3_Emu_Fix (CPS3类型模拟游戏数据修正插件)
◇ Fusion_Fix (Fusion模拟器专用数据修正插件)
◇ MD_Fix (MD类型模拟游戏四字节数据修正插件)
◇ Turn_Data (按位反转数据插件)
◇ Yabause_Fix (Yabause模拟器专用数据修正插件)
◇ Value_Fix (值自定义插件.系统插件)
这是一个系统插件.所以每次启动CM都会自动被加载.它的功能分别如下:
(四则运算) 附加值标识是"20".可以将读出的值根据使用者预先设定的值进行四则运算后再输出.当设置+符号时 读取就会使用+符号对读取的结果进行运算.而写入就会自动使用-符号.反过来也一样.而&,|,~符号则在读取与写入时都使用同一个符号.使用它的控件"数据类型"属性一定要是十进制类型 否则将导致无效.它的附加值格式为: 20(+10) 前面20为固定附加值标识.表示要使用四则运算功能.括号里面的+号可以根据需要变换成其它运算符: +,-,*,/,&,|,~ 后面的10就是表示要操作的数值.
假若一个TextBox控件为例 读取内存地址中的数据.
附加值: 20(+8)
地址: 10000
数值大小: 2
如果地址10000读取出来的值是9的话 那么如果设置四则运算的附加值20(+8) 最后显示在TextBox中的值就是9+8=17
(字节高低位操作) 附加值标识是"21".就是将单字节数据的高低位拆分成十进制类型分别进行处理 并将指定高位或低位的结果输出显示.使用它的控件"数据类型"属性一定要是十进制类型 "数值长度"为1 否则将导致无效.附加值格式为: 21(H) 高位或 21(L) 低位.
假若一个TextBox控件为例 读取内存地址中的数据.
附加值: 21(H)
地址: 10000
数值大小: 1
如果地址10000读取出来的值是0x7E的话 那么如果设置字节高低位操作的附加值21(H) 最后显示在TextBox中的值就是0x7.如果附加值为21(L) 那么最后的值就是0xE
从v1.50版本开始 CM支持生成独立运行在Windows操作系统下的exe修改器文件.在此之前你需要先设计好一个.cmf格式的修改器文件 然后才能生成.exe格式的修改器.下面就演示如何一步一步创建一个可以独立运行的exe修改器.
目前可以支持PC类型的所有程序(使用直接内存地址的修改器)."支持程序"中的PC类型及模拟游戏类型也已经被支持 但模拟游戏不可以支持多模拟器程序 也就是一个修改器只能对应识别一个设定好的模拟器.未来将考虑支持多个不同的模拟器设定.目前生成的exe文件也不支持插件功能.所以需要插件支持的"支持程序"不会被正确支持.
打开已经做好的一个修改器.也可以自己先做一个.这里以Windows系统自带的扫雷游戏为例.
查看游戏的信息 在CM主界面的程序列表中找到扫雷游戏 右键菜单中有"程序信息"项 选择之后则会弹出程序相应的一些信息.生成exe修改器我们需要程序的进程名称与类名信息 否则exe修改器运行时会提示找不到要修改的程序.
有了进程名称与类名就可以生成exe修改器了.
使用设计器打开已设计好的.cmf格式的扫雷修改器(CM有自带此修改器).然后在"文件"主菜单中找到"生成exe修改器程序"项 打开它.也可使用快捷键Ctrl+E来完成此次操作.
在出现的"生成exe修改器程序"对话框中 有一个输入"标识"的地方 在那里我们输入刚刚看到的进程名: winmine.exe .还有一个输入"类名"的地方 再输入相应的类名: Minesweeper .实际上这两个只需输入一个正确的就可以了.这为的是独立的exe修改器能够识别它要修改的是哪个程序.当前的这个程序是不是正在运行.如果不输入或输入错误 那么exe修改器则会提示找不到相关联的程序错误.
还可以点击下方的"浏览路径"指定生成exe修改器的保存位置及名称.默认是保存在CM的根目录下.
点击确定.如果出现"操作成功!"提示的话 那么表示已经成功的生成了一个独立运行的exe修改器.
使用exe修改器 运行刚刚生成的修改器 可以看到进程中显示的两个winmine.exe一个是扫雷游戏 一个就是我们刚刚生成的exe修改器了.
当我们关闭扫雷游戏后 再打开exe修改器.会发现它还是能够正常运行的 只不过读取出来的数据是错误的 这是为什么?之前已经说过 修改器会根据根据进程名识别目标程序 而目标程序已经关闭了 修改器还能正常运行 这是因为我们的修改器进程名也是winmine.exe与扫雷游戏相同.所以 虽然exe修改器使有类名查找要修改的程序失败了 但它使用进程名查找时却成功了.如果我们改变exe修改器的文件名称后 你将会看到真正查找不到目标程序的错误提示.出现下图的信息 一般来说就是找不到要修改的程序.最先确认这个程序是不是已经运行了 然后可能就是制作这个修改器的人使用了非通用的进程名或类名 导致找不到已经运行的程序.
以上是生成使用直接内存地址的PC程式.下面图中即展示了生成"支持程序"中的PC程式及模拟器类型程式.
"支持程序"的PC类型程序
"支持程序"的EMU类型程序
本帖最后由 含烟 于 2018-12-23 16:57 编辑
以下为最简单的蜘蛛纸牌制作修改器实例
现在 将使用CheatMaker来制作一个实例修改器.这里将以Windows自带的Spider(蜘蛛纸牌)游戏为例 修改里面的分数.然后你可以根据这样的基础来提高 制作出功能更强的修改器. 从第一步搜索数据开始.首先 要启动蜘蛛纸牌游戏 你可以在 开始->程序->游戏 中找到它.
蜘蛛纸牌游戏界面 可以看到 一开始时 底下的分数(Score)默认是500 现在我们要将它修改成自己想要的数值 比如1200.然后 就可以启动CheatMaker了.其实启动先后顺序无关紧要.
选择游戏 装备工作完毕后 则开始搜索数据了.在主界面的程序列表中可以看到蜘蛛纸牌程序了.选择它 然后再执行第2步点击数据搜索 转到数据搜索界面.
数据搜索界面 执行第1步 先在搜索框内填上要搜索的数值 我们可以看到 现在蜘蛛纸牌的分数是500 所以 我们首先需要搜索的值的500 填入之后点击搜索按钮程序执行搜索.然后在搜索结果中会列出所有值是500的地址.
结果中"地址"显示的值并不是当前程序在内存中实际的地址值 而是经过转换的地址.这样的情况 对EMU/PC程序都是一样的.对于EMU程序 则无必要知道在实体内存中实际的地址 而PC程序则有必要知道 那么可以选中当前要查看内存地址的数据结果列 然后再点击"内存查看"转到内存编辑界面中 里面会显示当前值的实际内存地址与CM虚拟内存地址.
改变分数 回到游戏蜘蛛纸牌游戏中来 改变一下分数 可以移动一张牌 使分数减1分 变成499.
修改数据 数据改变之后 CM将会根据上次搜索的地址进行值对比筛选 判断是否等于现在输入的值499 否则就移除.最后剩下来的就有可能是这个地址.一般来说 这样的步骤要反复2~4步 就能搜索出最后的一个正确地址.而蜘蛛纸牌这个游戏 搜索2次就能找到地址了 搜索结果中只显示了一条记录 那么这条记录就一定是记录分数的地址了 而它的值 就是我们要修改的分数.
双击这条记录 就可以出现数据设置框 在数值里面填入你想要修改的值 如1200 点击确定 搜索修改到此结束.然后你返回到蜘蛛纸牌游戏中 随便移动一张牌或最小化一下程序 则会发现 分数已经变为你想要的1200了.
分数修改成功 到这里 并没有结束 我们重点要的 是如何制作修改器 所以 这只是制作修改器的前期工作 这些 都是为了要得到数据的地址 对蜘蛛纸牌来说 就是分数在内存中的地址.下面 才是真正的重点.
内存搜索中查看内存实际地址
内存编辑中查看内存实际地址 这里要区分一下EMU与PC程序的不同处理 因为EMU程序一般都是使用虚地址而不是内存实际地址 所以这一步 只需要记下最终搜索结果栏中的地址栏内的数据就可以了.而PC程序则不然 它一般需要的是实际内存的地址.上面已经说过 搜索出来的地址是CM的虚地址 并不是内存实址 所以 下一步 你需要选中结果记录 然后点击"内存查看"转到内存编辑界面中 左下角 会显示这个虚地址对应的实际内存地址.
知道了真正的地址后 那么就可以制做相应的修改器了 这样 以后只需要运行修改器就可以直接修改数据了 不必每次都搜索一遍.
打开设计器
新建一个CM修改器文件 执行内存编辑器中的第2步 调出CheatMaker设计器来创建蜘蛛纸版的专用修改器.(如果当前游戏选择中选择了其它修改器的话 会自动打开它).新建一个工程 然后在弹出的保存路径中选择PC文件夹 里面有一个蜘蛛纸牌 是已经制作好的 你可以输入另一个名字来保存它.
因为蜘蛛纸牌是PC程序 所以选择放到PC文件夹内 否则运行时将不能被CM发现.而相对应的 如果你要创建的是EMU程序 则也要选择相对应的模拟器类型的文件夹保存.
添加控件至设计器 从左边的控件工具栏中分别创建一个Label,一个TextBox,两个Button控件 到右边的窗体中来.然后再分别双击调出相对应控件的属性设置一下名称.其中 两个Button按钮控件分别设置其中的功能为"保存数据","读取数据".而TextBox控件则需要在功能地址栏中输入刚才我们搜索到的地址:01012F60 大小中要根据这个值的最大值来判断 拿蜘蛛纸牌来说 如果它的分数最高为255 则大小需要设置成1;如果
最高为65535 则大小需要设置成2;再大的数值就要设置成4了.这要根据经验来判断.如果你不清楚的话 可以设置成4 则写入数据不会有问题 但有读取可能会有问题 而且会影响到周边地址数据的值.实际上 蜘蛛纸牌分数的地址是2位长度 所以这里选择2.
到这里已经差不多完成了一个最简单修改器的制作 但还有一个重要的设置 就是要在工程属性中选择这个修改器的类型 而这个类型 一般与你文件保存的文件夹名称同相.双击工程窗体非控件的任何地方可以调出工程属性设置 在系统类型中 选择相应的类型 蜘蛛纸牌需要选择PC类型.
选择类型 回到主程序界面 执行1步骤 使程序重新读取游戏修改器文件 现在 可以在游戏修改器列表中发现刚才我们新创建的"蜘蛛纸牌"文件了.选择之后 再点击"运行"即可执行刚才我们做的修改器.
运行修改器
最终运行的修改器 一运行修改器的话 会自动读取我们设定地址的值于文本框控件中(选项设置中可以更改是否自动读取).然后我们可以输入自己想要的值 再点击保存即可达到修改目的.
CheatMaker的功能当然远不如此 这只是一个最简单修改的示例.你可以使用它创建出繁杂的,漂亮的,功能强大的界面程序 而这只需要简单的操作就能完成.如果你想创建出自己幻想的修改器 那么你需要花点时间研究CM 你一定可以感受到修改游戏带来的乐趣!
目录下已经存在许多已经制作好的.cmf修改器文件 可以参考 以便理解CM的高级应用 制作出功能更强 界面更美 使用更简单的修改器!
感谢楼主分享 谢谢楼主分享,看看先 大部分游戏都能实现么? 这个有点牛啊{:4_159:} 感谢楼主分享 谢谢大佬 感谢楼主分享 支持一下 hqi mwv hqbu hapi amyo yrhne yrj 感谢大佬,辛苦了
感谢分享{:4_120:} 感谢大佬(我就是来水经验的)谢谢
感谢楼主分享 感谢感谢,非常感谢 谢谢分享!!!!!!!!!! 感谢大佬分享 感谢大佬的分享!
页:
[1]