网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月27日漏签0天
吉里吉里吧 关注:51,156贴子:70,818
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 36回复贴,共1页
<<返回吉里吉里吧
>0< 加载中...

【一定会坑】不同于KAG,SilverHawk杂谈

  • 只看楼主
  • 收藏

  • 回复
  • wzhydd1
  • 小吧主
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
前言
最近推了不少黄油,有些不满意的设定如果是基于krkr的我就自己魔改了一下,因此见识了不少激进(?)的操作

比如有一家是这么个样子,我们超喜欢tjs式系列。不过这个还好,姑且还是在kag上大规模补丁的产物
而本帖主要讲的则是Silver Bullet构筑的完全扔掉了kag的SilverHawk
我一个kag都没搞清楚的人搞这个肯定会出问题的.jpg


  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我感觉这东西直接写成tjs也没啥问题...


2025-06-27 06:55:22
广告
  • 鱊之不一
  • 吧主
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
好多游戏 魔改的厉害 跪大佬 我连低版本的kag都看不明白


  • wzhydd1
  • 小吧主
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
·为什么开这个?
首先看一下他的scenario

基本上是函数调用加上固定格式的文本书写,并且以固定格式隐含了一些调用
这种风格就比1L那种不论是在可读性还是在编写方面都要舒服得多。当然,上图这个场景并不太复杂,这种程度KAGeXpress应该也能达到差不多的效果
(说句题外话,1L的那种形式其实我也考虑过,我想得更彻底,让每句话的标签下内容都包含了该句场景的所有信息,乃至达到随意jump一个标签都能完整重现那句话应有的场景的效果,然后彻底扔掉sl,甚至可以随意跳进度。当然,这太过**而且我也懒得填坑所以没能出现2333
另外实现该系统的tjs除去那些实现特定界面的(例如标题、设置等kag也没有内置的)仅508KB,尽管这比kag3要多,但也至少没有那种一个MainWindow上百KB的强行劝退,而且也需要特别说一下他的编写方式:

他使用了一种类似匈牙利命名法的方法来进行相关命名。并且除去重写的方法,全都是以日文作为名称,还有相当数量的注释,我觉得这对我这种英死早相当友好,也比kag看起来舒服多了,所以我没看kag却来看这个


  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
咋说呢...这种虽然以前考虑过,但是这种东西不换语言还好,换语言直接暴毙..........
他这个应该是每行调用,因为没有换行的问题,加上这个格式不太用管区间对应的问题,所以差不多就
检测首字符是否为【,如果是的话向后搜索()取值,然后把后面的传参就完事了
如果首字符不为【,向后直接检测(符号,如果存在把前面的部分拆出来作为指令,把括号内传参
剩下的应该就是换行上剧本就完事了
不过我还是更倾向于那种剧本文件单独拿出来,然后扔个容器上去,之后挂索引读每一格就是了
读完之后把本格的变更的数据做一个小存档,首尾各一个大存档,覆盖就完事了,虽然麻烦点


  • wzhydd1
  • 小吧主
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
首先(继续?)说scenario
SilverHawk有一个专门的ASH_シナリオ(scenario)类来管这个
首先会用一个从ASH_インターフェイス(Interface)继承ASH_スクリプト(Script)继承来的Array对象vバッファA(Buffer)直接load进来,这就直接分好行了,随后根据每行……

他完全是用的首字符判断,比楼上的想得要更为简单
如果开头是个全角空格(?)或者是【就说明是文本,交给隔壁专门管这些个的ASH_メッセージ(Message)来处理
什么都不是的兜底直接当tjs式跑
然后值得注意的是中间有个[开头没处理的,是的这玩意也不是不能继续拓展成kag那样
把视野转向隔壁的ASH_メッセージ,他也是继承ASH_インターフェイス来的,也是向vバッファA里塞东西来序列处理,而vバッファA每一个元素的意义是一行,可以理解为它进一步解释了scenario的各message生成了一个虚拟的message文件(?)段来逐行处理,然后,**的地方就来了


讲道理我觉得他各种命名意义完整得那么舒服到这里突然就变成switch case然后还是意义不明的数字来区分着实有的生草
按照他这个思路下来那原文本的一句全角空格开头的应该被翻译成了以下这种形式的代码段
33
0xffffff
11
24
41
……
21世纪了还要搞得像机器语言一样


  • 洛达拉崩吧
  • 秀才
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
nb了


  • wzhydd1
  • 小吧主
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
到了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也是如此?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 36回复贴,共1页
<<返回吉里吉里吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示