函数 (TeaScript)

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

此页面主要介绍函数的使用。

如需要查看“自定义函数”,请前往:函数(语法)。

如需要查看“返回型函数”,请前往:返回型函数。

函数是指一段可以直接被另一段程序或代码引用的程序或代码。

在 TeaScript 里,有很多种函数,它们大多数使用来控制游戏的运行或控制变量,再或者创建物体等等操作。

无论是什么函数,前面必须要加上:call 才能成功调用。除非你用的是有返回赋值的函数,一些例如 NCreate 之类的函数可以赋值给变量。

可以访问此链接了解函数的使用。

注:函数名可以大写,下面为了统一格式全部使用小写,可能在阅读流畅度上产生一些困扰。

消息

Showmsg

此函数用来在游戏中显示对话框。

call showmsg(message)
参数名 介绍
message 文本内容,允许下面的控制字符,也支持全局/本地/DIM变量等表达式。

允许使用\c,\alpha,\n,\quake等语法控制文本细节。

\c:颜色值,完整格式为\cXXXXXX,XXXXXX代表颜色的十六进制值。

\alpha:渐变显示,让文本从头到尾进行过渡显示,在文本中间再插一个\alpha可以让后面的文本全部过渡显示。

\n:换行符。

\quake:文本震动,让文本产生震动效果。

call showmsg("\cff0000红\c00ff00绿\c0000ff蓝")
' 此控制符可以修改对应文本颜色。

call showmsg("\alpha这是一段逐渐出现的字符。")
' 此控制符可以让文本逐渐渐变显示。
call showmsg("\alpha第一组渐变出现字符\alpha第二组同时渐变出现字符\alpha第三组与第一组渐变出现字符")
' 当输入第二个 \alpha 控制符后,文本不再逐次渐变显示,第三次插入会同时与第一组渐变显示,后面同理。

call showmsg("行数 1\n行数 2\n行数 3")
' 此控制符可以让文本终止此行,在新一行输出后面的字符。

call showmsg("\quake我会震动!爽不爽?!")
' 此控制符可以让文本产生震动效果。在后面再插入 \quake 就可以让后面字符不会震动。

SysShowMSG

在 Windows 系统下[1],此功能会弹出一个标准的窗口,并且可以使用不同的类型。

call sysshowmsg(message, windowtype, title)
' 直接调用 Windows 窗口而不做任何返回判断操作。
dim a as integer = sysshowmsg(message, windowtype, title)
' 在调用 Windows 窗口后,经用户操作返回对应的值。
参数名 介绍
message 文本内容,支持全局/本地/DIM变量等表达式。
windowtype Windows 窗口的类型。见下文。
title Windows 窗口标题。

窗口类型

为了方便,对于windowtype参数,使用base + 16 * type表达式来区分窗口的不同类型。

base参数 功能
0 确定
1 确定,取消
2 中止,重试,忽略
3 是,否,取消
4 是,否
5 重试,取消
6 取消,重试(Try Again),继续
type参数 功能 图标 更多信息
0,9~15 无 此值会创建一个标准的窗口。
1 错误 此值会创建一个标准的错误窗口。
2 请求 此值会创建一个标准的问号窗口。
3 警告 此值会创建一个标准的感叹号窗口。
4 信息 此值会创建一个标准的带i图标的窗口。
5~7 无图标 此值会创建一个无图标,但是有声音反馈的窗口。
8 空位 此值会创建一个类似1~4样式的窗口,但是无任何图标(就是一个空位)。

返回值

当用户点击对应按钮后,会返回特定的值。

按钮 返回值
确定 1
取消 2
中止 3
重试 4

10(如果base为6)

忽略 5
是 6
否 7
继续 11

SysShowInput

此函数会弹出一个输入框,可以接受玩家输入的信息。可以用变量接收用户输入的值。

call sysshowinput(message, title)
' 直接调用输入框。
dim a as string = sysshowinput(message, title)
' 在调用输入框后,返回所填的内容。

音频

AudioSet

AudioSet 用来控制游戏内的音效和音乐。

call audioset(mode, param1, param2, filename)
参数名 介绍
mode 模式,见下文。
param1 见下文。
param2 见下文。
filename 文件名称,扩展名为SDL2Mixer.dll支持的音频类型。

此函数可以定义游戏内置的 92 个 SoundID 以外的音频空位(共1024个)或音乐并调用。

mode分为以下几种:

加载音效

call audioset(1, id, adv, filename)
参数名 介绍
id 音频ID,可选范围为 0~1024。如果为 1~92 则覆盖原音频。
adv 音频的“副本”是否可以同时播放。
filename 文件名称。

播放音效

call audioset(2, id, loop, "")
参数名 介绍
id 音频ID,可选范围为 0~1024。

如果为自定义音频,需要先执行call audioset(1, id, adv, filename)初始化音效。

loop 是否循环播放。

停止音效

call audioset(3, id, 0, "")
参数名 介绍
id 音频ID,可选范围为 0~1024。

调整音效的音量

call audioset(5, id, volume, "")
参数名 介绍
id 音频ID,可选范围为 0~1024。
volume 范围为0~100。

播放音乐

call audioset(11, fadems, 0, filename)
参数名 介绍
fadems 音乐渐入的时间。(毫秒)
filename 文件名称。

停止音乐

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。

command里面有4个硬编码参数。

初始化

此函数会强制初始化HUD,并抹除原有的HUD数据。

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)

位图

call hudset("bitmap",id,sx,sy,sw,sh,x,y,advset,color)
参数名 介绍
id 该HUD元素的ID,与文本共用ID池。
sx 使用图像的左上角位置X坐标。
sy 使用图像的左上角位置Y坐标。
sw 裁剪该图像的宽度。
sh 裁剪该图像的高度。
x 此图像在玩家视野当中的x坐标。
y 此图像在玩家视野当中的y坐标。
advset 高级值,含义如下:
  • 1000~1000+游戏中的NPC类型最大数量:显示对应的NPC的图像。
  • 5001:玩家1的物品栏。
  • 5002:玩家2的物品栏。
  • 6000~6002:玩家所获得的星星币对应的ID。
color 颜色值,可以使用rgba()函数或一个Int32值。(-1为完全显示,0为完全透明。)

图像使用当前关卡的scflash.png。

如果advset设置为有效值,则将不使用参数sx和sy,而参数sw和sh将成为绘制的位图的拉伸比。例如,如果advset设置为 5001或 5002,并且sw,sh设置为 1,则绘制位图的大小将为32 * 32。

文字

call hudset("text:*", id, x, y, sasc, easc, rasc, npcid, color, -1)
参数名 介绍
text:* 文本内容,可以是纯文本,也可以是变量或系统变量等。
id 该HUD元素的ID,与图像共用ID池。
x 此文本在玩家视野当中的x坐标。
y 此文本在玩家视野当中的y坐标。
sasc 该文本图像字体的起始ASCII字符。
easc 该文本图像字体的最后一个ASCII字符。
rasc 该文本图像字体一行的字符个数。
npcid 该文本图像字体所使用的NPC ID的图像。
color 颜色值,可以使用rgba()函数或一个Int32值。(-1为完全显示,0为完全透明。)

如果需要在text:*里面输入动态数据的话,请使用&或$地址符代替,详情见 语法(TeaScript)。

TXTCreate

此函数使用NPC的图像作为字体显示一段文本。

call txtcreate(id, x, y, sasc, easc, cdata, lnum, fontid, flag, text)
参数名 介绍
id 创建的文本对象的唯一ID。
x 此文本的x坐标。
y 此文本的y坐标。
sasc 该文本图像字体的起始ASCII字符。
easc 该文本图像字体的最后一个ASCII字符。
cdata 保留,设置为0
lnum 该文本图像字体一行的字符个数。
npcid 该文本图像字体使用的NPC ID的图像。
flag
  • 0 - 设置为玩家视野范围坐标
  • 1 - 设置为关卡坐标
text 文本内容。

TXTCreate 虽然可以使用 HUDSet 创建,但 TXTCreate 创建的文本可以做一些特殊的效果。

BMPCreate

此函数用于创建高度可定制的位图对象。需要NPC作为位图源。

call bmpcreate(id, picid, flag1, flag2, sx, sy, sw, sh, dx, dy, scx, scy, pcx, pcy, angle, color)
参数名 介绍
id 创建的位图对象的唯一ID。
npcid 该位图使用的NPC ID的图像。
flag1 此位图的坐标系。
  • 0 - 关卡
  • 1 - 玩家的屏幕
