変数 - SHIORI『真絵(mae)』仕様書
■基礎
-
変数名で使用可能な文字
使用できる文字は、数字0~9、英字a~z、_(アンダースコア)です。ただし数字から始めてはいけません。 また予約語や関数名と同じ文字列は使用できません。変数名は大文字と小文字を区別します。
-
変数の種類
SHIORI真絵の変数は4種類あり、以下の特徴があります。
変数の種類 特徴 使用できる場所 システム変数 システム側で内容が設定されている変数です。現在の時刻やユーザー名などがあります。 条件,プログラム,文章中(配列を除く) ユーザー変数 ユーザーが宣言した変数です。自動的に保存され、起動時に読み込まれます。 条件,プログラム,文章中(配列を除く) 辞書変数 辞書で定義した単語に置き換わる変数です。 文章中 実行変数 初期設定の値を変更するための変数です。 文章中
■システム変数
-
システム変数には以下のものがあります。
変数名 型 内容 year 整数 4桁、現在の西暦です。 month 整数 1~12、現在の月です。 day 整数 1〜31。現在の日です。 hour 整数 0~23、現在の時です。 minute 整数 0〜59、現在の分です。 second 整数 0〜59、現在の秒です。 dayofweek 整数 0~6、現在の曜日を表現します。0=日曜日、6=土曜日です。 username 文字列 ユーザー名です。 emotion 整数 -5~5、現在の気分の値です。 reference[0]〜[8] 文字列 伺かから渡ってきたReferenceの配列です。 条件とプログラム中では上記の変数名をそのまま使用できます。文章中では配列である reference[0] ... reference[8] を除き、${year} という記述で使用できます。
■ユーザー変数
-
宣言
ユーザー変数はDeclarationタグ内のプログラム中でvarを使って宣言をすることで安全に使用できます。
#Declaration: var 変数名1, 変数名2, ...; : :end 例) #Declaration: var cloth; var cloth_counter; var phase; var experience; var surface[13]; var hohoemi,kitai,odoroki,fuan,otikomi,warai,otituki,okoru,nemui; var komariwarai,komarinaki,okorinaki,muhyojo; var fuu,fuu_card,fuu_book; :end
ここで宣言された変数は、SHIORI真絵の終了時に自動的にmae_variable.txtに保存されます。 保存されていた変数は起動時に自動的に読み込み、変数に代入されます。 その際、前回保存されていた変数が宣言されていない場合、保存されていたデータは破棄されます。
-
型
変数には「整数」型と「文字列」型があります。どちらも宣言時には区別をしません。型は条件とプログラムの中で意味を持ちます。 整数を代入すれば整数型に、文字列を代入すれば文字列型になります。 変数を文章中で使用した場合(実行変数を使った一部の例外を除き)、すべて文字列に変換されます。 条件またはプログラム中で変数を使用して演算を行った場合、自動的に整数に変換をして結果を出力します。文字列に変換するには sprint()関数などを使用してください。
-
配列
変数名の直後に[(0以上の整数n)]を指定することで配列を使用できます。 配列を使用するためには、宣言時に変数の直後に[(0以上の整数n)]を添えてください。 配列の宣言で整数nを指定すると[0]...[n-1]まで計n個の変数が使用できるようになります。
■辞書変数
-
辞書変数には大きく分けて、辞書の「ジャンル」で定義したものと、mae_alias.txtで定義したものがあります。 辞書の「ジャンル」の文字列は文章中で${ジャンル}と記述することで、辞書の中で同じジャンルが指定されている単語の中からランダムで置き換わります。 ここではmae_alias.txtで定義したものについて説明します。
-
mae_alias.txt
品詞グループ名の定義を記述するファイルです。ここで品詞などと辞書変数を結びつけ、その辞書変数を文章中に記述することで 単語を使用できるようになります。辞書変数には大きく分けて3種類あります。
辞書変数の種類 概要 品詞グループ mae_wordinfo.txtで品詞に対して定義したキーワード(このままでは変数に使用できない)をグループ化して、新しいキーワードを割り振る。 部分文章 部分文章を記述したファイル名をキーワードに割り振る。指定したファイルの中からランダムで部分文章を選出して置き換わる。 ジャンルグループ 辞書で定義した複数のジャンルをグループ化して、新しいキーワードを割り振る。 -
品詞グループ
mae_wordinfo.txtで品詞に対して定義した品詞キーワードを、辞書変数として使用可能なものに定義します。フォーマットは以下の通りです。
キーワード 品詞キーワード1 品詞キーワード2 ... 例) \ms norn6 norn7 norn8 格言 filler1 何かを norn1
「\ms」「格言」「何かを」 が辞書変数です。文章中で${\ms}が使用できるようになります。 その場合、品詞キーワードnorn6, norn7, norn8に含まれる単語の中からランダムで置き換わります。
-
部分文章
文章の一部分を別ファイルにリストしておき、そのファイル名と辞書変数を結びつけたものです。 文章中でその辞書変数を使用したときに、そのファイルの中からランダムで部分文章を選出して置き換わります。 キーワード名は"\d"から始める必要があります。
キーワード 部分文章ファイル名 例) \dms mae_dms.txt
「\dms」が辞書変数です。文章中で${\dms}が使用できるようになります。 その場合、カレントディレクトリにあるmae_dms.txtファイル内に記載されたリストから選出され置き換わります。
部分文章ファイルは、文章ファイルの文章部分のみを羅列したものです。ただし実行変数%nによる単語の再利用はできません。 行頭が"//"または"#"の場合はコメント行になります。 部分文章ファイルの文章の中に部分文章の辞書変数を使用した場合、最大8階層まで展開されますが使用は推奨しません。
勝負${服}を身に付けた${\ms} ${何かを}した${\ms}
-
ジャンルグループ
複数のジャンルをグループ化して、辞書変数を結びつけたものです。キーワード名は"\j"から始める必要があります。
キーワード ジャンル1 ジャンル2 ... 例) \jgame コンシューマゲーム アーケードゲーム
「\jgame」が辞書変数です。文章中で${\jgame}が使用できるようになります。 その場合、辞書で定義されたジャンル「コンシューマゲーム」と「アーケードゲーム」に登録された単語の中から選出され置き換わります。
部分文章ファイルは、文章ファイルの文章部分のみを羅列したものです。ただし実行変数%nによる単語の再利用はできません。 行頭が"//"または"#"の場合はコメント行になります。 部分文章ファイルの文章の中に部分文章の辞書変数を使用した場合、最大8階層まで展開されますが使用は推奨しません。
例) 勝負${服}を身に付けた${\ms} ${何かを}した${\ms}
■実行変数
-
実行変数は文章中に埋め込むことで、辞書に登録された単語に置き換わるのとは別の動作をします。 主なものに初期設定の変更やSAORIの使用ができるものがあります。
-
実行変数書式 動作 %n その文章の中でn番目に使用した変数と同じ内容を埋め込みます。部分文章内の変数は何番目かのカウントに含めません。 %bin n nは0~255まで指定可能です。ASCIIコードと見なして1文字のみ埋め込みます。 %info n nは0~8まで指定可能です。Reference[0]~Reference[8]の内容を埋め込みます。 システム変数reference[n]は配列のため${}指定で文章中には埋め込めないため、これを使用することでそのまま埋め込み可能です。 %talk n nは0以上の整数が指定可能です。初期設定のTALK_INTERVAL (話し出す時間の間隔を分指定)を変更します。単語の置き換えはありません。 %dtalkと共に0を指定するとイベント以外では話し出さなくなります。 %dtalk n nは0以上の整数が指定可能です。初期設定のTALK_INTERVAL_DETAIL (話し出す時間の間隔を秒指定)を変更します。単語の置き換えはありません。 %talkと共に0を指定するとイベント以外では話し出さなくなります。 %you 他のゴーストからコミュニケートされた時に返答をする場合、相手の名前に置き換わります。詳しくは文章の書式を参照してください。 %secutiry n nは0以上の整数が指定可能です。初期設定のSECURITY_LEVEL(セキュリティレベルの指定)を変更します。 単語の置き換えはありません。 %teach:変数名 Teach Boxを開き、入力された文字列を変数に代入します。 一度入力を受け付けるとリセットがかかるので、繰り返して同一変数へ代入はされません。 %event:タグ名 タグから文字列を生成して置き換えます。タグについては文章の書式を参照してください。 %saori:モジュール名:m:配列名:n 配列名の要素を先頭からn個だけArgument[0]から割り当てて、指定したモジュール名を持つSAORIに渡します。 SAORIモジュール名は""で囲わないでください。SAORIモジュールは事前に初期化しておく必要があります。
mは整数で戻り値の指定ができます。0の場合、この実行変数はResultの結果に置き換わります。 1以上の場合、Value[m-1]の結果に置き換わります。負値の場合は置き換わらなく、実行されるのみです。例) 話す頻度を多くするね。${%talk 1}\e
この文章を話すと、話し出す頻度が約1分ごとに変更されます。