Skip to content

Repository files navigation

daredemo_slot

日本のパチスロ(回胴式遊技機)の内部構造 —— 内部抽選・リール制御・状態機械 —— を学び、遊べるシミュレータ。 WebUI で機種仕様(役・リール配列・RT・ストック・ナビ…)を設定して保存すると、そのままオリジナル機種として遊べる。 「だれでも」機種が作れて、作った機種は URL 1 本で共有できる。

これは何ではないか

  • 実在機種の再現ではありません。 実機の ROM データ・抽選テーブル・リール配列・図柄・サウンド等は一切使用していません
  • 換金・課金要素はありません。 プレイマネーのみの教材・おもちゃです
  • 実機に対する攻略・解析を目的とした機能は含みません

遊ぶ

ブラウザで遊ぶ: https://sr2mg.github.io/daredemo-slot/

ローカルで起動する場合:

npm install
npm run dev   # http://localhost:5173
操作 キー
MAX BET B
レバー ON Space
左・中・右リール停止 J・K・L

(すべてボタンクリック / タップでも操作可)

機種選択の横にある ⛶ 大画面 を押すと、Chrome の表示領域に合わせて筐体とリールを再レイアウトする。 3840×1600 などの高解像度モニターでは、CSS の拡大コピーではなく目的サイズで再描画するため、高精細なまま大きく遊べる。

機能一覧

UI は 4 つのタブに分かれている: 🎮 あそぶ / 🎵 サウンド / 🔧 機種づくり / 🔬 検定・実測

🎮 あそぶ

  • プリセット 6 機種 — 4 号機時代の代表的な「型」を 1 機種ずつ再現(仕様はオリジナル):

    機種 学べること
    サンプル A タイプ ボーナスのみの王道 内部抽選・引き込み制御・リーチ目の成り立ち
    サンプル AT 機 押し順 AT(獣王型) メイン抽選と独立したナビ層(サブ基板)、押し順ベル 3 択
    サンプル ストック機 ストック + 蓋(吉宗型) ボーナスの貯留と放出モード(通常/天国)による連チャンの波
    サンプル SB ストック機 シングルストック(サラ金型) 純ハズレ解除と毎ゲーム自動放出ゾーン
    サンプル CT 機 チャレンジタイム 目押しできる人だけ得をする技術介入
    サンプル 集中機 C タイプ(3 号機) 4 号機で禁止された「集中役物」の歴史教材(適合試験に落ちるのが正しい機種)
  • 設定 1〜6 — 基底テーブル(設定 1)+ 差分オーバーレイ方式。「設定?(ランダム)」でホール気分も味わえる

  • 告知演出モード — 告知なし / ボーナス成立で点灯 / 放出可能で点灯 を切り替え

  • 教材モード — 「成立フラグを見る」で内部抽選の結果と制御対象を覗ける。さらに:

    • 強制フラグ: 次のレバー ON で任意の役を強制成立(リーチ目や制御の観察に)
    • 即入賞: ボーナスを強制成立 + 完全打ちで即揃え(目押し練習を飛ばして状態遷移だけ見たいとき)
  • 遊び方ガイド — 機種ごとの狙い所・波の作り・スペック表。カスタム機種は定義から自動生成

🎵 サウンド

BGM は曲ごとに OPLL(YM2413) または ファミコン 2A03 を選べる。効果音・操作音は OPLL。どちらも当時の音源制約に沿った内蔵レンダラーで鳴らしている。

  • BGM 作成 — コード進行・音源・尺・テンポ・キー・スタイル・シードを選んで作曲。同じシードからは同じ曲を生成する。OPLL はパートごとの音色、2A03 はパルス 2ch のデューティを調整できる
  • BGM 割り当て — 自作曲・プリセット曲を BB / RB 中の BGM に割り当て。曲の保存実体は作曲パラメータのみ(数百バイト)
  • 効果音作成 — サウンドデザイン理論のレシピ(確定 = V→I の完全終止、操作確認 = 完全 4 度上行、警告 = トライトーンへのベンド…)から効果音を設計し、ゲーム内契機(ベット・レバー・停止・払い出し…)に割り当て。既定の効果音もすべて同じレシピ製
  • サウンドテスト — 全効果音・BGM の単体試聴

