空想曲線

吉里吉里2/KAG3でのゲーム制作に使える小ネタ置き場。ゲーム用素材も置いてます。

吉里吉里/KAG:使い勝手の良いマクロを作ろう キャラクタ立ち絵編  

2015-06-16
2017-06-16
cm0
tb0

今回は「立ち絵」のマクロを作りますヽ(・∀・ )ノ

立ち絵の差分パターンは大きく分けて3つに分類されます。


 1.固定パターン
 2.一部差し替えパターン
 3.福笑いパターン


1は表情差分の数だけ立ち絵画像を準備しておくパターンです。

2は表情差分で見た目が変わる部分だけ切り抜いたものを
元の立ち絵画像の上に pimage タグで貼りつけて使用します。

3は眉・目・口といった顔のパーツを別々に準備しておいて
モンタージュ写真のように組み合わせて使うパターンです。
のっぺらぼうの画像に顔パーツを pimage で貼りつけて使用します。

今回はもっとも扱いやすいパターン1を前提にして書いていきます。
まずは、あまりよろしくないマクロの例から。


[ macro name="キャラ" ]
[ image storage=%ch_sto layer=%lay top=%y left=%x visible=true page=back ]
[ endmacro ]


このマクロを前回の背景遷移マクロと組み合わせてみます。


[ 背景読込 画像=bg_001 ]
[ キャラ ch_sto=ch_001 lay=0 x=127 y=32 ]
[ クロスフェード ]


