*OpenKEEPSにコピペする好感度 [#hf36195a]
-----

#contents

*何このページ? [#n60023cd]
-多くのゴーストにキャラづくりの一環として組み込まれている「好感度」ですが、&br;
実際に導入しようとなるとある程度は自力でプログラミングする必要があります。&br;
ですが「好感度」と言うギミックの需要は多いと思われますし&br;
コピペ出来そうなテンプレートが一つくらい有っても悪くないだろう、と。&br;
このページでは無知無学無謀な梳野が人に聞いたり自分で考えたりしながら&br;
実際にプログラムを組み立てて動かしていく過程を紹介する事で、&br;
其処にすら辿り着けない人へのHowToにならないだろうかと画策してる次第です。&br;
&br;
そんなん理解する気皆無なんでとにかくコピペと言う人は[[こっち>#p6314e7d]]へどぞー

&color(red){注意};:宮内 梳野は本職のプログラマーでは在りませんので、紹介・提示する構文は必ずしも適正とは限りません。&br;
また、プログラム全般に関する質問は真っ当な勉学を積まれた方になさる事を貴方の為にもお勧めします。

*どーしてOpenKEEPS? [#e51c4ac8]
-梳野が実際に使ってるからです。&br;&br;
いえ、あの、本当にそれだけなんです、はい。&br;&br;
そもそも理解出来ればshioriというのは須らくプログラミング的な事が出来る(はず)なので&br;
別段華和梨とOpenKEEPSに固執する必要が有るかと言うと……&br;
でもOpenKEEPSは良いものですょ。基本的に該当部分の書き換えでゴースト作れますから凄い楽です。

*そもそも好感度って何だ [#ybd0f75a]
-頭を撫でて+2、胸さわったら-1。一時間毎に+5するけど胸揉んだら-4。&br;
「好感度」と言うのはだいたいこんな感じに何かしらすると増減する「数字」として扱われる事が多いと思われます。&br;
しかし実際にゴーストを作っていくにあたり&br;
「どうやって好感度を増減させるか」「どうやって好感度を反映させるか」&br;
と言う基本的な挙動を実現させるには各Shioriの文法に則ってプログラムを組まなければなりません。&br;
「じゃあ実際にどうすれば良いのよ」ってのを次から具体的に書いて行こうかと。

*好感度を導入するには [#h77fac68]
-以下の文章を根本的に理解しようと思うなら、[[華和梨公式サイト:http://kawari.sourceforge.net/]]ないしは&br;
華和梨同梱のドキュメントを傍らに置きつつ読み進めて下さい。&br;
Start.htmlを理解した上で、Users.htmlやkis_reference.htmlを参考にしていく感じになります。&br;
-あと、前提としてなるべく最新版の華和梨とOpenKEEPSを使ってるとします。&br;
編集段階では華和梨が8.2.4でOpenKEEPSが3.3.0alpha8です。
-それと、実際に好感度を導入する前にある程度は好感度の扱い方を決めておいた方が後々面倒が無くてすみます。&br;
当ページでは好感度の仕様を''「初期値が50、最大値が100で最低値が0となる数字」''として話を進めます。
** 好感度に「名前」をつけて、初期値を決める[#vaeffe11]
-プログラム上で取り扱う為には好感度に適当な名前をつけなければなりません。&br;
とは言え、内部で処理するだけの上に華和梨は全角文字対応なので好き勝手して構いません。&br;
例えば「lovepoint」とか「好感度」とか、貴方の感性が赦すならば「アチョー」とか「mogera」とかでも。&br;
取り敢えず当ページでは好感度を無難に&color(black,ddddff){「HP」};と名付ける事にします。&br;
-さて。好感度の名前を決めましたが、華和梨の文法に則ってその事を宣言しない事には扱うに扱えません。&br;
その為には、華和梨の関数コマンド「set」を使ってこう記述します。&br;
 $(set HP 50)
人によっては「たったこれだけ?」と思うかもしれませんね。&br;
このコマンドを日本語に訳すと''「『HP』と言うエントリに『50』と言う単語を設定します」''と言う意味になります。&br;
上記のコマンドによって名前と初期値が同時に与えられるので、後はこのコマンドを&br;
初回起動イベントにべっすりとねじ込むだけです。&br;
OpenKEEPSのtemplateフォルダに入っている「ghost-keeps-bootend.kis」を開いて初回起動トークの冒頭に&br;
 TalkFirstboot : ( $(set HP 50) 
	\t\0\s[0]「はじめまして」の方は\w6はじめまして。\w8\n
	そうでない方も\w6ごきげんよう。\n\n
	\w8OpenKEEPS\w2サンプルゴーストの\w2きぃです。\w8\w8
	\1\s[10]ぷしゅうや。\w8よろしゅうな。\x\c
	\0\s[0]これからあなたのゴースト制作をお手伝いしてく\n
	わけですけど‥‥\n\n\w8\w8
	\1\s[10]まぁ、わいらにできる事はひとつや。\w8\w8\n\n
	あんさんは辞書ファイルを書き換える。\n
	\w8わいらは言われた通りに喋る。\w8\w8それだけや。\w8\w4
	\0\s[0]身も蓋もないけどね。\x\c
	\0\s[0]“ゴーストの基本は楽しいお喋り。\n
	 それ以外の雑事を受け持つのがOpenKEEPS”\nなんだよね?\w8\w8\n\n
	\1まったくもって。\w6足回りはわいらに任せとき。\n\n
	\w6その分\w4あんさんは新ネタを1つでも多く考えるんやで。\w8\w8
	\0\s[5]一緒にがんばりましょーねっ★\e
	)
と先程のコマンドをねじ込んでやるだけで、好感度の存在と内容の宣言が出来た事になります。&br;
で、次はこの好感度を実際に活用する方法に入りましょー&br;
**好感度を状況によって増減させる。 [#zc33b138]
-宣言した好感度ですが、その数字を変動させない事には意味が有りません。&br;
この好感度を増減させるためには以下のコマンドを使用します。&br;
 $(dec HP 5 0)
 $(inc HP 10 100)
上のコマンド「dec」ですが、これは特定のエントリを減算するコマンドで上記の場合だと意味は&br;
''「『HP』と言うエントリの内容を『5』減らし、その際の下限は『0』とする」''となります。&br;
下のコマンド「inc」は逆に加算するコマンドで&br;
''「『HP』と言うエントリの内容を『10』増やし、その際の上限は『100』とする」''と言う意味になります。&br;
此処まで来たら後は簡単な話で、増減させたいお触りイベントやトーク中の選択肢等に&br;これらのコマンドをぼっとれと詰め込むだけです。&br;
 C0Single.Bust : ( $(dec HP 5 0)
	\0\s[3]痛いッ。
	\1\s[11]もそっと強くでもかまわんで。
	\0ぷしゅうっ!\e
	)
&br;
 sentence : (
	\0\s[0]${username}さんは、\w4何で私を呼んでくれるんですか?\w8\n
	 \q["心が君を求めてるんだ。,TalkA1"]\n
	 \q["いや別に……何となく?,TalkA2"]\n
	 \q["何でも何も、乳。,TalkA3"]\e
	)
 Select.TalkA1 : \0\s[1]…\w3…\w3何言ってるんですか、\w4もう。$(inc lpoint 10 100)\e
 Select.TalkA2 : \0\s[4]…\w3…\w3…\w3…\w3はぁ、\w4そですか。\e
 Select.TalkA3 : \0\s[2]うわ言い切りましたよこの人。$(dec lpoint 15 0)\e

**好感度で反応を分岐させる [#b93ded79]
-「増えて減って好感度らしいぜヒャッホウ!」ですが、増えて減っただけでは何の意味もありません。&br;
やはり、好感度の大小によって行動・反応を変化させてなんぼです。&br;
と言うわけで好感度によって反応を分岐させたい所なので、&br;
構文コマンドの「if」を利用してこんな感じにしてみると取り敢えず反応が変わってくれるようです。&br;
 C0Stroke.0.Bust : (
	$(if $[ ${HP} >= 85] "\0\s[1]ゃん\w3…\w3…\e"
	else if $[ 20 <= ${HP} && ${HP} <= 84 ] "\1\s[10]\0\s[3]えっちなのはいけないと思います!\e"
	else if $[ ${HP} <= 19 ] "\1\s[10]\0\s[2]その手を下げなさいこの×××野郎!\e"
	else "\e")
 )
上の構文の説明ですが、日本語に訳すると
 「エントリ『HP』の内容が85以上の時〜
  でなければエントリ『HP』の内容が20以上 且つ 84以下の時〜
  でなければエントリ『HP』の内容が19以下の時〜」
 「エントリ『HP』の内容が85以上の時~
  でなければエントリ『HP』の内容が20以上 且つ 84以下の時~
  でなければエントリ『HP』の内容が19以下の時~」
と言う所でしょうか。プログラム中で扱われている記号の意味はそれぞれ
 A>=B:AがB以上。
 A=<B:AがB以下。
 A&&B:A且つB
となります。詳しくは華和梨ドキュメントのusers.htmlから「演算式」の項目を参照して下さい。&br;

**好感度の終了時保存・起動時読み込みをさせる [#r593a041]
-「増えて減って行動が変化するなんてぇ、マぁーヴェラスじゃないか」と思ってもちょっと待った。&br;
このままだと折角の好感度が保存されません。&br;
伺かを終了させてから再会したあの娘は僕の事を忘れてました、では悲しいじゃ有りませんか。&br;
そんな悲劇を防ぐ為に、終了時に好感度をファイルへと保存する様にしましょう。&br;
幸いにしてOpenKEEPSにはその為の機能が用意されてます。OpenKEEPS.kisを開いて&br;
 #datasaveparam : 
 となっている行を
 datasaveparam : HP
 
 #databackupparam : 
 となってる行も
 databackupparam : HP
としておきましょう。これだけできっちり保存されます。&br;

*コピペ一覧 [#p6314e7d]
 好感度のエントリ名を「AA」とする。
 
 起動時:$(set AA BB)
 BB:好感度初期値(数字)
 
 減算時:$(dec AA CC DD)
 CC:減算量(数字)
 DD:下限値(数字)
 
 増加時:$(inc AA EE FF)
 EE:増加量(数字)
 FF:上限値(数字)
 
 分岐構文:
 $(if $[ ${AA} >= 85] "文章A"
	else if $[ 20 <= ${AA} && ${AA} <= 84 ] "文章B"
	else if $[ ${AA} <= 19 ] "文章C"
	else "\e")
 注:各数字は任意だが、「以上」「以下」で記述統一しているので
   同じ数字が構文中に有ると条件が重複してしまう。
 
 好感度保存処理:OpenKEEPS.kis内のdatasaveparamの項目の冒頭に付いている「#」を削除し
         datasaveparam : AA
         とする。

*まとめ [#d7780b44]
-さて、解説を交えつつと言うか解説主体で所々にテンプレが有ったり無かったりと言うか。&br;
ともあれこのページにある構文をコピペして、数字や名称などを調整すればひとまずは問題なく動くと思います。&br;
ただし「取り敢えず動く様にする」が目的な為に、梳野自身も既に改良点を見つけているぐらいに&br;
「力業」と言うか「超初歩的内容」と言うかとにかくそんな感じに仕上がっております。&br;
その辺りの改善策は[[恋するOpenKEEPSの作り方>宮内 梳野/恋するOpenKEEPSの作り方]]の方でちまちまと書きつらねてるので&br;
出来る事ならばそちらもきっちり参照してくださいませ。&br;
&br;
2006/9/4:datasaveparamの存在を知ったので保存の項目を改修&br;
&br;
ではでわ、このページが一人でも多くの新でぺろぱさんを生み出せる事を願いつつ。

*コメント [#sf73b885]
-内容に関して「此処をこうするともっと良い」とか「この部分がよく分からない」とか&br;
そう言った意見はこまめに出してスッキリしちゃってください。溜め過ぎは良くないですょ。&br;&br;
- ステータスのセーブって、datasaveparamエントリじゃダメなの? --  &new{2006-09-03 (日) 17:23:50};
- 良いか駄目か以前に「datasaveparam」の存在を知りませんでした。少し勉強しなおして来ます…… -- [[宮内 梳野]] &new{2006-09-03 (日) 23:24:45};
- 探しても解説が見つからなかったのでさとーさんに直接伺いました。と言うわけで早速改編。 -- [[宮内 梳野]] &new{2006-09-04 (月) 23:13:54};

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS