最新情報はCodePlex 内 いもうとデスクトップをごらんになって下さい

いもうとデスクトップ キャラクタ作成要領

目次


はじめに

はしがき

このドキュメントはいもうとデスクトップのキャラクタ作成,特にスクリプトの記述に関する簡易メモです. 自分でキャラクタを作成してみたいひとが,最初から一通り動作するキャラクタを作成するまでを想定しています. 本体にもspec.txtおよびreference.txtが付属しているので,それらの補完になればいいなぁ,と.

注)1.00系列には現在(最新は1.02),spec.txtおよびreference.txtが付属していませんが,1.03以降には再度付属する予定です.

注意事項

マニュアルの構成

1章の"キャラクタ作成編"では,新規にキャラクタを作成し,いもうとデスクトップ本体に読み込ませて動作させるまでを記述します.2章の"スクリプト応用編"では,スクリプトを編集して,条件に応じて柔軟な対応をさせるための方法を記述します.


キャラクタ作成編

必要なもの

いもうとデスクトップ本体
最新版はCodePlexよりダウンロードできます.現在の最新は1.02です.ダウンロードしたzipファイルを適当な場所へ展開して置いてください.
キャラクタの立ち絵
キャラクタの画像が最低一枚必要になります.画像の形式は32ビットのアルファチャンネル付きPNGである必要があります.ファイル名などの詳細は後述しますが,絵の描き方,画像の作成方法は詳しく触れられません.

フォルダの構成

キャラクタのフォルダ構造

各キャラクタは自身のフォルダを本体の\client\characters\以下に持っています.フォルダ名は(おそらく)自由につけられますが,標準セットのキャラクタはすべて名前をフォルダ名にしています.

実際の構造は既存のキャラクタのフォルダを参考にしてください.

キャラクタフォルダの内容は以下のように構成されます.

 ┬ images(フォルダ)─ 立ち絵ファイル
 ├ scripts(フォルダ)─ スクリプトファイル
 ├ character.xml
 └ profile.xml

imagesフォルダは立ち絵に使用される画像を格納するフォルダです.ファイル名はsurface + ID + .pngとし,このIDでスクリプト上で画像を識別します.ファイル名に大文字,小文字の区別はありません.IDには,0以上2147483647以下の整数を使用します.ただし,デフォルトで読み込まれるため,ID0のファイルは必ず存在していなければなりません(ファイル名はsurface0.png).ファイル名に指定するIDに負値を使用することはできません.複数の画像ファイルを使用する場合,IDは互いに連続している必要はありません.

ファイル名の例)surface15.png (この場合,ID15
スクリプト処理上,使途の似たような画像を連番にしておくと扱いやすいケースがあるので,番号の振り方は工夫のしどころでもあります.
IDに負値を使用しても,本体側が負値のついたファイル名に対応してないので使用されることはありません.

scriptsフォルダにはキャラクタの応答パターンを記述したスクリプトファイルを格納します.スクリプトの書き方については3節以降で記述します.

character.xmlはキャラクタの初期設定を記述するファイルです.次節で内容について解説します.

profile.xmlはキャラクタ使用時に変更した設定内容などが保存されるファイルです.ファイルがなければキャラクタ使用時に生成されるので,あらかじめ作成しておく必要はありません.

ここでは,あらかじめ用意しておいたフォルダを使用して実演を行います.このマニュアルのtemplateフォルダに入っているnadeshikoフォルダを,本体の\client\characters\フォルダにコピーしてください.nadeshikoフォルダには,imagesフォルダ,scriptsフォルダおよび,character.xmlが入っていることを確認してください.このフォルダには起動に必要な最低限のセットがそろっているため,この時点で本体を起動するとキャラクタの選択肢に"なでしこ"が追加されていると思います.

キャラクタの初期設定

キャラクタの初期設定は"character.xml"に記述します.デフォルトの「さくら」の場合は以下のようになっています.

<?xml version="1.0" encoding="utf-8"?>
<Character>
    <Name>さくら</Name>
    <ID>{F3EC60A3-C5FB-443a-B05E-C3345AB37269}</ID>
    <Description>新デフォルト</Description>
    <Age>12</Age>
    <TsundereLevel>3</TsundereLevel>
</Character>
上記の例は1.00以降の場合(0.21以前は書式が異なる)

<Character>の中の項目は順番に,キャラクタの名前,識別用ID,キャラクタに関する説明文,初期年齢,初期ツンデレレベルです.識別用IDにはGUIDと呼ばれる形式の値が使用されています.このIDは本体が使用するもので,スクリプトでは使用しません.ほかのキャラクタ(あるいはバルーン)と重複しないGUIDならば値に制限はないと思われます.キャラクタに関する説明文ですが,これもスクリプトでは使用しません.初期ツンデレレベルは,1から9までのいずれかの整数値で,値が小さいほど性格がツンよりになることが期待されるという値です.スクリプトの関連してくる値は初期年齢,初期ツンデレレベルです.

GUIDの生成にはさまざまな方法がありますが,マニュアルのtoolフォルダにGUID生成ツールを同梱しておきました.

では,実際にキャラクタの初期設定を変更してみましょう.先ほどコピーして作成したnadeshikoフォルダ内のcharacter.xmlを,右クリックして編集を選択します.一般的な環境ではファイルがメモ帳で開かれると思います.名前や年齢など,適当に変更してみてください.変更内容を保存後,本体を起動してキャラクタ名や初期設定が変わっていることを確かめてください.初期設定は右クリックメニューの「機能」-「オプション」のなかの「いもうと」の項目で確認できます.「いもうと」の項目は,現在選択されているキャラクタの設定の確認と変更ができます.

スクリプトの編集

スクリプトファイルの登録

キャラクタの立ち居振る舞いはscriptsフォルダ内にあるスクリプトファイルによって決められています.フォルダ内には,スクリプトファイルのほか,imouto.iniファイルと,imouto_vars.txtファイルがあります.スクリプトファイルは必要な数だけ置くことができます.スクリプトファイルの名前は拡張子を含め,(おそらく)決まりはありません.

imouto.iniは使用するスクリプトファイルを指定するファイルです.このファイルに登録していないファイルは本体に読み込まれません.ファイルの指定にはパスを使用可能なため,scriptsフォルダ内にサブフォルダを作成し,そこにスクリプトファイルをおくこともできます.

メモ)現実装ではscriptsフォルダ外部も参照できなくはないが推奨しない.

