この記事ではプログラミングとはなにか、プログラミングがどういう仕組みで動作しているのか、そしてRPGツクールのようなゲームエンジン、ノーコードツールとはなんなのか、ざっくり簡単に学べます。
目次
プログラミングとは
プログラミングとは、プログラムを書くことである。と言ってしまえばそれまでなのですが、もう少しだけ理解を深めておくと色々しっくりきて、学習も捗るのではないかと思います。
そもそも何のためにプログラムを書くかというと、コンピュータに何らかの処理をさせるためです。何らかの処理というのは、数値の計算だったり、条件によって出てくる文章を変えたり、画像を平行移動させたりですね。
RPG的な例を挙げると
- 戦闘シーンにおけるダメージ計算
- パーティーメンバーの中の現在1番上のキャラクターの名前を表示する
- 戦闘シーンで敵味方のキャラクターを表示したり、被ダメージ時に点滅させたりする
などです。
これらの処理をコンピュータに実行させるために、あの黒い画面を開き、あの英語っぽいコードでプログラミングをするわけですね。
ゲームエンジンとは
次に、RPGツクールやUnity、Unreal Engineといったゲームエンジンについてざっくり知っておきましょう。
ゲームエンジンとは、ゲーム制作でよく使われる処理をひととおりまとめたソフトウェアのことです。と言ってもピンとこないと思いますので、順を追って説明していきます。
まず、ゲームを1本作るために必要な処理は極めて膨大で、例えばドラゴンクエスト(1986年)のような今ではよくあるRPGのコマンド戦闘を実現するためだけでも
図:ドラゴンクエスト1の戦闘シーン(4gamer.net様より引用)
- 戦闘シーンの初期化
- 敵キャラクターの出現
- プレイヤーキャラクターのステータス表示
- 背景の描画
- プレイヤーの入力処理
- コマンド選択(「たたかう」「じゅもん」「アイテム」「にげる」など)
- コマンドの実行
- 「たたかう」の場合: 攻撃アニメーションの再生、ダメージ計算、敵のHP更新
- 「じゅもん」の場合: 呪文の効果発動、ダメージまたは回復計算
- 「にげる」の場合: 逃走判定と結果表示
- 「どうぐ」の場合: アイテムの効果発動、プレイヤーのHPやステータス更新
- 敵の行動処理
- 敵の行動選択(攻撃、呪文、特殊行動など)
- 敵の攻撃アニメーションの再生、ダメージ計算、プレイヤーのHP更新
- ダメージ計算
- 攻撃力、守備力、乱数を考慮したダメージの計算
- クリティカルヒットやミスの判定
- ステータス更新
- HPやMPの増減
- 状態異常の管理(毒、眠りなど)
- 戦闘結果の表示
- ダメージや回復の表示
- 戦闘メッセージ(例:「スライムに10のダメージ!」)
- 戦闘終了判定
- 敵の全滅、プレイヤーの全滅
- 戦闘終了後の処理(経験値、ゴールドの獲得)
- 報酬の処理
- 経験値、ゴールド、アイテムの獲得
- レベルアップの判定と処理
- 戦闘シーンの終了
- 通常フィールドへの遷移
- 戦闘終了後の回復や状態異常のリセット
といった処理を作る必要があります。
※あくまでざっと書き出しただけで厳密ではありませんが、大きく外れてはいないと思います。ここではとにかく膨大な処理を作る必要がある、ということが伝われば十分です。
戦闘シーンの処理を作るだけでもこれです。この他にマップ画面での処理や各種イベントももちろん作る必要があります。これらをすべて一から作るのはとんでもなく大変なのが分かって頂けると思います。
しかしゲームにはある程度「共通の処理」があります。前述のドラゴンクエストの戦闘シーンでの処理は、その多くがたいていのコマンド戦闘RPGにも当てはまります。
コマンド戦闘RPGなら「プレイヤー入力処理(コマンド選択)」は必要ですし、コマンドを選んだ際に攻撃アニメーションを表示したり、ダメージを計算して敵のHPに反映する、といった処理も必要でしょう。
こういった「多くのゲームで使われる一般的な処理」を予め用意してくれているのが「ゲームエンジン」です。
例えば、次のコードはRPGツクール本体の「戦闘シーンの処理」の一部です。
Game_Action.prototype.apply = function(target) { const result = target.result(); this.subject().clearResult(); result.clear(); result.used = this.testApply(target); result.missed = result.used && Math.random() >= this.itemHit(target); result.evaded = !result.missed && Math.random() < this.itemEva(target); result.physical = this.isPhysical(); result.drain = this.isDrain(); if (result.isHit()) { if (this.item().damage.type > 0) { result.critical = Math.random() < this.itemCri(target); const value = this.makeDamageValue(target, result.critical); this.executeDamage(target, value); } for (const effect of this.item().effects) { this.applyItemEffect(target, effect); } this.applyItemUserEffect(target); } this.updateLastTarget(target); };
RPGツクールを使えばこういったプログラムコードを直接書かなくてもゲームを作ることができます。
それはRPGツクールがこういった「よくある処理」を予め用意してくれていて、しかもそれをGUI(私たちが普段パソコンを使っていてよく見かけるボタンポチポチの画面)で操作できるようにしてくれているからです。
ノーコードツールとは
ゲームエンジンのような制作ツールの中でも、「直接コードを書かなくても使えるツール」のことを「ノーコードツール」と呼びます。
「ノーコードツール」という言葉が出てきたのはけっこう最近(2020年前後)のイメージなのですが、RPGツクールはもっとずっと前(1990年)から、この「コードを書かなくても使える制作ツール」をやっています。
いわばノーコードツールの老舗なのですが、ノーコードツールの中には
- コードを書きたくても書けないもの(書けない前提のもの)
- コードを書くこともできるもの
があります。
本連載で取り扱うRPGツクールMV/MZは後者です。
なので、「コードを書かなくてもゲームが作れちゃう!楽しい!」という広い間口と、「プログラミングの概念や記法、設計を覚えればもっと自由に、効率的に色々作れるようになる!」という、学びへのインセンティブを両立できているのです。