函数 (TeaScript)
函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、(OOP中)方法。
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。
在 TeaScript 里,有很多种函数,它们大多数使用来控制游戏的运行或控制变量,再或者创建物体等等操作。
无论是什么函数,前面必须要加上:call 才能成功调用。除非你用的是有返回赋值的函数,一些例如 NCreate 之类的函数可以赋值给变量。
可以访问 PGEWiki 上的 TeaScript了解函数的使用。
消息
Showmsg
Showmsg 是用来在游戏中显示对话框。
call Showmsg("Hello World")
事件控制
TCreate
TCreate 用来创建一个事件。
call TCreate(eventname, delay)
'eventname - 需要触发的事件
'delay - 延迟的帧数
TClear
TClear 用来删除一个正在调用的事件。
call TClear(type, eventname)
'type 清除类型,0 - 仅清除eventname定义的事件,1 - 清除所有激活的事件
'eventname - 需要清除的事件(type为0时)
TCreateEX
TCreateEX 在特定帧后执行本地/全局脚本并将参数传递给脚本。
call TCreateEX(Scriptname, delay, param1, param2, param3)
'Scriptname - 要执行的脚本。
'delay - 要等待的帧。
'Param1 - 要传递给Sysval(Param1)的值
'Param2 - 要传递给Sysval(Param2)的值
'Param3 - 要传递给Sysval(Param3)的值
音频
AudioSet
AudioSet 用来控制游戏内的音效和音乐。
call AudioSet(type, sid, par, filepath)
这个脚本可以定义游戏内置的 92 个 SoundID 以外的音频空位并调用。
type 分为以下几种:
加载音效
call AudioSet(1, sid, par, filepath)
'Sid - 音效的ID。有效范围为1到1024。
'Par - 该音效的 "副本"是否可以同时播放。
'Filepath - 音效的文件名。音效文件应放在世界地图文件夹中。
播放音效
call AudioSet(2, sid, 0, "")
'Sid - 音效的ID。有效范围为1到1024。
停止音效
call AudioSet(3, sid, 0, "")
'Sid - 音效的ID。有效范围为1到1024。
播放音乐
call AudioSet(11, fadems, 0, filepath)
'fadems - 淡入效果的持续时间(毫秒)。
'Filepath - 音乐的文件名。音效文件应放在世界地图文件夹中。格式为SMBX可接受的音频文件(mp3,wav,ogg,spc等等。)
停止音乐
call AudioSet(12, fadems, 0, "")
'fadems - 淡出效果的持续时间(毫秒)。
理论上,音效格式不局限于ogg,wav,mp3等等。
GUI 美化
一些人的作品的HUD会与默认的SMBX界面不同,这是因为使用了HUD美化的函数,对其进行一定的改造。
HUDSet
HUDSet 是一个压缩函数(本Wiki暂且统称为多元函数),其效果随参数'command'的变化而变化。
call HUDSet(command,p1,p2,p3,p4,p5,p6,p7,p8,p9)
HUDSet 用来美化HUD,由于是一个多元函数,所以从p1, p2, p3, ... , p9
所包含的含义,都会随着command
参数的不同而不同,如果一些参数未使用的话,默认都为0。
初始化
call HUDSet("initialize",0,0,0,0,0,0,0,0,0,0)
该命令会强制初始化HUD,并抹除原有的HUD数据。
禁用HUD/清除HUD
call HUDSet("destroy",0,0,0,0,0,0,0,0,0,0)
该命令会强制禁用HUD,并抹除原有的HUD数据。
位图
call HUDSet("bitmap",id,sx,sy,sw,sh,dx,dy,advset,color)
'id - 表示位图的唯一ID。 如果未使用ID,该函数将创建一个新的位图,否则它将覆盖现有的位图。
'sx - 表示位图源文件中左上角点的x坐标
'sy - 表示位图源文件中左上角点的y坐标
'sw - 表示裁剪后的位图的宽度
'sh - 表示裁剪后的位图的高度
'dx - 表示屏幕上的x坐标。 屏幕的左上角的x坐标为0。
'dy - 表示屏幕上的y坐标。 屏幕的左上角的y坐标为0。
'advset - 高级设置。
'color - 颜色的int值,0为完全透明,也可以使用rgba函数。
advset 的含义如下:
- 1000至1000 + NPCNum:显示类型ID为[advset-1000]的NPC的图像
- 5001:在玩家1的物品栏中显示NPC的图像
- 5002:在玩家2的物品栏中显示NPC的图像
- 6001至6003:如果已获取第[advset-6000]个星币,则将正常绘制位图,否则将不绘制位图。
如果advset设置为有效值,则将不使用参数sx和sy,而参数sw和sh将成为绘制的位图的拉伸比。例如,如果advset设置为 5001或 5002,并且sw,sh设置为 1,则绘制位图的大小将为32 * 32。
文字
call HUDSet("text:*",id,dx,dy,sasc,easc,lnum,npcid,color,-1)
'id - 表示文本的唯一ID。如果未使用该ID,该函数将创建一个新文本,否则它将覆盖现有文本。
'dx - 表示文本的x坐标。 屏幕的左上角的x坐标为0。
'dy - 表示文本的y坐标。 屏幕的左上角的y坐标为0。
'sasc - NPC图像字体的起始阿斯克码值。
'easc - NPC图像字体的最后一个阿斯克码值。
'lnum - NPC图像字体的单个行的字符数量。
'npcid - 使用该字体的NPC ID。
'color - 颜色的int值。
sasc 和 easc 一般为
- {32,128}(基础ASCII字母,包含了一些标点符号,大写小写字母,阿拉伯数字)
- {65,90}(大写字母)
- {48,57}(阿拉伯数字)
- {97,122}(小写字母)
- {65,122}(包含大写和小写的字母)
特殊的,asc(10) 为换行符,asc(13) 为回车符。
lnum 尽量与图像的单行字符数相同。例如一个图像一行包含了16个字符,那lnum为16。
"text:*"可以是要显示的任何有效字符串。如果需要在里面输入动态数据的话,请使用 &type 地址符代替,可以用的地址符如下:&val(本地变量)&gvl(全局变量)&sys(系统变量)。例如想显示金币数就为:"text:&sys(coincount)"。
TXTCreate
call TxtCreate(id, x, y, sasc, easc, cdata, lnum, fontid, flag, text)
'id - 创建的文本对象的唯一ID。
'x - 文本的x坐标。
'y - 文本的y坐标。
'sasc - NPC图像字体的开始ASCII码。
'easc - NPC图像字体的最后一个ASCII码。
'cdata - 保留,设置为0。
'lnum - NPC图像文件中单行的字符数。
'fontid - 用作字体的NPC的ID。使用NPC映像文件名中的数字作为ID。
'flag - 以什么为定位为准,0 - 关卡坐标系为准,1-屏幕为准。
'text - 需要显示的文本。
TXTCreate 使用NPC的图像作为字体显示一段文本。
TXTCreate 虽然可以使用 HUDSet 创建,但 TXTCreate 创建的文本可以做一些特殊的效果。
BMPCreate
call BmpCreate(id, picid, flagA, flagB, sx, sy, sw, sh, dx, dy, scx, scy, pcx, pcy, angle, color)
'ID - 表示位图对象的唯一ID。如果未使用ID,该函数将创建一个新的位图,否则将不会发生任何事情。
'picid - 用作位图源的NPC的ID,使用NPC图像文件名中的数字作为ID。
'flagA - 设置为0,坐标将以关卡坐标系为准;设置为1,则以屏幕为准。
'flagB - 将其设置为0,将隐藏创建的位图。将此设置为1,位图将可见。
'sx - 表示位图源文件中左上角点的x坐标。
'sy - 表示位图源文件中左上角点的y坐标。
'sw - 表示裁剪后的位图的宽度。
'sh - 表示裁剪后的位图的高度。
'dx - 表示所显示位图的x坐标。
'dy - 表示所显示位图的y坐标。
'scx - 表示横向拉伸比。预设值为1。
'scy - 表示纵向拉伸比。预设值为1。
'pcx - 表示在拉伸和旋转中使用的中心点的x坐标。
'pcy - 表示在拉伸和旋转中使用的中心点的y坐标。
'angle - 表示位图的旋转角度。
'color - 颜色的int值,也可以用rgba,后续可以使用forecolor_x等调整。
BMPCreate 创建高度可定制的位图对象。需要NPC作为位图源。
BMPCreate 虽然可以使用 HUDSet 创建,但 BMPCreate 创建的图像可以通过后期调教,创造出意想不到的视觉效果。
BErase
call BErase(type, id)
'type - 对象类型,1 - 文本,2 - 位图
'ID - 对应对象的ID。
BErase 也可以清除迭代器。详情请见下方。如果只对对应ID进行隐藏操作,修改hide属性即可。
特效
FXCreate
FXCreate 用来创建一个 Effect 特效。
call FXCreate(id,x,y,sx,sy,f,fs,fc,ng,advset)
'id 为 Effect 库的ID
'x x坐标
'y y坐标
'sx 横向速度
'sy 纵向速度
'f 该 Effect 的帧数,如果未开启重力为 Effect 显示帧数。
'fs 帧率
'fc 控制粒子效果的 y 拓展帧
'ng 是否启用重力,0 - 启用重力,非0 - 禁用重力。
'advset 额外数据,默认为0。
图层控制
LMove
LMove 用来移动一个图层。
call LMove(layername,px,py,type)
'layername - 图层名,你想控制移动的图层名称。
'px - 运动的x轴参数
'py - 运动的y轴参数
'type - 移动样式,0 为定速率移动图层,1 为相对位移移动图层。
以下是例子。
- call LMove("Layer1",1,0,0),相当于将 Layer1 图层按定速率每1帧向正x方向移动1像素。
- call LMove("Layer2",32,0,1),相当于将 Layer2 图层按相对位移将图层移动(32,0)的位置。
LSet
LSet 用来改变图层的可视性。
call LSet(layername,type,advset)
'layername - 图层名,你想控制的图层名称。
'type - 图层是否隐藏,1 - 显示,2 - 隐藏,3 - 切换
'advset - 是否显示烟雾特效。0为显示。
以下是例子。
- call LSet(Layer1,1,0),将 Layer1 图层显示,加上烟雾特效。
- call LSet(Layer2,2,0),将 Layer2 图层隐藏,加上烟雾特效。
- call LSet(Layer1,3,1),(Layer1图层为显示状态)将 Layer1 图层可视性切换为隐藏,关闭烟雾特效。
如果在全局脚本使用,仅会修改世界地图的图层。
有一个特例,当type参数为38时,可以改变图层的透明度,此时advset为图层的alpha值,范围为0~255。对世界地图的图层无效。
LSpin
LSpin 用来旋转图层。
call LSpin(layername,cx,cy,aspeed)
'layername - 图层名,你想控制旋转的图层名称。
'cx - 旋转中心的x坐标
'cy - 旋转中心的y坐标
'aspeed - 角速度,0为重置旋转过程。
如果在全局脚本使用,仅会修改世界地图的图层,仅对方块和NPC有效。
迭代器
迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节。 - 来自百度百科
该函数所涉及的知识比较麻烦,这里直讲最基础的部分。如果需要看比较进阶的迭代器的使用,后续会提供一些脚本实例。
该函数可以应用到变量里,通过一系列调教可以使其发挥更好的效果。
ItrCreate
ItrCreate(type, id, x, y, w, h)
'id - 迭代器的ID过滤器,如果没有ID过滤,则将其设置为0,否则迭代器将仅迭代具有相同图像文件ID的对象。
'x - 过滤器矩形范围的x坐标(起始坐标),迭代器仅迭代给定矩形区域内的对象。
'y - 过滤器矩形范围的y坐标(起始坐标),迭代器仅迭代给定矩形区域内的对象。
'w - 过滤器矩形范围的宽度,迭代器仅迭代给定矩形区域内的对象。
'h - 过滤器矩形范围的高度,迭代器仅迭代给定矩形区域内的对象。
type - 要迭代的对象类型。
- 1 - 方块
- 2 - NPC
- 3 - 背景
- 4 - 流体
- 5 - 传送点
- 6 - 效果
- 11 - 屏幕上的方块
- 12 - 活跃的NPC
可以被变量赋值,如果执行此函数失败,返回0。
ItrNext
ItrNext(itrID)
'ItrID - 迭代器的ID。 如果迭代器不存在或迭代已结束,则该函数将返回0。
获取迭代器的下一个对象。 返回对象ID。 如果对象不存在,则返回值为0,并且迭代器将被销毁。
BErase
call BErase(0,itrid)
'itrid - 迭代器的ID。
NPC
NCreate
用于创建NPC,当被变量赋值,返回该NPC的PermID。
call NCreate(id, x, y, sx, sy, advset, cdata)
dim a as integer = NCreate(id, x, y, sx, sy, advset, cdata) 'Return the generated NPC's PermID
'id - NPC的ID, 例: 1 是 板栗仔 goomba
'x - NPC的X坐标
'y - NPC的y坐标
'sx - NPC的横向速度
'sy - NPC的纵向速度
'advset - NPC的其他数据。默认值:0
'cdata - NPC的创建信息。默认值:0
返回的永久ID将在创建的下一帧中生效。此外,NPC并不是在脚本执行的这一帧就立即被创建。
特别是,当参数id设置为-1时,可以将参数advset设置为NPC的永久ID,此功能将复制NPC。 如果源NPC是旧式NPC生成器,则此功能将创建具有生成器效果的重复NPC。如果源NPC不存在,则不会执行任何操作。
NPC的Advset含义有所不同,请参考 NPC 高级值。
ID | Effect 效果 | Angle 角度 | 无烟雾效果 | 友好 | 是否属于 Spawned NPCs 图层 |
---|---|---|---|---|---|
1 | Projectile 发射器 | 🡹 270° | - | - | √ |
2 | Projectile 发射器 | 🡸 180° | - | - | √ |
3 | Projectile 发射器 | 🡻 90° | - | - | √ |
4 | Projectile 发射器 | 🡺 0° | - | - | √ |
5 | Warp 传送 | 🡹 270° | - | - | √ |
6 | Warp 传送 | 🡸 180° | - | - | √ |
7 | Warp 传送 | 🡻 90° | - | - | √ |
8 | Warp 传送 | 🡺 0° | - | - | √ |
9 | Projectile 发射器 | 🡼 225° | - | - | √ |
10 | Projectile 发射器 | 🡿 135° | - | - | √ |
11 | Projectile 发射器 | 🡾 45° | - | - | √ |
12 | Projectile 发射器 | 🡽 315° | - | - | √ |
17 | Projectile 发射器 | 🡹 270° | √ | - | √ |
18 | Projectile 发射器 | 🡸 180° | √ | - | √ |
19 | Projectile 发射器 | 🡻 90° | √ | - | √ |
20 | Projectile 发射器 | 🡺 0° | √ | - | √ |
25 | Projectile 发射器 | 🡼 225° | √ | - | √ |
26 | Projectile 发射器 | 🡿 135° | √ | - | √ |
27 | Projectile 发射器 | 🡾 45° | √ | - | √ |
28 | Projectile 发射器 | 🡽 315° | √ | - | √ |
50 | - | - | - | - | × |
51 | - | - | - | √ | × |
注:生成的 NPC 若属于 Spawned NPCs 图层,则在离屏后会直接被移除。CData 参数为 50 和 51 的 NPC 在生成后由于不属于这个图层,因此就算离屏也不会直接被移除。
以下是最近新发现的数值:
ID | 名称 | 备注 |
---|---|---|
41 | Facing (Right) | 方向(右) |
43 | ||
44 | Default (Layer) | 默认图层 |
50 | ||
7000 | ||
7001 | ||
45 | Default (Layer) + Facing (Right) | 默认图层保持右方向 |
51 | Default (Layer) + Friendly | 默认图层+友好状态 |
7002 | Destroyed Blocks (Layer) | 已破坏的方块图层 |
7004 | None / New Layer (Layer) | 无 / 新图层 |
9999 | Item Storage (Drop) | 道具栏 |
具体特性需进一步验证确定。
NCreateGroup
当本函数被调用时将创建一组NPC。
call NcreateGroup(ID, X, Y, RadiusCir, AngleCir, NPCcount, angle, xsp, ysp, advanced)
'ID - 要被创建的NPC的ID
'X - 生成点的横坐标
'Y - 生成点的纵坐标
'X和Y可以构成一个点(X,Y),它是一个圆的圆心,接下来的两个参数是圆半径和被生成的NPC位在圆上的位置。
'RadiusCir - 圆的半径
'AngleCir(Double) 被生成的NPC位在圆上的位置(角度)
'NPCcount - 要生成的NPC的数量
'Angle - 未知. Seems to be related to a spawn angle.
'Xsp - 当NPC被生成时的横向速度
'Ysp - 当NPC被生成时的纵向速度
'Advanced - 每个NPC的advanced值
NKill
清除NPC,当作为变量赋值,返回删除的NPC数量。
call NKill(index, rx, ry, rw, rh, id, effect, score)
dim KillCount as integer = NKill(index, rx, ry, rw, rh, id, effect, score)
'index - 删除样式。如果该值大于0,则表示NPC的ID。如果该值为0,则该函数将删除指定的NPC。如果此值为-1,则此函数将删除所有接触矩形框的NPC。如果此值为-2,则此功能将删除矩形框中的所有NPC。
'rx - 矩形框的x坐标。如果“index”不是-1或-2,则键入0。
'ry - 矩形框的y坐标。如果“index”不是-1或-2,则键入0。
'rw - 矩形框的宽度。如果“index”不是-1或-2,则键入0。
'rh - 矩形框的高度。如果“index”不是-1或-2,则键入0。
'id - 如果'index'为-1或-2,则表示要删除的NPC的ID。设置为0以删除所有NPC。如果'index'不是-1或-2,则输入0。
'effect - 确定是否显示即将死亡的效果。将其设置为0以禁用效果。将其设置为0以外的任何数字以显示它们。
'score - 这些删除的NPC是否可以带来分数则增加。将其设置为0以禁用计分;将其设置为0以外的任何数字以启用计分。
未提及的脚本
以下脚本是原版脚本文档未提及或频道&QQ群文件脚本文档未提及或用其他颜色标注的脚本,一般都是未公开或后人发掘的函数。以下脚本可能在 Wohlstand 的 Moondust Wiki 上有描述。
SysShowMSG
此功能会弹出一个窗口,并且具有不同的外观。
SysShowMsg(Message, Type, Title)
'Message - 对话框显示的信息
'Type - 类型,具体影响的是按钮的布局和图标声音等。
'Title - 标题
Type可以用如下方法计算:Type=Base Style + 16*N
N的值:
- 0 - 无
- 1 - 错误
- 2 - 请求
- 3 - 检查
- 4 - 信息
无效的N值将会显示Base Style
Base Style的值参考下表。
- 0 - 确定
- 1 - 确定,取消
- 2 - 中止,重试,忽略
- 3 - 是,否,取消
- 4 - 是,否
- 5 - 重试,取消
- 6 - 取消,重试,继续
无效的选项类型值将不会显示对话框。
按钮的返回值(当用变量赋值时。)
- 确定 - 1
- 取消 - 2
- 中止 - 3
- 重试 - 4
- 忽略 - 5
- 是 - 6
- 否 - 7
- 继续 - 11
SysShowInput
该功能会弹出一个输入框,可以接受玩家输入的信息。你可以使用str(string) = sysshowinput(...)来接收玩家输入的字符串。
SysShowInput(Message, Title)
'Message - 输入窗口显示的信息
'Title - 输入窗口的标题
SpEvent
call SpEvent(id)
触发一个特殊事件。
id值为特殊事件的ID。
针对SMBX 1.4.4的用户,打开 Events,在 Other 选项卡中找到 Special Event,右键当前的特殊事件即可查看。(Special event name [Event-ID = SpEvent.ID])
针对SMBX 1.4.5的用户,打开 Events,然后在 Others 选项卡中找到Special Event,直接选择查看。([ID] Special event name)
Event-ID | Special event name | 描述 |
---|---|---|
0 | None | 无 |
1 | Player.Hurt | 使玩家受伤 |
2 | Player.Death | 挂掉玩家 |
3 | PlayerStatWindow.Hide | 隐藏HUD |
4 | PlayerStatWindow.Show | 显示HUD |
5 | Player.hurt(id=1) | 在对战模式下使玩家1受伤 |
6 | Player.hurt(id=2) | 在对战模式下使玩家2受伤 |
7 | WI.Add(Mushroom) | 在大地图中的道具栏添加超级蘑菇 |
8 | WI.Add(Fre Flower) | 在大地图中的道具栏添加火之花 |
9 | WI.Add(Leaf) | 在大地图中的道具栏添加超级树叶 |
10 | WI.Add(Tanooki Suit) | 在大地图中的道具栏添加浣熊装 |
11 | WI.Add(Hammer Suit) | 在大地图中的道具栏添加锤子装 |
12 | WI.Add(Ice Flower) | 在大地图中的道具栏添加冰之花 |
13 | WI.Add(Frog Suit) | 在大地图中的道具栏添加青蛙装 |
14 | WI.Add(Starman) | 在大地图中的道具栏添加无敌星 |
15 | WI.Add(P-wings) | 在大地图中的道具栏添加 P 翅膀 |
16 | WI.Add(Hammer) | 在大地图中的道具栏添加锤子 |
17 | WI.Add(Cloud) | 在大地图中的道具栏添加云朵 |
18 | WI.Add(Blue Shell) | 在大地图中的道具栏添加龟壳装 |
19 | WI.Add(Propeller Mushroom) | 在大地图中的道具栏添加螺旋桨蘑菇 |
20 | WI.Add(Mini Mushroom) | 在大地图中的道具栏添加超小蘑菇 |
21 | WI.Add(Penguin Suit) | 在大地图中的道具栏添加企鹅装 |
22 | Player.ItemBox.Disable | 禁用道具存储(Item Storage) |
23 | Player.ItemBox.Enable | 启用道具存储(Item Storage) |
24 | WI.Add(Music Box) | 在大地图中的道具栏添加催眠音乐盒 |
25 | WI.Add(Warp Whistle) | 在大地图中的道具栏添加传送笛 |
26 | WI.Add(Anchor) | 在大地图中的道具栏添加船锚 |
27 | Player.WallJump.Enable | 允许玩家踢墙跳 |
28 | Player.WallJump.Disable | 禁止玩家踢墙跳 |
29 | PowerUpSystem.Init(SMB3) | 使用 超级马力欧兄弟3/新 超级马力欧兄弟 玩家形态转换模式(玩家在火焰形态以上的形态受伤时,变为大个子) |
30 | PowerUpSystem.Init(SMB1) | 使用默认的 超级马力欧兄弟1 玩家形态转换模式(玩家受伤时,直接变回小个子) |
31 | WI.Add(Green Yoshi) | 在大地图中的道具栏添加耀西 |
32 | WI.Add(Blue Yoshi) | 在大地图中的道具栏添加蓝耀西 |
33 | WI.Add(Yellow Yoshi) | 在大地图中的道具栏添加黄耀西 |
34 | WI.Add(Red Yoshi) | 在大地图中的道具栏添加红耀西 |
35 | WI.Add(Black Yoshi) | 在大地图中的道具栏添加黑耀西 |
36 | WI.Add(Purple Yoshi) | 在大地图中的道具栏添加紫耀西 |
37 | WI.Add(Pink Yoshi) | 在大地图中的道具栏添加粉耀西 |
38 | WI.Add(Cyan Yoshi) | 在大地图中的道具栏添加冰耀西 |
39 | Screen.Pow | 使画面以POW砖块的形式震动 |
40 | Screen.Tremor | 使画面以重量级兄弟的形式震动 |
41 | PowerUpSystem.Enable(FreezeEffect) | 获得道具时,冻结游戏画面 |
42 | PowerUpSystem.Disable(FreezeEffect) | 取消获得道具时,冻结游戏画面的效果 |
43 | SpinJump.FallSlower.Enable | 启用“按住旋转跳跃按钮,可以使你在半空中下降得更慢“功能。 |
44 | SpinJump.FallSlower.Disable | 禁用”按住旋转跳跃按钮,可以使你在半空中下降得更慢“功能。 |
45 | Yoshi.FlutterJump.Enable | 允许耀西滞空跳 |
46 | Yoshi.FlutterJump.Disable | 禁止耀西滞空跳 |
47 | Player.GroundPound.Enable | 允许玩家压地跳 |
48 | Player.GroundPound.Disable | 禁止玩家压地跳 |
49 | Screen.FlipHorizontal.Enable | 水平翻转画面 |
50 | Screen.FlipHorizontal.Disable | 取消水平翻转画面 |
51 | Screen.FlipVertical.Enable | 垂直翻转画面 |
52 | Screen.FlipVertical.Disable | 取消垂直翻转画面 |
53 | Lighting.SetMode(NSMB) | 使用线性过渡光照效果 |
54 | Lighting.SetMode(SMW) | 使用硬边缘过渡光照效果 |
55 | Thwomp.Shake | 生成咚咚砸地震动效果 |
1045 | SMWYellowSwitch.Trigger | 切换黄开关状态 |
1057 | SMWBlueSwitch.Trigger | 切换蓝开关状态 |
1069 | SMWGreenSwitch.Trigger | 切换绿开关状态 |
1073 | SMWRedSwitch.Trigger | 切换红开关状态 |
1082 | SMWBlackSwitchBlock.Trigger | 切换黑色开关的特性形态(传送带) |
1089 | TimeStop.Activate | 激活暂停时钟效果 |
1090 | TimeStop.Deactivate | 结束暂停时钟效果 |
1095 | PSwitch.Trigger | 激活 P 开关效果 |
1102 | PSwitch.Stop | 结束 P 开关效果 |
1115 | PlayerInvincibleStar.Activate | 激活玩家无敌效果 |
1119 | PlayerInvincibleStar.Deactivate | 结束玩家无敌效果 |
1126 | PlayerFLUDD.Clear | 移除玩家的水泵 |
1135 | PlayerFLUDD.Exhaust | 重置玩家的水泵使用冷却 |
1141 | PlayerItemBox.Clear | 清除玩家的道具存储(Item Storage) |
1148 | Player.ResetState | 将玩家的形态恢复到小个子/大个子 |
2589 | 挂掉当前屏幕上的所有敌人(过关时的效果) |
KeyPress
KeyPress 用来判断当前用户在键盘上输入的字符值。
KeyPress(id)
id 为键盘的ASCII值。可以参考网络上的ASCII与键盘对照表。
当对应 id 的按键按下去后,返回-1。
一些其他按键的数值:
Player 1 | Player 2 | ||
---|---|---|---|
-10 | 暂停 | -20 | 暂停 |
-11 | 右 | -21 | 右 |
-12 | 左 | -22 | 左 |
-13 | 下 | -23 | 下 |
-14 | 上 | -24 | 上 |
-15 | Alt Jump | -25 | Alt Jump |
-16 | Jump | -26 | Jump |
-17 | Run | -27 | Run |
-18 | Alt Run | -28 | Alt Run |
-19 | Select | -29 | Select |
其他 | |||
-1 | 鼠标指针相对于屏幕系统的X坐标 | -2 | 鼠标指针相对于屏幕系统的Y坐标 |
1 | 鼠标左击 | 2 | 鼠标右击 |
其他值是键盘上所有键的ASCII值。(104键键盘) |
功能键名 | ASCII值 |
---|---|
鼠标左键 | 1 |
鼠标右键 | 2 |
Cancel Key | 3 |
鼠标中键 | 4 |
BackSpace | 8 |
Tab | 9 |
Enter | 13 |
Shift | 16 |
Ctrl | 17 |
Alt | 18 |
Caps Lock | 20 |
Esc | 27 |
Space | 32 |
PgUP | 33 |
PgDN | 34 |
End | 35 |
Home | 36 |
← | 37 |
↑ | 38 |
→ | 39 |
↓ | 40 |
(Ins) | 45 |
(Del) | 46 |
0 ~ 9 | 47 ~ 58 |
A ~ Z | 65 ~ 90 |
Num 0 ~ 9 | 96 ~ 105 |
Num * | 106 |
Num + | 107 |
Num Enter | 108 |
Num - | 109 |
Num . | 110 |
Num / | 111 |
F1 ~ F12 | 112 ~ 123 |
Num Lock | 144 |
; : | 186 |
= + | 187 |
, < | 188 |
- _ | 189 |
. > | 190 |
/ ? | 191 |
` ~ | 192 |
[ { | 219 |
\ | | 220 |
] } | 221 |
' " | 222 |
值得一提的是,用事件强制锁定按键,上面表格对应的按键将无法检测,但对应的键盘ASCII值还能检测。(比如你想按Jump键,默认为Z键,此时事件在锁定按键,程序只会检测 KeyPress(90) 的按键,不会检测 KeyPress(-16) 的按键。)
EXEScript
执行一个本地或全局脚本(全局的如果当前世界有对应的全局脚本)。
call EXEScript(scriptname)
调用此函数时,将立即执行给定脚本,并且将暂停主调脚本,直到给定脚本的执行完成为止。
其他
Sleep
call Sleep(delay)
暂停当前运行的脚本,时间由delay决定(单位:帧)。
注意的是!此语法只能由事件调用的脚本使用,如果用的 EXEScript 或由 NPC 调用的脚本将不起作用!
一定要注意,在没有前置或后置条件的 do...loop 等永久循环语法中一定要添加这段语法,否则可能会导致游戏卡住!!!
SCSet
这个函数允许你改变或检查关卡中大星币的收集情况。
获取一颗大星币:
Call SCSet(levelname,scID,0)
参数 | 描述 |
---|---|
levelname | 大星币所处的关卡的文件名。 |
scID | 大星币的编号,同大星币高级设置面板中的 IDN 参数。 |
检查一颗大星币的收集情况:
value = SCSet(levelname,scID,1)
参数 | 描述 |
---|---|
levelname | 大星币所处的关卡的文件名。 |
scID | 大星币的编号,同大星币高级设置面板中的 IDN 参数。 |
取消一颗大星币的收集状态:
Call SCSet(levelname,scID,4)
参数 | 描述 |
---|---|
levelname | 大星币所处的关卡的文件名。 |
scID | 大星币的编号,同大星币高级设置面板中的 IDN 参数。 |
取消关卡内所有大星币的收集状态:
Call SCSet(levelname,0,5)
参数 | 描述 |
---|---|
levelname | 大星币所处的关卡的文件名。 |
注意:若 scID 这个参数的数值超过 3,则可能会导致关卡内的大星币的收集情况出现混乱,请谨慎使用。
Debug
call Debug(string)
将文本输出到调试器。
如果在编辑器中测试了关卡,则此函数会将字符串中的信息输出到Debugger中的调试窗口,否则将不会执行任何操作。 但是,为了获得更好的游戏性能,应在调试后删除所有“调试”功能。
BSet
详见 BSet (TeaScript)。
RGBA
rgba(r,g,b,a)
可以返回一个计算好的颜色的int值,公式为:alpha * 16777216 + blue * 65536 + green * 256 + red
。
int (非unsigned int)值最大数为 2147483647,如果加1,则会成为负数 -2147483648,程序会继续计算,直到计算结束为止。所以一般情况下,颜色的int值为-1为完全不透明无颜色覆盖。
dim a as integer = rgba(255,255,255,0) 'Return 16777215。
已失效的脚本
以下脚本可能以前版本还能使用,但新版本被移除。
ShaderSet
ShaderSet 是一个在1.4.4出现过的未公开的函数,疑似测试遗留,作用是生成一个背景着色器特效,也可以对屏幕产生效果(有点类似1.4.5的一些SpEvent效果。)
由于该函数透漏信息量非常低,可能会因此不准确。
格式如下:
call shaderset(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11)
p1 为 -1 时,控制屏幕画面。
call shaderset(-1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11)
'p2: screen.anchor.x 屏幕以 x 位置为中心锚点
'p3: screen.anchor.y 屏幕以 y 位置为中心锚点
'p4: screen.angle 屏幕以锚点为准旋转的角度
'p5: screen.offset.x 屏幕横向缩放大小,360为一个周期(1x)(仅在震动特效下有效,p2的值也会影响缩放中心。呈贝塞尔曲线向量?)
'p6: screen.offset.y 屏幕纵向缩放大小,360为一个周期(1x)(仅在震动特效下有效,p2的值也会影响缩放中心。呈贝塞尔曲线向量?)
'p7: screen.powShake 屏幕产生类似 Pow砖 的震动效果帧数时长
'p8: screen.forecolor.r 屏幕着色的红颜色值
'p9: screen.forecolor.g 屏幕着色的绿颜色值
'p10: screen.forecolor.b 屏幕着色的蓝颜色值
'p11: screen.forecolor.a 屏幕着色的透明度值
p1 为 0 时,控制背景着色器。
call shaderset(0,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11)
'shader.background().index (非TeaScript物体,仅教程方便需要。)
'p2: .id 场景背景的 ID
'p3: .forecolor.r 背景着色器的红颜色值
'p4: .forecolor.g 背景着色器的绿颜色值
'p5: .forecolor.b 背景着色器的蓝颜色值
'p6: .forecolor.a 背景着色器的透明度值
'当 p9 的值 不等于0 时,图像开始旋转,下列参数含义如下:
'p7: .angle_anchor_x 以背景着色器为准在上面的中心 x 位置
'p8: .angle_anchor_y 以背景着色器为准在上面的中心 y 位置
'p9: .nspeed 此时该参数的值为背景着色器的旋转速度。
'p10: .screen_x 该背景着色器在屏幕画面上的x位置
'p11: .screen_y 该背景着色器在屏幕画面上的y位置
'当 p9 的值 等于0 时,下列参数含义如下:
'p10: .xspeed 背景着色器的横向速度
'p11: .yspeed 背景着色器的纵向速度
与场景背景不同的是,此函数会在屏幕画面上渐入过渡渲染一个背景图。可以搭配一些特定的背景制作梗生动的背景效果(当然,ShaderSet生成的背景不会随着玩家场景位置的改变而改变。)
由于不可抗力因素,该函数在1.4.5被移除,不过你仍然可以尝试创建一个自定义函数来代替此函数。