红白机游戏《超级玛丽》重编译成 JavaScript 代码

2018-01-23 11:10:20 +08:00
 zjcqoo

周末在 GitHub 上看到有人把原版的《超级玛丽》汇编加上了详细的注释: https://gist.github.com/1wErt3r/4048722,差不多算是开源了吧:)

于是想起之前捣鼓的一个玩具 《机器指令翻译成 JavaScript 》,做了一些改进,加上了 NES 的接口,例如图像、声音、手柄等。

然后和之前文中说的一样,将 6502 ASM 「翻译」成 C,然后再通过 emscripten 「编译」成 JavaScript:

演示: https://www.etherdream.com/FunnyScript/smb-js/game.html

由于最新版的浏览器会把 asm.js 代码自动转成 WebAssembly,所以部分浏览器初始化比较慢,比如 Chrome 启动需要等好几秒。像 FireFox 会缓存 asm.js 的解析,所以只有首次加载会慢。


需要注意的是,这不是模拟器!最明显的特征,就是性能。

点击 Benchmark 按钮可测试游戏逻辑的极限 FPS,目前最快的是 Firefox,在我笔记本上可以跑到 19 万 FPS !就算 IE10 也能跑到 600 FPS。( IE10 以下的浏览器不支持)

当然,这还只是没做任何性能优化的结果,之后还会尝试更好的翻译方案,比如指令层的 call/jump 尽可能翻译成代码层的函数调用、分支代码等。希望能达到 50 万 FPS 以上 😀

10995 次点击
所在节点    分享创造
67 条回复
missdeer
2018-01-23 11:19:47 +08:00
这一波 666
toou123
2018-01-23 11:48:48 +08:00
小心被任天堂告了...(手动笑哭)
ljbljb007
2018-01-23 11:48:53 +08:00
有 bug 啊 带子弹的玛丽被小怪碰一下不是变成没子弹的玛丽吗? 这里怎么直接变小了?
zjcqoo
2018-01-23 11:57:04 +08:00
imdoge
2018-01-23 12:41:13 +08:00
好难跳……
另外按着前进怎么就跳不高。。难道我需要机械键盘
jiqing
2018-01-23 12:49:21 +08:00
我一直在看关于 6502 模拟器的资料,想用 Java 写一个,看底层看得相当蛋疼
tinytin
2018-01-23 13:13:47 +08:00
竟然连第一关都过不去了。。。。
civet
2018-01-23 14:03:17 +08:00
看到楼上几位同学,好像还没发现 B 键的用处……
northisland
2018-01-23 14:18:34 +08:00
一不小心就点了 2 下收藏
droiz
2018-01-23 14:28:30 +08:00
Firefox 太可怕了,我的 2014 年中独显 macbookpro,ff 可以跑 214285FPS,chrome 只有 28407FPS
basstk
2018-01-23 14:29:50 +08:00
勾起了小时候的回忆,厉害了我的哥
goldenlove
2018-01-23 14:34:03 +08:00
游戏不错,但再也找不回当时的感觉了~
可支持手柄不?
cy97cool
2018-01-23 14:38:09 +08:00
强烈建议加一个存档功能。。。
zjcqoo
2018-01-23 14:38:29 +08:00
@goldenlove 可以支持。改天我加上。
tghgffdgd
2018-01-23 14:53:34 +08:00
@ljbljb007 #3 看来你没玩过 1 代的超级玛丽
gluttony
2018-01-23 15:15:00 +08:00
赞。

前几天玩了一个 C++ to JS 运行 CPS 1/2/3 等模拟器的,也很顺畅 http://neptunjs.xyz/cps.html
newtype0092
2018-01-23 15:28:16 +08:00
@ljbljb007 你玩到山寨版了
luoway
2018-01-23 15:30:38 +08:00
nice!
跳是 I 键
蹲是哪个键?
qipan0321
2018-01-23 15:32:57 +08:00
看了楼主的博客园,真的强!
MonoLogueChi
2018-01-23 15:47:15 +08:00
建议加上虚拟按键,方便在手机上玩

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/425155

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX