投稿記事

2020年 10月の記事 (3)

羽田暮(はだくれ) 2020/10/16 05:13

進捗報告1016 / そろそろ立ち絵作業が終わるかも

こんにちは! はだくれです!
だんだん肌寒くなってきましたが、まだTシャツで頑張れると思っている今日このごろです。

少しずつ、でも確かに進んでいる立ち絵作業!
そもそも自分でタスクを増やしたんですが……
でもやっとすべてのラフが出揃いそうなので、あとは勢いでやっつけて、いよいよHシーンの作画に取り掛かることが!
……できたらいいなぁ、と思ってます。。。

てことで今日のおしながきは、

・ウィッチビキニのデザイン決定案
・登場する全衣装公開

以上になります!
なるべく出し惜しみしない方針でいろいろお見せしていきたいので、決まったものはどんどん投げてしまおうかなと。

フォロワー以上限定無料

状況をお知らせします! がんばってるアピール!

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

羽田暮(はだくれ) 2020/10/01 22:17

ツクールMVの『戦闘中の立ち絵表示プラグイン』を改変した話

うす。
進捗とは全く関係ない、技術的なおはなしです。
あと僕はプログラマでもなんでもないので、大学とか情報の授業でちょっと齧ったくらいの人向けの内容だと思います。
あまり難しいことは知らないし、特に考えずこの記事を書いてます。
これを読む人は、そのへんを理解した上で読み進めたということになります。

前回記事で、『戦闘中、装備に応じて、異なる画像を表示する』という機能を実現するためにプラグインを使用した話を書きました。

使用したプラグインそのままでは、やりたかったことができなかったので、プラグインに少し手を加えました。
もし僕と同じことや少し似たことをしたいけど、やり方がわからず困っている人がいたら、どうかこの記事にたどりついてほしいなと思います。

じゃあ何をしたのか書いていきまーす。

やりたかったこと

最初に言ってしまうと
『指定したひとりのアクターが、現在装備している「武器」と「服」を取得し、その組み合わせに合致する画像を戦闘画面に表示する』
というもの。


▲装備している武器が異なっている別の画像

『素体となる裸の画像』に『衣装だけの画像』を重ねるという形ではない。


▲武器は同じだが服が違う

服ごとにポーズを変えたかったため、共通の素体を用意できない。
そうすると更に『衣装の画像を重ねて差分とする』こともできなくなる。

「武器のパターン」かける「服のパターン」の数ぶんだけ、別々の画像を1枚、表示したかったわけだ。

採用したプラグイン

まっつUP氏がつくった「BattlebustPict」というプラグインを選んだ。
https://plugin.fungamemake.com/archives/16435

戦闘中の立ち絵表示プラグインを探したところ、これが候補筆頭だったことと、差分を表示できることを売りとしていたからである。

結果的に、このプラグインでは僕がやりたかったことはできなかったため、プログラムを改変することになる。

このプラグインでできること

このプラグインで出来ることは、
・アクターごとに基本立ち絵を表示する・しないを指定すること
・相手の攻撃で減った残り体力に応じて立ち絵を変化させること
・キャラが戦闘で死亡したとき画像を暗くすること
・画像の拡大率を変えること
・画像を表示する位置を座標指定すること
・装備アイテムごとに表示する画像を指定すること
・アクターの基本画像に、装備の画像を重ねることで、衣装差分をつくること

充実の機能たちである。
おそらくもう少し機能があると思う。
しかし、このプラグインが僕の目的にそぐわないことが分かった時点で、このプラグインで出来ることに興味がなくなったので、そのすべてを把握していない。

気に入らなかった部分

まず、このプラグインの使い方自体の解説がほぼほぼ無く、ツクール初心者が理解するには少々難がある。
というところに僕がキレ散らかした。

そもそもプラグインは、作成者自身がやりたいことのために自作されたものが多いと思うので、たくさんの人に使ってもらうことを前提としたプラグイン製作者でもないかぎり解説を求めるのはお門違いなのだろう。
ぶん投げたマウスが頑丈でよかった。

機能としての気に入らなかった部分。
僕がやりたかったのは、条件に合う1枚の画像を表示することだけだった。
そのため、わざわざ複数枚の画像を重ねて表示する機能は求めていなかった。


プラグインを改変した

いまいちど、プラグインの中でやることを説明する。

・服のチェック
現在装備している防具をたしかめる。
装備なしの場合は0とする。
装備ありの場合、アイテムIDの番号とする。
この番号を2桁の数字に置き換える
(アイテム数が3桁を超える場合は3桁)

・武器のチェック
服をおなじ。

・服と武器を組み合わせたIDをつくる
服の番号である2桁の数字と、武器の番号である2桁の数字をつなげて4桁の数字にする。
例:何も装備していなければ「0000」、0003の武器と0020の服を装備していたら「2003」になる。

・4桁の番号に合わせた立ち絵を用意して、それを表示する
ピクチャフォルダに、ファイル名を4桁の番号にした画像を置いておくと、その画像を表示できる。
画像を用意していない番号を生成してしまうと進行不能エラーになる。

実際のプログラム

もともとのプログラムをすべて理解できているわけではない。
そのためなんとなく雰囲気で、必要なさそうなところを省いている。
もっと多くの部分が必要ないとは思うが、とりあえず

Game_Actor.prototype.StandUpdateBP = function(text) {
    var id = this.baseidBP();
    var x = BPpictX + this.index() * BPindexaddX;
    var name = this.BPnotepict(this.actor(), text);
    this.showstandBP(id, name, x, BPpictY);
};

