指令参考

指令参考 #

Naninovel 脚本指令完整参考。前置知识: 简单对话, 魔女裁判

本页列出了所有可用的脚本指令,包括 Naninovel 官方指令、游戏特有指令以及 MOD 新增功能。

指令分类速查 #

分类指令
显示控制@back, @char, @hide, @hidechars, @show
动画效果@animate, @blur, @shake
对话文本@print, @printDebate, @ResetText, @printer, @HidePrinter
音频@bgm, @sfx, @voice, @stopBgm, @stopSfx, @StopVoice
流程控制@goto, @gosub, @return, @stop, @StopForChoice, @CancelGosub, @Skip
选择分支@choice
变量条件@set, @if
等待@wait, @WaitForNextFrame, @i
审判系统@printDebate, @evidence, @timer, @pauseTrial, @debate, @stageCamera, @showStageScreen / @hideStageScreen, @gosubModifyCamera, @gosubCutIn, @courtFire, @badId
魔女图鉴@update, @spawn / @despawn, @toast, @gosubResetBook
地图搜查@map, @setFlag
视频播放@movie
UI控制@HideUI, @ShowUI, @ProcessInput, @ReturnToTitle
角色动作@EmoteJumpDouble

显示控制指令 #

@back #

官方文档

功能: 设置背景元素

常用参数:

参数类型说明示例
(外观)String背景外观名称1_1, SolidColor, Transparent
IdString背景处理器"Stills" (CG图鉴用)
SubIdString层级,靠前层级遮挡靠后"Overlay", "Middle"
posVector2位置偏移 (X,Y 百分比)50,50, -5,-10
ScaleFloat缩放比例,支持表达式1.8, {g_backgroundDefaultScale}
RotationVector3旋转角度 (X,Y,Z),,0 (仅 Z 轴)
tintColor颜色叠加 (RGBA)"#000000", "#FFFFFFFF"
dissolveString自定义转场纹理"VerticalBlindGradually"
transitionString转场效果CrossFade, RadialBlur
timeFloat转场时长 (秒)1.5, 0 (立即)
LazyBool从当前状态过渡 (而非重置)false

外观类型说明:

外观说明用途
背景ID普通背景图片@back 5_1
Transparent完全透明淡入/淡出遮罩层
Transparent.Custom带自定义转场的透明配合 dissolve 使用特殊转场
SolidColor纯色背景 (默认黑色)场景过渡暗转
SolidColor.Custom自定义颜色纯色背景配合 tint 指定 RGBA 颜色

示例:

; ===== 基础用法 =====
@back 5_1
@back 5_1 Scale:{g_backgroundDefaultScale} time:0 Lazy:false

; ===== CG 图鉴背景 =====
; 使用 Id:"Stills" 加载 CG 图片
@back 270_1 Id:"Stills"
@back 500_1 Id:"Stills" Scale:{g_backgroundDefaultScale} time:0 Lazy:false

; ===== 多层背景 =====
; Middle 层: 实现视差效果或前景遮挡
@back SubId:"Middle" 500_1 pos:50,50 Id:"Stills" Rotation:,,0 Scale:{g_backgroundDefaultScale} time:0.6 Lazy:false
@back SubId:"Middle" 270_1 pos:95,75 Id:"Stills" Scale:3 time:0.6 Lazy:false

; ===== Overlay 遮罩层 =====
; 黑色遮罩 → 透明 (淡入效果)
@back SubId:"Overlay" Transparent tint:"#000000" time:1.2 Lazy:false

; 透明 → 黑色纯色 (淡出效果)
@back SubId:"Overlay" SolidColor time:0.9 Lazy:false

; 自定义转场效果 (百叶窗)
@back SubId:"Overlay" Transparent.Custom dissolve:"VerticalBlindGradually" tint:"#000000" time:0.99 Lazy:false
@back SubId:"Overlay" SolidColor.Custom dissolve:"VerticalBlindGradually" tint:"#000000" time:0.9 Lazy:false

; 白屏闪烁效果
@back SubId:"Overlay" SolidColor.Custom tint:"#FFFFFF00" time:0 Lazy:false
@back SubId:"Overlay" SolidColor.Custom tint:"#FFFFFFFF" time:0.2 Lazy:false
@back SubId:"Overlay" SolidColor.Custom tint:"#FFFFFF00" time:0.2 Lazy:false

; ===== 带位置和旋转 =====
@back 270_1 pos:-5,-10 Id:"Stills" Scale:2.5 time:0 Lazy:false
@back 270_1 pos:50,50 Id:"Stills" Rotation:,,0 Scale:1.5 time:0 Lazy:false