🔧 機種づくり

難度別の 4 ティアエディタ。どのティアで作っても同じ機種定義 JSON に落ちる:

  1. かんたん(ウィザード) — タイプ・甘さ・波を選ぶだけ。出玉設計と配列は自動生成し、適合試験に通るまで自動リトライ
  2. ふつう(つまみ調整) — 抽選テーブルの重みやボーナス性能をつまみで調整。理論機械割をライブ表示
  3. 上級(構造から作る) — 役・図柄・リール配列・RT・蓋・ナビまで構造化フォームで自作。配列は制約を与えて自動生成(焼きなまし)も可
  4. JSON — 機種定義を直接編集
  • 逆算ソルバー — 目標機械割を指定すると抽選テーブルを自動調整(二分探索)
  • 保存時検証 — 構造検証 → 配列総当たり検証(蹴飛ばし・リプレイ取りこぼし)→ スペック実測 → 適合試験、をすべて通してから保存
  • 共有 — 機種定義を deflate + base64url で URL ハッシュに埋め込み(#m=...)。サーバー不要で 1 本のリンクとして共有できる。JSON エクスポート / インポートも可

🔬 検定・実測

  • スペック実測 — 適当打ち / 完全打ちの機械割をモンテカルロ実測(両者の差 = 技術介入度)
  • 配列チェック — 全停止位置の総当たりで、蹴飛ばし失敗・リプレイ取りこぼしを検出
  • 適合試験(試射試験風) — 4 号機基準(400G ≤ 300% / 6000G ≤ 150% / 17500G 60〜120%)の出玉率チェックを Web Worker プールで並列実行。シード焼き込みで並列でも結果は決定論

見た目のアセット

リール図柄と筐体パネルは AI 画像生成 + 後処理パイプラインで差し替えられる:

npm run symbols -- sheet.png --grid 4x2 --names seven_red,bar,...  # 背景除去 → 切り出し → 32 色量子化 → 検証
npm run panel -- panel.png                                          # 筐体上部パネル
npm run symbols:check                                               # 既存アセットの機械検証

生成プロンプト仕様・様式ルール(4 号機期の印刷シール調、規格根拠つきの横長 1.6:1)・権利ルールは docs/asset-prompts.md を参照。採用した生成物はプロンプトごとコミットする(曲のシード保存と同じ「再現手順ごと残す」思想)。

設計方針

  • 実機データ不使用 — 抽選値・配列・音・絵はすべてオリジナル。様式(4 号機らしさ)だけを理論と公開規格から再現する
  • 決定論 — RNG は Xoshiro128 のシード指定。作曲・効果音・適合試験まで「同じ入力 = 同じ結果」で、保存物はパラメータだけ
  • 当時の制約ごと再現 — 音は OPLL / 2A03 のチャンネル制約内、絵は少色数の印刷シール調。制約が様式を作る
  • コアは純関数 — 抽選・制御・状態機械(src/core/)は UI 非依存で、Node からもブラウザからも同じに動く(テストが速い理由)

ドキュメント

ドキュメント 内容
docs/design/00-overview.md 全体像: パチスロ内部構造の 5 軸モデルとコンポーネント構成
docs/design/01-machine-model.md 5 軸モデル詳細と機種タイププリセット
docs/design/02-lottery.md 内部抽選エンジン(フラグ・テーブル解決・持ち越し)
docs/design/03-reel-control.md リール制御(引き込み・蹴飛ばし・打ち分け)
docs/design/04-reel-layout.md リール配列の制約・検証・自動生成
docs/design/05-config-schema.md 機種定義 JSON スキーマ全解説
docs/asset-prompts.md 画像アセットの生成プロンプト仕様と権利ルール

開発

npm test           # 高速テスト(数秒。ロジックの性質テスト中心)
npm run test:all   # 全テスト(実測系・レンダリング系の重いテスト含む)
npm run typecheck
npm run build

テストは fast / slow の 2 層。日常は npm test、出玉調整や音源まわりを触ったら npm run test:all を回す。

ライセンス

MIT。同梱するサードパーティコード(OPLL 音源コア emu2413 = MIT)の表記は THIRD-PARTY-NOTICES.md を参照。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages