スクリプト講座その1 〜ダメージ計算式と戯れる(基本編)〜
こんにちは、シロップです!
さて、今日から「RPGツクールで遊びながら学ぶスクリプト講座」を連載していきます。
本当は「ミニゲームを作りながら覚えるスクリプト講座」というタイトルで、競りゲームを作りながらスクリプトの構文などを解説していく予定だったのですが、いきなりミニゲームを作り始めるのはハードルが高すぎる!
……と思い直しまして、できるだけ軽い気持ちでスクリプトに触れて、ついでにスクリプトの基本から学べるような講座を前段として行うことになりました!
ちなみに、基本編でスクリプトの基本を抑えてもらったあとは、応用編としてこんな(↓)ミニゲーム作っていく予定です!
https://twitter.com/thiropGames/status/1054675382534733825
スクリプトに触ってみよう!
さぁ、何はともかく、まずはスクリプトを実際に書いてみましょう!
ツクールでスクリプトを使うケースとしては
- イベントのスクリプトコマンド
- 条件分岐
- 変数への代入
- スキルのダメージ計算式
- プラグインの作成
など、いろいろと用途があります。
今回は、一番手軽にスクリプトを楽しめる「スキルのダメージ計算式」で遊んでみます。
命中率に比例するダメージ
ツクールのデータベースで新規のスキルを作り、対象を敵単体、ダメージのタイプを”HP”としてください。
だいたいの場合は基本の攻撃スキルのダメージ計算式をコピペして使うと思いますが、
a.atk * 4 - b.def * 2
となっています。
aは攻撃する人、bは攻撃を受ける人を表しており、
a.atk
は「a(攻撃者)のatk(攻撃力)」を表して、*4
で攻撃力を4倍した値を使っています。
だいたいのプログラミング言語では掛ける(x)は*(アスタリスク)で表します。
右側のb.def * 2
は「b(攻撃対象者)のdef(防御力)の値を2倍した値」を表してます。
つまり、ダメージは「攻撃者の攻撃力4倍の値から、攻撃を受ける対象の防御力の2倍を引いた値」となります。
※ポイント:○○.△△のピリオド(.)は○○"の"△△と読みましょう。(例:a.atk → aの攻撃力(atk))
さて、このダメージ計算式でいろいろと遊んで見ましょう。
計算式を次のスクリプトで書き換えて見て下さい。
(a.atk * 4 - b.def * 2) * (a.hit - b.eva)/100
前半の a.atk * 4 - b.def * 2
の部分は通常攻撃の計算式と同じですね。
これを括弧()で囲うことで、先に計算を行ってます。
つまり、(通常攻撃ダメージ) * (a.hit - b.eva)/100
ということになります。
右側の部分を見ると
a.hit
は「攻撃者(a)の命中率(hit)」、からb.eva
の「攻撃対象(b)の回避率(eva)を引いた値」を/100
で100で割った値となっています。
※割り算は÷ではなく、/(スラッシュ)記号を使います!
例えば、攻撃者の命中率が130%、攻撃対象の回避率が10%であれば、(a.hit - b.eva)/100
は
(130 - 10)/100
= 120/100
= 1.2
となります。
式の左と合わせると、通常攻撃のダメージ * 1.2(命中率と回避率の差)
となり、通常攻撃ダメージに命中率の補正が加わったダメージの攻撃となります。
命中率を高める装備でダメージが上がるスキルというのも一癖あって面白いのではないでしょうか?!
レベルによるダメージ
さて、次はダメージ計算式を次のように書き換えて見て下さい
a._level * a._level
とてもシンプルですが、これは攻撃者のレベル(._level)を2回掛けた値となります。
レベル1なら1 * 1
でたったの1ダメージですが、レベル99だと99 * 99
で9801ダメージです!!
レベルこそ絶対!!
こんなスキルがあれば低レベル縛りのプレイヤーには嫌われますね。
逆に、敵のスキルとして計算式をb._level * b._level
とすれば、こちらのレベルが高いほどダメージも大きくなるスキルが作れます!
おもしろスキルいろいろ
ゲームの要素をどうやって表せるか、さえ知っていればいろんな面白スキルを作ることができます。
$gameParty._steps
~ パーティー($gameParty)の累積歩数(_steps)分のダメージ
$gameParty._gold
~ パーティー($gameParty)の所持金額(_gold)分のダメージ
$gameSystem._battleCount*10
~ システム($gameSystem)が記録している戦闘回数(_battleCount) x 10のダメージ
$gameSystem._saveCount*100
~ システム($gameSystem)が記録しているセーブ回数(_saveCount) x 100のダメージ
実用性はともかく、アイデア次第でどんな数値もダメージに反映出来てしまいます!!
ちょっとした裏ボスのスキルなんかに使うには面白いんじゃないでしょうか?(投げやり……ではないですよ?
まとめと次回予告
今回の講座の重要ポイントは○○.△△
は○○の△△
と読む!
例) $gameParty._goldはパーティー($gameParty)の所持金額(._gold)
次回は、関数という機能を使ってもっと凝った計算式を試してみます!
おまけ
ダメージ計算式に使えそうな表現をいくつか書いておきます。いろいろと試してみてください!
a.hp
: 攻撃者のHP (以下、「攻撃者の」という表記を省略)a.mhp
: 最大HP(mhp: max hp)a.mp
: MPa.mmp
: 最大MP(mmp : max mp)a.atk
: 攻撃力(atk : attack アタック)a.def
: 防御力(def : deffence ディフェンス)a.mat
: 魔法攻撃力(mat : magic attack)a.mdf
: 魔法防御力(mdf : magic deffence)a.agi
: 敏捷性(agi : agility アジリティ)a.luk
: 運(luc : luck ラック)a.hit
: 命中率(hit)a.eva
: 回避率(eva : evasion イべイジョン)a.cri
: クリティカル率(cri : critical)
$gameParty._gold
: 所持金$gameParty._step
: 歩数
$gameTroop._turnCount
: 経過ターン数
$gameSystem._battleCount
: 戦闘回数$gameSystem._winCount
: 勝利回数$gameSystem._escapeCount
: 逃走回数$gameSystem._saveCount
: セーブ回数