RPGのパラメータの作り方
はじめに
ターン制のRPGのパラメータをよく作りました。
その時の作り方や考え方などを紹介してみようという内容です。
色々と応用できると思いますので、ご一読頂ければと。
対象の読者ですが、ある程度Excelなどのアプリのワークシート関数が使える、くらいのスキルがあるか、覚えようとしている人。パラメータの作り方が知りたい人、知りたい人です。
もちろん、単なる好奇心を満たしたい人もどうぞ。
基本的な考え方
「一つのパラメータは一つの意味」
これが私のパラメータに対する考え方です。
パラメータの数が少ない方が良い、多い方が良い、という縛りではあまり捉えていません。
もう少し具体的に言うと。
「ある数値はある効果と直結してて、他の効果に影響を及ぼさない」という事です。
例えば攻撃力と防御力の計算から
ダメージ量=ダメージ量(攻撃力、防御力)
という式だったとします。
ダメージ量()は、ダメージ量を計算する関数で、攻撃力と防御力を入力値とする、というものです。
ここではこの関数の具体的な計算方法は割愛しますね。
さて、この攻撃力はどうやって決まるか、というと。
攻撃力=攻撃力(PCの攻撃力、持っている武器の攻撃力)
という式で決まるとします。
また、関数かい!と思った方、まあ、そんなもんだと思ってください。
このPCの攻撃力、持っている武器と対応する腕の「腕力」と「基本攻撃力」との合計だったとします。
この腕力は、攻撃力と関連しています。
もし、この腕力が「運搬力」と関連していたら、どうでしょう?
運搬力が「腕力」と「基本運搬力」の合計だとしたら。
初めに仕様書を書いて、パラメータのデータを作って、テストを開始して、方針変更しようとした時、ちょっと困った事になりそうです。
例えば「攻撃力を増やしたいけど、運搬力は変えたくない」という場合に。
腕力が両方に影響を与えているので、こういう矛盾するような調整は、かなり面倒になりますし、思わぬ副作用を起こします。
初めに「腕力」というパラメータを考えた時、「腕力」という名称から「運搬力」にも影響与えるよね?
という連想が、こういったトラブルを引き起こすのでした。
トラブルを避ける為に
これを避けるための方法が先に書いた事でした。
「一つのパラメータは一つの意味」
「ある数値はある効果と直結してて、他の効果に影響を及ぼさない」
「腕力」を「運搬力」に影響を与えないようにするために、「攻撃腕力」と「運搬腕力」に分けます。
そうすると、攻撃力は、攻撃腕力と基本攻撃力の合計、運搬力は運搬腕力と基本運搬力の合計、というように切り離され、影響を与え合わなくなります。
パラメータは増えますが、影響の相互作用がなくなるので、調整は容易になります。
ただ、この手法はパラメータ数が増えるんですよね。
では、どうやってパラメータを作ったら良いか?
先ほどのパラメータは、実際のデータとしてのパラメータです。これを「実装パラメータ」とします。
それとは別に、実装パラメータを生成するためのパラメータ、これを「仮想パラメータ」とします。
「仮想パラメータ」を一定のルールで加工して「実装パラメータ」を生成する、という方法です。
例えば、先程の「攻撃腕力」と「運搬腕力」ですが、イメージ的には筋肉質のキャラクターの場合、両方とも高そうです。
ただ、攻撃する腕力と物を運ぶ腕力は使う技量が違う、とも考えられます。
攻撃腕力は使用する武器の練度も含んでいますから。
そうすると、例えば「運搬腕力」の高いキャラクターは、武器を持たず素手で殴る攻撃力は高いのかも知れません。
こういった考察をPCの各キャラクター毎に行います。
そうすると、先の腕力の話は、「基本腕力」と「攻撃腕力率」「運搬腕力率」に分解され、「攻撃腕力」と「運搬腕力」に割り当てられます。
仮想パラメータ「基本腕力」×「攻撃腕力率」→実装パラメータ「攻撃腕力」
仮想パラメータ「基本腕力」×「運搬腕力率」→実装パラメータ「運搬腕力」
そして、「基本腕力」は「基本筋力」×「腕力の筋力率」で決まるとします。
整理すると下のようになります。
このリレーションをExcelなどのワークシート関数などを使って構築します。
仮想パラメータのシートと実装パラメータのシートを別にしておくと、後々楽です。
パラメータを割り当てる
さて、これらの仮想パラメータは、キャラクター毎に割り当てていきます。
そうすると、なんとなく割り当てるパターンが見えてきます。
このパターンに名前を付けておきます。
そして、敵のパラメータテーブルを作る際に、そのパターン名を割り当てます。
当てはまらない敵が出てきたら、新しいパターンを作り割り当てます。
こうしていくと、敵のパラメータが出来てきます。
もちろんこれは第1段階で、初回のテスト用くらいの完成度です。
このパターンは、別シートに作り、敵の仮想パラメータのシートは、パターン名から各パラメータを参照する、というようにワークシート関数を組み立てます。
ワークシート1:実装パラメータ、ワークシート2の実装パラメータの計算結果を参照
ワークシート2:仮想パラメータ、パターン名で内容を参照、実装パラメータを計算
ワークシート3:仮想パラメータのパターンリスト
組み立て方の基本となるワークシート関数については後述します。
細かい調整をする際の注意点
さて、初回テストを行いパターン割り当てを補正していくと、細かい調整がしたくなる時期が来ます。
この判断ですが、もう大きな調整(パターン割り当ての変更など)は無く、個別の調整が必要という段階です。
そこで、ワークシート2と3の関連付けを切り離します。
ワークシート関数で参照するやめます。具体的には、ワークシート全体をコピーして、値としてペーストします。
切り離す前に、バックアップを取っておくと良いと思います。
そして、ワークシート2の値を細々調整して行くわけです。ほとんど微調整レベルです。
もし、大きな変更が必要になったら?
場合によっては、先程のバックアップから取り直す方法もありますし、現在の調整内容を活かしたい場合には、バックアップと現在の差分をうまくマージする方法もあります。
マージする方法は、かなり手間がかかる方法ですので、今回は割愛します。できればそうならない手順の開発が望ましいです。汗
パターンを参照するワークシート関数
INDEX と MATCH を使います。
ワークシート関数の式をざっと書くと、下のようになります。
=INDEX(参照するテーブル範囲、MATCH(参照するパターン名のセル、比較範囲)、MATCH(参照するパラメータ名、比較範囲))
次の図は、この式をmacのNumbersで行った場合のものです。
おわりに
かなり駆け足でしたが、パラメータの作り方の考え方と、作り方の手順でした。
ターン制のRPGは割と作ってきましたので、そのノウハウのご紹介でした。
実装パラメータと仮想パラメータの関連は、今でも使えるのでは?と思っています。
読者のお役に立てれば幸いです。
RPGの戦闘演算のノウハウについては、こちらの記事で解説しました。
こちらもご一読頂ければ。
宜しければ、ゲーム制作などのクリエーター活動のサポートをお願い致します。