したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

ゴーストをつくろうとしてる人たちが話すスレ

1任意たん@age推奨:2017/07/02(日) 21:33:32
ゴーストをつくりたいんだ

1104任意たん@age推奨:2023/04/09(日) 11:07:42
色々あって去ったデベとか数人しか思い浮かばんしな
なんにせよ昔の事だし気にすんな

1105任意たん@age推奨:2023/04/09(日) 17:26:59
最近問題を起こしたならやめておいた方が無難だが
なにを起こしたのかにもよるしここに言いに来る時点でなあ
好きにやればいいけどまた問題起こさないといいな

1106任意たん@age推奨:2023/04/10(月) 10:42:39
やっちまったもんはしゃーないしな、返してくれとも俺からは言わん
違ったらすまんな
戻ってきてくれて嬉しいよ

1107任意たん@age推奨:2023/04/12(水) 01:27:52
どうでもいいから早くお前のゴーストを見せてくれ
ゴーストなんて多ければ多いほどいいんだから

1108任意たん@age推奨:2023/04/13(木) 10:16:19
周りがどうしても気になるならゴーストマスカレードに匿名で出したら?
ランダム交代禁止とかゴースト内の制限はいろいろと多いけど
http://earlduant.blog.fc2.com/blog-entry-872.html

1109任意たん@age推奨:2023/04/13(木) 13:05:17
別にイベントに参加しなくても勝手に作って勝手に上げればいい

1110任意たん@age推奨:2023/05/11(木) 21:56:43

すみません、YAYAについてなのですがお助け下さいおねがいします。

wikiのマニュアル/基本/繰り返しにforの使い方が書いてありますが、これを紺野ややめに組み込んでも説明通りに動きません。
説明だと「0回目,2回目...9回目が改行しながら出力されます。」とあるのですが、〇回目が一つしか出ず、数字もランダムみたいなんです。

https://i.gyazo.com/bfa125b92202dce78eb857dada1d6316.png

OnKeyPressの中にwhen 'b'を追加して動かしているのですが、bを押せばとりあえず表示が出るのでここは合ってると思うのですが……。
何か大きなものを見落としているのかもしれませんが、それが何なのかさっぱりわかりませんorz

1111任意たん@age推奨:2023/05/12(金) 04:00:36
>>1110
1110さんの書き方だと、when 'b' の中身が配列として解釈され、ランダムな択一で出力されているようですね。
うまく説明できず申し訳ないのですが、以下のようにしてみてください。

####

when "b" {
for _result = "", _i = 0 ; _i < 10 ; _i = _i+1{
_result = _result + _i+"回目\n"
}
_result
}

1112任意たん@age推奨:2023/05/13(土) 07:00:48

>>1111
ありがとうございます、無事動きました。
……なのですが、やっぱりよくわかりませんでした。もしよろしければ、もう少しお助け下さい。

>>1111

1行目:when "b" {
これはキーボードの「b」が押されたら{}内部を実行する、ぐらいの意味。この場合は "b" でも 'b' でも特に違いは無い。

2行目:for _result = "", _i = 0 ; _i < 10 ; _i = _i+1{
forが繰り返し命令? 初期設定で_resultに空白入れて文字変数にして、_i = 0が初期値、i <10が終了条件、_i+1がループ毎に実行される。

3行目:_result = _result + _i+"回目\n"
_resultに空白と_i の数字と「回目」と改行を合体させて「〇回目」という文字列を作る。

4行目:}
2行目for の終点。

5行目:_result
3行目で作った文字列「〇回目」をここでバルーンに出力。

6行目:}
1行目when "b" の終点。

と、私は認識しているのですが、どうでしょうか? 
ただ、これだと、

謎1:i <10が終了条件
直前で _i = 0 が入るなら、即 0 < 10 成立で終わりそうに思うのですが……。
むしろ続行条件に見えます、謎です。

謎2:5行目の_result
forって、「 for 初期設定 条件 { 処理 } 」 って構造で、条件を満たすまで処理を{}の内部で繰り返すと思っていたのですが、そうだとすると5行目の_resultがforの{}の外側に居る理由がわかりません。
C言語?だとそういう処理なんでしょうか?

もし気が向いたらお答えください、おねがいします。
……YAYA、私には向いてなさそうですねorz

1113任意たん@age推奨:2023/05/13(土) 08:13:38
>>1112

*1行目
今回の場合は"b"でも'b'でも違いは無い、という理解で合っています。
(ごく短い、単なる文字列であるため)

""で囲む場合、変数や関数を内部に埋め込むことができます。
''で囲むと、それらが展開されません。

*2行目
_i<10は終了条件ではなく、式が真ではなくなったらループを脱出する、というものです。(脱出判定式)
この場合、_iが10より小さい場合はループが続行され、_iが10以上になったらループが終わります。

*3行目
2行目の脱出判定式が真である間、3行目の処理が繰り返されます。

具体的には、以下のようになっています。
脱出判定: _i<10は0<10で偽のため、続行
繰り返し1回目: 『_result(空の文字列変数)、_i(0の数値)、「回目\n」』を連結した文字列をローカル変数_resultへ代入
ループ毎に実行する式: _i=_i+1で、_iは1になる
脱出判定: _i<10は1<10で偽のため、続行
繰り返し2回目: 『_result(0回目\n)、_i(1の数値)、「回目\n」』を連結した文字列をローカル変数_resultへ代入
ループ毎に実行する式: _i=_i+1で、_iは2になる
脱出判定: _i<10は2<10で偽のため、続行
繰り返し3回目: 『_result(0回目\n1回目\n)、_i(2の数値)、「回目\n」』を連結した文字列をローカル変数_resultへ代入
ループ毎に実行する式: _i=_i+1で、_iは3になる
(以下略)

*4・5・6行目
その理解で合っています。

*謎1
2行目の解説でも書きましたが、その位置の式が「成立しなくなったら」終わり、というものです。

*謎2
5行目の文字列出力はforの繰り返し処理の後に実行されてほしかったので、forの後に書きました。
3行目の繰り返し処理で変数「_result」の中へ最終的に出力して欲しい内容を作り、
その後単体で変数の内容を出力しています。

以下の内容をOnKeyPressへ加えてCキーを押すと、
バルーンには変数「username」の中身である『ユーザーさん』が出ると思います。(紺野ややめの場合)
when "c" {
username
}

1114任意たん@age推奨:2023/05/13(土) 13:47:11
横から失礼。
>>1113
『繰り返し処理の後に実行されてほしかったので』とあるけど、要するに

計算→表示→計算→表示→……→計算→表示
とするより、
計算→計算→……計算→表示
とした方が処理が少なくていいよね、ということだと思う。

1115任意たん@age推奨:2023/05/13(土) 17:08:59

>>1113
ありがとうございます。5行目の_resultに10ループぶん溜め込んで纏めて出力していたのですね。
私は初心者なので、計算+出力を10回ループ、に拘って勉強していたので発想が追いつきませんでしたorz

>>1114
上記の通り、最適化よりも基本に忠実、で頭が固まっていました……。



本来目指していたものは、

when 'n' {
for _result = "", _rotate = "" , _i = 0 ; _i < 360 ; _i = _i+10{

_result = _result + _i+"度\n"

_rad = _i * 3.14159265358 / 180
_x = SIN(_rad) * 100
_xxx = TOINT(_x)
_rotate = "\![set,scaling,"+ _xxx+ ",100]\n\"

_rotate

}

}

