【セーブ・ロード機能拡張プラグイン】


■できること
セーブ・ロード画面に以下の機能を追加します。
・ページ表示
・セーブデータに任意の変数を表示
・セーブデータ消去
・セーブデータ保護
・セーブデータ上書き時確認表示
・最新のセーブデータに任意の画像を表示
・セーブ日付をゼロ埋め表示
・コメント入力欄を表示
・最後に表示したページを記憶
・セーブ実行後セーブ画面を閉じない
・オート／クイックセーブを複数スロット対応
・オート／クイックセーブをセーブ／ロード画面に表示
・デザインカスタマイズ


■使い方
このテキストが入っているフォルダごと「data/others/plugin」フォルダに置きます。
それからfirst.ksとかに以下のように記述してください。

[plugin name=saveload_ex]
指定可能属性
slot                ：1ページあたりに表示するセーブスロット数を数値で指定（0の場合、全セーブスロットを1ページに表示）
exvar               ：セーブデータに追加で表示したい変数名を指定、半角カンマ区切りで複数指定可能（例："f.chapter,sf.day"）
exvar_join          ：セーブデータに追加で表示したい変数が複数ある場合、セーブ画面に表示時に間に挿入する文字列を指定
fadetime            ：セーブ・ロード完了時に画面をフェードする時間を指定（単位：ミリ秒）
fademask            ：画面フェード時に暗転を挟む場合はtrueを指定
maskcolor           ：画面フェード時暗転画面の色を指定
maskimage           ：画面フェード時暗転画面の画像パスを指定（maskcolorより優先して適用されます）
memory              ：最後に表示したページの記憶状態を指定。0=記憶しない、1=セーブ・ロード画面を個別に記憶、2=セーブ・ロード画面の記憶状態を連動
hold                ：セーブ実行後にセーブ画面を閉じない場合はtrueを指定
sebuf               ：クリックSE等を再生するバッファを指定

dialog_save         ：セーブ実行時確認表示する場合はtrueを指定
dialog_load         ：ロード実行時確認表示する場合はtrueを指定
dialog_overwrite    ：セーブデータ上書き時確認表示する場合はtrueを指定
dialog_delete       ：セーブデータ削除時確認表示する場合はtrueを指定
message_save        ：セーブ実行時の確認メッセージを指定。文中に「{num}」を記述すると、セーブスロット番号に置換されます（例：「スロット{num}にセーブします」→「スロット1にセーブします」）
message_load        ：ロード実行時の確認メッセージを指定。文中に「{num}」を記述すると、セーブスロット番号に置換されます
message_overwrite   ：セーブデータ削除実行時の確認メッセージを指定。文中に「{num}」を記述すると、セーブスロット番号に置換されます
message_delete      ：セーブデータ上書き時の確認メッセージを指定。文中に「{num}」を記述すると、セーブスロット番号に置換されます

saveload            ：プラグイン読み込み時に指定可能な属性をプロパティに持つオブジェクトを指定。長々と属性指定したくない人向け

※以下、デザインカスタマイズ用のパラメータです。
  基本的に長さの単位はpx、文字揃えはleft,center,right、画像はimageフォルダ、SEはsoundフォルダに配置します。
・セーブリスト全体
bg_save                 ：セーブ画面背景画像
bg_load                 ：ロード画面背景画像
area_x                  ：左端位置
area_y                  ：上端位置
save_se                 ：セーブ画面のスロットクリック時のSE
save_enterse            ：セーブ画面のスロットホバー時のSE
load_se                 ：ロード画面のスロットクリック時のSE
load_enterse            ：ロード画面のスロットホバー時のSE
・スクロールバー
scroll_width            ：幅
scroll_thumb_radius     ：つまみ角丸
scroll_thumb_color      ：つまみ色
scroll_base_radius      ：ベースの角丸
scroll_base_color       ：ベース色
・戻るボタン
back_width              ：幅
back_height             ：高さ
back_x                  ：左端位置
back_y                  ：上端位置
back_img                ：ボタン画像
back_se                 ：クリック時のSE
back_enterse            ：ホバー時のSE
・ページ表示
page_img                ：ページ画像、「{page}」部分がページ番号に置き換わります（例：「page/page_{page}.png」の場合、「page/page_1.png」）
page_x                  ：左端位置
page_y                  ：上端位置
page_vertical           ：ページ画像の並び方向を縦向きにする場合はtrueを指定
page_margin             ：ページ画像間の間隔を指定
page_se                 ：クリック時のSE
page_enterse            ：ホバー時のSE
・各セーブスロット　位置指定はスロットごとの左上基点の位置です。
slot_width              ：幅
slot_height             ：高さ
slot_marginx            ：各スロット間の左右間隔
slot_marginy            ：各スロット間の上下間隔
slot_column             ：１行に表示するスロット数
slot_bg                 ：背景画像
slot_vertical           ：セーブスロットが複数列かつ複数行あるとき、並び方向を縦向きにする場合はtrueを指定
  ※trueの場合の並び順
    １３
    ２４
  ※falseの場合の並び順
    １２
    ３４
・セーブデータ番号
num                     ：セーブデータ番号を表示する場合はtrueを指定
num_format              ：セーブデータ番号の表示書式を指定。「{num}」部分が番号に置き換わります（例：「NO.{num}」の場合、「NO.1」）
num_length              ：セーブデータ番号の表示桁数
num_width               ：幅
num_height              ：高さ
num_x                   ：左端位置
num_y                   ：上端位置
num_color               ：文字色
num_align               ：文字揃え
num_size                ：文字サイズ
・サムネイル
thumb_width             ：幅
thumb_height            ：高さ
thumb_x                 ：左端位置
thumb_y                 ：上端位置
thumb_noimage           ：セーブデータがないスロットのサムネイル画像
・セーブ日付
date                    ：日付を表示する場合はtrueを指定
date_width              ：幅
date_height             ：高さ  
date_x                  ：左端位置
date_y                  ：上端位置
date_color              ：文字色
date_align              ：文字揃え
date_size               ：文字サイズ
・テキスト
text                    ：テキストを表示する場合はtrueを指定
text_width              ：幅    
text_height             ：高さ
text_x                  ：左端位置
text_y                  ：上端位置
text_color              ：文字色
text_align              ：文字色
text_size               ：文字サイズ
・追加表示変数
var_width               ：幅
var_height              ：高さ
var_x                   ：左端位置
var_y                   ：上端位置
var_color               ：文字色
var_align               ：文字揃え
var_size                ：文字サイズ
・セーブデータ保護ボタン
lock                    ：セーブデータ保護ボタンを表示する場合はtrueを指定
lock_width              ：幅
lock_height             ：高さ
lock_x                  ：左端位置
lock_y                  ：上端位置
lock_img_lock           ：保護状態のボタン画像
lock_img_unlock         ：保護解除状態のボタン画像
lock_se                 ：クリック時のSE
lock_enterse            ：ホバー時のSE
・セーブデータ削除ボタン
delete                  ：セーブデータ消去ボタンを表示する場合はtrueを指定
delete_width            ：幅
delete_height           ：高さ
delete_x                ：左端位置
delete_y                ：上端位置
delete_img_delete       ：削除可能状態のボタン画像
delete_img_undelete     ：削除不可状態のボタン画像
delete_se               ：クリック時のSE
delete_enterse          ：ホバー時のSE
・最新のセーブデータ表示
new                     ：最新のセーブデータに任意画像を表示する場合はtrueを指定
new_width               ：幅    
new_height              ：高さ
new_x                   ：左端位置
new_y                   ：上端位置
new_img                 ：画像
・コメント入力欄
comment                 ：コメント入力欄を表示する場合はtrueを指定
comment_width           ：幅
comment_height          ：高さ
comment_x               ：左端位置
comment_y               ：上端位置
comment_size            ：文字サイズ
comment_button_img      ：コメント更新ボタン画像
comment_button_width    ：ボタン画像幅
comment_button_height   ：ボタン画像高さ
comment_button_x        ：ボタン画像左端位置
comment_button_y        ：ボタン画像上端位置
comment_placeholder     ：コメント未入力時初期表示する文字列
comment_se              ：更新ボタンクリック時のSE
comment_enterse         ：更新ボタンホバー時のSE

■ボタン画像について
「通常画像ファイル名 + _h.png」がホバー時の画像となります。（例：back.png、back_h.png）
「通常画像ファイル名 + _a.png」がページ表示のページ選択時画像となります。（例：page1.png、page1_h.png、page1_a.png）
※ホバー画像、ページ選択時画像がない場合は通常時画像を表示します


■ホバー対象画像
back_img
page_img
slot_bg
lock_img_lock
lock_img_unlock
delete_img_delete
delete_img_undelete
comment_button_img


■exvar_joinに空白文字を指定する
一旦変数に文字列を格納し、その変数をexvar_joinに指定してください。
例）
[eval exp="tf.join = '　'"]
[plugin name="saveload_ex" slot=5 data="f.chapter,sf.day" exvar_join="&tf.join"]


■saveload属性の使い方
真偽値、数値はダブルクォーテーションで囲わず、そのまま記述してください。
画像指定はimageフォルダがルートとなります。
例）
[iscript]
tf.saveload = {
    "delete": true,
    "lock": true,
    "dialog": true,
    "new": true,
    "comment": false,
    "fadetime": 300,
    "memory": true,
    "bg_save": "save_load/bg_save.png",
    "bg_load": "save_load/bg_load.png",
（略）
}
[endscript]
[plugin name=saveload_ex saveload="&tf.saveload"]


■ブラウザゲームにおけるセーブ機能の注意点
ブラウザゲームの場合、ティラノスクリプトのセーブデータはブラウザ内のストレージ（localstorage）に保存されます。
このストレージは、 ティラノ製ゲーム以外を含むすべてのwebページで容量を共有しています。
そのため、セーブスロットを大量に使用すると、ストレージ容量の上限を超え、正しくセーブできなくなることがあります。
ブラウザゲームとして公開する場合は、セーブスロット数は必要以上に増やしすぎないよう注意してください。
（たぶん20くらいなら余裕だと思います）


