游戏狂人
O(∩_∩)O
 
- 贡献度
- 47
- 金元
- 13783
- 积分
- 1566
- 精华
- 0
- 注册时间
- 2011-7-7
|
本帖最后由 zhouq510 于 2020-3-12 11:23 编辑
下文是2018年的内容,现已过时。
DJ Java Decompiler反编译的方法部分失效,Java Bytecode Editor改字节码的方法依然有用。
————————————————————
文件在文末,示例是2018年3月15号版的
————————————————————
所需工具:
Java SE Development Kit 8(用下面两个工具前需要安装这个,Oracle官网下,即jdk8,注意要8,游戏不支持9或10!)
DJ Java Decompiler(反编译需要)
Java Bytecode Editor(如果你需要改字节码就需要这个)
————————————————————
初始卡牌替换:
用winrar把游戏文件夹内的desktop-1.0.jar打开,将\com\megacrit\cardcrawl\characters\中的 Ironclad.class 和 TheSilent.class 解压出来。
用DJ Java Decompiler打开Ironclad.class。(用DJ Java Decompiler打开文件时,注意文件路径和文件名都不能有中文)
编辑初始卡牌,例如这样:
编辑完成后保存成为一个java文件(文件名需保持一致,即Ironclad.java),然后点上方Tools->Compile,设置:
然后Complie,如果编译无出错则将生成的class文件用winrar替换掉游戏jar包里的文件就可以了。(留备份)
然后是TheSilent.class文件
做相同的处理。
————————————————————
能量保留:
文件是desktop-1.0.jar\com\megacrit\cardcrawl\core\EnergyManager.class
打开后编辑,例如这样:
同上面一样编译后替换jar包里的文件。
————————————————————
金币增量:
文件是desktop-1.0.jar\com\megacrit\cardcrawl\characters\AbstractPlayer.class
话说这种带内部类的class,就是带含$号的那些,反编译之后我是不太懂怎么编译回去。所以只能说说我会的用修改字节码的方法。望懂编译的大佬不吝赐教。
修改字节码在涉及增删时是比较麻烦的,不涉及增删时倒是很方便,我用的工具是Java Bytecode Editor(jbe)。
首先用DJ Java Decompiler打开AbstractPlayer.class观察一下,找到目标在gainGold这个函数里。如图
然后用jbe打开AbstractPlayer.class,选择Methods->gainGold->Code。如图
接下来要做的就是比较复杂事情了。
首先java字节码是比较难理解的,逻辑上跟汇编是有点像的,而且用jbe修改的话,你必须小心不能变更长度,否则游戏跳出。而且jbe还不会自动帮你对齐跳转,需要自己手动修改(关于这点我突然意识到ollydbg是有多么地好用了)。
在DJ Java Decompiler中观察gainGold代码,我们的目的是空出“getRelic("Ectoplasm").flash();”和“return;”,然后插入翻倍的指令。在jbe中观察,从第五到第九行,即棕色数字的9到18需要空出。
切换到Code Editor,
然后直接点一次Save method,上方的Attribute length从210变为120,那么接下来你做的修改必须保持120不变游戏才不会跳出。
将第五到第九行删除,键入如下图的四行翻倍指令,不足的长度键入nop填充,使Attribute length维持120。顺便将第四行的ifeq改为ifne。如图:
改完后需要手动将所有的跳转对齐,因为改动使总行数从40增加到了45,所以涉及第五行后的跳转全都加5。具体而言就是:
第4行的ifeq 10->ifne 15
第11/16行ifgt 16->ifgt 21
第15/20行goto 40->goto 45
第32/37行ifeq 40->ifeq 45
第39/44行goto 30->goto 35
改完后Save method。然后用DJ Java Decompiler打开检查一下(如下图),如果没什么问题就可以存入游戏jar包里了。
————————————————————
格挡保留:
感觉修改字节码好像是很麻烦的样子?实际上如果是更轻量化的修改比如只改个逻辑,不涉及增删的话,比反编译编译还简单。例如想改格挡保留的话,对文件desktop-1.0.jar\com\megacrit\cardcrawl\actions\GameActionManager.class,将Methods->getNextAction中430行和434行的ifne改为ifeq直接Save method就可以存入游戏jar包里了。
简单,图就不截了。
如果想改成文末那样的格挡文件的样子的话,可以看下去:
将格挡逻辑从上图一改为上图二,需要在jbe中将439和440行删除并用nop填充长度,将438行的ifne改为ifeq,下方bipush 15改为bipush 3。改动使总行数增加4,所有涉及439行后的跳转全加4(共有11处;另现在新的版本有12处了)。如图
————————————————————
以上示例中以三月十五号版本为准,更新后有可能不一样(例如字节码行数),思路是一样的,观察一下代码即可。——截自4月12日,GameActionManager.class的行数已经和3月15日不同。
其它效果的修改大同小异,可以自行摸索一下。
32楼写了在商店可以重复删卡的效果
37楼写了下获得卡牌时自动升级效果
————————————————————
三月十五号版本的文件:
315三倍金币AbstractPlayer.class
(41.56 KB, 下载次数: 218)
三倍金币,当你拥有灵体外质时能且只能获得一倍金币
315格挡保存GameActionManager.class
(10.62 KB, 下载次数: 220)
格挡每回合开始时仅减少3,当你拥有壁垒、残影、遗物外卡钳其中之一时不减
315能量保存EnergyManager.class
(1.61 KB, 下载次数: 205)
能量保留,上限是费用+3,例如你有4费则可保留7点能量,结束回合时若能量大于7点也不会减少,因此与加能量的卡牌遗物无冲突,拥有冰淇淋或保留电量时无上限
315换初始卡牌金币Ironclad.class
(3.44 KB, 下载次数: 108)
战士初始600金币,初始卡牌为打击、痛击、剑柄打击、头槌、闪电霹雳、铁斩波、防御、耸肩无视、武装、活动肌肉,稀有度普通
315换初始卡牌金币TheSilent.class
(3.45 KB, 下载次数: 105)
猎手初始600金币,初始卡牌为打击、中和、快斩、带毒刺击、匕首雨、防御、生存者、后空翻、偏折、闪躲翻滚,稀有度普通
————————————————————
三月22号、三月29号、四月5号、四月12号、四月19号、四月26号、四月28号、五月3号、五月10号、五月17号、五月24号、五月31号、六月7号、六月14号、六月21号、六月28号
以上这些版本的文件不提供了
————————————————————
七月5号版本的文件:
0705三倍金币AbstractPlayer.class
(59.12 KB, 下载次数: 1694)
说明同上
0705格挡保存GameActionManager.class
(13.68 KB, 下载次数: 1352)
说明同上
0705能量保存EnergyManager.class
(1.89 KB, 下载次数: 1206)
说明同上
0705换初始卡牌金币Ironclad.class
(3.83 KB, 下载次数: 681)
说明同上
0705换初始卡牌金币TheSilent.class
(3.84 KB, 下载次数: 639)
说明同上
0705换初始卡牌金币Defect.class
(3.29 KB, 下载次数: 540)
机器人初始600金币,初始卡牌为打击,球状闪电、寒流、扫荡射线、防御、电击、双重释放、飞跃、蒸汽护壁、冷静头脑,普通
————————————————————
正式版进BETA版:
0705进测试版Settings.class
(13.31 KB, 下载次数: 2077)
替换desktop-1.0.jar\com\megacrit\cardcrawl\core\Settings.class进入BETA版(现在正式版也能用故障机器人了)。关于进BETA版的修改方法&存档继承方法参见http://bbs.3dmgame.com/thread-5740696-1-1.html这个帖子
————————————————————
65楼有2018十月11号版本的文件……!
————————————————————
更一个20200114版本的:
200114三倍金币AbstractPlayer.class
(67.53 KB, 下载次数: 37)
200114换初始卡牌金币Ironclad.class
(13.58 KB, 下载次数: 28)
200114换初始卡牌金币TheSilent.class
(14.16 KB, 下载次数: 24)
200114换初始卡牌金币Defect.class
(13.83 KB, 下载次数: 23)
200114换初始卡牌金币Watcher.class
(18.34 KB, 下载次数: 22)
200114格挡保存GameActionManager.class
(17.64 KB, 下载次数: 67)
200114能量保存EnergyManager.class
(1.89 KB, 下载次数: 46)
200114商店重复删卡ShopScreen.class
(37.07 KB, 下载次数: 24)
200114进测试版Settings.class
(16.44 KB, 下载次数: 28)
|
评分
-
1
查看全部评分
-
|