全状態 リール制御 & バリデータ生成

ハズレ/小役/ボーナス/重複(小役優先)の全フラグ状態で、合法スベリを引き込み優先順(役を揃える→取りこぼし目→リーチ目/チャンス目→通常目)で返す制御を生成・網羅検証。成果物は JSON / C#(ValidSlips(state,…))。何コマ滑らせるか(採用)はゲーム側が決めます。

編集方法: 下の図柄ブラシで図柄を選び、リール帯・小役・ボーナス・リーチ目の各セルを左クリックで配置/右クリックで消去
制御の優先順: 各状態で「成立役を引き込む →(小役は取りこぼし目)→ 引き込み外ならリーチ目(小役取りこぼし時はチャンス目)→ 通常目」。どのスベリでもその状態の禁止目(他役整列・対象外リーチ目 等)は出しません。全押し位置×押し順×前停止で 0〜4 に必ず合法停止が残ることを検証します。
新オプション: ④小役の各形に「重複専用」(ボーナス重複時のみ揃う形=リーチ目リプレイ等)とモード通常+BIG中=既定/通常時のみ/BIG中のみ)、⑤取りこぼし目(対象小役を取りこぼした時にリーチ目より先に出す目。対象小役のモードでのみ参照)、⑥リーチ目に「チャンス目可」(小役取りこぼし時に出すガセ目)を指定できます。モードがBIG中を含む小役が1つでもあると状態 BIG中:ハズレBIG中:小役:〇〇 が生成されます。「通常時のみ」の小役はBIG中では見た目にも揃えません(蹴飛ばし)

① 図柄の登録(赤7・青7など追加可。色/画像も設定)

② ボーナス定義(複数可。揃い形を左中右で指定。例 赤赤青)

ボーナス名
有効ライン:古典5ライン固定。各ボーナスは「揃い形」が有効ライン上に並ぶと整列。
同じボーナス名を複数行にすると1つのフラグとして扱われ、どの揃い形が並んでも成立扱いになります(例 赤7BIG=赤赤赤/赤赤青のどちらでもOK)。「複製」で同名の別揃い形を素早く追加できます。

③ リール配列(帯のセルを左クリックでブラシ図柄を配置)

テキストで一括編集(図柄IDをスペース区切り)

④ 小役入賞形(成立時は引き込み・他状態では禁止目。任意=ワイルドカードは右クリックで)

役名
同じ役名を複数行にすると1つのフラグとして扱われ、いずれの揃い形でも入賞扱いになります。「複製」で同名の別揃い形を追加。
「重複専用」ON=そのボーナスとの重複時のみ揃う特殊形(リーチ目リプレイ等)。小役単独・ハズレ・ボーナス単独では出ません(=出れば重複の信号)。対象ボーナスを指定できます。
モード=この小役が成立し得るゲーム状態(既定=通常+BIG中)。「BIG中のみ」はBIG中(状態キー BIG中:小役:〇〇)だけで揃い、通常時は不可視(並んでもただのハズレ目=禁止目にはなりません)。「通常時のみ」はBIG中では見た目にも揃えません(蹴飛ばす=禁止目)。取りこぼし目は対象小役のモードでのみ参照されます(BIG専用小役の取りこぼし目はBIG中のみ)。BIG中の禁止目は「ボーナス図柄の整列+通常時のみ小役の整列」で、リーチ目/チャンス目は出ても構いません(狙っては出しません)。

⑤ 取りこぼし目定義(小役を取りこぼした時に、リーチ目より先に優先して出す目。5×3グリッド)

対象小役を1つ選び、その小役がフラグ成立中に引き込めなかった(取りこぼした)時に、リーチ目より先に優先して出す目を定義します(優先 tier は小役単独フラグ時のみ)。確定目ではありません=他状態(純ハズレ・他小役・ボーナス・重複)では不問(出てもよい・狙っては出さない)。純ハズレで出したくない場合は同じ形をチャンス目可リーチ目として併設してください(チャンス目は純ハズレ禁止)。グリッドはリーチ目と同じ(図柄/「以外≠」/「小役ハズレ」ブラシ)。
優先順:①小役揃え → ②取りこぼし目 → ③チャンス目可リーチ目 → ④通常目。②の中では「確定」(その停止を採ればどう止めても取りこぼし目が出る=もう引き込めている)が「狙い」(後リールの押し位置次第)より優先され、確定があれば確定のスベリのみ返ります。
 ▲▼ または ⠿ドラッグで並べ替え/タイトル左の ▾ で個別折りたたみ/「無効化」=削除せず一時的に検証・生成から除外

⑥ リーチ目定義(5×3グリッド=枠上/上/中/下/枠下 × 左中右。空=不問。制約リール数で 1確/2確/3確 自動分類)

「チャンス目可」ON=小役取りこぼし時にも出すチャンス目(無ボーナスでも出る=ガセ含む)。OFF=1確等の純ボーナス前兆(小役状態では一切出さない)。純ハズレでは常に出しません。
「小役ハズレ」ブラシでリールに置くと、そのリール(上中下段)が「ハズレ」=そのリールで小役が揃っていない時のみ一致する条件になります(小役が揃う押し位置では一致せず=引き込みを邪魔しない)。小役取りこぼし時の小役ハズレ目(チャンス目)として出すには「チャンス目可」もONにしてください(OFF=ゲチェナ等の純ボーナス前兆=小役状態では出ません)。
 ▲▼ または ⠿ドラッグで並べ替え/タイトル左の ▾ で個別折りたたみ/「無効化」=削除せず一時的に検証・生成から除外

⑦ 検証 & 出力

▸ C#(ReelStopValidator.cs)の使い方
これは何?
各フラグ状態で「合法スベリを引き込み優先順(揃え→リーチ目/チャンス目→通常目)で並べた配列」を返す制御+バリデータです。「⬇ C#」を押すと ReelStopValidator.cs が保存され、Unity等にファイルを1つ追加するだけで使えます。何コマ滑らせるか(採用)はゲーム側が決めます。

使い方は1つだけ
リールを1本止めるたびに次を1回呼びます。達成可能な最上位グループのスベリだけが配列で返ります(引き込めるなら引き込みスベリのみ、無理なら取りこぼし目確定(どう止めても出る)のみ、無ければ取りこぼし目狙い(後リール次第)、次にリーチ目のみ、いずれも無理なら通常目のみ・必ず1要素以上)。どれを採っても安全です。
int[] 合法スベリ = ReelStopValidator.ValidSlips(state, order, 停止番号, 既に止めた位置, 押した位置[, スベリ優先]);
引数
  1. state(状態)… "ハズレ" / "小役:<名>" / "ボーナス:<名>" / "ボーナス:<名>+小役:<名>"(重複)/ "BIG中:ハズレ" / "BIG中:小役:<名>"(BIG中モード)。定義済みキーは Control.Keys
  2. order(押し順)… "順押し" "ハサミ"
  3. 停止番号 … 1本目=1、2本目=2、3本目=3
  4. 既に止めた位置 … 止めた位置を押した順に並べた配列(1本目は new int[0]
  5. 押した位置 … 押下時に「基準段」にあった図柄のindex(0始まり)
  6. スベリ優先(任意)… 同じ優先tier内のタイブレーク。省略時 {0,1,2,3,4}
出し分けCanAlign / AlignSlips / MissSlips / ReachSlips / LoseSlips(state, order, step, prior, push) で tier別にも取得可。
例「揃えられるなら揃える、無理ならあえてリーチ目(ガセ含む)」→ var a=AlignSlips(...); int s = a.Length>0 ? a[0] : ReachSlips(...)[0];

戻り値達成可能な最上位グループのスベリだけを返します(必ず1要素以上)。引き込める→引き込みスベリのみ引き込めず取りこぼし目可→取りこぼし目スベリのみさらに無理でリーチ目可→リーチ目スベリのみいずれも不可→通常目のみ。どれを採っても禁止目は出ません。 引き込みスベリは後リールでの引き込み網羅が大きい順(先頭=最も取りこぼしにくい停止)。④で 「取りこぼし禁止」ON にした小役の状態では網羅最大の停止だけを返す(どれを採っても取りこぼさない・生成時に検証)。採用したスベリ s から 止める位置 = (押した位置 - s + リール長) % リール長(上→下回転=index 降順に滑る)、基準段の図柄 = Reels[リール][止める位置]
(基準段は⑦のセレクタで上段/中段/下段を選択、既定は上段

3本止めるまでの例
var seq = Control[state][order].Seq;
int n0=Reels[seq[0]].Length; int s1 = ValidSlips(state, order, 1, new int[0], p1)[0]; int stop1 = ((p1-s1)%n0+n0)%n0;
int n1=Reels[seq[1]].Length; int s2 = ValidSlips(state, order, 2, new[]{stop1}, p2)[0]; int stop2 = ((p2-s2)%n1+n1)%n1;
int n2=Reels[seq[2]].Length; int s3 = ValidSlips(state, order, 3, new[]{stop1, stop2}, p3)[0]; int stop3 = ((p3-s3)%n2+n2)%n2;
※ 物理的にどのリールが何本目に止まるかは Control[state][order].Seq(0=左,1=中,2=右)。[0] 以外の任意のスベリを選んでも、その状態の禁止目は出ません。互換用に旧 Haz[...]ValidSlips(order,…)(ハズレ専用)も併載。

補足:状態の決定(どのフラグを成立させるか・重複抽選)はゲーム側の役割です。さらに詳しい説明は出力 .cs 先頭コメントにも記載。
検証&制御生成中…
全状態の制御マスク生成と相互検査を実行しています(構成により数秒かかります)