Overlay 遮罩层: SubId:"Overlay" 是最上层遮罩,用于实现淡入淡出和场景过渡效果。Transparent 使遮罩变透明 (显示背景),SolidColor 使遮罩变为纯色 (遮挡背景)。

Lazy 参数: 游戏脚本中几乎所有 @back@char 都使用了 Lazy:false。Lazy 控制动画是否从当前状态过渡 (true) 还是先重置再过渡 (false)。MOD 中建议统一使用 Lazy:false


@char #

官方文档

功能: 修改人物立绘和表情

常用参数:

参数类型说明示例
idString角色ID.表情Ema.4, Sherry.Smile1
SubIdString层级"Middle"
posVector2位置 (百分比)50, 50,50, 70,30
ScaleFloat缩放1.25, 0.75
lookString转向Left, Right
visibleBool是否可见true, false
transitionString转场效果DropFade
timeFloat转场时长0.5, 0 (立即)
LazyBool从当前状态过渡false

表情与部件组合语法:

游戏角色使用分层立绘系统,可以自由组合面部表情、手臂状态和其他部件:

; ===== 基础表情 =====
@char Ema.Normal1 pos:50 Lazy:false
@char Sherry.Smile1 pos:30 Lazy:false
@char Yuki.6 Lazy:false

; ===== 手臂状态组合 =====
; 角色.表情,右手,左手
@char Sherry.Smile1,ArmR16 pos:70 Lazy:false
@char Ema.Smile1,ArmR1,ArmL1 pos:50 Lazy:false
@char Hanna.Angry1,ArmR2,ArmL2 pos:70,50 Lazy:false

; ===== 特殊部件 =====
; Option 前缀用于可选部件
@char Alisa.Normal1,Option-ArmL-Off pos:50 Lazy:false
@char AnAn.Normal1,Angle01/Option_Arms- pos:50 Lazy:false

; ===== 高级分层表情 (Angle 路径语法) =====
; 格式: Angle路径/部件组>具体状态
; 可精确控制眼睛、嘴巴、脸红、汗水等
@char Hiro.Head1,Pale1-Off,Sweat1-Off,Cheeks1-Normal,Angle01/Head01/Facial01/Eyes01>Eyes01_Angry_Open,Angle01/Head01/Facial01/Mouth01>Mouth01_Fearful_Open pos:70 Lazy:false

; 组合面部状态
@char Ema.Determined2,ArmR3,ArmL10,Angle01/Head02/Facial02/Mouth02>Mouth02_Angry_Open time:0 Lazy:false

; 多部件组合
@char Coco.Fearful1,ArmR6,ArmL7,Angle01/Facial/Eyes>Eyes_Surprised_Open,Angle01/Facial/Mouth>Mouth_Normal_Open,Angle01/Facial/Sweat>Sweat01 Lazy:false

; ===== SubId 层级 =====
; 使用 Middle 层实现近景特写
@char SubId:"Middle" Hiro.Smile1 pos:30,30 Scale:1.25 Lazy:false
@char SubId:"Middle" Ema.Smile1,ArmR1,ArmL1 pos:70,30 Scale:1.25 Lazy:false

; ===== 隐藏角色 =====
@char Warden visible:false

自定义角色: 支持加载外部立绘,参见 加载外部立绘资源

Angle 路径语法: 格式为 Angle编号/部件组/子部件>状态名。常见部件:

  • Eyes — 眼睛: Eyes_Angry_Open, Eyes_Surprised_Open, Eyes_Pensive_Open01
  • Mouth — 嘴巴: Mouth_Normal_Open, Mouth_Yell_Open, Mouth_Smile_Closed1
  • Sweat — 汗水: Sweat01, Sweat01_01
  • Option_Arms — 手臂: Option_Arms01_05, Option_ArmR01_02

并非所有角色都支持 Angle 路径语法,取决于角色立绘的分层设计。


@hide #

官方文档

功能: 隐藏指定的 Actor (角色/背景/文字框/选择框)

常用参数:

参数类型说明示例
(目标)String要隐藏的 Actor IDEma, Stills
timeFloat隐藏动画时长0, 0.6
LazyBool从当前状态过渡false

示例:

; 隐藏角色
@hide Ema Lazy:false

; 立即隐藏 (time:0)
@hide Stills time:0 Lazy:false

; 隐藏 Middle 层背景
@hide Stills-Middle time:0.6 Lazy:false
@hide MainBackground-Middle Lazy:false

; 带转场效果
@hide Sherry transition:RadialBlur time:1.0

@hidechars #

官方文档

功能: 隐藏所有可见的角色

示例:

@hideChars
@hideChars Lazy:false
@hideChars time:0 Lazy:false
@hideChars time:1.5

@show #

官方文档

功能: 显示之前隐藏的 Actor

示例:

@show Ema
@show Printer

动画效果指令 #

@animate #

官方文档

功能: 通过关键帧动画修改 Actor 的属性 (位置、缩放等)

常用参数:

参数类型说明示例
(目标)StringActor IDStills, MainBackground
LoopBool是否循环false
posXStringX 轴位置"15", "80"
posYStringY 轴位置"50"
ScaleString缩放"1.15"
easingString缓动函数"EaseOutQuad"
timeString动画时长"1.5", "20"

示例:

; 背景平移动画 (CG 镜头移动效果)
@back 270_1 pos:-5,-10 Id:"Stills" Scale:2.5 time:0 Lazy:false
@animate Stills Loop:false posX:"15" easing:"EaseOutQuad" time:"1.5"
@Wait "2.4"

; 停止动画
@animate Stills Loop:false

; Middle 层动画
@animate Stills-Middle Loop:false posX:"80" easing:"EaseOutQuad" time:"1.5"
@Wait "2.4"
@animate Stills-Middle Loop:false

; 缩放动画 (放大效果)
@animate Stills Loop:false Scale:"1.15" easing:"EaseOutQuad" time:"2.4"

; 长时间缓慢平移 (用于审判庭场景)
@animate MainBackground Loop:false posX:"25" time:"20"

注意: @animate 的参数值需要用引号包裹。动画完成后建议使用 @animate 目标名 Loop:false (不带其他参数) 来停止动画,避免状态冲突。


@blur #

官方文档

功能: 为 Actor (角色/背景) 添加模糊效果

常用参数:

参数类型说明示例
(目标)StringActor IDYuki, "Stills"
powerFloat模糊强度 (0-1)1 (强模糊), 0 (取消)
timeFloat过渡时长0 (立即), 1.8

示例:

; 模糊角色
@blur Yuki power:1
; 取消模糊
@blur Yuki power:0

; 立即模糊背景
@blur "Stills" time:0
@blur "MainBackground-Middle" time:0

; 渐变取消模糊
@blur "Stills" power:0 time:1.8

; 模糊 Middle 层角色
@blur "Jailer-Middle"

@shake #

功能: 让 Actor 产生震动效果

常用参数:

参数类型说明示例
(目标)String震动目标Debate
horBool水平震动true
verBool垂直震动true
countInt震动次数 (0=循环,-1=停止)0, -1

示例:

; 开始震动 (循环)
@shake Debate hor:true ver:true count:0

; 停止震动
@shake Debate count:-1

对话文本指令 #

@print #

官方文档

功能: 打印文本到对话框

常用参数:

参数类型说明
textString要显示的文本
authorString说话角色ID
speedFloat文本显示速度
resetBool是否清空之前的文本
waitInputBool是否等待玩家输入
WaitBool是否等待文本显示完成

示例:

; 简写形式 (推荐)
雪莉: 我是完美的名侦探雪莉!

; 完整形式 (游戏脚本常用)
@print "我是完美的名侦探雪莉!" author:"Sherry" speed:1 waitInput:true Wait:true

; 不带角色名 (叙述)
@print "进入会客厅后,<br>我观察着陆续进来的少女们。" speed:1 waitInput:true Wait:true

; 带角色名的独白
@print "(她们就是【魔女】……?)" author:"Hiro" speed:1 waitInput:true Wait:true

; 带富文本标签
雪莉: 这是<color=#ff0000>红色</color>的文字!

简写与完整形式: 简写形式 角色名: 对话 更简洁,适合简单对话。完整形式 @print 可以精确控制 speedwaitInputWait 等参数。游戏原始脚本统一使用完整形式。


@printDebate #

功能: 显示审判辩论对话 (3D法庭专用)

常用参数:

参数类型说明示例
textString辩论文本"这就是证据!"
posVector2屏幕位置 (百分比)65,50
RollFloat旋转角度4, -3
speedFloat文本速度1.0

链接语法: 使用 <link="标签">文本</link> 创建可点击区域

示例:

; 基础辩论
@printDebate pos:65,50 Roll:4 "被告自始至终就对艾玛……" speed:1