flag2
  • 0 - 隐藏创建的位图
  • 1 - 显示位图
sx 使用图像的左上角位置X坐标。
sy 使用图像的左上角位置Y坐标。
sw 裁剪该图像的宽度。
sh 裁剪该图像的高度。
dx 此位图的x坐标。
dy 此位图的y坐标。
scx 此位图的横向拉伸比,1为不缩放。
scy 此位图的纵向拉伸比,1为不缩放。
pcx 进行拉伸或旋转操作时,图像的中心x坐标。
pcy 进行拉伸或旋转操作时,图像的中心y坐标。
angle 旋转的角度数。
color 颜色值,可以使用rgba()函数或一个Int32值。(-1为完全显示,0为完全透明。)

BMPCreate 虽然可以使用 HUDSet 创建,但 BMPCreate 创建的图像可以通过后期控制,创造出意想不到的视觉效果。

在某种程度上,可以作为shaderset函数的备选。

清除器

BErase

此函数用于清除对应的文本、位图和迭代器。

注:如果只对对应ID进行隐藏操作,只需要修改其对象的hide参数。

call berase(type, id)
参数名 介绍
type 清除类型。
  • 0 - 迭代器
  • 1 - 文本
  • 2 - 位图
  • 3 - 方块
id 需要清除的对象ID。

效果生成器

FXCreate

此函数用于创建一个 Effect 特效。

call fxcreate(id, x, y, sx, sy, f, fs, fc, ng, advset)
参数名 介绍
id Effect 对象的 ID。
x 创建此特效的x坐标。
y 创建此特效的y坐标。
sx 此特效的初始水平速度。
sy 此特效的初始垂直速度。
f 此特效未开启重力时的显示帧数。
fs 此特效播放图像的帧速度。
fc 此特效的y拓展帧。(例如 effect-77 时设置为1则变成路易吉的火球。)
ng 是否启用该特效的重力系统。
  • 0 - 启用
  • 1 - 禁用
advset 额外数值。只对 effect-77 和 effect-79 有效。

图层控制

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

此函数用于改变图层的可视性。

切换可视性

call lset(layername, type, advset)
参数名 介绍
layername 图层名。
type 改变图层可视性。
  • 1 - 显示
  • 2 - 隐藏
  • 3 - 切换
advset 显示隐藏图层时是否播放烟雾特效。
  • 0 - 是
  • 1 - 否

以下是例子。

call lset(Layer1, 1, 0)
' 将 Layer1 图层显示,加上烟雾特效。
call lset(Layer2, 2, 0)
' 将 Layer2 图层隐藏,加上烟雾特效。
call lset(Layer1, 3, 1) '假设Layer1图层为显示状态
' 将 Layer1 图层可视性切换为隐藏,关闭烟雾特效。

如果在全局脚本使用,仅会修改世界地图的图层。

图层透明度

当type参数为38时,可以改变图层的透明度。

注:对世界地图的图层无效。

call lset(layername, 38, value)
参数名 介绍
layername 图层名。
value 该图层的 Alpha 透明度数值。(范围 0~255)

LSpin

此函数用于旋转图层。

call lspin(layername, cx, cy, aspeed)
参数名 介绍
layername 图层名。
cx 旋转该图层的中心点x坐标。
cy 旋转该图层的中心点y坐标。
advset 旋转速度,设置为正数为逆时针,反之为顺时针。

如果在全局脚本使用,仅会修改世界地图的图层,仅对方块和NPC有效。

迭代器

迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节。 - 来自百度百科

该函数所涉及的知识比较麻烦,这里直讲最基础的部分。如果需要看比较进阶的迭代器的使用,后续会提供一些脚本实例。

该函数可以应用到变量里,通过一系列调教可以使其发挥更好的效果。

注:该函数是一个返回型函数。

ItrCreate

此函数用于创建一个迭代器,这个迭代器能在指定的矩形区域内循环切换不同的对象。

dim a as integer = itrcreate(type, id, x, y, w, h)
参数名 介绍
type 迭代器选择的类型。
  • 1 - 方块
  • 2 - NPC
  • 3 - BGO(物件背景)
  • 4 - 流体
  • 5 - 传送点
  • 6 - 特效
  • 11 - 玩家屏幕中的方块
  • 12 - 活跃的NPC
