GameMakerで使う乱数は、「疑似乱数」となるので、乱数生成器にrandom_set_seed()で乱数の種を入れて、random()を呼ぶたびに出てくる数字の順番は毎回同じです。
random_set_seedを自発的に記述していない場合でも、内部的にrandom_set_seed(0)で乱数生成を行っているようです。
randomize() or randomise()を呼び出したときは、乱数の種に入れる数字を作り、random_set_seed()にその種を入れるようになっています。
歴史を遡って同じ乱数の値をとるためには、「データの作成時」にrandomizeを呼び出した後、random_get_seed()を使い、乱数の種を取得し、セーブデータや一時データに保管しておく。
その後、randomを使うときは、何回使ったかの回数を保管しておく。
セーブデータロードや戻るコマンド?などで3ターン目や2ターン目に戻ったときは、保管しておいた乱数の種をrandom_set_seed(種の数字)でリセットして、使った回数分randomize()呼び出しを行う。
すると、同じ乱数を取得することができます。
まとめると、
▼メイン処理
randomize()←最初の一回だけ
乱数の種変数「保管する」=random_get_seed()
▼乱数を使うとき
random(数字)
randomを呼び出した回数変数++「保管する」
▼元に戻したいとき
random_set_seed(乱数の種変数)
randomを呼び出した回数変数をループなどでまわして「random(00)」繰り返し呼ぶ
1つ前の乱数を使いたいのでループは「randomを呼び出した回数変数-1」にすればよいと思います。
保管しておくデータは
・乱数の種
・randomを呼び出した回数
だけで同じ乱数を取得できます。