(>'A`)><ダメになりそうな予感!

キャラクタの人数が大幅に増えたら確実に管理できなくなることまちがいなし。
もっと単純に書けるよう修正していきましょう。目標は「小学生でも分かるマクロ」です。



1.差分と立ち位置をマクロにする


画面に立ち絵を表示するときに必要な項目を考えてみましょう。

 1.どの画像(表情差分)を使うか
 2.どの場所に表示させるか


これを基にマクロを修正していきます。


▼キャラAを表示するマクロ(2017/01/17 追加修正)
[ macro name="キャラA" ]

; ▼表情指定
; 何も指定しなければ普通の顔
[ eval exp="mp.ch_sto = 'A_001'" ]

; 笑い顔
[ eval exp="mp.ch_sto = 'A_002'" cond="mp.笑" ]

; 怒り顔
[ eval exp="mp.ch_sto = 'A_003'" cond="mp.怒" ]

; 泣き顔
[ eval exp="mp.ch_sto = 'A_004'" cond="mp.泣" ]

; ▼表示位置とレイヤ指定
; 指定がないときは画面中央、前景レイヤ0
[ eval exp="mp.pos='center', mp.lay=0" ]
※立ち絵の配置を細かく指定したいときは以下のように修正
[ eval exp="mp.top=座標yの値, mp.left=座標xの値, mp.lay=0" ]

; 画面左に表示、前景レイヤ1
[ eval exp="mp.pos='left', mp.lay=1" cond="mp.左" ]
※立ち絵の配置を細かく指定したいときは以下のように修正
[ eval exp="mp.top=座標yの値, mp.left=座標xの値, mp.lay=1" cond="mp.左" ]

; 画面右に表示、前景レイヤ2
[ eval exp="mp.pos='right', mp.lay=2" cond="mp.右" ]
※立ち絵の配置を細かく指定したいときは以下のように修正
[ eval exp="mp.top=座標yの値, mp.left=座標xの値, mp.lay=2" cond="mp.右" ]

; ▼画像を読みこむページ
; ウラに読み込み、何も書かなければオモテに
[ eval exp="mp.page = 'back'" cond="mp.裏" ]

; ▼画像読込み
[ image * storage="&mp.ch_sto" layer="&mp.lay" pos="&mp.pos" visible=true page="&mp.page" ]
※立ち絵の配置を細かく指定したいときは以下のように修正
[ image * storage="&mp.ch_sto" layer="&mp.lay" top="&mp.top" left="&mp.left" visible=true page="&mp.page" ]

[ endmacro ]


上記の例では立ち位置に応じて前景レイヤを割り振っています。

↓実際のスクリプトはこのようになります。


*sample
; キャラAの笑い顔をオモテ画面の左に表示
[ キャラA 笑 左 ]

; キャラAの通常顔をウラ画面の右に読み込んでクロスフェード表示
[ 遷移準備 ]
[ キャラA 右 裏 ]
[ クロスフェード 時間=300 ]

; キャラAの泣き顔を画面中央にグレースケールで表示
[ キャラA 泣 grayscale=true ]

; 背景遷移と組み合わせる
[ 背景読込 画像=bg_001 ]
[ キャラA 笑 左 裏 ]
[ クロスフェード ]


さらにキャラAと同じようにキャラBとキャラCのマクロを作って
背景・キャラA・キャラB・キャラCを《同時に》トランジション。


*sample
[ 背景読込 画像=bg_001 ]
[ キャラA 笑 左 裏 ]
[ キャラB 笑 右 裏 ]
[ キャラC 怒 裏 ]
[ クロスフェード ]


前回、背景読込とトランジションのマクロを分割してあるので
立ち絵表示のマクロを挟むだけのカンタンなお仕事です。


( ゚д゚)< だから前回ぶった斬ったんだよ!


キャラ単体で表示するときは[ stoptrans ]と[ backlay ]を忘れずに。
面倒くさいならマクロを作っておきましょう。


[ macro name="遷移準備" ]
[ stoptrans ]
[ backlay ]
[ endmacro ]



2.自由に立ち絵を消去できるマクロを作る


立ち絵表示のマクロができたので、今度は立ち絵消去のマクロへ。
まずは、あまりよろしくないマクロの例から。


▼キャラAを消去するマクロ
[ macro name="キャラA消去" ]
[ 遷移準備 ]
[ layopt layer=%lay visible=false page=back ]
[ クロスフェード ]
[ endmacro ]


この書きかただと複数のキャラを一度に消去できないので改造していきます。


▼指定した場所に表示されているキャラを消去するマクロ
[ macro name="キャラ消去" ]

; 何も書かなければオモテを指定する
[ eval exp="mp.page = 'back'" cond="mp.裏" ]

; ▼どの場所にいるキャラか
; 中央のキャラを消去したい
[ if exp="mp.中央" ]
[ layopt layer=0 visible=false page="&mp.page" ]
[ endif ]

; 左にいるキャラを消去したい
[ if exp="mp.左" ]
[ layopt layer=1 visible=false page="&mp.page" ]
[ endif ]

; 右にいるキャラを消去したい
[ if exp="mp.右" ]
[ layopt layer=2 visible=false page="&mp.page" ]
[ endif ]

[ endmacro ]


では、これを使ってスクリプトを書きます。


*sample
; 左にいるキャラだけ消去
[ 遷移準備 ]
[ キャラ消去 左 裏 ]
[ クロスフェード ]

; 左と中央にいるキャラ消去しながら背景を bg_002 に変更
[ 背景読込 画像=bg_002]
[ キャラ消去 左 中央 裏 ]
[ クロスフェード ]

; すべてのキャラを消去
[ 遷移準備 ]
[ キャラ消去 左 中央 右 裏 ]
[ クロスフェード 時間=1500 ]


ひとつのマクロにやりたい処理をぎゅうぎゅう詰めにするのではなく
小さなマクロをいくつか作っておいて、それを組み合わせて使うというイメージです。

では、今回はこれにて(´∀`*)ノシ<次回はメッセージレイヤ編の予定です。

関連記事

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://kopacurve.blog33.fc2.com/tb.php/387-cbcf1cb1
この記事にトラックバックする(FC2ブログユーザー)

Author

Recent

Category

Link

Comment

Mailform

Twitter