到了fメッセージ1行実行(运行一行message)之后就已经是具体实现了,这部分先放一放,从头开始看看message及上一级的scenario是如何运作的
SilverHawk与Kag(3?)不同,在startup.tjs中直接进行了相关信息的初始化和类的实例化,相当于kag中Initialize.tjs和Config.tjs的工作
而在startup.tjs的最后进行了ASH_シナリオ的实例化并开始执行脚本

这个v起動時に実行するシナリオ(启动时运行的脚本)也是之前定义的,而SilverHawk的剧本文件后缀是scn,所以它才给实例叫做Scn?(话说突然就不用匈牙利命名了,那个win也是,是ASH_Window的实例,大概是和kag3的Mainwindow、kag是一个东西
名字带スクリプト的都是继承自ASH_スクリプト的方法,fスクリプトジャンプ(Script jump)也一样,大致用途和kag.process相同,转跳到指定剧本的指定标签,不过并不开始运行。vバッファA也是在这个方法中填充好的
随后便是一个允许运行

在帖子一开始提到的ASH_シナリオ解析vバッファA的逻辑就位于图中的fスクリプトループ実行(循环执行剧本)里,那段逻辑所在的大括号和这里类似,是while(v実行不許可カウンタ == 0),显然SilverHawk每一行脚本的运行都要看这个v実行不許可カウンタ(不允许运行counter)是否为0,而它的初始值是1,自减后为0就会进入逻辑开始运行
而这个变量的名字叫做counter而不是flag,同时之前翻message解析规则的时候也看到了很多使用它来停止、运行脚本的操作。显然一串操作下来可能有数个环节对脚本是否继续运行会进行操作。不过为什么我不理解为什么要用f関数非同期実行(异步执行)来开始解析循环

底下有个fウエイト(wait)就展示了用法,在隔壁ASH_シナリオ用関数.tjs(scenario用函数)里就有

这个tjs里定义的函数就是在scn里实际作为指令写出的,即前面没有全角空格和【的行
假如一个scn循环执行到了wait,就会调用fウエイト,随后就fスクリプト実行不許可,v実行不許可カウンタ就成了1,while循环立刻被阻断,直到一定时间后timer调用底下的fウエイト用タイマー関数(wait用timer函数)重新开始运行,这就实现了wait
不过ASH_シナリオ重写了这个fウエイト,实际在script层级上(即super.fウエイト)上wait前还有好些个操作,这样看这种wait的精度……
所以这也就是曾经说用wait来实现字幕等非同步卡时间的操作简直是误差的典范的原因?kag也是如此?