投稿記事

2020年 11月の記事 (2)

ヘビトンボ 2020/11/13 20:18

【ウディタ】アイテム生成コモンにnew表示を付ける!

ヘビトンボです('ω')

今回もまたウディタ関連の記事になります。
ツイッターの方でいただきました、アイテム生成コモンのnew表記について解説したいと思います~(VIR-LANDさんありがとうございます✨)

詳しくご説明いたしますと、ウディタ公式コモン集にて配布されている【アイテム生成コモンイベント】にて、新しく追加されたレシピの隣に「new!」の表記を行う、というものになります。


(拙作、ミカイルの大地より)

早速解説していきますね(-ω-)

可変データベースにnewであるか判定する変数を用意する

あ、ウディタ公式サイトより【アイテム生成コモンイベント】の導入方法に関しては割愛させていただきます💦
メインコモン及び追加ファイル導入を済ませた前提で解説していきますね。

それではまず、導入を済ませた可変データベースの【CDBアイテム作成】にそのレシピが新しく追加されたものであるか判断する変数「対象がnew?」を作っていきます!
【タイプの内容設定】から空いている項目、またはページを追加して変数を作りましょう!

「数値1」が「newと表示させる状態」、「数値0」が「既に表示済みの状態」という風に変数の内容を指定します。
この際、【データ内容の特殊設定】から【選択肢を手動作成】より、下記画像のように内部状態に説明を付けておくと、後で設定する際にわかりやすいですね( *´艸`)


レシピが表示されたタイミングで、変数をnew表示する状態に変更

今回はコモンイベント【レシピ操作[アイテム作成]】で「レシピを表示する(内部数値33)」の選択肢によってレシピが表示された場合にnew表示するようにしようと思います~
早速コモンイベント【レシピ操作[アイテム作成]】を見ていきましょう!

ここで使用されているコモンセルフ変数を簡単に解説いたしますと、

  • Cself 00:「レシピID」
    ・どのレシピの操作するかのID情報。

  • Cself 01:「どうする?」
    ・そのレシピに対してどの操作するかの情報。

  • Cself 10:「0か1」
    ・各操作に対して内部的な値を0か1かにする情報。

になっております。
では実際のイベントの内容ですが、ビットを満たすというちょっと難しいテクニックを使用しているので、ここでの詳しい解説は割愛いたします💦
(その辺りの解説も知りたい!!という方がおられましたら、コメントなどで教えていただけると嬉しいです~)
よって簡単に結果から説明いたしますと、条件分岐上から、

  • 「2のビットを満たす」
    ・名前秘匿に関する処理

  • 「4のビットを満たす」
    ・生成物秘匿に関する処理

  • 「8のビットを満たす」
    ・材料秘匿に関する処理

  • 「16のビットを満たす」
    ・触媒秘匿に関する処理

  • 「32のビットを満たす」
    ・レシピ表示に関する処理

  • 「64のビットを満たす」
    ・レシピ封印中に関する処理

となっており、それぞれCself10に0か1かの状態が入るようになっています。
Cself10の0か1かっていうのは、例えばレシピが表示されている状態が1、表示されていない状態が0、といった具合ですね。

今回行いたいことを整理すると、「レシピ表示が、レシピを表示するを選択された場合、newの表示状態を表示、すなわち1にする」 ということです。
よって上記分岐から「32のビットを満たす」内部に処理を書いていけばよいですね!
Cself10の「0か1」も、表示するなら1、しないなら0となるので利用できそうです。
【DB操作】より、
【DBタイプ番号】の【名前】から【CDBアイテム作成】を選択、
【データ番号】の【変数】から【CSelf0:レシピID】を選択、
【項目番号】の【名前】から先ほど追加した項目【対象がnew?】を選択します。
右辺には【=】の【変数/文字列】から【CSelf10:0か1】を選択し、【DBへ代入】を設定しましょう!



これでコモンイベント【レシピ操作[アイテム作成]】で「レシピを表示する(内部数値33)」の選択肢が選ばれた際、表示するように設定したレシピのnew状態をnew表示するように設定できました!

レシピ名の隣にnew表示を行う処理を作る

では表示するレシピ名の隣にnew表示を行う処理を作ります!
ここで行いたいことは、「表示したいレシピがnew表示する状態であれば、レシピ名の隣にnew!を表示する」ということです。
レシピ名を読み込むコモンイベント【アイテム作成一覧算出】に処理を追加します!
【アイテム作成一覧算出】コモンの行数92行目の分岐に文字列にレシピ名を読み込む処理がありますね!
ではその下に、「表示したいレシピがnew表示する状態であれば、」レシピ名を読み込んだ文字列に「new!」を加算する処理を作ります!
(102行目と103行目の間辺りに)

まずはレシピのnew状態を格納するコモンセルフ変数、10番(場所はどこでも良いですが今回は10番に!)に新しく変数「new表記する?」を作ります。

【DB操作】より、
【DBタイプ番号】の【名前】から【CDBアイテム作成】を選択、
【データ番号】の【変数】から【CSelf21:レシピID】を選択、
【項目番号】の【名前】から【対象がnew?】を選択します。
右辺には【=】の【変数/文字列】から先ほど作った【CSelf10:new表記する?】を選択し、【変数へ代入】を設定しましょう!

次に【条件(変数)】より、
【CSelf10:new表記する?が1と同じ】の条件を設定します。

先ほど設定した条件の内部に、
【文字列操作】より、
【CSelf5:<表示>レシピ名前】に【+=】、手動入力の【 new!】を設定します。
このとき、「new!」のカラーを変えたい場合は特殊文字「\c[XX]」を使ってカラーを変えましょう。
今回はシステムデータベース12の4番に黄色を追加してみたのでこれを使います。
お好きな色に設定してみてください(*'▽')b


こんな感じです✨

イベント終了時にnew表示をなくす処理を作る

一度newが表示されたあと、再度イベントを実行すると既読済みになってnewが表示されないようにするイベントを作ります!
イベントが終了したタイミングで、可変データベースの全てのレシピの「対象がnew?」の状態を一括で「new表示しない」ようにする処理を書きます~
イベントが終了するタイミングなので、コモンイベント【アイテム作成実行】の一番最後にしましょう!
(行数でいうと134行目ですネ)

まずは(例によって場所はどこでも良いですが)、コモンセルフ変数10番にレシピの総数を格納する変数「レシピ総数」を、次のコモンセルフ変数11番には、現在参照しているレシピIDを格納する変数「レシピID参照」を作ります!

今回はループ処理を使って、「レシピ総数」回のループを行いながら、「レシピID参照」を使って上から順番にデータを書き込んでいく、という作り方をしようと思います!

【DB操作】より、可変DBの名前から【CDBアイテム作成】を選択し、【データ数取得[数値]】にチェックを入れ、右辺に【=CSelf:10 レシピ総数】を設定して変数に代入します。
これによりCDBアイテム作成のデータ数、すなわちレシピの総数が取得できました。

ループ処理を入れる前にコモンセルフ変数11番「レシピID参照」を初期化しておきましょう!
コモンセルフ変数11番に0を代入しておきましょうね( *´艸`)

