独自セーブシステムの雛型のサンプルを作ろうかと画策中です。
 掲示板でご意見等いただけると助かります。
 擬似メニューバーとは別物。セーブとロードだけのシンプル設計。

 ←Fで遊んでみました。「浜羅攻略一週目終了」「児山に相談。」

 B・D・Fは0.3にバージョンアップしました。試作段階ですが使えます。
 ……説明が面倒だからってやたら作りやがりましたよこの人。(汗)
 備え付けメニューバーのセーブデータは最大9個です。
 併用する場合は独自セーブも最大9個に。

 A0.2 … 基本。
 B0.3 … A+セーブ画面を閉じるまで何度もセーブ可能。まだ欠点あり
 C0.2 … A+制作者側でセーブ名付け。
 D0.3 … B+C。まだ欠点あり
 E0.2 … C+ユーザーがセーブ名付け。
 F0.3 … B+E。まだ欠点あり

・Q&A
Q1.どんな動作をするの?
Q2.A〜Fは何が違うの?
Q3.B・D・Fでロード時に一瞬何か表示される?
Q4.自分のゲームに使いたい。
Q5.デザインを変更したい。
Q6.どんなバグが起こる?
Q7.他の種類に変更したい。
Q8.デザイン変更以上に改造したい。
Q9.改造して、サンプルとして配布したい。
Q10.各コマンドの意味を知りたい。

Q1.どんな動作をするの? 
 まずはAをダウンロードして、実行してみてください。
 「セーブですよ。」「ロードですよ。」をクリックすると、それぞれセーブ・ロード画面が表示されます。
 セーブ画面では、黒い長方形をクリックすると、黒い長方形と同じサイズに縮小したスクリーンショットとセーブ日時をセーブして、セーブ画面を閉じます。
 ロード画面では、セーブされたデータだけスクリーンショットをクリック可能、ロードして、ロード画面を閉じます。
 黒い半透明の背景をクリックする、またはEnter・Shiftキーを押すと、セーブ・ロード画面が閉じます。
 B〜FについてはQ2へ。
 A〜F全て、コミックメーカー3に元々ついているメニューバーとの併用が可能です。

Q2.A〜Fは何が違うの? 
 Aが基本の形です。スクリーンショット・セーブ日時をセーブ・ロードし、セーブ・ロード画面をすぐ閉じます。
 BはAに加えて、セーブ画面を閉じるまで何度もセーブが可能です。欠点についてはQ3へ。
 CはAに加えて、制作者側でセーブ名を付けることが出来ます。「プロローグ」「月曜日」など。
 DはBとCの合体です。セーブ画面を閉じるまで何度もセーブが可能で、かつ制作者側でセーブ名を付けることが出来ます。
 EはCに加えて、ユーザーがセーブ名を付けることが出来ます。「月曜日 ルート@攻略中」など。
 FはBとEの合体です。セーブ画面を閉じるまで何度もセーブが可能で、かつ制作者側でセーブ名を付けることが出来、更にユーザーがセーブ名を付けることが出来ます。

Q3.B・D・Fでロード時に一瞬何か表示される? 
 B・D・Fは、セーブ画面を閉じるまで何度もセーブが可能です。
 しかし、ロード時に一瞬、セーブ画面の背景が表示されます。
 現在、解決不可能な欠点です。申し訳ありません。
 気になる方は、A・C・Eをご利用ください。

Q4.自分のゲームに使いたい。 
 A〜Fの中からお好みの物を一つ選んでください。
 導入方法はそれぞれのreadme.txtを参照してください。
 それぞれ導入方法が異なります。ご注意ください。
 隠しコマンドを使用している為、質問等は必ず当サイトにお問い合わせください。
 使用の際のリンク・報告は不要です。

Q5.デザインを変更したい。 
 デザイン変更が可能な箇所、変更可能内容について【注釈】を添えています。
 readme.txtの説明と合わせて、お好みのデザインに調整してください。
 _smallimage.bmpを変更したい場合は、横80×縦60の長方形のBMP画像を作り、名前を「_smallimage.bmp」にして制作中のゲームファイルと同じフォルダに入れてください。
 変更可能内容以外の変更をしたり、デザイン変更が可能と書かれていない箇所を触ると、バグが発生します。
 もしバグが発生した際には、当サイトの掲示板にてお問い合わせください。

