3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 侠客前传 | 刺客信条 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 44416|回复: 82
打印 上一主题 下一主题

[MOD] =====【180315——180705】简单修改教程,轻量MOD制作示例;格挡保留、能量保留、初始卡牌替换、金币增加、正式版进BETA版方法

  [复制链接]

8

主题

396

帖子

1547

积分

游戏狂人

O(∩_∩)O

Rank: 6Rank: 6

贡献度
47
金元
13593
积分
1547
精华
0
注册时间
2011-7-7
跳转到指定楼层
主题
发表于 2018-3-16 22:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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楼写了下获得卡牌时自动升级效果
————————————————————
三月十五号版本的文件:
三倍金币,当你拥有灵体外质时能且只能获得一倍金币
格挡每回合开始时仅减少3,当你拥有壁垒、残影、遗物外卡钳其中之一时不减
能量保留,上限是费用+3,例如你有4费则可保留7点能量,结束回合时若能量大于7点也不会减少,因此与加能量的卡牌遗物无冲突,拥有冰淇淋或保留电量时无上限
战士初始600金币,初始卡牌为打击、痛击、剑柄打击、头槌、闪电霹雳、铁斩波、防御、耸肩无视、武装、活动肌肉,稀有度普通
猎手初始600金币,初始卡牌为打击、中和、快斩、带毒刺击、匕首雨、防御、生存者、后空翻、偏折、闪躲翻滚,稀有度普通
————————————————————
三月22号、三月29号、四月5号、四月12号、四月19号、四月26号、四月28号、五月3号、五月10号、五月17号、五月24号、五月31号、六月7号、六月14号、六月21号、六月28号
以上这些版本的文件不提供了
————————————————————
七月5号版本的文件:
说明同上
说明同上
说明同上
说明同上
说明同上
机器人初始600金币,初始卡牌为打击,球状闪电、寒流、扫荡射线、防御、电击、双重释放、飞跃、蒸汽护壁、冷静头脑,普通
————————————————————
正式版进BETA版:
替换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版本的:








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

1

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏28
回复

使用道具 举报

8

主题

396

帖子

1547

积分

游戏狂人

O(∩_∩)O

Rank: 6Rank: 6

贡献度
47
金元
13593
积分
1547
精华
0
注册时间
2011-7-7
舒服的沙发
 楼主| 发表于 2018-3-16 22:32 | 只看该作者
本帖最后由 zhouq510 于 2018-11-1 14:57 编辑

沙发自己坐_(¦3[_])_
32楼写了在商店可以重复删卡的效果
37楼写了下获得卡牌时自动升级效果
65楼有十月11号版本的文件
回复 支持 1 反对 0

使用道具 举报

4

主题

576

帖子

656

积分

超级玩家

Rank: 5Rank: 5

贡献度
0
金元
6559
积分
656
精华
0
注册时间
2017-8-16
硬硬的板凳
发表于 2018-3-16 23:58 | 只看该作者
修改后进不去游戏怎么办
回复 支持 0 反对 1

使用道具 举报

8

主题

396

帖子

1547

积分

游戏狂人

O(∩_∩)O

Rank: 6Rank: 6

贡献度
47
金元
13593
积分
1547
精华
0
注册时间
2011-7-7
冰凉的地板
 楼主| 发表于 2018-3-17 00:04 | 只看该作者
本帖最后由 zhouq510 于 2018-3-17 00:06 编辑
zzy8490 发表于 2018-3-16 23:58
修改后进不去游戏怎么办

你是用的反编译编译还是用的改字节码?具体是哪个文件?
反正肯定是哪里搞错了,需要修正
另外修改前必须备份
回复 支持 反对

使用道具 举报

4

主题

576

帖子

656

积分

超级玩家

Rank: 5Rank: 5

贡献度
0
金元
6559
积分
656
精华
0
注册时间
2017-8-16
5#
发表于 2018-3-17 00:13 | 只看该作者
zhouq510 发表于 2018-3-17 00:04
你是用的反编译编译还是用的改字节码?具体是哪个文件?
反正肯定是哪里搞错了,需要修正
另外修改前必须 ...

直接把你的加上去  
我自己不会修改
回复 支持 反对

使用道具 举报

7

主题

417

帖子

727

积分

超级玩家

Rank: 5Rank: 5

贡献度
30
金元
6069
积分
727
精华
0
注册时间
2010-10-21
6#
发表于 2018-3-17 23:15 | 只看该作者
求删卡不要钱和无限删卡
回复 支持 1 反对 1

使用道具 举报

1

主题

131

帖子

129

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1291
积分
129
精华
0
注册时间
2018-1-28
7#
发表于 2018-3-17 23:33 | 只看该作者
支持楼主,楼主加油啊!
回复 支持 反对

使用道具 举报

54

主题

1035

帖子

934

积分

超级玩家

Rank: 5Rank: 5

贡献度
29
金元
8181
积分
934
精华
0
注册时间
2008-10-5
8#
发表于 2018-3-18 02:10 | 只看该作者
本帖最后由 tt667 于 2018-3-18 02:32 编辑

求问LZ,改初始卡牌,到最后那步Tools->Compile 的时候,弹窗显示Ironclad.java使用了未经检查或不安全的操作,有关详细信息 请使用 -xlint:unchecked 重新编译
这要怎么处理??我JSD用的是1.8.0_161的版本,是这个的原因吗?

好吧,显示这个原来没有影响。。。修改成功了
回复 支持 反对

使用道具 举报

8

主题

396

帖子

1547

积分

游戏狂人

O(∩_∩)O

Rank: 6Rank: 6

贡献度
47
金元
13593
积分
1547
精华
0
注册时间
2011-7-7
9#
 楼主| 发表于 2018-3-18 03:38 | 只看该作者
tt667 发表于 2018-3-18 02:10
求问LZ,改初始卡牌,到最后那步Tools->Compile 的时候,弹窗显示Ironclad.java使用了未经检查或不安全的操 ...

嗯,是没影响的

回复 支持 反对

使用道具 举报

4

主题

329

帖子

959

积分

超级玩家

Rank: 5Rank: 5

贡献度
158
金元
3268
积分
959
精华
0
注册时间
2007-12-25
10#
发表于 2018-3-18 13:33 | 只看该作者
不建议直接修改原来的jar,建议通过javaagent的方式注入自己写的jar包
回复 支持 反对

使用道具 举报

8

主题

396

帖子

1547

积分

游戏狂人

O(∩_∩)O

Rank: 6Rank: 6

贡献度
47
金元
13593
积分
1547
精华
0
注册时间
2011-7-7
11#
 楼主| 发表于 2018-3-18 17:52 | 只看该作者
本帖最后由 zhouq510 于 2018-6-20 02:57 编辑
kingdjh 发表于 2018-3-18 13:33
不建议直接修改原来的jar,建议通过javaagent的方式注入自己写的jar包

看了帖子,确实是一个好方法。我想问一下利用Byteman可以修改逻辑吗?举个具体的例子,例如想对GameActionManager.class的格挡保留的逻辑做修改,从
if(!AbstractDungeon.player.hasPower("Barricade") && !AbstractDungeon.player.hasPower("Blur"))
改为
if(AbstractDungeon.player.hasPower("Barricade") && AbstractDungeon.player.hasPower("Blur"))
回复 支持 反对

使用道具 举报

4

主题

329

帖子

959

积分

超级玩家

Rank: 5Rank: 5

贡献度
158
金元
3268
积分
959
精华
0
注册时间
2007-12-25
12#
发表于 2018-3-19 09:10 | 只看该作者
zhouq510 发表于 2018-3-18 17:52
看了你的帖子,确实是一个好方法。我想问一下利用Byteman可以修改逻辑吗?举个具体的例子,例如想对GameA ...

可以参考我之前研究的
https://gitee.com/Dandjinh/SimpleHelper
回复 支持 0 反对 1

使用道具 举报

24

主题

479

帖子

533

积分

高级玩家

Rank: 4

贡献度
3
金元
5208
积分
533
精华
0
注册时间
2011-10-22
13#
发表于 2018-3-20 21:42 | 只看该作者
   一堆错误,怎么解决??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

8

主题

396

帖子

1547

积分

游戏狂人

O(∩_∩)O

Rank: 6Rank: 6

贡献度
47
金元
13593
积分
1547
精华
0
注册时间
2011-7-7
14#
 楼主| 发表于 2018-3-21 00:09 | 只看该作者
468452 发表于 2018-3-20 21:42
一堆错误,怎么解决??

哪个文件?
这个是别人的MOD?

回复 支持 反对

使用道具 举报

24

主题

479

帖子

533

积分

高级玩家

Rank: 4

贡献度
3
金元
5208
积分
533
精华
0
注册时间
2011-10-22
15#
发表于 2018-3-21 01:18 | 只看该作者
zhouq510 发表于 2018-3-21 00:09
哪个文件?
这个是别人的MOD?

恩 不过我找到人家汉化的,也就不需要我在汉化了
回复 支持 反对

使用道具 举报

1

主题

71

帖子

171

积分

中级玩家

Rank: 3Rank: 3

贡献度
3
金元
1585
积分
171
精华
0
注册时间
2017-7-5

2023年3DM官方水友

