ウディタ アイテムドロップの処理解説 基本システム2 WOLF RPGエディター

Ver2.24

内容はアイテムドロップについてですが、
武器・防具のドロップも一緒です。

今回使うユーザーDBの設定

  • タイプ9:敵キャラ個体データ
  • データ1 ID1:スライム
  • 項目0:敵キャラ名 スライム
  • 項目14:入手アイテム 1:薬草
  • 項目15:入手率[アイテム] 10(%)

<ご注意>

ウディタ公式とは一切関係ありません。
私自身ただのウディタユーザーです。

知ってる方には当たり前!という部分も、
なるべく触れていきます。

ですので知ってる部分・不要な部分は、
ガンガン読み飛ばしてください。

基本的な流れを理解しやすくするため、
コマンド文などの一部省略してあります。

スポンサーリンク
スポンサーリンク

戦闘開始時

144:X[戦]敵DB→戦闘DBコピーで、
ユーザーDBから可変DBへ。

ユーザーDB

  • タイプ9:敵キャラ個体データ
  • データ1 ID1:スライム
  • 項目0:敵キャラ名 スライム
  • 項目14:入手アイテム 1:薬草
  • 項目15:入手率[アイテム] 10(%)

↓コピー

可変DB

  • タイプ10:×┏ 戦闘一時ステータス[基]
  • データ10:敵1ステータス
  • 項目0:キャラ名
  • 項目72:[敵専用]入手アイテム
  • 項目73:[敵専用]アイテム入手率

コピー後の可変DB

  • タイプ10:×┏ 戦闘一時ステータス[基]
  • データ10:敵1ステータス
  • 項目0 スライム
  • 項目72 1:薬草
  • 項目73 10(%)

144:X[戦]敵DB→戦闘DBコピー

■DB読込(ユーザ): CSelf80[入手アイテム] = ユーザDB[ 敵キャラ個体データ : CSelf1[読込敵個体ID] : 入手アイテム ] (9 : – : 14)
■DB読込(ユーザ): CSelf81[アイテム入手率] = ユーザDB[ 敵キャラ個体データ : CSelf1[読込敵個体ID] : ┗入手率[アイテム] [%] ] (9 : – : 15)

省略

■可変DB書込:DB[ ×┏ 戦闘一時ステータス[基] : CSelf0[入力先戦闘DB] : [敵専用]入手アイテム ] (10 : – : 72) = CSelf80[入手アイテム]
■可変DB書込:DB[ ×┏ 戦闘一時ステータス[基] : CSelf0[入力先戦闘DB] : [敵専用]アイテム入手率] (10 : – : 73) = CSelf81[アイテム入手率]

イメージ

わかりづらいという方は、
スライムに薬草を持たせる
というイメージでOKです!

実際は違うのですが、
イメージをつかむためです。

敵がスライム×2の場合、
それぞれのスライムに薬草を持たせます。

2体目のスライム

  • タイプ10:×┏ 戦闘一時ステータス[基]
  • データ11:敵2ステータス
  • 項目0 スライム
  • 項目72 1:薬草
  • 項目73 10(%)

となります。

補足 実際の処理

※難しかったら飛ばしてください

全体を掴んで余裕があれば…。

戦闘スロットからモンスターのIDを特定し、
可変DBの対応箇所に格納しています。

  • 戦闘スロット10 → データ10:敵1ステータス
  • 戦闘スロット11 → データ11:敵2ステータス

例えば、敵グループが

敵1なし・敵2スライム・敵3スライム・敵4567なし

だとすると、

  • 戦闘スロット10 → なし
  • 戦闘スロット11 → データ10:敵2ステータス スライム
  • 戦闘スロット12 → データ10:敵3ステータス スライム

のようになります。

データ10:敵1ステータスから、
埋めていくわけではありません。

敵撃破時

ドロップ判定処理

戦闘中に敵を倒すと、
171:X[戦]敵撃破処理で、
ドロップ判定が行われます。

可変DB

  • タイプ10:×┏ 戦闘一時ステータス[基]
  • データ10:敵1ステータス
  • 項目0:スライム
  • 項目72 1:薬草
  • 項目73 10(%)

