Pico-8——神奇的虚构游戏机 作者:蓬岸 Dr.Quest 编号:30405996 创建于:2017-10-29 00:24:48 修改于:2017-10-29 02:29:10 -------------------- 当已有的机器无法给你更多启发的时候,那就换一台虚构的吧。 原文刊载于《Skrolli》杂志,本文翻译自 2016.1E(国际版):Pico-8 – Fasc inating fantasy console (Link: https://skrolli.fi/2016/07/pico-8-fasci nating-fantasy-console/) (Image: https://picx.zhimg.com/v2-f70a2e56972 41f352deb70c8b7e6f717_720w.jpg?source=d16d100b) 许多的电脑爱好者在它们的发烧之路上尝试过各种各样的硬件设备和软件平台。 而很多时候它们会有意的搜集这些平台和设备,来尝试上面的游戏或是完成它们 的艺术作品。这一探索过程也帮助这些发烧友们了解各个平台的特性,并帮助他 们发掘自己喜爱或是感兴趣的电脑平台。而虚构的游戏机平台Pico-8就是其中别 具趣味的一个。 对Pico-8最好的解释,就是它是一款并不真实存在的游戏机的模拟器。它的具有 非常鲜明的8-bit风格,因此你可以把它像想为类似Game Boy Color这样的小掌 机。它的提供一块128x128像素,16色的显示屏,以及四通道的音乐芯片。 (Image: https://picx.zhimg.com/v2-f2bbd3ddd6537ba6ac8e2681a6fbe2b9_720 w.jpg?source=d16d100b) 不过,Pico-8却不仅仅是某种架空历史的实践,它设计的出发点与市面上已有的 类似设备有着很大的不同。它并没有试图去最大化的利用有限的逻辑功能,而是 提供了一批积木式的代码部件,尽可能的挖掘使用的乐趣。开发商希望随着时间 的推移,Pico-8的技术框架将形成一种独特的审美观:极简主义并有着丰富的表 现力。 第一印象 (Image: https://picx.zhimg.com/v2-9e2c70b8b1f9f12e73dba7cc4d0ee41c_720 w.jpg?source=d16d100b) Pico-8乍看上去有一点“精神分裂”。启动之后它给人的感觉并不是一台游戏机, 而更像是一台带有键盘鼠标的家用电脑。它使用命令解释器来加载软件和输出提 示,举例来说,按下ESC按钮,你会打开一个文本编辑器,它具有自己独立的区 域来存储代码、图像和声音内容。不过,只有系统内置的应用程序可以访问键盘 、鼠标和完整的文件系统——对于外部加载的应用程序来说,Pico是一台使用ROM 卡带和双按钮手柄的游戏机。 Pico使用Lua作为它的开发语言,这款为游戏脚本而生的语言虽然功能有限,但 却具有强大的表达能力。实际上,Pico虚拟机本身并不模拟任何处理器芯片——它 甚至不会执行字节码。所有的东西全都使用Lua写成,这也是程序员们能访问到 的最底层的东西。 分发Pico-8平台的游戏和软件主要有两种方式,一种方式被称作“卡带”(cartri dges)或者“卡”(carts),它实际上是一张PNG图片,看起来像是一张带有封面 贴纸的游戏卡,“卡带”图片使用了文件的低位(lower bits)来存储程序代码、 图像和声音数据,类似某种文件指纹。而另一种方式则是将软件导出为HTML5格 式并使用现代浏览器来运行,以这种方式运行的软件可以不需要Pico-8环境。 (Image: https://picx.zhimg.com/v2-c80b903584e136d09cf26ae044ec854a_720 w.jpg?source=d16d100b) 边界和限制 Pico最明显的技术特征就是128x128像素的屏幕分辨率以及固定的16色调色盘了 ,这一调色板具有相当独特而易于辨识的色彩组合,显示了其设计者对色彩的嗅 觉相比一般的工程师更胜一筹。 虽然典型的Pico游戏通常使用8x8像素的方格来构成游戏地图,并使用8x8像素的 动画精灵,但这却不是平台的限制之一。Pico的图形模式是纯粹的像素缓冲模式 ,它实际上可以绘制任何的图形——而机器的性能也足够流畅的运行90年代演示程 序中的各种特效。不过,平台通过提供速度更快的绘制地图和精灵的功能函数, 鼓励开发者使用8x8像素快而不是使用自己的代码逐个像素的绘制图形。 一张“游戏卡”可以存储15360字节(15KB)压缩后的代码,编辑器所能支持的最 大长度是65536个字符或是8192个“标记”(tokens)。这一限制实际上并不容易 达到,即使是许多Pico平台上最好的游戏其代码量也要明显低于这个数额。从另 一个方面讲,这种限制鼓励开发者开发简单而线性的游戏逻辑,Pico上面没有空 间容纳庞大的游戏引擎或多层的抽象逻辑。 “游戏卡”上还有12544字节(12.25KB)的空间预留给图像资源,另外4608字节( 4.5KB)则留给声音。当然这些数据区域也可以被用作其他用途——内存操作指令 可以在字节层面去操作它们。当程序开始运行之后,“游戏卡”中的数据将会被复 制到RAM,然后程序就可以在需要的时候修改它们。用户可使用的RAM还包括了略 低于7KB的用户保留空间,以及8KB的显存。 图形数据由8x8像素的精灵组成,它们可以包含调色板中的任意颜色。系统可以 支持最多256个精灵,而地图则由128x32个精灵组成。如果只使用128个精灵的话 ,地图的尺寸还可以再翻倍。 (Image: https://picx.zhimg.com/v2-1ef1f662fbf86caa4b4c1319f26aa1d3_720 w.jpg?source=d16d100b) (Image: https://picx.zhimg.com/v2-650c0f2b11f1431589089da0c6229693_720 w.jpg?source=d16d100b) 在声音方面,与“精灵”对应的是“声效”(sound effect - sfx),每个声效由32 个音符位置(note locations)组成,每个音符位置都包含了音符和它的波形、 音量和特效,每一个选项都有8种不同的设置可选,播放的速度也可以修改,较 慢的播放速度更适合演奏音乐而不是音效。 与Tracker(序列器)音乐类似,一首歌曲由四个通道上定义了不同效果的“图案 ”(patterns)构成,Pico-8支持最多64个图案,通过使用循环和图案结束标记 可以在一个文件中容纳多首歌曲。 虽然Pico-8的图形功能可以让开发者操作单个像素,但用户却无法直接访问声音 系统的“寄存器”。理论上讲你可以通过实时修改声音数据来实现播放器功能,但 虚拟机的时序限制很可能让这种功能无法被实现出来。不过,通过向音效内存里 写入随机数据的方式,还是可以轻松的创造出若干试验性的声效的。 除了程序代码,数据RAM和卡带ROM之外,Pico还为Lua解释器提供了256KB内存空 间。相比Pico的其他内存空间来说这一空间要大上不少,但它却比较容易被用完 ,比如说在操作大型表(Table - Lua中的一种数据结构)的时候。数字表的每 个元素最多可以存储8字节,但实际的数据只能使用其中的一半。每个数字包含1 6 bit整数和16 bit小数部分,这些意味着通过位算数运算可以对它们进行比较 。 当内存空间不足时,Pico也可以从其他ROM卡带中读取数据,甚至可以向卡带中 写入数据。但程序代码有着严格的限制,只可以从它们原始的卡带中运行。Lua 本身支持将数据作为代码运行,但Pico-8删除了这一功能,这意味着需要使用更 多代码空间的程序需要构建它们自己的虚拟机。 Pico-8并不能以电脑处理器的全速执行Lua代码。执行不同函数所需的时间已经 被预先设定好。而这种速度限制也可以减少典型的Pico软件开发时所可能出现的 问题,同时也将其对硬件的需求标准化,并避免了硬件需求的螺旋上升。按照作 者的描述,第一代的树莓派就足以让最复杂的Pico软件全速运行了。 (Image: https://picx.zhimg.com/v2-15eeba99ff2b01206f721fbc17d1a451_720 w.jpg?source=d16d100b) (Image: https://picx.zhimg.com/v2-6d32552c3b1c59afe54646f691845d57_720 w.jpg?source=d16d100b) 如何编写代码? Lua是一种全部使用大写字母的语言,因此它往往会让人联想起BASIC。举例来说 许多人都会记得如何使用BASIC语言无限循环打印文本: ::START:: PRINT "HELLO" GOTO START 不同于标准的Lua库,Pico提供了一组有限的BASIC风格的函数:其中包括了绘图 函数,一组声音函数,控制器输入函数和一些内存管理、数学运算、位运算和字 符串处理函数。 基本的绘图命令可以绘制像素、四边形、线段、圆形、文本、精灵和背景地图。 绘图命令可以切换其使用的调色盘颜色,你也可以将精灵和背景的颜色变为透明 色。 Pico绘制活动图形的功能更接近于PC而不是8-bit家用电脑。Pico没有“硬件精灵 ”或者“硬件卷轴”相反,通常每一次刷新都需要重新绘制:清除屏幕、绘制背景 并绘制需要的精灵。 绘制精灵可以使用两个不同的函数:spr()可以在指定的坐标上绘制一个8x8像素 的精灵,而sspr()则可以在任意区域以任意缩放比例绘制精灵。缩放功能可以帮 助开发者实现在大多数经典硬件上开销较大的技巧,比如说Doom风格的纹理映射 。 开发者可以将绘图命令放到一个无限循环当中,但更优雅的方式则是将其定义为 名为_draw()的函数,这样每一次屏幕刷新都会触发到它,也就是说每秒会调用3 0次。因此上面的例子可以被这样改写: FUNCTION _DRAW() PRINT "TERVEHDYS" END btn()函数可以读取游戏手柄状态,它支持使用数字作为检查特定按钮是否被按 下的参数。一段将0号精灵向左或向右移动的代码大概是这样: X=64 FUNCTION _DRAW() CLS() SPR(0,X,112) IF BTN(0) THEN X=X-1 END IF BTN(1) THEN X=X+1 END END 为了能够在屏幕上有所显示,在执行这段代码之前,您需要先在精灵编辑器里绘 制0号精灵。 有时候_draw()函数可能包含了太多的功能,因此无法在每次屏幕刷新时执行。 在这种情况下,开发者需要改用_update()函数来刷新游戏状态——理论上讲——它 每秒也会被调用30次。同样的从理论上讲,由于没有使用定时器中断,如果_dra w()花费的时间更长,它可能会被调用若干次。 (Image: https://picx.zhimg.com/v2-c95971e4e7fa9594a5791572d926a8fe_720 w.jpg?source=d16d100b) 一般来讲双缓冲(Double-buffering)的绘图技巧在Pico上面并不适用,因为只 有当_draw()函数执行完成后更改显存的操作才其作用。另一方面来讲,即使在 删除掉一些声音效果之后,用户内存也仅仅能够装下一个全屏双缓冲器。 声音方面Pico提供了sfx()和music()两个函数。前者会在第一个空闲的通道上播 放指定参数的音效,而后者则会从指定的“图案”编号处开始播放音乐。 小型2D游戏的开发者们并不需要太在意命令执行的速度,只有当将要达到平台极 限的时候才会出现问题。pset()函数刷新屏幕上所有像素所需的时间大概是正常 情况下屏幕刷新的1.5倍。直接使用poke()函数写入显存则比一般情况下快将近 三倍。然而,使用memcpy()和memset()函数的话,速度将会快上10倍,并且绘制 背景图像的命令map()的速度也是一样快。 (Image: https://picx.zhimg.com/v2-1a82df64ff726ae5c1cb8c7066949a23_720 w.jpg?source=d16d100b) Celeste(Image: https://picx.zhimg.com/v2-ba70fa875f4d1417f1cad188ee767 1c3_720w.jpg?source=d16d100b) Duangle(Image: https://pica.zhimg.com/v2-fb9ffe66d9f27c6c07cc94a1cfb56 bc3_720w.jpg?source=d16d100b) Ennuigi像素方块的乐趣 Pico的许多功能都会让人联想起1980年代的家用电脑,但它却没有止步于对传统 或技术的复原,而更加强调创作的乐趣和像素方块风格的美术效果。那些对这一 点感到疑惑的人们应当考虑到它毕竟是一款虚构的游戏平台:虚拟世界并不总是 完美无缺的,但它设定了许多有趣的事件,并能够激发参与者的想象力。 如果我们用一个词来总结Pico-8的精神的话,我想应该是“直截了当”。其中的一 部分来自于8-bit电脑和运行在上面的BASIC语言:你可以在“开机”之后立刻编写 程序,而不需要考虑如何配置操作系统、API和运行环境。所有的事情都简洁明 了:内存里的某个比特总是会反馈到屏幕上某个位置的某个色块上。 然而这一概念并不止于此,它没有时钟周期和栅格线,没有颜色单元边界,没有 折腾开发工具和文件的困扰。平台自身的限制避免了磨洋工式的细节调整。这得 益于没有可以调节的调色盘、采样系统和机器语言指令,你不再需要对它们进行 微调。而较少的像素数让完美主义者们也不会花太多时间在处理抗锯齿上。 对于那些对它感兴趣了人们来说,Pico-8确实有一些技术挑战和智力问题在等着 它们。但我们也同样不会认为Pico-8的世界里需要极度关注细节。Pico程序写起 来很快也很容易,熟悉这一平台基础只是的开发者可以在一晚上就写出一款相对 精美的游戏。 当我写作这篇文章时,Pico仍然处于Alpha测试版本,至少在开发环境中这种不 完善还是很容易被发觉的。代码编辑器不能自动跳到有错误的行,而绘制像素的 时候键盘也不能使用。这些软件并不能很好的帮助用户进行开发,相反用户需要 阅读零散的文档才能知道可以用ESC键打开编辑器这样简单的功能。地图编辑器 也让人有点摸不着头脑,因为它没有任何地方标明地图里的零号精灵永远都是空 白的。 但瑕不掩瑜,我还是推荐大家尝试Pico,即使新手程序员也是如此——至少是其中 那些喜欢8-bit像素方块美术风格同时也不怕阅读文字说明的人。Lua语言没有明 显的缺点,而Pico简化的接口鼓励开发者自行解决问题而不是寻找现成的方案。 对于更有经验的开发者而言,Pico提供了一种轻松愉快的消遣方式,而其结果则 比简单的涂鸦和水彩画丰富的多。 (Image: https://pic1.zhimg.com/v2-e7a84d5e6deada0e6cc30f0176979369_720 w.jpg?source=d16d100b) Dusk Child(Image: https://pic1.zhimg.com/v2-106cf0db903b13308093c99861 c4dc41_720w.jpg?source=d16d100b) Picoracer2048(Image: https://picx.zhimg.com/v2-ad6736fc0783d0313a380da 8fd9e98a2_720w.jpg?source=d16d100b) Hyperspace社区和创意 Pico-8在开发之时就曾经参与众筹,并在发布之前就聚集了一大批热心粉丝。在 我写下这篇文章之时,开发者论坛和Lexaloffle Games为Pico准备了超过250张 卡带,包括游戏和各种软件。这其中大部分是平台游戏和各类传统2D动作游戏, 但其中偶尔也夹杂着更加试验性的作品。在Pico平台上甚至可以找到一些Demosc ene作品。 线上论坛从一开始就是Pico社区开发和发行的中心,这些论坛中有着温和和充满 鼓励的气氛。社区中的成员以友好和互助的姿态欢迎初学者的加入。Pico开发团 队的成员也经常参与讨论,这也让论坛成为讨论Pico技术细节的最佳去处。 Pico-8同样有着自己的发烧友杂志《Pico-8 Fanzine》,它收到了包括Lexaloff le的主力开发者“zep”在内的许多投稿。独立平台冒险游戏VVVVV的开发者Terry Cavanagh则是其中最有名的作者之一。发烧友杂志的作者和读者都是该平台的爱 好者,截止到写作这篇文章的时候,这份发烧友杂志已经发行了三期。这份杂志 和其他杂志类似,也包含了编写游戏的指导、采访、游戏测评、不同类型的Pico -8编程文章,当然还有爱好者们创作的美术作品。 (Image: https://pic1.zhimg.com/v2-3714e51f5188b199cf6927db5c5346e2_720 w.jpg?source=d16d100b) Pico-8 Zine行文至此,我想许多读者们会非常确定的认为这款充满热血而开放 的开发者文化的软件玩具一定是免费甚至开源的。但情况却并非如此,Pico-8是 一款商业产品,目前正以$20的标价提供下载。二进制文件可以在三种重要的x86 操作系统上运行:Windows,Mac OS和Linux。许多人都希望能推出一款基于硬件 的Pico-8游戏机,但到目前为止,Pico-8仍然只能提供二进制格式的软件运行环 境。 当然Pico是一款简单的平台,对其进行逆向工程未必很困难,并且Lua解释器本 身已经是开源的。不过这一项目正被“友善光环”所围绕,因此没有多少黑客敢于 开发免费和开源的Pico变种。相比之下我们更期待Lexaloffle自己会在客户们逐 渐丧失兴趣的时候会将Pico开源。当社区衰退,开发也不再活跃之时,Pico可能 会成为游戏开发的一个有趣的小众选项,乃至进入教育市场。 (Image: https://picx.zhimg.com/v2-106cf0db903b13308093c99861c4dc41_720 w.jpg?source=d16d100b) Picoracer2048(Image: https://pic1.zhimg.com/v2-a9b117ac78240de65cf060a cc876e2c5_720w.jpg?source=d16d100b) Hybris虚构平台的未来 像Pico-8这样的虚构游戏机是一种相对比较新的现象,虽然早在1970年代的微电 脑爱好者中就已经存在Chip-8这样的虚拟机,并在某种程度上可以视为是它的前 身,而许多教育软件也会使用简化的机器架构,而Pico的一个与众不同之处,就 是它是“以创意作为第一考量”的。也因此它真正的前身可能只有Lexaloffle更早 的Voxatron虚构游戏机。 在未来,很可能有相比Pico更小也更易于掌握的虚构平台出现,但其出现的原因 却并不一定是要与Pico竞争或是比较——而很可能仅仅是出于好奇心。 Pico的功能鼓励人们在其上开发有趣可爱而又怀旧的作品,但选择不同的功能组 合则可能创造出截然不同的精神世界和美术风格。比如说,如果人们开发出一款 强调阴郁厚重风格的平台作为Pico的“邪恶双胞胎”就是一个颇为有趣的想法。当 然,类似的现象在电脑平台发展史上时有发生,但创造虚构平台的亚文化可能会 为研究这种现象提供某种有趣的试验环境。 无论未来的前景如何,Pico-8仍然是一个有趣的开发环境,相比那些经典的电脑 和游戏机平台,它提供了一种更为轻松的选项。它将充满启发性的8-bit平台的 种种限制和简单易用的现代设计理念结合起来,即使是那些对编程最不感冒的人 群,也可能会被大颗像素的风格吸引,并从中找到诸多的乐趣。 芬兰语版本:Pico-8 – Fantasiakonsolin pauloissa (Link: https://skrolli .fi/2016/07/pico-8-fantasiakonsolin-pauloissa/) 文字作者:Visa-Valtte ri Pimi, Ville-Matias Heikkil图片作者:Laura Pesola, Ville-Matias Heik kil(Image: https://pic1.zhimg.com/v2-2ac4d0c994e6297b6c6728f8520ede04_ 720w.jpg?source=d16d100b) Star Beast(Image: https://pic1.zhimg.com/v2-3939663f708704b684002d761e 784f64_720w.jpg?source=d16d100b) LemmtrisPico-8官网:http://www.pico-8.com/ (Link: http://www.pico-8.co m/) Pico-8游戏下载 Duangle 2015 Intro (Link: http://www.lexaloffle.com/bbs/?tid=1984) Dusk Child (Link: http://www.lexaloffle.com/bbs/?tid=2274) Celeste (Link: http://www.lexaloffle.com/bbs/?tid=2145) Ennuigi (Link: http://www.lexaloffle.com/bbs/?tid=2232) Hybris (Link: http://www.lexaloffle.com/bbs/?pid=17774) Hyperspace 1.1.1 (Link: http://www.lexaloffle.com/bbs/?tid=2688) Lemmtris (Link: http://www.lexaloffle.com/bbs/?tid=2028) PICORACER-2048 (Link: http://www.lexaloffle.com/bbs/?tid=2243) Star Beast (Link: http://www.lexaloffle.com/bbs/?tid=2950)