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
楓児_恋姬
果然厉害!~再次膜拜。
莫问
这样有个问题:转职获得雇佣兵并不相符。即在获得枪兵的时候,获得的时弓兵……
痕
@莫问 这需要后期的修改工作。首先让02、03人物所能转的职业都独立于其他人物,然后把这些职业的数据中的雇用兵种修改成想要的兵种。
楓児_恋姬
@痕 如此,我方每个角色都需要修改,才能实现所有人都能雇佣敌方兵种?