晓月圆舞曲吧 关注:9,746贴子:156,898
  • 5回复贴,共1

【DSVEdit】Hack的可能性

取消只看楼主收藏回复



IP属地:上海1楼2018-02-15 11:32回复
    嗯,大概很久以前我就开始做某个hack了,并没有坑掉,而是因为我最初就是希望发掘更多的hack的可能性,因此就不停地有脑洞出现。。。
    这个是最近想到的一种玩法。4段视频展示的分别是:
    1 踩下机关后刷出敌人
    2 打掉魂柱后,boss消失
    3 捡起物品后变成魔王= =(注意头像)
    4 按下机关后进入hard模式
    本身的原理都是类似的,比较复杂,但是理解了原理之后,只用DSVEdit就可以做出来了。


    IP属地:上海2楼2018-02-15 11:36
    回复
      2026-02-12 00:15:19
      广告
      不感兴趣
      开通SVIP免广告
      游戏内存中的0200033C这个地址(以下的地址均省去开头的0200)开始,存储了一系列的“事件标志”,也就是“某件事是否发生过”的标志。比如0340开始存储的是游戏的关键进度(比如某个剧情是否发生了,苍真是否变成魔王了,等等),0344开始存储的是可破坏的墙壁是否被破坏,机关是否被踩下,0360开始存储的是物品是否被拾取,魂柱是否被打掉,而037E开始存储的则是boss是否被击杀。每个事件标志占用1个比特位,也就是一个二进制位,0表示没有发生,1表示发生过。一个字节有8个比特,因此一个字节能存储8个事件标志。
      先从第一个效果,也就是踩下机关刷出敌人开始看。这个可以说是事件标志的最“正常”的用法了。踩下机关意味着某个事件标志从0变成1,而到底是那个事件则是由机关的Var B决定的。比如这里我把机关的Var B设置为0x0015(注意是十六进制),那么它就表示从0344开始的第0x0015个比特。另一方面,还可以设置基于事件的敌人(在舞塔馆第一次遇到J的房间里就有,效果是只有某个事件发生了,这些敌人才会刷出来),但是需要注意的是,这个事件标志是从033C开始读取的,和0344中间相差了8个字节。2个字节是16比特,也就是0x10个比特,那么8个字节就是0x40比特。所以这个敌人设置成0x0015+0x0040=0x0055事件发生后刷新就可以了。


      IP属地:上海4楼2018-02-15 13:11
      回复



        IP属地:上海5楼2018-02-15 13:13
        回复
          楼上的0x15和0x55都只是打个比方。实际上只要相差0x40就可以了。但是后面说的例子就不一样了。
          第二个效果。上面提到魂柱是从0360开始的,而boss是否击败则是037E开始的。那么很显然,只要把魂柱的Var A设置得足够大,它就可以改写到boss是否击败的区域。实际上这种改写已经属于游戏设计者考虑之外的范围了,不过没有关系,它是可行的。
          死神被击败的事件是037E的第2个比特,这样计算下来,魂柱的Var A设置为0x00F1,就刚好能改写到死神被击败的比特。
          第三个效果也是一样的。苍真的头像变成魔王,是0343的第3个比特。但是这里需要注意的是物品是否被拾取是从0360开始的,它在0343的后面。那怎么办呢?其实我们只要把Var A设置成负数就可以了。游戏在这里并没有判断Var A是不是负数,所以这个也可行。至于负数的表达方式,0xFFFF就是-0x0001,0xFFFE就是-0x0002,以此类推。这里我们计算下来需要-0x00E6,那么也就是把Var A设置成0xFF1A就行了。


          IP属地:上海8楼2018-02-15 13:23
          收起回复
            最后一个就是进入hard模式。这个比前三个更邪道,因为hard模式不属于事件标志,它的地址在00A1。但是我们需要做的无非就是让它负得更多一些而已。把按钮的Var B改成0xEAEC,搞定。


            IP属地:上海9楼2018-02-15 13:26
            回复