MD梦幻模拟战2 形象限制解除ex(updated@2018/05/02)

  • 内容
  • 评论
  • 相关

--------2018/05/02--------

修复转职界面形象显示未修改问题,相关代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2c046:addi.w #$62,D0             ->2c046:move.w $aa00.w,D1
2c04a:move.w D0,$d200.w          ->2c04a:jsr $150568
2c04e:lea $5e6d6.l,A0            ->2c050:move.w D0,$d200.w

2c082:addi.w #$62,D0             ->2c046:move.w $aa00.w,D1
2c086:move.w D0,$d202.w          ->2c04a:jsr $150568
2c08a:lea $5e6d6.l,A0            ->2c050:move.w D0,$d202.w

150568:lea $5e6d6.l,A0
15056e:cmpi.w #$2,D1
150572:beq $150584
150576:cmpi.w #$3,D1
15057a:beq $150584
15057e:addi.w #$62,D0
150582:rts
150584:addi.w #$6a,D0
150588:rts

--------------------------

18年首篇文章,感觉没干点什么就又一年了,博客也快四岁了。

本文主要是关于MDL2里形象限制的研究和解除限制的方法,过程有点复杂不细说,直接给出结果。

1、战场上佣兵的形象,由于分配的内存和显存的大小限制,最多只能26个,但是可以通过修改内存和显存的分配方式来扩充。

内存占用由原来的4字节1兵种修改成2字节1兵种,那么内存就可容纳52个兵种;显存方面把分配黑白形象的显存挪来使用,可以增加16个兵种的位置。所以经过本文修改之后战场上的佣兵形象最多可以有42个,应该也够使用了。

2、佣兵雇佣方面,因为记录人物可雇佣兵种的内存只有2字节,所以最多只能雇佣16个兵种,修改内存分配的话相当大工程,没那么多时间精力。但是可以通过增加条件限制,让一些人物雇佣其他的兵种。

原来全人物可雇佣兵种为0x62-0x71,经本文修改后,人物编号为02、03的人物的可雇佣兵种为0x6a-0x79。

 

修改的地方如下,太多了就不解释了,带了一点注释,可以自己研究看看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//取消指挥官阵营限制:
112D6:movea.w #$6500,A0 -> nop
//取消读取指挥官/士兵/召唤兽黑白形象:
a56c:bne $a534 -> bra $a534
a510:bne $a534 -> bra $a534
a596:bne $a534 -> bra $a534
//取消显存写入指挥官黑白形象
112b4:jsr $11f7c.l -> nop
112ba:jsr $8a6c.l -> nop
//取消显存写入佣兵黑白形象
113f0:jsr $11f7c.l -> nop
113f6:jsr $8a6c.l -> nop
//取消显存写入召唤兽黑白形象
1155a:jsr $11f7c.l -> nop
11560:jsr $8a6c.l -> nop

//修改形象对应关系写入内存的方式
//我方:
11390:moveq #$f,D6       -> moveq #$17,D6
11392:move.w DO,D1       -> move.w D0,D1
11394:move.w D1,(A2)+    -> move.b D1,(A2)+
11396:move.w A0,D2       -> move.w A0,D2
11398:lsr.w #5,D2        -> lsr.w #7,D2
1139a:move.w D2,(A2)+    -> move.b D2,(A2)+
//敌方:
11410:movea.w #$7100,A0    -> movea.w #$7500,A0
1141a:lea $ffa88e.l,A2     -> lea $ffa87e.l,A2
11432:bne $114c8           -> nop
11454:lea $ffa88e.l,A4     -> lea $ffa84e.l,A4
11460:cmp.w (A4),D1        -> cmp.b (A4),D1
11466:adda.w #$4,A4        -> adda.w #$2,A4
1146e:move.w D1,(A2)+      -> move.b D1,(A2)+
11470:move.w A0,D2         -> move.w A0,D2
11472:lsr.w #5,D2          -> lsr.w #7,D2
11474:move.w D2,(A2)+      -> move.b D2,(A2)+

//修改读取形象的方式,第一个地方
116e0:movem.l D0/A0,-(A7)
116e4:lea $ffa84e.l,A0
116ea:moveq #$19,D0         -> moveq #$29,D0
116ec:cmp.w (A0)+,D1        -> cmp.b (A0)+,D1
116ee:beq $116fe            -> beq $116fa
116f2:adda.w #$2,A0         -> adda.w #$1,A0
116f6:dbra DO,$116ec        -> dbra DO,$116ec
116fa:bra $11700            -> move.b (A0,)D1 lsl.w #$2,D1
116fe:move.w (A0),D1        -> nop
11700:movem.l (A7)+,DO/A0
11704:rts

//修改读取形象的方式,第二个地方
11674:beq $116bc            -> 11674:moveq #$0,D1
11678:moveq #$0,D1          -> 11676:bra $116bc

116bc:moveq #$0,D1          -> 116bc:move.b ($0,A1),D1
116be:move.b ($0,A1),D1     -> 116c0:lea $ffa84e.l,A0
116c2:lea $ffa88e.l,A0      -> 116c6:moveq #$29,D0
116c8:moveq #$9,D0          -> 116c8:cmp.b (A0)+,D1
116ca:cmp.w (A0)+,D1        -> 116ca:beq $116d6
116cc:beq $116d8            -> 116ce:adda.w #$1,A0
116d0:adda.w #$2,A0         -> 116d2:dbra D0,$116c8
116d4:dbra D0,$116ca        -> 116d6:move.b (A0),D1
116d8:move.w (A0),D1        -> 116d8:lsl.w #$2,D1

//修改佣兵雇佣
22af8: move.w #$f,D1     修 -> 22af8: jsr $150500.l
22afc: moveq #$62,D2     改 -> 22afe: jsr $150530.l
22afe: move.l D2,D0      后 -> 22b04: nop
22b00: subi.l #$62,D0

//增加的自定义程序段,占用了0x150500-0x150565
150500:move.w #$f,D1
150504:move.w $bcf6.w,D0
150508:lea $bd24.w,A5
15050c:add.w D0,D0
15050e:move.w (A5,D0.w),D0
150512:cmpi.b #$2,D0
150516:beq $150526
15051a:cmpi.b #$3,D0
15051e:beq $150526
150522:moveq #$62,D2
150524:rts
150526:moveq #$6a,D2
150528:rts

150530:move.w $bcf6.w,D0
150534:lea $bd24.w,A5
150538:add.w D0,D0
15053a:move.w (A5,D0.w),D0
15053e:cmpi.b #$2,D0
150542:beq $150558
150546:cmpi.b #$3,D0
15054a:beq $150558
15054e:move.l D2,D0
150550:subi.l #$62,D0
150556:rts
150558:move.l D2,D0
15055a:subi.l #$6a,D0
150560:rts

随便找点图:


修改成品,修改自狼组汉化原版:https://pan.baidu.com/s/1CETxz0y6U-EnG49tjdE6yQ

加载中,请稍候...

评论

4条评论
  1. 楓児_恋姬 回复

    果然厉害!~再次膜拜。

  2. 莫问 回复

    这样有个问题:转职获得雇佣兵并不相符。即在获得枪兵的时候,获得的时弓兵……

    • 回复

      @莫问 这需要后期的修改工作。首先让02、03人物所能转的职业都独立于其他人物,然后把这些职业的数据中的雇用兵种修改成想要的兵种。

      • 楓児_恋姬 回复

        @痕 如此,我方每个角色都需要修改,才能实现所有人都能雇佣敌方兵种?

发表评论

电子邮件地址不会被公开。 必填项已用*标注