これで、n押したらシェルが一回転するかな〜?と思ったんですがやっぱりダメでした。
>>1110同様ランダム動作にしかならんですorz
勝手に配列処理を禁止に出来たら上手くいきそうなのになぁ……。

1116任意たん@age推奨:2023/05/13(土) 17:19:58
あ、_result = _result + _i+"度\n"消すの忘れてた、ごめんなさい。

1117任意たん@age推奨:2023/05/13(土) 18:09:00
>>1115

文/YAYA wikiの「マニュアル/文法/7.フロー制御」のページのスクリプトの例を見る限り、
ループの内部で文字列を出力した時、ループの回数ごとを要素とした配列が結果として出てくるのは、仕様なのかもしれません。
ループ内部で出力確定子やallが効けば質問者さんの理想に近づく気がしましたが、自分の試した限りではできませんでした。

when 'n' {
for _rotate = "" , _i = 0 ; _i < 360 ; _i = _i+10{
_rad = _i * 3.14159265358 / 180
_x = SIN(_rad) * 100
_xxx = TOINT(_x)
_rotate = _rotate + "\![set,scaling,"+ _xxx+ ",100]\w1"
}
_rotate
}

########
ただし、独立した関数として書くなら、allが効きます。
//OnKeyPressのcase分岐の中にこれを書く
when 'n' {
Kururinpa
}

//独立した関数としてこれを書く
Kururinpa : all
{
for _i = 0 ; _i < 360 ; _i = _i+10{
_rad = _i * 3.14159265358 / 180
_x = SIN(_rad) * 100
_xxx = TOINT(_x)
"\![set,scaling,"+ _xxx+ ",100]\w1"
}
}

11181117:2023/05/13(土) 18:18:40
>>1117
出力にウェイトを噛ませています、というのを書き忘れていました。
(「\w1」がそれです)
無いと一瞬ですべてが行われてしまい、回転している感じにはならなかったので。

1119任意たん@age推奨:2023/05/13(土) 20:25:42

>>1117
ありがとうございます、無事上手くいきました。
ループの内部だと配列確定は仕様なのですね、YAYAって難しい……。

……正しくはSIN(_rad) じゃなくてCOS(_rad)だという事に気付かず、無駄に苦労しましたorz


後は、 里々から回転数・1描写あたりの角度・1描写あたりのウェイトをYAYA as SAORI に送って動くように出来たら、野望が達成できそうです。
ただ、YAYAよりもC言語を学ぶのが先になりそうです……。

1120任意たん@age推奨:2023/05/13(土) 21:07:50
>>1119
よかったです。陰ながら応援しています。

1121任意たん@age推奨:2023/05/14(日) 02:56:07
>>1120
ありがとうです、がんばります。

……>>1117で作って頂いたKururinpa、早速YAYA as SAORIに突っ込んでみたものの全く動かず、
色々考えてみたらSAORIが直接さくらスクリプトを実行するわけじゃないから、YAYA as SAORIから
RES.RESULTでさくらスクリプトを受け取って里々が実行しないとダメなんだな、と思いました。

YAYA as SAORIに計算全て任せると結果がRES.RESULTに配列で還ってくるので、
ループ部分は里々で作ってその都度YAYA as SAORIにさくらスクリプトを作らせる方針で逝こうと思います。

1122任意たん@age推奨:2023/05/14(日) 08:02:56
>>1121
余計なお世話でしたらごめんなさいなのですが、こういうことでしょうか。

◆yaya as saoriに追加する内容
Kururinpa
{
//引数0(1つめ):回転数を正の数で
//引数1(2つめ):1描写あたりの角度を正の数で
//引数2(3つめ):1描写あたりのウェイトをミリ秒単位の整数で
//すべて半角数字を想定

if ARRAYSIZE(REQ.ARGS) < 3 {
//引数が足りなかった
LOGGING("Kururinpa: 引数が不足しています")
-1
return
}
elseif ISREALSTR(REQ.ARGS[0])==0 || TOREAL(REQ.ARGS[0]) <= 0 {
//引数0に正の数以外が入っていた
LOGGING("Kururinpa: 引数1つめが正の数ではありません")
-1
return
}
elseif ISREALSTR(REQ.ARGS[1])==0 || TOREAL(REQ.ARGS[1]) <= 0 {
//引数1に正の数以外が入っていた
LOGGING("Kururinpa: 引数2つめが正の数ではありません")
-1
return
}
elseif ISINTSTR(REQ.ARGS[2])==0 && TOINT(REQ.ARGS[2]) < 0 {
//引数2に正の整数以外が入っていた
LOGGING("Kururinpa: 引数3つめが正の整数ではありません")
-1
return
}

_w = ''
if TOINT(REQ.ARGS[2]) > 0 {
//引数2が1以上ならさくらスクリプトでウェイトを入れる
_w = '\_w[' + REQ.ARGS[2] + ']'
}
//引数2が0なら何もしない(変数_wを空のままにしておく)

_a0 = TOREAL(REQ.ARGS[0])
_a1 = TOREAL(REQ.ARGS[1])
//里々からの引数は文字列型で来るので、数値型へ変更する

for _result='' , _i = 0 ; _i < ( _a0 * 360 ) ; _i = _i + _a1 {
_rad = _i * 3.14159265358 / 180
_x = COS(_rad) * 100
_xxx = TOINT(_x)
_result = _result + '\![set,scaling,' + _xxx + ',100]' + _w
}

RES.RESULT = _result
//変数「RES.RESULT」へ代入された内容が里々へ返る
}

◆里々に追加する内容
*nキーを押した
:(aya,Kururinpa,1,10,20)

11231122:2023/05/14(日) 08:09:41
すみません、>>1122には間違いが入っています。
//引数2に正の整数以外が入っていた の上の行は正しくはこうなります。

