Pico-8 帮助文档初步翻译

原创

#1

================================================== ==========================================

PICO-8 v0.1.11g
https://www.pico-8.com
(c)版权所有2014-2018 Lexaloffle Games LLP
作者:Joseph White // hey@lexaloffle.com

PICO-8具有以下功能:
SDL2 http://www.libsdl.org
Lua 5.2 http://www.lua.org //请参阅license.txt
GIFLIB http://giflib.sourceforge.net/
WiringPi http://wiringpi.com/

================================================== ==========================================

欢迎来到PICO-8!

PICO-8是一款用于制作,分享和玩小游戏和其他计算机的幻想控制台 
程式。当你打开它时,机器会用一个用于输入Lua程序的shell来迎接你
并提供简单的内置工具,用于创建精灵,地图和声音。

PICO-8的严格限制是经过精心挑选的,有助于使用,鼓励小型
但富有表现力的设计,希望能给PICO-8游戏卡带带来独特的外观 
感觉。

::按键

切换全屏:Alt + Enter 
退出:Alt + F4或命令-Q
重新加载/运行/重新启动购物车:Ctrl + R.
快速保存:Ctrl + S.
静音/取消静音:Ctrl + M.
玩家1默认按键:上下左右+ ZX / NM / CV
玩家2默认按键:SDFE +tab,Q /shif A.
enter或P表示暂停菜单(运行时)
//使用KEYCONFIG更改默认值。

:: 规格

显示:128x128,修正16位色
输入:6键控制器
游戏卡带尺寸:32k
声音:4通道,64个可定义的芯片blerps
代码:Lua(最多8192代码代码) 
精灵:128个8x8精灵的单行(+128共享)
地图:128x32 8位像素(+ 128x32共享)

:: Hello World

PICO-8启动后,尝试键入其中一些命令,然后输入:

	PRINT("HELLO WORLD")
	RECTFILL(80,80,120,100,12)
	CIRCFILL(70,90,20,14)
	FOR I=1,4 DO PRINT(I) END

(注意:PICO-8只显示大写字符 - 只需正常键入而不用大写字母!)

您可以在代码编辑中使用这样的命令来构建交互式程序
模式以及两个特殊的回调函数_UPDATE和_DRAW。例如,以下内容
程序允许您使用光标键移动圆圈。按逃生切换
到代码编辑器并键入或复制并粘贴以下代码:

  X = 64  Y = 64
FUNCTION _UPDATE()
 IF (BTN(0)) THEN X=X-1 END
 IF (BTN(1)) THEN X=X+1 END
 IF (BTN(2)) THEN Y=Y-1 END
 IF (BTN(3)) THEN Y=Y+1 END
END

FUNCTION _DRAW()
 RECTFILL(0,0,127,127,5)
 CIRCFILL(X,Y,7,14)
END

现在按escape键返回控制台并键入RUN(或按CTRL-R)查看它 
在行动。有关更复杂的程序,请参阅示例磁带。

如果要存储程序以供日后使用,请使用SAVE命令:

> SAVE PINKCIRC

并再次加载:

>LOAD PINKCIRC

::示例游戏卡带

这些游戏卡带包含在PICO-8中,可通过键入以下内容进行安装:

 INSTALL_DEMOS
CD DEMOS

HELLO      Greetings from PICO-8
API        Demonstrates most PICO-8 functions
JELPI      Platform game demo w/ 2p support 
CAST       2.5D Raycaster demo
MANDEL     Mandelbrot explorer
COLLIDE    Example wall and actor collisions
BUTTERFLY  Serpinsky triangles thing
DRIPPY     Draw a drippy squiggle
STOMPY     Music cart

To run a cartridge, open PICO-8 and type:

LOAD JELPI
RUN

按escape键停止程序,再次进入编辑模式。

:: 文件系统

这些命令可用于管理文件和目录(文件夹):

DIR         列出当前目录
CD BLAH     更改目录
CD..        上一个目录
CD/         更改回顶部目录(在PICO-8的虚拟驱动器上)
MKDIR BLAH  创建一个目录
FOLDER      在主机操作系统的文件浏览器中打开当前目录

LOAD BLAH从当前目录加载购物车
保存BLAH将购物车保存到当前目录

如果要移动文件,复制文件或删除文件,请使用文件夹 
命令并在主机操作系统中执行。

PICO-8驱动器的默认位置是:

Windows:C:/ Users / Yourname / AppData / Roaming / pico-8 / carts
OSX:/ Users / Yourname / Library / Application Support / pico-8 / carts
Linux:~/ .lexaloffle / pico-8 / carts

您可以在pico-8 / config.txt中更改此设置和其他设置

提示:驱动器目录可以映射到云端驱动器(由Dropbox,Google提供)
驱动器或类似设备)以提供PICO-8机器之间共享的单个磁盘 
分布在不同的主机上。

::加载和保存

使用LOAD和SAVE时,可以省略.P8扩展名并自动添加。
	
保存为.p8.png扩展名将以特殊图像格式保存盒式磁带
看起来像游戏卡带。

使用文件名“@CLIP”加载或保存到剪贴板。

装入或保存盒式磁带后,也可以使用CTRL-S快速保存盒式磁带

::使用文本标签和预览图像保存.p8.png购物车

	要生成使用购物车保存的标签图像,请先运行程序,然后按F7进行抓取
	屏幕上的任何内容。以“ - ”开头的程序的前两行也是
	吸引到购物车的标签。

	例如
	- OCEAN DIVER LEGENDS
	- BY LOOPY


:: .png格式的代码大小限制

	以.png格式保存时,代码的压缩大小必须小于15360字节。
	要查找代码的当前大小,请使用INFO命令。压缩的大小限制
	不以.p8格式保存。

::使用外部文本编辑器

可以使用单独的文本编辑器直接编辑.p8文件。使用CTRL-R运行
如果出现以下情况,游戏卡带将自动重新加载文件

	1. PICO-8编辑器中没有未保存的更改,AND
	2.文件的内容与上次加载的版本不同
	
如果磁盘上的购物车/和/在编辑器中有更改,则会显示通知:

	不要重新加载; 未经改变

PICO-8不完全支持大写字符,它们会自动转换为
在代码编辑器中查看时的小写。请注意,这也会导致存在未保存的更改,
这意味着CTRL-R将停止自动重新加载磁盘上的版本,直到它为止
手动LOAD()编辑。

字形字符(通常用shift-A..Z键入)以.p8格式存储在
主机操作系统的剪贴板作为粗略的unicode等价物。 

::备份

如果退出而未保存更改,或覆盖现有文件,则备份 
游戏卡带已保存到{appdata} / pico-8 / backup。

::配置

:: config.txt

	您可以在config.txt中找到一些设置。PICO-8未运行时编辑文件。

	Windows:C:/Users/Yourname/AppData/Roaming/pico-8/config.txt
	OSX:/ Users / Yourname / Library / Application Support / pico-8 / config.txt
	Linux:~/ .lexaloffle / pico-8 / config.txt

	使用-home开关(下面)使用不同的路径来存储config.txt和其他数据。
	

::命令行参数

	//注意:这些覆盖了config.txt中的设置
	
	pico-8 [开关] [filename.p8]
	
	-width n设置窗口宽度 
	- 高度n设置窗口高度 
	-windowed n设置窗口模式关闭(0)或开启(1)
	-sound n音量0..256
	-music n音量0..256
	-joystick n操纵杆控件从玩家n(0..7)开始
	-pixel_perfect n 1表示整数刻度的未筛选屏幕拉伸(默认情况下为on)
	-draw_rect x,y,w,h绝对窗口坐标和绘制pico-8屏幕的大小 
	-run filename加载并运行盒式磁带
	-x filename执行PICO-8推车无头,然后退出
	-p param_str将参数字符串传递给指定的盒式磁带
	-splore以splore模式启动
	-home path设置存储config.txt和其他用户数据文件的路径
	-desktop path设置要保存的屏幕截图和GIF的位置
	-screenshot_scale n截图的比例。默认值:3(368x368像素)
	-gif_scale n gif捕获量表。默认值:2(256x256像素)
	-gif_len n以秒为单位设置最大gif长度(1..120)
	-gui_theme n使用1作为更高对比度的编辑器颜色方案
	-timeout n下载超时前等待的秒数(默认值:30)
	-software_blit n使用软件blitting模式off(0)或on(1)
	-foreground_sleep_ms n在帧之间休眠多少毫秒。
	-background_sleep_ms n在后台运行时在帧之间休眠多少毫秒

:: 控制器设置

PICO-8使用SDL2控制器配置方案。它将检测通用控制器
在启动时,还在同一目录中的sdl_controllers.txt中查找自定义映射 
as config.txt。sdl_controllers.txt每行有一个映射。

要为控制器生成自定义映射字符串,请使用controllermap
SDL2附带的程序,或者尝试http://www.generalarcade.com/gamepadtool/

要设置触发操纵杆按钮的键盘按键,请使用KEYCONFIG。

::截图,视频和游戏卡带标签

当盒式磁带运行时使用:

	F6将屏幕截图保存到桌面
	F7捕获游戏卡带标签图像
	F8开始录制视频
	F9将GIF视频保存到桌面(默认为最长:8秒)
	
	//如果您的系统上没有F6..F9,请使用CTRL-6..9

您可以随时保存视频(始终录制) - 使用F8进行重置
视频起点,如果你想要不到8秒的东西。

要更改最大gif长度,请在config.txt中编辑gif_len以指定数字
记录的秒数。gif格式不能完全匹配30fps,所以PICO-8
而是使用最接近的匹配:33.3fps。

::分享游戏卡带

共享PICO-8制造的推车有三种方式:

	1.直接与其他PICO-8用户共享.p8或.p8.png文件
	
		键入FOLDER以打开主机操作系统中的当前文件夹。

	2.在Lexaloffe BBS上发布购物车以获得可播放网页的版本

		http://www.lexaloffle.com/pico-8.php?page=submit
		
	3.将盒式磁带导出到独立的html / js或本机二进制播放器
		(有关详细信息,请参阅出口商部分)

::出口商/进口商

EXPORT命令可用于生成png,wav文件和独立的html和本机
二进制游戏卡带播放器 输出格式是从文件名扩展中推断出来的(例如
.PNG)。

