吉里吉里2/KAG3のintrandomは簡単に乱数が使えて便利ですが、デフォルトの状態ではバグがあります。例えば「@eval exp=”f.乱数 = intrandom(0, 5)”」とするとf.乱数は0以上5以下の数値になるはずですが、非常に稀に6になってしまいます。
これはtjsのMath.randomがバグっているためですが、吉里吉里2は既にメンテナンスされていないので多分修正されません。ということで自分で直しましょう。以下のスクリプトをOverride.tjsかAfterinit.tjsにコピーしておけば直ります。
// 0以上1未満の乱数を返す(Math.RandomGeneratorを使うように修正) Math.random = function() { if (Math.random.staticGenerator === void) { Math.setSeed(); } return Math.random.staticGenerator.random(); }; Math.random.staticGenerator = void; // Math.randomのシードを設定 Math.setSeed = function(seed) { if (seed === void) seed = System.getTickCount(); if (Math.random.staticGenerator === void) { Math.random.staticGenerator = new Math.RandomGenerator(seed); } else { Math.random.staticGenerator.randomize(seed); } };
Math.randomをMath.RandomGeneratorを使って計算する形に修正しています。Math.randomが直ればそれを使っているintrandomの動作も直ります。