立ち絵の位置調整画面
lim dev の開発サーバーの中にある、cast.json の立ち絵の枠を画面で直すページ。
立ち絵プラグイン Tyrano Tatie(tatie)の TyranoBuilder 用の調整画面と同じ操作、同じ計算で動く。
開発サーバーだけのもので、lim build の書き出しには入らない。
lim dev [プロジェクト]
# プレイヤー: http://localhost:5180/
# 立ち絵の位置調整: http://localhost:5180/__liminalia/cast
プレイヤーの右上(位置表示の下)の「立ち絵の位置調整」から開くと、そのとき表示している最初の立ち絵を選んだ状態で開く。
URL の ?who=キャスト&appearance=立ち絵セット&variant=差分&position=位置&bg=背景 でも選べる。
画面
- 舞台は作品の画面サイズ(
liminalia.jsonのscreen)の領域を縮小して出す。縮小率は上の帯に出し、座標は常に作品の座標 (画面の外にはみ出した部分は暗くして見せ、取っ手もつかめる) - 背景: 作品の背景画像(
assets/bgimage/)を一枚選んで敷ける(ブラウザに覚える) - 編集対象: キャラ → 立ち絵セット → 差分 → 位置。位置は差分の枠にある名前(left / center / right は必ずある)で、+で足せる
- 枠のない差分(画像の実寸で画面下の中央に出るもの。TyranoScript の
[chara_new]由来)は、動かしたときに今の見え方と同じ枠を作る
操作
| 操作 | 内容 |
|---|---|
| ドラッグ | 今の位置の left / top を動かす |
| 四隅、四辺の取っ手 | 大きさを変える(反対側は動かさない)。「縦横比を固定」が既定 |
| ホイール | 中心を保って拡大縮小。固定を外すと横だけ、Shift を押すと縦だけ |
| 矢印キー | 1px(Shift で 10px)動かす |
| 数値入力 | left / top / width / height。固定していれば幅と高さは連動 |
| 透過率 | 編集中の立ち絵の不透明度(表示だけ) |
| 全位置を表示 | 同じ差分のほかの位置の枠を薄く重ねる |
| 比較対象 | キャラ、セット、位置(「表示位置と同じ」か名前)、差分(一つか「全差分」)を半透明で重ねる。色フィルター(なし、赤、青、緑、マゼンタ、シアン、黄、モノクロ)と透過率 |
| サイズ/Y を全差分へ同期 | 今の差分の大きさの倍率と Y 位置を、同じ立ち絵セットの全差分へ写す(確認あり) |
| center 保存時にサイズ/Y をほかの位置へ同期 | center を選んで保存するとき、その差分のほかの位置の Y をそろえ、X は各位置の中心を保つ |
| 差分の+ | 画像をドロップ(またはファイルを選ぶ)→ 保存先、保存名、差分キーを決めて assets/fgimage/ 以下に保存し、差分を足す |
| 立ち絵セットの+ / - | 立ち絵セットを足す、消す(最後の一つは消せない。画像のファイルは消さない) |
| キャラの+ | キャラを足す(話者に無い名前でもよい) |
| リセット | 今の差分の枠を、開いた時点/最後に保存した時点へ戻す |
| 元に戻す、やり直す | Ctrl / ⌘ + Z、Ctrl / ⌘ + Shift + Z(100 手まで) |
| 保存 | Ctrl / ⌘ + S |
未保存の変更があるあいだは上の帯に出し、ページを離れるときに確かめる。
計算(tatie と同じ)
- 全差分へ同期: 倍率は「今の差分の今の大きさ ÷ 基準の大きさ」(基準は開いた時点/最後に保存した時点の枠、 あとから足した差分は足したときの枠)。各差分の基準の大きさにこの倍率を掛け、どの位置も中心の X を保って top を今の位置の top にそろえる。今の差分の今の位置だけは今の left のまま。 比較表示で同じ立ち絵セットの差分を一つ重ねているときは、その差分は書き換えない(「全差分」の比較では除外しない)。 枠のない差分も書き換えない
- center 保存時の同期: 今の差分のほかの位置の top を center の top にそろえ、left は基準の枠から中心の X を保つ
- 差分を足すときの初めの枠: 基準の立ち絵(上書きならその差分、足すなら同じ立ち絵セットの normal → default → 最初の差分)と 新しい画像の、透明でない部分の外接矩形を比べる。倍率は「基準の体の高さ ÷ 新しい体の高さ」× 0.75 + 「幅の比」× 0.25。各位置で、外接矩形の中心 X と下端を基準に合わせる。基準が無いときは画面の高さに収め、 left / center / right を画面の幅の 1/4、1/2、3/4 に置く
保存
保存は開発サーバーが行う(POST /__liminalia/api/cast)。
- 書く前に
castProblems(@liminalia/lang)で検査し、誤りがあれば書かない cast.jsonのcast(制作画面のキャラクターのタブがspeakersも送ったときはspeakersも)を置き換え、ほかの項目はそのまま残す。キャストの中の、 この画面が扱わない項目(立ち絵セットのlabel、差分のcacheKey、lip、blink、キャストのcolorなど)も保つ- 前の版をプロジェクトの
.liminalia/backups/cast-<日時>.jsonに写す(最新 20 件まで残す)。 ひな形の.gitignoreは.liminalia/を除く - 一時ファイルに書いてから rename する
- 画面を開いた後に
cast.jsonがほかで書き換えられていたら(lim importなど)、上書きするかを確かめる - 差分を足すときの画像は、その場で
assets/fgimage/以下に書く(同じ名前があれば確かめる)。同じ名前で上書きしたときだけcacheKeyを付け替えて、開いているプレイヤーが古い画像を出さないようにする(書き出しは素材の中身の鍵を自分で付ける)
保存すると、開いているプレイヤーに Vite の WebSocket のカスタムイベント liminalia:cast が届き、プレイヤーは
cast.json を読み直して、今の状態から立ち絵を描き直す(ページは進めない)。
取り込みで作る cast.json
liminalia.json に import.tyrano がある作品の cast.json は lim import が作り直すので、そのままでは次の取り込みで調整が消える。
そこで保存のとき、取り込み元にも書き戻す。
-
取り込み設定(
import.tyrano.profileの"./import")がwriteCastを持てば、それを呼ぶimport type { TyranoImportProfile } from "@liminalia/ks-import"; const profile: TyranoImportProfile = { // 保存したキャストを取り込み元へ書き、書き換えたファイルを返す(画面に出す) writeCast({ source, cast }) { return []; }, }; export default profile; -
持たなければ、取り込み元に Tyrano Tatie の設定(
data/others/plugin/tatie/settings.js)があればそれに書き戻す (writeTatieSettings、@liminalia/ks-import/node)settings.jsは実行せず、右辺のリテラル(文字列、数、真偽、null、配列、オブジェクト)として読み、整形した JSON を同じ形の代入文(window.TYRANO_TATIE_SETTINGS = {…};)にして書く。関数の呼び出しなどリテラルでないものがあれば読めないとしてエラーにする- 書くのは差分の
storage(=image)とframeだけ。無いキャスト、立ち絵セット、差分は足す - 設定の知らない項目、
defaultCharacter、frameReference、label、cacheKeyは保つ - 枠のない差分は tatie では書けないので書かない(画面に知らせる)。消した立ち絵セット、差分は設定からは消さない
- 旧形式(立ち絵セットのない、差分だけ)のキャストは、その一つの立ち絵セットだけなら旧形式のまま書き、
ほかの立ち絵セットを足すときは tatie の保存と同じく
appearancesの形に移す - 前の版はプロジェクトの
.liminalia/backups/tatie-settings-<日時>.jsに写す(最新 20 件まで)
-
どちらも無ければ、画面の上に「次の取り込みで上書きされます」と出す