投稿記事

RPGの記事 (11)

ほかふた 2024/03/17 19:08

【雑記】VXAce_マップの作り方

おはこんばんちは、ほかふたです。

今回は進捗報告ではなく雑記のみで
主にツクラーさん向けの記事となります。
ツクールのマップの作り方について載せておきます。

とはいっても、VXAce自体12年くらい前のツールなので
ネットを散策すれば既出な部分もあるかもしれないですし、
公式の方でも作り方のページがあり、
実はあっちの方が詳しく書いてあったりしてるんですが、
あくまでも自己流でこうやってるよという感じで書いていきます。

前提として、RPGツクールのエディター上での作成のみで、
外部ツールなどを使った加工などは一切しないこととなります。


まず、世界観からなんですが…って書こうとしたんですけど
そこはもう設計段階なところなので前提事項はスキップします。

マップにも色々な地形が存在し、それぞれ作り方が異なるのですが
ここでは「外観の山」の作り方を紹介しようと思います。

幾つかマップを作ってきた自分の経験上、
外観だと「沼地 ≧ 山 > 草原 > 洞窟(森)」の順で難易度があります。
(街の外観や建物関連はもはや別ジャンルなので除外してます)

差が生じる一番の理由として、「高低差」のあるなしですね。
山は言わずとばかり高低差のオンパレードです。
マップ作成は平面ですけど、ある程度立体を想像しないと
不可能図形状態になりかねません。
沼地は世界観によりけりですが、自分の場合は
水と高低差を多用するので結構細かい作業を要します。

なので、難しい(と思われる)山をピックアップしてみました。


とりあえず、先に完成図を載せておきます。

「FSMマップ素材集」のマップチップを使用しています。
こちらは有料素材なのですが、これから記載する全体の流れは
RTPでも同じやり方でできるかなと思います。


まず、鉛筆でも範囲ツールでもいいのでA2(地形)で
ベースより暗めの色もしくは全く違う地形(砂とか…)で
全体像をベタっと塗ります。
そのあと、画像の左側のように段差をつけていきます。
段差はもちろんA4(壁)を使っていきます。
(A2とかA4というのはデータベース内にあるタイルセットの項目です)

普通に壁を使っていくと壁の二段目からはオートタイルだと
くっ付いてしまうので、合間にA2(地形)で塗っていきます。
Shiftキーをおしっぱで塗ればオートタイルを崩さずに塗れます。(重要)
壁タイルのギリギリまで地形で塗っていけば後の工程が楽になります。

画像の左側のように「壁 → 地形 → 壁 → 地形…」と繰り返せば
複数の段差を作ることができます。
山で言う低いところから作っていくことを意識しましょう。


繰り返していくとこんな感じになりました。
ある程度の段差ができたら、スポイト(右クリック)
塗られていない端っこ部分も塗っていきましょう。
(この時、Shiftキーおしっぱも忘れずに…!)

壁と壁が隣接するとオートタイルの影響でくっ付いてしまうので、
Shiftキーおしっぱは滅茶苦茶重要になってきます。

壁を作る際の注意点として、「縦における壁チップの使用数」です。
一気に三段上がっている、一段平地挟んで二段といった高低差ですね。
ここは正直想像力との戦いで、こういった段差の工夫が上手くできれば
より理想の山岳地帯ができるんじゃないかなと思います。
また、高さをちゃんと合わせないと不可能図形的なものになってしまうので
複数の高低差を採用する場合はこの辺も注意しましょう。

ここまでの土台ができてしまえばあとは調整と草を生やすだけなので
土台まではキッチリと作っていきましょう。


草を生やしたり、整地したりしてみました。
茂みはオートタイル関係なく上から塗ることができるのですが、
土など異なる地形を塗る場合は壁タイルと隣接すると崩れてしまうので
Shiftキーを使ってうまいこと調整しましょう。
この作業は苦行なので今回はなるべく避けた位置に土などを配置しています。

ついでに、階段も増やしたりして探索範囲を広げさせます。


これは「FSMマップ素材集」ならではの工程なのですが
壁の端っこ部分に丸みをつけてより雰囲気を出してみました。
この作業もShiftキーが欠かせません。
RTPだと元から丸い(と思う)のでこの工程はパスしてもいいかなと…