您可以随意分发和使用导出的磁带和数据 
您已获得作者和贡献者的许可。

:: Sprite Sheet(.png)

	IMPORT BLAH.PNG  - 期望128x128 png和颜色适合pico-8调色板
	EXPORT BLAH.PNG  - 使用folder()找到导出的png

:: SFX和音乐(.wav)

	导出BLAH.WAV  - 从当前模式导出音乐(当编辑器模式为MUSIC时)
	EXPORT BLAH.WAV  - 导出当前SFX(当编辑器模式为SFX时)
	EXPORT BLAH%D.WAV  - 将所有SFX输出为blah0.wav,blah1.wav .. blah63.wav

:: HTML播放器(.html)

	要生成一个独立的html播放器(foo.html和foo.js):
	>EXPORT FOO.HTML
	
	或者只是.js文件:
	>EXPORT FOO.JS
	
	(可选)使用-p开关提供自定义html模板:
	>EXPORT FOO.HTML -P ONE_BUTTON
	
	这将使用文件{application data} /pico-8/plates/one_button.html作为
	html shell,用.js文件名替换特殊字符串## js_file ##。
	

::二进制播放器(.bin)

	要为Windows,Linux(64位)和Mac OSX生成独立的可执行文件:
	
	>EXPORT FOO.BIN
	
	默认情况下,游戏卡带标签用作没有透明度的图标。至
	特定于精灵表中的图标,使用-i和可选的-s和/或-c 
	控制大小和透明度。
	
		-IN图标索引N,默认透明色为0(黑色)。
		-SN尺寸NxN精灵。大小3将产生24x24图标。
		-CN将颜色N视为透明。使用16表示没有透明度。

	例如,要在spritesheet中使用从索引32开始的2x2精灵, 
	使用颜色12作为透明,并捆绑一个额外的cartrige C0.P8:
	
		>EXPORT FOO.BIN -I 32 -S 2 -C 12 C0.P8

::导出多个游戏卡带

生成时,最多可将16个游戏卡带捆绑到EXPORT中
独立的HTML或本机二进制播放器

EXPORT FOO.HTML DAT1.P8 DAT2.P8 GAME2.P8

在运行时,可以访问额外的购物车,就像它们是本地文件一样:

RELOAD(0,0,0x2000,“DAT1.P8”) - 从DAT1.P8加载spritesheet
LOAD(“GAME2.P8”) - 加载并运行另一个购物车

:: Splore

SPLORE是一个内置的实用程序,用于浏览和组织本地和bbs(在线)
游戏卡带。输入SPLORE [enter]启动它,或者用-splore启动PICO-8。

可以使用操纵杆完全控制SPLORE:
左侧和右侧导航游戏卡带列表
向上和向下以选择每个列表中的项目
X,O或MENU启动游戏卡带

在推车内时,按MENU键可以收藏盒式磁带或退出splore。
如果您使用的是键盘,也可以按F键来收藏某个项目
在游戏卡带列表视图中选择它。

查看BBS购物车列表时,请使用顶部列表项重新下载列表
游戏卡带。如果您处于脱机状态,则会显示上次下载的列表
仍然可以播放您下载的任何游戏卡带。

如果您在无法访问Internet的计算机上安装了PICO-8,则也可以
使用INSTALL_GAMES将少量预先安装的BBS推车添加到您的
收藏清单。

:: PICO-8的怪癖

常见的问题需要注意:

-  spritesheet的下半部分和地图的下半部分占用相同的内存。
	//如果你不确定它是如何工作的,最好只使用其中一个。
-  PICO-8数字最多只能达到32767.99。
	//如果你每帧加一个计数器,它会在大约18分钟后溢出!
- 默认情况下,Lua数组基于1,而不是基于0。FOREACH从T [1]开始,而不是T [0]。
-  cos()和sin()取0..1而不是0..PI * 2,并且sin()被反转。
-  sgn(0)返回1。
- 切换全屏:在OSX上使用alt-enter(命令-F用于搜索文本)。
- 如果要导出.png盒式磁带,请使用SAVE,而不是EXPORT。EXPORT将只保存spritesheet!

================================================== ==========================================
编辑模式
================================================== ==========================================

按escape可在控制台和编辑器之间切换
单击右上角的编辑模式选项卡切换或按ALT + LEFT / RIGHT


**警告:精灵表的下半部分(第2和第3组)和下半部分
地图共享相同的磁带空间。这取决于你如何使用数据,但是
请注意,绘制精灵表的后半部分可能会破坏数据
地图反之亦然。

::代码编辑器

按住shift键选择(或用鼠标点击并拖动)
CTRL-X,C,V剪切复制或粘贴选中
CTRL-Z,Y撤消,重做
CTRL-F在当前选项卡中搜索文本
CTRL-G再次重复上次搜索
CTRL-L跳转到行号
CTRL-UP,DOWN跳转到开始或结束
ALT-UP,DOWN导航到上一个,下一个功能
CTRL-LEFT,适合逐字逐句
CTRL-D复制当前行
TAB缩进选择(转换为un-indent)

要输入表示按钮的特殊字符,请使用SHIFT-L,R,U,D,O,X
或者按CTRL-K切换字形模式

::标签

	单击顶部的[+]按钮添加新选项卡。
	通过左键单击或使用ctrl-tab,shift-ctrl-tab导航选项卡。
	要删除最后一个选项卡,请删除所有内容然后将其移开(CTRL-A,del,ctrl-tab)
	运行购物车时,通过按顺序连接所有选项卡生成单个程序。

::代码限制

	当前的代码令牌数量显示在右下角。一个程序可以有一个
	最多8192个代码。每个标记都是一个单词(例如变量名称)或运算符。对
	括号和字符串均计为1个标记。逗号,句号,LOCAL,分号,结束,
	和备注不计算在内。
	
	右键单击以切换其他统计信息(字符数,压缩大小)。
	如果达到限制,警告灯将闪烁。可以通过右键单击禁用此功能。

::精灵编辑器

精灵编辑器设计用于精灵编辑和自由形式 
像素级编辑。屏幕底部的精灵导航器提供8x8智能
查看精灵表,但有可能使用自由形式工具(平移,选择)时
处理较大或较大的区域。

绘图工具
	单击并拖动精灵以绘制像素
	适用于可见区域
	按住CTRL键搜索并替换颜色
	使用鼠标右键选择颜色

邮票工具
	单击以标记复制缓冲区中的任何内容
	保持LCONTROL将颜色0(黑色)视为透明 

选择工具//快捷方式:LSHIFT或S.
	创建一个选择
	输入或单击以选择无。
	
	如果不存在按像素选择,则应用许多操作
	精灵选择。要选择精灵,请在精灵导航器中按住Shift键拖动。

平移工具//快捷方式:空格
	查看spritesheet。

填充工具
	填充当前颜色
	适用于当前选择
	如果没有选择,则适用于可见区域

额外的按键
	CTRL-Z仅在0.2.0中撤消//单步
	CTRL-C复制选定区域或选定的精灵
	CTRL-V粘贴到当前精灵位置
	Q,W切换到上一个/下一个精灵
	1,2切换到上一个/下一个颜色
	使用Tab键切换全屏视图
	鼠标滚轮或<和>缩放(全屏中心)
	

选定区域或选定精灵的操作:
	f翻转
	v垂直翻转
	r要旋转(必须是方形选择)
	要移动的光标键(如果精灵选择则循环)
	
精灵标志
	8个彩色圆圈是当前精灵的精灵标志。
	每个都可以是真(开)或假(关),并可以访问
	使用FSET和FGET功能。它们的索引编号为0,from
	左边(0,1,2..7)。有关更多信息,请参阅fset()。

::地图编辑器

pico-8映射是一个128位32(或128x64,使用共享空间)8位值块。
每个值在编辑器中显示为对精灵(0..255)的引用,但您可以
当然使用数据来表示你喜欢的任何东西。

这些工具类似于精灵编辑模式中使用的工具。选择一个精灵
然后单击并拖动以将值绘制到地图中。	

要绘制多个精灵,请使用shift + drag从精灵导航器中进行选择
要复制值块,请使用选择工具,然后使用工具标记粘贴
要平移地图,请使用平移工具或保留空间
Q,W切换到上一个/下一个精灵
鼠标滚轮或<和>缩放(全屏中心)

:: SFX编辑器

盒式磁带中有64个SFX(“音效”),用于声音和音乐。

每个SFX有32个音符,每个音符有:
	频率(C0..C5)
	乐器(0..7)
	卷(0..7)
	效果(0..7)

每个SFX还具有以下属性:

	播放速度(SPD):播放每个音符的“滴答”数。
		//这意味着1是最快的,3是慢的3倍等。

	循环开始和结束:这是循环返回的音符索引
		//当起始索引> =结束索引时,循环被关闭

编辑/查看SFX有两种模式:音高模式(更合适
用于音效)和跟踪器模式(更适合音乐)。模式
可以使用左上角的按钮更改,也可以使用TAB切换。


1.音高模式

	单击并拖动音高区域以设置每个音符的频率,
	使用当前选定的乐器(用颜色表示)。
	
	按住shift以仅应用所选乐器
	按住CTRL可将输入的音符捕捉到C小调五音阶


2.跟踪模式

	每个音符显示:频率八度仪器音量效果
	要输入注释,请使用q2w3er5t6y7ui zsxdcvgbhnjm(类似钢琴的布局)
	输入音符时保持移位以转换-1倍频程。+ 1个八度音阶
	新注释将给出所选的乐器/效果值
	要删除注释,请使用退格键或将音量设置为0
	
	单击然后按住Shift键单击以选择可以复制的范围
	(CTRL-C)并粘贴(CTRL-V)
	
	导航:
		PAGEUP / DOWN或CTRL-UP / DOWN跳过或关闭4个音符
		HOME / END跳转到第一个或最后一个音符
		CTRL-LEFT / RIGHT跳过列
		
	
3.两种模式的控制

	-  +导航当前的SFX
	<>改变速度。
	空间播放/停止
	SHIFT-SPACE将从当前的SFX季度开始播放(8个音符组)
	A释放循环样本
	左键单击或右键单击以增加/减少SPD或LOOP值
		//单击增加/减少4时保持移位
		//或者,单击并向左/向右或向上/向下拖动
	按住Shift键并单击乐器,效果或音量以应用于所有音符。


