needlestack/gmc64
GitHub: needlestack/gmc64
gmc64 是经典 Commodore 64 GameMaker 的 JavaScript 浏览器重制版,让用户在现代浏览器中以现代化交互方式创作 C64 风格游戏并与原始软盘镜像双向兼容。
Stars: 8 | Forks: 0
# gmc64
gmc64 是 Garry Kitchen 面向 Commodore 64 的 GameMaker 的 JavaScript 重新实现。本项目记录了其图形与声音格式、虚拟机、指令集和运行时行为,并包含一个可处理原始 GameMaker 项目的基于浏览器的版本。
## 如果你曾使用过 GameMaker
你可能还记得逐像素绘制 sprite 动画、绘制背景、编写小游戏和 demo、调整 SID 音效以及创作音乐的乐趣。
如果你曾尝试在 C64 模拟器上重温那份乐趣,你可能会发现,原版基于摇杆的 UI 在今天看来实在难以接受,而且缓慢的磁盘操作也让人非常头疼。
gmc64 解决了这个问题。它是完全现代化的 GameMaker 的 JavaScript 重制版,具备现代的便利性:你可以使用鼠标或触控板,即时预览、加载和保存文件,以及复制、粘贴、撤销等。此外,还支持导入和导出 GIF、PNG 和 MIDI 文件。
它不是一款模拟器,而是一次重制,扫清了所有的绊脚石。
## 如果你保留了你的原版作品
你手头还有保存在软盘上的原版作品吗?gmc64 可以读取 `.d64` 软盘镜像以及所有的 GameMaker 文件格式。只需拖放软盘或使用内置的文件浏览器即可。
接着,你可以打开编辑器、添加 sprite、修改音乐,并将其重新保存回软盘镜像。你甚至可以将你的作品导出为一个独立的 HTML 文件,并发布到网络上。
gmc64 也能将文件保存回 `.d64` 镜像,你甚至可以将其重新导入到原版的 GameMaker 中。
## 如果你是 GameMaker 的新手
GameMaker 是由 Garry Kitchen 开发、并于 1985 年由 Activision 发行的一款面向 Commodore 64 的游戏创作工具。它允许用户构建真正可运行的 C64 游戏,而无需学习汇编语言,也无需手动编写图形和声音代码。
作为早期的图形化 IDE,你可以通过它绘制 sprite 和背景、创作音乐、录制音效,并从一系列简单的指令中编写游戏逻辑。
```
sprite 1 is player
sprite 1 x position = 160
sprite 1 y position = 100
if joystick 1 is left then
sprite 1 direction = left
endif
```
许多后来成为游戏开发者的人都是从这里起步的。在现代社会,它很大程度上已经难以访问;即便通过模拟器,其可用性也受到了原始 C64 局限性的严重影响。
gmc64 将它带回来了。相同的 sprite、相同的指令、相同的声音,一切都能在你的浏览器中瞬间呈现。
## 双向兼容性
gmc64 不仅能打开旧文件。它还实现了相同的格式:`/PRG`、`/SPR`、`/PIC`、`/SND` 和 `/SNG` —— 并且它们在两个方向上都能完美转换。
在这里构建的游戏可以保存为真实的软盘镜像,并能在运行原版 1985 GameMaker 软盘的实际 Commodore 64 上加载。在该硬件上制作的任何内容都能在此处直接加载,无需转换。新作品可以发布到 1541 软盘上。旧作品也可以发布到网络上。
## 快速开始
点击本页面顶部的任意图片链接即可开始体验。
然后:
- **尝试 demo** - `disks/gmc64-demo.d64` 随本项目一同发布,包含了可运行的程序以及可编辑的 sprite、场景、声音和曲目
- **从零开始** — 创作属于你自己的 sprite、场景、声音和音乐
- **将 `.d64` 拖放到任意 gmc64 工具中** - editor、sprite-maker、scene-maker、sound-maker 和 music-maker 都会弹出一个文件选择器。
- **托管 `.d64`** - 你也可以指向在线的 `d64`:`editor.html?disk=https://your-host/game.d64` 会打开相同的文件选择器
当你的游戏准备就绪后,点击 **Export Game** 即可获取包含你作品的单一 HTML 文件。
## 分享你的作品
每个编辑器都接受 URL 参数,因此你可以向他人提供指向特定程序的直接链接,或者将播放器嵌入到你正在开发的页面中。并且,每个编辑器都支持将 `.d64` 拖放到其窗口中 —— 文件选择器会自动过滤并显示该工具对应的文件类型(例如 editor 中是 `.PRG`,sprite-maker 中是 `.SPR` 等)。
### Player (`play.html`) — 无界面干扰,对 iframe 友好
| 参数 | 用途 |
|-------|---------|
| `disk` | `.d64` 的 URL,或使用魔术值 `demo` 来加载自带的 demo 软盘 |
| `file` | 磁盘上的程序名称(不区分大小写) |
| `nocredit=1` | 隐藏角落处的 `gmc64.com` 链接 |
| `poster_seconds` | 为播放按钮背后的预览画面模拟游戏的秒数。默认为 `2`,最大为 `10`,设为 `0` 则完全跳过预览画面。允许使用小数。 |
示例 — 直接链接:
```
https://gmc64.com/play.html?disk=demo&file=aliens/prg&nocredit=1
```
### Editor (`editor.html`) — 加载到编辑器中,可选播放
| 参数 | 用途 |
|-------|---------|
| `disk` | 同上 |
| `file` | 同上 |
| `play=1` | 页面打开时显示带有预览画面的播放按钮遮罩层。访客点击播放以运行,点击停止按钮则进入编辑器。如果没有此标志,文件将直接打开进行编辑。 |
| `poster_seconds` | 同上;仅在设置了 `play=1` 时有意义 |
| `play_demo=1` | 别名 — 等同于展开为 `disk=demo&file=gmc64i/prg&play=1&poster_seconds=8.5` |
示例 — 向他人发送一个可运行的链接,同时允许他们进入编辑器查看代码:
```
https://gmc64.com/editor.html?disk=https://your-host.com/game.d64&file=GAME/PRG&play=1
```
其他编辑器(`sprite-maker.html`、`scene-maker.html`、`sound-maker.html`、`music-maker.html`)也接受 `disk` 和 `file` 参数,可直接深度链接到特定的素材进行编辑。
### Iframe 嵌入
有两种方式可以获得可嵌入的游戏,具体取决于你打算如何托管。
**选项 A — 独立的 HTML。** 使用编辑器中 **file** 下的 **Export Game** 按钮。它会下载一个包含你的程序、软盘镜像和运行时的单一 HTML 文件。你可以将其托管在任何地方(GitHub Pages、Netlify、S3 或你自己的服务器),然后进行嵌入。导出对话框还会为你生成 iframe 代码片段 —— 只需粘贴你要托管该文件的 URL 即可:
```
```
**选项 B — `play.html` + 托管的 `.d64`。** 跳过导出。如果你的软盘镜像已经拥有公开 URL,直接让 `play.html` 指向它即可:
```
```
注意:disk=demo 是一种特殊情况,会从自带的 demo 软盘中加载。
**跨域软盘:** 对于选项 B,如果你的 `.d64` 与托管 `play.html` 的页面不在同一个域,那么该源需要允许跨域获取 (CORS)。选项 A 则完全避免了这个问题 —— 因为软盘数据就在 HTML 内部。
## 包含内容
| 文件 | 编辑内容 |
|------|---------------|
| `editor.html` | 程序指令 + 运行时 + 素材分配 |
| `sprite-maker.html` | Sprites(支持多色、多帧、多部件) |
| `scene-maker.html` | 背景(160×200 的 4 索引色场景) |
| `sound-maker.html` | 音效(SID 风格) |
| `music-maker.html` | 曲目(3 通道、乐谱风格的五线谱编辑器) |
所有五个编辑器都对同一个浏览器内的 `.d64` 镜像进行读写,因此你的 sprite 会如同在 C64 上一样,顺畅地流转到场景和程序中。
## 依赖项
**运行和编辑:无。** 它们是纯静态的 HTML 和 JavaScript。只需在浏览器中打开这些文件即可使用。它们也可以通过 `file://` 在本地运行。
**重新构建独立包:** 需要 Node.js。仅使用内置功能,不需要执行 `npm install`。在编辑了 `play.html` 或任何它从 `js/` 加载的文件后,请运行:
```
node tools/bundle-standalone.js
```
这会重新生成 `js/standalone-source.js` —— 这是将 `play.html` 及其引用的每一个 `
![]() Intro Demo |
![]() Sprite Maker |
![]() Scene Maker |
![]() Sound Maker |
![]() Music Maker |
![]() Program Editor |