ついでに、橋を架けてみました。
橋ってやっぱり遠景に合わせて架けたいですよね。
今回は縦につなぐ橋もあって、一部欠けていますが
これは立体交差になるので後でイベントとして配置します。


植林をしてみました。壁にも装飾を付けています。
地形によりけりですが、通行の妨げを考慮し木の数は少なめです。
通行不可能の場所にはたくさん植林しても問題ないかなと思います。

個人的に、マップの端っこには行かせたくないので
1~4マスくらいの猶予を設けて木など障害物をつけています。
(右端はミニマップを出しているので4マス以上設けています)
エリア移動による端っこは広くなさすぎなければ許容でOKかなと。

あと、一部の木にイベントが仕込まれていますが
VXAceだと上層レイヤーしかないのでイベントで無理やり
最上層レイヤー的なものを配置しています。
これも多すぎるとマップが重くなるので最小限で…

橋の立体交差イベントも配置してみました。
折角なのでやり方も載せておきますね。
橋それぞれに下のギャラリーの通りにイベントを仕込めばOKです。


※リージョンはここにイベントを配置するよという意味として
 使っているだけなので実際は不要です。
(ギャラリー内の1番目のイベントがリージョン1と
 いった感じで順番に紐づいています)

スイッチが一つ必要で、これで高いところにいるかの有無を判断します。
橋の手前にそのスイッチのオンオフのイベントを設置します。
(このマップだと必ず通行する双方の階段に設置しています)

すごいざっくりですがこれで立体交差が実現できます。


あとは装飾を追加して完成です。
実をいうと植林と装飾に関しては違和感ない程度に適当にやってます。
強いて言えば、装飾同士なるべく隣接させないようにしてます。
少しくらいなら隣接しても問題はないですけど
あんまり装飾が多いとごちゃごちゃすると思うので
気持ちちょっと離して置いた方が綺麗になるのかなと…

岩や倒木など、通行不能地帯は植林と同様
あんまり通行の妨げにならないよう置きすぎないようにしています。
自分はシンボルエンカウントを採用しているので
狭すぎちゃうと回避できなくなっちゃうので注意しましょう。

もう一つ注意してることがあるとすれば
自分のゲームでは採取ポイントがあるので
ちょっと珍しそうなオブジェクト(植え込みだったりキノコだったり…)は
なるべく道端にはおかず、通行不可能地帯に設置しています。


これで完成です。
マップが完成したらちゃんと歩行チェックもしましょう。
橋の立体交差も問題なく動いてますね。
でも、想定外なところをすり抜けてしまい、
状況によってはシステムの抜け穴になってしまうので気を付けましょう。
(もちろんCrtlキーは押してません…)

終わりに

Shiftキーを制する者はマップ作成を制します。
なんて書きましたが、主に二段以上の高低差が発生する場合に
Shiftキー操作は避けられないのかなと思っています。

世界観や想像に関してはここでは触れませんでしたが
正直に言ってしまうとそこも必要なのも否めません。

ちなみに、1マップにおける所要時間ですが、
こちらのマップだと2時間くらい掛かりました。
大きさによりけりで、平均でそのくらい掛かる感じです。

「マップサイズはどのくらいがいいの…?」って
疑問に思う方もいると思いますが、
ひとまず50~60位がちょうどいいのかなと勝手に思っています。
なお、自分は過去にマップが広すぎるとお叱りを受けたことがあります…
広すぎたり、イベントが多すぎたりすると処理が重くなって
カクカクになってしまうので気を付けましょう。
そしてもう二度とこんなマップは作りません。

自分なりの参考をお見せしましたが、
これで少しでもゲーム制作の参考になると嬉しいです。

また、もし需要があったら
他の地形のマップ作成の記事も載せようかなと思います。

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

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

ほかふた 2024/03/09 15:58

【双種】202403_進捗とか


おはこんばんちは、ほかふたです。

年が変わってようやくの更新ということで
あけましておめでとうございました。

1月と2月前半はメイン仕事が周年対応とかリリース対応とか
激ヤバ状態だったのでこっち側にほとんど手がつけられていませんでした。
最近はちょいちょい落ち着いてきて空いた時間に
制作を再開したという感じです。

過去作と比べて一日における制作時間が大きく減ってしまっているので
進捗はローペースなままですが、モチベはなんとか保っている状態です。