; 带可点击链接
@printDebate pos:65,50 Roll:3 "抱有<br><link=\"LoveEvidence\"><size=175%>爱意</size></link>!" speed:1

; 反方辩论 (负角度)
@printDebate pos:30,50 Roll:-4 "等、等一下……<br>这种事怎么能当众说!" speed:1

使用场景: 仅在审判场景 (3D法庭) 中使用,配合 @evidence@timer


@ResetText #

功能: 清空当前显示的文本

示例:

; 清空默认打印器
@ResetText

; 清空指定打印器
@ResetText "Debate"

@printer #

功能: 切换文本打印器

示例:

; 切换到默认打印器,隐藏其他打印器
@printer Normal.Default default:true HideOther:true Lazy:false

游戏使用两种打印器: Normal.Default (普通对话) 和 Debate (辩论文本)。切换场景时需要切回对应的打印器。


@HidePrinter #

功能: 隐藏文本打印器

示例:

; 隐藏默认打印器
@HidePrinter

; 隐藏辩论打印器
@HidePrinter "Debate"

音频指令 #

@bgm #

官方文档

功能: 播放背景音乐

常用参数:

参数类型说明
pathString音频文件名 (不含扩展名)
introString前奏音轨 (播放一次后循环主音轨)
volumeFloat音量 (0-1)
loopBool是否循环
fadeFloat淡入时长 (秒)

示例:

; 基础用法
@bgm "Bgm_26_1" Volume:1 Loop:true fade:0

; 带前奏的BGM (前奏播放一次,然后循环主音轨)
@bgm "Bgm_12_1_Loop" intro:"Bgm_12_1_Intro" Volume:1 Loop:true fade:0
@bgm "Bgm_2_1_Loop" intro:"Bgm_2_1_Intro" Volume:1 Loop:true fade:0

; 带淡入
@bgm "Trial_1" volume:0.8 fade:2.0

@sfx #

官方文档

功能: 播放音效

常用参数:

参数类型说明
pathString音效文件名
VolumeFloat音量 (0-1)
LoopBool是否循环
fadeFloat淡入时长

示例:

@sfx "Sfx_8" Volume:1 Loop:false fade:0
@sfx "Sfx_Common_1" Volume:1 Loop:false fade:0
@sfx "DoorOpen" volume:0.5

@voice #

官方文档

功能: 播放角色对话语音

示例:

; 基础用法
@voice "Ema_001"

; 使用子目录路径 (MOD名/文件名)
@voice "TaffyStory001/Hiro_00"
@voice "TaffyStory000/Sherry_01"

自定义语音: 参见 加载语音


@StopVoice #

功能: 停止当前正在播放的语音

示例:

@StopVoice

@stopBgm #

功能: 停止背景音乐

示例:

@stopBgm
@stopBgm fade:1.5

@stopSfx #

功能: 停止音效

示例:

@stopSfx "DoorOpen"

流程控制指令 #

@goto #

官方文档

功能: 跳转到指定脚本位置

常用参数:

参数类型说明
pathString跳转路径 (脚本名.标签)
softBool软跳转,不重置状态

示例:

; 跳转到当前文件的标签
@goto .LabelName

; 跳转到其他文件
@goto ModName/ScriptFile.LabelName

; 软跳转 (不重置引擎状态,适合审判场景间跳转)
@goto soft:true SherryAppleJuice_IfAlive001/Trial01
@goto soft:true SherryAppleJuice_IfAlive000/Trial00

soft 参数: 使用 soft:true 时,跳转不会重置引擎状态 (背景、角色、音乐等保持不变)。适用于审判场景中的幕间跳转。


@gosub #

官方文档

功能: 跳转到子程序,遇到 @return 后返回

示例:

@gosub .SubRoutine

; 跳转到其他文件
@gosub Common/DialogueUtils.ShowChoice

@return #

官方文档

功能:@gosub 调用中返回

示例:

# SubRoutine
雪莉: 这是子程序!
@return

@stop #

功能: 停止脚本执行

示例:

; 坏结局
雪莉: 审判失败了……
@stop

@StopForChoice #

功能: 等待选择 (通常与 @choice 配合)

常用参数:

参数类型说明
ClearBool是否清除选项

示例:

@StopForChoice Clear:false

@CancelGosub #

功能: 取消 gosub 调用栈,使 @return 不再回到之前的位置

示例:

; 在审判选对答案后,取消 gosub 栈并跳转到下一阶段
@CancelGosub
@goto .NextPhase

@Skip #

功能: 控制玩家是否可以跳过文本

