投稿記事

まるちゃん 2019/10/13 20:02

モンスターの配置座標について(今は装飾品を考えてスキルを実装中)

ランダムな対象の修正.txt (ランダムな対象の修正.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
VXace のデフォルトでは効果範囲をランダムな対象としたときに不具合があります
(僕にとっては不具合で修正するべきものだと思いました)
ランダムな対象のターゲットを作成するときダメージを与える前に
すべての対象を選択してしまうために対象が攻撃で死んでしまうと
ランダムな敵3体に攻撃だったのに2体にしか攻撃しないという事態が起こります
このスクリプトはこれを修正します

今は敵を最大で16体出そうと思ってスクリプトを考えています
モンスターを再配置する.txt (モンスターを再配置する.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
このスクリプトはデフォルトと同じ座標を取るようになっています
今回はこれを利用して16体の座標をなんとか出力しようと思って考えています
だけど上手くいかなくてどうしようかなぁと思ったので
どうやって出力しているのかまとめようと思いました

VX の敵座標は中心座標を 272 px として敵が5体までのときは
敵と敵との間を 100 px にすることで均等になるように配置しました
敵が6体以上のときは index が 0 のモンスターの X 座標を 50 として
最後の敵の座標を 544 - 50 とすることで均等に分配をしていました

今回は16体を想定しているので2列に分けて作成する予定です
VX の座標を利用して上の列は下の列の間に入れるのでありかなぁ?
でも10体といった偶数になると最後の1体が間に入れる事ができません
下の列を6体として左に詰めて5体、上の列は右に詰めて5体にする
これがすごい面倒だ

VXace ではモンスターの画像の幅を取得することで
モンスターとモンスターの幅が変わります
VX は均等に分けると説明しましたが詳しく言うと
(544 - 50 - 50) / 敵の総数 としたときの数値を間の大きさにしました
VX のほうがわかりやすいのかな?


VXace の敵の配置座標は以前につくったので整理したい
基本幅 = 敵の画像の幅 / 2 + 8
合計幅 = 基本幅 * 2の合計 - 画面の幅
調整幅 = 合計幅 / (モンスターの総数 - 1)

合計幅は 基本幅 * 2の合計 > 画面の幅 のときのみ算出します

index 0 のときのモンスターの X 座標を求めます
調整幅を持つときは index 0 のモンスターの基本幅を X 座標とします
調整幅をもたないとき(基本幅 *2 の合計が画面の幅より小さい時)は
index 0 の X 座標 = index 0 の基本幅 + 合計幅 / 2

index 0 以降のモンスターの X 座標は以下のように算出します
X 座標 = 左隣の X 座標 + (左隣の基本幅 + 自身の基本幅 - 調整幅)


これを利用して2列のモンスター配置を考えると
画面の幅を2列めは 416 (適当に決めた)にして考えれば良さそう?
モンスターの総数は列の総数と考えるべきでしょう
基本幅に 416/544 倍率として考えればいけるかも?
だけど10体といった偶数となったとき列はひし形の形を取ります
下の列の一番右と上の列の一番左が空白となる
でもモンスター画像の幅から算出しているのを考えると少しずらすというのが難しい
それだったら VX のようにモンスターの画像の幅に影響を受けない形がよさそうだ


VX の敵配置の座標
1体 272
2体 222, 322
3体 172, 272, 372
4体 122, 222, 322, 422
5体 72, 172, 272, 372, 472
6体 50, 139, 228, 317, 406, 495
7体 50, 124, 198, 272, 346, 420, 494
8体 50, 114, 178, 242, 306, 370, 434, 498

敵が5体以下のとき
X 座標 = 272 + ( enemy.index * 2 - @enemies.size + 1) * 50
272 は Graphics.width / 2 という意味です。画面の中心座標です

敵が6体以上のとき
X 座標 = 50 + enemy.index * 444 / ( @enemies.size - 1 )
444 は 544 - 50 - 50

敵が10体のときはこうする
上の列:95, 184, 273, 362, 451
下の列:50, 139, 228, 317, 406(, 495)

上の列の X 座標
(50 + 139) / 2 = 94.5
(139 + 228) / 2 = 183.5
(228 + 317) / 2 = 272.5
(317 + 406) / 2 = 361.5
(406 + 495) / 2 = 450.5

多分これが一番やりやすいんじゃないのかなぁ…
でも6体目以降の座標の幅がきれいじゃなくて好きじゃない

数字的な綺麗さを追い求めるのをやめました
座標では小数点を表示しきれないからいい感じにしたかったの
でもそれほど悪くなかったから諦める
モンスター同士の間を以下のように求めました
width = [(Graphics.width / 2 - 50) / (@enemies.size - 1), 50].min
-50 は index 0 の X 座標を 50 と考えているからです
X座標 = Graphics.width / 2 + (index * 2 - @enemies.size + 1) * width
Y座標 = 288 - 32 * (index % (@enemies.size / 8 + 1))

モンスターの最大出現数は1種類に付き26です(アルファベットがつくから)
面倒だから最大出現数を24にしてしまいました

HPゲージはプチレアサイトのやつを使っているのでちょっと変になってます
enemy.screen_y を参照すればいいだけなのでそう難しくありません
意外と面倒そうだ。Sprite で管理をしている

Win + Shift + S キーでスクリーンショットができるみたいだ(Win10)
Alt + Print Screen でツイッターとかで貼り付けすると簡単にできる

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

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

まるちゃん 2019/10/05 14:11

一応すべての職業のスキルが完成。装備によるスキルはまだ…

ずっとボーッとしてゲーム作ってない感じでした
スキルが決まらなくてうだうだしてました
1つのことに集中しちゃうと他のことができなくなっちゃう感じです
スキルが決まらならないからダンジョンに登場する敵を決めよう
そうすればいいのにスキルを作りたい気持ちに引っ張られちゃいます
完成と言ってもデータベースに名前を書き込んだという感じで
しっかり動作するようには決めていません

自動戦闘を効果的にするルールのもとのスキル制作 - まるちゃん - Ci-en
以前作ったスキルからいくつか変更をしました
それは戦闘の調整というより他の職業とみて大きな差が出ないようにという感じです
ある職業だけ強すぎたり弱すぎたりしないようにいくつか変更しました

大きな変更はアルケミストという3次職の削除です
理由は数多くの戦闘をこなしながらゲームをすすめていくので
1つ1つの戦闘の密度がとても薄いのです
バトルログも最悪読み流しが基本だし最悪設定で表示しなくなります
それなのにアイテムをランダムに5つも作成するというスキルは
どんなアイテムが作成されてアイテムとして入ったのかプレイヤーは確認できない
加えて、自動戦闘を多用しているのにアイテムをプレイヤーに選択させる
こういう動作は戦闘のテンポを悪くする要素だと思いました
ただスキルの内容自体はとても気に入ってるので他のゲームで使いたいです

アイテムをランダムに作成するというスキルの利点を説明させてください
魔法を使用する際、通常コストを消費します
しかしアイテムを一旦作成するという動作を戦闘中にすることで
コストは消費しないけれどアイテムを作成するという動作が必要になる
時間はかかるけれどコストがいらないという感じで気に入ってました
またアイテムなので他の人も使用できる利点もあります
回復魔法と違い回復を予約するということができる
とても気に入ってました。しかし今回はテンポを優先したいので諦めました

アルケミストと入れ替えでエクソシストという職業を作成しました
ネクロマンサーの対になる職業という感じです
4属性の魔法に加えて光属性の魔法が使える魔法使いです
固有技能(TPを消費するスキルのこと)はディスペルとリインフォース
ディスペルは味方全体のHPを50%回復してデバフと状態異常を解除します
祓魔の能力を考えてこれがぴったりだと思いました
もう一つのスキルはうまく決められませんでした
ジャッジメントにすればかっこいいし似合ってますが内容が決まりませんでした
魔法力と魔法防御のデバフがなかったのでこいつにしました
それに加えてHP自動再生を付け加えることにしました
レンジャーの妖精たちのポルカと対をなす感じにしました

アルケミストのスキルのアイテム作成と似ている
魔法使いのスクロール作成を削除しました
戦闘中にアイテムとして使用できる攻撃魔法をスクロールとしました
スクロールを使用するスキルを作っても良かったのですが
アイテムは消費するともとに戻らないから止めました
アイテムを消費せずスクロールの効果を使用するスキルを作ろうかと思いました
それだとMPを消費せず(ある程度使ってもいいけれど)使えるので
強すぎるのでやめました。回復アイテムはさらに強力なのでもちろん駄目です

盗賊はサポートスキルを豊富にしようと思いました
施しというスキルを作りました
これはTPを消費して味方のMPを回復する効果があります
このスキルだけで他の職業とは違う有効性があると思います
後半はアイテムによる回復がほとんどだと思いますが…
MP回復スキルで言えば魔法使いが習得する予定でしたが
2次職に変更してもう片方は吸収することでMPを回復するようにしました
吸収なので戦闘中にしか使えないので面倒かもしれません
しかし吸えるだけ吸えてしまう強力な効果にすることにしました

ネクロマンサーのアンデット作成スキルについてはまだ作っていません
これはアクターを追加するということになりますが
戦闘中に何度も使用する可能性があります
なのでスクリプトで作る必要があると思います
もちろん1体しか召喚できないと制限を作ればいいのですが
それでは面白くないので頑張ってみようと思います
できたらスクリプトを公開しようと思います

このスキルを再現するスクリプトを公開しょうと思います
行動主体者の取得.txt (行動主体者の取得.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
関数呼び出し.txt (関数呼び出し.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
スキルの使用条件.txt (スキルの使用条件.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp
消費MPを0にする.txt (消費MPを0にする.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】 | uploader.jp


スキルで使用するスクリプト.txt (2.29kB)

ダウンロード

これはちょっと適当

この4つで全て再現しました
スクリプトに理解のある人は使い勝手がいいと思います
関数呼び出しとありますが厳密には Game_Battler の関数の
item_apply(user, item) で関数を呼び出すことです
これを使用したのは味方全体の状態異常をランダムに1つ治療するです
(「スクリプトで使用するスキル」に関数を作りました。他にもいくつかあります)
コモンイベントで再現できるのですが @result.success = true にしていないので
「ただし効果がなかった」とバトルログに表示されてしまいます
それを解決するために item_apply で指定した関数を呼び出そうということです

このスキルを使用したとき Game_Battler とは対象がそれに当たります
例えばその対象に攻撃スキルを使用したあと使用者にステートを付与する
こういうスキルは多くありますがわざわざそのスクリプトを作ったり
それだけのためにスクリプトを入れるのは面倒です
その場合こうすればいいのです
<Call user.add_state(state_id)> これで解決(多分)
(2019/10/07:うまくいきました。user.remove_state(stata_id) だけど)
厳密には Call 関数じゃなくて Eval を使用しています
感覚的には Call だし、わかりやすいと思って…
Call のとき関数の引数をどうしようと考えて Eval でいいじゃんってなりました

行動主体者取得のスクリプトは他の人も作っています
対象が欲しい場合は subject.current_action.target_index で取得できます
しかし、対象とは全体だったりランダムだったり複雑なときが多いのです
なので行動主体者のみ取得しました
対象がほしいなら関数呼び出しのほうが使い勝手がいいと思います

行動主体者が欲しかったのは使用者の習得しているスキルを複数回使うスキルです
例としてはペンタマジックです
これは習得している攻撃魔法を連続して3回使用します
そのときコモンイベントで戦闘行動を強○させています
通常の行動の強○はアクターを指定します
「スキルで使用するスクリプト」に Game_Battler を引数にして
行動を強○させるスクリプトがあります
force_action(subject skill_id) で作れます(対象はランダムになります)
(行動主体者を強○させる関数でもよかったけど汎用性を残したかった)
またこの固有技能はMPを消費しないので
スイッチで消費MPを0にできるスクリプトを使って管理しています
もちろんステートのMP消費率を0にするのをつくり付与するのもありです
でもその場合 subject.add_state(state_id) とするのが嫌だっただけです
ステートを新たに作る必要もあってそれも嫌でした

ランダムに使用するスキルを取得するのにスクリプトを使用しています
item_test をして効果がないのは省こうとする予定です
subject.random_skills(subjet.skills) とすると習得しているスキルから
ランダムに使用するスキルを決定できます
このときTPを消費するスキルも含まれてしまうので嫌な人は少し大変です
skills.collect {|id| $data_skills[id].stype == 1 } とかする必要あり
自分はTPを消費しないスキルのスキルタイプが1なのでこうしました
厳密にMPのみを消費するスキルを集めたいのは2行以上必要だから書かない



今後の予定はとりあえずネクロマンサーのアクターを追加するスキルを作成
その後ダンジョンで登場する敵を作ってステータスを決定しようと思います
そうしたらマップやストーリー(なし)に手が触れられます
関数呼び出しのスクリプトはよくできていると思います
使い勝手のいいスクリプトじゃないかなぁと
自分はすごく気に入ってます

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

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

まるちゃん 2019/09/02 17:17

ダメージの期待値を考慮した会心率と回避率について

全然ゲーム作っていませんでした
思い出すために、今までどんなことしてたかまとめようと思います

魔法剣、やっぱり魔法剣だ…
自分は好きなんですよこういうの
攻撃力が上がらないから魔法も合わせるぞ!って脳筋がすき
属性の弱点をつくことで更にダメージを伸ばせる
頭がいいんだけどやっぱりパワープレイ
弱点をついたときのダメージ倍率は 1.5 倍ぐらいがいいのかなと思っています
魔法剣は全属性を網羅すると考えてしまえば
戦闘終了まで弱点によるダメージがついてしまうので 2 倍は強すぎるのかなって

会心倍率を低くすることでクリティカルが発生する確率を多くしようと思いました
攻撃力とクリティカル率の関係について期待値を使って算出します

期待値の求め方(期待値の定義)
金沢大学のページが最初に来たので参考に載せます
自分が説明するとサイコロはどの目も 1/6 の確率で出るはずです
期待値 = 1 * 1/6 + 2 * 1/6 ... 6 *1/6 = 3.5 ってなります
サイコロを降れば 3.5 の数値が手に入るみたいな

今回は斧の攻撃力は他の武器の 1.25 倍の攻撃力に決定しました
その代わりクリティカルが発生しません
この武器と同値になるように会心倍率と会心率を設定しました

おのの攻撃力を W1 とします
その他の攻撃力を W2 = W1 / 1.25 としました
武器の攻撃力は元となる攻撃力の 1/2 となります
つまり W2 は攻撃力全体の 1/3 に当たります
Atk1 = 3 * W1
Atk2 = 2.4 * W1

Dmg1 = Atk1 * 4 - Def * 2 = 12 * W1 - Def * 2
Dmg2 = Atk2 * 4 - Def * 2 = 9.6 * W1 - Def * 2

会心率を cri 、会心倍率 d とするとダメージの期待値は
E = Dmg * d * cri + Dmg * (1.0 - cri)
1.0 - cri はクリティカルが発生しない確率です
Dmg1 と Dmg2 の期待値が同じになるように
会心率と会心倍率を考えます
Dmg1 = Dmg2 * d * cri + Dmg2 * (1.0 - cri)
Dmg1 - Dmg2 = Dmg2 * d * cri - Dmg2 * cri
2.4 * W1 = cri * (d - 1.0) * Dmg2

会心倍率 d を 1.5 と仮定します。多くクリティカルしてほしいから低めにした
Def を 0 と仮定します。防御力が大きくなるほどダメージが小さくなります
ダメージが小さくなると会心倍率も大きくする必要があるからです
Dmg2 の値が 1 のとき
2.4 * W1 = cri * (d - 1.0) となります
cri = 1.0 のとき d = 2.4 * W1 + 1.0
W1 = 10 のとき会心倍率は 25 倍!?となります
しかも会心率が 100 %ととなります
更に武器の性能が上がるほど必要な会心倍率も上昇します
これは考える必要がないでしょう。ダメージは少し違う程度と考えます

2.4 * W1 = cri * (d - 1.0) * 9.6 * W1
d = 1.5 のとき cri = 0.5 で 50 %にする必要があります
d = 2.0 のとき cri = 0.25 で 25 %です
d = 3.0 のとき cri = 0.125 で 12.5 %です
デフォルトは会心倍率が 3.0 会心率が 5 %となっています

武器はちょうど 1.25 倍なので 25 %の会心率はいいなぁと思いました
防御力が0のとき攻撃力が 25 %上昇することが 25 %の会心率上昇と
同じ意味になるということが言えます
そして防御力が大きくなったとき会心率が 100 %だと仮定すると
会心倍率を極端に大きくしないと同じ価値の武器となりません(多分)

以上の結果から、相手の防御力が大きいほど会心率を上げるよりも
攻撃力を上げたほうが効果的だとも言えます

皆さんは会心率を上げるのが好きだと思いますが
それは効果がないということだと思います

でも自分の感覚ではあっているとは思えないんですね
違ったら数学得意な人は答え教えて下さい
やっぱり会心率を上げたほうが効果が高いと思うからです

しんどい。防御力と回避率についても同様に考えます

A2 = A1 / 1.25
Def1 = A1 * 3
Def2 = A1 * 2.4

Dmg1 = Atk * 4 - Def1 * 2 = Atk * 4 - A1 * 6
Dmg2 = Atk * 4 - Def2 * 2 = Atk * 4 - A1 * 4.8

回避率を eva とします。金属鎧は回避率を 0 %と考えました
Dmg1 = Dmg2 * (1.0 - eva)
Dmg2 > Dmg1 なのは防御力が低いほどダメージが大きくなるから
Dmg1 - Dmg2 = -Dmg2 * eva

1.2 * A1 = Dmg2 * eva

Atk = A1 *2 のとき
防具も武器と同じようにステータスの半分の値をとっていると考える
1.2 = 3.2 * eva
eva = 0.375

Atk = A1 *3 のとき
1.2 = 7.2 * eva
eva = 0.166...

Atk = A1 *100 のとき
1.2 = 395.2 * eva
eva = 0.003

ダメージが大きくなるほどダメージに差がなくなります
そうすると回避率が大きいほど効果が大きくなります
防御力を 25 %上昇させるより回避率を 25 %大きくしたほうが
戦闘を有利にすることができます
つまり、相手の攻撃力が高くなるほど防御力を上げるよりも
回避率を上げたほうが効果的
だと言えるのです

悩んでいるところがあって
やっぱりこれは正しいのか?ということです
本当に回避率を 25 %ぐらいにしていいのか
ボス戦で攻撃力が大きくなったとき回避率が 25 %もあると
回避率がないけれど防御力の高い防具と
回避率が高くて防御力が低い防具は同等の価値をえることができるのか
やっぱり防御力を上げたほうが強いような気がする

多分回避率を持つ防具の回避率を 10 %ぐらいにしてしまおうかと思います
また俊敏性によって回避率を上昇させたりするので小さくても…

デフォルトにある luk_effect_rate というステートを付着させる際に
運の値によって付着率が変化する割合を求める関数があります
1.0 + (user.luk - luk) * 0.001 と求めます
今回ステートの最大値は 9999 なので 500 の違いが 1.5 倍となります
ちょうどいい塩梅です
防具で 10 %にして盾で 5%ぐらいにすればいいかなぁと今は思っています

できるだけ同等の価値を持つように防具を作りました
少し問題ができて盾の防御力を低く設定していたので
それだけ盾の価値が下がってしまったことです
困るのは強い盾が早く購入できてしまうということです
なので盾に魔法防御力が上がる能力をつけることにしました


今できたのはアクターのステータスの決定、防具の設定
あとはモンスターが与えるダメージを考え
モンスターの能力値を決めることです

属性魔法や魔法剣みたいなスキルを決定して
職業固有の必殺技のスキルを早く考えて
ゲームを作ることにしたいです
今まではゲームを作るために必要な設定しか考えていません
やっとゲーム制作に取り掛かる気分です

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

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

まるちゃん 2019/08/31 11:17

ステータスと武器の攻撃力の決定

魔法の属性の数について悩んでいます
自動で最高ダメージを算出してくれるので数は多いほうがいい
これは僕の中で変わらない結論です
で、僕が悩んでいるのは魔法剣のアニメーションって
デフォルトだとなんで3種類しかないんですか!?ってことです
属性が3つしかないのは少なすぎるからだめ!

素晴らしいサイトがあっておぉって思ってます
真・なまものノなにか
魔法のアニメーションはこれでいいんだけど
確かに属性の斬撃があるんだけどデフォルトのほうがかっこいい
炎、氷、雷はしっかりグラフィックが用意されてる
やっぱりこれと見比べると見劣りしちゃう
かっこいいのがいい!バタバタバタ

武器とステータスの関係(持論)

基礎ステータスの決定と武器のステータス

とりあえず今はステータスをある程度決定できました
武器の上昇値を決定するのにステータスを決定する必要がありました
デフォルトだと武器の最大数値は 500 までしか設定できません
最大HPとMPは 5000 まで設定できます
(僕の能力値自由設定のスクリプトは限界を突破できるし小数点も使えます)
ネプテューヌしか見てないんだけどやっぱりこれもだと思います
武器のステータスは攻撃力の半分くらい
ゲーム作れない人はこれぐらいいってもらわないと本当にわからない
感覚的にすべてゲーム作れる人が憎い

例えが悪いんだけど xy の二次元座標で直線を決めるには
最低2つの点が必要です。もしくは傾きと1つの点

アクターのステータスとエネミーのステータスは関係がある
これはゲームが作れない人でもわかることだけど
アクターのステータスとエネミーのステータスをどう決めるの?
これがゲーム作れない人にとってはわからない

関係があるから直線を引きたいんだけど点はどこなの?って感じ
傾きは何回で敵を倒せるかってことなんだとわかっている
点はどう決定すればいいの?
感覚の人はこう返す。「え?好きに決めればいいじゃん」
決められないんだよおおおぉぉぉぉぉ

自分はこう決めました。ステータスの最大値が 9999 とわかったからです
xy 座標で x はレベル y はステータス( Atk, Def, Mat, Mdf, Agi, Luk )
0 < x < 999, 0 < y < 9999 とすれば理数系の人はわかりやすい
攻撃力の高いアクターが武器を装備した状態で 9999 程度になればいい
さらにバフがかかるのでバフを考慮する必要もある
9999 / 1.5( バフ ) / 1.5 ( 装備 ) = 4444
レベルの最大値は 999 なのでこのときに 4444 程度になれば良い
また装飾品とかである程度上昇する分もあるかもしれない
最低でも 3000 ~ 4000 程度の数値を取るべきかな
4000 / 999 ( レベル ) ≒ 4.0
ステータスの上昇値は 4.0 以下にするべきだ
僕はこれでやっとレベルアップによるステータス上昇が決められました
初期値はデフォルトを使用することにしました 15 です
15 + level * d ( d は定数 0.0 < d < 4.0 )
1次職は d の最大値を 2.0 最小値を 1.0
2次職は d の最大値を 3.0 最小値を 1.0
3次職は d の最大値を 4.0 最小値を 1.0
とすることにしました
さらにステータスの合計値が同じになるようにしました
1次職は 9.0 とすることにしました。0.2 刻みで考えました
戦士は今こういう感じです

戦士 Atk 2.0, Def 2.0 Mat 1.0, Mdf 1.0, Agi 1.8, Luk 1.2
Mdf の魔法防御力が低いかなぁと思います
でも盾で魔法防御力を大きく上げることができます

とりあえず最大値の上昇を考えて
その半分となる数値を武器と防具の能力値とすることにしました
斧(Cri 0 %).csv (斧(Cri 0 %).csv) ダウンロード | ゲームデータ
デフォルトにあった斧の武器データから他の武器の性能を考えました
同値になるように会心率の決定とか能力値を決めました
明日つくる予定のダメージ計算でまた話します

価格の決定は 価格 / 攻撃力 が徐々に大きくなる形にしました
1攻撃力あたりの価格が大きくなるので損していく形です

HPとMPの決定

そして忘れていけないのがHPとMPの決定です
HPは狙われ率を考慮すると同値になるようにしました
例えば狙わ率が 100% の人の最大HPを 1000 としたとき
狙われ率が 50% の人の最大HPを 500 にするという感じです

HPも最大値から考えてもいいかなぁと思いましたが
やはり考えるべきは回復との関係だと思うことにしました

ネプテューヌから持ってきたアイテムの価格と効果です
100 ゴールドで 1000 回復できるアイテムを購入できる
ネプテューヌの初期武器は 100 ゴールドで同値でした
ネプテューヌの初期HPは 1000 でした
デフォルトは 50 ゴールドで 500 回復する
初期武器の値段は 100 ゴールドで、HPの初期値が 400 です
(レベルアップによる上昇は 50 で初期HPは 450)

わかっちゃいました。初期HPは 1000 で決定です
デフォルトでハイポーションの値段は 150 ゴールドで 2500 回復します
レベル 42 で最大HPが 2500 になります(ベースだと)
あんまり参考になりません

1500 ゴールドでHPを 5000 回復するアイテムがありました
1500 ゴールドで買える武器の想定レベルが 75 としていました
これに合わせる形にすることで1次職のHPの成長値を決めました
1000 + 75 * 定数 = 5000 となる定数は 53.333 と出ました
じゃぁ、50 でいいかなと 50 と決めました
1000 + (level - 1) * 50 をベースとなるHPとすることで決定しました
2次職、3次職も決める必要がありました
でもこれは最大値が 99999 とすることで適当に決めちゃいました
99999 / 1.5(バフ)= 66666 に装飾品を考慮する必要があります
66666 / 999(レベル)= 66.6 が最大上昇値だと思います
でもバフは考慮しなくていいかなぁってなって思っています
それというのも最大HPバフを作るのですが特定の職業だからです
そうすると最大上昇値が 100 程度になるので3次職の上昇値をこれにしようと
結果として1次職は 50 の上昇値
2次職は間を取って 75 にして3次職を 100 にしました
職業チェンジによる恩恵を出したかったのでそうしました
あとは狙われ率を考慮してHPを変化させようと思います

MPは正直まだ決めていません。取り合えず最大を 9999 としました
ネプテューヌがそうだったというのもあるのですが
戦闘画面の大きさ的に4桁が妥当じゃないかと思いました
もちろん 640 x 480 のサイズにすればいいのですが
戦闘背景はデフォルトを使う予定なので4桁で妥協しました

ステータスの決定の仕方は使えるスキルのコストを考えることです
どのスキルを1回の戦闘で何回使うことを許して
その戦闘回数が何回なのかを決定するやり方です
とりあえず今はスキルの威力とコストを表示して後で決定します

■ 1次職が使用可能なスキル
1.2:4「2回攻撃」0.6 * 2
1.6:6「強攻撃」「魔法攻撃」
2.0:8「属性魔法」

■ 2次職が使用可能なスキル
2.4:10「3回攻撃」 0.8 * 3
2.8:12「強攻撃Ⅱ」
3.2:14「属性魔法Ⅱ」

■ 3次職が使用可能なスキル
3.6:16「4回攻撃」 0.9 * 4
4.0:18「強攻撃Ⅲ」
4.4:20「属性攻撃Ⅲ」
4.8:22
5.2:24
5.6:26「属性攻撃Ⅳ」

威力 / コスト
0.300, 0.266, 0.250, 0.240, 0.233, 0.228, 0.225, 0.222, 0.22

威力 / コストなので単位コストあたりの威力です
これは数値が低いほど損しています。高いほど得をします
コスト4の威力 1.2 の技を2回使用するとコスト8で威力は 2.4 となります
威力 2.4 のコストは 10 なので損をしています
コストを偶数にしているのはMP消費が半減する装備を見ているためです

ネプテューヌもMPの最大値は 9999 なのですがコストは高く設定しています
(最大のコストは 1250 あたりだったと記憶。低いのでも 100 程度はある)
そうすることによってMP消費スキルの価値を高めています

しかし自分は長い戦闘を自動で行うのでコストを低く設定して
何度も戦闘で使えるようにしました




とりあえず今は色々考えてるのですが戦闘アニメーションで躓いています

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

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

まるちゃん 2019/08/25 13:51

ステートの作り方。継続ターンについての考え

スクリプトをいくつか更新した
ちょうどゲーム制作にも詰まっているので
一度整理するためにも記事を作ろうと思ったけれど
ちょうどアマゾンの接続障害?の影響なのか Ci-en が落ちてた
気分的に今やろうと思ったのでスクリプトをまず公開して
あとはステートに関する自分の考えを書いておこうと思う

限界突破.txt (限界突破.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】
職業欄に最大レベルの設定、能力値自由設定を使用、スキル習得の上限突破をつけた
自動戦闘.txt (自動戦闘.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】
自動戦闘はパーティーコマンドにオート出るようにちゃんとした
確認はしてない!限界突破も…
今度…、今度からする…かも


ドラクエは7ぐらいまでしかしたことがないけれど
ドラクエにはステートという概念がない。薄いといったほうが正確だと思う
毒になったり麻痺になったりするが
スクルト、ルカニといった魔法にステートという感じではない
でも僕たちは今スクルトとルカニがどういふうについてるか把握できている
テリーのワンダーランドもやったことがあるので
他にもボミオス?とかあるのは知っているが
スーパーファミコンのドラクエの話をしようと思う

他にはマヌーサとか睡眠状態もあった。でもやっぱり把握できている
そこにはまず優先度がある
戦闘不能、麻痺、睡眠の順に優先度がついている
行動できるかどうかがプレイヤーにとってほしい状態だからだ
行動できない場合はキアリクやザオラルで解決する必要がある
だからそこは戦闘のステータスに表示している

次にステータスの変動があるのにステートがないけれど
やはりプレイヤーは状態を把握していると思う
それというのも、この状態というのが戦闘中ずっとだからだ
しかし敵はルカニを使うので、使った瞬間にプレイヤーは
「あ、スクルトもう一度かけておくか」と把握できる
次にスクルトをもう一度かけないといけない状況というのが
敵がいてつく波動を使った場合だ。音も大きくわかりやすい

ドラクエには継続ターンという概念が薄い
麻痺も治療しない限り戦闘後もずっと続く。毒も同様に
多分これがわかりやすいという状況だと思う

自分もこれに習って戦闘中ずっとというのもいいかと思ったけれど
バフやデバフは TP を消費して使用するので
何回かプレイヤーに使用させて TP を消費してもらいたい
そうすれば他の強いスキルを使えなくさせることができる
なのでバフやデバフは継続ターンをもたせたい
けれども VXace のバフはドラクエと比べて多い。そして全部使いたい
ステータスは MP を除いて7つもある
そして戦闘中に表示できるステートの数は2つしかない

全ステート表示.txt (全ステート表示.txt) ダウンロード | VXace スクリプト 【 作成者:まるちゃん 】


しかたないからスクリプトを使用してゲージを廃して
ステートだけを表示することができるようにした
今思ったらステートの優先度を考慮するのを忘れていた
ステートを付与するとき(add_new_state) sort_states というので
優先度順にソートをしていました。問題ないです

でもやはり多すぎるステートをプレイヤーはいつ着けたのか把握できない
なのでこのターン中に解除されるステートだけ半透明にして表示した
ある程度はこれで理解できると思う。外れるタイミングがわかればいいはずだ
他にステートはできるだけ次のターンまでの間このターンの間
これにすることにした。そうすれば戦闘ログを見ていれば把握できる
他所のスクリプトに継続ターンを表示するものがあったので使おうと思ったが
自分は目が良くないので把握することが難しかったのでやめた

今回のゲームでは継続ターンをできるだけ持たないようにすることにした
状態異常は毒と呪いのスリップダメージは戦闘後も継続
麻痺はすぐわかるように優先度を高くする
混乱はこのターンの間だけにすることにした
継続ターンがあるステートは以下の3つにすることにした
・HP自動再生
・状態異常防止
・魔法習得(これは次のランクの魔法を習得する)
そうすればバフデバフに加えて上記の3つのステートの優先度を高くすればいい
10個程度のバフが表示できればいいと思う。幅にして 240 px だ
240 の残りは HP を表示してもいいかなぁと思っている

MP と TP の自動再生がないのは戦闘を長引かせると考えたからです
MP はターン毎に 10 %回復するとしても5ターン戦闘を長引かせれば
半分の MP を回復させることができる。プレイヤーは戦闘を長引かせるだろう
HP の自動回復だけ許したのは戦闘終了後に HP を全回復させるからだ
今回のゲームは戦闘が多いので終了後にいちいち回復させる手間を取らせたくなかった
そうするとザコ敵を少し強くする必要があるので大変そうだ
戦闘を長引かせるステートは作らないほうがいいと思う

以下は進捗状況
今は武器と防具の名前を考え終わったから価格と強さを決める必要がある
ここらへんでモチベが少し下がった
今回は限界突破してレベル500程度を目安にしている
そのせいで武器と防具を多く作る必要がある
自分は名前を考えられないので歴代ツクールのものから持ってきて
さらに武器にグレードをつけることにした
熟練度をつけて武器を成長させればいいのだが
プレイヤーに武器をアップグレードするために金を消費させたかった

ショップについて悩んでいる8種類の武器があって
さらにそれぞれ6つの強さがある。更にレベルがあり24この武器がある
CACAO のショップ分類を使い合成システムを使えば楽だと思う
でもつけている武器のランクを上げたいから個別に作ってもいいかなぁって
CACAO の合成システムは難しくて嫌だなぁってわがまま

アイテム合成.txt (41.11kB)

ダウンロード

これは KGC にあった rgss2 のスクリプトを rgss3 にしました
問題があったらコメントで知らせてください
利用規約を見る限り自分は問題ないと思いました

これを使いたいなぁって思ってるけど分類と噛み合わない
武器の種類ごとにイベントを作ってもいいのかなぁと考えています
他には限定的に今のレベルに応じて表示できる武器を変えたりとか?
金を払って武器屋のレベルを変更して品揃えを良くしたり
ネプテューヌでは全て表示していて使いづらかったけど
女神様がそうなら僕もそれでいいかなぁって…
色々考えすぎてモチベが下がっています

あとスキルも考えられていないのでスキルを考える必要がある
そしてやったことがない敵のステータス作成だ
もちろんレベルも増やしたので敵の数も増やす必要があるのだが
面倒なので敵にレベルを作ることで回避した

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

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

5 6 7 8 9 10 11

月別アーカイブ

限定特典から探す

記事を検索