単純にビンゴ同様に変数を退避させて、演出、ウェイトをいれずに各番号1~25に対してやったのではうまくいかず、おまけにウェイトをかなり入れても残念ながら500000エラーで不発。
そういうわけで、再び最初から演出抜きのリーチを考えるにいたった。
演出アリでは、とりあえずまずHIT処理をして、次に移動すべきマス対象を取得して、それらのマスと内部値をひとつ下へシフトし、このシフトが行われればループ継続とし、これを繰り返す。ループが終われば次は連鎖処理で、連鎖の対象となるマスはいったん予備変数に格納して後で一括処理(でないとたとえばたて2マス同じ色なら、上から2マス目は連鎖判定無効。なぜなら上
1マス目ですでに2マス目との連鎖によって自身を空白、としているので次に2マス目に対象がうつるときはすでに上が0となっており、連鎖の条件とはならないので。この問題はビンゴのほうでも発生して、こちらは連鎖の同期化問題となってかなり悩んだ問題のひとつになった。しかしそれのおかげで連鎖ゲームを今回再びつくったが、すぐにこれに気づけてよかった)することで次に連鎖対象を消してそして再び落下処理に…を繰り返す。
演出抜きのほうでは、もう予備変数への格納はやめて、100を加算することで判定し、かつ消しだまも10を加算することで一括処理しやすいように。10や100を加算する理由は、容易に10に関する剰余を考えればこれらの値が操作しやすいからである。
たとえば116(百の位が連鎖で消えるかの判定、十の位が消しだまか否か、一の位が種別)
ここで種別とは、0が空白、1~5がカラーブロック、6が配当宝石を指す。
この場合任意の3桁の数は、これらの組み合わせにより一意的に定まる。
なぜなら別の組み合わせ(a,b,c),(d,e,f)がありこれらが100a+10b+c=100d+10e+fを満たすとすると、
100(a-d)+10(b-d)+(c-f)=0という式が得られ、ここで条件a,d=0 or 1でb,e=0 or 1そしてc,f=0 to 6とすると、まずa-d=0でない(負とする)とすれば100(a-d)のみを残して移項すると左辺は100以上となり、右辺のみで100以上を作ろうとすると、b-dがどうやっても1より大きくならず、当然c-fも6までしか大きくならないつまり7以上にはなりえないということで明らかにおかしい。
正の場合も同様。したがってa=dとなりあとb,dに関しても同様にすればよい。
またたとえば100の位を取り出したいならば、任意の3桁自然数(上記をみたす)に対して100で割った商(÷=100)をとれば一発で、10の位はこの商をもとの数から引き、10で割った商をとればよい。最後の一の位は10で割ったあまりをとるだけ。このように楽に扱うことができる。
ただしたとえば消しだま緑(13)と通常緑(3)の連鎖などでは、ちゃんと消しだまが緑であることをしめすために10で割ったあまりをとる、という操作が必要な点に注意。
これによって、各番号に1フレームのウェイトを入れるだけで再現できるように。
そしてこれはほぼたぶん完璧に機能していると思う。ちなみにこれの仮定で大量に修正すべき点をみつけたのはいつものお話。