示例:

; 禁止跳过 (审判弱点选择时使用)
@Skip false

选择分支指令 #

@choice #

官方文档

功能: 显示选项按钮

常用参数:

参数类型说明
textString选项文本
gotoString跳转目标
setString设置变量
doString执行指令
LockBool是否锁定 (禁用)
buttonString按钮预制体路径
handlerString选择处理器ID
playBool选择后是否自动继续
showBool是否显示选择面板

审判按钮类型:

button 路径说明
ChoiceButtons/Trial/Objection异议 (指出问题)
ChoiceButtons/Trial/Cancel取消/返回
ChoiceButtons/Trial/Perjury伪证 (指出伪证)

示例:

; ===== 普通选项 =====
@choice "继续审判" goto:.ContinueTrial
@choice "回到主菜单" do:"@returntotitle"

; 带变量设置
@choice "选择A" set:"playerChoice=A" goto:.ResultA
@choice "选择B" set:"playerChoice=B" goto:.ResultB
@StopForChoice

; ===== 审判选项 (完整格式) =====
; 异议按钮
@choice "人是无罪的" Lock:false button:"ChoiceButtons/Trial/Objection" handler:"TrialHiro" play:true show:true
    @sfx "Sfx_System_SaveData_001_2x" Volume:1 Loop:false fade:0
    @StopVoice
    @pauseTrial false timer:true
    @printDebate pos:70,50 Roll:4 "你的反驳无效。" speed:1
    @return

; 返回按钮
@choice "返回" Lock:false button:"ChoiceButtons/Trial/Cancel" handler:"TrialHiro" play:true show:true
    @pauseTrial false timer:true
    @Wait "i{debateWaitTime}"
    @Return

@StopForChoice Clear:false

; ===== 伪证按钮 =====
@choice "艾玛不可能有勇气" Lock:false button:"ChoiceButtons/Trial/Perjury" handler:"TrialHiro" play:true show:true
    @sfx "Sfx_System_SaveData_001_2x" Volume:1 Loop:false fade:0
    @StopVoice
    @CancelGosub
    @goto .NextPhase

审判选项嵌套: 审判中的 @choice 使用嵌套命令 (缩进),选择后直接执行嵌套内的指令。handler:"TrialHiro" 指定审判专用的选择处理器。


变量和条件指令 #

@set #

官方文档

功能: 设置变量

示例:

; 设置变量
@set counter=0
@set playerName="雪莉"
@set hasKey=true

; 变量运算
@set counter=counter+1
@set score=score*2

详细说明: 参见 变量与表达式


@if #

官方文档

功能: 条件判断

示例:

@if counter>5
    雪莉: 计数器大于5!
@endif

@if hasKey
    @goto .OpenDoor
@else
    雪莉: 没有钥匙……
@endif

等待指令 #

@wait #

官方文档

功能: 等待指定时长或条件

示例:

; 等待秒数
@wait 2.5

; 等待带 i 前缀 (忽略跳过)
@wait i1.5

; 等待用户点击
@wait i

@WaitForNextFrame #

功能: 等待下一帧 (极短时间)

示例:

@WaitForNextFrame

@i #

功能: 等待用户输入 (点击/按键)

示例:

@i

审判系统指令 🎯 #

@evidence #

功能: 出示证据 (审判中的证物/人物档案)

常用参数:

参数类型说明
correctString正确答案的ID
typeString类型: Clue (证物) 或 Profile (人物档案)

示例:

; 出示证物
@evidence correct:"MaxMixAlex_ManosabaModEnhance_1-1" Clue

; 出示人物档案
@evidence correct:"Hiro" Profile

; 出示原版证物
@evidence correct:"1-1" Clue

注意: 必须与 @printDebate 的链接标签配合使用


@timer #

功能: 设置审判倒计时

参数: 时长 (秒)

示例:

; 设置 720 秒 (12分钟) 倒计时
@timer 720

; 设置超长倒计时 (几乎无限)
@timer 5999

@pauseTrial #

功能: 暂停/恢复审判状态和计时器

常用参数:

参数类型说明
(暂停)Booltrue 暂停,false 恢复
timerBool是否同时暂停/恢复计时器

示例:

; 恢复审判和计时器 (辩论开始)
@pauseTrial false timer:true

; 暂停审判和计时器 (辩论结束)
@pauseTrial true timer:true

; 恢复审判但不恢复计时器 (特殊场景)
@pauseTrial false timer:false

@debate #

功能: 开启/关闭辩论模式

示例:

