KAGのintrandomを使ってはならない

吉里吉里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の動作も直ります。