進捗のネタに関してもだいぶ被ったり尽きたりと
なにを載せようかなと考えていたのですが、
そういえばCi-enはじめてからこの記事ないなと思って
「マップ作成」について書いていこうかなと…


こういう世界観づくりには欠かせないやつですね。
自分はこういった外観づくりは結構こだわって作ってるんですが
建物だけはどうしても納得のいくものができなくて
結局世界観上拠点だけになってしまうというオチが続いてます。
マイクラでも家作ろうとするとどうしても豆腐ハウスになります。

建物ばかりのごちゃごちゃしたものよりも
自然系に溢れた場所が好きという面もあるのかもしれません。

フォロワー以上宛にはもうちょっとマップを公開していますが
過去作のマップを改修したりしたものがメインですので
チラッと覗く程度で見ていただけると幸いです。

次回の更新(予定)

Ci-enの更新頻度も変わらず不定期更新となりますが、
6月あたりに更新が入るようにします。

ポチっといいねを付けていただけると
今後のモチベーションに繋がりますので
どうぞよろしくお願いいたします。

フォロワー以上限定無料

マップ作成について

無料

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

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

ほかふた 2023/09/01 00:17

【双種】202309_進捗とか


おはこんばんちは、ほかふたです。

結構間が空いてしまいましたが
ゲ制の方はじっくりまったりと進めております。
今後はちょこちょここういった生存報告的な感じで
載せていく流れになるかなと思います。

今回は全体記事メインとなり、
フォロワー以上の記事はちょっとしたデータベース関連の雑記となります。
ゲーム画面やキャラクター紹介はございません。

ちょっと悪いお知らせからになってしまうのですが
ゲーム制作の進捗状況が思わしくなく、
今後の見通し的に2024年公開は難しいんじゃないかなという状態です。

作り始めた時は「色んな女の子・成長・探索」を題材に
ハクスラ要素を少しずつ埋め込んで最低限な部分があれば
いいんじゃねと思って作っていったのですが…作っていくうちに
やりたいことが増えていき規模が膨大になっていくことからです。
(あと単純に制作時間が足りない部分もあります…)

その大部分がデータベースに関する事であり、
なにがどうなってんだという話もちょこっとフォロワー以上宛に後記します。

考えた案の中で幾つか廃止する箇所もあるかもしれないですが
今作もやっぱりやり込み要素も充実させたいため
より期間を設けないと実現は厳しいんじゃないかなと…

公開日はいつになるのって話になると思いますが、
自身の見積りの甘さの部分もあり、具体的な日程は算出できないです。
(2024年もあくまで「当時の企画内」での目標だったので…)

2025年目標にします!って言ってまた延期しますってなったら
また期待を裏切ってしまうことになるので、ここでは公開日は明記しません。

制作を断念しますというわけではなく
ちょっと進行速度がローペースなだけであり、
今後もじっくりまったりと制作を進めていくつもりです。
公開日付は目処が経ったら改めて公表しようと思います。

このような形となってしまい大変申し訳ございませんが、
なるべく遅くなり過ぎず、忘れ去られないように
定期的に更新もかけますのでご理解いただけると幸いでございます。

次回の更新(予定)

Ci-enの更新頻度も変わらず不定期更新となりますが、
ひとまず年末辺りを境にもう一度更新が入るようにします。

文字ばっかりでアレかもですが、さーっと目を通して
ポチっといいねを付けていただけると
今後のモチベーションに繋がりますので
どうぞよろしくお願いいたします。

フォロワー以上限定無料

続・データベース設計

無料

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

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

ほかふた 2023/05/26 17:22

【雑記】VXAce_スキル計算式について

おはこんばんちは、ほかふたです。

今回は進捗報告ではなく雑記のみで
主にツクラーさん向けの記事となります。
ツクールのデータベースにあるスキル計算式に関して載せておきます。

ちょうどこの部分ですね。
簡単設定を行えば基礎ダメージをベースに打撃(魔法)関係度を
いじって計算式を決定することができます。

単純な計算ならこれだけで事足りると思いますが、
計算式項目欄には様々な計算式を入力することが可能です。

VXAce自体12年くらい前のツールなのでネットを散策すれば
既出な部分もあるかもしれないですが、自分用としても使いたいので
ここではどのような計算式が使えるのか…というのを載せています。
書いていたら滅茶苦茶長くなってしまったので流し程度に…
あと、ゲーム制作の参考にできたら嬉しいです。

まず、基礎として…
――――――――――――――――――――――――――
mhp :最大HP mmp :最大MP
hp :現在HP mp :現在MP tp :現在TP 
atk :攻撃力 def :防御力
mat :魔法力 mdf :魔法防御
agi :敏捷性 luk :運
level :レベル

a.atk の場合は、使用者の攻撃力
b.def の場合は、対象者の防御力

v[X] :変数nの値 v[1]の場合は変数1の値
―――――――――――――――――――――――――
ここまではツクールのスキル計算式にカーソルを合わせると
ヘルプで出てくるやつですね。

~他に使える能力値参照~
―――――――――――――――――――――――――
hit :命中率 eva :回避率
cri :会心率 cev :会心回避率
mev :魔法回避率 mrf :魔法反射率
cnt :反撃率
hrg :HP再生率 mrg :MP再生率 trp :TP再生率

―――――――――――――――――――――――――
追加能力値も計算式として使用することができます。
注意点として…
aの命中率が100の場合、a.hitと入力した場合は 1 が入ります。 
aの会心率が3の場合、a.criと入力した場合は 0.03 が入ります。
スキル計算の最終結果は小数点以下切り捨てになるので、
これらを実数値として出す場合は×100させてあげる必要があります。

―――――――――――――――――――――――――
tgr :狙われ率 grd :防御効果率
rec :回復効果率 pha :薬の知識
mcr :MP消費率 tcr :TPチャージ率
pdr :物理ダメージ率 mdr :魔法ダメージ率
fdr :床ダメージ率 exr :経験獲得率

―――――――――――――――――――――――――
特殊能力値も追加能力値と同様です。
デフォルトだと100が初期値だと思うので、その場合は 1 が入ります。
特殊能力値で狙われ率を 90% にした場合は 0.9 になります。
武具等の特徴欄で設定する特殊能力値の重複計算は乗算なので
これらを設定する場合は注意が必要かも…

―――――――――――――――――――――――――
a.element_rate(X)
―――――――――――――――――――――――――
属性IDの有効度を取得します。カッコ内の X は属性IDが入ります。
100が初期値だと思うので、その場合は 1 が入ります。

―――――――――――――――――――――――――
a.state_rate(X)
―――――――――――――――――――――――――
ステートIDの有効度を取得します。カッコ内の X はステートIDが入ります。
100が初期値だと思うので、その場合は 1 が入ります。

―――――――――――――――――――――――――
a.states.size
―――――――――――――――――――――――――
現在得ているステートの数を取得します。
能力強化・弱体はカウントに含まれません。
バフ、デバフ構わずカウントするので使い方に注意…

―――――――――――――――――――――――――
a.hp_rate
a.mp_rate
a.tp_rate
―――――――――――――――――――――――――
対象者の現在の割合値を取得します。
上からHP、MP、TPの残り割合値となります。
最大HPが100で残りHPが38の場合は0.38が入ります。
MPに関しては最大MPが0の際は0が入り、割る数も考慮されています。
ただし、TPに関してはtp_rateの呼び先を見ると割る数が100に
なっている為、何らかの操作で最大TPが可変になる場合は注意が必要です。

~他に使えそうなもの~
―――――――――――――――――――――――――
$game_switches[X]
―――――――――――――――――――――――――
スイッチのX番の状態を取得します。
単品では使用できず、後記にある条件演算子と組み合わせる必要があります。
ONの場合は真、OFFの場合は偽になります。

―――――――――――――――――――――――――
$game_troop.turn_count
―――――――――――――――――――――――――
現在のターン数を取得します。
バトル以外で使用した場合、直前のバトルの最終ターン数を取得します。

―――――――――――――――――――――――――
$game_party.gold
―――――――――――――――――――――――――
現在の所持金を取得します。

―――――――――――――――――――――――――
$game_party.item_number($data_items[X])
―――――――――――――――――――――――――
アイテムの所持数を取得します。XにはアイテムIDが入ります。
「$data_items」の部分を「$data_weapons」「$data_armors」に
変えれば武器、防具のIDを取得できます。
ただ、これだけで入力可能文字数の
4割は持っていかれるのであまりお勧めはしません…

