能力値

概要

 PC/エネミーに付加する能力値です。能力値は自身の設定に応じて値を計算、随時変化させる“演算器”のような役割を果たします。装備品や状態の影響を受けて一時的に修正した値を算出し、ゲームではこれを「最終値」としてゲームの各場面に用います。また、個別に成長もします。

 Wizardryなどに登場する「特性値」や「呪文使用回数」も、ドラゴンクエストなどに登場する「マジックポイント」に相当する情報も、キャラクタのレベルを表す「レベル」も、武器を組み合わせて計算する「ダメージ」も、迷路内の明かりの広さも、Desigeonでは同じ規格のデータ配列に納められており、区別がありません(「レベル」のみ例外的に特権が与えられていますが、機能は他の能力値と同じものを含んでいます)。

 能力値は制作者の判断によって不要なものは削除し、既存の能力値だけでは成功判定やダメージ(回復値)計算を行えないと感じたらどんどん追加していきます。

特徴

解説

値の種類

 能力値は3種類に分かれ、最大数の範囲で任意の能力値を設けることができます。

■ 通常能力値

 普通の能力値です。最終的に一個の「能力値」を計算するための存在です。

 通常能力値以外の二つは通常能力値の機能を含んでおり、そちらにする必要がなければ通常能力値を選択することになります。

■ 変動能力値

 「最大値」と「現在値」を持つ能力値です。「最大値」は通常能力値と同じです。「現在値」は、罠や戦闘によってダメージを受けたり、アクションを使用することで消耗していきます。あるいは、アクションの結果や宿屋病院のサービス、回復イベントによって回復します。

 「ヒットポイント」のように、ゼロに落ちると死ぬような能力値を設けたい場合や、何らかの事情で値が変化していく能力値を設けたい場合に設置します。

■ 段階能力値

 変動能力値のような「最大値」と「現在値」の組み合わせ(整数)を最大9段階設けて、「現在値」を変動させることで使用します。通常はアクションの使用電池として用意します。

 段階能力値は、Wizardryの「呪文使用回数」に相当する機能を実装する目的で用意されていますが、厳密に仕様を合わせることはできないので、仕様を真似したい場合は能力値全体の機能を駆使して(自分以外の能力値の力も借りて)本家に近い動きをシミュレートさせることになります。

 詳細は後述の「段階能力値の各段階値の算出方法」をご参照下さい。

能力値の表示制限

 3種とも個数の上限は決められていませんが、ゲーム中の表示限度が設けられています。

 ゲーム中のキャラクタ情報表示画面には以下の制限があります。

 スキル値アイコンを実行するとスキル値の一覧が表示されますが、ここは通常能力値と変動能力値を想定して画面が構成されています。ですので、段階能力値についてはキャラクタ画面にある4つが表示上の限度ということになります。

値の範囲

 能力値は、設定からゲーム中の計算に至るまで、すべて符号つき64ビット実数(符号つき倍精度浮動小数点数)で処理しており、かつ値の範囲を制限していません。浮動小数点数の基本情報については、数値の解説ページを設ける予定です(Webで検索をかけても関連情報がたくさん出てきます)。あまり極端な値を使用すると計算の過程で精度が失われることがあります。

 値の設定を行うときは、このことのみを頭に入れておけば有効範囲が想定できると思います。ゲームに用いられる常識的な値の範囲がイメージできれば、大抵の値は問題なく計算されるはずです。

 例外は「経験値」と「段階能力値の各段階値」です。ここだけは整数が用いられています。詳細は後述します。

最終値の算出方法

 ゲーム中のキャラクタ情報画面に表示されている最終値の算出方法です。数多くの設定項目が絡むため、単純に一つの式で表すことはできません。ただ、使っている計算はかけ算と足し算だけで、これを繰り返しているに過ぎません。

  1. ベース値の算出
  2. 配合計算
  3. 乗算能力・加算能力・乗算値・加算値
  4. 状態の影響
  5. 装備品の影響
◆ コメント

すべての機能を利用しなければならないケースはあまりないと考えられます。

 順に解説します。

(1)ベース値の算出

 能力値の計算はまず、「ベース値」を算出するところから始まります。ベース値は、属性で設定された「付与能力値」の合計と、能力値自身が持つ成長結果の合計値で表されます。

ベース値=属性の付与能力値合計+能力値自身の成長値

 「能力値自身の成長値」というのは、キャラクタメイキング時に割り振ったボーナス、レベルアップボーナスを割り振った累積値、そして能力値自身が成長した場合に加算された累積値の合計です。

 以後、このベース値に対してかけ算と足し算を繰り返していきます。

(2)配合計算

 本項は、配合設定なしの能力値については飛ばします。配合設定が行われている能力値では、ベース値の値によって以下の配合計算が行われます。

 配合補填とは、一定の値を基準に加算値を決め、ベース値に加えることです。

 能力値には、標準最低値標準最大値が設定されています。これは、その能力値がどの値を最低値とみなすか、もしくは最大値とみなすかの設定です。この範囲を標準範囲と呼んでいます。標準範囲を区切ることで、「現在、能力値は何パーセントの位置にいるのか?高いのか低いのか?」を計算することができます。

 この標準範囲のことをふまえて、配合計算が行われます。

 配合させる能力値には、配合元とする能力値と、割合(パーセンテージ)を設定します。割合は、補填値全体に対して何パーセントの影響力を持つかを表します。例えば、前述の条件判定によって補填すべき値が200であると算出されたとき、筋力の配合設定が25%であるならば、50を筋力の“補填担当”とします。筋力の値が低ければ50に届きませんし、高ければ50を超えることもできます。割合の合計は、100%でなくともかまいません。

 配合元として使われる能力値にも、標準範囲があります。標準範囲に対して何パーセントの最終値を持っているかで、補填能力の高さが決まってきます。例えば、0〜18の標準範囲を持つ「筋力」が9のとき、50%の補填能力があります。先ほどの例でいくと、筋力の担当分50のうち25を補填できることになります。

配合のイメージ

 本体の能力値、すなわちベース値が成長すればするほど、配合元の影響力は小さくなっていき、最終的に標準最大に達すると影響を受けなくなります。

 配合計算が終了すると、乗算設定と加算設定の処理(3)に続きます。

◆ 配合の目的

 配合の目的は、以下の通りに使い分けられます。

 ただし、あまり意味もなく配合設定を行うことは考えものです。複雑な関係構造はバランスを取りづらくするかもしれません。

◆ 配合の元ネタ

 配合そのものは、昔のUltima Onlineの能力値+スキルシステムとほとんど同じです。ですので、あれを知っている人には理解が早いと思います。

 ただ、スキル値0〜100(120)といったように固定範囲に対して処理したのではDesigeonでは使えないので、標準範囲を決めるなどという、ちょっと余計な設定が加わっています。さらに、能力値に対して経験値を振り込む機能も、UOの能力値成長のイメージがあったからですね。あちらは経験値ではなく確率で上昇していましたが………。

(3)乗算能力・加算能力・乗算値・加算値

 乗算能力・加算能力は、配合計算を終えた(もしくはスキップした)能力値に、文字通り乗算・加算する能力値です。乗算能力が「なし」だと1倍になります。乗算能力も加算能力も、対象の能力の最終値が用いられます。なお、自身と同じ能力値を指定することはできません。

 その後、乗算値(r)・加算値(r)の処理を加えます。乗算値(r)が空もしくは0だと1倍になります。

 (2)終了時までの値をαとすると、この項の式は以下の通りになります。

(3)の計算終了値=(α×乗算能力+加算能力)×乗算値(r)+加算値(r)

 乱数式が設定されていると、能力値は値の算出を求められるたびに異なる値を返します。もしどこかの能力値の配合元として参照されている場合、親能力値の値も配合分がランダム変化することになります。

◆ 乗算と加算の目的

 乗算と加算は、値の強制的な補正が目的です。補正が必要なければ設定する必要もありません。

 もともとDesigeonの能力値システムに、この項目はありませんでした。ベース値+状態+装備品だけで能力値の最終値を求めるのが本システムのメインで、おそらく配合と乗算加算はなるべく用いない方が、能力値全体の設計がたやすくなります。

(4)状態の影響

 付加されているすべての状態の影響を加えます。詳細は状態の項目で説明します。

 ここで一点だけご注意を。状態設定側の「割合を加算」というのは、(3)の計算終了値の割合を指します。

(5)装備品の影響

 装備品の影響を加えます。詳細はアイテムの項目で説明します。

 ここでご注意を。アイテム設定側の加算方法の「割合」というのは、(3)の計算終了値の割合を指します。また、「最大値加算」は現在、対応していません。というか対応できません。あれは私の勘違いで作られた項目です(ただ、別のものに置き換わる可能性があります)。

(6)値の限界

 各能力値には「最大」と「最小」の値が与えられています。この値の範囲を超えて大きくまたは小さくはなりません。この最終段階でその範囲内に丸められます。

 これで、能力値の最終値の計算が終了です。

 マニュアルでは単に「能力値」と言ったり、「最大値」と言った場合、ここで算出された最終値のことを指します。この値はあらゆる命中判定やダメージ計算に使用され、変動能力値の最大値にもなります。

他の能力値用語

◆ ベース値
 先に挙げた「(1)ベース値の算出」を参照してください
◆ 標準値
 状態・装備品の影響を省いた能力値のことです。配合元の能力値についても、これらの影響を受けさせないで計算を行います
 いかにも標準的な位置づけであるかのような名前ですが、キャラクタの能力値を表す値としてはまったくアテにできません。標準値は、状態や装備品による能力値補正として制作者が意図的に利用する他は、考慮する必要がありません
 内部的には、罠解除などの再挑戦可否を判定する際の、PCの成長判断に用いられています。この「再挑戦」については、アクションの項目を参照してください
◆ 現在値
 通常は、変動能力値における現在値です。ヒットポイントなどが減っている間は、減っている値のことを指します。変動能力値以外に用いる場合は(通常ありませんが)、最終値と同じになります
◆ 最大値
 通常は、変動能力値における最終値です。変動能力値以外に用いる場合にも(通常ありませんが)、最終値のことを指します

画面

能力値設定画面

1.値の算出方法と表示方法

◆ 最終値算出用の設定

 以下の能力値については、前述した「最終値の算出方法」に登場します。計算の過程で使用されます。

◆ 付与

 すべてのPCに能力値を与えるかどうか、与える能力値についてはチェックボックスをオンにしておきます。

 ここでオンにされた能力値は、属性の「付与能力値」の設定ボックスで「付与」にチェックしなくとも自動的に付与されます。

◆ E付与

 チェックボックスをオンにした能力値は、エネミーに付与されます。エネミーの能力値設定ダイアログで初期値を設定できるようになります。

◆ 表示

 チェックボックスをオンにすると、能力値名がゲーム中に登場するようになります。これは、ゲーム中のキャラクタ情報画面、スキル値情報画面に限りません。戦闘時のメッセージ等についても、非表示設定になっている場合は能力値の存在をにおわせるようなメッセージは出現しなくなります。また、キャラクタメイキング時のボーナス割り振りにおいては、非表示の能力値は表示されないため値を割り振ることはできません。

 プレイヤーに対して存在を秘匿しておきたい能力値についてはチェックをオフにしておきます。

◆ マイナス表記

 値を表示する際、値をマイナスにするかを指定します。キャラクタ情報画面、スキル値画面にのみ対応しています。

◆ 標準最小値以下に落ちると死亡

 変動能力値でのみ有効なオプションです。オンにしておくと、現在値が標準最小値に設定されている値以下に落ちたとき、自動的に「死亡」状態(状態設定の最初のインデックスの状態)がキャラクタに付加されるようになります。

◆ 鑑定閾値

 未使用です。

◆ 割振

 キャラクタメイキング時にプレイヤーがボーナスを割り振る際の、ボーナス1あたりの上昇値を指定します。

◆ 成長上限

 ベース値(属性の「付与能力値」の合計+ボーナスおよび成長による累積加算)の最大値を指定します。この値には、属性で設定される「最大能力値」が加算され、成長の限界値とします。

成長限界値=能力値の「成長上限」+属性の「最大能力値」合計

 ベース値が成長の限界値に達すると、能力値は成長を停止します。また、成長の限界値を越えてボーナスを割り振ることはできません。

◆ 有効桁

 「制限なし」にしておくと、値を計算・格納する際の最終結果に、桁の丸め処理を行わなくなります。常にめいっぱいの精度でデータを保持することになりますが、計算上の誤差を累積する原因になることがあります。また表示の際に、メッセージの内容と表示の結果が合わずに違和感をプレイヤーが感じることがあります。

 例えば、整数表示しか許容していないHPであっても有効桁を「制限なし」にしておくと、HPへのダメージや回復値が小数点以下細かいところまで計算されます。ダメージもしくは回復による加減算はより厳密な処理が行われていることになりますが、「HP が N 回復した」と表示されたにもかかわらず、見かけ上の数値が計算通りにならないことがあります(誤差は大きくても±1ですが)。この場合、「HP が 1 回復した」ときに、表示上は1増えないことがあります。これを防ぐには有効桁を「整数」に設定しておきます。

 有効桁を設定すると精度は指定桁まで制限されますが、指定桁まで制限されることを前提としてよりはっきりした計算結果が得られるようになります。アクション等でのダメージ計算結果も、減算もしくは加算対象の能力値に合わせて値が丸められます。

 これらはすべて、表示桁の設定とは無関係です。

◆ 表示桁

 表示する小数の桁数を指定します。値は表示桁よりも下の桁以降が切り上げられます。たとえば整数表示の場合、能力値の最終値が 1.00000001 であっても表示は 2 になります。

 表示桁は、能力値の表示箇所だけでなく、アクションの実行結果を表示するときにも有効です。これは「HP が N 回復した」という表示の N の部分にも表示桁の設定(この場合はHPの表示桁)が適用されるということです。

 表示は、前述の「有効桁」の設定によって値が丸められた後の処理になります。このため、表示桁に小数第四位と設定されていても、有効桁が「整数」だと小数部分四桁は必ずゼロになります。

◆ 現在値補填

 変動能力値、および段階能力値でのみ有効です。

 街にたどり着いたとき、その能力値の現在値や段階値を最大もしくは最小に自動的に設定させる設定項目です。

 ただしこれは街にいる間ずっと補填を保証するものではありません。たとえば、HPが最大値になるよう設定しても、街の酒場でアクションを使用してHPを一時的に下げることはできます。ということは、HPを最大値に補填する設定であっても街で死ぬことはあるわけです。同様に街でMP不足に陥ることもある、ということになります。寺院や酒場で一時的に変化した現在値等は、街の施設から抜けると設定通りに補填されます。

◆ ○○転向時に初期化

 オンにしておくと、該当の属性が転向した際に、成長やボーナスによって累積させた値、および成長ステップと経験値をゼロに戻します。

 これはWizardryでいうところの「クラスチェンジのときに能力値が種族の特性値まで落ちる」機能を実現するためにあります。転向時に初期化したい能力値についてはチェックボックスをオンにしておきます。

 成長ステップと経験値については後述します。

◆ 転向後も転向前の値を保証

 転向したときに、転向直前の標準値(最大値)を転向後も最低値として保持し続けるかを設定します。これを「最低保証値」とし、チェックボックスをオンにしておいた能力値については、転向時に「最低保証値」の計算と記録が行われます。

 「最低保証値」が記録されていると、能力値の算出において、ある地点までの計算結果が「最低保証値」に達しないとき、強制的にその値まで引き上げる処理が行われます。具体的には、前述の「最終値の算出方法」で「(3)乗算能力・加算能力・乗算値・加算値」の計算直後、保持した値に満たない場合に強制的に(3)の計算結果に「最低保証値」を割り当てます。

 この保証処理が入る場合、(3)までのあらゆるベース値・配合計算・乗算・加算が無視されて計算結果が算出されることになります。転向後、配合の設定を無視してでも転向前の値を保持したい場合に指定します。

 これはWizardryでいうところの「クラスチェンジ後もチェンジ前のヒットポイントを保持する」機能を実現するためにあります。また、段階能力値の値を保持する、つまり呪文の使用回数をクラスチェンジ後も減らさない目的でも設置されています。

 この機能を用いると、配合の設定が行われている能力値であっても、転向後の能力値変化の影響を受けずに最終値が計算されることになりますが、反面、どのような場合でも「最低保証値」を保持してしまう(ステータスなどの影響を受けてもそれ未満に下げることができない)という機能の劣化を招きます。

2.値の成長方法

 能力値は、個別に経験を積ませることで自身の値を成長させることができます。「経験値」と呼ばれる整数を累積させることで成長を判断します。「経験値」が、特定の計算式によって算出される「必要経験値」に達すると自動的に成長する仕組みです。

 レベルも含むすべての能力値は、内部に「ステップカウンタ」と呼ばれる、他のRPGのいわばレベル相当の管理情報を持っています。あらゆる能力値のステップカウンタはゼロで始まり、必要経験値が溜まるたびに1ずつ上昇していきます。ステップが1上昇すると、設定されている成長値が能力値に加算され、次に必要な経験値を計算する準備が行われます。

 通常、次のステップへの上昇に必要な経験値は、現在のステップに上昇するときに必要だった値よりも増加します。上昇の幅は設定次第で、たとえば1.2倍であるとか、2倍であるといった値を設定します。これは、前のステップのときと同じ難易度の行為に挑戦しても成長が得られないようにするための仕組みです。増加させない設定もできる(1倍)ため、この規則はゲームごとに制作者が決めます。

 各能力値には、必要経験値の計算に必要なパラメータが用意されていて、ツールから編集できるようになっています。本項ではその点を解説します。

 なお、レベル能力値自身の値は、必要経験値の計算処理に何の影響も与えません(レベル能力値であっても成長ごとに0.1ずつ上昇するかもしれませんし、1万ずつ減少する設定になっているかもしれません。このため、必要経験値の計算に使用できません)。

■ キャラクタが経験値を取得する方法

 編集ツールのアクション設定などで、「挑戦応戦判定情報」を設定する場所がしばしば存在します。ここで設定する項目の中に、行為の実行者に経験値を加算する設定ができるようになっています。

 また、戦闘に勝利すると、倒したエネミーに設定されている経験値が「レベル」の経験値に加算されます。

■ 経験値算出の方法

 以下の式で表されます。

次回必要経験値=基礎経験値×(経験値倍率^現ステップ値)×(100−素質A)÷100+現ステップ必要経験値
(「^」はべき乗を表す)

 式の最後で「+現ステップ必要経験値」を行っており、現時点まで上昇させた分のステップについては、再計算が行われません。すでに上昇の済んだステップの必要経験値については値を内部に保存するのみで、計算する必要経験値は常に最新のステップに対してのみ行います。このためゲームの途中で素質Aが変化すると、次のステップ以降の必要経験値に影響は出ますが、それまでの分は再計算されません。ですのでプレイヤー側から見れば、素質Aが上昇するイベントを得るタイミングは早ければ早いほど嬉しいことになります。

■ 成長加算値(r)

 ステップが上昇したときに、能力値に加算する値を設定します。空、もしくは0だと成長しない能力値であるとみなされます。

 乱数が設定されていた場合、上昇する値はランダムになりますが、能力値ごとに成長値算出用の乱数系列が割り当てられているため、リロードによって経験値を積み直し、上昇する値を変更することはできません。

