[掲示板へもどる]
一括表示

記事No: 21572 [関連記事]
タイトル魔法の威力をアイテムなどで一時的に変えたい
投稿日: 2023/12/14 20:32
投稿者ウディタ初心者 [erdrreee261(海外)]

[やりたいこと]

技能で指定できる魔法(例:ファイヤーボール)などを、特定のイベント、またはアイテムなどを使用することで、一時的に威力をあげたいです。
イベント後、アイテム使用後には、元の威力に戻るようにしたいです。

[やってみたこと]
現状、ユーザーデーターベースの技能にて
・ファイアーボール
・ファイヤーボール(改)
と、二つの魔法を作って、イベントが起きた時には「ファイヤーボール」を忘れさせ、新たに「ファイヤーボール(改)」を習得させることで、威力が上がったような演出にしていましたが、魔法の種類が多いためすべての魔法を2パターン作るより、直接数値を変えられないかと思いました。

DB操作の
ユーザーDB  DBタイプ番号  データー番号 項目番号

にて、技能の基本固定量や精神力影響度に 変数代入+=10

等、数値を増やしてみたのですが、威力の変更はできませんでした。


他にどうすれば、威力の変更が出来るのか分からなかったので
何か良い方法があれば、教えていただければと思います!
知識不足で申し訳ありませんが、よろしくお願いいたします!


記事No: 21573 [関連記事]
タイトルRe: 魔法の威力をアイテムなどで一時的に変えたい
投稿日: 2023/12/16 09:00
投稿者YADO [LerLWW459(海外)]

細かい仕様が分からないので、ざっくりとした説明しかできませんが、例えばイベント発生時やアイテム使用時に
■変数操作: V1[技能効力アップ] = 1 + 0
を実行して、通常変数[1]が「1」の時には、主人公の行動時の基本効果量が[+10」になるようにする場合は、
コモンイベント[165:X[戦]┗単体処理]の388-389行目にある
▼ 【2.3】 攻撃力の計算
■DB読込(ユーザ): CSelf41[効力総計] = ユーザDB[ 技能 : CSelf1[発動技能] : ┣ 基本効果量[固定値] ] (0 : - : 9)
の部分を
▼ 【2.3】 攻撃力の計算
■DB読込(ユーザ): CSelf41[効力総計] = ユーザDB[ 技能 : CSelf1[発動技能] : ┣ 基本効果量[固定値] ] (0 : - : 9)
■条件分岐(変数): 【1】 CSelf0[発動スロット] が 9 以下
-◇分岐: 【1】 [ CSelf0[発動スロット] が 9 以下 ]の場合↓
|■条件分岐(変数): 【1】 V1[技能効力アップ] が 1 と同じ
|-◇分岐: 【1】 [ V1[技能効力アップ] が 1 と同じ ]の場合↓
| |■変数操作: CSelf41[効力総計] += 10 + 0
| |■
|◇分岐終了◇
|■
◇分岐終了◇
と設定すると、通常変数[1]が「1」になった時に、基本効果量が「+10」になります。
(テスト時は「+100」くらいにした方が分かりやすいかも)


上記の場合は、通常攻撃や強斬りなどの物理攻撃にも適用されますが、
以下のように精神力影響度が「1以上」の時のみに適用させると、物理攻撃では増加しなくなります。

▼ 【2.3】 攻撃力の計算
■DB読込(ユーザ): CSelf41[効力総計] = ユーザDB[ 技能 : CSelf1[発動技能] : ┣ 基本効果量[固定値] ] (0 : - : 9)
▼ 攻撃力影響度
■DB読込(ユーザ): CSelf34[攻撃力ダメージ] = ユーザDB[ 技能 : CSelf1[発動技能] : ┣ 攻撃力影響度[%] ] (0 : - : 10)
■変数操作: [実] CSelf34[攻撃力ダメージ] *= CSelf20[自攻撃力] / 100
▼ 精神力影響度
■DB読込(ユーザ): CSelf35[精神攻撃ダメージ] = ユーザDB[ 技能 : CSelf1[発動技能] : ┣ 精神力影響度[%] ] (0 : - : 11)
■条件分岐(変数): 【1】 CSelf0[発動スロット] が 9 以下
-◇分岐: 【1】 [ CSelf0[発動スロット] が 9 以下 ]の場合↓
|■条件分岐(変数): 【1】 V1[技能効力アップ] が 1 と同じ
|-◇分岐: 【1】 [ V1[技能効力アップ] が 1 と同じ ]の場合↓
| |■条件分岐(変数): 【1】 CSelf35[精神攻撃ダメージ] が 1 以上
| |-◇分岐: 【1】 [ CSelf35[精神攻撃ダメージ] が 1 以上 ]の場合↓
| | |■変数操作: CSelf35[精神攻撃ダメージ] += 10 + 0
| | |■変数操作: CSelf41[効力総計] += 10 + 0
| | |■
| |◇分岐終了◇
| |■
|◇分岐終了◇
|■
◇分岐終了◇
■変数操作: [実] CSelf35[精神攻撃ダメージ] *= CSelf21[自精神攻撃力] / 100

※374行目にも精神力影響度を代入する設定があるので、その下の375行目に上記のような精神力影響度の値を増やす追加設定が必要です。


増加量を技能ごとに細かく設定したい場合は、
現在設定しているように同じ技能を2つ用意するか、増加値を設定する技能の項目を増やすか、いずれかになりそう。

同じ技能を2つ用意する方法も、例えばユーザーDB[0:技能]のデータ[0-99]をコピーして、
データ[100-199]に貼り付けて、データ[100-199]の方の値を増加。

そしてコモンイベント[165:X[戦]┗単体処理]の298行目の
▼ 【2−】命中しててもしてなくてもカウンターチェック
がある位置に
■条件分岐(変数): 【1】 CSelf0[発動スロット] が 9 以下
-◇分岐: 【1】 [ CSelf0[発動スロット] が 9 以下 ]の場合↓
|■条件分岐(変数): 【1】 V1[技能効力アップ] が 1 と同じ
|-◇分岐: 【1】 [ V1[技能効力アップ] が 1 と同じ ]の場合↓
| |■変数操作: CSelf1[発動技能] += 100 + 0
| |■
|◇分岐終了◇
|■
◇分岐終了◇
を追加すれば、通常変数[1]が「1」の時には自動的に技能のデータIDが「+100」になるので、主人公が習得している技能を入れ替える処理が無くても、
通常の技能(データID[0-99])を選択するだけで、自動的に強化された技能(データID[100-199])が使用されます。


ちなみにユーザーDBの値は
■変数操作: CSelf10[一時変数A] = 1000000009 + 0
■変数操作: V[CSelf10[一時変数A]] += 10 + 0
と言ったように「変数呼び出し値」と「X番の変数呼出」の組み合わせで一応値は変えられますが、
「値を増加した後に、元の値に戻す処理が必要になる」
「+10が二重に実行しないように注意する」
「全ての技能を増加させると、敵キャラの技能まで増加してしまう」
「主人公と敵キャラの両方で同じ技能が使える場合は、主人公用と敵キャラ用の2つを用意する必要がある」
「値を変えてセーブすると、ロード時に元の値に戻る(セーブができない戦闘中のみの値の変更ならこの仕様は無視できる)」
などの問題があります。


記事No: 21574 [関連記事]
タイトルRe: 魔法の威力をアイテムなどで一時的に変えたい
投稿日: 2023/12/16 22:40
投稿者ウディタ初心者 [erdrreee261(海外)]

YADOさん、ご丁寧にありがとうございます!!
拝見させていただいたところ、

・増加量を技能ごとに細かく設定したい場合
・ユーザーDBの値を弄る

このふたつを試してみようかと思います。


説明不足で申し訳ありませんでしたが、例えば……

教会で炎の加護を受ける

炎属性の魔法だけ威力があがる(他の魔法は威力変わらず)

宿屋で寝ると加護がリセットされる

のように、すべての魔法威力が上がるわけではなく
主人公の強さそのままに、決まった魔法だけ強くできたらと思っております。


それで行くと、教えていただいた「増加量を技能ごとに細かく設定したい場合」が当てはまると思うので、こちらでいろいろと試してみようと思います!

無事に導入できましたら、またご報告に参ります。
ご回答ありがとうございました!


記事No: 21575 [関連記事]
タイトル参考までに
投稿日: 2023/12/17 11:00
投稿者YADO [LerLWW459(海外)]

「炎攻撃」などの属性単位でダメージ量を変化させる場合は、戦闘開始時に敵の属性耐性の値を増やせば可能です。
(100%→200%と2倍にするとダメージ量が2倍になる)

この場合、コモンイベント[203:○[変更可]戦闘開始時処理]に
■条件分岐(変数): 【1】 V1[技能アップ属性ID] が 1 以上
-◇分岐: 【1】 [ V1[技能アップ属性ID] が 1 以上 ]の場合↓
|■変数操作: CSelf10 = 9 + 0
|■回数付きループ [ 7 ]回
| |■変数操作: CSelf10 += 1 + 0
| |■可変DB書込:DB[ 11 : CSelf10 : V1[技能アップ属性ID] ] (×┣ 属性耐性計算結果 : - : -) *= 2
| |■
|◇ループここまで◇◇
|■
◇分岐終了◇
WoditorEvCOMMAND_START
[111][4,0]<0>(1,2000001,1,1)()
[401][1,0]<0>(1)()
[121][4,0]<1>(1600010,9,0,0)()
[179][1,0]<1>(7)()
[121][4,0]<2>(1600010,1,0,256)()
[250][5,4]<2>(11,1600010,2000001,48,2)("","","","")
[0][0,0]<2>()()
[498][0,0]<1>()()
[0][0,0]<1>()()
[499][0,0]<0>()()
WoditorEvCOMMAND_END
のような設定は必要ですが、コモンイベント165の改造などは不要となり、技能の設定もそのままで処理できます。

※戦闘の途中で敵キャラが追加参戦してきた場合は、追加参戦分のみの属性耐性の増加処理が必要です。


通常変数[1:技能アップ属性ID]には、
0=変化なし
1=炎攻撃
2=冷気攻撃
と言った感じに、ユーザーDB[7:属性名の設定]のデータIDを設定。


記事No: 21576 [関連記事]
タイトル出来ました!!
投稿日: 2023/12/17 19:53
投稿者ウディタ初心者 [erdrreee261(海外)]

YADOさん、またご丁寧にお答えくださりありがとうございました!

主人公の方を弄ることばかり考えていましたが、
敵側の方を変更するという方法もあると知り、目からうろこです…!!

それ以外にも、「魔法攻撃強くしたい」という私のおおざっぱな要望に対して、
いろんなやり方をひとつづつ丁寧に教えて下さり、本当にありがとうございます。

私自身の知識不足が故に、完全に理解することは手出来ませんでしたが
教えていただいたものを試してみた結果、

ユーザーDBの値を弄る
■変数操作: CSelf10[一時変数A] = 1000000009 + 0

こちらの方法が、一番自分が意図するものに近く出来ました。
使う際の問題点についても上げてくださっていたので、
そこを上手くかわしつつ、理想の形に調整しようと思っています。

他にも教えていただいたものは、別の物にも使えそう…!と、色んなアイディアが出てきたので、ウディタを勉強しつつ試してみます!

いつも的確なアドバイスや、丁寧な解説をありがとうございます!
ゲーム完成を目指して、頑張ります!