―――――――――――――――――――――――――
$game_party.steps
―――――――――――――――――――――――――
現在の歩数を取得します。

―――――――――――――――――――――――――
$game_system.save_count
―――――――――――――――――――――――――
現在のセーブ回数を取得します。

―――――――――――――――――――――――――
$game_system.battle_count
―――――――――――――――――――――――――
現在の戦闘回数を取得します。
逃走回数は(多分)内部的に持っていないみたいなので、
イベントコマンドのバトルの処理内にある「逃げた場合」や、
スクリプト内の逃走処理の中身に変数として加算していけば
チキンナイフ的な計算式も作ることが可能です。


演算子

―――――――――――――――――――――――――
a.atk ** 3
―――――――――――――――――――――――――
あまり使わないかもですが、累乗が使用可能です。
上記の場合だとa.atkの3乗、つまり「a.atk × a.atk × a.atk」になります。
攻撃力の3乗は考えただけで恐ろしいですね…

―――――――――――――――――――――――――
a.atk % 5
―――――――――――――――――――――――――
これもあまり使わないかもですが、余剰も使用できます。
上記だと、a.atkを5で割った余りが算出されます。
後記で説明する条件演算子と組み合わせると
○○の倍数の場合といった条件式を作ることが可能です。

―――――――――――――――――――――――――
X == Y ? M : N
―――――――――――――――――――――――――
条件演算子が使えます。
プログラム言語が分からん人向けに一応細かく書いておきます。

「?」を境目に、左辺が条件式、右辺が分岐結果になります。
右辺の「:」を境目に、「M」が真(TRUE)、「N」が偽(FALSE)です。

簡単な例として…
「a.mhp == a.hp ? a.atk * 10 : a.atk * 4」
この式だと、使用者の最大HPと現在HPを比較して同じだった場合、
「a.atk × 10」、それ以外の場合は「a.atk × 4」を見ます。

左辺の条件式ですが、ここも色々な使い方ができます。
まず、比較演算子ですが…
== :値が等しければTRUE
!= :値が等しくなければTRUE
> :値が大きければTRUE
< :値が小さければTRUE
>= :値が同じか大きければTRUE
<= :値が同じが小さければTRUE

とりあえずこれだけ覚えておけばOKかなと。

調べてみたら、論理演算子も使用可能です。
&& :条件が両方成立すればTRUE (AND)
|| :どちらかの条件が成立すればTRUE (OR)

論理演算子の使い方は説明すると長くなるので
以下のような感じで使えばOKです。

「a.mhp == a.hp && a.mmp == a.mp ? a.atk * 10 : a.atk * 4」

使用者の最大HPと現在HPが同値、使用者の最大MPと現在MPが同値ならば
「a.atk × 10」、それ以外の場合は「a.atk × 4」を見ます。

「a.mhp == a.hp || a.mmp == a.mp ? a.atk * 10 : a.atk * 4」

この場合は、どちらか片方を満たしていれば「a.atk × 10」を見ます。

条件演算子は使いこなせると
色んなバリエーションができると思いますので、
細かい計算を作りたい場合は是非ともマスターしてください。

関数

―――――――――――――――――――――――――
a.state?(X) ? M : N
―――――――――――――――――――――――――
使用者はステートID「X」に
なっている場合に真、そうでない場合に偽を見ます。

―――――――――――――――――――――――――
a.skill_learn?($data_skills[X]) ? M : N
―――――――――――――――――――――――――
使用者はスキルID「X」を
取得している場合に真、そうでない場合に偽を見ます。

―――――――――――――――――――――――――
b.movable? ? M : N
―――――――――――――――――――――――――
対象者が行動可能状態の場合は真、そうでない場合に偽を見ます。

―――――――――――――――――――――――――
b.guard? ? M : N
―――――――――――――――――――――――――
対象者が防御状態の場合は真、そうでない場合に偽を見ます。

―――――――――――――――――――――――――
a.weapons.include?($data_weapons[X]) ? M : N
a.armors.include?($data_armors[X]) ? M : N
―――――――――――――――――――――――――
使用者は武器ID「X」、下記は防具ID「X」を
装備している場合に真、そうでない場合に偽を見ます。
参照できるのは使用者だけかなと…敵は装備という概念がないので
対象者(b)を使用する場合は注意が必要です。

