Lua Cutscene
由于蔚蓝是用 C#
编程语言编写制作的, 而官方的剧情都是硬编码的, 导致玩家写剧情的门槛太高, 所以就出现了 Lua Cutscenes 这样的 helper 来用 Lua
这种简单的编程语言来对接 C#
, 即我们可以编写简单的 Lua
脚本来使用官方代码中的各种跟剧情相关的函数
还有 Prismatic Helper 这种 Helper(简称 ph), 主要是嵌入 Dialog 中使用的
注意事项
因为 Lua Cutscenes 本质也是个 Mod, 所以记得开(, 问就是踩过坑
FAQ
为什么对话时无法设置相机的偏移
你的代码可能是这样的
| function onBegin()
disableMovement()
disablePause()
say("T_01")
setCameraOffset(3, 0)
enablePause()
enableMovement()
end
|
但实际得是这样
1
2
3
4
5
6
7
8
9
10
11
12 | function onBegin()
disableMovement()
disablePause()
player.ForceCameraUpdate = true
setCameraOffset(3, 0)
say("T_01")
player.ForceCameraUpdate = false
enablePause()
enableMovement()
end
|
- 因为
say
函数会阻塞程序(还在说话呢, 自然不会执行后面的), 所以 say
函数得写在 setCameraOffset
之后
- 其次由于
disableMovement
本质上是将玩家的状态设置为 StDummy
, 这个时候摄像机不会更新位置, 所以咋们还得给玩家设置下参数强制更新摄像机, 也就是这里的 player.ForceCameraUpdate = true
(记得最后复原)
怎么在对完话后传送
坐标可以按 ~
打开控制台查看当前鼠标位置
怎么让 Badeline 出来
- 详情见 Prismatic Helper 文档, 写 Dialog 即可, 下面画游的例子中也有提及(翻 Dialog)
- 使用 DJ Map Helper 的 Talk To Badeline Trigger
有选择的对话怎么做
写 lua
Myn: 可以抄一下画游序章的
具体路径gallerycollab2024_v2015\Cutscenes\cny2024\prologue\granny.lua
关键函数 choice
示例视频
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 | --获取蔚蓝命名空间(c#)
local celeste= require("#Celeste")
--获取蔚蓝GFX 静态类c#)
local gfx = require("#Celeste.GFX")
function onTalk()
disableMovement()
disableRetry()
wait(0.75)
walkTo(1805)
--调镜头
say("ChineseNewYear2024_0_lobby_prologue_grannytea_first")
--奶奶动画切换
setFlag("decal_flag_cny_po_grannyA",true)
--对话1
say("ChineseNewYear2024_0_lobby_prologue_grannytea")
--感谢sap和zzm喵(•ω•`)o
--隐藏玩家的头发和本体
player.Sprite.Visible = false
player.Hair.Visible = false
--从精灵库中创建一个叫"CollabUtils2_sitBench”的动画
local spr = gfx.SpriteBank:Create("CollabUtils2_sitBench")
--将动画附加到玩家身上
player:Add(spr)
--播放该动画的"sit"动画
spr:Play("sit",false,false)
--同理
local hairSpr= gfx.SpriteBank:Create("CollabUtils2_sitBench")
player:Add(hairSpr)
--复制头发颜色到我们的头发上
hairSpr.Color = player.Hair.Color;
hairSpr:Play("sitHair",false,false)
--喝茶
if getFlag("decal_flag_cny_po_grannyA") then
setFlag("flag_black_granny_tea",true)
end
wait(3)
setFlag("flag_black_granny_tea",false)
--对话2
say("ChineseNewYear2024_0_lobby_prologue_grannytea_B")
--选择对话部分
a=0
repeat
local thischoice = choice("ChineseNewYear2024_0_lobby_prologue_grannytea_B_MAD_A","ChineseNewYear2024_0_lobby_prologue_grannytea_B_MAD_B","ChineseNewYear2024_0_lobby_prologue_grannytea_B_MAD_C","ChineseNewYear2024_0_lobby_prologue_grannytea_B_MAD_D")
if thischoice == 1 then
say("ChineseNewYear2024_0_lobby_prologue_grannytea_B_MAD_A_01")
elseif thischoice == 2 then
say ("ChineseNewYear2024_0_lobby_prologue_grannytea_B_MAD_B_01")
elseif thischoice == 3 then
say("ChineseNewYear2024_0_lobby_prologue_grannytea_B_MAD_C_01")
elseif thischoice == 4 then
say("ChineseNewYear2024_0_lobby_prologue_grannytea_B_MAD_D_01")
a = 514
else
say("ChineseNewYear2024_0_lobby_prologue_grannytea_B")
end
until( a > 114 )
wait(0.5)
setFlag("cny2024_po_endend_hahaha",true)
say("ChineseNewYear2024_0_lobby_prologue_grannytea_end")
wait(4)
completeArea(false,false,true)
enableMovement()
end
function onEnd(level,wasSkipped)
if wasSkipped then
setFlag("decal_flag_cny_po_grannyA",false)
setFlag("cny2024_po_endend_hahaha",false)
completeArea(false,true,true)
end
end
|