elseif ISINTSTR(REQ.ARGS[2])==0 || TOINT(REQ.ARGS[2]) < 0 {

1124任意たん@age推奨:2023/05/14(日) 14:33:58

>>1122
ありがとうございます、いろいろ間違えたり勘違いしながらも無事に動かせました。
ayasaori.logの中で

// request
EXECUTE SAORI/1.0
Charset: Shift_JIS
Sender: SATORI
SecurityLevel: Local
Argument0: Kururinpa
Argument1: 1
Argument2: 10
Argument3: 20

と書かれているのに、

REQ.ARGS[0]←Argument1が入る
REQ.ARGS[1]←Argument2が入る
REQ.ARGS[2]←Argument3が入る

なのがとても不思議な感じでした。

1125任意たん@age推奨:2023/05/27(土) 07:46:17

度々すみません、>>1124です。
>>1122さんに作って頂いたKururinpaを弄って色々作っているのですが、
シェルを縦に縮めて戻す関数を作っているのですが、上手くいかないですorz


gravity
{
//引数0(1つめ):伸縮の最小値を正の数で
//引数1(2つめ):1描写あたりの伸縮率変動値を正の数で
//引数2(3つめ):1描写あたりのウェイトをミリ秒単位の整数で

_a0 = TOREAL(REQ.ARGS[0])
_a1 = TOREAL(REQ.ARGS[1])
_w = '\_w[' + REQ.ARGS[2] + ']'

for _resultd='' , _id = 100 ; _id < _a0 ; _id = _id - _a1 {
_resultd = _resultd + '\![set,scaling,100,' + _id + ']' + _w
}

for _resultu='' , _iu = _a0 ; _iu > 100 ; _iu = _iu + _a1 {
_resultu = _resultu + '\![set,scaling,100,' + _iu + ']' + _w
}

RES.RESULT = _resultd + _resultu

}

これを紺野ややめに移植して、REQ.ARGSを数字に置き換えても何も起きないです。
何が間違ってるのかわかりません、どうかお助け下さい……。

1126任意たん@age推奨:2023/05/27(土) 12:34:35
>>1125
脱出判定式(条件に合致するとループ終了)が、
ループ処理1回目開始前から成立してしまっているのだと思います。

1つ目の判定式を「_id >= _a0」、
2つ目の判定式を「_iu <= 100」へ変えてみてください。

1127任意たん@age推奨:2023/05/27(土) 19:08:50
>>1126
ありがとうございます、無事動きました。
……また条件勘違いしてました、ごめんなさいorz

1128任意たん@age推奨:2023/06/10(土) 15:29:54
すみません、バルーンをシェルの裏側に表示させる方法ってありますか?
\![set,zorder,スコープID,スコープID,...]でシェル同士の優先は設定できるけど、
バルーンとシェルの設定は見当たらないのですが、無いんでしょうか?

1129任意たん@age推奨:2023/06/15(木) 15:08:50
>>1128
バルーンをシェルより奥に表示させる方法は、自分の見た限りでは今のところ無いと思います。
既存の仕様で疑似的に表現できないか試行してみましたが、
sticky-windowとzorderを組み合わせるだけではダメでした。

1130任意たん@age推奨:2023/06/15(木) 18:50:09
>>1129
ありがとうございました。やはり無いみたいですね……。

1131任意たん@age推奨:2024/03/13(水) 08:13:12
里々で、現在のサーフェスに応じてランダムトークを分岐させたいのですが方法はありますか?
会話時サーフェス戻しを無効にし、

*【タブ】(サーフェス0)==0
:なんちゃら。

*【タブ】(サーフェス0)==1
:かんちゃら。

というように記述してみたのですが動作しませんでした

1132任意たん@age推奨:2024/03/13(水) 17:01:01
>>1131
その記述単体に問題は無さそうです。
動作しないというのは、以下のどれでしょうか?
・何もランダムトークをしなくなる
・分岐を設定したトークが出てこない
・分岐を設定したトークが意図通りでない時に出てくる
(サーフェス0番の顔の時にサーフェス1番の分岐が出てくる、など)
・その他

1133任意たん@age推奨:2024/03/13(水) 17:58:01
>>1132
・分岐を設定したトークが意図通りでない時に出てくる
>>1131では省略しましたが、正しくは以下の辞書になっています(後出しで申し訳ありません)


*OnTalk
$サーフェス変化トークタイマ【タブ】(乱数30〜50)
>(R1)【タブ】(R0)
()

*サーフェス変化トーク
>ポーズ0【タブ】(乱数1〜2)==1
>ポーズ1【タブ】(乱数1〜3)==1
>ポーズ2【タブ】(乱数1〜5)==1
>ポーズ3【タブ】(乱数1〜7)==1

*ポーズ0
:(0)
*ポーズ1
:(1)
*ポーズ2
:(2)
*ポーズ3
:(3)

*【タブ】(サーフェス0)==0||1
:(0)なんちゃら。

*【タブ】(サーフェス0)==2||3
:(2)かんちゃら。


時間経過でランダムにサーフェスが変化する処理を入れつつ、
サーフェス0番か1番のときに「:(0)なんちゃら。」、サーフェス2番か3番のときに「:(2)かんちゃら。」とトークさせたいのですが、
現在のサーフェスとは無関係に「:(0)なんちゃら。」も「:(2)かんちゃら。」も出てきてしまいます

1134任意たん@age推奨:2024/03/13(水) 18:20:41
>>1133
条件を||や&&でつなげて複数書く時は、それぞれが式になるようにしてください。

*【タブ】(サーフェス0)==0||(サーフェス0)==1
:(0)なんちゃら。

*【タブ】(サーフェス0)==2||(サーフェス0)==3
:(2)かんちゃら。

1135任意たん@age推奨:2024/03/13(水) 18:49:22
>>1134
式を書き換えたら想定通り動作しました、ひどい凡ミスにつきあわせてしまいすみません…
ありがとうございました

1136任意たん@age推奨:2024/03/14(木) 15:55:57
>>1135
解決したようで良かったです。

1137任意たん@age推奨:2024/03/14(木) 18:20:27
それだけなら

*【タブ】(サーフェス0)<2
:(0)なんちゃら。

*【タブ】(サーフェス0)>1
:(2)かんちゃら。

これでも動きそうな気がする

1138任意たん@age推奨:2024/03/14(木) 20:07:51
>>1136
お手数おかけしました、ありがとうございます

>>1137
ありがとうございます
実際に使用予定のシェルではサーフェス番号が飛ぶ予定だったので||を使っていましたが、例の通りなら確かにその方がスマートになりますね
(本来のシェルで辞書を書いていてうまくいかなかったので、単純化した仮のシェルで原因を探っていました)
式の書き方の一つとして頭に入れておきたいと思います

1139任意たん@age推奨:2024/03/19(火) 14:31:26
すみません、質問させて下さい。
ゴーストのカラーピッカーを出して、¥1のうにゅうの色をカラーピッカーの色に替える、みたいなことをしたいのですが、どうすればいいのか分かりません。
ゴーストCOLORSのように色を反映させたいです。
imgctl_saori.dllというsaoriを使うのかな?と思うのですがどのようにすればいいでしょうか?

1140任意たん@age推奨:2024/03/20(水) 16:43:00
>>1139
この説明で行けそうでしょうか。


1. 普通のうにゅうの絵(以下、画像Aと略記)と、画像Aと同じ大きさの白一色の画像(以下、画像Bと略記)、画像Aと同じ大きさで色変えしたい箇所を完全な白、それ以外を完全な黒で塗りつぶした画像(以下、画像Cと略記)を用意する
※画像Cを作る際、アンチエイリアス(境界のぼかし)などがかからないように注意

2. 画像Cを「【画像Bのファイル名】.pna」というファイル名に変更する
pnaについて
https://ssp.shillest.net/ukadoc/manual/manual_shell.html#:~:text=%E3%81%AF%E5%88%B6%E9%99%90%E3%81%AA%E3%81%97%E3%80%82-,surface*.pna,-%E3%82%B5%E3%83%BC%E3%83%95%E3%82%A7%E3%82%B9%E3%81%AE%E3%82%A2%E3%83%AB%E3%83%95%E3%82%A1

3. 画像Aと画像Bをシェル定義して(画像Aの手前に画像Bがoverlayされるようにする)、ゴーストを起動し、白いうにゅうが表示されることを確認

4. さくらスクリプト「\![open,dialog,color,パラメータ]」でカラーピッカーを出す
https://ssp.shillest.net/ukadoc/manual/list_sakura_script.html#_!_open,dialog,color,%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF_

5. カラーピッカーで指定された色を取得する
https://ssp.shillest.net/ukadoc/manual/list_shiori_event.html#OnSystemDialog
※イベントIDをOn〜にした場合、そのIDのイベントが発生する

6. imgctl_saori.dllをSAORIとして読み込む

7. imgctl_saori.dllにて、画像BへToDIBコマンドを実行する
※里々の場合、(pwd)でsatori.dllのある場所の絶対パスが得られる
そこから末尾の「ghost\master\」を消して、末尾に「shell\【シェルのフォルダ名】\【画像Bのファイル名】.png」を足せば画像Bの絶対パスができる

8. imgctl_saori.dllにて、7で得られたDIBハンドルと、座標0,0で、PixelDIBコマンドを実行する

9. imgctl_saori.dllにて、7で得られたDIBハンドルと、8で得られた0x00BBGGRR形式の整数と、5で指定された色を0x00BBGGRR形式の整数に変換したもの(R+G×256+B×256×256)とで、RepaintDIBコマンドを実行する

10. imgctl_saori.dllにて、画像Bのパスと、画像BのDIBハンドルとで、DIBtoPNGコマンドを実行する

11. さくらスクリプト「\![reload,shell]」でシェルを再読み込みする
https://ssp.shillest.net/ukadoc/manual/list_sakura_script.html#_!_reload,shell_

12. 成功すればうにゅうの色が変わっている

13. imgctl_saori.dllにて、画像BのDIBハンドルへ、DeleteDIBコマンドを実行する

14. 再度色変えする時は、4〜13の手順を再び行う

1141任意たん@age推奨:2024/03/20(水) 16:46:51
>>1140 のURLリンクが不完全になってしまいました。
必要であれば、手動でコピペして飛んでください。

11421139:2024/03/20(水) 21:41:03
>>1140-1141
詳しく書いてくださりありがとうございます!!
多分できそうです!!やってみます!!

11431139:2024/03/22(金) 05:24:36
おかげさまでうにゅうの色を変えることができました。
ありがとうございます。
ですが、うにゅうの色が何度作り直しても白くならず黒いシルエットのうにゅうになってしまいます。
画像bを直接開いてみて色が変わったことは確認できました。
どのようにすればうにゅうの色が白くなりますでしょうか?
surfaces.txtにはこのように書いています。
surface10
{
element0,base,A.png,0,0
element1,overlay,B.png,0,0
}

11441139:2024/03/22(金) 05:30:56
一行目、間違えてうにゅうの色と書きましたが、
実際は色を変えることができました、でした。すみません。

11451139:2024/03/22(金) 07:00:42
何度もすみません、
どうやら真っ白一色の画像だと透過色だと判定されるので左上1ドットを違う色にすればいいことが分かりました
ただ、この場合、ユーザさんが左上の色と同じ色を偶然指定した時にまたおかしくなりそうです
確率としては低そうですが…

1146任意たん@age推奨:2024/03/22(金) 14:27:22
>>1145
色々と想定が抜けていました。すみません。
色変え用画像とシェルで使う画像を分け、imgctl_saori.dllのToneDIBで色変えすると良いかもしれません。

以下、具体的な手順です。

2-1. A.pngにうにゅうを白〜黒のグレースケールで描く。透過用の色は白黒以外でもよい。
白い部分ほど色が乗る。

2-2. B.pngの色変えしたい部分をrgb値(1,1,1)の黒、
それ以外は白(255,255,255)で塗りつぶした画像を、
B.png(シェル合成に使う用)およびC.png(色変更の元の素材)として保存する。
左上1ピクセルは白(255,255,255)にすること。
※ほんの少し不正確だが、真っ黒(0,0,0)だと指定された色によっては乗算がおかしくなる。

2-3. surfaces.txtでB.pngをoverlayしている箇所を、overlaymultiplyに書き換える。
例:
surface10
{
element0,base,A.png,0,0
element1,overlaymultiply,B.png,0,0
}

色変えは >>1140 の手順4〜13のうち、7〜10の代わりに以下を行う

2-4. imgctl_saori.dllにて、C.pngへToDIBコマンドを実行する

2-5. imgctl_saori.dllにて、3で得られたDIBハンドルと、
カラーピッカー後のOnSystemDialogのReference2とで、ToneDIBコマンドを実行する

2-6. imgctl_saori.dllにて、B.pngのパスと、3で得られたDIBハンドルとで、DIBtoPNGコマンドを実行する

11471139:2024/03/22(金) 22:10:32
>>1146
ありがとうございます。無事に動作確認しました。

11481139:2024/03/28(木) 17:14:55
何度もすみません。
\![reload,shell]でシェルをリロードした後にイベントの続きを書きたいのですが、うまくいきません。

*シェルのリロード
(imgctl_saori,DeleteDIB,(DIBハンドル))
\![reload,shell]
>色を教えたあとのトーク

こんな風に書いているのですが、シェルリロード前に「色を教えたあとのトーク」が一瞬表示された後シェルチェンジ→何も言わない
になってしまいます…。
シェルリロード後はどこに飛ぶのでしょうか?

1149任意たん@age推奨:2024/03/29(金) 08:42:16
\![reload,shell]では、シェルリロード後に喋りを書いても中断されてしまいます。
また、リロード後に喋れるイベントが来ることもありません。

そのため、\![change,shell,現在のシェル名]で同じシェルへ変更しましょう。
「*OnShellChanged」が来ます。(ここでゴーストが喋れます)

「*シェルのリロード」で変数に何かを入れておいて、
「*OnShellChanged」で通常時のシェル変更後の反応と分岐させてください。

喋り終わったら、変数を消すか中身を分岐しない内容に書き換えるかをしてください。

11501139:2024/03/29(金) 14:03:32
>>1149
ありがとうございます。
一度シェルチェンジするのですね。
OnSecondChangeで拾うしかないかなと考えていました。
ご助言助かりました。

1151任意たん@age推奨:2024/04/22(月) 23:10:42
どなたか助言をお願いします。

里々を使用しています。
ユーザから検索ワードを入力してもらい、Xで完全一致検索をする方法はありますか?

例)
\j[https://twitter.com/search?q=&quot;(検索ワード)"&src=typed_query&f=live]

結果)
Xで"(検索ワード)"と検索したページが開く
検索ワードは引用符で囲われている

