EC Cloth Card Pager (衣装カード分割読み込みプラグイン)
『エモーションクリエイターズ (Emotion Creators)』の衣装(コーディネート)カード一覧ウィンドウを**ページ分割+遅延読み込み(ページネーション)**化し、カード大量所持時の長時間のフリーズ・硬直を劇的に解消する BepInEx プラグインです。
💡 概要・開発の背景
公式仕様では、Hシーンやエディット画面で衣装カードウィンドウを開いた際、UserData/coordinate/ 内にあるすべての PNG カードを一括でデコードし、全行の UI を同時に生成します。
そのため、カードが数十〜数百枚以上ある環境では、ウィンドウを開くたびに数秒〜数十秒の激しいフリーズ(プチフリ)が発生していました。
本プラグインは以下の仕組みでこの問題を解消します:
カードヘッダーのみを高速スキャンし、「現在表示中のページ(例: 16枚)」のみ UI とサムネイルを生成。
非表示ページのサムネイルキャッシュは即時解放し、メモリ消費を抑制。
カードごとのサムネイル読み込みをスロットル制御(同時実行数制限)し、肥大化したカードによるディスク・CPU 負荷の急増を防止。
✨ 主な機能
カード一覧のページ分割表示(1ページあたりの件数は自由に変更可能)
ゲーム公式準拠のページ送り UI(公式ボタンから見た目・フォント・エフェクトを自動クローン)
キーボードショートカット対応(PageUp / PageDown などで快適にページ移動)
サムネイル同時読み込み制限(巨大な衣装カードによる瞬間的な過負荷を防止)
超大容量カードのサムネ自動スキップ機能(設定値以上の巨大カードはサムネを省いて軽快に動作)
柔軟な UI カスタマイズ(位置、サイズ、ボタン間隔のリアルタイム微調整対応)
🛠️ 動作環境・導入方法
必要環境
『エモーションクリエイターズ』本体
BepInEx 5.x(64bit)
インストール方法
ビルドされた ECClothCardPager.dll をダウンロードします。
ゲームのインストールフォルダ内にある BepInEx/plugins/ フォルダへ配置してください。
TextEmotionCreators/ └── BepInEx/ └── plugins/ └── ECClothCardPager.dllゲームを起動すると自動的に適用されます。
🎮 使い方
衣装カードウィンドウを開くと、画面下部(服・アクセサリ等のチェック欄横)または設定した位置にページ送りバーが表示されます。
ページ送りバーの構成
[ |<< ] [ < ] [ 1 / 5 ] [ > ] [ >>| ] [ 更新 ]|<<:最初のページへ移動
<:前のページへ移動
1 / 5:現在のページ番号 / 総ページ数(クリック不可の表示枠)
>:次のページへ移動
>>|:最後のページへ移動
更新:フォルダ内のカードを再スキャンして一覧を更新
ショートカットキー(デフォルト)
PageUp:前のページ
PageDown:次のページ
※衣装カードウィンドウが表示されている間のみ有効です。
⚙️ 設定項目(Config)
ゲーム内プラグイン設定(BepInEx Configuration Manager 等)または BepInEx/config/com.yourname.ec.clothcard.pager.cfg から各設定を変更できます。
[General] 基本設定
| 項目名 | デフォルト | 説明 |
| Enabled | true | プラグインの有効/無効。false にすると公式の一括全量読み込みに戻ります。 |
| Scope | All | 適用範囲。All(全シーン)、PlayOnly(Hシーン等プレイ時のみ)、EditOnly(エディット画面のみ)。 |
| CardsPerPage | 16 | 1ページに表示するカード枚数。数値を小さくするほど開閉やページ送りが軽くなります。 |
| MaxConcurrentThumbs | 4 | サムネイルの同時読み込み上限数。0 で無制限(公式動作)。数十〜数百MBの巨大カードが複数ある場合、ディスク負荷を大幅に軽減します。 |
| SkipThumbOverMB | 0 | 指定容量(MB)を超える巨大カードのサムネイル読み込みをスキップ(黒枠表示)します。0 で無効(常に読み込み)。重いカードが混ざっている場合、64 や 128 にすると動作が劇的によくなります。 |
[UI] ページ送りバーの配置・外観
| 項目名 | デフォルト | 説明 |
| ShowPagerButtons | true | 画面上にページ送りバーを表示するかどうか。 |
| PagerAnchor | LoadRow | 配置の基準位置。<br>・LoadRow: ウィンドウ下部「服/アクセサリ」や「読込」ボタン付近<br>・SortRow: リスト上部のソートボタン付近<br>・WindowBottom: ウィンドウ底面中央 |
| PagerTemplate | Auto | ボタンの外観コピー元。<br>Auto(自動判別)、SortRow(ソートボタン)、LoadRow(読込ボタン)、CloseButton(閉じるボタン) |
| PagerScale | 0.7 | ボタンの大きさ(倍率)。1.0 で元ボタンと同等サイズ、0.7 で少し小さめ。 |
| PagerGap | 0.5 | ボタン同士の横方向の間隔(px)。 |
| PagerOffsetX | 0.0 | 水平方向の位置オフセット(正数で右へ移動、px単位)。 |
| PagerOffsetY | 0.0 | 垂直方向の位置オフセット(正数で上へ移動、px単位)。 |
| PagerDirectionX | 1 | 基準ボタンのどちら側に配置するか(1: 右側、-1: 左側)。※スペースがない場合は自動反転します。 |
[Hotkey] ショートカットキー設定
| 項目名 | デフォルト | 説明 |
| Enabled | true | ショートカットキーによるページ送りを有効にするか。 |
| PrevPage | PageUp | 前のページへ進むキー。 |
| NextPage | PageDown | 次のページへ進むキー。 |
[Debug] デバッグ・調査用
| 項目名 | デフォルト | 説明 |
| DumpWindowLayout | false | true にすると、初回生成時に衣装ウィンドウの UI 階層と座標情報をログに出力します(ボタン位置を微調整する際の確認用)。 |
| VerboseLog | false | ソートやページングの詳細ログを出力します。不具合調査用。 |
❓ よくある質問 (FAQ)
Q. ページ送りボタンが他のボタンと重なって押しにくいです。
A. ゲーム画面を開いたまま BepInEx Configuration Manager(F1 または F5 キー)から、UI セクションの PagerOffsetX や PagerOffsetY、PagerScale をスライダーで微調整してください。リアルタイムにボタン位置が更新されます。
Q. 「更新」を押しても新しく追加したカードが出てきません。
A. ページ送りバーの [更新] ボタンを押すと再スキャンが実行されます。それでも表示されない場合は、カードが正しく UserData/coordinate/ フォルダ配下に置かれているか確認してください。
Q. 他の衣装・カード拡張プラグインと競合しますか?
A. 本プラグインは LoadCoordinateFileSystem のリスト初期化・ソート・カテゴリ処理のみをフック(Prefix)しています。カードのデータ自体を破壊・変更することはないため、基本的なプラグインとは安全に併用可能です。
