2016-9-15 11:36 /
前言

搞过QLIE的估计都会有对这个脚本有所了解,虽然语法很奇怪以及丑陋,但是还是猜出个大概来的。由于我没有搜索到关于这个脚本的介绍,所以写一点猜测出来。

语法特点
大体上来说
以^ @ \开头的都是脚本语言函数或者宏,参数以英文逗号“,”为分隔符,行首的空白字符没有影响。

\开头的大约都是脚本语言的关键词,如\sub子函数调用,\jmp文件跳转,\var变量定义等

@开头的都是函数定义,或者标号定义,或者是调用


^开头的属于AVG剧本命令,常见的有^include导入游戏文本,^include,allset,^include,allclear,^sentence,^savescene,^checkpoint。这些语句的具体作用是可以用上面的脚本定义或者配置的。


^message,show:false
^music01,file:BGM10
^sentence,fade:anime:$fadefast:アニメーション/シャッターオープン縦
^bg01,file:bg/BG30f

^chara01,file0:大蔵衣遠/,file1:AEO_,file2:S_,file3:0_,file4:0_,file5:01,show:false

上面的就是游戏的背景图片,背景音乐,头像等的设置。


旁白的话,直接一句话就OK了,啥都不需要,但要注意,估计英文逗号, ^\@这些关键词是不能出现的,要出现也得用全角。


台词的话,见到过多个版本的。但是大约都是三个参数。第一个是人物立绘图片文件名,不含路径及扩展(QLIE引擎会自动找遍全部的文件,找到合适的扩展名,当然这在脚本里面有配置),第二个是人物的名字,第三个参数是就是对话了


语法说明

变量声明与管理


\var,obj,p,a
\var,table,c
\var,str,nn
\var,int,i
\var,list,lst

变量定义

空字符串"",空obj为null

\gvar,theora,Avg_TheoraMovie
\gvar,int,TheroaMovieCanSkip

另一种变量定义


\del,Imo_LogText,Imo_LogName,Imo_LogVoice
\del,_retint

内存管理


标号

@@@AVG\header.s
        include一个文件

@@MAIN
        大约是标号定义


赋值


\cal,SPOpenflag=1
\cal,w=ParamInt[7],h=ParamInt[8]
\cal,Avg_SceneSkipName=ResultStr[0]+ResultStr[1]

简单的赋值语句

\scp,Imo_Setting        \?v,"SaveThumPriority"        \stid,ResultStr[0],999

大量出现这种语句,而且貌似比较复杂,一条语句可以长达十多行,怀疑是一个obj类型的赋值语句。还有一种不带参数
\scp,flog        \i
\scp,inp        \mp

这种暂时猜不出是啥

\scp语句貌似非常多样,似乎还有一规律。


过程语句

循环语句

\var,int,n,i
\cal,n=ResultInt[0]
\for,i=0,i<n,i++
        \scp,p        \?n,i
\end


条件语句

\if,ResultInt[0]==1\then

\else

\end

其中\else是可选的

分支语句

\case,ParamStr[8]
        \ans,"強制","0"
                \stop,@@!Avg_MovieOnForceStopEvent
        \ans,"既読"
                \scp,llog        \?k
                \if,ResultInt[0]==0\then
                        \stop,@@!Avg_MovieOnForceStopEvent
                \else
                        \stop,@@!Avg_MovieOnStopEvent
                \end
        \else
                \stop,@@!Avg_MovieOnStopEvent
\end

分支语句


字符串函数

\rep,ParamStr[0],"@",""
\rep,ParamStr[9],"/","\"
\rep,ParamStr[1],"%%%capture_","$$$GameThreadImageZ,"

字符串替换

\div,",",ResultStr[0]

用逗号split字符串,结果存在ResultStr[0],ResultStr[1]...里面


\fmt,"[pc,%s]",s
\fmt,"%.4d",p
\fmt,"[c,%s]",ResultStr[0],"[rc,%s]",ResultStr[0]

格式化字符串,此语句的结果在ResultStr[0]里面,或者直接写在\scp语句里好像也行。

\bsub,"s/\[rb,([^,]+),[^,]+\]/$1/gk",s

正则表达式查找

函数过程语句

@@!Avg_MovieFree

\ret

函数

关于函数内的两个特殊变量ParamStr,ResultInt
ParamStr[0],这个应该是函数内的参数列表,我比较怀疑是self参数后的那个开始算起。


\sub,@@!Avg_RepStr2Param,self,tmp
\cal,tmp=ResultStr[0]

ResultInt[0],这个应该是上一条\sub语句调用函数返回的数组

\sub,@@TOP,"Scenario\ED_Movie.s","湊",SPOpenflag==0        
子函数调用语句,后面的是参数

\jmp,@@TOP,"Scenario\本編\Y12_02A.s" 
文件跳转语句

@@@!AvgSystem_Custom.s

函数导入语句



其他
还有一些奇怪的语法现象
比如对话或者旁白中的ruby假名注音,用的是[rb,乗馬,の]


\if,#SysEffectSpeed==0\then
        \scp,eff        \i
\else

我比较怀疑这是个#SysEffectSpeed,取指针指向内容的操作。



莫名其妙的语句

\fexs,ParamStr[0]

\pos,"%%%capture",ParamStr[1]

\ddlg,ParamStr[2]+ParamStr[1]+":ファイルが見つかりません。"
\dout,ParamStr[2]+ParamStr[1]+":ファイルが見つかりません。"

\scp,t        \sort


本文由飞天喵发出,未经许可,禁止转载。如果错漏欢迎指出交流。

#1 - 2016-9-17 09:45
(おれはもう自分の使命を果たした、次はお前もだ。 ...)
留名。