id 迭代器的ID过滤器,如果没有ID过滤,则将其设置为0,否则迭代器将仅迭代具有相同图像文件ID的对象。

如果type为流体,使用流体作为过滤类型。 如果type为传送点,使用传送点作为过滤类型。

x 过滤器矩形范围的x坐标(起始坐标),迭代器仅迭代给定矩形区域内的对象。
y 过滤器矩形范围的y坐标(起始坐标),迭代器仅迭代给定矩形区域内的对象。
w 过滤器矩形范围的宽度,迭代器仅迭代给定矩形区域内的对象。
h 过滤器矩形范围的高度,迭代器仅迭代给定矩形区域内的对象。

ItrNext

通过之前创建的迭代器继续执行。返回所找到对象的永久ID。在对象中使用此ID,例如npc(index) 或block(index)。如果迭代器已结束,此函数将返回 0。

注意!你必须使用该函数call berase(0, itrid)来销毁迭代器,否则重启游戏之前这些迭代器无法工作。

如果游戏没有崩溃,但迭代器却停止工作,这意味着存在迭代器泄漏的情况,因为您在使用完迭代器后没有将其清除(这种情况会在同时存在超过 128 个迭代器时发生)。

dim id as integer = itrnext(itrid)
参数名 介绍
itrid 迭代器的ID。此值是通过itrcreate()提供的。 如果对象不存在,则返回值为0,并且迭代器将被销毁。

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)
参数名 介绍
id 要生成的 NPC ID。
x 生成NPC的x坐标
y 生成NPC的y坐标
sx 此NPC的初始水平速度。
sy 此NPC的初始垂直速度。
advset NPC 的额外值,详情请点击:NPC 的额外值(TeaScript)
cdata 创建NPC时的额外数据,详情见下文。

返回的永久ID将在创建的下一帧中生效。此外,NPC并不是在脚本执行的这一帧就立即被创建。

特别是,当参数id设置为-1时,可以将参数advset设置为NPC的永久ID,此功能将复制NPC。 如果源NPC是旧式NPC生成器,则此功能将创建具有生成器效果的重复NPC。如果源NPC不存在,则不会执行任何操作。

NCreateGroup

此函数用于创建一定数量的NPC。

call ncreategroup(id, x, y, xoffset, yoffset, count, angle, range, speed, advset)
参数名 介绍
id 要生成的 NPC ID。
x 生成NPC群的x坐标。
y 生成NPC群的y坐标。
xoffset 此NPC的x偏移位置。
yoffset 此NPC的y偏移位置。
count 生成的NPC的数量。
angle 生成NPC群的朝向角度。
range 生成NPC群的范围角度。(270为上。)
speed 生成NPC群的初始速度。
advset NPC 的额外值

NKill

此函数将清除NPC,当作为变量赋值,返回删除的NPC数量。

call nkill(index, rx, ry, rw, rh, id, effect, score)
dim a as integer = nkill(index, rx, ry, rw, rh, id, effect, score)
参数名 介绍
index 删除NPC的方式。
  • 0 - 删除id的NPC。
  • -1 - 删除接触矩形选择框的NPC。
  • -2 - 删除矩形选择框的所有NPC。
  • 大于0 - 删除指定的NPC index。
rx 删除NPC的矩形选择框的x坐标。(如果index的值为0,则该值设为0。)
ry 删除NPC的矩形选择框的y坐标。
rw 删除NPC的矩形选择框的宽度。
rh 删除NPC的矩形选择框的高度。
id 三种情况。
  • 如果index的值为-1或-2,则该值代表要删除id的NPC。
  • 如果index的值是0或其他,则该值设为0。.
  • 设置为0,删除全部NPC。
effect 删除NPC后是否显示击败特效,设置0为禁用效果,设置其他值为显示效果。
score 删除NPC后是否增加玩家的分数,设置0为禁用分数计算,设置其他值为正常计分。

星星币

SCSet

这个函数允许你改变或检查关卡中大星币的收集情况。

获取一颗大星币:

call scset(levelname,scid, 0)
参数名 介绍
levelname 大星币所处的关卡的文件名。
scid 大星币的编号,同大星币高级设置面板中的 IDN 参数。