imouto_vars.txtは,スクリプトで使用されたグローバル変数の値を格納するファイルです.必要に応じて自動生成されるため,作成しておく必要はありません.

なでしこのscriptsフォルダを開いてください.imouto.initemplate.txtというファイルがあると思います.このうち,template.txtがスクリプトファイルになります.imouto.iniを開いてください.dictionaryで始まる中括弧{}の中に,template.txtが書かれていると思います.今後,スクリプトファイルを追加する場合には,下の例のように,中括弧の中に,1行に1ファイルずつ名前を追加していきます.

dictionary
{
    template.txt
    newScript.txt
}

スクリプトの構成

基本的な情報はreference.txtを参照してください.ここでは,スクリプトを作成,編集するのに必要な項目について記述していきます.スクリプトファイルはプリプロセスおよび(複数の)関数で構成されています.プリプロセスと関数は,いずれも名称を記述した行から開始し,次の関数の始まる行の前の行で終わります.プリプロセスは#で始まる要素で,関数の実行条件をファイルごとにまとめるのに使用されています.プリプロセスはあってもなくても構いません.プリプロセスについては3章3節で触れます.関数は$で始まる要素で,キャラクタの振る舞いを記述するための要素です.そのほか,//で始まる行はコメント行で,この行は本体からは無視されます.また,空白行も本体からは無視されます.

template.txtを開いてください.このファイルの最初の要素は$OnBootです.プリプロセスはファイルの冒頭になければならないため,このファイルにはプリプロセスはないことになります.

関数には0個以上の命令が所属します.命令は1行で1命令という数え方をします.命令には単純な文字列から,他の関数の呼び出しや条件分岐までさまざまなものがありますが,最終的には文字列をひとつ生成します.この生成された文字列が,本体に表示されるメッセージになります.

イベント関数について

スクリプトは本体へのコマンド入力に対しての振る舞いを記述するものですが,コマンドの入力内容とその実行結果により,本体から呼び出される関数が異なります.この,本体側から直接呼び出される可能性のある関数をイベント関数と(勝手に)呼んでいます.たとえば,コマンドとして「接続」を入力した場合,本体がサーバへの接続を試行し,結果により,$OnLogined$OnConnectFailure$OnIncorrectPasswordのいずれかが呼び出されます.イベント関数の一覧と対応する呼び出しイベントの条件はspec.txtを参照してください.キャラクタ作成者は基本的にすべてのイベント関数を実装しておく必要があります.ただし,実装されていない関数が呼ばれた場合でも,メッセージがなしになるだけで,エラーにはなりません.

本体側でのイベント発生→イベント関数呼び出しという流れになっており,イベント関数をスクリプトから呼び出しても,対応するイベントは発生しません.

template.txtをみると,$OnBootに所属する命令は,"こんにちは。"の1行だけです.コメント行や空白行はカウントしません.このため,$OnBootが呼び出された場合,必ず"こんにちは。"が表示されることになります.一方,$OnCloseのは"さよなら。"と"それじゃ。"の2行が所属しています.この場合,$OnCloseが呼び出されるたびに,いずれかひとつの命令が実行されることになります.テンプレートの"なでしこ"はほとんどの関数がセリフを1つしかもっていないため,かなり単調で冷淡な対応になります.それぞれの関数のセリフを好みのものに書き換え,バリエーションを増やすことで,オリジナルのキャラクタができていきます.


スクリプト応用編

関数の利用

システム関数

ユーザ関数

引数と戻り値

変数の利用

変数の種類

変数の代入と値の取り出し

実行時タグ

条件分岐

if文

条件付き関数

プリプロセス

繰り返し処理

for文

while文

foreach文


ページの最上段へ移動