「保証されたヒット」と「保証されたミス」のチャンス(つまり、子猫がドラゴンをヒットし、ドラゴンが子猫をミスするチャンス)をどのようにするかを考えます。ランダムな結果を保存し、パワーの差を適用する前に、それらの範囲内であればヒットをマークします。これにより、100%のヒット/ミスチャンスの問題が回避されます。ただし、ヒットのチャンスを常に提供する別のオプションがあります。
D&Dは、可能性のあるロール結果全体に確率が均等に分散される「フラット」システムです。他のシステムでは、通常は複数のサイコロを転がして追加することで達成される、より湾曲した分布を使用します。このような曲線を作成するのは簡単です(rand()+ rand())/ 2が思い浮かびます)。
別の可能性は、「サイコロの爆発」です。ShadowrunやSavage Worldsのようなシステムでは、可能な限り最大のダイスの結果をロールすると、そのダイスを再ロールして新しい結果を追加できます。ゲームでは、ランダムな結果が特定のしきい値を超えているかどうかをテストし、そうであれば、再びロールします。サイコロを無期限に爆発させた場合、最も低いゴブリンでさえ神に当たる可能性があり、明示的な「保証されたヒット」メカニックは必要ありません。
したがって、湾曲したロール、紛失の可能性を保証し、サイコロを爆発させる1つの可能なアプローチは、
function getRoll():Number
{
var result:Number = (rand() + rand()) * 3; //Curved result from 0 to 6
if(result > 5.75) result += getRoll(); //Explode over a certain threshold, recursively
return result;
}
function attackHits():Boolean
{
var roll:Number = getRoll();
if(roll < 0.25) return false; //Guaranteed chance of miss
else return ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
(player.luck - enemy.luck) + roll) >= 10; //Your original test.
}
もちろん、それはテストされておらず、バランスが取れていません。それらが正しいと感じるまで、すべてのマジックナンバーを調整する必要があります。
ルールを逐語的にコピーすることに関しては、それに関して法的および倫理的な問題があります。ただし、D&Dや他の卓上ゲームからインスピレーションを引き出しても大丈夫です。そもそも彼ら全員がデザインされたのです。また、プレーヤーにルールの正確な動作を示す必要はありません。また、スムーズな浮動小数点サイコロカーブを使用すると、物理的なサイコロの整数制約に制限するよりも良いフィーリングにつながることがわかります。