; 关闭辩论模式 (结束时调用)
@debate false

@stageCamera #

功能: 控制 3D 审判法庭的摄像机位置和旋转

常用参数:

参数类型说明示例
(索引)Int摄像机索引 (0 或 1)0, 1
HeightFloat摄像机高度5.6, 3, 4
RotationVector3旋转角度 (X,Y,Z)0,{expr},0
DistanceFloat距离中心的距离12, 4, 7
timeFloat过渡时长0 (立即), 1
easingString缓动函数"OutQuad"

Rotation Y 轴公式:

审判庭为圆形布局,角色按索引分布在圆周上。使用公式 { (角色索引 / courtStandCount * 360) } 计算 Y 轴旋转角度,使摄像机面向指定角色。

示例:

; ===== TrialInit 中设置法庭参数 =====
@set "courtStandCount = 12"
@set "emaIdx = 0"
@set "hiroIdx = 8"

; ===== 摄像机设置 =====
; 立即定位到角色 (time:0)
@stageCamera 0 Height:5.6 Rotation:0,{ (8 / courtStandCount * 360) },0 Distance:12 time:0
@WaitForNextFrame

; 缓慢旋转到相邻位置 (动画效果)
@stageCamera 0 Rotation:0,{ (7.9 / courtStandCount * 360) },0 time:1 easing:"OutQuad"

; 近距离特写摄像机
@stageCamera 1 Height:3 Rotation:-2,{ (2.2 / courtStandCount * 360) },-2 Distance:4 time:0

; 环绕旋转 (长时间动画)
@stageCamera 1 Height:4 Rotation:-1,{ (5.8 / courtStandCount * 360) } time:25

; 全景摄像机
@stageCamera 0 Height:5 Distance:7 time:0

双摄像机系统: 索引 01 分别对应两个摄像机,配合 @showStageScreen / @hideStageScreen 实现分屏和镜头切换效果。


@showStageScreen / @hideStageScreen #

功能: 显示/隐藏 3D 法庭场景的渲染画面

常用参数:

参数类型说明示例
(索引)Int画面索引 (0 或 1)0, 1
timeFloat过渡时长0 (立即)
ResetBool是否重置状态true

示例:

; 显示 3D 法庭画面
@showStageScreen 1

; 隐藏 3D 法庭画面
@hideStageScreen 1 Reset:true

; 立即隐藏
@hideStageScreen 1 time:0 Reset:true
@hideStageScreen 0 time:0 Reset:true

@unloadStage #

功能: 卸载 3D 法庭场景 (释放资源)

示例:

; 审判结束时调用
@unloadStage

@gosubModifyCamera #

功能: 控制 3D 法庭镜头聚焦到指定角色

常用参数:

参数类型说明可选值
(索引)Int摄像机索引0
lookString聚焦角色角色名 (如 "Hiro", "Yuki", "Ema")
compString镜头构图方向"Left", "Right", "Center"
rollDirString旋转方向"Left", "Right"
zoomLvlFloat缩放等级2, 3

示例:

; 聚焦到角色 (基础用法)
@gosubModifyCamera 0 look:"Hiro" comp:"Center"
@gosubModifyCamera 0 look:"Yuki" comp:"Right"
@gosubModifyCamera 0 look:"Ema" comp:"Left"

; 带旋转方向和缩放 (特写)
@gosubModifyCamera 0 look:"Yuki" comp:"Left" rollDir:"Right" zoomLvl:3
@gosubModifyCamera 0 look:"Alisa" comp:"Right" rollDir:"Left" zoomLvl:3

; 中距离缩放
@gosubModifyCamera 0 look:"Ema" comp:"Center" zoomLvl:2

comp 参数: "Left" / "Right" / "Center" 控制角色在画面中的位置偏移方向,不是角色朝向。配合 rollDir 可以制造倾斜镜头效果。


@gosubCutIn #

功能: 播放审判切入演出 (如异议、伪证等动画效果)

常用参数:

参数类型说明
(角色)String演出角色
IndexInt演出动画编号

示例:

; 异议切入演出
@gosubCutIn "Hiro" Index:2

; 伪证切入演出
@gosubCutIn "Hiro" Index:1

@courtFire #

功能: 开启/关闭法庭火焰特效

示例:

; 开启火焰特效
@courtFire true
@printDebate pos:70,50 Roll:4 "不要妨碍我!" speed:1
; 关闭火焰特效
@courtFire false

@badId #

功能: 设置坏结局 ID (用于分支结局判断)

示例:

@badId 1

