好久没来了今年在这里只发了两个新帖子:
嗯,包括这个帖子在内,正好4个月一帖
好了说正事吧。
在SMB中,有一个很有趣的bug:如果一个“行走类敌人”(板栗仔、乌龟、刺猬)位于屏幕左侧的特定位置,那么它被从下面顶起时,会变身成龟壳,可能变成绿色,也可能变成红色,但它们起身之后都跟绿乌龟的表现一样(遇到悬崖会掉下去)。
其实在很早的时候,就已经有人分析过这个bug的原理了,就是当敌人被顶时,会执行一个变身程序,如果敌人ID在特定范围,就会被变成00或01(分别是绿乌龟和“会跳崖”的红乌龟的ID;说到这里顺便吐槽一句,为什么SMB要搞两种红乌龟……);本来“行走类敌人”的ID都不在这个范围,应该不会变身,但是执行到变身程序时,却误将“敌人在屏幕中的相对横坐标”当作敌人ID使用了,于是特定位置的敌人被顶之后,就会变成龟壳。
后来有一天,我忽然想尝试修复这个bug,于是在数日的代码分析和研究之后,终于成功修复了这个bug,而且还是连同另外一个bug一起修复了
然后,你们就看到了这个记录当时过程的帖子。
嗯,包括这个帖子在内,正好4个月一帖
好了说正事吧。
在SMB中,有一个很有趣的bug:如果一个“行走类敌人”(板栗仔、乌龟、刺猬)位于屏幕左侧的特定位置,那么它被从下面顶起时,会变身成龟壳,可能变成绿色,也可能变成红色,但它们起身之后都跟绿乌龟的表现一样(遇到悬崖会掉下去)。
其实在很早的时候,就已经有人分析过这个bug的原理了,就是当敌人被顶时,会执行一个变身程序,如果敌人ID在特定范围,就会被变成00或01(分别是绿乌龟和“会跳崖”的红乌龟的ID;说到这里顺便吐槽一句,为什么SMB要搞两种红乌龟……);本来“行走类敌人”的ID都不在这个范围,应该不会变身,但是执行到变身程序时,却误将“敌人在屏幕中的相对横坐标”当作敌人ID使用了,于是特定位置的敌人被顶之后,就会变成龟壳。
后来有一天,我忽然想尝试修复这个bug,于是在数日的代码分析和研究之后,终于成功修复了这个bug,而且还是连同另外一个bug一起修复了
然后,你们就看到了这个记录当时过程的帖子。