華和梨・自作関数集†
セーブ・ロード関数†
- SSPのキャッシュ機能など、重複ロードによるセーブファイル肥大化への事前対策
- exsaveは単純にセーブするだけ
- exloadは読み込む対象のエントリを先に掃除してから読み込む。ダブり対策
- 2009/05/17 exloadが上手く働いていなかったのを修正
- 2009/12/23 短縮
=kis
# $(exsave 保存したいエントリの名前を列挙したエントリ ファイル名)
# $(exload ロードするエントリ名を列挙したエントリ名 ファイル名)
#
# SaveEntriesに書いたエントリ名を全部セーブorロードする。
# exloadはSaveEntriesに書いたエントリ名の中身を全てクリアしてからロードする。
#
# 実装例
# OnClose : $(exsave SaveEntries savefile.txt)${終了トーク}\e
# OnBoot : $(exload SaveEntries savefile.txt)$(inc 起動回数)${起動トーク}\e
# SaveEntries : 起動回数, TalkInterval, 見切れ, 重なり, flag
#
# 使うタイミング
# exsaveはOnClose、OnGhostChanging、OnUpdateBegin。万全を期すなら最小化時も。
# exloadはOnBoot、OnGhostChanged、OnUpdateComplete。実装するならOnGhostCalledも。
function exsave $(
if $[ $(size @arg) != 3 ] $(return "false");
xargs $@arg[1] save $@arg[2];
return "";
);
function exload $(
if $[ $(size @arg) != 3 ] $(return "false");
set @a $@arg[1];
set @b 0;
loop $(size ${@a}) $(clear $${@a}[${@b}] ; inc @b );
load $@arg[2];
return "";
);
=end
里々式・トークの重複呼び出し回避†
#----------------------------------------------------------------------------
# $(talk <エントリ名>)
#----------------------------------------------------------------------------
# 里々で実装されている、「全てのトークが出るまで同じトークは出ない」を
# 実現する関数。これを使うと、エントリ名で指定されたエントリをチェックして
# 重複回避しつつエントリを呼び出します。
# チェック用の変数として${エントリ名_temp}というエントリを作成。
#----------------------------------------------------------------------------
# 実装例
# sentence : $(talk ランダムトーク)
# ランダムトーク : \0あ!\e
# ランダムトーク : \0い!\e
#----------------------------------------------------------------------------
function talk $(
if $[ $(size @arg) != 2 ] $(return "false");
if $[ ${$@arg[1]_temp} == $(NULL) ] $(
clear $@arg[1]_temp;
set @a 0;
loop $(size $@arg[1]) $(
insert $@arg[1]_temp[$(rand $[1+$(size $@arg[1]_temp)])] ${@a};
inc @a;
);
);
return $$@arg[1][$(shift $@arg[1]_temp)];
);
リロード関数†
#----------------------------------------------------------------------------
# $(reload <エントリ名>)
#----------------------------------------------------------------------------
# 華和梨用の辞書リロード。
# 要するに全エントリをクリアしてから kawarirc.kis を読み込み直すだけ。
# よって descript.txt やシェルはリロードされない。
# セーブデータの再読み込みを栞イベント中で別途行っている場合、この関数の後に
# 読み込ませれば大丈夫。
#
# <エントリ名> はリロード完了後に呼ぶエントリ。ここで完了トークをさせられる。
# 省略可。というかあんまり使わない。
#----------------------------------------------------------------------------
# 実装例1
# sentence : $(reload)${セーブデータの読み込み}\e
#
# 実装例2
# sentence : $(reload リロード完了トーク)
# リロード完了トーク : \0リロードしました。\e
#----------------------------------------------------------------------------
function reload $(
if $[ $(size @arg) > 2 ] $(return "false");
listtree @cls .;
set @a 0;
loop $(size @cls) $(
clear $@cls[${@a}];
inc @a;
);
load kawarirc.kis;
return $(entry $@arg[1]);
);
里々ゴーストのセーブデータから値をゲット†
- ゴーストフォルダが複数に分けられていると機能しません
汎用値をゲット†
=kis
# $(satori_svget ディレクトリ名 欲しい値)
#
# 例 $(satori_svget "Iron_Dream" "$起動回数")
# ゴースト「鉄の夢」のセーブデータから$起動回数の値を得る。
function satori_svget $(
if $[ $(size @arg) != 3 ] $(return "false");
setstr @a $@arg[1];
textload @b ..\..\..\${@a}\ghost\master\satori_savedata.txt;
set @i 0 ; loop $(size @b) $(split @c $@b[${@i}] " " ; inc @i);
return $@c[$[ $(find @c $@arg[2]) + 1 ]];
);
=end
辞書フォルダをゲット†
- 対象ゴーストの終了時の辞書フォルダ設定を得れば交代時のトークに幅が持たせられるかも知れない
=kis
# $(satori_dictfget ディレクトリ名)
#
# 例 $(satori_dictfget "vanishing")
# ゴースト「侵されざる黒」のセーブデータから$辞書フォルダの値を得る。
# 中身が初期フォルダ「.」の場合は空が返る。
function satori_dictfget $(
if $[ $(size @arg) != 3 ] $(return "false");
setstr @a $@arg[1];
textload @b ..\..\..\${@a}\ghost\master\satori_savedata.txt;
set @i 0 ; loop $(size @b) $(split @c $@b[${@i}] " " ; inc @i);
setstr @d $@c[$[ $(find @c "$辞書フォルダ") + 1 ]];
if $[ ${@d} == "." ] $(return "")
else $(return ${@d});
);
=end