―――――――――――――――――――――――――
rand(N)
―――――――――――――――――――――――――
0~N-1までの数値をランダムに算出します。
「rand(5)+1」で1~5のうちランダムに算出します。
そのまま使うと0も抽選されちゃうので0を含めたくない場合はこのように。

―――――――――――――――――――――――――
[M, N].max
―――――――――――――――――――――――――
比較関数というやつで、MとNを比較して高い方を取得します。
「[a.atk, a.mat].max」と入力すれば
攻撃力と魔法力を比較して高い方を取得できます。

―――――――――――――――――――――――――
[M, N].min
―――――――――――――――――――――――――
上記とは逆で、MとNを比較して低い方を取得します。

―――――――――――――――――――――――――
$tm = a.atk * 4 - b.def * 2; $tm * rand(2)+1
―――――――――――――――――――――――――
関数という類ではないですが、ローカル変数やセミコロンも使用できます。
上記の場合だと、先に攻撃力と防御力の計算をさせて
$tmに退避させたのち、$tmに1~2倍させるといった式であり、
$tmに入った数値が最終的な計算結果となります。
プログラム言語だとセミコロンで区切って改行を挟むのが主ですが、
スキル計算式はこのように連なって連続した式を作ることが可能です。

とまあ、色々とこんなのが使えるよと書いていきましたが、
ここまで覚えておけば色んな計算式を作ることが可能かなと思います。


計算式の例

組み合わせの一例をここに載せておきます。
あれこれ考えるのが大変なら参考にしてください。

b.hp / 4 * 3

HPを4分の1にする割合ダメージ系。
味方を対象に回復にした場合は割合回復になります。
完全な固定ダメージにしたい場合は分散度を0に。
自分はこう使ってますけどもっといい方法がありそう…

b.hp - rand(9) + 1

HPを一桁にするデスクロー的なやつ。

[a.atk, a.mat].max * 4 - b.def * 2

上記にもありましたが、Pure_Fultzに登場している「高値依存」は
このような式をベースに使っています。

(a.mat * 4 - b.mdf * 2) * (a.hp <= a.mhp / 2 ? 1.5 : 1)

使用者の現在HPが最大HPの半分以下の場合、
技のダメージに1.5倍されます。
この式の1.5倍判定は防御力の減算後になっていますが
判定式の位置を変えれば減算前に1.5倍判定することもできます。
そこはお好みなのでご自由にって感じです。

(a.atk * 4 - b.def * 2) * (rand(5) == 0 ? 1.5 : 1)

一定確率でどうする系の条件分岐はこちら。
この場合は0~4のうちランダムなので20%の確率になりますね。
確率はrandの括弧内をいじれば調整可能です。

(a.atk * 4 - b.def * 2) * (b.state?(X) ? 2 : 1)

通常の計算の後に、対象者のステートを見て
そのステートに掛かっている場合に2倍ダメージを与えます。
対象が毒状態の場合、ダメージが2倍になる
ベノムショック的なやつを作ることが可能です。

(a.atk * 4 - b.def * 2) * (b.element_rate(X) < 1 ? 2 : 1)

通常の計算の後に、対象者の属性有効度を見て
耐性を持っている場合(99%以下)に2倍ダメージを与えます。
有効度が 0% になっている場合はダメージは与えられないです。

$tm = (100 * a.hp_rate - 100) * -1;
(a.mat * 4 - b.mdf * 2) * (1 + ($tm*0.02))

使用者の残りHPの割合(パーセント)を算出して
その割合値の倍率を算出してダメージに付与します。
上記の場合、割合(パーセント)を算出後、-100して
パーセントを逆転させ、-1を掛算して正数に変えている為、
残りHPが低いほど与えるダメージが大きくなる式となります。

$tm = (100 * b.mp_rate - 100) * -1;
b.mhp * ($tm * 0.01) 

対象者の残りMPの割合(パーセント)を算出して
その割合値の倍率を算出してダメージに付与します。
上記の場合、MPが枯渇してるほど与えるダメージが大きくなります。
対象者の最大HPからその割合分のダメージを与えます。

$tm=[a.eva * 20 < 1 ? 1 : a.eva * 20, 3].min;
(a.atk * 4 - b.def * 2) * $tm