そしたら【イベント制御】より、【回数付きループ】、回数に変数呼び出し値「1600010」と入力してコモンセルフ変数10番を指定しましょう!

ループ内の処理を作ります。
【DB操作】より、可変DBの名前から【CDBアイテム作成】、【CSelf11:レシピID参照】、名前から【対象がnew?】を設定し、右辺には【=0】でDBへ代入を選択します。


最後に次のレシピを参照できるよう、「CSelf11:レシピID参照」に1を加算すれば完了です✨

これで、レシピ総数分のループ処理を行い、0番~XX番(CDBアイテム作成の最終番号)までのnew状態を一括で表示しないようにする処理ができあがりました!

動作の確認

アイテム作成コモンを呼び出すマップイベントと、選択肢によってレシピを表示するマップイベントを作ったので動作を確認します!

いい感じですね✨✨



いかがだったでしょうか!
また気が向いたら書きたいと思います(^^)♡

Ci-enのコメント欄やツイッターでも、「こういう記事が見たい!」というものがあればお声かけいただければまた書くかも…??チラッ笑

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

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

ヘビトンボ 2020/11/02 21:36

【ウディタ】マップ上にアニメーションするオブジェクトを配置しよう!

ヘビトンボです~!
今回はウディタ(WOLF RPGエディター)のシステム周りに関する記事です✨

マップ上にピクチャとしてアニメーションを行うオブジェクトを配置する私なりの方法をまとめてみようと思い立ったので、記事としてご紹介させていただこうと思います!

マップオブジェクトの座標とピクチャ座標の結び付けについて解説いたしますよ(=゚ω゚)ノシ

まずはマップ上に配置してみる

今回はこの私が描いた「風車の羽根」の画像をマップ上に表示してみようと思います~


まず最初に、マップ上にアニメーションを表示する用のイベントを配置します!
風車の羽根なので、下画像に写っている小屋の壁面にしましょう!

このイベントの中心位置表示するアニメーションの中心位置とします。
X座標とY座標を取得しましょう!

イベントを開き【変数操作+】から、
【このイベントのSelf:0,=,このイベントの,X座標(標準)】を選択し適用します。

同様に【変数操作+】から、
【このイベントのSelf:1,=,このイベントの,Y座標(標準)】を選択し適用します。

そしてここでひとつ、
ピクチャの表示で使用する座標情報は、ピクセル単位で指定しなくてはなりません!!
しかしながら先ほどの「X(Y)座標(標準)」というコマンドは主人公の1移動分を1とした値で返ってくるのです。
ウディタの1マスは標準設定だと16ピクセルなので(16x16での設定を前提に説明させていただきます💦)、与えられた値を16倍してピクセル単位に合わせましょう!

そしてさらにもうひとつ!
先ほど申し上げました通り、このイベントの中心位置の座標が必要なので1マスの値である16の半分の8の値だけズラして表示する必要があるのです。
よってSelf0,Self1共に8を加算しましょう。

アニメーションの表示

では、設定した座標にピクチャを表示しましょう✨
その前にマップチップやマップイベントとピクチャ番号の関係について軽くご説明いたしますね!

