2010年5月5日水曜日

新計算手順の更新命令に関する値の範囲

皆さんゴールデンウィークは仕事ですよね?([Y]/y)

最近はあまり開発が進まないんですが、次バージョンではなんとか、新計算手順(イベント詳細命令)の更新命令を入れたいなという気持ちを持ってます。これは、能力値の現在値や成長値を書き替えたり、ステートを着脱したり、所属を転向するなどの命令を含んでいます。

ところが問題がありまして、指定した値をどういう理屈で適用するかが難しいです。

能力値は下限が曖昧です。ここがひとつ問題になっています。

能力値の成長値
能力値の成長値には上限があって下限がありません。上限値の計算方法は複雑です。
能力値の一時値
一時値には上限も下限もありません。
変動能力値の現在値
変動能力値の現在値については下限が能力値自身の最小値と同じです。でも上限は能力値の最大値ではなく最終値です。最小値と最大値はセットで指定するのに、変動現在値の範囲に適用しているのは最小値、下限のみなんです。一貫してません。
段階能力値の各段の現在値
段階能力値は各段の現在値をマイナスに設定できるようになっています。これは意味がありませんのでゼロを下限にしようと思っています。
以上のようになった経緯については割愛します。

それで、能力値の各値を更新した際、どのような値に丸めるのかが重要な問題で、その詳細を定義し、説明して学習してもらうことが適切なのかどうか。

いっそ現在値を管理している「変動能力値の現在値」「段階能力値の現在値」の二つを除いて、値の範囲を取っ払ってしまおうかなあ、と考えてます。やるなら仕変になります(成長値を弄る旧シナリオの動作が変わるかもしれない)。



値の更新はもう一つ厄介な問題を含んでます。こちらは解決済み、というか妥協することにしました。

それは値の代入・加算・減算といった演算加工です。

例えばイベントの中で、HPに30%ずつダメージを与えるにはどうしたらいいでしょう。まず30%の定義とは?以前の簡易イベントのルールでは、「上限-下限」を100%としています。HPに-100~+100の範囲があるなら、30%は60になります。しかしここ、いま見るとバグっていて割合計算時の下限はゼロという認識で動いています。HPの最大値が100ならおそらく30%は30です。この問題は別に置いておきます。

細分化した命令体系を使う場合、すべて自前計算になります。更新命令には値の代入しかありません。15を指定したらHPが15になるのです。パーティ全員に30%ダメージを与えたいなら、一人一人計算してHPの値を決定しなければなりません。

これまでの経験から、全員にダメージを与えるという処理はことのほか複雑であると感じています。例えばダメージを与える際、メッセージ・画像エフェクト・効果音を同時に発するとしたらどうでしょう。そこは単一の加減算命令を置く場所ではなく、表現の手順をプログラミングすべきところです。30%を加減算する命令だけあっても、「12ポイントのダメージを受けた」というメッセージは作れません。12という文字列を指定するには結局12という値を計算しなくてはいけない。自動計算でやっても意味がない。だから値の更新自体はシンプルな代入に徹する、という考え方です。

この辺が詳細イベント命令の使いにくい部分になりますが、そういうことを書いているうちに、他所のスクリプトを使えるエンジンがだんだん羨ましくなってきました。隣の芝が青く見えるのは昔からなのでやりません(開発力の面でデメリットが大きいのです)が、時折浮気したくなります。



詳細イベント命令について、私がやりたいのは能力値やコマンドの育成を、キャラクタ判別しながらやること、です。条件を満たした魔法使いに、ある場所で特殊な魔法を覚えさせるとかです。それとキャラクタを抽出して転向することです。戦士を丸ごと忍者に変えるような、そういう感じの。

全体としては、最終的にどんな形になるのか自分でも楽しみです。

2 件のコメント:

  1. 予想以上に大きなバージョンアップになりそうです。
    変動能力値の現在値・段階能力値の現在値は、
    能力値の詳細を決めるとき、計算方法を指定するの
    追加に出てくる項目ということでよいのでしょうか?
    他の数値は参照してますが、あの部分の現在値は
    使ってなかったから……影響ない…かな。不安だ。

    詳細イベント命令でやりたいことを読むと
    エリクサのような機能追加なんて簡単に出来ちゃいそう。
    むしろ出来ることが増える分、これをどうやって使うか、かな。

    今作っているシナリオは、初版みたいなものなので
    ほどほどで欲張らない方向で…。

    返信削除
  2. コメントありがとうございます。

    > 変動能力値の現在値・段階能力値の現在値は、
    能力値の詳細を決めるとき、計算方法を指定するの
    追加に出てくる項目

    それです。そこの仕様はたぶん変わりません。
    変わるかもしれないのは成長値です。今は、例えばストレングスの最大値が18なら、たとえ成長値に1億を足しても、種族固有値等との合計が18になるように切り捨てられますが、この上限を取っ払うかもしれないという話です。
    もし人間のストレングスが8で、ストレングス側の最大が18なら、成長ぶんは10しか許容しないという概念と、運用の都合から従来はそういう動作にしています。

    あとイベントの詳細命令は、実際に使うとシナリオ作者側のデバッグが大変なので、大きな負担になりそうです。そこにこだわっているとシナリオ作りどころではなくなるかもしれません。

    返信削除