■注意事項
このプラグインを使用したことで生じたあらゆる問題について、製作者は責任を負いません。
不具合報告等は歓迎しております。製作者Twitterまでどうぞ。


■製作者
さくた（@skt_tyrano）
https：//skskpnt.app


■更新履歴
2023/06/24  ver.2.2.0公開
・セーブ実行時、ロード実行時に確認ダイアログを出せるように変更
・特定の条件でセーブ/ロード画面以外での確認ダイアログのボタンテキストが「上書きして保存」「保存しない」に変更される不具合を修正

2023/03/25  ver.2.1.7公開
・セーブ上書き、セーブデータ削除の確認画面表示中に右クリックするとゲーム画面に戻る不具合を修正
・コンフィグ画面遷移後にセーブ時、サムネイルが保存されない不具合を修正
・バージョン表記を修正

2023/03/08  ver.2.1.6公開
・連続してセーブできない不具合を修正

2023/03/05  ver.2.1.5公開
・画面遷移時のカクつきを緩和

2023/02/28  ver.2.1.4公開
・セーブ実行後、スクロール位置が最上部に戻らないよう修正

2023/01/08  ver.2.1.3公開
・iPhoneかつ再生SEにoggファイルが指定されている場合、再生するファイルの拡張子をm4aに変更するよう修正
・SE再生に失敗した場合、処理が停止しないよう修正

2022/12/24  ver.2.1.2公開
・SE再生時の音量を再調整
・コメント更新ボタンの位置が反映されない不具合を修正

2022/12/24  ver.2.1.1公開
・SE再生時の音量を調整

2022/12/09  ver.2.1.0公開
・SE再生バッファを指定できるように変更

2022/11/03  ver.2.0.0公開
・v520対応、v514以前との互換性なし
・セーブ日付のゼロ埋めはconfig.tjsで行うように変更
・戻るボタンのホバー画像未指定時、表示が崩れていたのを修正

2022/09/19  ver.1.8.7公開
・特定のティラノスクリプトバージョンでロード時に画面がちらつく不具合を修正

2022/09/04  ver.1.8.6公開
・iPhoneでの画面表示崩れを修正

2022/05/08  ver.1.8.5公開
・戻るボタンのwidth、heightが反映されない不具合を修正
・他、一部パラメータの値が反映されない不具合を修正

2022/04/11  ver.1.8.4公開
・特定条件で「ファイルがありません」エラーが発生する不具合を修正

2022/04/08  ver.1.8.3公開
・スロットホバー時、ホバー画像へ切り替わらない不具合を修正

2022/03/25  ver.1.8.2公開
・数値を指定するパラメータに0を指定できない不具合を修正

2022/02/25  ver.1.8.1公開
・特定条件でセーブスロットがクリックできなくなる不具合を修正

2022/02/19  ver.1.8.0公開
・memoryパラメータの指定形式を変更
・セーブ画面へ遷移時のタイムラグを解消
・セーブスロットの連打対策

2022/02/13  ver.1.7.2公開
・一部パラメータが反映されないバグ修正

2022/02/11  ver.1.7.1公開
・スマホでの一部ボタンの動作不具合を修正
・ホバー画像等が存在しない場合、通常時画像を表示するように修正

2022/01/13  ver.1.7.0公開
・マウスホバー時SE系パラメータを追加

2022/01/11  ver.1.6.3公開
・一部条件で正しくセーブできない不具合を修正

2022/01/09  ver.1.6.2公開
・一部条件でロードができなくなる不具合を修正

2021/11/20  ver.1.6.1公開
・fademaskパラメータの値が正しく反映されない不具合を修正

2021/11/13  ver.1.6公開
・セーブスロット、戻るボタン、ページボタン、セーブデータ保護ボタン、削除ボタン、コメント更新ボタンをクリック時のSEの指定ができるように修正

2021/10/28  ver.1.5.3公開
・hold=true時にセーブ後、画面暗転をしないように修正

2021/10/21  ver.1.5.2公開
・セーブデータがない場合のセーブサムネイルが正しく表示されない不具合を修正

2021/10/16  ver.1.5.1公開
・一部条件でセーブサムネイルが正しく表示されない不具合を修正

2021/10/02  ver.1.5公開
・holdパラメータを追加
・バグ修正

2021/09/30  ver.1.4公開
・他画面との競合を解決
・page_margin、slot_verticalパラメータを追加
・バグ修正

2021/09/21  ver.1.3公開
・サムネイル表示周りのバグを修正

2021/08/25  ver.1.2公開
・menu.htmlと併用した際の表示不具合を修正

2021/08/15  ver1.1公開
・バグ修正

2021/08/15  ver1.0公開
・画面暗転時に画像を指定できるように

2021/08/12  ver0.7α公開
・save引数にfalseを指定しても最新セーブデータ画像が表示される不具合を修正

2021/07/02  ver0.6α公開
・セーブ／ロード画面をフェード表示時、一部条件で設定値が反映されない不具合を修正
・追加変数が表示されない不具合を修正

2021/03/20  ver.0.5α公開
・デザインカスタマイズ系パラメータ追加

2021/03/14  ver.0.1α公開
・仮公開