■ 経験値増加停止段階

 経験値増加停止段階は、計算に用いられる「現ステップ値」の最大値です。ステップ自体は経験値を得ることで上昇を続けますが、計算に用いるステップ値に限界値を設けて、途中以降の必要経験値が前のステップに比べて増加しなくなるよう抑制する機能です。

■ 経験値に関する他の規則

3.段階能力値の各段階値の算出方法

■ 段階能力値とは

 段階能力値は、現在値/最大値の組み合わせが複数に別れている能力です。ゲームのキャラクタ情報画面下部に表示される「7/6/4/3/3」といったように段階別に値が表示されます。

 その目的は、アクションのレベル単位の消耗電池として使用することにあります(現在はこれ以外の用途がありません)。段階能力値の消耗は、アクションのレベルに相当する段階について行われます。

■ 各段階の最大値算出式

 以下に式を示します。これは編集ツール画面に記載されているものと同じです。

N段階最大値=(能力最終値−(N−1)×係数A+定数B)÷除数C+ボーナスD
(ボーナスDは、その前の項の算出結果(小数切り捨て)が1以上の場合のみ加算)

 実際の計算結果については、編集ツールからテストボタンを押して確認します。ボタンの隣に入力ボックスがありますが、これはテスト用の「能力最終値」です。

 またこの方法だけでは「能力最終値」がゲーム中、どのように変化していくのか見極めることができません。段階能力値のままでは「能力最終値」をゲーム中に表示させることができないからです。ですので、「能力最終値」を確認したい場合、段階能力値を「(1)通常能力値に設定する」「(2)能力値グループを段階能力値以外に設定する」ことで、ゲーム中の最終値を他の能力値と同様表示させます。

■ 「呪文使用回数」の実装

 アクション系統側の設定で、消耗能力値に消耗させたい能力値を設定しますが、その対象となる能力値にはどのような設定をしておけばいいのか、という話です。

 ドラゴンクエストのような「マジックポイント」を実装する場合は変動能力値になります。よってそちらについては割愛します。

 ここでは段階能力値、つまりWizardryのような呪文回数用の能力値をどのように実装するか、という点をお話しします。まず、能力値の種類は「変動能力値」、そして能力値グループは「変動能力値」(名称は変更されている場合あり)に設定します。

 キャラクタの成長と共に呪文の使用回数が上昇するように仕向けるためには、配合を使うことが近道になると思います。配合は他能力値の変化に従って自身の値を変化させることができるからです。段階能力値を成長させるという方法もありますが、成長機能は通常能力値にスポットをあてて設計されており、なかなか使いこなせません。

 レベルを使用している場合、配合もとの能力値にレベルを指定すれば、段階能力値の値がレベルの上昇と共に上昇していきます。スタンダードに考えるならばこれを利用することが一番だと思います。

 しかしこの方法をそのまま使いますと、属性の異なるキャラクタ間(つまり、クラスの異なるキャラクタ間)で使用回数の上昇ペースが同じになってしまいます。また、使用回数の増加は呪文の習得速度にも合わせなければなりません。レベル2の呪文を憶えたときに2段階目の使用回数がゼロのままでは意味がありません。

 属性の異なるキャラクタ間で成長速度に差異を出しつつ、呪文取得速度にも合わせるためには、複数の能力値を組み合わせて、前述した配合・乗算・加算機能を駆使して最終的な値を計算させます。そして、その課程で習得レベルも計算させることになります。また、属性側の設定で成長速度を表す初期値を属性(クラス)ごとに設定してやる必要があります。サンプルゲームではこれらを実現してみましたが、細かい能力値間の連携について話すと長くなるのでひとまずここまでとさせていただきます。

◆ サンプルゲームの能力値数

 サンプルゲームの能力値が一見多いのは、DesigeonのシステムでWizardryの呪文システムに近づけるためには能力値を増やさざるを得なかったためです。よりシンプルな能力値構成でも楽しめるゲームは作れると思いますので、能力値を再設計する際はこれらを全部削除したいですね・・・。


熊恭太郎