BASIC8 诞生始末

作者:Tony Wang
知乎文章编号:33539685
创建于:2018-02-02 2:46:46
修改于:2018-02-02 4:34:32


多年前我就幻想着一套便捷的游戏开发环境,不需要 AAA 级的画质,只要 8-bit 复古风格就好;不要有真正古董电脑的种种不便;也不要有商业引擎的冗长 pipeline。直到我发现了 PICO-8,(详见《PICO-8 —— 神奇的虚构游戏机》),一个定义为 Fantasy Console 的软件,这正是我幻想中的那个软件的形态:有限的机能,8-bit 低分辨率显示,直截了当的开发方式,便捷的分享途径……

然而作为一个爱折腾的(前)游戏程序员,怎么能简单的满足于拿来就用。经过简单的研究,很快我发现了 PICO-8 和我的幻想理念有些不同。PICO-8 的技术选择很有趣,使用 Lua 作为开发语言,它很好的适用于游戏等应用的内嵌脚本,PICO-8 使用它省去了从语言开始造轮子的麻烦;但 PICO-8 却保留了 8-bit 家用计算机的直接内存映射模式。前者让它拥有比原始 8-bit 年代 BASIC 更强的表达能力,后者又把当年的一些用直接访问特定内存的把戏(如 PEEK、POKE 特定地址的奇技淫巧)给保留了下来。

于是我开始着手设计自己的“幻想电脑”:至少得是某种 BASIC 变体(本人的入门语言,有独特感情怀念),但不需要行号,开发者也不需要知道任何关于内存空间的细节(即使这样的细节是虚构的)。恰巧多年前我折腾出来过一个 BASIC 解释器,不需要写行号,集中了从传统的 GOTO、GOSUB,到结构化的自定义函数,并且支持 Lambda 表达式,以及基于原型的面向对象,另外还对大小写不敏感。正好拿来作为内嵌语言,并且可以名正言顺的给它起一个更老派的名子:BASIC8。

后面的扩展都是基于这套“简陋”的语言内核

PICO-8 的一些操作保留了命令行年代的一些痕迹,另外屏幕 128x128 的大小限制不仅是针对程序的绘制区域,同样也限制于内置的各种编辑器,包括代码编辑器。这导致很多人使用 PICO-8 的时候根本不用内置的代码编辑器而是使用其他更顺手的文本编辑软件。我决定把早期图形用户接口操作系统的理念引入 Fantasy Console/Computer 这一软件类型(或者说使 BASIC8 成为首款基于 GUI 的幻想电脑)。程序运行时绘制区域依然限定在一个固定的大小(160x128),但编辑器的分辨率并不做硬性限制而是随着窗口大小缩放;相对于主机(console),我更倾向于把它定义成电脑(computer),并把程序包叫作磁盘(disk)而不是卡带(cartridge);磁盘的大小,资源空间大小,代码长度也不做硬性限制;除了每个虚拟手柄支持 6 个按键,另外还加入键盘和鼠标控制支持。总的来说,我希望 BASIC8 的开发者依然是在针对同一套虚构规格使用同一套 API 做开发,但相对于 PICO-8 需要关注的限制和细节更少,从而可以更专注于具体想要表达什么。

代码编辑
Sprite 编辑
Map 编辑

对于磁盘的管理,使用更直观友好的图标模式,运行、打开编辑等写代码之外的操作也不需要命令行式的交互。

PalmOS + AmigaOS + 个人设计
编写并运行游戏
编写并运行 Demo

除了基本的绘制、输入和音频函数,我集成了一些简便易用的高级库如:JSON 解析、文件读写、简单 web 访问、内置寻路等功能。让开发者摆脱参与这些脏活累活的重复劳动就能快速组织业务逻辑。

你会用 Windows 画图就会用 BASIC8 的编辑器

分享和社区的构建亦是这类软件的一个重点,我选择更为便利的 Steam 平台,并充分利用其强大的社区创意工坊(尴尬的是目前国内访问社区和工坊页面需要用更科学的办法)。接下来的计划中有打算做 Windows 之外的平台移植以及导出可脱离编辑器直接运行的程序包的功能,这样更方便不同平台甚至尚未拥有 BASIC8 的玩家运行社区上的磁盘。

内置磁盘之《宇宙传奇》
内置磁盘之《无限霸王》
内置磁盘之 Amiga《Boing Ball》复刻
社区的构建少不了爱好者的参与

我热衷于收藏各式古董硬件,深知能找到一套匹配的显示设备都不容易,更不要提在今天强制自己去适应几十年前的太多开发上的不便。复古计算和复古游戏本是一个小众的领域,近些年一些爱好者通过媒体和软件上的努力,正让这一拥有独特魅力的小众乐趣变得通俗。曾几何时家用电脑关机只需要直接拔电源就行了,虽然 BASIC8 并不能让你安全的拔电源关闭你的实体电脑,但至少让当年简单纯粹的乐趣又回归了一部分,错过或者没经历过那个年代的你,考虑入坑吗?(北京时间 2 月 3 日上午左右会开始限时打折)

BASIC8 on Steam

官网:paladin-t.github.io/b8/

在线手册:paladin-t.github.io/b8/