大ダメージ

大きな数値の扱い

l12_1

夕一くんに大ダメージを与えてみましょう。
大きい数値を表示するだけを目標とし、HPを減らす処理や死亡判定は入れないことにします。面倒なので。

処理例1 – とりあえず表示

【起動条件:呼び出し】

ダメージの数値をピクチャで表示、キャラにフラッシュエフェクト、40フレーム後にピクチャを表示しました。
連続で表示する時にピクチャがおかしくならないよう、ディレイを指定する場合は表示前にディレイリセット(1行)を忘れないようにしましょう。

【NOTE:扱える数字】

ここでは【1234567890】(12億3456万7890)という大きい数値を指定しました。 ウディタで数値に100万以上の値を指定すると、普通の整数ではなく呼び出し値として扱われてしまう(変数呼び出し値参照) ので、ここでは数値として扱うために【データを呼ばない】にチェックを入れてあります(5行)。

また、数値を正常に処理する限界は【-2000000000~2000000000】(プラマイ20億)です。 これを超えると超えた分が切り捨てられるので、掛け算を繰り返したりする処理などでは気をつけなくてはなりません。

同じように気をつけなくてはいけないのが【ゼロ除算】です。
ウディタでは【X÷0=X】になるという、ちょっと特殊な処理です。例えば、

このように計算すると、結果=200÷0(小数切り捨てなので0になってしまう)=200となります。 この例ならわかりやすいですが、これが全て変数だと気づきにくいです。 大きい数字と同様、割り算を繰り返す場合は0が発生しないように気をつけましょう。

処理例2 – 超インフレ

【起動条件:呼び出しのみ】

l12_2

※ 【杼】の文字は本来は木へんではなくのぎへん【禾予】ですが、表示できなかったので代用しています。

20フレーム以内に再び決定キーを押すとコンボがつながってダメージが16倍になるようにしました。
桁が分かりやすいように、UDB0に漢数字の単位を入力し、4桁ごとの繰り上がり処理(28-43行)をして、 その桁の数値が0じゃない時に文字列へ書き込んでいます。CSelf12~29を、それぞれの桁に当てています。
一行にすると思い切りはみ出したので、6行ごとに改行する処理(56-62行)を入れています。演算子の【%】は便利ですね。
このままだと9999無量大数を超えたあたりで数値がおかしくなるので、コンボ回数を制限するか数値が一定以上でループ中断してやりましょう。

【NOTE:繰り上がり処理】

この例では4桁ごとに区切りを入れたため、たとえば【万】に【65535】という数値が入っていた時に

  • (35-36行)数値÷10000(つまり6)を、左の桁【億】(呼び出し値-1の場所)に足して
  • (37-38行)数値%10000(つまり5535)を、現在の桁【万】(さっきの呼び出し値+1)に入力

しています。 すると、6億5535万という数値が表示される仕組みです。自分で定義してやれば、工夫次第で数値はいくらでも扱えますね。
今回は4桁でやりましたが、掛ける数が少ないなら8桁(1000万)おきでも良さそうです。 そうすると使う変数が減って、処理はちょっと複雑になると思います。
公式コモン集にも大きい数値を扱えるものがありましたので、わざわざ自作するような処理でもないでしょうが。考え方の参考になれば幸いです。

はじめにお読みください

ここはWOLF RPGエディター(通称ウディタ)のイベント作成において、 ひとつのお題に対していくつかの考え方を示すページです。正解や不正解ではなく、色々な考え方を示していけたらいいなと思っています。詳しくは以下をお読みください。

続きを読む