Skip to content

脚本与流程控制

Galgo 脚本由 Script -> Node -> Step 组成。每个节点包含一组按顺序执行的 Step

go
script := galgo.NewScript()
script.AddNode("start", []galgo.Step{
    galgo.Text("", "旁白文本"),
    galgo.Jump("next"),
})

对话

go
galgo.Text("Aria", "普通对话")
galgo.TextBubble("Aria", "气泡台词")
galgo.TextWithVoice("Aria", "带语音的对话", "voice_001", "assets/voice_001.ogg")
galgo.TextBubbleWithVoice("Aria", "带语音的气泡台词", "voice_002", "assets/voice_002.ogg")

角色名和文本都会经过 ResolveText,支持翻译和变量插值。

富文本标签:

text
[color=#F43F5E]红色[/color]
[size=24]大字[/size]
[speed=6]慢速打字[/speed]
[shake]抖动[/shake]
[wait=30]
[se=click]

背景、立绘和镜头

go
galgo.Bg("classroom", "assets/bg_classroom.jpg")
galgo.Sprite("Aria", "aria_happy", "assets/aria_happy.png", galgo.PosCenter)
galgo.HideSprite("Aria")
galgo.Camera(0, 40, 1.25, 40)

Camera(x, y, zoom, duration) 非阻塞。duration 为 0 时立即应用。

音频

go
galgo.PlayBGM("school", "assets/bgm_school.ogg")
galgo.StopBGM()
galgo.PlaySE("click", "assets/click.wav")

角色语音通常通过 TextWithVoiceTextBubbleWithVoice 绑定到台词。

选项和跳转

go
galgo.Choice(
    galgo.ChoiceOption{Text: "一起回家", TargetID: "walk_home"},
    galgo.ChoiceOption{Text: "去社团", TargetID: "club"},
)

galgo.Jump("ending")

ChoiceOption.Callback 可在选择时执行 Go 逻辑。

Callback

Callback 用于嵌入任意 Go 逻辑。返回 false 表示继续执行下一步,返回 true 表示阻塞脚本。

go
galgo.Callback(func(e *galgo.Engine) bool {
    e.Shake(12, 20)
    e.Flash(color.RGBA{255, 255, 255, 180}, 25)
    e.SetVariable("walked_together", true)
    return false
})

分支示例

go
galgo.Callback(func(e *galgo.Engine) bool {
    if e.GetBoolVar("walked_together", false) {
        e.JumpToNode("good_end")
    } else {
        e.JumpToNode("bad_end")
    }
    return false
})

Released under the project license.