检查一颗大星币的收集情况:

dim a as integer = scset(levelname,scid, 1)
参数 描述
levelname 大星币所处的关卡的文件名。
scid 大星币的编号,同大星币高级设置面板中的 IDN 参数。

取消一颗大星币的收集状态:

call scset(levelname,scid, 4)
参数 描述
levelname 大星币所处的关卡的文件名。
scid 大星币的编号,同大星币高级设置面板中的 IDN 参数。

取消关卡内所有大星币的收集状态:

call scset(levelname,0, 5)
参数 描述
levelname 大星币所处的关卡的文件名。

注意:若 scid 这个参数的数值超过 3,则可能会导致关卡内的大星币的收集情况出现混乱,请谨慎使用。

事件&脚本

TCreate

用来创建一个事件。

call tcreate(eventname, delay)
参数名 介绍
eventname 执行事件的名称。
delay 执行该事件需要等待的帧数。

TClear

用来删除一个正在调用的事件计时器。

call tclear(type, eventname)
参数名 介绍
type 要清除的计时器类型
  • 0- 清除特定计时器
  • 1- 清除所有计时器
eventname 需要清除的事件名,仅type参数为0时有效,如非该值,请设为0。

TCreateEX

在特定帧后执行本地/全局脚本(如果当前世界有对应的全局脚本)并将参数传递给脚本。

call tcreateex(scriptname, delay, param1, param2, param3)
参数名 介绍
scriptname 执行脚本的名称。
delay 执行该脚本需要等待的帧数。
param1 需要传递给sysval(param1)的值
param2 需要传递给sysval(param2)的值
param3 需要传递给sysval(param3)的值

EXEScript

执行一个本地/全局脚本。

call EXEScript(scriptname)
参数名 介绍
scriptname 执行脚本的名称。

调用此函数时,将立即执行给定脚本,并且将暂停主调脚本,直到给定脚本的执行完成为止。

Sleep

此函数用于暂停当前运行的脚本。只能由事件调用的脚本使用,如果用的 EXEScript 或由 NPC 调用的脚本将不起作用。如果在do ... loop里不插入该函数将会导致程序卡死。

call sleep(delay)
参数名 介绍
delay 停止的帧数

SpEvent

此函数用于触发一个特殊事件。

如何获取特殊事件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)

call spevent(id)
参数名 介绍
id 特殊事件ID,见下文。
特殊事件编号 (1.4.5)
编号 特殊事件名称 描述
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(Fire 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 切换黑色开关状态,即切换传送带方向(NPC-57)
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

此函数用于判断当前用户在键盘上输入的字符值,当对应 id 的按键按下去后,返回-1。

if keypress(id) then
    '...
end if

以下是例子,用于检测上键是否按下。

dim upKey as integer
do
  if upKey = 0 and keypress(-14) then
    call showmsg("Up pressed!")
  end 
  upKey = keypress(-14)
  call sleep(1)
loop
参数名 介绍
id 键盘的ASCII值,见下文,也可以参考网络上的ASCII与键盘对照表。

游戏内对应的键位如下。

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) 的按键。)

其他

Debug

此函数将文本输出到调试器。

call debug(string)
参数名 介绍
string 输出到调试器窗口的文本内容。

如果在编辑器中测试了关卡,则此函数会将字符串中的信息输出到Debugger中的调试窗口,否则将不会执行任何操作。 但是,为了获得更好的游戏性能,应在调试后删除所有“调试”功能。

BSet

详见 BSet (TeaScript)。

补充内容

字符

在call hudset("text:*", id, x, y, sasc, easc, rasc, npcid, color, -1)或是call TxtCreate(id, x, y, sasc, easc, cdata, lnum, fontid, flag, text)创建出来的文本里,sasc 和 easc 一般为以下几种。

  • {32,128}(基础ASCII字母,包含了一些标点符号,大写小写字母,阿拉伯数字)
  • {65,90}(大写字母)
  • {48,57}(阿拉伯数字)
  • {97,122}(小写字母)
  • {65,122}(包含大写和小写的字母)

特殊的,asc(10) 为换行符,asc(13) 为回车符。

rasc或lnum都表示该字体一行包含的字符个数,且尽量与图像的单行字符数相同。例如一个图像一行包含了16个字符,那对应的值为16。