ウディタにおけるレイヤの階層分けは、


[ピクチャ 100000番以上]
[文章・ウィンドウ・選択肢]
[ピクチャ 0番~99999番]
[フォグ画像]
[マップチップ(常にキャラの上に表示)]
[マップイベント・キャラ等]
[ピクチャ -1番~-99999番]
[マップチップ1~3]
[ピクチャ -100000番以下]
[遠景画像]


の順に上から重ねて表示されます。
ご自身が表示したい階層に合わせて、ピクチャ番号を設定してください!

【ピクチャ】の項目から、今回はピクチャ番号-1番を指定し、車の羽根の画像を設定。
横を3、縦を1、
表示位置を【中心】とし、【スクロールとリンク】の項目にチェックを入れます。
そして、座標には先ほど設定したセルフ変数の呼び出し値である【X:1100000】【Y:1100001】を設定しましょう!

次に実際に画像をアニメーションさせるコマンドを入力します!

【エフェクト】の項目から、【ピクチャ】を選択し、
させたいアニメーションを設定しましょう!
今回は自動パターン切替(ループ)を選択し、3枚のアニメーションなので、開始1、終了3、間隔10フレームを設定します。


アニメーションの起動イベントを作成

それでは早速動作を確認しましょう~!!
アニメーションを表示するイベントは一度だけ実行されればよいので、マップに別途アニメーションイベントを起動するためのイベントを作成します。

マップ処理終了用のフラグ用変数を1にするイベントを作り、
起動条件を【並列実行】、先ほどのマップ処理終了用のフラグが0のときのみ、更新するように設定します。
場所はマップの一番左上の端っこなどが好ましいですね!

同様に先ほど作成したアニメーション表示用のイベントの起動条件も同じように設定します。

これで確認できる状態になりました!✨

プレイヤーとの位置関係を反映させる

しかしながらこれでは問題があります!
現在設定した座標情報は、あくまでマップ全体から見たときの座標情報なのです!
つまり、マップの一番左上を基点とした情報というわけですね。

対して、ピクチャ表示コマンドによって指定する座標は、ゲームウィンドウの左上を基点とした情報なのです!!

(↓)X=20マスのところからマップに移動すると、

(↓)主人公がマップ左上からずれている分だけピクチャがずれてしまう!涙

これを解消するには、ピクチャを表示する座標を現在のウィンドウの左上を基点とするようにずらしてあげればよいです!

ではどうするかといいますと、
ウィンドウの左上の座標を直接取得することはできないので、主人公のマップ座標同じくウィンドウ座標を利用しましょう!



欲しいのは赤→の値ですね、
これは黄色←から青→だけ引いた数というふうに表現できます。
この黄色←主人公のマップ座標青→主人公のウィンドウ座標で取得できますね!

イベントを開き【変数操作+】から、
【このイベントのSelf:2,=,主人公の,X座標(標準)】を選択します。

同様に【変数操作+】から、
【このイベントのSelf:3,=,主人公の,Y座標(標準)】を選択します。

そしてSelf:0からSelf:2,Self:1からSelf:3をそれぞれ減算しましょう!
あ、先ほど申し上げた通り「X(Y)座標(標準)」というコマンドは主人公の1移動分を1とした値で返ってくるので、一連のコマンドはSelf:0とSelf:1を16倍する前に入れてくださいね!
ここで上の図の黄色←の移動を行いました。

続いて青→だけ移動させるコマンドを入力します。

イベントを開き【変数操作+】から、
【このイベントのSelf:4,=,主人公の,画面X座標】を選択し適用します。

同様に【変数操作+】から、
【このイベントのSelf:5,=,主人公の,画面Y座標】を選択し適用します。

そしてSelf:0にSelf:4,Self:1にSelf:5をそれぞれ加算しましょう!
「画面X(Y)座標」は先ほどの「X(Y)座標(標準)」と異なり、ウィンドウ上のプレイヤーの座標がピクセル単位で渡されますよ!

ここまでできたらもう一息!!(記事を書いている私も苦笑)
Self0,Self1共に8を加算する処理を一旦消してSelf1にのみ8を減算する処理に書き換えます

これはどうしてかといいますと、ウディタのウィンドウ上のマス辺りの横縦の比が20:15になっているためです。
キャラクターは中央に配置されるので、横に表示されるのが中央1マス+左右に9.5マスというふうに分かれているのです
横だけ画面端のオブジェクトが見切れている状態ですね、なので自動的に8ピクセルずれた状態になっています。
一方縦は中央1マス+上下に7マスというふうにわかれているので8ピクセルずらす処理が必要、というわけですね!

これでようやく完成です!✨


複製して確認してみる

試しに複製してピクチャ番号のみを差し替えた状態で動作するか確認いたします✨



うまくいきました!!

いかがだったでしょうか?
マップオブジェクトにアニメーションを取り入れれば、マップがより一層映えること間違いなしです( *´艸`)♡

私のこういうシステム的な技術の紹介に需要があるのかは永遠の謎ですが、また気が向いたときに記事書いてみますね!
でわ~🐝

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

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

月別アーカイブ

記事を検索