Q6.どんなバグが起こる? 
 セーブ・ロード画面が開かない。
 セーブ・ロード画面を閉じるとシナリオが1つ進んでしまう。
 セーブしたはずなのに、セーブデータの表示が変わらない。
 セーブしたはずの番号と違う番号にセーブされる。
 スクリーンショットをクリックしても、セーブ・ロード出来ない。
 セーブ・ロード画面の背景画像の向こう側のダイナミックレイヤーをクリック出来てしまう。
 Enter・Shiftキーを押してもセーブ・ロード画面が閉じない。
 などなど。

Q7.他の種類に変更したい。 
 一度導入した後に他の種類に変更したい場合は、変更前後の種類の組み合わせによって変更方法が違います。
 当サイトの掲示板にてお問い合わせください。

Q8.デザイン変更以上に改造したい。 
 お客様による改造は、バグが発生する可能性があります。
 ご希望の改造内容が可能か、当サイトの掲示板にてお問い合わせください。

Q9.改造して、サンプルとして配布したい。 
 要相談です。
 当サイトの掲示板にてお問い合わせください。

Q10.各コマンドの意味を知りたい。 
 【セーブコントロールコマンド】と隠しコマンドについては、コミメカ3研究中間報告書を参照してください。
 「sl!」の役割などについてはこちら。上級者向けです。


・履歴

08/01/24開始。_smallimage.bmpの注意。
01/25_smallimage.bmpの注意に一つ追記。〔セーブコントロール〕実行状態をセーブファイルに記録する∞セーブファイルから実行状態を復元する£ヌ加。
01/29サンプルver0.1
01/300.1をA0.1に。B〜F0.1を公開。
02/29セーブ、ロードに修正+追加。
登録キーワード「System.MusicVolume」「System.UseMusic」追加。
07/01注意二文追加。
09/10/06A〜F ver0.2公開。音量再現バグが解消。
登録キーワード「System.SoundVolume」「System.UseSound」、数値変数「_musicvolume」「_soundvolume」追加。
10/26隠しコマンドの説明をコミメカ3研究中間報告書に移動。
11/10/18A・C・Eに注釈追加。B・D・F0.3を公開。バグ修正。ページにQ&A追加。



 戻る





Q10の続き

Q10-1.「return」をサブルーチンコールするダイナミックレイヤーの意味は?
 セーブ・ロード画面を表示中、コミックメーカー3に元々ついているメニューバーなどのダイナミックレイヤーをクリックさせない役割があります。
 ダイナミックレイヤーは、後から作った物ほど上(ウィンドウ表面側)に重ねられます。
 不透過部分のみ有効=Eすべての範囲を有効≠ノした場合、上にある方のダイナミックレイヤーの動作が優先されます。
 例えば、描画スタイル:表示しない、クリッカブル動作の指定:すべての範囲を有効≠フダイナミックレイヤーを3つ作ります。
 1つ目は、X座標100・Y座標100・横幅50・縦幅50、移動先「sl1」。
 2つ目は、X座標0・Y座標0・横幅640・縦幅480、サブルーチンコール先「return」。
 2つ目のダイナミックレイヤーが、1つ目のダイナミックレイヤーの上に重ねられます。
 2つ目のダイナミックレイヤーはウィンドウいっぱいに表示されているので、ウィンドウ内のどこをクリックしても、必ず「return」をサブルーチンコールします。
 更にもう1つ、3つ目を作ります。X座標100・Y座標200・横幅50・縦幅50、移動先「sl2」。
 すると、X座標100〜150、Y座標200〜250の範囲だけは3つ目のダイナミックレイヤーが更に上に重ねられ、この範囲だけは、クリックした時に「sl2」に移動します。

Q10-2.「sl!」の意味は?
 コミメカ3研究中間報告書隠しコマンド「System.MusicVolume」「System.SoundVolume」「%_musicvolume%」「%_soundvolume_%」
 「close」と合わせて、ロード時に、ロード直前のBGM・効果音の音量を継続させる役割があります。

Q10-3.「sl-」の意味は?
 セーブ画面を開く時は「save」で%hina%=0、ロード画面を開く時は「load」で%hina%=1にします。
 その後、「sl」をセーブ・ロード画面の両方で共通して使用します。
 「sl」では、セーブデータが有る場合、$_system:date$にはセーブ日時が入ります。
 セーブデータが無い場合、$_system:date$は空白になります。
 セーブ画面では、セーブデータの有無に関わらずスクリーンショットは全てクリック出来るようにしたい。
 ロード画面では、セーブデータがある場合だけスクリーンショットをクリック出来るようにしたい。
 ロード画面を開いている時は、セーブデータが有る、つまり$_system:date$≠(空白)の時だけ、クリック出来るようにします。
 セーブ画面を開いている時、つまり%hina%=0の時は、$_system:date$の後ろに半角スペースを足すことで、$_system:date$≠(空白)にして、セーブデータが有る時も無い時も、クリック出来るようにします。
 この、セーブ画面を開く時に$_system:date$に半角スペースを足すのが、「sl-」の役割です。

Q10-4.Enter・Shiftキーを押すとセーブ・ロード画面が閉じる?
 「sl」の一番下は、【マウスクリックされるまで待つ】・移動「close」です。
 【マウスクリックされるまで待つ】は、画面内のどこかをクリックする、またはEnter・Shiftキーを押すまで待ちます。
 クリック、またはEnter・Shiftキーを押すと、待機が解除され「close」に移動。
 「close」の最後でセーブ・ロード画面に使用しているダイナミックレイヤーを消去し、サブルーチンから復帰します。

Q10-5.セーブ・ロード画面を開いたり閉じたりしても、プレイが勝手に進まない?
 「セーブですよ。」「ロードですよ。」ダイナミックレイヤーは、実行モードを保持する(サブルーチンコール時のみ有効)≠ノチェックしています。
 この項目にチェックをしたダイナミックレイヤーからサブルーチンコールをすると、サブルーチンコールから復帰した時に、直前までの状態が持続されます。

Q10-6.セーブ・ロード画面のデザイン変更にテキストレイヤー・ユーザーレイヤーは使ってはいけない?
 セーブ時、スクリーンショットはユーザーレイヤーは保存しますが、テキストレイヤーとダイナミックレイヤーは保存しません。
 セーブする瞬間にセーブ画面の背景がユーザーレイヤーで表示されていると、スクリーンショットに、セーブ画面の背景が映り込んでしまいます。
 セーブ画面の背景画像を非表示にしてからセーブすることも可能ですが、B系列はセーブ画面を閉じるまでセーブ画面の背景画像を表示し続ける為に出来ません。
 A系列はB系列に揃えています。

Q10-7.コミックメーカー3に元々ついているメニューバーのロードでは、セーブされていないセーブデータもクリック出来る。独自セーブシステムサンプルのロードでは出来ない。何故?
 私の好みです♪

Q10-8.何故セーブデータ9個?
 コミックメーカー3に元々ついているメニューバーと併用する時用です。
 セーブデータ数を増やしたい場合はお問い合わせください。

Q10-9.何故IDが999と998?
 セーブ・ロード画面用のダイナミックレイヤーを消去する際、プレイ中に使用する他のダイナミックレイヤーも消去してしまわないように、制作者に区別がつきやすい数字にしています。

Q10-10.A・C・EはID999しか使わないのに、B・D・FはID998も使う?
 「セーブ画面を閉じるまで何度もセーブ出来る」。セーブすると、古いセーブデータの表示を消去し、新しいセーブデータを表示します。セーブ画面の背景画像と装飾は表示したままにしたいので、背景画像と装飾はセーブデータの各情報を表示するID999とは別のIDを使用しています。

Q10-11.B・D・Fでセーブ時に、別のセーブデータの情報も全部一度消去している。セーブするデータだけでいいんじゃないか?
 ロード時に、セーブ時に表示されている全てのダイナミックレイヤーも再現されます。セーブデータの情報のダイナミックレイヤーを全て再現し終えてからロード画面を閉じる、となってしまいます。これを防ぐ為です。