この部分と、

Game_Party.prototype.TimingUpdateBP = function() {
	this.members().forEach(function(actor) {
    	var text = actor.getnotetag();
    	// actor.StandUpdateBP(text); ←ここ
    	actor.EquipUpdateBP(text);
	});
};

この部分をコメントアウトした。
今回は、「EquipUpdateBP」の部分をいじって使い回させてもらった。

Game_Actor.prototype.EquipUpdateBP = function(text) {
    if(this.actor().note.match(/<BPnoequip>/i)) return;
    var id = this.baseidBP();
    // var equip = this.equips();

    // for (var i = 0; i < BPequipX.length; i++) {
    //     id++;
    //     if(BPequipX[i] <= 0 || !equip[i]) continue;
    //     var x = BPequipX[i] + this.index() * BPindexaddX;
    //     var y = BPequipY[i];
    //     var name = this.BPnotepict(equip[i], text);
    //     this.showstandBP(id, name, x, y);
    // }

    var armorNum = $gameActors._data[2]._equips[3]._itemId;
    var armorStr = ('00' + armorNum).slice(-2);
    var weaponNum = $gameActors._data[2]._equips[0]._itemId;
    var weaponStr = ('00' + weaponNum).slice(-2);
    var pictStr = "BP" + armorStr + weaponStr;

    this.showstandBP(id, pictStr, BPpictX, BPpictY);
};

途中の必要なさそうな部分はなんとなくコメントアウト。

    var armorNum = $gameActors._data[2]._equips[3]._itemId;
    var armorStr = ('00' + armorNum).slice(-2);
    var weaponNum = $gameActors._data[2]._equips[0]._itemId;
    var weaponStr = ('00' + weaponNum).slice(-2);
    var pictStr = "BP" + armorStr + weaponStr;

ここが追記した部分。

$gameActors._data[2]._equips[3]._itemId

この呪文でアイテムのIDが取得できる。

data[2]

この部分でアクター0002を指定している。

equips[3]

これで3番目の装備「服」を指定している。
アクターは1から始まるが、装備の種類は0から始まるので厳密には4番目。

equips[0]

つまりこうすると「武器」が指定できる。

最終的に4桁の番号を生成することを目的とし、上2桁で服を、下2桁で武器をあらわしたい。
上記の呪文でアイテムIDを取得しても、例えばアイテム「0005 はがねの剣」の場合「5」という1桁の数値になってしまう。

そのため、

('00' + armorNum).slice(-2);

とすることで、
取得した数値の前に「0」をふたつ付け、その数列の下2桁だけを切り出せる。
アイテムID「0005」ならば、「5」が取得され、「5」の前に「00」を加えて「005」として、その下2桁を切り出すので「05」となる。
服と武器でそれぞれこの処理を行い、その2桁の数字ふたつをつなげて4桁の数列とした。

もしもアイテムIDが100より先の場所にある場合、
例えば「0251 マジカルステッキ」を作ってしまうと、「00251」になり、「51」だけを切り出してしまうので、3桁まである場合は、

var weaponStr = ('000' + weaponNum).slice(-3);

とするのがいいだろう。

最後に、画像を管理するうえでのわかりやすさを重視して、画像ファイルの命名規則を「BPxxxx(xは数字)」とするため、

var pictStr = "BP" + armorStr + weaponStr;

頭にBPをつける処理をしている。

たぶんこれでできるはず。
興味があったら試してみてください。

改変したプラグインの使い方

ピクチャフォルダに、『服の番号と武器の番号を組み合わせた4桁の数字』に対応した画像を作成し、ファイル名を「BPxxxx」にすれば、目的の画像を戦闘中に表示できるはず。
僕はできました。

僕みたいに、多少めんどくさくても、『全パターンぶんの画像を作成する』という単純バカさがあるならこの方法がわかりやすいはず。
僕の場合は武器が5種類と服が6種類、さらにそれぞれ装備しないパターンをひとつずつ含めて6種類と7種類、合計で6かける7の42パターンの画像を用意することになる。
あまり褒められた方法ではないはずなので、よりよい方法が見つかれば次回以降の参考にしたい。



以上。
この情報を必要とする人の目に留まれば幸いです。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

羽田暮(はだくれ) 2020/10/01 22:16

進捗報告1001 / 戦闘中立ち絵表示システム!

こんばんは! はだくれです!

前回の記事から半月以上が経ってしまいました。
やばいやばい。

この期間に何をしてたか思い返してみたところ、
「全工程を洗い出す作業をした結果、道のりが果てしなくて絶望した」
ということを思い出してしまいました。

でもおかげで不必要なものに手をつけなくなりましたね。
表情差分とかを調子に乗ってたくさんつくっても、
いざゲームに組み込もうとしたときに「これ使わんやん」ということが減るので大事だなと感じました。
学び!

そして前回の記事でアンケートを取った、
突発『ウィッチビキニ』デザインコンテストですが、
ありがたいことに50もの回答をいただきました。
その結果はまた今度おしらせしたいと思います!
本当にありがとうございました!
しっかりコメントを添えてくださる方もいて、
めちゃくちゃ参考になるし期待や情熱も感じました。
感謝です、本当に。

では今回の内容!
・戦闘中に立ち絵が出ます
・戦闘中立ち絵表示システムについて
・表示用プラグインのあれこれ
・次回予告

と、まあ要は戦闘中立ち絵についての回です。
お品書きを盛りました。

それではいってみましょう!

フォロワー以上限定無料

状況をお知らせします! がんばってるアピール!

無料

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索