使用者の回避率を見て、回避率値に応じてダメージに倍率を付与します。
上記の場合、回避率が5以下だと等倍ダメージ、
10だとちょうど2倍、15以上だと3倍ダメージを付与します。
回避率がマイナスになることや、最低倍率を考慮して条件式を…
min関数を用いて倍率上限を設定していますが、
こういうストッパーをかけておかないとバランス崩壊につながるので
倍率ダメージを採用する際はその辺に注意しましょう。

(a.mat * 4 - b.mdf * 2) * (1+v[X]*0.1)

スキルレベルを変数で用いる際はこういう式が有効です。
変数値が1の場合1.1倍、2の場合1.2倍…という感じです。

b.level % 5 == 0 ? a.mat * 4 - b.mdf * 2 : 0

対象者のレベルが5の倍数の場合にダメージを与えます。

$tm = a.atk * 4 - b.def * 2;
$tm >= 1000 ? 1000 + a.atk / 2 : $tm

これは賛否両論あるかもしれないですが、
何らかの大ダメージが影響でバランス崩壊につながる場合、
ダメージ減衰を設けさせることができます。
ダメージ計算後、一定数値以上に達した場合、
伸びにブレーキをかける大まかな式となります。
上記の式は一定数値を固定値にしていますが
変数にしたりなどで上限値を変えたり
ブレーキの部分を三角関数とか使ってよりリアルな減速を
掛けたりとか色々とやり方はありそうですね。
因みに、「Math.cos(X)」とか三角関数も計算式に使えました。

$tm=[[$game_troop.turn_count/5,1].max,3].min;
(a.mat * 4 - b.mdf * 2) * $tm

ターン数に応じてダメージ倍率を算出します。
上記の場合、5ターン目までは等倍、5ターン目から徐々に倍率が上がり
15ターン目以降はずっと3倍になります。
このようにmax関数とmin関数を同時に用いて最低値と最大値を決定できます。

a.mhp == a.hp ? (a.mmp == a.mp ? a.atk * 10 : a.atk * 6) : a.atk * 4

あまりないパターンかもですが、条件演算子を重ねることもできます。
偽の式をそれぞれにしたい場合に使用しましょう。
ちょっと見ずらいのがネック。

注意事項

VXAceのスキル計算式には何故か文字数制限があります。
なんと100文字しか入りません…!

普通の計算だったら充分な文字数なのですが、
$tm=[a.atk, a.mat].max*10; a.mhp>=25000?25000+v[1013]+$tm:a.mhp+v[1013]+$tm)*(1+v[1014]*0.1)
こういう風なイミフで詰めっつめのような計算式も
自身のゲーム内に仕込んでおりまして
「やりたいことができないやーん」って遭遇することが多々あります。
なので長い計算式を組む際はExcelさんのLEN関数や
sakuraさんで文字数チェックしましょう。

あと、紹介した計算式は分かりやすいように半角スペースを
入れていますが、上記のように半角スペースが無くて
詰めっつめのような計算式もちゃんと機能します。

MVとかは文字数制限ないんですよね…いいなあ…

終わりに

計算式の例の中に既出となっている部分もあり
その既出となっているものをそのまま流用したり、
一部は自分の方でアレンジしているものもあります。
あと、VXAceと書きましたが、もしかしたらMVとかでも
使える計算式があるかもしれないです。
自分なりな計算式として載せておきますので、ご参考になれば幸いです。

「こういった計算式もできるよ!」といった意見や
アドバイス等ありましたら、お教えいただけると嬉しいです。

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

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

ほかふた 2023/05/06 01:30

【双種】202305_進捗とか


おはこんばんちは、ほかふたです。

最近ついったの方では低浮上気味ですが
ゲ制の方はじっくりまったりと進めております。

今回は雑記という雑記はないのでいきなり進捗報告をさせていただきます。
ゲーム制作にあたるほんのちょっとしたコラムだったり、
まだ紹介していないキャラをちょっとだけ公開しているので
よろしかったらフォローないしご支援していただけると嬉しいです。

フォロワー以上限定無料

ゲーム制作にあたるちょっとしたアドバイスとか…

無料

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

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

« 1 2 3

記事のタグから探す

月別アーカイブ

記事を検索