魔女图鉴指令 ✨ #

@update #

功能: 更新魔女图鉴条目

常用参数:

参数类型说明可选值
idString条目ID-
CategoryString分类Clue, Profile, Rule, Note
VersionInt版本号1, 2, 3…

示例:

; 更新证物
@update "MaxMixAlex_ManosabaModEnhance_1-1" Category:"Clue" Version:1

; 更新人物档案
@update "Ema" Category:"Profile" Version:2

; 更新规定
@update "MaxMixAlex_ManosabaModEnhance_1" Category:"Rule" Version:1

; 更新记录
@update "MaxMixAlex_ManosabaModEnhance_1" Category:"Note" Version:1

配合使用: 参见 魔女图鉴


@spawn / @despawn #

功能: 显示/关闭证物弹窗 (带动画)

示例:

; 完整的搜证流程
@spawn "Clue" Params:MaxMixAlex_ManosabaModEnhance_1-1
@toast "魔女图鉴 更新…"
@update "MaxMixAlex_ManosabaModEnhance_1-1" Category:"Clue" Version:1
@Wait "i1.2"
@despawn "Clue"
@Wait "0.6"

@toast #

功能: 显示屏幕提示文本 (黑底白字)

示例:

@toast "魔女图鉴 更新…"
@toast "获得新证物!"

@gosubResetBook #

功能: 重置魔女图鉴到指定版本 (审判开始前调用)

常用参数:

参数类型说明
VersionInt重置到的版本号
(路径)String重置子程序的脚本路径

示例:

; 审判开始前重置图鉴
@gosubResetBook Version:1 System/System_ResetWitchBook

地图搜查指令 #

@map #

功能: 打开地图搜查菜单

常用参数:

参数类型说明
flagString标记变量前缀
BackString返回标签
GlobalBool是否全局变量

示例:

@map flag:"F1_Prison" Back:".BackFromMap" Global:true

详细说明: 参见 地图搜查示例


@setFlag #

功能: 设置地图标记变量

示例:

@setFlag F1_Prison_Room1=true

视频播放指令 🎬 #

@movie #

功能: 播放视频文件

参数: 视频文件名 (不含扩展名)

支持格式: mp4, webm, ogv

文件路径:

[MOD文件夹]/Movie/[filename].[ext]

示例:

; 播放开场动画
@movie "Opening"

; 播放过场视频
@movie "Cutscene_01"

详细说明: 参见 视频播放


UI控制指令 #

@HideUI #

功能: 隐藏指定的 UI 元素

常用参数:

参数类型说明
(UI名)String要隐藏的 UI 名称,可逗号分隔多个
AllowToggleBool是否允许玩家手动切换

常见 UI 名称:

UI 名称说明
ControlPanel控制面板 (暂停、跳过等按钮)
DebateUI辩论界面
AutoToggle自动播放切换
WitchBookButtonUI魔女图鉴按钮

示例:

; 隐藏控制面板 (禁止玩家操作)
@HideUI ControlPanel AllowToggle:false

; 隐藏辩论 UI
@HideUI DebateUI AllowToggle:false

; 隐藏多个 UI
@HideUI ControlPanel,AutoToggle,WitchBookButtonUI,DebateUI AllowToggle:false

@ShowUI #

功能: 显示指定的 UI 元素

示例:

; 显示辩论 UI
@ShowUI DebateUI

; 显示控制面板
@ShowUI ControlPanel

@ProcessInput #

功能: 控制玩家输入权限 (哪些操作可用)

常用参数:

参数类型说明
(启用)Bool是否启用输入
setString各输入操作的开关 (逗号分隔)

示例:

; 启用输入 (默认状态)
@ProcessInput true

; 精细控制各项输入权限
@ProcessInput true set:Continue.true,Pause.false,Skip.true,ToggleSkip.true,SkipMovie.true,AutoPlay.false,ToggleUI.false,ShowBacklog.false,Rollback.false

set 参数格式: 操作名.true/false,多个操作用逗号分隔。常见操作: Continue (继续)、Pause (暂停)、Skip (跳过)、AutoPlay (自动播放)、ToggleUI (切换 UI)、ShowBacklog (显示记录)、Rollback (回退)。


@ReturnToTitle #

功能: 返回标题菜单

示例:

@ReturnToTitle

角色动作指令 #

@EmoteJumpDouble #

功能: 角色跳跃表情动作

常用参数:

参数类型说明
SpeedFloat动画速度
(角色)String角色 Actor ID
LoopBool是否循环

示例:

