函数 (TeaScript)
此页面主要介绍函数的使用。
如需要查看“自定义函数”,请前往:函数(语法)。
如需要查看“返回型函数”,请前往:返回型函数。
函数是指一段可以直接被另一段程序或代码引用的程序或代码。
在 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(如果 |
| 忽略 | 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。
如果为自定义音频,需要先执行 |
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
|
高级值,含义如下:
|
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
|
|
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
|
此位图的坐标系。
|
flag2
|
|
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
|
清除类型。
|
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
|
是否启用该特效的重力系统。
|
advset
|
额外数值。只对 effect-77 和 effect-79 有效。 |
图层控制
LMove
此函数用于移动一个图层。
call lmove(layername, px, py, type)
| 参数名 | 介绍 |
|---|---|
layername
|
图层名。 |
px
|
移动此图层的水平速度或相对x坐标。 |
py
|
移动此图层的垂直速度或相对y坐标。 |
type
|
移动图层的类型。
|
以下是例子。
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
|
改变图层可视性。
|
advset
|
显示隐藏图层时是否播放烟雾特效。
|
以下是例子。
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
|
迭代器选择的类型。
|
id
|
迭代器的ID过滤器,如果没有ID过滤,则将其设置为0,否则迭代器将仅迭代具有相同图像文件ID的对象。
如果 |
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的方式。
|
rx
|
删除NPC的矩形选择框的x坐标。(如果index的值为0,则该值设为0。)
|
ry
|
删除NPC的矩形选择框的y坐标。 |
rw
|
删除NPC的矩形选择框的宽度。 |
rh
|
删除NPC的矩形选择框的高度。 |
id
|
三种情况。
|
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
|
要清除的计时器类型
|
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,见下文。 |
| 编号 | 特殊事件名称 | 描述 |
|---|---|---|
| 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
|
两种情况。
|
sy
|
两种情况。
|
与场景背景不同的是,此函数会在屏幕画面上渐入过渡渲染一个背景图。可以搭配一些特定的背景制作更生动的背景效果(当然,ShaderSet生成的背景不会随着玩家场景位置的改变而改变。)
由于不可抗力因素,该函数在1.4.5被移除,不过你仍然可以尝试创建一个自定义函数来代替此函数。
引用
SMBx Scripting Help (放在SMBX根目录的文件)
SMBX脚本猎手版
https://wohlsoft.ru/pgewiki/Functions_(TeaScript)
- ↑ 需要验证:在 Linux 上的情况。
| 请注意,这里以下所有的条目均以 SMBX 1.4.5 Patch 31.1 为基底。 | |
|---|---|
| 基础 | 语法 | 函数 | 回调型函数 |
| 组件 | BGP (大背景) | 背景物件 | 位图 | 方块 | 角色 | 特效 | 流体 | 计时器 | NPC | 文本 | 传送点 | 系统变量 |
| 技术性 | 额外值 | BSet 函数 | Playnote 函数 | 特殊图层 | 未知函数 | 自动运行事件 | 编辑器函数 |

