見出し画像

RPGのパラメータの作り方

はじめに

 ターン制のRPGのパラメータをよく作りました。
 その時の作り方や考え方などを紹介してみようという内容です。
 色々と応用できると思いますので、ご一読頂ければと。

 対象の読者ですが、ある程度Excelなどのアプリのワークシート関数が使える、くらいのスキルがあるか、覚えようとしている人。パラメータの作り方が知りたい人、知りたい人です。
 もちろん、単なる好奇心を満たしたい人もどうぞ。


基本的な考え方

「一つのパラメータは一つの意味」
 これが私のパラメータに対する考え方です。
 パラメータの数が少ない方が良い、多い方が良い、という縛りではあまり捉えていません。
 もう少し具体的に言うと。
「ある数値はある効果と直結してて、他の効果に影響を及ぼさない」という事です。

例えば攻撃力と防御力の計算から

 ダメージ量=ダメージ量(攻撃力、防御力)
 という式だったとします。
 ダメージ量()は、ダメージ量を計算する関数で、攻撃力と防御力を入力値とする、というものです。
 ここではこの関数の具体的な計算方法は割愛しますね。

 さて、この攻撃力はどうやって決まるか、というと。
 攻撃力=攻撃力(PCの攻撃力、持っている武器の攻撃力)
 という式で決まるとします。
 また、関数かい!と思った方、まあ、そんなもんだと思ってください。

 このPCの攻撃力、持っている武器と対応する腕の「腕力」と「基本攻撃力」との合計だったとします。
 この腕力は、攻撃力と関連しています。
 もし、この腕力が「運搬力」と関連していたら、どうでしょう?
 運搬力が「腕力」と「基本運搬力」の合計だとしたら。

 初めに仕様書を書いて、パラメータのデータを作って、テストを開始して、方針変更しようとした時、ちょっと困った事になりそうです。
 例えば「攻撃力を増やしたいけど、運搬力は変えたくない」という場合に。
 腕力が両方に影響を与えているので、こういう矛盾するような調整は、かなり面倒になりますし、思わぬ副作用を起こします。

 初めに「腕力」というパラメータを考えた時、「腕力」という名称から「運搬力」にも影響与えるよね?
 という連想が、こういったトラブルを引き起こすのでした。

トラブルを避ける為に

 これを避けるための方法が先に書いた事でした。
「一つのパラメータは一つの意味」
「ある数値はある効果と直結してて、他の効果に影響を及ぼさない」

「腕力」を「運搬力」に影響を与えないようにするために、「攻撃腕力」と「運搬腕力」に分けます。
 そうすると、攻撃力は、攻撃腕力と基本攻撃力の合計、運搬力は運搬腕力と基本運搬力の合計、というように切り離され、影響を与え合わなくなります。
 パラメータは増えますが、影響の相互作用がなくなるので、調整は容易になります。

 ただ、この手法はパラメータ数が増えるんですよね。

では、どうやってパラメータを作ったら良いか?

 先ほどのパラメータは、実際のデータとしてのパラメータです。これを「実装パラメータ」とします。
 それとは別に、実装パラメータを生成するためのパラメータ、これを「仮想パラメータ」とします。
「仮想パラメータ」を一定のルールで加工して「実装パラメータ」を生成する、という方法です。

 例えば、先程の「攻撃腕力」と「運搬腕力」ですが、イメージ的には筋肉質のキャラクターの場合、両方とも高そうです。
 ただ、攻撃する腕力と物を運ぶ腕力は使う技量が違う、とも考えられます。
 攻撃腕力は使用する武器の練度も含んでいますから。
 そうすると、例えば「運搬腕力」の高いキャラクターは、武器を持たず素手で殴る攻撃力は高いのかも知れません。

 こういった考察をPCの各キャラクター毎に行います。
 そうすると、先の腕力の話は、「基本腕力」と「攻撃腕力率」「運搬腕力率」に分解され、「攻撃腕力」と「運搬腕力」に割り当てられます。

 仮想パラメータ「基本腕力」×「攻撃腕力率」→実装パラメータ「攻撃腕力」
 仮想パラメータ「基本腕力」×「運搬腕力率」→実装パラメータ「運搬腕力」

 そして、「基本腕力」は「基本筋力」×「腕力の筋力率」で決まるとします。
 整理すると下のようになります。

各要素のリレーション図

 このリレーションをExcelなどのワークシート関数などを使って構築します。
 仮想パラメータのシートと実装パラメータのシートを別にしておくと、後々楽です。

パラメータを割り当てる

 さて、これらの仮想パラメータは、キャラクター毎に割り当てていきます。
 そうすると、なんとなく割り当てるパターンが見えてきます。
 このパターンに名前を付けておきます。
 そして、敵のパラメータテーブルを作る際に、そのパターン名を割り当てます。
 当てはまらない敵が出てきたら、新しいパターンを作り割り当てます。
 こうしていくと、敵のパラメータが出来てきます。
 もちろんこれは第1段階で、初回のテスト用くらいの完成度です。

 このパターンは、別シートに作り、敵の仮想パラメータのシートは、パターン名から各パラメータを参照する、というようにワークシート関数を組み立てます。
 ワークシート1:実装パラメータ、ワークシート2の実装パラメータの計算結果を参照
 ワークシート2:仮想パラメータ、パターン名で内容を参照、実装パラメータを計算
 ワークシート3:仮想パラメータのパターンリスト
 組み立て方の基本となるワークシート関数については後述します。

各シートの例

細かい調整をする際の注意点

 さて、初回テストを行いパターン割り当てを補正していくと、細かい調整がしたくなる時期が来ます。
 この判断ですが、もう大きな調整(パターン割り当ての変更など)は無く、個別の調整が必要という段階です。
 そこで、ワークシート2と3の関連付けを切り離します。
 ワークシート関数で参照するやめます。具体的には、ワークシート全体をコピーして、値としてペーストします。
 切り離す前に、バックアップを取っておくと良いと思います。

 そして、ワークシート2の値を細々調整して行くわけです。ほとんど微調整レベルです。
 もし、大きな変更が必要になったら?
 場合によっては、先程のバックアップから取り直す方法もありますし、現在の調整内容を活かしたい場合には、バックアップと現在の差分をうまくマージする方法もあります。
 マージする方法は、かなり手間がかかる方法ですので、今回は割愛します。できればそうならない手順の開発が望ましいです。汗

パターンを参照するワークシート関数

 INDEX と MATCH を使います。
 ワークシート関数の式をざっと書くと、下のようになります。

=INDEX(参照するテーブル範囲、MATCH(参照するパターン名のセル、比較範囲)、MATCH(参照するパラメータ名、比較範囲))

 次の図は、この式をmacのNumbersで行った場合のものです。

Numbersでのテーブルを参照するワークシート関数の例

おわりに

 かなり駆け足でしたが、パラメータの作り方の考え方と、作り方の手順でした。
 ターン制のRPGは割と作ってきましたので、そのノウハウのご紹介でした。
 実装パラメータと仮想パラメータの関連は、今でも使えるのでは?と思っています。
 読者のお役に立てれば幸いです。

 RPGの戦闘演算のノウハウについては、こちらの記事で解説しました。
 こちらもご一読頂ければ。

ターン制RPG戦闘演算ノウハウ


宜しければ、ゲーム制作などのクリエーター活動のサポートをお願い致します。