CoOp:Anything
Search any game and see how much of it you can play with friends: every co-op mod, its stage, quality and community rating.
アウトか、セーフか。二塁塁審になって、盗塁で滑り込む走者の足とタッチのどちらが先かを見極めるブラウザゲーム。際どい判定は監督のリクエストでスロー検証。誤審3回で失格。
Translation pending
GamesTypeScript · JavaScriptGitHub @chozoOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
二塁塁審になって、盗塁のタッチプレーでアウトかセーフかをコールするブラウザゲーム
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗プレイヤーは野球の二塁塁審。一塁走者の盗塁で、滑り込む走者の足がベースに触れるのと、ボールを持ったグラブが走者に触れる(タッチ)のと、どちらが先かを見極めて「アウト」「セーフ」をコールする 3D のブラウザゲームです(縦型 9:16、スマホ向け。PC でも遊べます)。
「一塁塁審ジャッジ」(umpire-1b)をもとに作っています。構成、BGM、得点、段階と称号、監督のリクエストとリプレイはそのまま引き継いでいます。
GAME.skipLead)src/config.ts の CAMERA)。向きと画角は、プレーを作った時点で時刻ごとに先に計算しておく(buildTrack)
pitchHold / pitchBlend)leadAngle / fov / fovRate / fovRateIn)catchBefore / catchAfter / ballBefore / closeFov / pan / panRate / panMax)freeze / runnerIn / after)minMove)moveFovRate / moveTurnRate)margin / pad / fovMax)margin = 足がベースに触れる時刻 − タッチの時刻 で決まる(正ならアウト)。差はいつも 0.001 秒以上あり、同時にはならないsrc/play.ts)TagStyle)
src/play.ts の canWait と close)src/play.ts の coverDist、src/actors.ts の coverRun)
src/actors.ts の tagStance・reach)
1プレーの流れ(src/play.ts の generatePlay)。先に差を決め、走者の到達時刻から逆算して、捕球・送球・投球の時刻を合わせる。
| 場面 | 範囲 |
|---|---|
| 投手が動いてから投げるまで(クイック) | 0.82〜1.05 秒 |
| 投球の速さ | 37〜42 m/s |
| 捕手が捕ってから投げるまで | 0.55〜0.85 秒 |
| 捕手の送球の速さ | 33〜38 m/s(ポップタイムは約 1.6〜2.0 秒) |
| 走者のリード / スタートの遅れ / 最高速度 | 3.2〜3.9 m / 0.06〜0.22 秒 / 8.4〜9.3 m/s |
| 滑り始めてからベースまで | 0.5〜0.7 秒(大きな差のアウトは長め、最大 1.05 秒) |
| 投手が動いてからベースまで | 約 3.2〜4.1 秒 |
RUNNER.head*、TAG.headStand、STAGE.headSlide)RUNNER.evadeRate を 0 より大きくすると 30人目から出る(STAGE.evade)。確認用に __game.replay({ evade: true }) で作れる| プレー | 内容 |
|---|---|
| 1〜3人目 | 練習。差 0.3 秒以上のはっきりしたタイミングだけ。2・3人目は直前と逆の結果 |
| 4人目〜 | 際どい・中くらい・はっきりが混ざる。際どさは正解数の段階で変わる |
| 16人目〜 | 送球がそれる |
| 20人目〜 | ヘッドスライディングもする(40%) |
src/config.ts の LEVELS)| 正解数 | 称号 | 際どい(いちばん小さい差〜際どいの境目) | 中くらい | はっきり |
|---|---|---|---|---|
| 0〜9 | 草野球の審判 | 0.035〜0.058 秒・35% | 0.059〜0.118 秒・35% | 0.12〜0.32 秒・30% |
| 10〜19 | 審判見習い | 0.028〜0.05 秒・40% | 0.051〜0.11 秒・35% | 0.12〜0.32 秒・25% |
| 20〜29 | 二軍の審判 | 0.022〜0.04 秒・45% | 0.041〜0.10 秒・35% | 0.12〜0.32 秒・20% |
| 30〜39 | 一軍の審判 | 0.018〜0.034 秒・50% | 0.035〜0.094 秒・30% | 0.12〜0.32 秒・20% |
| 40〜49 | ??? | 0.017〜0.027 秒・55% | 0.028〜0.087 秒・25% | 0.12〜0.32 秒・20% |
| 50〜99 | ??? | 0.017〜0.022 秒・60% | 0.023〜0.082 秒・20% | 0.12〜0.32 秒・20% |
| 100以上 | ??? | 0.017〜0.022 秒・60% | 0.023〜0.082 秒・20% | 0.12〜0.32 秒・20% |
すべて Web Audio API で合成しています(音声ファイルなし)。
| 音 | 鳴るとき |
|---|---|
| 捕手のミット | 捕手が投球を捕る瞬間(遠い) |
| 走者の足音 | 走者の足が地面に着くたび(滑り始めるまで) |
| スライディング(ザザーッ) | 滑り始めてから、ベースに触れた少し後まで |
| 送球の風切り音・二塁での捕球音(パシッ) | ベースに入った野手が捕る瞬間 |
| コールの効果音・観客の歓声など・BGM | 「一塁塁審ジャッジ」と同じ |
app/
├── index.html
├── public/
│ ├── favicon.svg # 「一塁塁審ジャッジ」のものをそのまま使っている
│ └── ogp.png # SNS共有用の画像(1200×630)。npm run ogp で作り直せる
├── src/
│ ├── config.ts # 調整値(寸法・走者・バッテリー・タッチ・難易度・得点・目線)
│ ├── play.ts # 1プレーの正解(時刻と位置)を作る。描画に依存しない
│ ├── figure.ts # ローポリの人形(手足の先の位置から IK で関節を決める)
│ ├── actors.ts # 走者(リード・走る・スライディング)、投手、捕手、ベースに入る野手(捕球・タッチ)、ほかの野手、監督
│ ├── camera.ts # 塁審の目線、リプレイのカメラ、監督のアップ
│ ├── scene.ts # スタジアム、ボール、リプレイの印、リクエストの四角の軌跡
│ ├── audio.ts # 効果音と BGM の合成
│ ├── main.ts # 進行・入力・表示・確認用の入口(window.__game)
│ └── style.css
├── tests/play.test.ts # プレー生成の単体テスト(vitest)
└── tools/
├── e2e.mjs # ブラウザでの通し確認(playwright-core + インストール済み Chrome)
├── shots.mjs # 1プレーの各時点のスクリーンショット
├── pose.mjs # タッチの前後の野手の姿勢を、塁審の目線・横・後ろから撮る(tools/out/pose/)
├── coverseq.mjs # ベースに入る野手の動きを一定の間隔で撮る(塁審の目線・斜め上・追う視点など)
├── framing.mjs # 塁審の目線で、収めたい点(投手〜捕手・走者の全身・タッチの場面)が画面に収まるかを測る
├── motion.mjs # ベースに入る野手の動きを測る(瞬間移動・足の滑り・速さ)
├── overlap.mjs # ベースに入る野手と走者の体が重なっていないかを測る
├── contact.mjs # スクリーンショットを1枚に並べる
├── promo/ # 告知動画の撮影と台本(scenario.js)。出力は ../video/
└── ogp/make-ogp.mjs # OGP画像を作る(際どいアウトの「タッチの瞬間」と「上下2画面のリプレイ」を撮って、タイトルと並べる)
npm install
npm run dev # http://localhost:5290/
npm test # 単体テスト
npm run e2e # 通し確認(npm run dev を起動した状態で)
npm run build # dist/ を空にして、型チェック + dist/umpire-2b/ へ出力
npm run promo # 告知動画を作る(ビルドしてから撮影。出力は ../video/)
npm run ogp # public/ogp.png を作り直す(npm run dev を起動した状態で。SEED・INDEX・MARGIN で場面を変えられる。決まった乱数なので毎回同じ場面になる。画素は描画の都合で少し変わる)
node tools/shots.mjs [seed] [index] [差] [SS|2B] [sweep|wait] [wide] # 1プレーを撮る(tools/out/shots/)
node tools/motion.mjs '[{"cover":"2B","margin":0.03}]' # 野手の動きを測る(JUMPS=0.06 で跳んだコマ、SLIDE=1.5 で足の滑りを出す)
node tools/overlap.mjs '[{"cover":"2B","margin":0.03}]' # 野手と走者の体の重なりを測る
FROM=-0.5 W=405 H=720 node tools/coverseq.mjs tools/out/seq '{"cover":"2B","margin":0.03}' 0.07 ump # 捕る 0.5 秒前から 0.07 秒ごとに撮る
node tools/framing.mjs [プレー数] # 塁審の目線で、収めたい点が画面に収まるか・画角の変化・判定の瞬間に足やグラブが隠れないかを測る(最初のプレーと途中のプレーを交互に。CAM='{"judgeS":1}' で調整値を変えて測れる)
?seed=数値 を付けると、プレーの並びが毎回同じになるwindow.__game で状態の取得・コール・時間の速さの変更・1コマずつの進行・プレーの指定(replay({ margin: 0.01, cover: 'SS', style: 'wait', wide: true }) など)ができるwindow.__game.sight() で、塁審の目線からグラブ・前の足・ボールが体に隠れていないか、画面のどこに映るかを測れる。window.__game.probe() で、いま描いている足首とグラブの位置と、正解のデータから計算したタッチの目標・靴の先を比べられるベースに入る野手(とくに二塁手)の動きを見直した。直す前に測ると、次のことが起きていた
直した後: 1 コマで体が跳ぶ瞬間移動はなくなった。関節が 1 コマ(1/120 秒)で 7.5cm を超えて動くのは、走る足・それた送球へ手を伸ばすときの肘・タッチの後にグラブを引き上げるときの肘だけで、いずれも数コマ続く速い動き(最大 10cm)。地面についた足の滑りは 2 m/s 未満(ほとんどは 1 m/s 前後)、走る速さは最高約 8 m/s。遊撃手・二塁手、振り下ろす・待つ、それた送球の組み合わせで、野手と走者の体の重なりは 3cm 未満
タッチする野手の姿勢を変更(以前は上体を約70°倒し、腰を地面近くまで落として届かせていて、四つんばいのように見えた)。4通り(振り下ろす・アウト/セーフ、待つ、それた送球)を塁審の目線・横・後ろから撮って確かめた。待つタッチの後、走者と野手の胸は約 0.5m 離れる(以前は重なっていた)
待つタッチを差の大きいアウトだけに限った。3000 プレーで数えると、はっきりしたアウトはほぼすべて待つタッチ、際どい・中くらいのプレーはすべて振り下ろすタッチになった
単体テスト(12件): 60 通りの乱数 × 40 プレーでプレーを必ず作れること、正解と差の一致、出来事の順番、盗塁の時間とポップタイムの範囲、靴の先(ヘッドスライディングは指先)がベースの面に届く時刻、ヘッドスライディングが出る段階と割合、タッチをかわす走者を出さないこと(指定すれば作れて、右手で触れる位置・野手が追う時刻が正しい)、タッチで触れる点、送球がそれる段階、段階ごとの際どさの範囲と割合(いちばん小さい差が 1コマ以上、はっきりしたプレーが 2 割以上)、待つタッチが際どいプレーにならないこと、ベースに入る野手の速さが途切れず速すぎないこと
通し確認(npm run e2e): すべて成功
塁審の目線(tools/framing.mjs、180 プレー。途中のプレーの約4割はヘッドスライディング): はみ出しなし。捕球の瞬間の画角は 32〜53°(中央値 38°)、判定の瞬間の画角は 39〜63°(中央値 46°)。1コマの変化は画角が最大 2.0°、向きが最大 2.5°(直す前は、捕球からタッチへ寄せ直すときに画角が最大 4.4°、走者から捕球へ移るときに向きが最大 7.8° 変わっていた)。捕球の場面にボールの飛んでくる軌跡(捕る 0.1 秒前から)まで入れると、捕球の画角は中央値 60°前後まで広がった。タッチと足の瞬間にグラブか足(手)が体に隠れたのは 13/180 プレー(立ち位置を変える前の 15/180 と同程度。三塁側へ 2.0m 寄せると画角は中央値 40°まで狭まるが、140/180 プレーで隠れた)。直す前(決まった向き・画角)は 60 プレー中 59 プレーでタッチの場面の何かがはみ出し、走者はベースの手前で画面から切れていた。一つ前の版は、走者の全身を入れるために広げた画角を判定まで狭めきれず、判定の瞬間の画角は中央値 67°だった(今の版は人が約1.5倍の大きさ)
スマホ実機: 2026-10-31 に公開URLで遊んで確かめた
npm run promo で、縦型(1080×1920、30fps)の約 30 秒の動画を作る。実際のゲーム画面をヘッドレスの Chrome で1コマずつ撮り、字幕と効果を重ねて MP4 にする(tools/promo/、台本は tools/promo/scenario.js)。
__game.audio で書き出し用に鳴らし直す)。-14 LUFS に合わせる../video/umpire-2b-promo.mp4、表紙 umpire-2b-promo-cover.jpg、2秒おきの一覧 umpire-2b-promo-sheet.jpg(動画はリポジトリに含めない)PROMO_EVERY=15 npm run promo で 15 コマおきの一覧だけ作る。PROMO_ENCODE_ONLY=1 npm run promo で撮り直さずに書き出しだけやり直すCloudflare Workers の静的アセットで https://game.chozo.net/umpire-2b/ に公開しています(wrangler.jsonc。game.chozo.net/umpire-2b と game.chozo.net/umpire-2b/* のルートだけを受け持ち、workers.dev は使わない)。
npm run deploy # ビルドして wrangler deploy
npm run e2e -- https://game.chozo.net/umpire-2b/ がすべて成功し、favicon・OGP画像の取得、末尾スラッシュなしのURLの移動(307)、同じドメインの他のゲームの表示を確かめたMIT License(Copyright (c) 2026 chozo)です。改変・再配布・商用利用ができます。利用するときは、著作権表示とライセンス文を残してください。
「二塁塁審ジャッジ」「chozo」の名前やロゴを、作者が関わっているように見える形で使わないでください。
使っているライブラリ: three.js(MIT License)