完全一致検索がしたいのですが、さくらスクリプトで " を使用する方法はありますでしょうか?
SSP 2.6.62までは
\j[https://twitter.com/search?q=%22(検索ワード)%22&src=typed_query&f=live]
のような書き方で動いていたのですが、SSP 2.6.63のバージョンアップでURL内の%が%25に置換されるようになり、
想定した動作をしなくなってしまいました。。。

1152任意たん@age推奨:2024/04/23(火) 16:58:33
>>1151
さくらスクリプトでダブルクォーテーションを引数に含める方法は、現状では無さそうです。
https://ssp.shillest.net/ukadoc/manual/list_sakura_script.html#notes_escape

SSPのバージョンアップによる変更では、URLを取り扱うとき、URLエンコードされていない文字列(全角文字など)が含まれていると、自動的にURLエンコードされるようです。
なので文字列をURLエンコードできれば問題なくなるのですが、里々単体では少し困難です。
AKARI as SAORIなどを導入するのが比較的簡単な方法かと思います。
AKARI as SAORIの配布ページ: https://github.com/nikolat/akari-as-saori
※右側の「Releases」→「akari-as-saori.zip」からDLできます。(上ほど新しい)


この下に、AKARI as SAORIを用いた実装例を書いておきます。
※タブ文字を【タブ】と表記しています。
※区切り字問題を避けるため、vncallを使用しています。
〜〜〜〜
*検索テスト
$検索ワード【タブ】ユーザの入力した文字列
$検索ワード【タブ】(vncall,akari,URLエンコード実行1,検索ワード,URLエンコード実行2)
\j["https://twitter.com/search?q=%22(検索ワード)%22&src=typed_query&f=live"]

@URLエンコード実行1
urlencode
@URLエンコード実行2
utf8

1153任意たん@age推奨:2024/04/23(火) 23:19:25
>>1152
ご教授ありがとうございます!
ご指摘の方法で、希望の動作をするようになりました。
URLエンコード出来るSAORIを探してもみたのですが、灯の中に含まれていたとは気付きませんでした……伺かの奥深さを思い知りました。
実装方法までご案内くださり、大変助かりました。
ありがとうございます。

1154任意たん@age推奨:2024/04/26(金) 08:17:37
SAORIを使わずにダブルクオートを引数に含める方法がドキュメントに追記されました。
(謝辞:Donさん)
https://ssp.shillest.net/ukadoc/manual/list_sakura_script.html#notes_escape

1155任意たん@age推奨:2024/04/26(金) 09:07:51
>>1154
ありがとうございます、助かります。
(検索ワード)にダブルクオートが連続で奇数個(1、3、5〜)入っているとおかしくなるので、
検索用URLを開く前に取り除いておくなど対処の必要がありますね。

〜〜〜〜
*検索テスト
$検索ワード【タブ】ユーザの入力した文字列
$検索ワード【タブ】(vncall,erase,検索ワード,ダブルクオート)
\j["https://twitter.com/search?q=&quot;&quot;(検索ワード)""&src=typed_query&f=live"]

@ダブルクオート
"

1156任意たん@age推奨:2024/04/27(土) 23:15:23
>>1155
色々な方法があるのですね。
AKARI as SAORIで先にURLエンコードするのが一番安全かな?と思い、こちらの方法を採用しました。
SAORIを増やさない対応方法も、今後活用していきたいです。

今回の件と直接は関係ないのですが、*sakura.recommendsites で
ジャンプ先URLに()を含めるとジャンプ時に表示される会話文が再生されないようでした。
もし理由や回避方法をご存知だったら教えていただけますでしょうか。
お気に入りメニューから機能実行→URLジャンプとトーク再生、といった方法で何とかなってはいるのですが…

1157任意たん@age推奨:2024/04/29(月) 13:01:12
>>1156
後半の件、自分の所でも試してみました。
れしばを見つつ実際に動作させると、URLジャンプは動作する&スクリプト(会話)が空、の状態でOnRecommendsiteChoiceが来ますね。
現状でできる回避方法は、おっしゃられている通りの方法(URLにスクリプトを入れて別の関数に飛ばす)のが一番簡単かつ簡潔に済みそうです。
この現象が里々の不具合なのか仕様なのかはわかりませんでした。

1158任意たん@age推奨:2024/05/01(水) 05:02:18
yayaテンプレの紺野ややめが起動できない(正確にはそれに同梱されているyaya.dllが動かない)…
SSPは最新2.6.64です

1159任意たん@age推奨:2024/05/02(木) 21:40:29
>>1157
確認いただきありがとうございます。
やっぱり、現段階では難しそうですね…
里々Mc169-4で今回の件を対応してくださったようなのですが、完全ではないようなので、現状の処理が一番安全かな…となりました。
自分が大事な記述を見落としてるだけ…とかではなかったので、ひとまずホッとしています。
ご協力ありがとうございます。

1160任意たん@age推奨:2024/05/12(日) 13:52:16
>>1158
なんというタイミング……。
もう10日も過ぎているから自己解決してる気もするが、おそらく同じところで躓いて整備班BTSに泣きついた身としては一応ここにも書いておこうかと。
紺野ややめはnarのやつを使う。
配布場所へのリンクは文屋の「新規ゴースト作成」ページで探す。
ここから入手できたものが「安定版」のテンプレゴーストであり配布用のYAYAということ、らしい。
githubから入手できるやつは最新の「開発版」だと解釈している。
それは単体だと「dic/system」に辞書が入ってないので動かない。
「開発版」で作りたいなら「yaya-dic」とかいうリポジトリだかがあるからそこから辞書を入手して組み合わせれば動くのではなかろうか(試してないが)。

1161任意たん@age推奨:2024/12/14(土) 23:40:48
シェルについて質問させてください。live2Dのような動きをするシェルはどのようにすれば作れますでしょうか?連番pngを出力するというのはわかります。表情を付けたりまばたきや口パクをさせたり、さらにポーズ差分を付けるとなると複雑でわからなくなります。ご助言いただけると嬉しいです。

1162任意たん@age推奨:2024/12/15(日) 05:42:17
>>1161
まずLIVE2Dのような動きをしない普通のシェルは作れますか?

1163任意たん@age推奨:2024/12/15(日) 09:08:49
ありがとうございます。
一応作ることは出来ますが、シェル制作についての知識の足りなさも痛感しています。色々方法があるとは思いますしどの程度の動きをさせたいのかによっても作り方は変わると思いますので最初に漠然とした質問をしてすみませんでした。
以前作った試作品についてお話させてください。
本体、目、口、前髪とパーツをレイヤ分けし、ゆらゆらする動作を作りました。これをそれぞれパーツごとに30コマの画像として出力し、以下のように組みました。まばたきと口パクも数コマ出力しています

//本体+目+口
surface0
{
element0,base,0000.png,0,0
element1,overlay,eye/0000.png,0,0
element2,overlay,mouse/0000.png,0,0
}
(略)
surface30
{
element0,base,0030.png,0,0
element1,overlay,eye/0030.png,0,0
element2,overlay,mouse/0030.png,0,0
}
//まばたき
surface100
{
element0,overlay,eye-blink/0000.png,0,0
}
(略)
surface106
{
element0,overlay,eye-blink/0006.png,0,0
}
//前髪
surface200
{
element0,base,forelock/0000.png,0,0
}
(略)
surface230
{
element0,base,forelock/0030.png,0,0
}
//口パク
surface300
{
element0,overlay,mousoe-talk/0000.png,0,0
}
(略)
surface304
{
element0,overlay,mouse-talk/0005.png,0,0
}
surface.append0
{
animation0.interval,always
animation0.option,shared-index
animation0.pattern1,base,1,20,0,0
animation0.pattern2,base,2,20,0,0
(略)
animation0.pattern29,base,29,20,0,0
animation0.pattern30,base,30,20,0,0
//まばたき
animation1.interval,sometimes
animation1.option,shared-index
animation1.pattern1,overlay,101,10,0,0
animation1.pattern2,overlay,102,10,0,0
animation1.pattern3,overlay,103,10,0,0
animation1.pattern4,overlay,104,10,0,0
animation1.pattern5,overlay,105,10,0,0
animation1.pattern6,overlay,106,10,0,0
animation1.pattern7,overlay,-1,10,0,0
//前髪
animation5.interval,always
animation5.option,shared-index
animation5.pattern1,overlay,201,20,0,0
animation5.pattern2,overlay,202,20,0,0
(略)
animation5.pattern29,overlay,229,20,0,0
animation5.pattern30,overlay,230,20,0,0
//口パク
animation6.interval,talk,2
animation6.option,shared-index
animation6.pattern1,overlay,301,20,0,0
animation6.pattern2,overlay,302,20,0,0
animation6.pattern3,overlay,303,20,0,0
animation6.pattern4,overlay,304,20,0,0
animation6.pattern5,overlay,-1,20,0,0
}
・目(まばたき)の上に前髪が来るように前髪は別アニメとして設定しています
・表情変更された時アニメがリセットされないようanimation*.option,shared-indexを設定しています
・まばたきは目パーツ30コマ分の範囲がマスクされるように肌色を下に置いています。口パクも同様です

これで一応ゆらゆら動作させることは出来るのですが、顔の位置が変わる画像に対してsometimeとoverlayでまばたきを設定するのはそれほどいい設定方法だとは思えずにいます。口パクも同様です。
animation0の顔の位置と連動してanimation1でまばたきができるといいのですがよくわからずにおりました。画像制作の時点で工夫すべきなのか記述で何とか出来るのか悩んでいます。ご助言いただければ幸いです。

1164任意たん@age推奨:2024/12/15(日) 12:22:32
>>1163
element0,base,0000.png,0,0
は本体の顔で、0001.png〜0030.pngにかけて角度が変わっていくものと推察します
以下はその推察に基づいてお話します。

surface0とsurface1とでは顔の角度が変わるので
前髪、目、口の角度も相応に変わるかと思います
そのため、surface0のまばたきとsurface1のまばたきとでは
パーツの角度が違うために別々に設定する必要があるはずです

surface.append0の内容のうち
animation0は顔の角度のアニメーションなので
これは削除して独立させます

animation1以下はsurface0用のアニメーションなので
これらはすべてsurface0内に統合します

surface1内に
element0,base,0001.png,0,0用の角度の前髪、まばたき、口パクを記述します
これらに使用されるパーツはbase,0001.png用の角度で作られるので
surface0のまばたき用のsurface100〜surface106は使用できません
前髪、口パクについても同様です

surface0〜surface30用にそれぞれ専用のアニメーションを設定したら
surface1000(数字は適当)
{
element0,base,0000.png,0,0
element1,overlay,eye/0000.png,0,0
element2,overlay,mouse/0000.png,0,0

animation0.interval,always
animation0.option,shared-index
animation0.pattern1,base,1,20,0,0
animation0.pattern2,base,2,20,0,0
(略)
animation0.pattern29,base,29,20,0,0
animation0.pattern30,base,30,20,0,0
}
とすることで顔の角度に合わせて
各パーツがアニメーションするサーフェスができるかと思います

動作確認ができないので
多分そうだろうという予測で書いています
違っていたらごめんなさい

1165任意たん@age推奨:2024/12/15(日) 20:24:39
>>1164
ご推察いただいた通りの仕様です。0000.pngは顔と体パーツになり、0001.png〜0030.pngにかけて少しずつ角度が変わった後0000.pngの位置に戻りループするものです。説明不足を補って読み解いてくださり感謝いたします。
それとmouthがmouseという誤記になっておりました。紛らわしい記述をしてしまい申し訳ありません。

surface0-30 顔体・目・口パーツ
surface100-130 まばたき画像1(半目)
surface140-170 まばたき画像2(閉じる)
surface300-330 口パク画像1(半開け)
surface340-370 口パク画像2(開ける)
surface200-230 前髪画像
それぞれsurface0-30に対応して位置・角度が変わりループする画像です

surface.append0
{
//まばたき
animation1.interval,sometimes
animation1.option,shared-index
animation1.pattern1,overlay,100,50,0,0
animation1.pattern2,overlay,140,50,0,0
animation1.pattern3,overlay,-1,50,0,0
//口パク
animation2.interval,talk,1
animation2.option,shared-index
animation2.pattern1,overlay,300,50,0,0
animation2.pattern2,overlay,340,50,0,0
animation2.pattern3,overlay,-1,50,0,0
//前髪
animation3.interval,always
animation3.option,shared-index
animation3.pattern1,overlay,200,0,0,0
}
(略)
surface.append30
{
//まばたき
animation1.interval,sometimes
animation1.option,shared-index
animation1.pattern1,overlay,130,50,0,0
animation1.pattern2,overlay,170,50,0,0
animation1.pattern3,overlay,-1,50,0,0
//口パク
animation2.interval,talk,1
animation2.option,shared-index
animation2.pattern1,overlay,330,50,0,0
animation2.pattern2,overlay,370,50,0,0
animation2.pattern3,overlay,-1,50,0,0
//前髪
animation3.interval,always
animation3.option,shared-index
animation3.pattern1,overlay,230,0,0,0
}

surface1000
{
element0,base,0000.png,0,0
element1,overlay,eye/0000.png,0,0
element2,overlay,mouse/0000.png,0,0

animation0.interval,always
animation0.option,shared-index
animation0.pattern1,base,1,20,0,0
animation0.pattern2,base,2,20,0,0
(略)
animation0.pattern29,base,29,20,0,0
animation0.pattern30,base,30,20,0,0
}

以上のように作り直してみました。
ご指示に添えているかあまり自信がありません。確認いただきご指摘があればお願いいたします…。
この状態でsurface1000を確認するとアニメは0(ALWY)のみが表示されアニメしています。surface0-30に設定した各アニメは表示されません。
surface0-30にはそれぞれ1(RAND),2(TALK),3(ONCE)が設定されており1と2を選ぶとまばたきと口パクをし、前髪が表示されています。

1166任意たん@age推奨:2024/12/16(月) 02:24:22
横槍失礼します。
現時点でのSSPでは、アニメーションからアニメーションを呼び出すことは(着せ替えのbind以外では)できなかったと思います。
(surface1000からアニメーションとして呼び出したsurface0〜30のアニメーションは動作せず、
ベースサーフェスのみが表示される)
参考情報1: https://ssp.shillest.net/ukadoc/manual/descript_shell_surfaces.html#introduction_drawmethod
参考情報2: https://wikiwiki.jp/ukatec/%E5%A4%9A%E9%87%8D%E7%9D%80%E3%81%9B%E6%9B%BF%E3%81%88%E5%AE%9A%E7%BE%A9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

そのため、構成段階での工夫が必要になります。
(体全体が動くモーションをするタイミングとまばたき口パクをするタイミングを分ける等)

1167任意たん@age推奨:2024/12/16(月) 19:34:44
>>1166
ありがとうございます。情報をいただけて助かります。
素人考えですが、アニメーション呼び出しが必要な部分(まばたき、口パク、前髪等)は多重着せ替えで設定することで上手くいきそうにも思えます。
単純に>>1165のsurface1〜30のまばたき、口パクアニメーションをbindで設定し直せばよさそうと思ったのですが、surface1000にもanimation1〜3を設定しなければおそらく動きませんし、surface1000に設定されたanimation1〜3はHUBサーフェスでなければそこに設定されたアニメをするだけだと思われました。結局以下のように書いてみましたがこれは失敗です。
(surfaces.txt)
surface.append1000
{
animation0.interval,bind+always
animation0.option,shared-index
animation0.pattern1,base,1,20,0,0
(略)
animation0.pattern30,base,30,20,0,0
//まばたき
animation1.interval,bind+random,5
animation1.pattern1,overlay,5000,50,0,0
animation1.pattern2,overlay,5001,50,0,0
animation1.pattern3,overlay,5000,50,0,0
animation1.pattern4,overlay,-1,50,0,0
}
//まばたき1
surface5000
{
element0,base,hub.png,0,0
animation0.interval,bind+always
animation0.option,shared-index
animation0.pattern0,overlay,100,20,0,0
(略)
animation0.pattern30,overlay,130,20,0,0
}
//閉じ
surface5001
{
element0,overlay,hub.png,0,0
animation0.interval,bind+always
animation0.option,shared-index
animation0.pattern0,overlay,140,20,0,0
(略)
animation0.pattern30,overlay,170,20,0,0
}
(descript.txt)
sakura.bindoption.group,基本動作,mustselect
sakura.bindgroup0.default,1
sakura.bindgroup0.name,基本動作,ー
sakura.bindoption.group,まばたき,mustselect
sakura.bindgroup5000.default,1
sakura.bindgroup5000.name,まばたき,ー
まばたきのHUBサーフェスであるsurface5000と5001にanimation0をalwaysで設定することでsurface1000と同じタイミングでちょうどいい画像が呼び出されるといいなと思いましたが、理解が足りていませんでした。多重着せ替えは便利ですが難しいです。出来そうではあるように思いますが…。

おっしゃっていただいたように構成段階での工夫をするのが無難に思われます。ご助言に感謝いたします。
例えば、まばたきは体全体が動くモーションに組み込んでもいいのかもしれません。そして口パクは諦めて、トーク時はゴースト側で口を開けた表情に変更することでそれっぽさは出そうです。
または、まばたき口パクに使われる目や口の位置は、どこに来てどの組み合わせになっても違和感ない程度の範囲で動かすという画像を制作をするのもいい方法かもしれません。
もう少し試行錯誤を続けてみます。ありがとうございます。

1168任意たん@age推奨:2024/12/16(月) 21:49:04
>>1167
シェル「Heavy Pressure」でそれに近い実装がされていますね
https://cherry.narnaloader.ukagaka.net/ghost.php?ghost=heavy_pressure

1169任意たん@age推奨:2024/12/17(火) 18:18:40
>>1168
教えていただいてありがとうございます!すごい!これが見てみたかったというそのものが…

1170任意たん@age推奨:2025/03/29(土) 20:33:34
初心者ながらどうしても分からない点があってご相談させてください。
現在、里々を使用してゴーストを作成しているのですが、里々Wikiに書かれている「初回起動イベント」と同じものを作成した所、
その条件式が作動してジャンプ先にジャンプをしてくれません。以下はそのプログラムです。

*初回
>起動【タブ】(初回イベントを完遂)==1

:テスト

\![raise,初回イベント完了]

###インラインイベント
*初回イベント完了
$初回イベントを完遂=(初回イベントを完遂)+1


*起動
>初回【タブ】(初回イベントを完遂)==0
>(時間帯)に起動

問題点についてですが、2回目の起動時、初回イベントを完遂が0の場合に本来は「初回」の方へジャンプさせたいのですが
「(時間帯)に移動」にジャンプしてしまいます。里々Wikiの「困ったときの対処法」のページも読みましたが、
どうしても解決する事が出来なかったので、もしよろしければ原因を教えていただけると幸いです。

1171任意たん@age推奨:2025/03/29(土) 20:52:07
何度も書き込みしてしまいすみません。>>1170です。
前レスや対処法のページを確認して気づきましたが、どうやら「replace.txt」「replace_after.txt」の二つのファイルが
存在しなかったせいで動かなかったようです。ご迷惑をおかけしました。

1172任意たん@age推奨:2025/05/04(日) 14:43:10
どなたかご助力お願いします。
ゴーストの開発初心者です。
ななっち様配布の、
ゴースト開発のとっかかりとして「いじってもいい」ゴースト
として配布されています、
湯空温泉 旅館舞桜別館をベースに改変してみようと、
さとりすと2を使わせて頂きながら触っているところなのですが、
「次に喋るトークを予約する」
という機能を、思ったように動かせないでいます……。

里々wikiのランダムトークについてのページに記載されています、下記のとおりにコピペ


:トラックにかぼちゃ、なす、トマトが乗っています。
急カーブで落ちたのはどれ?
:えーと……。
$次のトーク【タブ】答え

*答え
うーむ、わからん。
:答えは「スピード」でした。
ざんねーん。

(※【タブ】の部分については、キーボード端にあるTabキーを押して空白のみを入れ込んだうえで、
さとりすとの編集画面上に表示される、$次のトーク>> 、という変数が黄色になっていること、
ジャンプ先の項目の名前欄には、答え、という次のトークの題名も記入しています)

しているつもりなのですが、
ジャンプ先の次のトークだけではなく、その他の通常のランダムトークも順序を無視して喋ってしまいます。
どうすれば正しく次のトークを予約し、トークを続けられるでしょうか?

1173ナマモノ7号 ◆AglxOFU/zQ:2025/05/04(日) 16:42:54
>>1172
「湯空温泉 旅館舞桜別館」では、ランダムトークは無名の「*」ではなく、「*ランダムトーク」という文として書かれているようです。
なので、前半の『トラックにかぼちゃ(略)』というトークの名前を「*ランダムトーク」にしてみてください。

また、キャラをつついてランダムトークをしてもらう選択肢では、予約トークが行われないようになっています。
つつきメニューの選択肢でも予約があればそのトークをする、という状態にしたい場合、dic_menu.txtにある以下の項目を変更してください。

#変更前
*ランダムトークをきく
>ランダムトーク

#変更後
*ランダムトークをきく


1174任意たん@age推奨:2025/05/04(日) 19:09:07
つつきメニューの選択肢でも予約があればそのトークをする、
という状態にはできたと思います、これも悩んでいたところでした。
ありがとうございます……!
ただ、トークの予約はまだ完全にできているようではないようで、
順序が守られず他のトークに飛んだり、
1、2,3つの順で予約してあるトークのうち、
1、2まではつづくのに、3つめは喋らず、他のトークになってしまいます。

ちなみに、頂いたアドバイスにおいて、

前半の『トラックにかぼちゃ(略)』というトークの名前を
「*ランダムトーク」にしてみてください。

というのは、
下記のような修正方法である、という解釈で正しかったでしょうか?

#変更前

:トラックにかぼちゃ、なす、トマトが乗っています。
急カーブで落ちたのはどれ?
$次のトーク 答え

#変更後
*ランダムトーク
:トラックにかぼちゃ、なす、トマトが乗っています。
急カーブで落ちたのはどれ?
$次のトーク 答え

1175任意たん@age推奨:2025/05/04(日) 20:10:48
>>1174
多分こうなっているんじゃないかというのを推測で返信していますが、
違ったら教えてください。

>ただ、トークの予約はまだ完全にできているようではないようで、
>順序が守られず他のトークに飛んだり、
>1、2,3つの順で予約してあるトークのうち、
>1、2まではつづくのに、3つめは喋らず、他のトークになってしまいます。

里々は「*【題名】」という文(*で始まるもの)が複数あると、それらの中から1つだけをランダムに選んで実行します。
「湯空温泉 旅館舞桜別館」では、里々本来のランダムトークである「*」を、「*ランダムトーク」へジャンプするためだけに使っています。
そのため、里々wikiにあるように「*」でトークを書いてしまうと、トークは複数個の「*」からランダムで実行されてしまいます。

#〜〜〜〜
#例の始まり
#〜〜〜〜


>ランダムトーク
#このゴーストでは、ここ以外に無名の「*」が存在しないようにしてください

#*
#:このトークのシャープを外すと、一つ上の「φ*」と
#このトークとの、どちらかがランダムで選ばれてしまいます。

#※φは、里々で意味のある文字(*など)を無効化するために使っています※

*ランダムトーク
:このトークには続きがあと2個あります。
いま喋っているのは1個めです。
$次のトーク ランダムトークの続き1

*ランダムトークの続き1
:このトークには続きがあと1個あります。
いま喋っているのは2個めです。
$次のトーク ランダムトークの続き2

*ランダムトークの続き2
:このトークは前のトークの続きです。
いま喋っているのは3個めです。

*ランダムトーク
:これは特に続きのないトークです。
例として入れてあります。

#〜〜〜〜
#例の終わり
#〜〜〜〜


>ちなみに、頂いたアドバイスにおいて、(略)
その解釈で合っています。

1176任意たん@age推奨:2025/05/04(日) 20:15:36
>>1175 にて、変数代入のタブ文字(「$次のトーク」の後)が、投稿の際に空白になってしまいました。
実際の辞書ではタブ文字にするなどしてください。

1177任意たん@age推奨:2025/05/04(日) 21:29:52
>>1172です。

>>1175さん、詳細かつ例文の記述まで、ありがとうございます。
けれども、申しわけありません。
未だ解決に至れておりません……。
示して頂いた例文について、質問させてください。


>ランダムトーク
#このゴーストでは、ここ以外に無名の「*」が存在しないようにしてください

の、ここ以外、というのは、どこの場所を示すものでしょうか。
さとりすと上の表記になりますが、
画面左端に出るファイルイベントツリーの中に並んでいる
*ランダムトーク
あるいは、その真下にある
* (※ここに記述されている、>ランダムトーク、のこと)
ものを指しているのでしょうか……?

自らの無学ゆえ理解が至らないとは弁えているつもりです。
お手数おかけして申し訳ありません……。

1178任意たん@age推奨:2025/05/04(日) 21:51:42
>>1177
さとりすとをリスト化モードで使っているのですね、気付いていませんでした。すみません。
(さとりすとを初期状態から変更していなければリスト化モードの状態です)

>の、ここ以外、というのは、どこの場所を示すものでしょうか。
後者です。

さとりすとの表示で言うと、左枠「dic_talk.txt」の中に「*」があり、それをシングルクリックすると下枠に「>ランダムトーク」が出ます。
・そこに「>ランダムトーク」のひとつだけがあり、それ以外のものは何もない
・ゴースト内の他のdic_〇〇.txtすべてを含めた中に「*」が無い
という状態にしてください。
「*」が複数ある、または「*」の中身が複数あると、どれが実行されるかわからなくなってしまいます。

以下はさとりすとのスクショです。
https://i.postimg.cc/NMfWS194/image.png

1179任意たん@age推奨:2025/05/04(日) 22:12:30
>>1178
追加のスクショです。 >>1175 の例をさとりすとで入力したものです。
https://postimg.cc/Cn8jdYCb
https://postimg.cc/8svWRpW6
https://postimg.cc/HJj8Vddj
https://postimg.cc/rDftVK6v

1180任意たん@age推奨:2025/05/04(日) 22:34:33
>>1177
横から失礼します
里々wikiの*の項目を読むと役に立つかもしれません
https://soliton.sub.jp/satori/?%E7%89%B9%E6%AE%8A%E8%A8%98%E5%8F%B7%E4%B8%80%E8%A6%A7#d0671588

1181任意たん@age推奨:2025/05/04(日) 22:57:38
スクショまで……ありがとうございます!
例文と、試しに自作したトークともに、
予約の順序通りに続けられるようになってきました!
ただ不思議なことに、ソロゴーストなのでkero側は存在しないはずなのですが、
例文のふたつめ以降で、
吹き出しの位置、向き、ともにsakura側とは異なる、
明らかにkero側としか思えないバルーン表示にくわえて、

?このトークには続きがあと1個あります。
いま喋っているのは2個めです。

?このトークは前のトークの続きです。
いま喋っているのは3個めです。

と言った具合に、
本来なら、ːがあるべき文頭に?が入ってしまいます。
さとりすとを閉じて開きなおし、例文のトークを確認したところ、
閉じる前はたしかにːだった文頭が?に変化していて、
自分の頭も疑問符だらけになってます……。
複数回、さとりすとを閉じ開きして確認したので、
見間違いではないはずですが、これはどうすればいいのでしょうか?

1182任意たん@age推奨:2025/05/04(日) 23:08:04
>>1180さん
ありがとうございます……!
改めて読みなおしてきます(/・ω・)/

1183任意たん@age推奨:2025/05/04(日) 23:40:37
>>1181
なぜかはわかりませんが、全角コロンが文字化けていますね。
誤 「ː」
正 「:」

1184任意たん@age推奨:2025/05/05(月) 00:02:05
>>1183さん
ごめんなさい、単純なことに半角でコロンを置いていたみたいです……(恥9
文字化けによるkero側出現、解決しました。
それと、おそらくですが次のトークの予約の記述も、
問題なくできるようになったと思います。スムーズに動かせています。
非常に助かりました……!
夜分遅くまでお力添えしていただき、ありがとうございました( ˘ω˘ )

1185任意たん@age推奨:2025/05/05(月) 20:37:51
>>1172の者です。
昨日、大変お世話になりました。
またご助力願いたく、質問させてください。
自作のマスターシェル(キャラクター何とか機とコロペタを使用して作成)を使いたいため、
湯空温泉 舞桜旅館別館のshellフォルダと、自作shellのフォルダを、
フォルダごと入れ替えてみたところ、
ランダムトークや予約トーク、つつきメニューの表示とその内容の操作などは問題なく動くものの、
頭なでられや胸つつかれの触り反応が機能しなくなりました。
カーソル表示は、shellフォルダの入れ替え前までと同じ、
頭や胸の該当部位に重ねると手のマーク形状には変化します。
どうすれば、自作のshellでも頭なでられや胸つつかれによる、
触り反応のトークを以前のように出せられるのでしょうか……。

1186任意たん@age推奨:2025/05/05(月) 21:32:05
>>1185
触り部位のIDが違ってたりはしてないでしょうか?
例えば、頭のIDが元シェルでは『Head』、自作シェルでは『head』と違っていた場合、
頭に当たり判定があること自体は同じなのでカーソル変化は発生するものの、
触って呼び出されるトークは元シェルの場合は『0Head〜』、自作シェルの場合は『0head〜』となり、元シェルと自作シェルでトークが発生するしないが分かれることになります。
IDは、さとりすとでしたらサーフェスビューワv3タブを開いてから『設定』→『触り判定を表示』で視覚的に確認できます。
自作シェルの触り部位のIDと、元のシェルの触り部位のIDに違いがないかをチェックしてみてください。

1187任意たん@age推奨:2025/05/05(月) 21:37:05
>>1185
自作シェルの方のsurfaces.txtはご自分で書かれたものをお使いでしょうか?
その中に「collision【数字】,【数字】,【数字】,【数字】,【数字】,【当たり判定の名前】」のような箇所があると思います。
そこの当たり判定の名前が「Bust」「Head」のように大文字アルファベットになってしまっていませんでしょうか?

自作シェルの記述(surfaces.txtなど)とゴースト側の記述(dic_call_response.txtにある)が一致するようにしてください。
(アルファベットの大文字小文字は基本的に別の文字として認識されます)

※余談ですが、SSPはアルファベット大文字小文字に関わらず、
head・Head・HEAD(頭)やbust・Bust・BUST(胸)のような名前の当たり判定に対して、自動的にカーソルの形を変えてくれているようです。

1188任意たん@age推奨:2025/05/05(月) 22:14:34
>>1186さん
触り部位のIDが違っていました。
ご推察のとおり、Headとheadという形で、大文字と小文字の差異が原因だったようです。
記述を揃えたところ、問題なく動作できるようになりました。
初歩的な見落としでした、お恥ずかしい限りです……。
ご返信とご助言、ありがとうございました!


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板