w7n吧 关注:36贴子:282
  • 6回复贴,共1

关于SMB1中各种刺补丁的一些知识。

只看楼主收藏回复

1L Baidu


1楼2014-02-22 19:48回复
    究竟SMB1中刺补丁是如何制作出来的?
    原理:这跟判定Mario撞到哪一个物体的判定进程有关系。
    SMB1当中,会专门对Mario身体附近各个方位的物体进行判定,同时根据Mario的状态、速度etc来决定砖是否被撞,Mario是否被物体挡住,是否吃到金币等等。
    也就是说,进程是这样:挨个检测Mario身体附近各个方位所能碰到的物体——根据物体的类型和Mario的状态来决定行为。


    2楼2014-02-22 19:51
    回复
      而SMB hack中大多数刺补丁都是利用了“判定物块是否为金币”的判定进程。
      也就是说,在判定物块是否为金币的进程之前,先判定物块是否为刺,如果为刺,那么就执行Mario死亡的进程。
      至于某些刺补丁在杀死Mario的同时会消除这个物块,原因就在于这种补丁当中,执行Mario死亡进程之后,错误跳转到了(吃金币进程中同样要进行的)去除物块的进程当中。


      3楼2014-02-22 19:55
      收起回复
        其实我也听过不少次疑问:“ATA的EMB中碰到刺是会受伤的,做到这样容易吗?”
        答案:不难。只要:1,定义一个实心物块为刺;2:调整判定进程为:(判定金币之前)
        S1:是否为刺?否则跳到金币判定。
        S2:幻影/无敌星状态存在吗?是则跳到金币判定。
        S3:JSR到受伤进程。


        4楼2014-02-22 19:58
        回复
          [各个方位]的说法很模糊,有源码证据吗?
          两个疑惑:
          1. 大多数hack套用的碰刺消失,仅限于非地下场景,地下的刺碰了不消去
          2. 大量游戏经验表明,SMB1的人与墙判定遵循左侧优先原则,但金币碰边即取
           这两种物体和人的接触算法是不一样的吧


          5楼2014-02-24 21:26
          收起回复