::效果

	0无
	1张幻灯片//滑动到下一个音符和音量
	2颤音//在四分之一音调内快速改变音高
	3滴//快速将频率降至非常低的值
	4淡入//从0斜坡上升音量
	5淡出//将音量降低到0
	6琶音快速//以4的速度迭代4个音符组
	7琶音慢//以8的速度迭代4个音符组
	
	如果SFX速度<= 8,则琶音速度减半至2,4

::音乐编辑器

PICO-8中的音乐由一系列“模式”控制。每个模式都是一个列表
4个数字表示将在该频道上播放哪个SFX。


:: 流量控制

	可以使用右上角的3个按钮控制播放流程。

	模式播放完毕后,将播放下一个模式,除非:

	- 没有剩余数据可播放(音乐停止)
	- 在该模式上设置STOP命令(第三个按钮)
	- 设置了LOOP BACK命令(第二个按钮),在这种情况下音乐播放器搜索
		使用LOOP START命令设置(第一个按钮)返回一个模式或返回
		如果没有找到,则为0。

	当图案具有不同速度的SFX时,图案完成播放时
	最左边的非循环频道已经播放完毕。这可以用来设置
	时间签名不分为32,或双倍鼓节拍等。


::在游戏卡带之间或之内复制音乐

	要选择一系列图案:在图案中的第一个图案上单击一次 
	导航器,然后按住Shift键单击最后一个模式。可以复制选定的模式
	并用CTRL-C和CTRL-V粘贴。当粘贴到另一个游戏卡带时,SFX
	每个模式指向的也将被粘贴(可能具有不同的索引) 
	如果它还不存在。


:: SFX仪器

	除了8个内置仪器外,还可以定义定制仪器 
	前8个SFX。使用乐器右侧的切换按钮选择
	index,将在乐器通道中显示为绿色而不是粉红色。

	当播放SFX乐器音符时,它实际上会触发SFX,但会改变 
	笔记的属性:

		相对于C2添加了音高
		成交量倍增
		效果应用于SFX乐器的效果之上

	例如,可以通过定义仪器来实现简单的颤音效果 
	在SFX 0中,在第5和第2卷之间快速交替。使用此仪器时
	为了播放音符,可以像往常一样改变音量(通过音量通道
	或使用淡入/淡出效果)。通过这种方式,SFX仪器可用于控制
	音量,音高和纹理的细微变化组合。

	SFX乐器仅在音高改变时或前一音符时重新触发
	零音量。这对于随时间变化较慢的仪器非常有用。
	例如:钟声逐渐淡出。要反转此行为,请执行3
	(通常是'drop')可以在触发音符时使用。所有其他效果值都有
	它们在触发SFX仪器时的通常含义。	

================================================== ==========================================
Lua Syntax Primer
================================================== ==========================================

PICO-8程序使用Lua语法编写,但不使用标准Lua库。
以下是基本Lua语法的简要概述。

有关更多详细信息,或了解适当的Lua,请访问www.lua.org。

:: 注释

	- 使用这样的两个连字符忽略所有内容,直到行尾
	-  [[多线
	评论 ]]


::类型和赋值

	Lua中的类型是数字,字符串,布尔值和表格;

	NUM = 12/100
	S =“这是一个字符串”
	B =假
	T = {1,2,3}

	PICO-8中的数字都是16:16的固定点。它们的范围从-32768.0到32767.99999
	
	可以使用带有可选小数部分的十六进制表示法:
		0x11  -  17
		0x11.4000  -  17.25

	以十进制写的数字四舍五入到最接近的固定点值。看到了
	32位十六进制表示,使用PRINT(TOSTR(VAL,TRUE)):
	
		?TOSTR(-32768,TRUE) -  0x8000.0000 
		?TOSTR(32767.99999,TRUE) -  0x7fff.ffff
	
	如果为正,则除以零评估为0x7fff.ffff,如果为负,则除以-0x7fff.ffff。 
	

::条件


	IF NOT B THEN
		PRINT("B IS FALSE")
	ELSE
		PRINT("B IS NOT FALSE")
	END

	-- with ELSEIF

	IF X == 0 THEN
		PRINT("X IS 0")
	ELSEIF X < 0 THEN
		PRINT("X IS NEGATIVE")
	ELSEIF X > 0 THEN
		PRINT("X IS POSITIVE")
	ELSE
		PRINT("THIS IS LINE IS NEVER REACHED")
	END

	IF (4 == 4) THEN PRINT("EQUAL") END
	IF (4 ~= 3) THEN PRINT("NOT EQUAL") END
	IF (4 <= 4) THEN PRINT("LESS THAN OR EQUAL") END
	IF (4 > 3) THEN PRINT("MORE THAN") END

::循环

	FOR X=1,5 DO
		PRINT(X)
	END
	-- prints 1,2,3,4,5

	X = 1
	WHILE(X <= 5) DO
		PRINT(X)
		X = X + 1
	END

	FOR X=1,10,3 DO PRINT(X) END   -- 1,4,7,10

	FOR X=5,1,-2 DO PRINT(X) END  -- 5,3,1


::函数和局部变量


	Y=0 
	FUNCTION PLUSONE(X)
		LOCAL Y = X+1
		RETURN Y
	END
	PRINT(PLUSONE(2)) -- 3
	PRINT(Y)          -- 0


::tables

	在Lua中,表是键值对的集合,其中键和值类型都可以 
	混合。它们可以通过用整数索引来用作数组。

	A = {}  - 创建一个空表
	A [1] =“BLAH”
	A [2] = 42
	A [“FOO”] = {1,2,3}

	- 默认情况下,数组使用基于1的索引

	A = {11,12,13,14}
	PRINT(A[2]) -- 12

	- 使用基于顺序的1的整数索引的表的大小:

	PRINT(#A)   -- 4

	- 可以使用点表示法编写作为字符串的索引

	PLAYER = {}
	PLAYER.X = 2 -- is equivalent to PLAYER["X"]
	PLAYER.Y = 3

	- 另请参阅下面api参考中的表格部分。


:: PICO-8速记

	PICO-8还允许使用几种非标准的,更短的方式来编写通用模式。

	1.如果那么END单行上的语句可以在没有THEN&END的情况下表达

	IF (NOT B) I=1 J=2

	- 相当于:IF (NOT B) THEN I=1 J=2 END
	- 所有内容必须写在同一行,条件用括号括起来
	

	一元数学运算符

	a += 2  -- equivalent to: a = a + 2
	a -= 2  -- equivalent to: a = a - 2
	a *= 2  -- equivalent to: a = a * 2
	a /= 2  -- equivalent to: a = a / 2
	a %= 2  -- equivalent to: a = a % 2


	3.!=不等式

	不是速记,但是pico-8也接受!=而不是~=表示“不等于”

================================================== ==========================================
API
================================================== ==========================================

PICO-8基于Lua编程语言,但不包括Lua标准库。
相反,提供小型api以符合PICO-8的最小设计和有限的屏幕
空间。有关使用大多数api函数的示例程序,请参阅/DEMOS/API.P8

函数写在这里:
function_name参数[optional_parameter]

从命令行调用的系统函数可以省略通常的括号和字符串引号:
load blah.p8  - > load(“blah.p8”)

系统

load filename [breadcrumb [param_str]]
save filename

	装入或保存游戏卡带
	
	从正在运行的游戏卡带装入时,装载的游戏卡带立即运行
	参数字符串param_str,并插入一个菜单项并命名为breadcrumb,即
	将用户返回到装入盒式磁带。
	
	以“#”开头的文件名被视为BBS购物车,后跟其ID:
	load(“#1234”) - 下载[并运行]购物车编号1234
	
	如果id是购物车的父帖子,则下载最新版本。
	BBS推车可以从其他BBS推车或本地推车装载,但不能从出口推车装载。 
	
	
folder

	在主机操作系统中打开carts文件夹。

dir(也称为ls)

	列出当前目录中的文件。从正在运行的程序调用时,返回一个列表
	在同一目录中的所有.p8和.p8.png文件。

run

	从程序开始运行
	可以从程序内部调用来重置程序。

stop [message]

	停止购物车并选择打印消息

resume

	从现有购物车状态(flakey)运行

reboot
	
	重新启动机器
	用于启动新项目

info

	打印出有关游戏卡带的一些信息:
	代码大小,令牌,压缩大小
	
	还显示:
	
		未保存的更改当内存中的盒式磁带与磁盘上的盒式磁带不同时
		外部更改磁盘上的磁带已装入后发生更改
			(例如,使用单独的文本编辑器编辑程序)
	
flip

	将后台缓冲区翻转到屏幕并等待下一帧(30fps)
	通常不需要这样做 -  _draw()为你调用它。

	如果您的程序在帧启动之前没有调用flip,并且_draw()回调
	如果没有进行,后台缓冲区的当前内容将复制到屏幕。

printh str [filename] [overwrite]

	将字符串打印到主机操作系统的控制台以进行调试。

	如果设置了filename,则将该字符串附加到主机操作系统上的文件中
		//(在当前目录中 - 使用FOLDER查看)
	将overwrite设置为true会导致该文件被覆盖而不是附加。
	使用文件名“@clip”写入主机的剪贴板。
		//使用stat(4)来读取剪贴板,但剪贴板的内容只是
		//在运行时按CTRL-V后可用(出于安全原因)。

stat x

	获取x为的系统状态:

	0内存使用量(0..2048)
	自上次翻转后使用的1个CPU(1.0 = = 100%CPU,30fps)
	4剪贴板内容(用户按下CTRL-V后)
	6参数字符串
	7当前帧速率
	
	16..19当前在通道0..3上播放SFX的索引
	20..23通道0..3上的音符编号(0..31)
	24目前正在播放模式索引
	25总体模式
	26个哨子在当前模式上播放

	80..85 UTC时间:年,月,日,小时,分钟,秒
	90..95当地时间

	100当前面包屑标签,或零


extcmd x

	特殊系统命令,其中x是一个字符串:
	
		“pause”请求打开暂停菜单
		“reset”请求购物车重置
		“go_back”跟随当前的痕迹(如果有的话)

	作为BBS购物车运行时忽略的其他命令:
	
		“label”设置购物车标签
		“screen”保存截图
		“rec”设置视频起点
		“video”将.gif文件保存到桌面
		“audio_rec”开始录制音频
		“audio_end”将录制的音频保存到桌面

程序结构

定义了3个特殊功能,将会在程序期间调用 
执行:

	_Update()
		每次更新时调用30fps一次

	_draw()
		每个可见帧调用一次
	
	_init()
		在程序启动时调用一次


_draw()通常以30fps调用,但如果无法及时完成,PICO-8将会
尝试以15fps运行并在每个可见帧中调用_update()两次以进行补偿。


::以60fps运行PICO-8

	如果定义了_update60()而不是_update(),则PICO-8将以60fps模式运行:

	- 以60fps调用_update60()和_draw()
	- 每帧可用一半PICO-8 CPU,然后下降到30fps
	
	请注意,并非所有主机都能够以60fps运行。旧机器,
	和/或Web版本也可能要求PICO-8以30 fps(或15 fps)运行,甚至
	当PICO-8 CPU没有超过容量时。在这种情况下,多个_update60调用
	以相同的方式为每个_draw调用。

图像

PICO-8的固定容量为128个8x8精灵,另外128个与精灵重叠
地图数据的下半部分(“共享数据”)。这256个精灵统称为
精灵表,可以被认为是一个128x128像素的图像。

所有PICO-8的绘图操作都受当前绘制状态的影响。绘制状态
包括相机位置(用于向所有坐标添加偏移),调色板映射 
(用于重新着色的精灵),剪裁矩形,绘图颜色和填充图案。

每次运行程序时都会重置绘制状态。这相当于调用:
clip()camera()pal()color(6)

颜色索引:

 0  black   1  dark_blue   2  dark_purple   3  dark_green  
 4  brown   5  dark_gray   6  light_gray    7  white
 8  red     9  orange     10  yellow       11  green       
12  blue   13  indigo     14  pink         15  peach
	

clip[x y w h]

	设置屏幕的剪切区域(以像素为单位)
	clip()重置


pget x y
pset x y [c]

	获取或设置x,y处像素的颜色(c)。


sget xy
sset xy [c]

	获取或设置spritesheet像素的颜色(c)。


fget n [f]
fset n [f] v

	获取或设置精灵标志的值(v)
	f是标志索引0..7
	v是布尔值,可以是true或false

	标志0..7的初始状态可在精灵编辑器中设置,
	使用小彩色按钮线。

	精灵标志的含义取决于用户,或者可以用于
	指示应该通过map绘制精灵的哪个组('layer')。

	如果省略标志索引,则检索/设置所有标志作为位域
	fset(2,1 + 2 + 8) - 设置位0,1和3
	fset(2,4,true) - 设置第4位
	print(fget(2)) -  27(1 + 2 + 8 + 16)


print str [x y [col]]

	打印一个字符串
	如果仅提供str,并且光标到达屏幕的末尾,
	自动应用回车和垂直滚动。
	

cursor x y

	设置光标位置和回车边距


color col

	设置绘图功能使用的默认颜色


cls [col]

	清除屏幕并重置剪切矩形
	

camera [x y]

	为所有绘图操作设置-x,-y的屏幕偏移
	camera()重置


circ x y r [col]
circfill x y r [col]

	在x,y处绘制一个圆或填充圆,半径为r
	如果r为负数,则不绘制圆

line x0 y0 x1 y1 [col]

	画线


rect x0 y0 x1 y1 [col]
rectfill x0 y0 x1 y1 [col]

	绘制一个矩形或填充矩形


pal c0 c1 [p]

	在后续绘制调用中将所有颜色c0的实例绘制为c1

	pal()重置为系统默认值(包括透明度值和填充模式)
	
	两种类型的调色板(p;默认为0)
		0绘制调色板:颜色在绘制时重新映射//例如重新着色精灵
		1个屏幕调色板:颜色在显示屏上重新映射//例如,用于淡入淡出
	c0颜色指数0..15
	要映射到的c1颜色索引


palt c t

	将颜色索引的透明度设置为t(布尔值)
	spr(),sspr()和map()观察透明度
	例如palt(8,true) - 未绘制红色像素
	palt()重置为默认值:除颜色0外,所有颜色都不透明



spr n x y [w h] [flip_x] [flip_y]

	在位置x,y处绘制精灵n(0..255)
	默认情况下,宽度和高度为1,1并指定宽度为blit的精灵数量。
	默认情况下将颜色0绘制为透明(请参阅palt())
	flip_x = true可水平翻转
	flip_y = true垂直翻转


sspr sx sy sw sh dx dy [dw dh] [flip_x] [flip_y]

	从精灵表(sx,sy,sw,sh)拉伸矩形//以像素为单位给出
	并绘制矩形(dx,dy,dw,dh)
	默认情况下将颜色0绘制为透明(请参阅palt())
	dw,dh默认为sw,sh
	flip_x = true可水平翻转
	flip_y = true垂直翻转
	

fillp p

	PICO-8填充图案是一种4x4双色平铺图案,通过以下方式观察:
		circ()circfill()rect()rectfill()pset()line()
	
	p是从最高位开始的读取顺序的位域。计算值
	对于所需模式的p,将位值加在一起:
	
		.-----------------------.
		|32768|16384| 8192| 4096|
		|-----|-----|-----|-----|
		| 2048| 1024| 512 | 256 |
		|-----|-----|-----|-----|
		| 128 |  64 |  32 |  16 |
		|-----|-----|-----|-----|
		|  8  |  4  |  2  |  1  |
		'-----------------------'
	
	例如,FILLP(4+8+64+128+  256+512+4096+8192) 将创建棋盘图案。
	
	这可以用二进制更整齐地表达:FILLP(0b0011001111001100)
	默认填充图案为0,表示绘制单一纯色。
	
	要为图案指定第二种颜色,请使用任何颜色参数的高位:
	
		FILLP(0b0011010101101000)
		CIRCFILL(64,64,20,0x4E) - 棕色和粉红色
	
	可以设置附加位0b0.1以指示未绘制第二种颜色。
	
		FILLP(0b0011001111001100.1) - 带透明方块的棋盘格
	
	也可以通过设置任何颜色参数中的位来设置填充图案:

		POKE(0x5F34,1) - 设置集成的fillpattern +颜色模式
		CIRCFILL(64,64,20,0x114E.ABCD) - 将填充模式设置为ABCD

		- 位0x1000.0000表示应观察非颜色位
		- 位0x0100.0000透明位
		- 位0x00FF.0000是通常的颜色位
		- 位0x0000.FFFF被解释为填充模式


add t v

	将值v添加到表t的末尾。
	相当于t [#t + 1] = v

		FOO={}        -- create empty table
		ADD(FOO, 11)
		ADD(FOO, 22)
		PRINT(FOO[2]) -- 22

del t v

	删除表t中第一个值v的实例
	其余条目向左移动一个索引以避免漏洞。
	请注意,v是要删除的项的值,而不是表中的索引!
	在迭代该表时,可以在表的项上安全地调用del()。

		A={1,10,2,11,3,12}
		FOR ITEM IN ALL(A) DO
			IF (ITEM < 10) THEN DEL(A, ITEM) END
		END
		FOREACH(A, PRINT) -- 10,11,12
		PRINT(A[3])       -- 12


all t

	在FOR循环中用于迭代表中的所有项(具有从1开始的整数索引), 
	按照他们被添加的顺序。
		T = {11,12,13};
		ADD(T,14)
		ADD(T,"HI")
		FOR V IN ALL(T) DO PRINT(V) END -- 11 12 13 14 HI
		PRINT(#T) -- 5


foreach t f

	对于表t中的每个项目,以项目作为单个参数调用函数f。

		FOREACH(T,PRINT)


pairs t

	在FOR循环中用于迭代表t,为每个项提供键和值。
	与all()不同,无论索引方案如何,pairs()都会遍历每个项目。
	订单无法保证。

		T = {["HELLO"]=3, [10]="BLAH"}
		T.BLUE = 5;
		FOR K,V IN PAIRS(T) DO
			PRINT("K: "..K.."  V:"..V)
		END

	Output:
	
		K: 10  v:BLAH
		K: HELLO  v:3
		K: BLUE  v:5

输入

btn [i [p]]

	获取按钮我为玩家p说明(默认为0) 
	i:0..5:向上向左按下button_o button_x
	p:球员指数0..7

	如果未提供参数,则返回播放器0和1的所有12个按钮状态的位域
		// P0:位0..5 P1:位8..13

	默认键盘映射到播放器按钮:
		播放器0:光标,Z,X / C,V / N,M
		播放器1:ESDF,LSHIFT,A / TAB,Q,E


btnp [i [p]]

	btnp是“按下按钮”的缩写; 按住按钮时不是真,
	当按钮关闭时,btnp返回true,并且它不在最后一帧中。它也是
	在15帧之后重复,之后每4帧返回true(以30fps  - 双倍
	在60fp)。这可以用于菜单导航或网格播放器等
	运动。

音频

sfx n [channel [offset [length]]]

	对于长度音符,在音符偏移(0..31)的通道(0..3)上播放sfx n
	n -1停止该频道的声音
	n -2从循环中释放该通道上的声音
	通道上播放的任何音乐都将停止播放
	音符数量的偏移量(0..31)
	
	通道-1(默认)自动选择未使用的通道
	通道-2可以阻止声音在任何频道播放

	
music [n [fade_len [channel_mask]]]

	从模式n开始播放音乐(0..63)
	n -1停止音乐
	以ms为单位的fade_len(默认值:0)
	channel_mask指定仅为音乐保留的通道
		例如,在频道0..2:1 + 2 + 4 = 7上播放
	
	保留的频道仍可用于播放音效,但仅限于此时
	sfx()显式请求通道索引。

地图

PICO-8映射是8位像素的128x32网格,或者使用共享内存时为128x64。什么时候
使用地图编辑器,每个cel的含义被视为spritesheet的索引 
(0..255)。但是,它可以替代地用作一般数据块。


mget xy
mset xyv

	在x,y处获取或设置映射值(v)

map cel_x cel_y sx sy cel_w cel_h [layer]

	在屏幕位置sx,sy(像素)绘制地图部分(以cels为单位)
	如果指定了图层,则仅绘制具有相同标记编号的cels
		//比特菲尔德 因此0x5表示绘制精灵,位0和位2设置。
		//默认为所有精灵

	异常:精灵0总是被认为是空的。

	例如地图(0,0,20,20,4,2)
	- >从地图中的0,0开始绘制4x2块的cels到20,20的屏幕
	
	如果未指定cel_w和cel_h,则默认为128,32 
	(地图的上半部分 - 使用128,64作为完整地图,包括共享内存)

内存

PICO-8有3种类型的存储器:

	1.基本RAM(32k):见下面的布局。使用peek()访问poke()memcpy()memset()
	2. Cart ROM(32k):与基本ram相同的布局,直到0x4300
	3. Lua RAM(2MB):编译程序+变量

	技术说明://您可能不需要知道这一点
	
		在使用编辑器时,正在修改的数据在购物车中,但api函数如spr() 
		和sfx()只在基础ram上运行。PICO-8自动将购物车复制到底座(即
		在3种情况下调用reload()):

		1.装入游戏卡带时
		2.游戏卡带运行时
		3.退出任何编辑器模式时


:: Base ram内存布局
	0x0 gfx
	0x1000 gfx2 / map2(共享)
	0x2000地图
	0x3000 gfx_props
	0x3100首歌曲
	0x3200 sfx
	0x4300用户数据
	0x5e00持久购物车数据(256字节)
	0x5f00绘制状态
	0x5f40硬件状态
	0x5f80 gpio引脚(128字节)
	0x6000屏幕(8k)

	用户数据没有特别的意义,可以通过memcpy(),peek()和poke()用于任何事情。
	持久购物车数据映射到0x5e00..0x5eff,但仅在调用cartdata()时才存储。
	颜色格式(gfx /屏幕)是每字节2个像素:低位编码每对的左像素。
	映射格式是每个cel一个字节,其中每个字节通常编码精灵索引。


peek addr
poke addr val

	读写一个字节到base ram中的地址。
	合法地址为0x0..0x7fff
	读出范围会返回0
	写出超出范围会导致故障
	
peek4 addr
poke4 addr val

	32位版本。以little-endian格式读写一个数字(val)。
	addr不需要与4字节边界对齐。

memcpy dest_addr source_addr len

	将基本ram的len个字节从源复制到dest
	部分可以重叠

reload dest_addr source_addr len [filename]

	与memcpy相同,但是来自购物车rom的副本
	代码部分(> = 0x4300)受到保护,无法读取。
	如果指定了filename,则从其他盒式磁带加载数据。
		//(必须是本地的 - 以这种方式无法读取bbs磁带)

cstore dest_addr source_addr len [filename]

	与memcpy相同,但从base ram复制到cart rom
	cstore()等效于cstore(0,0,0x4300)
	可用于编写工具来构建推车或可视化状态 
	使用地图编辑器/ gfx编辑器的地图/ spritesheet。
	代码部分(> = 0x4300)受保护且无法写入。
	
	如果指定了文件名,则将数据直接写入该文件名
	游戏卡带上的磁带。一次会话中最多可以写入64个磁带。
	有关使用cstore的其他说明,请参阅“盒式磁带数据”部分。
	
	
memset dest_addr val len

	将len个字节设置为val
	(非常快 - 可用于绘制未剪切的水平扫描线等)

数学

max x y
min x y
mid x y z

	返回参数的最大值,最小值或中间值
	例如,mid(7,5,10)返回7

flr x
ceil x

	返回等于或低于/高于x的最接近的整数 
	
	?flr(4.1) - > 4
	?ceil(4.1) - > 5
	?flr(-2.3) - > -3
	?ceil(-2.3) - > -2


cos x
sin x

	返回x的余弦,其中1.0表示整圆
	sin被反转以适应屏幕空间
	例如sin(0.25)返回-1

	如果你更喜欢没有y反转的基于弧度的trig功能, 
	将以下代码段粘贴到程序开头附近:

	cos1 = cos函数cos(角度)返回cos1(角度/(3.1415 * 2))结束
	sin1 = sin函数sin(角度)返回sin1(-angle /(3.1415 * 2))end


atan2 dx dy

	将dx,dy转换为0..1的角度
	与cos / sin一样,角度在屏幕空间中逆时针运行
	例如,atan(1,-1)返回0.125

sqrt x

	返回x的平方根

abs x

	返回x的绝对(正)值

rnd x
	返回随机数n,其中0 <= n <x
	如果你想要一个整数,请使用flr(rnd(x))

srand x
	设置随机数种子
	种子在购物车启动时自动随机化


二元操作

	band x y
	bor  x y
	bxor x y
	bnot x
	rotl x y
	rotr x y
	shl x n  - 向左移位n位
	shr x n  - 算术右移
	lshr x n  - 逻辑右移

自定义菜单项

menuitem索引[标签回调]

	在暂停菜单中添加一个额外的项目

	索引应为1..5并确定每个菜单项的显示顺序
	label应该是一个长度不超过16个字符的字符串
	回调是在用户选择项目时调用的函数

	如果未提供标签或功能,则会删除菜单项

	例:
	menuitem(1, "restart puzzle", function() reset_puzzle() sfx(10) end

字符串

s =“快速的棕色狐狸”

-  长度

	print(#s) - > 19


- 加入字符串
	
	打印(“三”..4) - >“三四”


-  sub()抓取子串

	print(sub(s,5,9)) - >“quick”
	print(sub(s,5)) - >“quick brown fox”

类型

type val

	将值x的类型的名称作为字符串返回

tostr val [hex]

	将val作为字符串返回
	
	如果十六进制为真且val为数字,则为无符号十六进制写入 
	该数字以“0x0000.0000”格式返回。你可以用这个来
	检查PICO-8数字的内部表示。
	
	如果val是布尔值,则写为“true”或“false”
	
	所有其他val类型都写为“[typename]”
	
tonum val

	将val转换为数字
	如果val是一个字符串,除非前缀为“0x”,否则该数字将被视为十进制
	如果转换失败,则tonum不返回任何值。

游戏卡带数据

使用cartdata(),dset()和dget(),64个数字(256字节)的持久数据 
可以存储在用户的PICO-8上,在卸载购物车后仍然存在
PICO-8已关闭。这可以用作存储事物的轻量级方式
高分或保存球员进度。它还可用于跨数据共享
游戏卡带/游戏卡带版本。

如果您需要超过256个字节,也可以直接写入
使用cstore()的盒式磁带。缺点是数据与此相关
特定版本的游戏卡带。例如,如果游戏更新,玩家将会
失去他们的存档。此外,游戏卡带的数据部分中有一些空间
需要保持可用。

另一种方法是通过指定直接写入第二个盒式磁带
cstore()的第四个参数。这需要推车交换(实际上
仅表示用户需要观看1小时的spinny购物车动画。

	CSTORE(0,0,0x2000,“spritesheet.p8”)
	- 稍后:
	RELOAD(0,0,0x2000,“spritesheet.p8”) - 恢复保存的数据


cartdata id

	cartdata()打开一个由id索引的永久数据存储槽,即可
	用于存储和检索最多256个字节(64个数字)的数据 
	DSET()和DGET()。
	
		CARTDATA(“zep_dark_forest”) - 每个会话只能设置一次
		- 后来的节目..
		DSET(0,得分)
	
	id是一个长达64个字符的字符串,应该足够常见 
	其他游戏卡带不小心使用相同的ID。

	例如cartdata(“zep_jelpi”)

	合法字符是a..z,0..9和下划线(_)

	如果加载了数据则返回true,否则返回false

	每个游戏卡带执行不能多次调用cartdata。

	一旦设置了cartdata id,就会映射内存区域0x5e00..0x5eff 
	永久存储,可以直接访问或通过dget / dset访问。


dget index

	获取存储在索引处的数字(0..63)
	只有在调用cartdata()后才能使用此选项

dset index value

	设置存储在索引处的数字(0..63)
	只有在调用cartdata()后才能使用此选项

	无需刷新书面数据 - 它是自动的
	即使直接使用POKE(),也会保存到永久存储器中。

GPIO

GPIO代表“通用输入输出”,允许机器与之通信 
彼此。PICO-8将0x5f80..0x5fff范围内的字节映射到可以的gpio引脚
poke()ed(输出一个值 - 例如使LED亮起)或peek()ed(例如读取
开关的状态)。

GPIO对于不同的主机平台意味着不同的东西:

芯片:0x5f80..0x5f87映射到xio-p0..xio-p7
Pocket CHIP:0x5f82..0x5f87映射到GPIO1..GPIO6
	// xio-p0&p1暴露在外壳内的原型区域内。
Raspberry Pi:0x5f80..0x5f8f映射到wiringPi引脚0..7
	//请参阅http://wiringpi.com/pins/了解不同型号的映射

CHIP和Raspberry Pi值均为数字:0(低)和255(高)

请注意,要访问gpio引脚,您可能需要以root身份运行pico8: 

sudo pico8

一个简单的程序,用于闪烁连接和关闭的任何LED:

t = 0
function _draw()
 cls(5)
 for i=0,7 do
  val = 0
  if (t % 2 < 1) val = 255
  poke(0x5f80 + i, val)
  circfill(20+i*12,64,4,val/11)
 end
 t += 0.1
end

:: HTML

以HTML / .js格式导出​​的游戏卡带使用全局整数数组(pico8_gpio)来表示 
代表gpio引脚。shell HTML应该定义数组:

var pico8_gpio = Array(128);

鼠标和键盘输入

//实验!html实现仍然有限且有缺陷。

通过启用devkit输入模式可以实现鼠标和键盘输入:

POKE(0x5F2D,1)

请注意,并非所有PICO-8都附带键盘或鼠标,因此在发布时
推特到Lexaloffle BBS,鼓励他们进行键盘和/或鼠标控制 
如果可能,默认情况下可选和关闭。启用devkit输入模式时,会显示一条消息
显示给BBS用户警告他们该程序期望输入超出 
标准的6键控制器。

可以在stat(x)中找到鼠标和键盘的状态:

STAT(30) - (布尔值)键时为真
STAT(31) - 键盘返回的(字符串)字符
STAT(32) - 鼠标X.
STAT(33) - 鼠标Y.
STAT(34) - 鼠标按钮(位域)
STAT(36) - 鼠标滚轮事件

额外的Lua功能

PICO-8还为高级用户公开了Lua的2个功能:Metatables和Coroutines。

有关更多信息,请参阅Lua 5.2手册。

:: Metatables

	Metatables可用于定义特定操作下对象的行为。
	例如,要使用表来表示可以一起添加的2D矢量, 
	通过为metatable定义“__add”函数来重新定义'+'运算符:

		vec2d={
		 __add=function(a,b) 
		 	return {x=(a.x+b.x), y=(a.y+b.y)} 
		 end
		}
	
		v1={x=2,y=9} setmetatable(v1, vec2d)
		v2={x=1,y=5} setmetatable(v2, vec2d)
		v3 = v1+v2
		print(v3.x..","..v3.y) -- 3,14


	setmetatable t,m

		将表格设置为m
	
	getmetatable t
	
		返回表t的当前metatable,如果没有设置则返回nil

:: Coroutines

	协同程序提供了一种在某种程度上同时运行程序的不同部分的方法 
	方式,类似于线程。一个函数可以称为协同程序,暂停使用
	yield()任意次数,然后在同一点再次恢复。
	
		function hey()
			print("doing something")
			yield()
			print("doing the next thing")
			yield()
			print("finished")
		end
		
		c = cocreate(hey)
		for i=1,3 do coresume(c) end
	
	
	cocreate f
	
		为函数f创建一个协同程序。
		
	coresume c [p0 p1 ..]
	
		运行或继续协程c。参数p0,p1 ..传递给
		协程的功能。
		
		如果协程完成没有任何错误,则返回true
		如果有错误,则返回false,error_message。
		
		**协同程序内发生的运行时错误不会导致程序
		停止运行 将coresume()包装在assert()中是个好主意。
		如果断言失败,它将打印生成的错误消息 
		coresume。
		
		断言(coresume(c))的


	costatus c
	
		将coroutine c的状态作为字符串返回:
			“跑”
			“暂停”
			“死”
	
	yield
		
		暂停执行并返回给调用者。

版本历史

v0.1.11g
	
	补充:CTRL-C复制命令行的内容
	添加:stat(100..102)用于当前面包屑标签,bbs购物车ID和主机名(web)
	在config.txt中添加了:content_filter
	补充:Cartverse购物车ID支持(虽然不是实时服务器端)
	修复:鼠标悬停时不显示标签预览
	修复:无法将大写字符粘贴到命令行中
	修复:预处理器无法处理格式:“♥.x + = 1”
	修复:未设置文件名时,有时会报告未保存的更改
	修复:暂停菜单无法在_draw中的无限循环内打开
	修复:当“参数字符串”参数不是字符串时,load()崩溃
	修复:当外部购物车文件名不是字符串时,cstore(),reload()崩溃
	修复:对str中的字形字符,printh(str,“@ clip”)失败


v0.1.11f

	修复:暂停菜单无法在无限循环内打开
	修正:0xffff.ffff之外的二进制和十六进制字符串数字会改变结果


v0.1.11e

	补充:devkit键盘输入的stat(30..31)
	补充:extcmd(“pause”)extcmd(“reset”)extcmd(“breadcrumb”)
	补充:lshr(),ceil(),rotl(),rotr(),peek4(),poke4()
	添加:stat(12..15)来获取暂停菜单的位置(x0,y0,y1,y1)
	补充:DPAD游戏控制器按钮映射到LRUD
	添加:CTRL-单击歌曲导航器以滚动4种模式
	补充:可以在命令行中输入和粘贴字形
	添加:由于未保存的更改而导致CTRL-R无法重新加载时发出通知
	补充:代码自动转换为小写时的通知
	补充:INFO()检查“外部变化”(例如,当使用单独的文本编辑器时)
	补充:.p8.png格式可以与cuart()和捆绑在multicart中的购物车一起使用
	补充:可以选择使用颜色参数设置填充图案 
	已更改:字形可用作变量名称
	已更改:存储在剪贴板和.p8格式中的字形为粗略对应的unicode
	更改:.p8格式跳过存储与默认状态匹配的拖尾数据行
	更改/修正:当n> = 32时,shr(x,n)现在相当于调用shr(x,1)n次
	修复:错误消息和堆栈跟踪行号0或稍微退出
	修复:未封闭的块错误导航光标到<eof>而不是块的开始
	修复:导出的二进制文件可以在bundle之外加载cart
	已修复:从本地购物车加载的BBS购物车在上次运行期间丢失了数据cstore()
	修正:btn()返回与btnp()相同
	修正:btnp(6)总是返回false
	修复:购物车下载动画帧中缺少蒙版像素
	修复:尝试将目录作为购物车加载时崩溃
	修复:有时在代码编辑器中通过键盘鼠标仿真设置光标位置
	
	
v0.1.11d

	补充:t()别名为time()
	修复:没有_update函数时,time()始终返回0
	修复:( raspi)键盘按CTRL-F,CTRL-Z后停止响应
	修正:( raspi)输入音符时声音编辑器中的双按键
	修正:stat(6)填充带空格的参数字符串


v0.1.11c
	
	补充:使用stat()的本地和UT时间查询
	添加:host_framerate_control(config.txt)以提高较慢的计算机和Web上的性能 
	补充:在后台运行时控制CPU使用率(-background_sleep_ms / config.txt)
	补充:导出的exe中的Windows图标
	补充:F11切换全屏
	补充:导出-c开关以指示透明图标颜色 
	补充:show_backup_messages(config.txt)关闭备份通知
	补充:pico8.txt中的SFX仪器文档
	添加:尝试导出代码大小超过压缩限制的购物车时出现错误消息
	已更改:如果未找到config.txt,则搜索与可执行文件相同的目录
	更改:如果sdl_controllers.txt与可执行文件存在于同一目录中,则首先处理它
	更改:速记if()语句必须写在一行上
	修复:导出的html multicart中来自捆绑的非主要购物车的reload()仅读取原始数据
	修复:导出的二进制文件错误地观察F7(捕获标签)
	已修复:从早期版本加载购物车会更改不适用于音频的SFX数据
	修复:pico8.txt末尾附近的旧版填充模式文档
	修复:在运行时为cstored()购物车显示的“备份未保存的更改”消息
	修复:PICO-8在后台运行速度太慢(新默认background_sleep_ms:20)
	修复:从导出的二进制文件中保存屏幕截图和视频的名称为0_ *
	已修复:保存时压缩的大小限制警告未提及导出的购物车
	修正:btn(),btnp()在无限循环中不起作用
	修正:btnp()在帧跳过期间30fps / 60fps /之间的时间不一致/没有_update
	修正:音乐在歌曲模式下播放时,无法在频道之间移动


v0.1.11b

	修复:预处理器错误回归:“if(..)或”,“ab  -  = c  -  d”
	修复:在空白收藏夹列表上按菜单按钮时崩溃


0.1.11
	
	补充:二进制出口商(Windows,Linux,Mac OSX)
	补充:代码选项卡
	补充:Splore购物车菜单
	补充:填充图案
	补充:自定义sfx乐器
	添加:加载(“#1234”)加载[并运行] BBS购物车
	补充:-x开关//执行无头车,用于制作命令行工具
	新增:代码编辑器中的压缩大小显示和限制警告灯
	补充:CTRL-L跳转到代码编辑器中的行号
	补充:数字可以用二进制编写:0b10100010 
	补充:tostr(),tonum()
	补充:extcmd():audio_rec,audio_end记录所有音频输出。
	补充:ls()返回运行时调用的本地文件列表
	补充:getmetatable()
	补充:协程错误报告//在assert()中包装coresume()
	补充:sfx()可以取第4个参数:要播放的音符数
	补充:实时sfx和音乐编辑+更好的导航控制
	添加:通过输入保留SHIFT的音符,转移相对于C的所选sfx音符
	补充:使用enter和backspace插入和删除sfx行
	补充:隐藏的音符数据在相关时显示在sfx编辑器中(幻灯片,arps)
	添加:备份未保存的更改时显示警告
	补充:单独动画下载与加载购物车
	补充:export -p开关提供自定义的html模板 
	添加:启用devkit鼠标时鼠标滚轮:stat(36)// web不支持
	补充:<>更改gfx和地图编辑器中的缩放级别
	更改:重新平衡/固定的api cpu成本
	已更改:基于当前购物车的屏幕截图和gif文件名(如果有)
	更改:ad​​d()返回添加的对象
	更改:删除了音频上的全局hpf
	更改:(sfx)可以滑动到第0卷
	更改:删除主低通滤波器
	更改:assert()可以使用可选的error_message参数
	改变了:?(print()的简写)可以用空格作为前缀
	更改:shl(),shr()如果第二个参数> = 32则返回0
	已更改:如果opengl失败,则自动下拉到软件blitting模式
	更改:Lua内存限制设置为2MB(1MB)
	已更改:某些选项(-width,-show_fps)仅适用于会话; 没有保存到config.txt
	更新:SDL_GameControllerDB的内部游戏控制器映射
	修正:在播放SFX之间切换时弹出和点击音频
	修正:由于锁定不良导致音频混音器崩溃
	修复:加载超过64k代码的.p8文件时崩溃
	修复:删除n / 2个元素后,稀疏表的索引失败
	修复:在无限循环内调用stat()崩溃
	已修复:重置盒式磁带会破坏盒式磁带数据,范围为0x5e00..0x5eff
	修复:无法从重置时由毛刺数据引起的购物车错误中恢复 
	修正:字符串 - >负数转换关闭0x0.0001(-1  - > 0xffff0001)
	修正:当运行购物车关闭到64k char限制时崩溃
	修复:光标无法移动到代码编辑器中最后一个字符的右侧
	修复:缺少突出显示的关键字:in,add,del,menuitem
	修正:预处理程序错误:“a + = 1 + 2 \ n * 3”,“a + =(1)ba = 42”,“a [(1)] + = 1”
	修复:预处理器在打印的字符串内执行替换?
	修复:终止以> 100%cpu运行的程序时显示冻结
	修复:快速运行(CTRL-R)clobbers一些编辑器状态(例如当前精灵页面)
	修复:加载带有未来版本的.p8文件会报告一般性故障
	修正:alt-enter切换全屏也会触发暂停菜单
	修复:当列表变得太长时,Splore滚动会跳转


v0.1.10c

	修正:atan翻转符号表示x非常负值接近零


v0.1.10b
	修复:HTML导出器推车无法运行
	修复:HTML导出60fps支持破解
	修复:路径中有空格时的HTML导出(OSX常用)
	修正:atan2忽略y的符号
	修复:( Raspberry Pi)访问gpio时不会以root身份崩溃
	

v0.1.10

	补充:html中的多推车导出
	补充:购物车重置故障
	补充:演示推车:弹跳,排序
	补充:.p8格式现在可以存储购物车标签
	补充:Splore导航键:pageup / down,home,end
	补充:Splore使用提示显示在空的收藏夹列表中
	添加:数据文件夹为只读或无法创建时启动时出现警告
	添加:选择代码的按下选项卡缩进这些行(shift-tab为un-indent)
	添加:双击单词将其选中
	补充:从程序内部触发截屏/视频/标签捕获:extcmd()
	更改:代码编辑器中的CTRL +左/右跳到单词或非空格的跨度
	已更改:当购物车终止于splore时,需要按下按钮才能继续
	更改:load(“@ clip”)只能从命令行调用(安全性)
	修复:如果在一帧内超过主机内存,则可以过度分配主机内存
	修复:atan2(-1,-32768)崩溃,dy值小的错误
	修复:(Web)在自身上使用cstore()导致无法加载的购物车(0.1.8中引入的错误?)
	修正:(网页)按ctrl-v会崩溃播放器(应该什么也不做)
	修复:(Raspberry Pi)静态构建所需的WiringPi库
	修复:( Raspberry Pi)通过桌面图标启动时退出时崩溃
	修正:( Raspberry Pi)键盘输入损坏(在raspi2s上观察)


v0.1.9b

	补充:替代功能键映射:ctrl-6..9用于F6..F9
	补充:替代字形输入法:(ctrl -k)切换字形模式
	已更改:使用shift a..z输入字形,但可以在config.txt中禁用 
	更改:将emscripten ram增加到128MB(某些推车有可能耗尽)
	修正:窗口尺寸微小或缩小时崩溃
	修复:切换全屏模式时崩溃
	修复:printh可以在filetree之外写入文件(安全问题)
	修正:show_fps(现在也可以用ctrl-1切换)
	修复:使用表单时的速记if / then语法错误:(functionname)(param)
	修复:log.txt未保存在-home开关指定的路径中
	修复:即使指定了-home,也会创建默认应用程序数据文件夹
	修复:缺少来自linux档案的动态构建(pico8_dyn)
	修复:从linux二进制文件中删除了不需要的RPATH
	修复:导出foo%d.wav无法写入多个文件 

v0.1.9

	补充:将精灵和整个游戏卡带直接复制并粘贴到BBS帖子 
	补充:splore中的JAM类别
	补充:对Raspberry Pi的GPIO支持
	补充:用户按下CTRL-V后,使用stat(4)读取剪贴板
	补充:printh()可以选择写入文件或主机剪贴板
	补充:鼠标悬停时显示的编辑器工具信息和提示
	补充:使用-desktop设置桌面路径(此处保存屏幕截图和GIF)
	补充:当压缩代码大小超过.p8.png限制时,保存.p8时出现警告
	补充:替代编辑器颜色// config.txt:gui_theme 1
	补充:歌曲视图中每8行有一条虚线
	补充:-screenshot_scale(默认值:3)和-gif_scale(默认值:2)
	补充:可以使用ctrl-up,ctrl-down跳转到代码的开始和结束
	补充:CTRL-M静音/取消静音
	补充:HTML5导出的购物车支持60fps
	补充:splore下载的超时开关:-timeout
	已更改:使用alt + a..z键入的字形字符 
	已更改:stat(0)不包括等待垃圾回收的分配
	更改:默认情况下,未过滤的屏幕在整数刻度上拉伸
	更改:删除-aspect和-scale设置(改为使用draw_rect)
	修复:-home在Windows下无效
	修复:有时跳帧在CPU使用率达到100%之前开始
	修正:60fps模式下的双速BTNP()定时
	修复:使用_update60而不是_update时,导出的HTML失败
	修复:无法复制和粘贴按钮字形
	已修复:包含字形的行不会水平滚动得足够远 
	修复:加载.p8从splore冻结重命名为.p8.png
	修复:地图中的Bucketfill不会同步到共享内存
	修复:取消设置标志时fset失败
	修复:以表格开头时出现语法错误:IF(..)[OR | AND] \ n  
	修复:cls()的成本是它应该的两倍
	修复:wav文件导出器缺少一些数据/写截断缓冲区
	修正:在歌曲视图中输入新音符不会观察当前音量,乐器
	修复:alt-tab有时会生成alt字符文本输入事件
	修复:在splore中恢复取消下载会导致崩溃
	修复:log.txt中的控制器属性始终显示为-1	
	
	
v0.1.8

	补充:60fps支持
	补充:音乐出口商
	补充:自定义GIF长度(最长120秒)
	补充: - ,+导航精灵标签,sfx,音乐模式
	补充:sfx编辑器:使用home,end,pageup / down,mousewheel导航
	添加:<,>修改sfx速度,或单击并拖动
	补充:鼠标中键可以平移spritesheet / map
	补充:splore的快捷命令:S
	补充:预先安装的BBS购物车选择(使用INSTALL_GAMES)
	添加:保存.p8.png时没有标签的警告 
	补充:(OSX)记录到~/ Library / Logs(可通过Console.app查看)
	补充:-pixel_perfect开关(默认情况下已启用)
	补充:-draw_rect开关
	更改:无法CTRL-S保存在已加载的bbs购物车上
	更改:仅由dir()和splore列出的.p8文件
	已更改:命令历史记录增加到256
	更改:exit()/ shutdown()在运行购物车时无效
	修复:主机平台上的内存使用情况(stat(0))不一致
	修复:Spinny磁盘显示何时使用load()重新加载当前购物车
	修复:GIF保护程序不支持64x64 /镜像模式
	修复:其他多行注释/字符串问题
	修复:mapdraw()中的空地图cels花费cpu
	修正:绘制地图下半部分时,mapdraw()减速
	修复:当+ =和:运算符在同一行时,预处理会更改语义
	已修复:以下划线开头的标识符计为额外令牌
	修复:保存超过压缩代码限制的.png无效
	修复:右键单击精灵不会设置当前编辑的精灵
	修复:( Windows)添加到粘贴线的额外空间
	修复:使用低负坐标绘制时,spr()很昂贵
	修复:管道字符与冒号字符相同
	修复:( Raspberry Pi)shift键在输入文本时附加一个字符
	已修复:在购物车运行期间,编辑器模式按钮仍可单击
	修复:加载.p8.png文件时,标签重置,需要重新捕获
	修复:export()不报告失败
	修复:mset()'在共享内存中的更改不能通过peek()/ sget()读取
	修复:cstore()保存已编辑的代码
	修复:音乐播放过程中音频在模式之间弹出

v0.1.7

	补充:menuitem()
	补充:代码中的按钮字形(shift-L,R,U,D,X,O)
	补充:可定制的数据目录(例如pico8-home mydata)
	补充:Web gpio引脚:在javscript中读写pico8_gpio [] 
	修复:SPLORE搜索未重置
	修复:Splore在加载更多物品后跳过第33个购物车列表
	修复:在splore中选择本地二进制文件时崩溃
	修复:分号不能用作列表或语句分隔符 
	修正:导出的html无法自助cstore


v0.1.6

	补充:SPLORE local&bbs cartridge explorer
	补充:setmetatable(),cocreate(),coresume(),costatus(),yield()
	添加:旋转购物车图标,以显示何时交换/写入购物车
	补充:购物车在浏览器中播放时的永久存储空间
	补充:可调整的宽高比( -  1:1时为420)
	更改:Lua内存限制:1024k(512k)
	改变:音乐频道现在在被sfx击败后重新开始 
	更改:当SFX速度<= 8时琶音加倍速度
	已更改:超出压缩代码限制不会阻止以.p8格式保存 
	更改:spr()一半贵,与map()一致
	更改:小数十六进制数表示法:0x0.3 == 0x0.3000,(是0x0.0003)
	更改::操作符不算作额外令牌(与。相同)
	已更改:cstore()直接写入磁盘
	更改:cstore(),reload()返回读/写的字节数
	更改:运行时save()不执行任何操作。(改用cstore())
	更改:在运行加载时load()并运行指定的盒式磁带 
	修正:由声波不连续引起的音频混音器中的小弹出声
	修正:HTML5导出的声音在Chrome下严重点击
	修复:导出GIF时不显示显示调色板
	修复:快速按键会导致跟踪器和文本编辑器中出现重复读数
	修正:+ =内部注释中断预处理器
	修复:sspr()cpu在剪裁时花费相同
	修复:带有错误参数的cartdata()崩溃
	修复:如果没有括号和引号,则无法使用命令行导出
	

v0.1.5

	补充:Raspberry Pi Build
	新增:播放器按钮的键盘配置(KEYCONFIG) 
	补充:音乐追踪器选择/复制/粘贴
	补充:音频工具中的单级撤消
	补充:在声音编辑器中实时预览频率
	修复:命令历史记录延伸到上次重启后
	修正:Sfx出口商破产
	修复:路径末端的斜杠解析为双斜线
	修复:在Windows下从命令行加载购物车
	

v0.1.4d
v0.1.4c

	修正:插入额外字符的国际字符输入
	已修复:带有标签的行具有损坏的光标位置和显示边界

v0.1.4b

	修复:OSX命令键组合损坏
	
v0.1.4
	
	补充:spritesheet导入和导出导入(“blah.png”),导出(“blah.png”)
	补充:sfx导出导出(“blah%d.wav”)
	补充:reload()和cstore()的外部盒式参数
	补充:持久的盒式磁带数据映射到0x5e00
	添加:单击标记限制以切换标记和字符限制显示
	补充:assert(),type()
	补充:P暂停
	更改:代码字符限制:64k(32k)
	更改:本地声明和分号不计为令牌
	已更改:成对的括号和块定界计为一个标记
	已更改:只需要存在_update()或_draw()即可进入主循环
	已更改:允许在代码编辑器中使用正斜杠
	已更改:info()报告当前(上次加载或保存)的文件名
	更改:使用NO_DYNAMIC_EXECUTION编译的html5版本 
	已更改:在一个会话中最多只能存储64个不同的文件
	更改:load()自动将购物车的数据部分复制到基础ram
	修复:Shift-drag-copy sprite  - >仅粘贴1x1
	修正:“..”应算作一个标记
	修正:跟踪器显示D而不是。
	修正:多行注释
	修复:代码接近char限制时运行崩溃
	修正:当超过令牌限制时,无法运行任何命令
	修复:SFX部分中未使用的高位未保存为.p8格式
	修正:摄像机位置内存映射不同步
	修复:在Windows安装程序中断了pico8.txt链接
	修复:当参数不是字符串或数字时,print()崩溃
	修复:多行字符串和转义字符弄乱了tokenizer和print()
	修正:当左手杆向左移动时,操纵杆无响应
	修复:Alt-F4在退出前保存屏幕截图
	修正:精灵编辑器模式按钮不显示全屏模式
	修复:-sound参数在html5版本中不起作用 
	
	
v0.1.3

	补充:粘贴到命令行
	修复:lua标准库可访问
	修复:命令行加载不起作用
	修正:当所有曲目设置为循环时,音乐模式过早完成 
	修复:在sfx地址空间屏蔽第7位中查看()奇数字节
	修复:cstore和从代码空间重新加载应该没有效果

v0.1.2

	补充:html5游戏卡带出口商
	补充:游戏卡带保存数据(64个定点数)
	补充:8人输入
	补充:演示推车:COLLIDE和BUTTERFLY
	补充:命令行参数//加载购物车,运行,设置
	补充:替代功能键(F6..F9别名为F1..F4)
	补充:对()
	补充:printh()用于调试
	添加:控制台中文件名的Tab键完成
	补充:运行时错误的堆栈跟踪
	更改:音乐模式长度被视为第一个非循环频道的长度
	更改:噪音仪器(6)具有按音量缩放的低频白噪声
	更改:屏幕截图以显示分辨率捕获整个窗口内容
	更改:del()将剩余项目向上移动一个索引以维护打包表
	更改:ad​​d(),del(),count(),all()不再存储额外字段
	更改:从文档中删除了count() - 现在只是一个遗留函数。请改用#运算符。
	已更改:光标仅在窗口处于活动状态时闪烁
	更改:peek(),poke()和二进制操作(band()..)没有函数调用开销
	改变:黄色略微温暖
	已更改:在地图模式下平移后没有相机捕捉
	修复:sqrt()崩溃为0或> = 32761
	修正:文本编辑器中的分号字符
	修复:以.p8格式保存时长线分割 
	修正:pget()不尊重相机位置
	修复:在合法地址空间外偷看或戳戳时出现错误信息
	修复:搜索替换颜色填充所选区域之外的一个像素
	修复:播放空音乐模式会中断后续音乐播放
	修复:启动时无效的sfx编辑状态
	修正:频率视图中的绘画工具值也设置了音量
	修正:GIF录制速度不一致
	修复:未映射的操纵杆支持
	修复:压缩代码大小有时大于未压缩
	修复:当第一个参数不是最小时,mid()失败
	修复:滚轮在代码编辑器中更改精灵/地图缩放
	修复:CTRL-R(快速运行)在命令模式下绘制当前行
	修复:标签捕获(F7)不符合屏幕调色板状态
	修复:api函数和十六进制数字的语法高亮显示
	修正:循环为0,负步骤结束为1
	修正:nil值打印为false而不是nil
	修正:十六进制小数部分
	修复:跳过帧时btnp()无响应
	修复:使用ctrl-r运行时编辑模式丢失
	修正:跟踪器注释键入映射,弄乱钢琴般的布局
	修复:在某些编辑器操作后,共享的gfx / map内存不同步
	修复:Alt-gr字符输入
	修复:可以使用poke()将显示调色板映射到> = 16的条目
	修正:使用shift在代码编辑器中选择有错误的选择范围
	修复:拖动文本顶部会导致选择翻转结束
	修正:文件列表末尾复制
	
	
v0.1.1

	补充:基于令牌的代码限制(8192令牌,32k ascii文本)
	补充:在精灵和地图编辑器中自由移动,平移和选择
	补充:洪水填充工具(精灵和地图)
	补充:.GIF保护程序
	补充:CTRL-Stamp加盖透明度
	补充:地图和精灵的单步撤消
	补充:2x2刷
	补充:sqrt(),atan2()
	补充:CTRL-S快速保存
	补充:CTRL-R重新加载.p8文件并运行(对外部文本编辑很有用)
	补充:覆盖或退出时自动备份而不保存
	补充:滚轮在精灵编辑器中放大
	补充:可定制的分辨率//例如pico8 -width 580
	补充:字符串突出显示为绿色
	补充:ALT-click可以选择模拟右击(参见config.txt)
	补充:palt()控制spr(),sspr()的透明度
	补充:info()
	更改:load()尝试添加.p8.png,.png如果文件不存在
	已更改:绘制操作仅适用于活动时的选择
	已更改:移动操作(游标)适用于选择(如果存在)
	更改:删除时间()
	更改:随机种子在购物车启动时是随机的
	更改:api函数永远不会直接从购物车rom中读取
	更改:sspr()可以为dw,dh取负值
	修复:使用整数的稀疏表索引失败
	修正:分配运算符和shortform if-then-else失败
	修复:当w0 == 128时,sspr()失败
	修正:当相机没有(0,0)时圆形图形被破坏
	修正:CPU占用
	修正:噪音乐器​​clobbers rnd()序列
	修正:音频系统在程序复位时没有复位
	修正:对于负值,%运算符有时会出错
	修正:长度算子(#)
	修正:电力运营商(^)
	修正:右边缘和底边缘的线条剪裁错误
	修正:整数的print()精度
	修正:打印()为负y值打破
	修复:标记化和关键字突出显示
	修复:未复制/粘贴精灵属性
	修正:只有sfx 0..32可以用作音乐模式
	修复:保存并加载.p8文件会在代码结尾添加换行符
	修正:在代码编辑器中将选择拖动到左边距 - >选择全部
	
	
v0.1.0

	补充:demo cart:hello.p8(使用install_demos)
	补充:CTRL-R从任何地方运行购物车或重新启动购物车
	补充:使用a,s在gfx编辑器中选择颜色
	补充:一致的操作cpu成本
	补充:btn(),没有参数的btnp()返回位域
	补充:fget(id)返回该精灵标志的位域
	已更改:将mapdraw()重命名为map()以保持一致性
	更改:默认睡眠时间为5毫秒(笔记本电脑的CPU消耗更好)
	修正:内存限制器
	修正:不稳定的线条和圆形绘图
	修复:在sfx编辑器中按住Shift键单击音量以设置全部
	修复:数字格式现在从不用科学记数法
	修复:控制台中的剪辑错误消息
	修复:文本撤消在查找行号时存储回滚点
	修正:print(str)回车返回上一个x


v0.0.5

	补充:help()
	添加:Ctrl + F / Ctrl + G搜索文本,重复搜索
	在代码编辑器中添加:del键
	补充:短线单行IF语句
	补充:一元运算符+ =  -  = / = * =%=
	补充:srand(),time(),将rnd()添加到docs
	补充:Ctrl + D复制行
	新增:用于多页文件列表的交互式ls()
	补充:band()bor()bxor()bnot()shl()shr()
	补充:运行时错误行号
	补充:dir()(别名为ls())
	更改:print()仅在没有参数的情况下调用时自动滚动
	更改:alt +向上/向下跳过功能定义之间(是ctrl)
	更改:sspr()dw,dh默认为sw,sh
	修复:加载非.p8格式或目录的文件崩溃
	修正:其他编辑器光标位置故障
	修复:在查看代码之前发生语法错误时崩溃
	修复:重新启动后损坏的换行符
	修复:调用mkdir()时没有创建“(null)”目录的参数
	修复:使用滚轮滚动到代码顶部
	修正:alt-f4到fastquit


v0.0.4

	补充:Jelpi演示推车
	补充:内部推车//使用install_demos()
	补充:操纵杆支持
	补充:在代码编辑器中撤消/重做
	新增:代码编辑器中的滚轮
	补充:LCTRL + UP / DOWN导航代码编辑器中的功能
	增加:LALT + LEFT / RIGHT切换编辑模式
	补充:btnp()
	补充:释放循环样本(编辑器中的a,代码中的sfx(-2,channel))
	已更改:暂停程序执行时音乐停止
	更改:允许8个可设置的精灵标志
	改变:使噪音仪器更加低音
	修正:家庭,结束键
	修正:Sprite标志4,5未保存
	修正:mset()丢弃4个高位
	修复:突出显示长字符串时崩溃


v0.0.3

	补充:调色板映射类型1(显示)
	补充:集合可以用c = {1,2,..}初始化
	补充:holdframe()// _draw()自动使用,update()
	补充:跨选择的精灵选择和操作
	补充:地图选择和图章工具
	补充:切换视图时保留立即模式屏幕缓冲区
	新增:音乐播放的通道掩码
	新增:现场声音数据的内存映射
	补充:.png购物车格式
	补充:键盘精灵导航( - ,+)
	修正:严格的4声道声音
	修正:自动sfx通道选择(通道索引:-1)


v0.0.2

	补充:命令历史记录
	补充:P2键
	补充:引导顺序
	补充:Windows,64位Linux版本
	补充:内部api功能的CPU成本
	新增:分离歌曲频道索引和静音状态
	补充:内存映射
	补充:在精灵编辑器中搜索/替换颜色
	补充:复制/粘贴精灵和地图区域
	改进:立即模式命令编辑
	改进:编辑器光标行为
	修正:自动音频通道选择


v0.0.1 

	第一阿尔法

Gameshell资源导航帖