QQ
16#
发表于 2018-3-21 07:54 | 只看该作者
66666666666666666666666666666666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

0

主题

831

帖子

874

积分

超级玩家

Rank: 5Rank: 5

贡献度
0
金元
8744
积分
874
精华
0
注册时间
2010-7-15
17#
发表于 2018-3-23 22:34 | 只看该作者
进来支持楼主~~
回复 支持 反对

使用道具 举报

0

主题

392

帖子

472

积分

高级玩家

Rank: 4

贡献度
0
金元
4720
积分
472
精华
0
注册时间
2016-10-26
18#
发表于 2018-3-25 11:12 | 只看该作者
厉害了,我的哥
回复 支持 反对

使用道具 举报

0

主题

169

帖子

228

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
2275
积分
228
精华
0
注册时间
2012-6-20
19#
发表于 2018-3-26 13:12 | 只看该作者
大佬真的厉害。。。。普通玩家表示全靠大佬了!!!
回复 支持 反对

使用道具 举报

0

主题

73

帖子

124

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1235
积分
124
精华
0
注册时间
2011-9-11
20#
发表于 2018-3-27 23:18 | 只看该作者
没看懂,想问的是,可以通过直接把你写好的CLASS扔进解压包里面就可以用吗?还需要怎么做呢?
回复 支持 反对

使用道具 举报

8

主题

396

帖子

1547

积分

游戏狂人

O(∩_∩)O

Rank: 6Rank: 6

贡献度
47
金元
13593
积分
1547
精华
0
注册时间
2011-7-7
21#
 楼主| 发表于 2018-3-28 03:59 | 只看该作者
lishimao1990 发表于 2018-3-27 23:18
没看懂,想问的是,可以通过直接把你写好的CLASS扔进解压包里面就可以用吗?还需要怎么做呢? ...

可以。修改的部分,安装工具后打开用一下就会懂了,大概

回复 支持 反对

使用道具 举报

7

主题

1738

帖子

1738

积分

游戏狂人

Rank: 6Rank: 6

贡献度
10
金元
16975
积分
1738
精华
0
注册时间
2008-6-3
22#
发表于 2018-3-28 13:49 | 只看该作者
感谢大大!!!
回复 支持 反对

使用道具 举报

3

主题

585

帖子

440

积分

高级玩家

Rank: 4

贡献度
0
金元
4402
积分
440
精华
0
注册时间
2014-11-14
23#
发表于 2018-4-3 12:44 | 只看该作者
支持楼主,楼主加油啊!
回复 支持 反对

使用道具 举报

1

主题

773

帖子

857

积分

超级玩家

Rank: 5Rank: 5

贡献度
5
金元
8374
积分
857
精华
0
注册时间
2009-11-7
24#
发表于 2018-4-14 13:54 | 只看该作者
谢谢!!!!!!!!!
回复 支持 1 反对 0

使用道具 举报

26

主题

265

帖子

539

积分

高级玩家

Rank: 4

贡献度
16
金元
4746
积分
539
精华
0
注册时间
2012-12-16
25#
发表于 2018-4-17 08:08 | 只看该作者
牛逼,,,,,,,,,,,,,,,,,,,,,,
回复 支持 反对

使用道具 举报

1

主题

146

帖子

209

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
2089
积分
209
精华
0
注册时间
2017-2-27
26#
发表于 2018-4-18 15:04 | 只看该作者
老哥能不能搞一个移除作弊检测
回复 支持 反对

使用道具 举报

4

主题

258

帖子

416

积分

高级玩家

Rank: 4

贡献度
2
金元
4080
积分
416
精华
0
注册时间
2009-12-15
27#
发表于 2018-4-20 17:48 | 只看该作者
请问4.19通用吗?
回复 支持 反对

使用道具 举报

8

主题

396

帖子

1547

积分

游戏狂人

O(∩_∩)O

Rank: 6Rank: 6

贡献度
47
金元
13593
积分
1547
精华
0
注册时间
2011-7-7
28#
 楼主| 发表于 2018-4-20 19:08 | 只看该作者

有一个不通用
更新了

回复 支持 反对

使用道具 举报

0

主题

93

帖子

977

积分

超级玩家

Rank: 5Rank: 5

贡献度
60
金元
7370
积分
977
精华
0
注册时间
2017-4-26
29#
发表于 2018-4-20 20:49 | 只看该作者
真的很感谢
回复 支持 反对

使用道具 举报

0

主题

81

帖子

147

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1472
积分
147
精华
0
注册时间
2015-10-31
30#
发表于 2018-4-29 21:56 | 只看该作者
谢谢楼主,准备试玩了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|咖绿茵|求知网|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2024-4-25 10:12 , Processed in 0.382601 second(s), 46 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表