Magic Book of Word Game World
《文字游戏世界》魔法书
最新更新日期:2026/3/22;游戏版本:v1.9.82
正式版已在 Steam 推出,详见:《文字游戏世界》-Steam
《文字游戏世界》中黑魔法(原始指令)的wiki*(非官方!非官方!非官方!)*
旨在官方出之前提供一个简单的查询文档,以便开发关卡!
注:本文档所有指令是通过关卡源文件推测的,并非 100% 经过测试!!!
感谢 “文字游戏世界” QQ 群的大伙查缺补漏,以及挖掘机制,谢谢!
本文档并不针对零基础用户编写,默认您已经了解编辑器的基本逻辑
目录:
事件
原版可添加事件
原版不可添加事件
特殊写法
实用工具
-
by TNOT
-
by 艺素馒头
-
by 艺素馒头
友情链接:
…(待补充)
主要编写者:TNOT(tnot123@outlook.com)
特别感谢:艺素馒头
如有问题或意见可以联系我,或在官方Q群@我。
当然也欢迎提交pr进行修改/编写!
物件操作
该页面展示的黑魔法均为在游戏内插入后的默认参数
传送器
@[transport_event] {
"target": null,
"pos": [
0,
0
]
}
官方示例(标靶传送魔法):
@[transport_event] {
"target": "魔法傀儡",
"pos": ["v:目标x","v:目标y"]
}
溶解器
@[dissolve_event] {
"target": null
}
触发物件
@[callback_trigger] {
"target": null
}
播放动画
@[play_animation] {
"target": null
}
淡入淡出
@[event_fade_to] {
"target": "Player",
"opacity": 0,
"time_sec": 1
}
参数说明:
target:目标物件名称,必填。opacity:目标不透明度,可选。time_sec:淡入/淡出持续时间(秒),可选。
向上/下/左/右走一格
此类 move 指令只能通过@[move_route]调用,具体使用方法见 移动
@[move_up]
@[move_down]
@[move_left]
@[move_right]
走到目标位置
此类 move 指令只能通过@[move_route]调用,具体使用方法见 移动
@[move_to_point] {
"pos": [
0,
0
]
}
走到目标物件
此类 move 指令只能通过@[move_route]调用,具体使用方法见 移动
@[move_to_event] {
"toTarget": null
}
设定碰撞
@[set_through] {
"target": null,
"isThrough": true
}
改变玩家字面
@[set_player_text] "我"
改变玩家颜色
@[set_player_color] "#ffffff"
改变玩家不透明度
@[set_player_opacity] 0.5
打字机
打字
全参数默认模板(纯 JSON):
@[type_parallel] {
"texts": "你好,世界!",
"fixed": false,
"pos": [0, 0],
"tags": [],
"has_se": true,
"char_type": null,
"has_animation": true,
"layer": 1,
"can_skip": true,
"need_accept": true,
"wait": true,
"is_dialog_end": false,
"refTexts": [],
"is_on_top_of_player": true,
"offset": [0, 0],
"label_settings": {}
}
带注释的版本:
@[type_parallel] {
"texts": "你好,世界!", # 打字内容(支持 <标签>文本</标签> 与 字{参数对象} 写法)
"fixed": false, # 是否使用屏幕坐标(false为地图坐标)
"pos": [0, 0], # 打字位置 [x, y]
"tags": [], # 标签/组列表(可用于后续 fade_group、dissolve_group 等组操作)
"has_se": true, # 是否播放打字音效
"char_type": null, # 打字机音效类型(null为默认)
"has_animation": true, # 是否显示打字动画
"layer": 1, # 图层:0=背景,1=主要,2=前景
"can_skip": true, # 是否可以跳过
"need_accept": true, # 是否需要确认
"wait": true, # 是否等待打字结束
"is_dialog_end": false, # 是否启用实心游标(常用于对话结束前的最后一句)
"refTexts": [], # 参考文本列表(用于成句检测)
"is_on_top_of_player": true, # 主要图层时是否显示在玩家上方
"offset": [0, 0], # 位置微调偏移 [x, y]
"label_settings": {} # 标签独立样式设置
}
缩写:@[type]
注:打字机中的"texts"可以有如下写法
"v:变量名":输出指定变量的值"s:开关名":输出指定开关的值"转移[物件名称]到这个地方。":转移物件
type_parallel 还支持以下高级参数:
-
tags:标签/组列表。打字字符会加入这些组,可配合fade_group、dissolve_group做统一处理;dissolve_group是溶解组内物件,不是解散组。 示例:@[type] {"texts":"我马上要消失喽!","tags":["b"]} @[fade_group] {"group": "b","opacity": 0,"time_sec": 1.0} -
offset:[x, y],对打字位置进行微调(像素偏移),可搭配变量使用。 -
texts:打字文本,除普通文本外,还支持以下扩展写法:- 标签样式片段:
<标签名>...</标签名>,并在label_settings中定义同名标签参数。 示例:"正常说话||<p>诗人说话</p>||<s>蛇妖说话</s>" - 逐字独立参数:在某个字后追加
{...},可将该字独立并指定参数。 示例:"老{'name':'教学词1','opacity':0}||繁{'tags':['cn_text:繁简']}" - 插入物件参数:
[物件{'tags':['标签']}]。 可用于“删整句但保留该物件”等场景。
- 标签样式片段:
-
label_settings:对象,用于为文本中的特定标签设置独立的样式与音效。 在texts中使用<标签名>...</标签名>包裹需要独立设置的片段,然后在label_settings中定义同名标签的属性。 每个标签可设置:text_color:文字颜色(十六进制 RGBA,如"#ffff00ff")tags:该片段独有的标签列表char_type:该片段使用的打字机音效(见下方char_type可选值)
示例:
"label_settings": { "p": { "char_type": "poet" }, "s": { "char_type": "snake" } } -
texts中逐字参数可更改项:{'name':'名称'}{'text':'字面'}{'opacity':1}{'tags':['cn_text:繁简']}{'tags':['label #1']}{'layer':'back'}
注意:在插入物件场景下,上述参数通常只有
tags能生效,其它参数不生效。 -
char_type:指定打字机音效,可选值:"princess"(公主)"dragon"(龙)"snake"(蛇)"poet"(诗人)"giant_l"(巨人左)"giant_r"(巨人右)"none"(无音效)null(使用默认音效)
-
layer:图层,可用数字表示:0:背景层1:主要层(默认)2:前景层 亦可用字符串"mid"表示主要层。
-
is_on_top_of_player:当layer为主要层时,若为true则文本显示在玩家上方。 -
wait:若为true,事件将等待打字结束后才继续执行后续逻辑。 -
is_dialog_end:若为true,启用实心游标,通常用于一段对话结束前的最后一句。
在此推荐由
艺素馒头制作的黑魔法打字机编辑器,其拥有强大的可视化打字机黑魔法指令编辑功能。 黑魔法打字机编辑器
清除
@[clear_typed] ""
若标签为空,则默认为清除本物件触发的打字机事件。
能力设定
该页面展示的黑魔法均为在游戏内插入后的默认参数
拆组字
@[set_split_power] true
删字
@[set_backspace_power] true
推字
@[set_push_power] true
复原地图
@[set_ctrl_z_power] true
游戏机制
该页面展示的黑魔法均为在游戏内插入后的默认参数
宣告拆字规则
@[append_split_rule] {
"from": [
null
],
"to": [
null,
null
]
}
注:指定字面:"字面",指定名字:"$名字"
宜告组字规则
@[append_merge_rule] {
"from": [
null,
null
],
"to": null
}
注:指定字面:"字面",指定名字:"$名字"
宣告成句规则
@[append_sentence_rule] {
"text": "成句",
"has_hint": false,
"has_animation": true,
"memory": [],
"progress": 0,
"level": 5
}
取消成句规则
@[delete_sentence_rule] {
"text": "成句"
}
点唱机
该页面展示的黑魔法均为在游戏内插入后的默认参数
播放背景音乐
@[editor_play_bgm] {
"type": null
}
停止背景音乐
@[editor_stop_bgm]
播放音效
@[editor_play_se] {
"type": null
}
镜头
该页面展示的黑魔法均为在游戏内插入后的默认参数
跟随玩家
@[set_camera_follow_player] { true }
特定方向移动
@[pan_camera] {
"parameter": "position:x",
"add": 60,
"time_sec": 1,
"target": "Node/MainMap/Player/Camera3D",
"target_type": "path",
"wait": true
}
移动到目标位置
@[pan_camera_to_point] {
"pos": [
0,
0
],
"time_sec": 1,
"wait": true
}
震动
@[start_constant_shake] {
"f": 20,
"d": 0.5
}
停止震动
@[stop_constant_shake]
画面渐变至颜色
@[fade_screen] {
"color": "#000000",
"alpha": 0,
"time_sec": 1
}
提示
该页面展示的黑魔法均为在游戏内插入后的默认参数
叮!
@[event_end_hint]
物件呼吸灯
@[add_loop_light] {
"target": null
}
停止物件呼吸灯
@[remove_loop_light] {
"target": null
}
强调位置
@[highlight] {
"pos": [
0,
0
],
"text_count": 1,
"is_h": true
}
改变选单提示
@[set_editor_project_info] {
"title": "",
"description": "",
"hint_1": "",
"hint_2": "",
"hint_3": ""
}
系统
该页面展示的黑魔法均为在游戏内插入后的默认参数
延迟固定时间
@[wait] 50
注:单位为 0.02s
如需要无阻塞延迟,参见打字机的高级用法中的利用延迟符号实现无阻塞延迟
延迟随机时间
@[wait_random_in_range] {
"value": [
0,
0
],
"option": {
"expend": true
}
}
直接结束事件
@[break]
游戏存挡
@[editor_save]
游戏读挡
@[editor_load] {
"trans_ani": "fade"
}
玩家死亡
@[kill_player] {
"death_sentence": ""
}
切换地图
@[change_editor_map] {
"name": "",
"fade": true
}
外部连结
@[editor_open_url] {
"url": ""
}
结束游戏
@[editor_end_game] {
"texts": "游戏结束,感谢您的游玩",
"pos": [
10,
8
]
}
黑魔法
@[#raw_commend] {
"value": ""
}
你真的有必要用这个吗?
代数
注:需要代入ID的指令不建议单独使用,最好用黑魔法提取器提取再使用
设定开关
@[set_switch] [
"name",
"value"
]
反转开关
@[toggle_switch] {
"switchId": null
}
设定变量
@[set_variable] [
"name",
"value"
]
増减変量
@[add_variable] {
"varId": null,
"varValue": 0
}
储存物件位置
@[save_event_pos] {
"target": null,
"x": null,
"y": null
}
官方示例:
@[save_event_pos] {
"target":"魔法傀儡",
"x":"傀儡x",
"y":"傀儡y"
}
条件
该页面展示的黑魔法均为在游戏内插入后的默认参数
条件判断 #if
根据条件表达式的结果决定是否执行内部的指令序列。
类型一:变量条件 type: "var"
对变量的数值进行比较判断。
@[if] {
"type": "var",
"varOption": {
"varId": "变量ID",
"operation": "==",
"varValue": 0
}
}
参数说明:
| 参数 | 说明 | 可选值 |
|---|---|---|
type | 条件类型 | "var" |
varOption.varId | 变量ID | 字符串形式的ID |
varOption.operation | 比较操作符 | ==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于) |
varOption.varValue | 比较的数值 | 数字 |
示例:
@[if] {
"type": "var",
"varOption": {
"varId": "score",
"operation": ">=",
"varValue": 100
}
}
类型二:开关条件 type: "switch"
对开关(布尔)变量进行判断。
@[if] {
"type": "switch",
"switchOption": {
"varId": "开关ID",
"operation": "==",
"varValue": false
}
}
参数说明:
| 参数 | 说明 | 可选值 |
|---|---|---|
type | 条件类型 | "switch" |
switchOption.varId | 开关ID | 字符串形式的ID |
switchOption.operation | 比较操作符 | ==(等于)、!=(不等于) |
switchOption.varValue | 比较的布尔值 | true / false |
示例:
@[if] {
"type": "switch",
"switchOption": {
"varId": "door_open",
"operation": "==",
"varValue": true
}
}
省略写法(待补充)
使用简短的表达式语法,直接在双引号内写条件表达式:
@[if] "条件表达式"
表达式语法(已验证):
- 变量引用:
v:变量名 - 比较操作符:已验证支持
>、<、>=、<=、== - 逻辑运算符:
&&(并且)在部分情况下可用 - 逻辑运算符:
||(或者)在部分情况下可用
表达式语法(未验证/存在问题):
- 比较操作符:
!=(不等于)- 测试无输出 - 括号:
(、)用于分组 - 测试时同时输出 true 和 false(存在问题)
官方示例:
@[if] "v:傀儡x>16&&v:傀儡y<9"
已验证的示例:
@[if] "v:变量A>0"
@[if] "v:变量A>=3"
@[if] "v:变量A==3"
// 部分场景有效
@[if] "v:变量A>0&&v:变量B<10"
// 部分场景有效
@[if] "v:变量A>5||v:变量B>10"
未验证/存在问题的示例:
// 不等于
@[if] "v:变量A!=3"
// 括号分组
@[if] "(v:变量A>0&&v:变量A<10)||(v:变量B>0&&v:变量B<10)"
希望有大佬测试并补充。
随机条件 #if_random
随机决定是否执行后续指令。
@[if_random]
使用示例:
@[if_random]
// 概率执行的指令
@[end_if]
否则执行 #else
当 #if 条件不满足时执行的指令序列。
@[else]
结束条件 #end_if
标记条件判断块的结束。
@[end_if]
备注
注释
@[comment] { "" }
特殊事件
名称为非官方命名,请以官方为准
大多事件通过分析关卡 JSON 文件得来
2026/02/24:通过官方发布的黑魔法教学关卡获得了更多指令
2026/02/27:新增大量黑魔法指令,包括物件操作、组操作、精灵动画、音效音乐、地图操作等(感谢 艺素馒头)
2026/03/19、20:通过解包《文字游戏》一代得到大量官方的黑魔法补充(感谢 艺素馒头)
章节目录
无操作指令
无操作指令
类似编程语言中的// do nothing或pass,会被解析成## ignore_command。
传入的任何参数都会被忽略,可以当作注释使用。
@[#ignore_command]
调试指令
调试指令
打印调试
@[print] "字符串"
打印指定字符串到控制台,仅用于调试 purposes。
设置事件参数
设置事件参数
@[set_event_params] {
"target": "物件名称",
"需要更改的参数": 更改后的参数
}
可以设置指定物件的参数。以下是部分参数的列表。
target 取值:可以是 "self"(该物件本身)、"player"(玩家)或具体的物件名称。
| 属性名(英文) | 中文说明 | 类型 | 示例值 |
|---|---|---|---|
text | 显示的文字内容 | 字符串 | "新文字" |
hasBackground | 是否有背景框 | 布尔值 | true / false |
opacity | 透明度(0~1) | 数字 | 0.5 |
eventTriggerAction | 触发方式 | 字符串 | 游戏开始后"auto" / 玩家调查后"press" / 玩家触碰后"touch" / 被物件触发"trigger" |
existCondition | 触发条件 | 字符串 | "s:switch_name_触发物件==true" |
isOnTopOfPlayer | 是否显示在角色上方 | 布尔值 | true |
visible | 是否可见 | 布尔值 | true / false |
备注:
text参数仅适用于单个字符(一个字)的情况。visible设置为false可以让物件消失。
存在的问题(暂不清楚是否修复):
- 更改字面后物件会移动至背景,修改层级参数无效。
- 无法修改位置,可以用传送器代替。
- 无法修改物件是否可以被推删拆组。
添加到组
添加到组
@[add_to_group] {
"target":"物件名称",
"group":"组名"
}
补充说明:
"group"|string| 特殊组名:cn_text:后接着的第一个字是物件字面中要替换的字,第二个字是简体字下的字。
组操作
组操作
组内淡入淡出
配合“添加到组“功能使用,让组内所有物件淡入淡出。
@[fade_group] {
"group": "组名",
"opacity": 0,
"time_sec": 1
}
参数说明:
group:组名。opacity:目标透明度(0~1)。time_sec:动画持续时间(秒)。
溶解组
溶解组内的所有物件,配合打字机 tags。
@[dissolve_group] {"group": "组名"}
从组中删除
将指定物件从组中移除。
@[remove_from_group] {
"target": "物件名称",
"group": "组名"
}
物件操作
物件操作
删除物件
从关卡内直接删除指定的物件。
@[remove_event] {
"target": "物件名称"
}
target 取值:可以是 "self"(该物件本身)、"player"(玩家)或具体的物件名称。
让物件不存在
效果和删除物件相近,让指定物件从场景中变为不存在状态。
@[unexist_event] {
"target": "物件名称"
}
崩塌物件
让指定物件触发垮塌动画效果。
@[crash_event] {
"target": "物件名称"
}
物件回溯
将指定的物件回溯到游戏前原来的位置,并且让它重新执行事件。如果触发模式为“游戏开始后“的话,无法回溯被删除和被溶解的状态,也不会回溯透明度。
@[refresh_event] {
"target": "物件名称"
}
物件锁定
锁定指定的物件,使其无法被移动或触发。 (可能官方没有做完,暂时无法生效)
@[lock_event] {
"target": "物件名称",
"lock": true
}
物件克隆
指定一个物件作为母物件,克隆出来的物件会继承母物件的所有属性。所有选项都不是必填项,如果不传任何参数,物件会在自己的位置克隆自己。
@[clone_event] {
"target": "物件名称",
"position": [X, Y],
"text": "字面"
}
参数说明:
target:要克隆的母物件名称,可选。position:克隆后的位置坐标,可选。text:克隆后显示的文字内容,可选。
创建物件
凭空创建一个新物件。理论上可传入多数属性,但创建出来的物件通常没有碰撞体。
@[create_event] {
"text": "字面",
"pos": [X, Y],
"tags": "[]",
"name": "物件名称",
"layer": "mid"
}
参数说明:
text:物件显示文字。pos:物件生成位置坐标。tags:物件标签字符串。name:物件名称。layer:所在图层(如mid)。
强制删字
强制删字
播放删字动画
@[play_backspace_fail_animation]
播放删字的动画效果。
删字事件
@[backspace_event] {"target": "self"}
对指定物件执行删字。
示例序列:
@[play_backspace_fail_animation]
@[wait] 60
@[backspace_event] {"target": "self"}
这段脚本会先播放删字动画,等待 1.2 秒,然后对自身执行删字操作。
移动
移动
开始移动
@[move_route] {
"target": "物件名称",
"wait": true
}
补充说明:
"wait"|boolean|是否阻塞式执行。若为true,则脚本会暂停,直到移动动作完成。
为指定角色执行一个或多个移动/控制指令,并可选择是否阻塞后续脚本执行。需要与@[end_move_route]配合使用。
@[move_route]本身不直接执行动作,而是包裹一组移动指令。
停止移动
@[end_move_route]
移动控制指令
以下指令可以在 @[move_route] 和 @[end_move_route] 之间使用,控制物件的移动行为。
| 指令 | 参数 | 说明 | 示例 |
|---|---|---|---|
@[set_through] | true / false | 设置穿透状态,当为 true 时物件移动不会产生碰撞 | @[set_through] true |
@[move_up] | 无 | 向上移动一格 | @[move_up] |
@[move_down] | 无 | 向下移动一格 | @[move_down] |
@[move_left] | 无 | 向左移动一格 | @[move_left] |
@[move_right] | 无 | 向右移动一格 | @[move_right] |
@[move_straight] | 2 / 4 / 6 / 8 | 按方向码直线移动一格(2=↓, 4=←, 6=→, 8=↑) | @[move_straight] 2 |
@[move_random] | 无 | 随机方向移动一格 | @[move_random] |
@[move_toward_player] | 无 | 向玩家方向移动一格 | @[move_toward_player] |
@[move_toward_event] | "目标物件名称" | 向指定物件移动一格 | @[move_toward_event] "目标" |
@[jump] | [x, y](相对坐标) | 向相对坐标跳跃,x 和 y 为整数 | @[jump] [1,0](向右一格) |
@[jump_to_point] | [x, y](绝对坐标) | 跳跃到地图上的指定坐标 | @[jump_to_point] [15,8] |
@[jump_random] | 无 | 随机跳跃到上下左右一格 | @[jump_random] |
@[move_to_event] | "目标物件名称" | 直接移动到指定物件的位置 | @[move_to_event] "目标" |
@[move_to_point] | [x, y](绝对坐标) | 移动到地图上的指定坐标 | @[move_to_point] [15,8] |
@[move_straight_to_point] | [x, y](绝对坐标) | 直线移动到目标点,不会拐弯(即使碰到墙也不会绕路) | @[move_straight_to_point] [15,8] |
额外的,这些虽然不是移动指令,但也可以加在这之间使用。
| 指令 | 参数 | 说明 | 示例 |
|---|---|---|---|
@[set_move_speed] | 整数 | 设置物件移动速度 | @[set_move_speed] 1 |
@[wait] | 数字 | 等待指定时长(若 "wait": false 则不会阻塞) | @[wait] 30 |
@[wait_random_in_range] | [min, max] | 随机等待一个时长区间(若 "wait": false 则不会阻塞) | @[wait_random_in_range] [1,10] |
@[set_switch] | ["name", "value"] | 设置开关值 | @[set_switch] ["开关A", true] |
@[set_variable] | ["name", "value"] | 设置变量值 | @[set_variable] ["变量B", 114514] |
@[toggle_switch] | {"switchId": null} | 切换指定开关状态 | @[toggle_switch] {"switchId": null} |
@[add_variable] | {"varId": null, "varValue": 0} | 给变量增加数值 | @[add_variable] {"varId": null, "varValue": 1} |
@[play_se] | {"path":"...","db":0,"pan":0} | 播放音效 | @[play_se] {"path":"res://Sounds/...","db":0,"pan":0} |
@[queue_free] | 无 | 销毁当前物件 | @[queue_free] |
@[set_visible] | true / false | 设置该物件是否可见 | @[set_visible] false |
@[fade_to] | {"opacity":1,"time_sec":1} | 淡入淡出到指定透明度 | @[fade_to] {"opacity":1,"time_sec":1} |
@[set_dead_zone] | [x1, y1, x2, y2] 或不填 | 设置死区;不指定参数可视为取消 | @[set_dead_zone] [0,0,31,17] |
@[set_move_zone] | [x1, y1, x2, y2] 或不填 | 设置移动区域;不指定参数可视为取消 | @[set_move_zone] [14,7,17,10] |
@[set_z_index] | 数字 | 设置物件显示优先级 | @[set_z_index] 1 |
@[set_can_pass_group] | "组名" | 允许该物件可通过包含在组里的物件 | @[set_can_pass_group] "组A" |
示例:用黑魔法来让物件↑↑↓↓←→←→。
@[move_route] {"target": "物件A","wait": true}
@[move_up]
@[move_up]
@[move_down]
@[move_down]
@[move_left]
@[move_right]
@[move_left]
@[move_right]
@[end_move_route]
通过这个能让黑魔法编辑移动更为便捷,不需要为每个移动指令都单独指定物件。
循环移动路径
用于为物件设置一个循环执行的移动路线,物件会自动重复执行指定的移动指令序列。
@[set_event_loop_move_route] {
"target": "物件名称",
"loop_move_route": "[...]"
}
参数说明:
target:目标物件的名称。loop_move_route:一个 JSON 数组,包含一系列移动指令对象。每个指令对象格式为{"command":"指令名称", "parameters":[参数]}。
支持的指令与“移动控制指令”相同,例如 move_up、move_random 等,还可以使用 set_move_zone 来限定移动范围。
示例:
- 简单矩形循环:让物件按上→右→下→左的顺序循环移动。
@[set_event_loop_move_route] {
"target": "物件A",
"loop_move_route": "[
{\"command\":\"move_up\"},
{\"command\":\"move_right\"},
{\"command\":\"move_down\"},
{\"command\":\"move_left\"}
]"
}
- 范围内随机移动:将物件的移动范围限定在指定矩形区域内,然后执行随机移动。
@[set_event_loop_move_route] {
"target": "物件A",
"loop_move_route": "[
{\"command\":\"set_move_zone\", \"parameters\":[14, 7, 17, 10]},
{\"command\":\"move_random\"}
]"
}
其中 set_move_zone 的参数为 [左上角x, 左上角y, 右下角x, 右下角y],坐标单位为格子。
- 停止循环路径:将移动范围设置为全地图(或足够大的区域),使物件可以自由移动(实际上相当于取消限定范围)。
@[set_event_loop_move_route] {
"target": "物件A",
"loop_move_route": "[{\"command\":\"set_move_zone\", \"parameters\":[0,0,31,17]}]"
}
注意:
- 循环移动路径会一直重复执行,直到被新的
set_event_loop_move_route覆盖或物件被移除。 - 该指令不需要放在
@[move_route]和@[end_move_route]之间,它是一个独立的事件。
位移补间动画
位移补间动画
用于平滑过渡物件参数的动画指令,可以控制位置、透明度、缩放等属性的变化。
@[tween_parameter] {
"target": "物件名称",
"parameter": "参数路径",
"add": 0,
"time_sec": 1,
"transition_type": "TRANS_LINEAR",
"ease_type": "EASE_IN",
"wait": false
}
参数说明
| 参数名 | 类型 | 说明 | 可选值 | 示例 |
|---|---|---|---|---|
target | 字符串 | 目标物件的名称 | 任意有效物件名 | "物件A" |
parameter | 字符串 | 要补间的参数路径,支持 position:x、position:y、opacity、scale:x、scale:y 等 | 取决于物件支持的参数 | "position:y" |
add | 数字 | 相对增加值,与当前值相加得到目标值。与 value 二选一。 | 任意数字 | -120 |
value | 数字 | 绝对目标值,直接设置参数到该值。与 add 二选一。 | 任意数字 | 300 |
time_sec | 数字 | 动画持续时间(秒) | 正数 | 0.5 |
transition_type | 字符串 | 过渡曲线类型 | TRANS_LINEAR、TRANS_SINE、TRANS_QUINT 等 | "TRANS_SINE" |
ease_type | 字符串 | 缓动方向 | EASE_IN、EASE_OUT、EASE_IN_OUT、EASE_OUT_IN | "EASE_OUT" |
wait | 布尔值 | 是否阻塞式执行(等待动画完成才继续执行后续指令) | true / false | true |
注意事项
- 若同时指定
add和value,优先使用value。 transition_type与ease_type组合可产生丰富的动画效果,具体效果需在游戏中实测。wait: true时,脚本会暂停直到动画完成;wait: false时,动画在后台播放,脚本继续执行。- 如果补间类型不是线性,千万不要把时间填0,不然游戏就会一直除以0卡死。
停止位移补间动画
用于中断当前正在执行的 @[tween_parameter] 动画。
@[stop_tween_parameter]
示例
上下弹跳效果
@[tween_parameter] {
"target": "物件A",
"parameter": "position:y",
"add": -120,
"time_sec": 0.5,
"transition_type": "TRANS_SINE",
"ease_type": "EASE_OUT",
"wait": true
}
@[tween_parameter] {
"target": "物件A",
"parameter": "position:y",
"add": 120,
"time_sec": 0.5,
"transition_type": "TRANS_SINE",
"ease_type": "EASE_IN",
"wait": true
}
这两个指令先后执行,会让物件先向上移动 120 像素(缓出),再向下移动 120 像素(缓入),形成弹跳感。
淡出并缩小
@[tween_parameter] {
"target": "物件B",
"parameter": "opacity",
"value": 0,
"time_sec": 1,
"transition_type": "TRANS_QUINT",
"ease_type": "EASE_OUT",
"wait": false
}
@[tween_parameter] {
"target": "物件B",
"parameter": "scale:x",
"value": 0.5,
"time_sec": 1,
"transition_type": "TRANS_QUINT",
"ease_type": "EASE_OUT",
"wait": false
}
同时淡出并横向缩小,不阻塞脚本。
成句动画
成句动画
用于播放成句判定动画的事件。
@[sentence_legal_animation] {
"pos": [15,8], ## 动画起始位置坐标 [x, y]
"text_count": 3, ## 共几个字
"is_h": false, ## 是否为横向
"sectence_width": 2, ## 断句长度
"progress": -1, ## 0~5,不同音效,0代表完成,-1为错误,-2为彩蛋
"level": 5 ## 5的时候会全屏幕闪
}
参数说明
| 参数名 | 类型 | 说明 | 示例值 |
|---|---|---|---|
pos | 数组 | 动画起始位置坐标 [x, y] | [15,8] |
text_count | 整数 | 句子中的字数 | 3 |
is_h | 布尔值 | 是否为横向排列 | false |
sectence_width | 整数 | 断句长度(每行字数) | 2 |
progress | 整数 | 进度等级:0~5 对应不同音效,0 表示完成,-1 表示错误,-2 表示彩蛋 | -1 |
level | 整数 | 动画强度级别,5 时全屏幕闪烁 | 5 |
精灵动画
精灵动画
播放一次性动画
播放指定物件的一次性动画,播放完成后自动停止。
@[play_sprite_animation] {
"target": "物件名称",
"path": "anim_001.png",
"frame_count": 30,
"time_sec": 1,
"reverse": false,
"wait": false
}
参数说明:
target:目标物件名称。path:动画资源路径。frame_count:播放帧数。time_sec:播放时间(秒)。reverse:是否倒序播放,可选,默认为false。wait:是否等待动画完成,可选,默认为false。
播放循环动画
播放指定物件的循环动画,会无限循环播放。
@[set_loop_sprite_animation] {
"target": "物件名称",
"path": "",
"frame_count": 30,
"time_sec": 1,
"keyframes": []
}
参数说明:
target:目标物件名称。path:动画资源路径。frame_count:播放帧数。time_sec:播放时间(秒)。keyframes:关键帧数组,在指定帧执行命令,可选。
取消物件动画
停止指定物件的当前动画。
@[clear_sprite_animation] {
"target": "物件名称"
}
补间动画
对物件进行补间动画,控制位置和旋转变化。
@[tween_word_sprite] {
"target": "物件名称",
"position": [X, Y],
"rotation": 0,
"time_sec": 1
}
参数说明:
target:目标物件名称。position:目标位置坐标,坐标单位为 90 像素一格。rotation:旋转角度,可选。time_sec:动画持续时间(秒)。
物件颤抖
让物件在一段时间内反复抖动。常见于剧情演出场景。
@[shake_event] {
"frame": 300,
"distance": 10
}
参数说明:
frame:震动持续帧数。distance:每次震动的移动距离。
音效
音效
播放音效
在当前位置播放指定的音效文件。
@[play_se] {
"path": "res://Sounds/...",
"db": 0,
"pan": 0
}
参数说明:
path:音效文件路径(对应一代,如开门音效:res://Sounds/se/door_open_1.wav,参考:隐藏音频路径索引)。db:音量大小,可选,默认值为 0。pan:声道平衡,负数为左声道,正数为右声道,可选,默认值为 0。
在目标位置播放音效
在指定物件的位置播放音效,适合用于 3D 空间音效效果。
@[play_se_with_position] {
"target": "物件名称",
"path": "res://Sounds/se/sword_swing_fail_1.wav",
"loop": false,
"max_dist": 800
}
参数说明:
target:目标物件名称,音效将从该物件位置播放。path:音频路径(参考:隐藏音频路径索引)。loop:是否保持循环,true为循环,否则只播放一次。max_dist:声音传播距离。
音乐
音乐
播放音乐
播放指定的背景音乐。
@[play_bgm] {
"path": "音频路径",
"db": 0,
"pan": 0
}
参数说明:
path:音频文件路径(参考:隐藏音频路径索引)。db:音量大小,可选,默认值为 0。pan:声道平衡,负数为左声道,正数为右声道,可选,默认值为 0。
改变音乐
切换当前播放的背景音乐。
@[change_bgm] {
"has_bgm": false,
"path": "音频路径"
}
参数说明:
has_bgm:是否有背景音乐,设为false可停止当前音乐。path:音频文件路径,可选(参考:隐藏音频路径索引)。
音乐淡入
音乐淡入播放。
@[fade_in_bgm] 1
参数为淡入持续时间(秒)。
音乐淡出
音乐淡出停止。
@[fade_out_bgm] 1
参数为淡出持续时间(秒)。
停止音乐
停止当前播放的背景音乐。
@[stop_bgm]
环境音
环境音
播放环境音
播放指定的环境音效。
@[play_env] {
"path": "路径",
"db": 0,
"pan": 0
}
参数说明:
path:环境音文件路径(参考:隐藏音频路径索引)。db:音量大小,可选,默认值为 0。pan:声道平衡,负数为左声道,正数为右声道,可选,默认值为 0。
改变环境音
切换当前播放的环境音。
@[change_env] {
"has_bgm": false,
"path": "音频路径"
}
参数说明:
has_bgm:是否有环境音,设为false可停止当前环境音。path:音频文件路径,可选(参考:隐藏音频路径索引)。
环境音淡入
环境音淡入播放。
@[fade_in_env] 1
参数为淡入持续时间(秒)。
环境音淡出
环境音淡出停止。
@[fade_out_env] 1
参数为淡出持续时间(秒)。
停止环境音
停止当前播放的环境音。
@[stop_env]
设置地图环境音
为指定地图设置环境音与过渡方式。
@[set_map_env] {
"map": "地图名",
"has_bgm": true,
"bgm_path": "res://Sounds/bgm/ch1/BGM_title.ogg",
"bgm_transition_type": "fade"
}
参数说明:
map:要设置的地图名称。has_bgm:是否启用该地图环境音开关(字段名沿用事件参数原文)。bgm_path:环境音资源路径(字段名沿用事件参数原文)。bgm_transition_type:切换方式,常见为"fade"(淡入淡出)。
地图操作
地图操作
更换地图
切换到指定的地图。
@[map_transport] {
"map": "地图名称",
"pos": [X, Y],
"need_to_save_map_status": false,
"transition_type": "fade",
"opacity": 255
}
参数说明:
map:目标地图名称。pos:目标位置坐标 [X, Y]。need_to_save_map_status:是否保存地图状态,可选,默认值为false。transition_type:过渡类型,可选:"fade":淡入淡出"whirl":安度药水(漩涡效果)"none":无过渡效果
opacity:过渡不透明度,可选,范围 0~255。
更换地板类型
更改当前地图的地板材质。
@[change_floor_type] {"type": "default"}
type 取值(以下均已测试):
"default":默认。"wood":木材(常见于房间内,听感偏闷,像在牛皮上行走)。"dirt":泥土(常见于家外户外区域,偶尔会混入键盘或木头的脚步声)。"pavement":铺路石(集市常见,普通石质脚步声)。"cave":洞穴(清脆并带少量回音)。"grass":草地。"pavement2":铺路石第二版(较pavement更轻)。"ruin":废墟(听感像在淤泥中行走)。"marble":大理石(实际听感更接近闷木头声)。"snow":雪地。"riverside":河边(沙子混水感)。"goose":鹅(类似鹅脚蹼走路的声音)。"swim":水中移动音效。"ruin2":废墟第二版(像踩在砂砾上)。"abstract":抽象(像纸张混合沙粒摩擦)。"snow_thick":厚雪(更重、更拖长的雪地脚步声)。"stone_stair":石阶(最接近典型石头脚步声)。"carpet":地毯(很轻的脚步声)。"garden":花园(类似草地但更柔和)。"dragon_back":龙背(偏金属质感)。"no_word":无文字(像踩乐高积木)。
区域功能
将当前阶段名称改为参数中的区域名,并可自动保存。 在一代中主要用于阶段标记,方便确认当前属于哪个阶段。
@[enter_section] {
"section_name": "区域名称",
"need_save": false
}
参数说明:
section_name:区域/阶段名称,可使用1-11-0等格式进行区分。need_save:是否自动保存,可选,默认值为true。
设置地图 BGM
为指定地图设置背景音乐与过渡方式。
@[set_map_bgm] {
"map": "地图名",
"has_bgm": true,
"bgm_path": "res://Sounds/bgm/ch1/BGM_title.ogg",
"bgm_transition_type": "fade"
}
参数说明:
map:要设置的地图名称。has_bgm:是否启用该地图 BGM。bgm_path:BGM 资源路径。bgm_transition_type:切换方式,常见为"fade"(淡入淡出)。
游戏机制
游戏机制
取消拆字规则
删除指定拆字规则。
@[delete_split_rule] {"from": ["拆"], "to": "手,斥"}
取消组字规则
删除指定组字规则。
@[delete_merge_rule] {"from": "系,且", "to": "组"}
取消全部拆字规则
清空当前已宣告的全部拆字规则。
@[clear_split_rule]
取消全部组字规则
清空当前已宣告的全部组字规则。
@[clear_merge_rule]
设置拆字规则并取消之前的拆字规则
先清空旧拆字规则,再设置新的拆字规则。
@[set_split_rule] {"from": ["拆"], "to": "手,斥"}
设置组字规则并取消之前的组字规则
先清空旧组字规则,再设置新的组字规则。
@[set_merge_rule] {"from": "系,且", "to": "组"}
获取用户当前使用的是简体还是繁体语言
用于读取当前用户语言是否为繁体中文。
@[get_is_user_lang_tc] {"switch": "开关"}
获取用户的简体辅助开关
用于读取当前是否开启简体辅助。
@[get_is_simplified] {"switch": "当前是否开启简体辅助"}
子事件
子事件
定义子事件
@[sub_event] 与 @[end_sub_event] 成对出现。
@[sub_event] "字面"
(此处编写其他指令)
@[end_sub_event]
@[sub_event] 与 @[end_sub_event] 中间的指令会被添加进该子事件。
触发逻辑
可以把它理解为“检测指定字面的 if 条件”:
- 当玩家位置与朝向正好面对这个指定字面时,条件为 true。
- 此时若主物件被触发,就会执行对应的子事件。
游戏会在物件碰撞生成时构建子事件逻辑,子事件的触发位置是该物件内所有“指定字面”的位置。
例如指定字面是“木”,那么该物件里所有“木”的坐标都可作为子事件触发点。可用于实现“单个物件不同位置触发不同事件”的效果。
示例
下面示例中,当“我”在携带 @[sub_event] 的物件字面“人”附近并朝向“人”时,该物件若被触发,会在 [0, 0] 坐标打出“你好,世界!”。
你好,世界!
树树树
树树人←我
树树树
@[sub_event] "人"
@[type_parallel] {
"texts": "你好,世界!",
"pos": [0, 0],
"tags": [],
}
@[end_sub_event]
删字触发块
@[backspace_command] 与 @[end_backspace_command] 成对出现。
@[backspace_command]
..里面填入魔法
@[end_backspace_command]
用于处理“玩家对该物件执行删字”这一触发场景。
当块内存在 @[play_backspace_fail_animation] 或 @[backspace_event] 时,会阻止玩家本次直接删字,并转由物件自身继续执行块内后续指令。
常见配合:
@[backspace_command]
@[play_backspace_fail_animation]
@[backspace_event] {"target": "self"}
@[end_backspace_command]
这种写法可实现“检测到删字后先反馈动画,再由物件自行处理删字/后续逻辑”。
系统
系统
返回标题界面
直接退出当前流程并返回标题界面。
@[return_to_title_screen]
直接退出游戏
快速关闭游戏流程。
@[quit_game]
设置成就完成
将指定成就状态设为已完成。
@[set_achievement]
清除成就完成状态
将指定成就状态清除为未完成。
@[clear_achievement]
一代限定
一代限定
本章收录主要在一代使用、在二代中基本无效或无实际用途的指令。
设置物件自开关
在关卡文件里,每个物件都有一个 existCondition 属性。这个属性用于检测条件是否成立,成立后才会允许该物件执行。
existCondition 示例:
"existCondition": "s:开关==true && self:auto==false"
其中 self 指自开关,后面接开关名称。
@[set_self_switch] ["开关名称", true]
一代中,这个魔法通常用于“开始时执行”的物件;很多开始时执行物件会带上 self:auto==false,避免重复触发。
二代中经测试似乎没有效果,建议按需自行验证。
调用全局方法
@[call_method] {
"target": "Global",
"target_type": "path",
"method": "set_chapter_progress",
"arg_array": [1]
}
这个写法在一代中主要用于调用引擎侧的全局方法。以上示例的含义是:调用 Global.set_chapter_progress(1),将章节进度设置为 1。
注意事项:
- 该指令属于一代引擎通信用途,通常只在一代有效。二代绝大多数情况下不会产生实际效果。
’他’字的拆组动画触发
只是播放这个字的动画,推测是在一代使用的,二代可正常使用,但用途相对较窄。
拆他动画
在目标物件位置播放“拆他”动画。
@[unzip_animation] {
"target": "物件名称"
}
组他动画
在目标物件位置播放“组他”动画。
@[zip_animation] {
"target": "物件名称"
}
如何将变量代入参数
由 Qwen3 优化了语法和格式,内容已经过验证。
在《文字游戏世界》中,开发者可以通过变量代入语法将游戏运行时的动态数据(如变量值、开关状态等)嵌入到事件参数中,从而实现内容的动态化与交互性。本文档详细说明变量与开关的代入方法、适用范围及注意事项。
1. 基本语法
《文字游戏世界》使用前缀标识符来区分不同类型的动态数据:
- 变量(Variable):使用
v:变量名 - 开关(Switch):使用
s:开关名
这些标识符可直接作为参数值写入事件配置中,引擎将在运行时自动解析并替换为实际值。
注意:变量名与开关名需与项目中定义的名称完全一致(包括大小写与空格)。
2. 应用示例
2.1 修改位置参数(pos)
假设已定义一个名为 变量X 的数值变量,希望打字机事件的 X 坐标动态跟随该变量值:
"pos": [
"v:变量X",
0
]
此时,打字机文本的水平位置将实时反映 变量X 的当前数值。
2.2 控制遮挡逻辑(is_on_top_of_player)
若希望打字机是否遮挡玩家由名为 开关Y 的布尔开关控制:
"is_on_top_of_player": "s:开关Y"
当 开关Y 为 开启(true) 时,打字机文本将显示在角色上方;关闭(false)时则不会遮挡。
2.3 动态显示文本内容(texts)
重要限制:打字机的 texts 字段不支持字符串拼接。若要显示变量或开关的值,texts 必须完全等于一个变量或开关的引用,不能包含其他静态文本。
✅ 正确用法:
"texts": "v:变量X"
或
"texts": "s:开关Y"
❌ 错误用法(不会按预期工作):
"texts": "当前分数:v:变量X" // 静态文本 + 变量 → 只显示变量
替代方案:如需组合静态文本与动态值,建议使用多个打字事件;或是与固定物件拼接而成。
相关文档
打字机的高级用法
1. 利用延迟符号实现无阻塞延迟
来自「艺素馒头」
在打字机中,符号「|」具有延迟效果(每个「|」约产生 0.1 秒的停顿)。
你可以利用这一特性,实现无阻塞的延迟效果——即在不强制玩家等待或确认的情况下,让文本按节奏自动呈现。
实现方法如下:
-
在打字机事件文本中连续插入多个「|」符号(例如 20 个),再附加一个任意字符(如「s」)作为触发标记,例如:
||||||||||||||||||||s -
设置一条成句规则,将末尾的「s」设为一个成句。
这样,系统会在延迟结束后自动识别整句成立,从而触发后续逻辑,而玩家无需确认或等待。
相关文档
实用指令集
感谢:艺素馒头 (由解包《文字游戏》一代而得)
目录
模板一:开门(无需额外动画物件)
用途
用于门物件的开门过场。该写法不需要单独放置动画物件。
前提
- 门物件图层位于玩家下方。
- 在本段指令后接上你自己的切换地图逻辑。
完整指令块
@[play_se] {"path":"res://Sounds/se/第一章 音效/SE_1_3_door_open.wav"}
@[play_sprite_animation] {"frame_count":30,"path":"res://Sprites/door/door_open.png","time_sec":1}
@[wait] 10
@[move_route] {"target":"Player","wait":true}
@[set_through] true
@[move_to_event] "门"
@[set_through] false
@[end_move_route]
@[event_fade_to] {"target":"Player"}
@[wait] 60
模板二:无需玩家操控的推字
用途
自动推动指定物件,并播放推字动画与音效。
可调参数
"pos": [5,5]:改为被推动物件当前坐标。push_low_1.wav中的数字可改为1-4,切换不同推字音效。rotation方向参考:- 向右:
0 - 向下:
90 - 向左:
180 - 向上:
-90
- 向右:
完整指令块
@[type] {
"texts": "动{'name':'推字动画','tags': ['动画']}",
"pos": [5,5],
"tags": ["推字"],
"has_animation": false,
"need_accept": false
}
@[move_route] {"target":"被推的物件","wait":false}
@[move_down]
@[end_move_route]
@[play_se] {"path":"res://Sounds/se/push_low_1.wav"}
@[tween_word_sprite] {
"target": "推字动画",
"position": [32, 80],
"rotation": 90,
"time_sec": 0
}
@[play_sprite_animation] {
"target": "推字动画",
"frame_count": 15,
"path": "res://Sprites/glove_push/u_glove_S.png",
"time_sec": 0.5
}
@[clear_typed] "推字"
隐藏音频路径索引
感谢:艺素馒头 说明:
- 以下仅包含《文字游戏世界》中无法直接在事件里找到的音频路径。
- 示例以“名称 + 路径”格式给出,便于查阅与复制使用。
隐藏 SE 音频路径
## 以下是文字游戏世界隐藏的所有se音频的路径:
## 仅包含文字游戏世界无法直接在事件里找到的音频
se_未知UI音效
res://Sounds/se/MEL/MEL_4_4_success.wav
se_在文字游戏最后一章被黑洞吞噬后找伙伴的音效
res://Sounds/se/MEL/MEL_4_21_word_join.wav
se_擦除的音效
res://Sounds/se/MEL/MEL_4_21_word_leave.wav
se_成句音效但是鸭子叫
res://Sounds/se/MEL/MEL_Iegal_egg_1.wav
se_成句音效但是更笨拙
res://Sounds/se/MEL/MEL_Iegal_egg_2.wav
se_成句音效但是彩蛋
res://Sounds/se/MEL/MEL_Iegal_egg_3.wav
se_成句音效但是坏的
res://Sounds/se/MEL/MEL_Iegal_egg_4.wav
se_成句音效但是只有开头两个音
res://Sounds/se/MEL/MEL_Iegal_wrong.wav
se_像成句但又不像,反正就是很吵[护耳警告],敲锣声
res://Sounds/se/MEL/SFX_Legal Answer_NoMelo.wav
se_也是敲锣声但更轻
res://Sounds/se/MEL/SFX_process_noMelo_1.wav
se_清脆的敲锣声
res://Sounds/se/MEL/SFX_process_noMelo_2.wav
se_普通的敲锣声
res://Sounds/se/MEL/SFX_process_noMelo_3.wav
se_折起纸张
res://Sounds/se/power/SE_human_leave.wav
se_扔掉纸张_1
res://Sounds/se/power/SE_human_merge_1.wav
se_扔掉纸张_2
res://Sounds/se/power/SE_human_merge_2.wav
se_扔掉纸张_3
res://Sounds/se/power/SE_human_merge_3.wav
se_拆字失败音效
res://Sounds/se/power/SE_S_19.3_pull_fail.wav
se_打开怀表音效
res://Sounds/se/system/SE_S_25_cancel.wav
se_打开沉思[esc]音效
res://Sounds/se/system/SE_S_29_thought_A.wav
se_切换外观_连线中
res://Sounds/se/system/SE_S_26_adjust_A.wav
se_叮
res://Sounds/se/typewriter/Bell中音.wav
se_打字机诗人音效_A
res://Sounds/se/typewriter/SE_S_14_type_poet_A.wav
se_打字机诗人音效_B
res://Sounds/se/typewriter/SE_S_14_type_poet_B.wav
se_打字机诗人音效_C
res://Sounds/se/typewriter/SE_S_14_type_poet_B.wav
se_打字机诗人音效_D
res://Sounds/se/typewriter/SE_S_14_type_poet_B.wav
se_打字机公主音效_A
res://Sounds/se/typewriter/SE_S_15_type_princess_A.wav
se_打字机公主音效_B
res://Sounds/se/typewriter/SE_S_15_type_princess_B.wav
se_打字机公主音效_C
res://Sounds/se/typewriter/SE_S_15_type_princess_C.wav
se_打字机公主音效_D
res://Sounds/se/typewriter/SE_S_15_type_princess_D.wav
se_打字机公主音效_F
res://Sounds/se/typewriter/SE_S_15_type_princess_F.wav
se_打字机公主音效_G
res://Sounds/se/typewriter/SE_S_15_type_princess_G.wav
se_打字机公主音效_H
res://Sounds/se/typewriter/SE_S_15_type_princess_H.wav
se_打字机轻柔公主音效_A
res://Sounds/se/typewriter/SE_S_15_type_可能適合princess_輕柔A.wav
se_打字机轻柔公主音效_B
res://Sounds/se/typewriter/SE_S_15_type_可能適合princess_輕柔B.wav
se_打字机轻柔公主音效_C
res://Sounds/se/typewriter/SE_S_15_type_可能適合princess_輕柔C.wav
se_打字机轻柔公主音效_D
res://Sounds/se/typewriter/SE_S_15_type_可能適合princess_輕柔D.wav
se_打字机轻柔公主音效_G
res://Sounds/se/typewriter/SE_S_15_type_可能適合princess_輕柔G.wav
se_打字机龙音效_A
res://Sounds/se/typewriter/SE_S_16_type_dragon_A.wav
se_打字机龙音效_B
res://Sounds/se/typewriter/SE_S_16_type_dragon_B.wav
se_打字机龙音效_C
res://Sounds/se/typewriter/SE_S_16_type_dragon_C.wav
se_打字机龙音效_D
res://Sounds/se/typewriter/SE_S_16_type_dragon_D.wav
se_打字机蛇妖音效_A
res://Sounds/se/typewriter/type_snake_A.wav
se_打字机蛇妖音效_B
res://Sounds/se/typewriter/type_snake_B.wav
se_打字机蛇妖音效_C
res://Sounds/se/typewriter/type_snake_C.wav
se_鸟叫_1
res://Sounds/se/bird_1.wav
se_鸟叫_2
res://Sounds/se/bird_2.wav
se_鸟叫_3
res://Sounds/se/bird_3.wav
se_狗叫1
res://Sounds/se/dog_bark_1.wav
se_狗叫2
res://Sounds/se/dog_bark_2.wav
se_第0章锁门音效
res://Sounds/se/door_lock.wav
se_第0章开门音效
res://Sounds/se/door_open_1.wav
se_每章开头跳字音效
res://Sounds/se/flip_trim_title.wav
se_地震音效_1
res://Sounds/se/giant_step_1.wav
se_地震音效_2
res://Sounds/se/giant_step_2.wav
se_地震音效_3
res://Sounds/se/giant_step_3.wav
se_安度药水瓶子的声音_1
res://Sounds/se/glass_bottle_hold_1.wav
se_安度药水瓶子的声音_2
res://Sounds/se/glass_bottle_hold_2.wav
se_安度药水摔到地上的声音
res://Sounds/se/glass_bottle_pick_1.wav
se_大风
res://Sounds/se/house_recover.wav
se_开锁声
res://Sounds/se/lock_unlock_1.wav
se_成句音效_1
res://Sounds/se/progress_1.wav
se_成句音效_2
res://Sounds/se/progress_2.wav
se_成句音效_3
res://Sounds/se/progress_3.wav
se_成句音效_4
res://Sounds/se/progress_4.wav
se_成句音效_5
res://Sounds/se/progress_5.wav
se_完成成句关卡音效
res://Sounds/se/complete.wav
se_拖字音效_1
res://Sounds/se/pull_1.wav
se_拖字音效_2
res://Sounds/se/pull_2.wav
se_拖字音效_3
res://Sounds/se/pull_3.wav
se_拖字音效_4
res://Sounds/se/pull_4.wav
se_抓住字
res://Sounds/se/pull_grab.wav
se_没抓住字
res://Sounds/se/pull_grab_fail.wav
se_啵
res://Sounds/se/pull_ungrab.wav
se_推字_1
res://Sounds/se/push_low_1.wav
se_推字_2
res://Sounds/se/push_low_2.wav
se_推字_3
res://Sounds/se/push_low_3.wav
se_推字_4
res://Sounds/se/push_low_4.wav
se_墙面裂开
res://Sounds/se/rock_break_1.wav
se_墙皮掉落
res://Sounds/se/rock_break_drop_1.wav
se_史莱姆砸在墙上_1
res://Sounds/se/slime_hit_1.wav
se_史莱姆砸在墙上_2
res://Sounds/se/slime_hit_2.wav
se_史莱姆行走_1
res://Sounds/se/slime_move_1.wav
se_史莱姆行走_2
res://Sounds/se/slime_move_2.wav
se_史莱姆吃东西
res://Sounds/se/slime_tranform_1.wav
se_史莱姆动
res://Sounds/se/slime_vanish_1.wav
se_史莱姆叫
res://Sounds/se/slime_vanish_2.wav
se_玩家死亡
res://Sounds/se/Switch2.wav
se_拔出圣剑
res://Sounds/se/sword_draw_out_1.wav
se_删字_1
res://Sounds/se/sword_swing_1.wav
se_删字_2
res://Sounds/se/sword_swing_2.wav
se_删字_3
res://Sounds/se/sword_swing_3.wav
se_删字失败_1
res://Sounds/se/sword_swing_fail_1.wav
se_删字失败_2
res://Sounds/se/sword_swing_fail_2.wav
se_删字失败_3
res://Sounds/se/sword_swing_fail_3.wav
se_安度药水回溯
res://Sounds/se/twist_long_1.wav
se_主菜单选项确认_1
res://Sounds/se/typerwriter_feedpaper_1.wav
se_主菜单选项确认_2
res://Sounds/se/typerwriter_feedpaper_2.wav
se_打字机确认
res://Sounds/se/typerwriter_return.wav
se_默认打字机声音_1
res://Sounds/se/typer_key_1.wav
se_默认打字机声音_2
res://Sounds/se/typer_key_2.wav
se_默认打字机声音_3
res://Sounds/se/typer_key_3.wav
se_默认打字机声音_4
res://Sounds/se/typer_key_4.wav
se_拆字
res://Sounds/se/unzip_1.wav
se_组字
res://Sounds/se/zip_1.wav
隐藏 BGM 音频路径
## 以下是文字游戏世界隐藏的所有bgm音频的路径:
## 仅包含文字游戏世界无法直接在事件里找到的音频
bgm_⟪文字游戏⟫
res://Sounds/bgm/ch1/BGM_title.ogg
隐藏动画路径索引
感谢:艺素馒头 说明:
- 以下仅包含《文字游戏世界》中隐藏动画的路径索引。
- 循环动画会在前面标记
$,一次性动画会在前面标记#,两个都有表示两种模式都可用。- 前面的
frame_count(帧数)必须正确,否则动画会错误;time_sec会影响播放速度。- 动画播放魔法仅支持“每行帧数等于 10”或“总帧数小于 10”的精灵图。
隐藏动画路径
## 以下是文字游戏世界所有动画的路径:
## 循环动画会在前面标记"$",
## 一次性动画则标记"#",
## 静态图片则标记"/",
## 两个都有则是指该动画一次性或循环都可以
## 注意事项:前面是帧数,如果帧数不对动画会错误,后面才是地址,其次播放时间会影响播放速度
##遗憾:动画播放魔法只能播放精灵图每行帧等于10与总帧数小于10的动画,一旦每行帧超过或小于就无法正常播放
$咕咕钟:{"frame_count":5,"path":"res://Sprites/00_clock/clock.png","time_sec":0.5}
$火炉:{"frame_count":24,"path":"res://Sprites/00_stove/stove.png","time_sec":2.4}
#$艾斯走路:{"frame_count":3,"path":"res://Sprites/NPC_walk/u_ace_walk.png","time_sec":0.3}
#$伊塔力克走路:{"frame_count":3,"path":"res://Sprites/NPC_walk/u_italic_walk.png","time_sec":0.3}
#$诗人走路:{"frame_count":3,"path":"res://Sprites/NPC_walk/u_poet_walk.png","time_sec":0.3}
#删字失败:{"frame_count":24,"path":"res://Sprites/backspace_fail/nosword.png","time_sec":1}
##由于该动画由程序随机转向所以实际上是从上往下劈,如果有播放这个动画的需要,建议尝试@[backspace_event]这个魔法
#删字成功:{"frame_count":20,"path":"res://Sprites/backspace_splash/splash.png","time_sec":1}
$摇拽火光:{"frame_count":120,"path":"res://Sprites/candle/candle_burn.png","time_sec":12}
##与摇拽火光搭配使用可以获得不错的效果
#燃起火焰:{"frame_count":15,"path":"res://Sprites/candle/candle_lightup.png","time_sec":1}
#柴塌了:{"frame_count":10,"path":"res://Sprites/ch2_campfire/firewood.png","time_sec":1}
#酒杯晃动:{"frame_count":20,"path":"res://Sprites/ch3_wine/wine.png","time_sec":1}
#喝酒:{"frame_count":20,"path":"res://Sprites/ch3_wine/wine_drink.png","time_sec":1}
#冰融化成水:{"frame_count":30,"path":"res://Sprites/ch5_ice_melt/ch5_ice_melt.png","time_sec":1}
##房"间"和开"间"是同一个动画的正放与倒放,开门和关门也是
#房"间":{"frame_count":30,"path":"res://Sprites/door/room.png","time_sec":1}
#开门:{"frame_count":30,"path":"res://Sprites/door/door_open.png","time_sec":1}
#推字动画:{"frame_count":15,"path":"res://Sprites/glove_push/u_glove_S.png","time_sec":0.5}
#拆"他":{"frame_count":32,"path":"res://Sprites/helmet/helmet_unzip.png","time_sec":1}
#组"他":{"frame_count":42,"path":"res://Sprites/helmet/helmet_zip.png","time_sec":1.5}
$树:{"frame_count":20,"path":"res://Sprites/tree/tree.png","time_sec":2}
##(应该算动画吧,毕竟能加载)
/一个白色的小方块:res://Sprites/unzip/base_white.png
##孩子们,一口气从头看到尾差点给我累死了,中间有些动画甚至还没被整合到文字游戏世界里,不过不用担心,这些动画都是经过测试可用的
##以下动画虽然未经过测试,但是都在游戏文件里了肯定能用
#$人走路:{"frame_count":2,"path":"res://Sprites/ch6_we/we_walk.png","time_sec":0.2}
#$人待机A:{"frame_count":11,"path":"res://Sprites/ch6_we/we_idleA.png","time_sec":1.1}
#$人待机B:{"frame_count":6,"path":"res://Sprites/ch6_we/we_idleB.png","time_sec":0.6}
/一张人的静态图片:res://Sprites/ch6_we/we_default.png
/一张公主的静态图片:res://Sprites/ch7_princess/ch7_princess_ghost.png
/口静态图片:res://Sprites/ch7_tofu/tofu.png
/口静态图片但是没有背景框:res://Sprites/ch7_tofu/tofu_transparent.png
/一张"零一二三四五终"的静态图片:res://Sprites/chapter_title/title_flip_texture.png
/一张"零一二三四五六七八"的静态图片:res://Sprites/chapter_title/title_flip_texture_old.png
##静态噪波图像,不知道有什么用
/静态噪波图像X:res://Sprites/displacement_texture/displacementX.png
/静态噪波图像XY:res://Sprites/displacement_texture/displacementXY.png
/静态噪波图像Y:res://Sprites/displacement_texture/displacementY.png
#$我走路:{"frame_count":2,"path":"res://Sprites/me/me_walk.png","time_sec":0.2}
#$我待机A:{"frame_count":11,"path":"res://Sprites/me/me_idleA.png","time_sec":1.1}
#$我待机B:{"frame_count":6,"path":"res://Sprites/me/me_idleB.png","time_sec":0.6}
/一张我的静态图片:res://Sprites/me/me_default.png
$一堆数字0-9:{"frame_count":10,"path":"res://Sprites/number/number.png","time_sec":1}
/一张下划线的图片:res://Sprites/underline/underline.png