NPC 的 CData

如果在ncreate()函数的cdata赋值,会产生下面的效果:

ID 效果 角度 无烟雾效果 是否属于 Spawned NPCs 图层
1 发射器 🡹 270° - √
2 发射器 🡸 180° - √
3 发射器 🡻 90° - √
4 发射器 🡺 0° - √
5 传送 🡹 270° - √
6 传送 🡸 180° - √
7 传送 🡻 90° - √
8 传送 🡺 0° - √
9 发射器 🡼 225° - √
10 发射器 🡿 135° - √
11 发射器 🡾 45° - √
12 发射器 🡽 315° - √
17 发射器 🡹 270° √ √
18 发射器 🡸 180° √ √
19 发射器 🡻 90° √ √
20 发射器 🡺 0° √ √
25 发射器 🡼 225° √ √
26 发射器 🡿 135° √ √
27 发射器 🡾 45° √ √
28 发射器 🡽 315° √ √

生成的 NPC 若属于 Spawned NPCs 图层,则在离屏后会直接被移除。

ID 效果
41 方向(右)
50 默认图层
51 友好

以下为最近新发现的数据,具体特性需进一步验证确定。

ID 效果
43 方向(右)
44 默认图层
7000
7001
45 默认图层保持右方向
7002 已破坏的方块图层
7004 无 / 新图层
9999 道具栏

已失效的脚本

以下脚本可能以前版本还能使用,但新版本被移除。

ShaderSet

此函数是一个在1.4.4出现过的未公开的函数,疑似测试遗留,作用是生成一个背景着色器特效,也可以对屏幕产生效果(有点类似1.4.5的一些SpEvent效果。)

由于该函数透漏信息量非常低,可能会因此不准确,需要更多的测试。

call shaderset(mode, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)

控制屏幕画面

mode 为 -1 时,控制屏幕画面。

call shaderset(-1, x, y, angle, xoffset, yoffset, shaketime, r, g, b, a)
参数名 介绍
x 玩家屏幕的中心点x位置。
y 玩家屏幕的中心点y位置。
angle 玩家屏幕以中心点旋转的角度。
xoffset 玩家屏幕的横向缩放大小。(360为1个周期(1x))(仅震动特效有效,x的值也会影响缩放中心,呈贝塞尔曲线向量?)
yoffset 玩家屏幕的纵向缩放大小。(360为1个周期(1x))(仅震动特效有效,y的值也会影响缩放中心,呈贝塞尔曲线向量?)
shaketime 玩家屏幕震动效果持续帧数。
r 控制玩家屏幕着色器的红颜色值。
g 控制玩家屏幕着色器的绿颜色值。
b 控制玩家屏幕着色器的蓝颜色值。
a 控制玩家屏幕着色器的透明度值。

控制背景着色器

mode 为 0 时,控制背景着色器。

call shaderset(-1, id, r, g, b, a, x, y, nspeed, sx, sy)
参数名 介绍
id BGP(场景背景)的ID。
r 控制背景着色器的红颜色值。
g 控制背景着色器的绿颜色值。
b 控制背景着色器的蓝颜色值。
a 控制背景着色器的透明度值。
x 背景着色器的中心点x位置。
y 背景着色器的中心点y位置。
nspeed 背景着色器的旋转速度。
sx 两种情况。
  • 当nspeed的值不为0时,背景着色器在屏幕画面上的x位置。
  • 当nspeed的值为0时,背景着色器的横向速度。
sy 两种情况。
  • 当nspeed的值不为0时,背景着色器在屏幕画面上的y位置。
  • 当nspeed的值为0时,背景着色器的纵向速度。

与场景背景不同的是,此函数会在屏幕画面上渐入过渡渲染一个背景图。可以搭配一些特定的背景制作更生动的背景效果(当然,ShaderSet生成的背景不会随着玩家场景位置的改变而改变。)

由于不可抗力因素,该函数在1.4.5被移除,不过你仍然可以尝试创建一个自定义函数来代替此函数。

引用

SMBx Scripting Help (放在SMBX根目录的文件)

SMBX脚本猎手版

https://wohlsoft.ru/pgewiki/Functions_(TeaScript)

  1. ↑ 需要验证:在 Linux 上的情况。