里々から華和梨に移行する。

改行について

この点里々って楽ですよね。

里々

*
:かゆ
うま。

と書くと

かゆ
うま。

と出力されます。内部的には改行部分に\n[half](普通の半分の高さで改行)が入るらしいのですが。

 

でもながーいトーク、例えば

「じゅげむじゅげむごこうのすりきれ(あまりにも長いので中略)(←実際にはフルネームを全て表示)
さんって凄いよね。」「…は?」「だから、じゅげむじゅげむ」「…もういい」

と喋らせたい(でもバルーン内で勝手に改行されますからね)時に

*
:じゅげむじゅげむごこうのすりきれ(あまりにも長いので中略)
さんって凄いよね。
:…は?
:だから、じゅげむじゅげむ
:…もういい

と書くと見づらいです。でも見やすくするために改行してしまうと実際に表示されるトークも改行されます。

*
:じゅげむじゅげむφ
ごこうのすりきれφ
(以下略)

とφ(ふぁい、エスケープ記号)を改行の直前に置くと改行されなくなるらしいですが、面倒ですよね。

華和梨

sentence :\0かゆ\n[half]うま。\e

これで里々で書いたのと同じ表示になります。一行で収まってしまうので楽ですね。実際はノーウェイトで改行されるので適当にウェイトをはさむ必要があります。

 

注意すること

sentence :(
\0かゆ
うま。\e
)

と書くと表示は

かゆうま。

になります。逆に言うと\nをはさまないとどんなに改行しても表示は一行なので

sentence :(
\0じゅげむじゅげむごこうのすりきれ
かいじゃりすいぎょのすいぎょうまつうんらいまつふうらいまつ
くうねるところにすむところやぶらこうじのやぶこうじ
ぱいぽぱいぽぱいぽのしゅーりんがん
しゅーりんがんのぐーりんだいぐーりんだいのぽんぽこぴーのぽんぽこなーの
ちょうきゅうめいのちょうすけ\n
さんって凄いよね。
(以下略)

と書いたら じゅげむじゅげむ~ちょうすけ までは全く改行されません。(でもこんなに長いとバルーン内で改行されますよ)

トークの記述を書き換える

「話は聞かせてもらったぞ!このままでは人類は滅亡する!」「な、なんだってー!?」

里々

*
:話は聞かせてもらったぞ!(7)このままでは人類は滅亡する!
:(11)な、なんだってー!?

華和梨

sentence :(
\0\s[0]話は聞かせてもらったぞ!\w7\s[7]このままでは人類は滅亡する!\w7
\1\s[11]な、\w5なんだってー!?\w9\e
)
  • テキストエディタの置き換えで「*」を「sentence :」に、「(数字)」を「\s[数字]」に置き換えて行くと楽。
    • 他にも全角で書いているもの($とか#とか)も半角に置き換えてしまうと後が楽。
      • コメントアウトの#は全角から半角になります
      • 「$変数【タブ】代入したいもの」というものは「$(setstr 変数 代入したいもの)」となる。
    • _(選択肢)は\q[に置き換えてしまって閉じかっこは手動でつける。面倒ですね。
    • @(単語郡)とか>(ジャンプ)は別な書き方にまるごと置き換えるので別に置換しなくてもいいんじゃないですかね(適当)。
  • \n(改行)とかは忘れられがちなので注意ですよ。
    • (結構忘れている)
  • 自動でウェイトが入らないのでその辺もお好みで。
  • 必ず\eをいれないと駄目
  • ( ´-`)。o 0 (スコープ切り替えの書き換えは手動かなあ…)

いくつかの単語からランダムに選ぶ

里々

*
:今日は(おやつ)の気分ですね。
:(11)(H1)…だと…?
@おやつ
ドウメキのケーキ
三倍アイスクリーム
カカオ99%

とすると「おやつ」に「@おやつ」以下の単語一つから選ばれて入れられます。所謂語群ってやつですね。(H1)には直前に選ばれた単語と同じものが入ります。

単語を選ぶだけなら、ssuのchoiceを使うとこんな書き方も。

*
:今日は(choice,ドウメキのケーキ,三倍アイスクリーム,カカオ99%)の気分ですね。

del>こっちはH1的なものはないです。</del>ありました。なんかごめんなさい。

華和梨

@を使うっぽい書き方

sentence :\0\s[0]今日は${おやつ}の気分ですね。\w9\1\s[11]${0}…\w5だと…\w5?\w9\e
おやつ :ドウメキのケーキ,三倍アイスクリーム,カカオ99%

choiceっぽい書き方

sentence :\0\s[0]今日は$(? ドウメキのケーキ 三倍アイスクリーム カカオ99%)の気分ですね。\w9\1\s[11]${0}…\w5だと…\w5?\w9\e

多重人格・別モード

里々

ghost\master内にanotherとかなんとかとにかく適当な名前のフォルダを作って辞書を入れて

*モード切替え
:別モードにします
$辞書フォルダ【タブ】another
:別モードですよ

にすれば読み込むフォルダが切り替わるアレです。わかりやすいですね。モードが多くなるとフォルダがいっぱいで大変です。

華和梨

  • 「chFlagMode」でモードを切り替えます。
  • 別にフォルダを分けなくてもいいっぽいです。
    • 逆に言うとフォルダを分けただけだと駄目です。
      sentence :\0\s[0]普通のトーク。\w9\e
      ↑普通に出てくるトーク
      sentence :(
      \0\s[0]別モードに切り替わります。\w9\e
      $(setstr FlagMode another)
      )
      ↑こんな感じに書くとランダムトークでこれが出たときに別モードになります。
      another.sentence :\0\s[0]別モードのトーク。\w9\e
      ↑別モード中のトーク
      another.sentence:(
      \0\s[0]通常モードに戻ります。\w9\e
      $(clear FlagMode)
      )
      ↑これで通常モードに戻ります。
  • 里々風にフォルダを分けるときは「kawarirc.kis」に
    load (フォルダ名)\(辞書の名前);
    を全部書かなきゃ駄目っぽいです。

注意点

Talk~~~(各種イベントや起動終了切り替え系)は全て頭に「モード名.」がついたものが呼ばれます。忘れているとそのイベントで喋りません。(例えばネットワーク更新の台詞など)

変数への代入

例は適当なのが思いつかなかったので血と肉(わしのゴースト)からコピペ

里々

*
:お前も妖怪の友達とかいるのか?
:ぎょにく。
:…魚肉?
:さかな たべるから ぎょにく。
:…なるほどな
$ともだちとーく【タブ】1

これで「ともだちとーく」に1が入ります。

*
:なあ、お前って野菜は食べないのか?
:たべない。
>やさいを【タブ】(ともだちとーく)==1

*やさいを
ぎょにくも やさいを たべない。
わたしたちは やさい たべなくても へいき。
:…偏った食事をしても平気なんだな
俺が言える立場じゃないが

「ともだちとーく」に何も入っていない(フラグが立ってない)と「たべない。」でトークが終わりますが1が入っている(フラグが立っている)と「ぎょにくも~」を続けて話す。

華和梨

knランダムトーク :(
\0お前も妖怪の友達とかいるのか?\w9\w9\n
\1ぎょにく。\9\n
\0…\w5魚肉?\w9\w9\n
\1さかな \w6たべるから \w6ぎょにく。\w9\n
\0…\w5なるほどな\w9\e
$(setstr ともだちとーく "1")
)

$(setstr 変数の名前 入れるもの)で変数(この場合「ともだちとーく」)に入れるもの(この場合1)が入ります。

sentence :(
\0なあ、お前って野菜は食べないのか?\w9\n
\1たべない。\w9\n
$(if $[${ともだちとーく}=="1"] ${やさいを})\e
)

やさいを :(
\1ぎょにくも \w6やさいを \w6たべない。\w9\n
わたしたちは \w6やさい \w6たべなくても \w6へいき。\w9\n
\0…\w5偏った食事をしても平気なんだな\w9\n
俺が言える立場じゃないが\e
)

里々的ジャンプはifで代用。

日付に合わせたトークをする

12月にはクリスマスの話をしたりとかそんなの

里々

*
>(現在月)月のトーク
()

*12月のトーク
:今月はクリスマスがありますね。

とか

*
>クリスマスのトーク【タブ】(現在月)==12&&(現在日)==25
()

*クリスマスのトーク
:今日はクリスマスですよ。

とか。

華和梨

sentence :$(entry "季節ネタトーク"date %m%d)

dateは現在の日付を表すもの、%mは月、%dは日。これを書いておくと

季節ネタトーク1225 :\0\s[0]今日はクリスマスですよ。\e

横着して里々的に書きたい時は適当な場所に

現在年 :$(date %y)
現在月 :$(date %m)
現在日 :$(date %d)

と書いておくと

sentence :$(entry ${現在月}月のトーク)

12月のトーク :\0\s[0]今月はクリスマスがありますね。\e

と書けるわけなのですよ。

アンカー

文中の単語に別なトークへのリンクが張られるアレです。

里々

dic_Anchor.txtに

*単語
:たんごのせつめいですよ

と書いておくとトーク中で「単語」という言葉が出たら「単語」にリンクが張られて、クリックすると

「たんごのせつめいですよ」

としゃべります。

華和梨

dic_Anchor的な便利機能はないのでアンカーさせたい単語は

\_a単語\_a

とアンカータグ(\_a)でくくらないといけないのです。面倒ですね。そして別なところに

Anchor.単語 :\0たんごのせつめいですよ

と書けば里々的に動作します。この「単語」は「識別子」というものだそうです。

 

でも「きぃ&ぷしゅう」さんのmaster\template\ghost-keeps.kisの中にあるメニュー(きぃさんのメニュー→「新機構のテスト」で実例が見られます)に

$(anchor Ukagaka 伺か)

という書式があります。これで書くと、$(anchor Ukagaka 伺か)

  • anchor
    • このカッコでくくられたところはアンカーですよーということ
  • Ukagaka
    • 「識別子」
  • 伺か
    • バルーン上に表示される文字 で、バルーン上の「伺か」という単語をクリックするとAnchor.Ukagakaのエントリに飛んで説明を読んでくれるわけです。
       
      里々の「dic_Anchor.txt」を適当な名前(dict-anchor.kisみたいな感じ)にして、
  • *をAnchor.に置き換え
    • すると「*単語」が「Anchor.単語」になるのであとはコロンとか開きかっこを手動で付け足す
  • :を\に置き換え
    • (0とか1は手動ですよ)
  • サーフェス定義を\s[]タグを使ったものに置き換え すると楽です。あと\eを忘れずに。忘れると酷い目にあいます(実話)
     
    そしてトークを書いている辞書を開いて
  • 「単語」を「$(anchor 単語 単語)」に置き換えるとすごく楽。ただし誤爆(長い単語の中に短い単語が入っていた時)には注意。例えば
    Anchor.長い単語 :\0長い単語です。\e
    Anchor.単語 :\0単語です。\e
    があった場合、里々的には長い単語のほうにリンクされますが、華和梨的には単純に置き換えるとぐっちゃりします。
     
    あと「とっても長い単語」という言葉(アンカーなし)が出てきた時に「単語」にだけリンクが張られてしまうとかもあります。
  • わしが実際にやった例
    • 「アイ」という単語にアンカーが張られるようにしたら「アイテム」と「アイマス」の「アイ」にも勝手にアンカーがついてしまったというもの。
    • こうなると単語をぶった切っているのでわけがわかりませんね。
  • 里々的にこれを防ぐ方法は<del>ない(多分)<del>アンカーされる単語の直前にφをつければ解決します ですが、華和梨的には\_aとか$(anchor)を消せばいいだけなのでその辺は楽。

条件分岐

アレですね、好感度や起動時間によってトークが変わるとか、時間帯で変わるとか、ゲーム的なものを作るとか。

里々

例1

*
>デレトーク【タブ】(好感度)>100
>ふつうトーク

とすると、好感度が100以上だと「*デレトーク」、それ以下だと「*ふつうトーク」に飛びます。

 

例2

*【タブ】(好感度)>100
:(5)にゃー。

*の隣にタブを入れて条件式を書くとその条件を満たしている時だけそのトークをします。こちらのほうがスマートかも。

華和梨

全部ifに任せてしまいます。

 

例1

sentence :$(if $[${好感度}>100] ${デレトーク} else ${ふつうトーク})

アレですね、ifについての説明はらくだ屋さんのほうを参照していただくとして。好感度が100以上だと「デレトーク :」のエントリ、それ以下だと「ふつうトーク :」のエントリに飛ぶわけです。

 

例2

sentence :$(if $[${好感度}>100] "\0\s[5]にゃー。\e")

この場合else(条件に一致しないとき)を省略しているので好感度が100以下だとその他全てのランダムトーク(sentence :)に飛ぶのですよ。

条件分岐:触り反応編

触りまくっているとキレるとかそういうものです。わしのゴーストだと妙な方向に使っていますが。

里々

*0Bustなでられ
$胸カウント=(胸カウント)+1
>胸なでられ(胸なでられ)回目

分岐させる部分はこんな感じ。 「胸カウント」に代入するには「=」を使う(うっかりタブを使ったりするとカウンタが腐ります。←実話)とかそういう細かい事は今はいいです。

*胸なでられ1回目
:…?

*胸なでられ2回目
:(7)訴えるぞ。

*胸なでられ3回目
:(3)……(-1)この人痴漢です!
:(11)痴漢 アカン。
>胸カウント初期化

*胸カウント初期化
$胸カウント=0

華和梨

「きぃ&ぷしゅう」のghost\template\ghost-keeps.kisの625行目あたりにある「反応:撫でまわし・お触り」というものを改変してやります。基本は

C(0/1)Stroke.<反応段階>.<反応部位>

0/1は¥0か¥1、<反応段階>は里々の例で言うと「段階1」とかそういうの、<反応部位>はHeadとかBustとか。<反応段階>は0からカウントされる。

 

実際の例

C0Stroke.0.Bust :\0\s[0]…\w5?\e
C0Stroke.1.Bust :\0\s[7]訴えるぞ。\e
C0Stroke.2.Bust :\0\s[3]…\w5…\w5\s[-1]この人痴漢です!\1\s[11]痴漢アカン。\e

ちなみにオプション設定があるらしく

C(0/1)stroke.option.<反応部位> : <オプション>

の<オプション>部分に反応の返し方を設定できるらしいですが詳しいことはここでは省略します。里々的に1回目の反応に戻したければloopall、最後の反応だけ返させたい時はlooplast。 例だと4回目以降はずっと「この人痴漢です!」が続く。

メニュー

無くてもいいですがあったほうが親切。

里々

*0Faceつつかれ
:メニュー。
_喋る

_閉じる

*喋る
()

*閉じる
:メニューを閉じます。
  • 超絶シンプル。この場合は顔をつつかれるとメニューが出ます。
  • _(アンダーバー)は\qの役割をします。「_文字」で*文字にジャンプ・「_もじ【タブ】文字」では実際に表示されるのが「もじ」でジャンプするのが*文字。
  • 手軽でいいんですが、\![*](マーカー)を使えないとか横に並べて置けないとか不便なこともあるわけです。いや、素直に\qタグを使えばいいだけなんですけど。

華和梨

C0Double.Face : ${Mainmenu}\e

Select.Mainmenu :(
\0メニュー。\n
\q[喋る,talk]\n
\n
\q[閉じる,menuclose]\n\e
)
talk :${sentence}\e
menulose :\0\s[0]メニューを閉じます。\e

これで里々版とほぼ同じ動作。\nタグを入れないと横に並べて表示されます。 「Select.」を忘れないようにしてくださいです。動きません。(実話)

サーフェス値を加算する

サーフェス値を加算する

例えば夏服・冬服があったり普段着・パジャマだったりするアレ。 最近ではAYA as MAKOTOでなんとかできるらしいですね(例:fleleのひぐらしシェル・榊くんの「その日ぐらし」など)。

里々

「サーフェス加算値」というものが。 ポストと狛犬のDic08_Labo.txtからコピペ。

*マルチキャラクタ
:狛犬、交代だって。
:お前もな。
$辞書フォルダ	another
$サーフェス加算値0	100
:\c(0)こんにちは。
$サーフェス加算値1	200
:\c(0)ふむ。

これは「さとりてちゃん」と「博士」にキャラクタが変わるものでございます。 これ以降は辞書中の(0)で\s[100](さとりてちゃんのサーフェス)が出ます。

華和梨

「サーフェス加算値」に相当するものはデフォルトで無いので関数を自分で組む必要があるわけでして。 うにゅう@もどきの華和梨質問スレで質問したら>>14、>>15で書いてくださった方が。 というわけでそれをコピペ。問題がありましたら連絡ください。

#サーフェス加算値:SpecialThx:もどき板華和梨スレの>>14-15の人
#使い方
#\s[0]を$(s 0 0)に書き換える
#サーフェス加算を使いたい場所で$(サーフェス加算値 <スコープ(0/1)> <加算する数値>)を書く
#→\s[0]が\s[0+加算された数値]になって表示される
#
#数値は必要ならセーブする。
=kis
# 第一引数:scope 第二引数:サーフィス加算値 戻り値:無し
function サーフェス加算値 $(
setstr System.Surface.AddNum.$@arg[1] $@arg[2];
);
# 第一引数:scope 第二引数:サーフィス番号 戻り値:\s[?]
function s $(
setstr @n ${System.Surface.AddNum.$@arg[1]};
if ${@n} $(
return \s[$[ $@arg[2] + ${@n} ]];
) else $(
return \s[$@arg[2]];
);
);
=end

これで上のさとりてちゃんと博士の一文を書き直してみると

Select.マルチキャラクタ :(
\0$(s 0 0)狛犬、交代だって。\w9\n\n[harf]
\1$(s 1 10)お前もな。\w9\n\n[harf]
$(chFlagMode another)
$(サーフェス加算値 0 100)
\0$(s 0 0)\cこんにちは。\w9
$(サーフェス加算値 1 200)
\1$(s 1 0)\cふむ。\w9\e
)

となるわけです。chFlagModeというのは結構上で説明しているモード切り替え。

 

*余談

  • 華和梨、KISの関数や変数の素人的解説ですが$@arg[引数の番号]というのは一時的に引数を保存するのに使われる変数でございます。
    • 引数ってのは何かこうサブルーチンとやらを呼び出したりするのに使うとかなんとか色々な説明がありますが 「これを書いたらこんなものが呼び出されますよという呪文」という認識です。これはひどい。
  • 「サーフェス加算値」では、$@arg[1]にはスコープ(0か1)・$@arg[2]には加算したい数値が入ります。
  • 戻り値なしっていうのはこの関数を通しても表向きは何も返さないけど背後では何かしてますよということでございます。
  • 「s」(サーフェス表示を\s[*]タグのかわりに定義するための関数)では、$@arg[1]にはスコープ・$@arg[2]にはサーフェス番号(\s[*]の*の部分に入る数字)です。
    • 戻り値があるということはこの関数を通して何か返しますよって事でございます。具体的には$(s スコープ 番号)→加算したりする→\スコープの\s[番号]を返しますよーというもの。

Twitterとの連携:華和梨版

  • 投稿用のPHPは共通しているのでDonさまのDon/GhostとTwitterの連携を参考にしてください(丸投げ)。
  • ここでは直接投稿のためのスクリプトとPHP経由のためのスクリプトを華和梨で書いたもののみ載せます。
    • 実際にどんな風に動いているかはKohplus - Twitterとか血と肉-KxK_rEmiXのtemplate\ghost-keeps-dic14_twitterpost.kisを参考にしてください(変なものが混ざっているのですがあまり気にしないでください)

基本的な使い方

投稿したいタイミング(例えばゴースト終了時)で

${TwitterPost}
#(↓で\![execute","~]で書いているところのエントリ名。自分でわかりやすい名前で。)

を入れておくだけ。ただしゴースト切り替え時の先頭に書く

TalkGhostChanging : ${TwitterPost}\0\s[0]次の人よろしくね。\w9\e

と、投稿して終了(台詞が出ない)してしまうっぽい(何故かはよくわかってないですが)ので、

TalkGhostChanging : \0\s[0]次の人よろしくね。${TwitterPost}\w9\e

こんな感じにしたほうがよい気がします。

直接投稿する

  • ゴーストをReplyなどを何も返さないBOTのサーバーとして使うような感じです
  • パスワードを直接辞書に書き込んでいるのでプライベートゴーストとして使う。
    #投稿するための部分
    TwitterPost : \![execute","http-post","${TwitterPostURL}","--param=message=${TwitterPostMessage}","--param-charset=UTF-8]
    #URL/直接パスワードを書き込みます、暗号化しても絶対ではないのでWeb上で配布するゴーストには絶対に使わないように。
    TwitterPostURL : http://${TwitterUsername}:${TwitterPassword}@twitter.com/statuses/update.xml
    #IDとパスワード
    TwitterUsername : ****(your username)
    TwitterPassword : ****(your password)
    #メッセージ
    TwitterPostMessage : こんにちは世界

PHPを通して投稿する

  • パスワードはPHPのほうに書いてあるので配布してもパスは漏れません。
  • Twitter APIを使用しているので、あまりにも投稿頻度が多すぎると(確か120Post/1時間かそれより少なめ。30秒間隔でガンガン投稿するとかそういうのじゃない限りは多分大丈夫かと…多分。)連投規制に引っかかって1時間くらい投稿できなくなります。
  • 文字コードを気をつけないと文字化けしまくって悲惨になります。そのへんはDonさまの記事に詳しいです
    #投稿するための部分
    TwitterPost : \![execute","http-post","${PHPPostURL}","--param=message=${TwitterPostMessage}","--param-charset=UTF-8]
    #PHPのアドレス
    PHPPostURL:http://(アドレスですよ).php
    #メッセージ
    TwitterPostMessage : こんにちは世界

注意点

  • ,(コンマ)を""でエスケープさせる
    • 華和梨さんの基本。
  • 投稿したい文字列に[](半角四角かっこ)があったら""でエスケープさせる
    • そのままだと投稿できません。
    • 例えばTwitterのステータス([Tween]などのクライアント名、[自宅]などの場所、その他各種ネタ)風のものを末尾につけたいとかそういうときに必要です
  • その他エスケープが必要な文字に注意する
    • ""とか''、\あたり。
  • さくらスクリプトが直接出るので句読点などに自動でウェイトを挿入している時はそこだけトランスレートを回避させる
    • 里々の時よりは楽かもしれないです。

( ´-`)

以下略。どんどん加筆されていく予定ですよ。

  • これからの予定(気分と必要に応じて増えます)
  • トーク頻度の調整
  • 名前(など)を覚えさせる
  • ユーザー情報。名前、性別、誕生日など。
  • カウントの使い方
  • セーブデータを読む
    • Retaを使って交代するゴーストのセーブデータを読んで多モード対応
    • …って、あれ?もしかしてらくだ屋/華和梨・自作関数集が使えるんじゃね?
    • というわけでそちらへ丸投げ。
       
  • 今なんとなく「Kポストと狛犬」というものを思いついた。Kは華和梨のK。Rポストと狛犬風に。
    • この記事の例文は大抵ポストと狛犬を参考にしているんですが、それなら実際に書き換えたものを作ってみたらわかりやすいかしら、と。
  • 余裕ができたら考えます。

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-07-18 (土) 17:57:13