; 雪莉跳跃
@EmoteJumpDouble Speed:1 Sherry Loop:false

; Middle 层角色跳跃
@EmoteJumpDouble Speed:1 Sherry-Middle Loop:false

常见问题 #

Q: 指令参数的格式是什么?

A:

  • 字符串: 用引号 "文本" 或不加引号 文本
  • 数字: 直接写 1.5, 720
  • 布尔值: true, false
  • 坐标: 50,30 (X,Y)
  • 颜色: "#ff0000" (HEX格式,带引号), "#RRGGBBAA" (含透明度)
  • 表达式: {g_backgroundDefaultScale}, {counter + 1}

参数赋值: 使用冒号 参数:值 或等号 参数=值

Q: Lazy 参数是什么意思?

A: Lazy 控制动画过渡方式:

  • Lazy:true (默认): 从当前动画状态继续过渡到新目标
  • Lazy:false: 先立即完成当前动画,再过渡到新目标

游戏脚本中几乎所有 @back@char 都使用 Lazy:false,建议 MOD 中也统一使用。

Q: SubId 参数怎么用?

A: SubId 用于多层渲染:

  • SubId:"Overlay" — 最上层遮罩 (用于淡入淡出效果)
  • SubId:"Middle" — 中间层 (用于特写、视差效果)
  • 无 SubId — 默认层 (主背景/主角色)

层级从前到后: Overlay > Middle > Default。靠前的层会遮挡靠后的层。

; 背景在默认层
@back 5_1 Scale:{g_backgroundDefaultScale} Lazy:false
; 遮罩在最上层
@back SubId:"Overlay" Transparent tint:"#000000" time:1.2 Lazy:false
; 角色特写在中间层
@char SubId:"Middle" Hiro.Smile1 pos:30,30 Scale:1.25 Lazy:false
Q: @printDebate 的 Roll 参数如何使用?

A:

  • 正数 (1~5): 文本框向右倾斜,用于检察官 (左侧)
  • 负数 (-1~-5): 文本框向左倾斜,用于辩方 (右侧)
  • 0: 不旋转

示例:

; 检察官发言 (右倾)
@printDebate pos:70,50 Roll:4 "这就是证据!"

; 辩方发言 (左倾)
@printDebate pos:30,50 Roll:-3 "有异议!"
Q: 审判脚本的基本流程是什么?

A: 审判流程的典型结构:

; 1. 初始化
@gosubResetBook Version:1 System/System_ResetWitchBook
@Gosub ModName/TrialInit00
@timer 720

; 2. 隐藏普通 UI,显示辩论 UI
@HideUI ControlPanel AllowToggle:false
@ShowUI DebateUI

; 3. 开始辩论
@Gosub System/System_Subroutine.BeginDebate-First
@Gosub System/System_Subroutine.BeginDebate-Effect
@Gosub System/System_Subroutine.BeginDebate-Last
@pauseTrial false timer:true

; 4. 辩论文本 (带弱点链接)
@gosubModifyCamera 0 look:"Yuki" comp:"Left" rollDir:"Right" zoomLvl:3
@printDebate pos:70,50 Roll:4 "人生而有<link=\"Objection_00_00\">罪</link>。" speed:1

; 5. 弱点选项
# Objection_00_00
@Skip false
@pauseTrial true timer:true
@choice "异议内容" Lock:false button:"ChoiceButtons/Trial/Objection" handler:"TrialHiro" play:true show:true
    @sfx "Sfx_System_SaveData_001_2x" Volume:1 Loop:false fade:0
    @StopVoice
    @pauseTrial false timer:true
    @printDebate pos:70,50 Roll:4 "反驳内容" speed:1
    @return
@choice "返回" Lock:false button:"ChoiceButtons/Trial/Cancel" handler:"TrialHiro" play:true show:true
    @pauseTrial false timer:true
    @Wait "i{debateWaitTime}"
    @Return
@StopForChoice Clear:false

; 6. 结束辩论
@Gosub System/System_Subroutine.EndDebate-First
@pauseTrial true timer:true
@Gosub System/System_Subroutine.EndDebate-Effect
@Gosub System/System_Subroutine.EndDebate-Last
Q: 如何实现条件分支?

A: 使用 @set@if:

@set foundEvidence=false

; 搜查后设置变量
@set foundEvidence=true

; 根据变量分支
@if foundEvidence
    雪莉: 找到证据了!
    @goto .GoodEnding
@else
    雪莉: 没找到线索……
    @goto .BadEnding
@endif

相关教程 #