撃破したモンスターの、
ドロップアイテムとドロップ率を、
CSelf30[入手アイテム]、
CSelf31[アイテム入手率[%]へ。

  • CSelf30=1:薬草
  • CSelf31=10(%)

171:X[戦]敵撃破処理

|■DB読込(可変): CSelf30[入手アイテム] = 可変DB[ ×┏ 戦闘一時ステータス[基] : CSelf0[対象戦闘スロット] : [敵専用]入手アイテム ] (10 : – : 72)
|■DB読込(可変): CSelf31[アイテム入手率[%]] = 可変DB[ ×┏ 戦闘一時ステータス[基] : CSelf0[対象戦闘スロット] : [敵専用]アイテム入手率 ] (10 : – : 73)

ドロップ判定の仕組み

CSelf31から0~99を引いた値が、
1以上ならドロップ。

171:X[戦]敵撃破処理

|■変数操作: CSelf31[アイテム入手率[%]] -= 0 ~ 99

  • CSelf30=1:薬草
  • CSelf31=10(%)

CSelf31 -= 0 ~ 99

引く数字が0~9ならドロップし、
10~99ならドロップなしです。

0~9で10個、0~99で100個、
10/100で入手率10%という感じです!

入手率を100(%)にすると、
最大の99を引いても絶対に1残るため、
必ずドロップするわけです。

ドロップ後

判定後ドロップしたアイテムは、
可変DB15:お宝リストに格納されます。

171:X[戦]敵撃破処理

| | | | |■可変DB書込:DB[ ×┗ お宝リスト : 0 : CSelf21[一時格納位置] ] (15 : : -) = CSelf30[入手アイテム]
| | | | |■可変DB書込:DB[ ×┗ お宝リスト : 0 : CSelf21[一時格納位置] ] (15 : : -) += 10000

最後に+10000しているのは、
アイテム・武器・防具を区別するためです。

※詳しくは後ほど!

イメージ

スライムを倒したときに、
持っている薬草のドロップ判定を行う!

判定のタイミングは戦闘終了後ではなく、
個々のモンスター撃破時!

くどいようですが、

  • スライムAを倒す
    →スライムAのドロップ判定
  • スライムBを倒す
    →スライムBのドロップ判定

です!

ドロップありなら、
下記のドロップアイテム入手処理へ!

余談 モンスター逃走時

  • スライムCが逃走した場合…?
    タイプ10:×┏ 戦闘一時ステータス[基]を初期化

171:X[戦]敵撃破処理

|▼ 対象の戦闘スロットをカラにする
|■可変DB書込:[タイプ ×┏ 戦闘一時ステータス[基](10) : データ CSelf0[対象戦闘スロット]を初期化]

スライムCが持っていた薬草もキレイに消滅!

ここを改造すれば、
逃走時に確率でアイテムドロップ!
みたいなモンスターも作れそう?

勝敗判定後

ドロップアイテムの入手処理

200:X┣◆戦利品獲得処理

可変DB15:お宝リストからCSelf11へ、
CSelf11を10000で除した値をCSelf12へ。

50:X[共]アイテム増減で、
CSelf12の所持数を1増やす。

200:X┣◆戦利品獲得処理

| |■DB読込(可変): CSelf11[一時変数B] = 可変DB[ ×┗ お宝リスト : 0 : CSelf10[一時変数A] ] (15 : : -)

省略

| | | |▼ アイテムの場合
| | | |■変数操作: CSelf12[一時変数C] = CSelf11[一時変数B] % 10000
| | | |■イベントの挿入[名]: [“X[共]アイテム増減”] <コモンEv 50> / CSelf12[一時変数C] / 1

10000で除した値

薬草のID1だとすると、
可変DBの10:お宝リストには、
10001で格納されています。

CSelf12 = 10001 % 10000

10001を10000で割って残った値を、
CSelf12に入れる、という意味です。

なのでCSelf12はID1薬草です!
→薬草の所持数+1

補足 +10000は何のため?

基本システムに慣れれば、
当たり前!なお話なんですが、
一応説明しておきます。

基本システムではよく見かけるので、
理解しておくと色々捗りますが、
難しい!不要!なら飛ばしてください。

お宝リストに格納する際に、
+10000したのは、
アイテムかどうかを区別するためです。

武器なら+20000、
防具なら+30000しています。

こうしておくことで、
ドロップアイテムが何のID1なのか、
区別できるわけです。

…アイテムだけだと、
イメージしづらいですが。

例えばユーザーDBの設定が、

  • アイテムID 1 薬草
  • 武器ID 1 こんぼう
  • 防具ID 1 木の盾

となっていた場合、
お宝リストに格納する数字が1だけだと、
区別がつかなくなってしまいます。

ウディタ「…どの1なのさ?」

なのでアイテムなら+10000しておき、
条件分岐で判別できるようにしてあります。

↓CSelf11が10000以上で、
19999以下ならアイテムとなっています。

200:X┣◆戦利品獲得処理

| |■条件分岐(変数): 【1】 CSelf11[一時変数B] が 10000 以上
| |-◇分岐: 【1】 [ CSelf11[一時変数B] が 10000 以上 ]の場合↓
| | |■条件分岐(変数): 【1】 CSelf11[一時変数B] が 19999 以下 【2】 CSelf11[一時変数B] が 29999 以下 【3】 CSelf11[一時変数B] が 39999 以下
| | |-◇分岐: 【1】 [ CSelf11[一時変数B] が 19999 以下 ]の場合↓
| | | |▼ アイテムの場合
| | | |■変数操作: CSelf12[一時変数C] = CSelf11[一時変数B] % 10000
| | | |■イベントの挿入[名]: [“X[共]アイテム増減”] <コモンEv 50> / CSelf12[一時変数C] / 1
| | | |■
| | |-◇分岐: 【2】 [ CSelf11[一時変数B] が 29999 以下 ]の場合↓
| | | |▼ 武器の場合
| | | |■変数操作: CSelf12[一時変数C] = CSelf11[一時変数B] % 20000
| | | |■イベントの挿入[名]: [“X[共]武器増減”] <コモンEv 51> / CSelf12[一時変数C] / 1
| | | |■
| | |-◇分岐: 【3】 [ CSelf11[一時変数B] が 39999 以下 ]の場合↓
| | | |▼ 防具の場合
| | | |■変数操作: CSelf12[一時変数C] = CSelf11[一時変数B] % 30000
| | | |■イベントの挿入[名]: [“X[共]防具増減”] <コモンEv 52> / CSelf12[一時変数C] / 1
| | | |■
| | |◇分岐終了◇
| | |■変数操作: CSelf15[アイテム入手個数] += 1 + 0
| | |■
| |◇分岐終了◇

戦利品獲得画面

186:X[戦]戦利品獲得画面

可変DB15:お宝リストに格納された数値から、
アイテム名と獲得数を取得し表示します。

【入手アイテム】

薬草 × 1

ピローン♪

ここは説明することが特に…?

ということで、
アイテムドロップの構造についてでした!

ゲーム製作
スポンサーリンク
data-matched-content-ui-type="image_card_stacked" data-matched-content-rows-num="4" data-matched-content-columns-num="2"
スポンサーリンク
スポンサーリンク
よもやまの壺