撰写了文章 更新于 2018-03-09 23:40:35
伺か\伪春菜的人格的简单制作方法
之前就想伪春菜会不会有英文的圈子?搜了一下似乎没有不过有个教程:
http://www.ashido.com/ukagaka/walkthrough.html
应该差不多是这样了吧,有了样本做(改)个简单的人格其实不难。
不过要制作中文人格首先遇到的问题是——
怎样显示中文?
伪春菜里有个叫伪AI还是什么的东西,也叫栞( SHIORI),有里里/里々、文等,文后来发展成YAYA,里里(大概)也一直有维护。里里应该是脚本写起来最简单的,但是它不支持中文,它用日文编码下的符号作为系统上需要的符号,可能是无法完全修改到中文编码下使用了再说也没人搞,其实是有里里写的中文人格,但那是用特制的文件,有些地方失效了,具体看贴吧里的教程,虽然如果只是做简单基本只说话的人格应该也够用,但是人都是喜新厌旧的,于是我还是选了YAYA……
YAYA也是有中文(其实好像是UTF-8)版本,但我还是下了日文原版的样本人格はろーYAYAわーるど(紺野ややめ),对了这个也是有中文版,但是这里忽略,总之试试让这个有基本功能的人格变成显示中文的。
打开SSP附带人格emily的文件夹就会发现是用yaya的,而且是utf-8编码,是在哪看的?在yaya的dll的同名txt里,似乎这就是设置文件,如果dll改名了它也要改成一样的名字。可以看到里面写着
//---- 文字コード -------------------------------------------------------
charset.dic, UTF-8
charset.output, UTF-8
charset.file, UTF-8
charset.save, UTF-8
charset.save.old, UTF-8
charset.extension, UTF-8
然后文件的编码都是UTF-8-BOM。
好了那就把下来的人格也照这样改掉,结果是不行的,看来emily的yaya也是特制的,经过试验,以下是可行的
charset.dic, GB2312
charset.output, GB2312
charset.file, GB2312
charset.save, GB2312
charset.save.old, GB2312
charset.extension, GB2312
之后把文件的编码都改成GB2312,推荐使用上面英文版教程推荐的Notepad++。
其实到这里还是有疑问,比如它真的能设成GB2312还是变成无效值了?还有是有直接写charset,XXX的,不知道行不行,不过试到这不想再试了,也许等别人补充。追加:确保和emily的一样,charset的那些插在最前面,全UTF-8是可以的,但一旦放在dic~那几行后面就不行了,应该差不多是这样吧,还是不太确定。
另外补充下descript.txt之类里的charset是指这个文件本身的编码,和人格本身关系不大,当然为了不在菜单中显示乱码有时还是要修改的。
接下来如果你的结果也和我的一样,那只需要修改(比如菜单)就可以,如果不一样那上面的都没用了,总之我也想知道这个方法是不是确实有效的,希望有人试验过反映一下。
再接下来就可以
修改对话
https://www36.atwiki.jp/sakurascript/
先看看这个,或者英文教程里的The basics of SakuraScript暂时也可能够用。
第一次启动和启动退出等的对话在yaya_bootend.txt,很简单,就是把引号内的内容换掉而已,平时的随机对话在yaya_aitalk.txt,同理还是把引号内的内容换掉。如果懒剩下的可以只直接删掉对话部分或者干脆不动。
修改shell
就是全部看到的图像,这个我也不懂,最好是弄个已经设定好的freeshell,直接替换掉就好,大概吧。
我也下了个freeshell试了下,可能并没有那么好,图片估计是对齐了,动画之类还得自己写。在这里就假定已经会了做出默认只用一张图的设定,大概像这样
surface0
{
collision0,86,23,165,60,Head
collision1,98,94,148,107,Face
collision……
}
这就是只有触摸判定的设定,至于怎么找范围可以用画图(别笑是真的)。
再加上眨眼动画
animation0.interval,sometimes
animation0.pattern0,overlay,100,100,0,0
animation0.pattern1,overlay,101,100,0,0
animation0.pattern2,overlay,100,100,0,0
animation0.pattern3,overlay,-1,100,0,0
之后发现我下的这个夏基と冬霞刚好有个戴眼镜的图,那就试试做个换装(着せ替え)。比较详细的教程
earlduant.github.io/ukagaka-shell-description/animations.html
查了下发现
- 这是像上面用一个动画表示的。
- 像上面单纯的覆盖显示。
但是图是像这样的
因为是眼镜刚好需要盖掉眼睛的位置,如果用一个动画把这图盖上面就是说眨眼动画消失了。
这样说可能不太明白,那么看看和Emily的眼镜的区别
Emily的眼镜是真的只有眼镜,它只会覆盖除了绿色的部分,所以不用管被它盖下面的图怎么动,但这个shell里的是戴着眼镜的角色图的一部分,把脸整个盖掉了。就像整个面具,即使在“面具”底下眨眼,自然也是看不到的,不过这句纯属猜测,也可能”换装”时并不显示原来的动画。按搜到的两个教程,换装的部分只能用一个动画也就是要么用静态的眼镜图,要么用戴眼镜眨眼动画,但眨眼动画是随机出现的,至少肯定要等零点几秒才显示出来,难道这种情况真的无解?
但是解决其实是非常简单,因为其实可以用几个动画,只需要在descript.txt写的时候使用
sakura.bindgroup*.addid,ID
在动画*显示的时候,动画ID也显示,再加逗号可以多插几个ID。
也就是说再插一个眨眼动画,把号码放ID的位置就可以了
animation100.interval,bind
animation100.pattern0,overlay,200,0,0,0
animation101.interval,bind+sometimes
animation101.pattern0,overlay,201,100,0,0
animation101.pattern1,overlay,202,100,0,0
animation101.pattern2,overlay,201,100,0,0
animation101.pattern3,overlay,-1,100,0,0
在descript.txt里
sakura.bindgroup100.name,glasses,sunglass,surface0200.png
sakura.bindgroup100.addid,101
sakura.menuitem0,100
修改菜单和其他功能
也许单纯随机对话感觉太单调了,可以在菜单加些功能,如果问我,我也不知道该加什么功能!不过在别的人格里见过比如橘花有的花语辞典、占卜、问人格问题(如“你喜欢什么花纹小kk”)等,都是可以点击的选项加上随机可以搞定,难度应该不是很大,要是不懂可以看看别人的,只是比如辞典什么的可以想象到的需要工作量。
上面测试时重启人格了好多遍,于是就发现其实重启也被看作切换人格,这时样本人格就把下次的自己看做别的人格说“在我之后和我”这种句子,还有是有时一开始副角色/1不显示,以下就来解决一下。
关于第一个问题,相关的脚本在yaya_change.txt,可以看到OnGhostChanging_和OnGhostChanged_ + 角色名 就是用来处理切换的事件的,角色名应该是descript.txt里sakura.name,后面的名字。于是建了2个这样的……东西果然是转到这2个……东西里去了,内容就靠自己写就是了。
关于第二个问题,隐约记得很久前看过,关于启动时角色没都显示出来的,自然也已经忘了,其实甚至不用上网搜,样本人格里已经有了,在OnBoot一开始的地方就写了
//---- まず双方のサーフィスを表示
"\0\s[0]\1\s[10]"
具体含义看过上面的script介绍应该懂了,就是\0主角色显示\s[0],\1副角色显示\s[10]的意思,因为一般对话都是写主角色\0显示\s[数字]怎样怎样,副角色是副的,一般不需变脸,需要也是到了它说话才换,才刚启动自然是空白的。切换后说完话后\1就显示出来了,这里猜测一下可能有别的处理,但是刚切换后是先走OnGhostChanged的,所以才会形成这种状况。
上面的问题就算解决了(解决了吗?),再接下来试试显示RSS。
其实现在我都不知道RSS是什么的缩写,反正就搜索结果来看可以肯定根本没人用伪春菜看什么RSS,总之先实际试试不是更好吗?
如图,就是能看到文章标题和,虽然看不出,这也是连接,点击就可以到那文章的网页。
这是打开后过零点几秒看到的,可以看到上面还有,是应该有自动的滚动拉下来的,另外虽然可以翻页继续读以后的,没法回去读以前的。
老实说虽然可以以前乱点也试出来过,一开始认真看到这个实在感到震惊,看着就是一堆文字堆在一起,根本没法看,而且习惯上是从头开始看,这还得拖回去看,怎么会有人用?
不过这是个难得让伪春菜和世上新鲜事物还有联系的功能(即使好像也不是每个软件都支持),也出于学习的目的,就至少把这改成看着是能用的吧。
先来看看自带的人格的表现
竟然有日期,这样确实容易看很多,但是内容省掉太多了,如果每项两行感觉还是可以,加上有日期也比较易区分了。
再试试样本人格的,和第一个基本一样。
用Notepad++搜emily的文件夹,可以找到读RSS的处理在aya_etc.dic 600行左右的OnRSSComplete。中间连接的部分
_script = ''
for _i = 2 ; _i < _n ; _i++ {
_kv = SPLIT(reference[_i],CHR(1))
if ( STRLEN(_kv[2]) ) {
_date = SPLIT(_kv[2],',')
_kv[0] = STRFORM("[$02d/$02d]",TOINT(_date[1]),TOINT(_date[2])) + _kv[0]
}
if ( STRLEN(_kv[1]) ) {
_script += "\_a[%(_kv[1])]\_?"
}
_script += SHIORI3FW.MakeShortText(_kv[0],45)
if ( STRLEN(_kv[1]) ) {
_script += "\_?\_a"
}
_script += "\n"
}
_script
可以看到有个SHIORI3FW.MakeShortText,看名可以猜到,只要把最后的数字改大就能改成两行(不过不敢改),那么打开样本人格的,对应的应该是yaya_etc.txt吧,但是打开并没有OnRSSComplete,其实在OnHeadlinesense.OnFind,emily里也有OnHeadlinesense
.OnFind,看来是先经过OnRSSComplete才到OnHeadlinesense.OnFind,所以emily里因为各种原因并没有去到OnHeadlinesense.OnFind,能猜出来的就这些了。
其实重点是,直接说结论,如果在样本人格里写(复制)一个差不多的OnRSSComplete,是不行的,会看到标题和连接地址都显示出来了,还有长串数字,也不能当连接点击了,这应该是因为上面的脚本一开始切开的地方(_kv = SPLIT(reference[_i],CHR(1)))出了问题,emily可以认出那个CHR(1)并切开,而样本人格不能,原因后面再说。
看实际显示出来的是一长串用逗号分开,那用逗号其实也能切开,但是文章标题里可能也有逗号,后面日期数字部分也是靠逗号切的,所以……不行。那……就直接改OnHeadlinesen
se.OnFind好了。
OnHeadlinesense.OnFind
{
//---- はじめのセリフ
if reference[2] == "First" || reference[2] == "First and Last"
{
//---- 最初のページ
"\0\b2\s[0]%(reference[0])のヘッドラインですよっ。"
}
elseif reference[2] == "Next"
{
//---- 真ん中あたりのページ
"\0\b2\s[0]%(reference[0])ヘッドライン、続き。"
}
elseif reference[2] == "Last"
{
//---- 最後のページ
"\0\b2\s[0]%(reference[0])ヘッドライン、これが最後のページです。"
}
--
//---- ヘッドライン本体
"\n\n%(reference[3])\n\n"
--
//---- 選択肢
if reference[2] == "First" || reference[2] == "Next"
{
//---- 次のページがある場合
AYATEMPLATE.MenuItem("次のページ","")
--
AYATEMPLATE.MenuItem("サイトへ",reference[1])
--
AYATEMPLATE.MenuItem("やめ","Menu_HEADLINECANCEL",150)
}
else
{
//---- 次のページがない場合
AYATEMPLATE.MenuItem("サイトへ",reference[1])
--
AYATEMPLATE.MenuItem("やめ","Menu_HEADLINECANCEL",150)
}
}
可以看到,中间的部分就只有"\n\n%(reference[3])\n\n"一句,\n就是单纯的换行,就是到这里时是直接显示,日期什么的很可能已经没了。
先在开头はじめのセリフ的3句话前面部分找个空位加上\_q,作用是让文章瞬间显示,那样就不用等最上面一个个字显示完才显示中间的主要部分。
接着让它不要自动滚到底,在本体那句最前加上\![set,autoscroll,disable]。
最后,我想,至少让它每个标题都有一定距离吧,挤在一起真的很难受。方法其实很简单暴力,就是把换一行的/n加一个,就变成换2行,为什么会知道有/n,老实说是猜的。最后本体部分变成
"\n\n[half]\![set,autoscroll,disable]"
--
_text = reference[3]
_text = REPLACE(_text, "\n", "\n\n[half]")
_text
--
\n[half]就是按半行的高度换行的意思,还有--这个虽然还没搞懂,总之先加上了。最后效果
可以看到,其实也没好多少(叹气)。
于是这就是最终成果,反正也不会有人用,随便点了……一天以后就搜出了为什么切不开的原因,参考:home.384.jp/evidence/cgi-bin/archives/62.html
简单来说有一个数据自动的变换,用SHIORI3FW.AUTO_DATA_CONVERT控制,因为文那堆相关数据是用逗号分割的,这个变换就会把那个CHR(1)变成逗号,自然会出现上面的情况。
问题是,既然它默认是1,那现在变成0会产生什么影响呢?人格会不会直接坏掉?反正都启动不起来好几次了,就先直接改了,再加上OnRSSComplete,结果是
好了,也许都控制在2行内再加个换行更好,算是解决了。
另外个人觉得,就算完全不懂编程,在on什么什么的地方改还是比较简单的,应该是比较详细的列表:ssp.shillest.net/ukadoc/manual/list_shiori_event.html
悄悄地追加:
不实用追加功能之集印本
样本人格里菜单有个选项是スタンプを押す,这是有一个需要另外下的插件,然后就能收集各种人格给的印章,但是并不是每个人格都有,有的也需要满足一定条件,每个人格只能在本上印一个章,但是可以换成不同的章。不知道中文界的人格有没有有印章的,虽然没怎么用过但是个人猜想很可能是一个也没有,总之是有这么一回事,只要有印章用图要写/直接替换也不是很难,至少可以让菜单多一项。
目录
wsedr [作者] 1年前
发布
口馍君 1年前
wsedr [作者] 1年前
发布