Q10-12.$sname$、$lname$の2つを使っている。どちらか1つでいいんじゃないか?
 制作者側がつけるセーブ名は、制作者が変わるまで同じ内容を持続させたい。文字列変数を2つ使うことで、制作者側つけるセーブ名と、プレイヤーがつけるセーブ名を区別しています。

Q10-13.どんな流れで動いている?
 一番複雑なFでご説明します。
(以下、などは、コマンドのアイコンの色を参考にしています)

〜セーブ画面を開き、セーブし、セーブ画面を閉じる〜
スタートページセーブファイル「回」から読み込み、「%hina%」に代入。初めてプレイする場合は、登録キーワードには数値が保存されていないので、%hina%は0になる。
もし、%hina%=0ならば、初めてプレイするならば、
 セーブファイルの「回」に「1」を書き込むプレイ2回目以降はこの処理はしなくなります。
 %_musicvolume%←100%_musicvolume%はBGMの音量を表す隠しコマンドの数値変数です。通常は編集出来ません。初期値は0ですが、実際に鳴る音量は100。セーブ時用に、実際に鳴る音量と同じ値にしておきます。
 %_soundvolume%←100%_soundvolume%は効果音の音量を表す隠しコマンド。↑と同様。
ここまで。
「ダイナミックレイヤー」に移動する
ダイナミックレイヤーダイナミックレイヤーの作成:コール先は「save」実行モードを保持する(サブルーチンコール時のみ有効
ダイナミックレイヤーの作成:コール先は「load」実行モードを保持する(サブルーチン時のみ有効)
「$sname$」←「セーブですよ。制作者側がつけたいセーブ名を入力します。
○マウスクリックされるまで待つ
(ここで、「セーブですよ。」ダイナミックレイヤーをクリック)
saveダイナミックレイヤーの作成:AttrID=998:コール先は「return」セーブ・ロード画面を表示中、コミックメーカー3に元々ついているメニューバーなどのダイナミックレイヤーをクリックさせない。→Q10-1
ダイナミックレイヤーの作成:AttrID=998:black.pngセーブ画面の背景を作成。
ダイナミックレイヤーの作成:AttrID=998:<+2>SAVEセーブ画面の装飾を作成。
%hina%←0セーブ画面を開いている、という印。
「sl」に移動する
slセーブファイル「c_save01.svf」を開くセーブデータ01の各情報を読み込む為、「c_save01.svf」を開きます。「.svf」はコミックメーカー3のセーブデータのファイル形式です。
ダイナミックレイヤーの作成:AttrID=999:_smallimage.bmpスクリーンショットを表示します。「_smallimage.bmp」は隠しコマンドです。セーブデータが無い場合は、黒い四角の画像で表示されます。セーブデータが有る場合は、スクリーンショットを縮小した画像が表示されます。黒い四角の画像は変更可能。→Q5
セーブファイルの「Supplement.SaveDate」から読み込み、「$_system:date$」に代入する「Supplement.SaveDate」「$_system:date$」は隠しコマンドです。セーブ日時を読み込みます。セーブデータが無い場合は、空白になります。
セーブファイルの「sname」から読み込み、「$lname$」に代入するセーブ名を読み込みます。
セーブファイルを閉じるセーブデータ01の各情報を読み込み終えた為、「c_save01.svf」を閉じます。
サブルーチン「sl-」を呼び出す
sl-もし、%hina%=0ならば、「save」で%hina%=0にしてあるので、実行します。
 「$_system:date$」←「$_system:date$Q10-3
サブルーチンから復帰する
もし、$_system:date$≠ならば、セーブ画面なので、全てのセーブデータに対して、「sl-」で$_system:date$≠(空白)になっている。
 ダイナミックレイヤーの作成:AttrID=999:コール先は「sl1」スクリーンショットの上に、透明なダイナミックレイヤーを作ります。
ここまで。
ダイナミックレイヤーの作成:AttrID=999:セーブデータ番号、セーブ日時、セーブ名を表示。
(セーブデータ02〜09も同様)
○マウスクリックされるまで待つ
(ここで、セーブデータ01のスクリーンショット上にある透明なダイナミックレイヤーをクリック)
sl1もし、%hina%=0ならば、「save」で%hina%=0にしてあるので、実行します。
サブルーチン「name」を呼び出すプレイヤーがセーブ名を決めます。
name「$lname$」←「$sname$制作者側がつけたセーブ名が$sname$に入っているので、$lname$に入れます。
文字列の入力:「$lname$」に代入するプレイヤーにセーブ名の入力を求めます。入力欄には最初、制作者側がつけたセーブ名が表示されます。
もし、$lname$=ならば、プレイヤーが空欄でOKを押したならば、
 「$lname$」←「$sname$制作者側がつけたセーブ名にします。
ここまで。入力欄に何か入っている状態でOKを押した場合、その内容が$lname$に入り、セーブ名になります。キャンセルを押した場合、$sname$が入った状態のままセーブ名になります。
ダイナミックレイヤーの消去:AttrID=999:セーブする前に、「sl」でのセーブデータの各情報を消去。
サブルーチンから復帰する
セーブファイル「c_save01.svf」に保存する全体をセーブデータ01の「c_save01.svf」にセーブします。
セーブファイル「c_save01.svf」に追記する追記します。
セーブファイルの「sname」に「$lname$」を書き込むセーブ名の$lname$を、「c_save01.svf」内の「sname」に書き込みます。
セーブファイルを閉じる全体とセーブ名のセーブを終えたので、「c_save01.svf」を閉じます。
%hina%←1セーブ直後、という印。
サブルーチンから復帰する
ここまで。
「close」に移動する
closeもし、%hina%=1ならば、「sl1」で%hina%←1にしたので、実行します。
 セーブファイルの「hina」から読み込み、「%hina%」に代入するセーブ画面から来たならば、%hina%←0。ロード画面から来たならば、%hina%←1。
 もし%hina%=0ならば、セーブ画面から来て、セーブした直後。
  「sl」に移動する「セーブ画面を閉じるまで何度もセーブ可能」の為、セーブ画面を閉じずに再び「sl」へ。
 ここまで。
sl(略)再び「sl」でセーブデータ01〜09の各情報を読み込みます。
(ここで、スクリーンショット以外をクリックする。または、Enter・Shiftキーを押す)
「close」に移動する
closeもし、「%hina%」=1ならば、前回の「close」で%hina%←0にしたので、実行しません。
そうでなければ、
 セーブファイルの「hina」から読み込み、「%hina%」に代入するセーブ画面から来たならば、%hina%←0。ロード画面から来たならば、%hina%←1。
  もし、%hina%=1ならば、%hina%=0なので、実行しません。
  ここまで。
 ここまで。
ここまで。
セーブファイルの「hina」に0を書き込む
ダイナミックレイヤーの消去AttrID=999:「sl」でのセーブデータの各情報を消去。
ダイナミックレイヤーの消去AttrID=998:セーブ画面の背景、装飾、画面全体の透明なダイナミックレイヤーを消去。
サブルーチンから復帰する
○マウスクリックされるまで待つ


〜ロード画面を開き、ロードし、ロード画面を閉じる〜
ダイナミックレイヤー
(「ロードですよ。」クリック)
loadダイナミックレイヤーの作成:AttrID=998:コール先は「return」セーブ・ロード画面を表示中、コミックメーカー3に元々ついているメニューバーなどのダイナミックレイヤーをクリックさせない。
ダイナミックレイヤーの作成:AttrID=998:black.pngロード画面の背景を作成。
ダイナミックレイヤーの作成:AttrID=998:<+2>LOADロード画面の装飾を作成。
%hina%←1ロード画面を開いている、という印。
セーブファイルの「hina」に「1」を書き込むロード画面を開いている、という印。
「sl」に移動する
sl
(ここで、セーブデータ01のスクリーンショットの上の透明なダイナミックレイヤーをクリック)
sl1もし、%hina%=0ならば、「load」で%hina%←1にしたので、実行しません。
ここまで。
サブルーチン「hina」「sl!」を呼び出す
sl!セーブファイルの「System.MusicVolume」に「%_musicvolume%」を書き込む「System.MusicVolume」「%_musicvolume%」は隠しコマンドです。ロード直前のBGMの音量を保存しておきます。→Q10-2
セーブファイルの「System.SoundVolume」に「%_soundvolume%」を書き込む「System.SoundVolume」「%_soundvolume%」は隠しコマンドです。ロード直前の効果音の音量を保存しておきます。→Q10-2
サブルーチンから復帰する
セーブファイル「c_save01.svf」から読み込むセーブデータ01は「sl1」の上から3番目でセーブした時の、1つ前のサブルーチンコール先までの情報です。つまり、「sl1」をサブルーチンコールした時点、「sl」の下から2番目の【マウスクリックされるまで待つ】での待機場面が再現され、「sl」の下から2番目の直後に飛びます。
ダイナミックレイヤーsl○マウスクリックされるまで待つが、解除されて。
「close」に移動する
closeもし、%hina%=1ならば、「save」または「close」の上から2番目で%hina%←0にしたので、実行しません。
そうでなければ、こちらを実行します。
セーブファイルの「hina」から読み込み、「%hina%」に代入するロード画面から来たので、「hina」には1が入っている。%hina%←1。
 もし、%hina%=1ならば、実行します。
  セーブファイルの「System.MusicVolume」から読み込み、「%_musicvolume%」に代入する「sl!」で保存しておいた、ロード直前のBGMの音量を読み込みます。→Q10-2
  もし、%_musicvolume%=0ならば、
   BGM演奏:無効隠しコマンドです。
  そうでなければ、
   BGM演奏:有効隠しコマンドです。
  ここまで。
  もし、%_musicvolume%=60ならば、
   BGM音量:60隠しコマンドです。
  ここまで。
  もし、%_musicvolume%=80ならば、
   BGM音量:80隠しコマンドです。
  ここまで。
  もし、%_musicvolume%=90ならば、
   BGM音量:90隠しコマンドです。
  ここまで。
  もし、%_musicvolume%=100ならば、
   BGM音量:100隠しコマンドです。
  ここまで。
  セーブファイルの「System.SoundVolume」から読み込み、「%_soundvolume%」に代入する「sl!」で保存しておいた、ロード直前の効果音の音量を読み込みます。→Q10-2
  もし、%_soundvolume%=0ならば、
   効果音再生:無効隠しコマンドです。
  そうでなければ、
   効果音再生:有効隠しコマンドです。
  ここまで。
  もし、%_soundvolume%=60ならば、
   効果音音量:60隠しコマンドです。
  ここまで。
  もし、%_soundvolume%=80ならば、
   効果音音量:80隠しコマンドです。
  ここまで。
  もし、%_soundvolume%=90ならば、
   効果音音量:90隠しコマンドです。
  ここまで。
  もし、%_soundvolume%=100ならば、
   効果音音量:100隠しコマンドです。
  ここまで。
 ここまで。
ここまで。
セーブファイルの「hina」に「0」を書き込むロードを終えたので、「hina」に0を入れておきます。
ダイナミックレイヤーの消去AttrID=999:「sl」でのセーブデータの各情報を消去。
ダイナミックレイヤーの消去AttrID=998:ロード時、再現されるのはセーブ画面なので、セーブ画面の背景と装飾を消去。
サブルーチンから復帰する
○マウスクリックされるまで待つ


〜ロード画面を開き、ロードせず、ロード画面を閉じる〜
ダイナミックレイヤーload%hina%←1、「hina」に%hina%を書き込む。
sl
(ここで、スクリーンショット以外をクリックする。または、Enter・Shiftキーを押す)
closeもし、「%hina%」=1ならば、「load」で%hina%←1にしたので、実行します。
 セーブファイルの「hina」から読み込み、「%hina%」に代入する「load」で「hina」に1を入れたので、%hina%←1。
 もし、%hina%=0ならば、%hina%=1なので、実行しません。
 ここまで。
そうでなければ、実行しません。
ここまで。
セーブファイルの「hina」に「0」を書き込むロード画面を閉じるので、「hina」に0を入れます。
ダイナミックレイヤーの消去AttrID=999:「sl」でのセーブデータの各情報を消去。
ダイナミックレイヤーの消去AttrID=998:ロード画面の背景と装飾を消去。
サブルーチンから復帰する
○マウスクリックされるまで待つ



 戻る