一般的なHeartシステム全体の構造は、以下のようになります。
- Heartディレクトリ
|- Heart.exe Heart 本体
|- Heart.ini 設定ファイル
|- Plugins.txt Plug-in リスト
|- char1.htc char1 の人格ファイル
|- char2.htc char2 の人格ファイル
+- SPIs Susie Plug-in 用フォルダ
- char1ディレクトリ char1 のデータフォルダ
|- char1.hts セーブファイル
|- nadenade.txt なでなでデータファイル
|- chr101.htd データファイル01
|- chr102.htd データファイル02
|- chr1A1.htd データファイルA1
|- chr1A2.htd データファイルA2
|- chr1B1_a.htd データファイルB1
|- chr1B1_b.htd データファイルB1
|- (以下略)
|- ...
- char2ディレクトリ
|- (以下略)
|- ...
各データファイルの違いは、以下の通りです。暗号化は、ユーティリティ Encrypt.exe によって行います。データファイルの探索は01→02→A1→A2→B1→B2→C1→C2の順序で行い、各データの終端または優先タグ {Prior} が発見された時点で返答リストが存在していれば探索を中止します。
| 消耗 | 優先 | 暗号化 | 推奨拡張子 | |
|---|---|---|---|---|
| 01 | ○ | ○ | ○ | .htd |
| 02 | × | ○ | ○ | .htd |
| A1 | ○ | ○ | ○ | .htd |
| A2 | × | ○ | ○ | .htd |
| B1 | ○ | ○ | ○ | .htd |
| B2 | × | ○ | ○ | .htd |
| C1 | ○ | ○ | ○ | .htd |
| C2 | × | × | ○ | .htd |
| Save | -- | -- | ○ | .hts |
| Character | -- | -- | × | .htc |
各種人格情報を格納。必ずしも Heart フォルダ直下、つまり Heart.exe と同じフォルダに存在する必要は無いが、ネットワーク上のものはサポートされない。各データファイルへの参照には相対パスを用いる。
key1 value1 key2 value2 ... keyn valuen
key と value を交互に記す。key に大文字小文字の区別は無く、順序も問わない。現在の Heart でサポートされる key の一覧は以下の通り。
| 必須 | key | value | 標準値 | 備考 | 例 |
|---|---|---|---|---|---|
| ○ | version | 3桁の整数 | -- | 対応確認バージョン | 210 |
| ○ | name | 文字列 | -- | 正式名称 | 水瀬すみれ |
| ○ | folder | 文字列 | -- | 人格フォルダ名 | sumire |
| data01 | 文字列 | -- | ファイルリスト(カンマ区切り) | smr01_1.htd,smr01_2.htd | |
| data02 | 文字列 | -- | ファイルリスト(カンマ区切り) | smr02.htd | |
| dataa1 | 文字列 | -- | ファイルリスト(カンマ区切り) | 略 | |
| dataa2 | 文字列 | -- | ファイルリスト(カンマ区切り) | 略 | |
| datab1 | 文字列 | -- | ファイルリスト(カンマ区切り) | 略 | |
| datab2 | 文字列 | -- | ファイルリスト(カンマ区切り) | 略 | |
| datac1 | 文字列 | -- | ファイルリスト(カンマ区切り) | 略 | |
| datac2 | 文字列 | -- | ファイルリスト(カンマ区切り) | 略 | |
| defaultbitamp | 文字列 | -- | 標準の画像ファイル | すみれ普.bmp | |
| transparentbitamp | true or false | false | 画像の左下1Pixelを透過色とするか否か | true | |
| originalballoon | true or false | false | 人格フォルダ下の独自の吹き出し画像を使う | true | |
| balloonchar | 文字列 | -- | 人格ターンの際の吹き出し (200x350ビットマップ) |
balloonc.bmp | |
| balloonuser | 文字列 | -- | ユーザーターンの際の吹き出し (200x350ビットマップ) |
balloonu.bmp | |
| transparentballoon | true or false | false | 吹き出しの左下1Pixelを透過色とするか否か | true | |
| parents | 文字列 | -- | 製作者(達) | +EC | |
| url | 文字列 | -- | サポートURL | http://〜(以下略) | |
| comment | 文字列 | -- | 人格の紹介 (HeartScript 基本タグが有効) |
略 | |
| nadenade | true or false | false | なでなで対応か否か | false | |
| datanadenade | 文字列 | -- | ファイルリスト(カンマ区切り) | nadenade1.txt |
{Memo50}〜{Memo99} と {Count50}〜{Count99} など、人格の記憶データを保存。人格の正式名称を鍵にして暗号化して保存される。ファイル名は、人格ファイルの拡張子を「.hts」に変えたもの。
{Memo50}
{Memo51}
...
{Memo99}
{Count50}
...
{Count99}
{Flag01}
...
{Flag99}
HeartScript を用いて、返答を決定。まず最初に探索するため、優先度は最も高い。データファイル01は消耗有り、02は消耗無し。
"val1","resp1"
"val2","resp2"
...
"valn","respn"
"{EndofData}","{Dummy}"
val を1から順に HeartScript として評価していき、True となれば対応する resp を返答リストに加える。{OperateMessage} 基本タグが返す制御メッセージに基づいて判断する時は、このファイルを使う。val が優先タグ {Prior} であればその時点での返答リストを調べ、1つ以上リストに返答があれば探索を中止し、リストの中からランダムに返答する。HeartScript が有効なのは val(基本タグのみ)、resp(拡張タグもOK) で、{EndofData} までのデータが有効。返答が決定した時、消耗有りのファイルでは、val resp の対がメモリ上で削除される(ファイル自体には変化なし)。
前回の人格側の発言とユーザーの入力に基づいて返答を決定。データファイル0に次いで優先度が高い。データファイルA1は消耗有り、A2は消耗無し。
"prev1","inpt1","resp1"
"prev2","inpt2","resp2"
...
"prevn","inptn","respn"
"{EndofData}","{Dummy}","{Dummy}"
prev を半角大文字化した正規表現が前回の返答(基本タグを展開した後の文字列)を半角大文字化した文字列にマッチし、かつ、inpt を半角大文字化した正規表現がユーザーの入力を半角大文字化した文字列にマッチすれば、対応する resp を返答リストに加える。prev が優先タグ {Prior} であればその時点での返答リストを調べ、1つ以上リストに返答があれば探索を中止し、リストの中からランダムに返答する。HeartScript が有効なのは resp(拡張タグもOK) で、{EndofData} までのデータが有効。返答が決定した時、消耗有りのファイルでは、inpt prev resp の対がメモリ上で削除される(ファイル自体には変化なし)。
ユーザーの入力に基づいて返答を決定。データファイル0、Aに次いで優先度が高い。データファイルB1は消耗有り、B2は消耗無し。
"inpt1","resp1"
"inpt2","resp2"
...
"inptn","respn"
"{EndofData}","{Dummy}"
inpt を半角大文字化した正規表現がユーザーの入力を半角大文字化した文字列にマッチすれば、対応する resp を返答リストに加える。inpt が優先タグ {Prior} であればその時点での返答リストを調べ、1つ以上リストに返答があれば探索を中止し、リストの中からランダムに返答する。HeartScript が有効なのは resp(拡張タグもOK) で、{EndofData} までのデータが有効。返答が決定した時、消耗有りのファイルでは、inpt resp の対がメモリ上で削除される(ファイル自体には変化なし)。
データファイル0、A、Bを探索しても返答が見つからなかった場合、このファイル中からランダムに返答する。優先度は最も低い。データファイルC1は消耗有り、C2は消耗無し。
resp1
resp2
...
respn
{EndofData}
有効な resp の中からランダムに選んで返答する。C1ファイルでは、resp が優先タグ {Prior} であればその時点での返答リストを調べ、1つ以上リストに返答があれば探索を中止し、リストの中からランダムに返答する。C2ファイルでは優先タグ {Prior} タグは意味を持たない。HeartScript が有効なのは resp(拡張タグもOK) で、{EndofData} までのデータが有効。返答が決定した時、消耗有りのファイルでは、resp がメモリ上で削除される(ファイル自体には変化なし)。