函数 (TeaScript)

来自SMBX 中文百科
< TeaScriptTeaScript/Function
跳转到导航 跳转到搜索


函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、(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 高级值

CData (Create Data)
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 在生成后由于不属于这个图层,因此就算离屏也不会直接被移除。

以下是最近新发现的数值:

Create Data (2024.1.5)
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)

Special Events ID (1.4.5)
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被移除,不过你仍然可以尝试创建一个自定义函数来代替此函数。