本文へ移動
cccskills
無料GitHub で公開

2d-game

窓際族物語の2Dゲームを新規作成し、Seedance(CapCut)で制作した動画をオープニング/イベントのカットシーンとして組み込むワークフロー。ユーザーから2Dゲームの制作を頼まれたとき、添付動画(mp4)をゲームに組み込む・差し替えるよう頼まれたとき、カットシーンの追加・修正を頼まれたときに必ず使用する。

インストール方法を見る

含まれるファイル(3)

  • SKILL.md10.1 KB
  • templates/cutscene.css722 B
  • templates/cutscene.ts2.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

2Dゲーム制作ワークフロー(Seedance動画カットシーン対応)

「オープニング動画 → ゲーム開始 → イベント動画 → ゲームの続き」のように、Seedance製の動画クリップをカットシーンとして挟める2Dゲームを作る。動画はユーザーがCapCut(Seedance)で制作して添付ファイルとして渡してくる。動画が届く前でもゲーム本体は先に作れる設計にする(後述のとおり、未配置の動画は自動スキップされる)。

このスキルには2つのモードがある。依頼内容に応じて使い分ける:

  • モードA: 新規2Dゲーム作成 — ストーリー/企画を受け取ってゲーム一式を作る(動画は同時でも後日でもよい)
  • モードB: 添付動画の組み込み・差し替え — 既存ゲームに動画を配置する(→ 手順1だけ実行すれば済むことが多い)

前提となる参照ファイル

  • 世界観: 01_WORLD/WORLD_BIBLE.md(禁止事項: ブラック企業描写、いじめ、パワハラ、鬱展開、グロ描写)
  • 正史年表: 01_WORLD/STORY_TIMELINE.md
  • キャラクター設定: 02_CHARACTERS/*.md(各キャラのNG変更=デザイン上変えてはいけない要素はゲーム内表現でも厳守)
  • 2Dゲームのテンプレート実装: 08_ROMANCE_NOVEL_GAME/(Vite + TypeScript、依存ゼロ、データ駆動シーン+ステートマシン)
  • 2D用アート素材:
    • キャラ参照画像: 02_CHARACTERS/*.jpg|png
    • 全キャラの前後左右ボクセルレンダリング(スプライトに流用可): 04_GAME_ASSETS/voxel/model_source/previews/
    • インラインSVGでキャラを描く場合の手本: 08_ROMANCE_NOVEL_GAME/src/avatar.ts(NG変更要素をコメントで明記した上でSVG化している)

1. 動画アセットの受け入れ(添付mp4を受け取ったら必ずこの手順)

正典置き場と命名

  • 完成動画の正典置き場は 04_GAME_ASSETS/videos/<game-slug>/(<game-slug>はgames.jsonのidと同じkebab-case)。添付ファイルはまずここへコピーする。ゲームディレクトリに直接置かない(ボクセルGLBと同じ「正典+symlink参照」方式)。
  • ファイル名は役割ベースの英語小文字: opening.mp4 / event_<slug>.mp4(例: event_boss.mp4)/ ending.mp4。
  • ポスター用静止画(任意)は <name>_poster.png。Seedanceキーフレーム(03_SCRIPTS/<NN>_<slug>/clipN_start.png)の流用を推奨。

Web向けサイズ・コーデック確認(コミット前に必ず)

CapCut書き出しはサイズが大きいことがある。まず確認:

ffprobe -v error -show_entries stream=codec_name,width,height -show_entries format=size,duration -of default=noprint_wrappers=1 <file>.mp4
  • 目標: H.264 + AAC / 長辺1280px以下 / 1クリップ10MB以下(GitHub Pages配信のため)。超えていたら再エンコードする:
ffmpeg -i input.mp4 -c:v libx264 -profile:v high -pix_fmt yuv420p -crf 26 -preset slow -vf "scale='min(1280,iw)':-2" -c:a aac -b:a 128k -movflags +faststart output.mp4
  • すでに条件を満たしていれば再エンコードしない(世代劣化を避ける)。
  • ffmpegが無い環境ではそのまま使ってよいが、25MB超のクリップはユーザーに圧縮を相談する。
  • Git LFSは使わない(Pages CIのcheckoutがLFSファイルを取得しないため、ビルドが壊れる)。通常コミットで管理する。

ゲームからの参照(symlink)

ゲームのpublic/videos/から正典置き場への相対symlinkで参照する:

mkdir -p <NN_GAME_DIR>/public/videos
ln -s ../../../04_GAME_ASSETS/videos/<game-slug>/opening.mp4 <NN_GAME_DIR>/public/videos/opening.mp4
  • symlinkは実体ファイルが存在してから張る。 壊れたsymlinkがpublic/にあるとvite buildが失敗する。
  • 動画がまだ届いていない場合はsymlinkを張らず、コード側だけ組み込んでおく。プレイヤー(cutscene.ts)は404時に自動スキップするので開発・デプロイは止まらない。後日動画が届いたら「正典置き場にコピー → symlink」の2手で組み込み完了(コード変更不要)。

2. 新規ゲームの雛形(モードA)

  • ディレクトリ名: リポジトリ直下の既存NN_連番の最大+1で NN_UPPER_SNAKE(例: 10_XXX_GAME)。
  • スタックは08_ROMANCE_NOVEL_GAMEと同じ Vite + TypeScript(依存ゼロ) を基本とする。アクション性が高くCanvas描画が大量に必要な場合のみ、エンジン追加(PixiJS等)を検討してよいが、まず依存ゼロで検討する。
  • 必須ファイル構成:
    • package.json — 08_ROMANCE_NOVEL_GAME/package.jsonを踏襲。"build": "tsc --noEmit && vite build" は必須契約(Pages CIが実行する)。
    • vite.config.ts — base: "./" 必須(Pagesのサブパス配信のため)。server.portは.claude/launch.jsonの既存最大ポート+5、strictPort: true。
    • tsconfig.json, .gitignore(node_modules / dist / .vite / *.log / .DS_Store)— 08からコピー。
    • index.html — lang="ja"、モバイル用viewport(user-scalable=no)、OG/Twitterメタ、public/og.pngまたはog.svg。
    • src/main.ts, src/game.ts(ステートマシン), src/types.ts, src/style.css ほか。
    • src/cutscene.ts と style.css へのカットシーン用CSS — このスキルのtemplates/cutscene.tsとtemplates/cutscene.cssをコピーする(voxel-character-kitと同じ「各ゲームにコピー」方式。symlinkにしない)。
    • README.md(日本語。遊び方・エンディング条件・技術メモ。08のREADMEが手本)。

3. カットシーンの組み込みパターン

ステートマシンの状態遷移に await playCutscene(...) を挟むだけでよい。典型形:

import { playCutscene } from "./cutscene";

// タイトル画面の「はじめる」タップハンドラから呼ぶ
private async start(): Promise<void> {
  // ユーザー操作の直後なので音声付き自動再生が通る
  await playCutscene(this.root, {
    src: "videos/opening.mp4",
    poster: "videos/opening_poster.png",
  });
  this.phase = "play";
  this.render();
}

// ゲーム中のイベント発火時(ボス出現・章の切り替わり等)
private async onChapterEvent(): Promise<void> {
  await playCutscene(this.root, { src: "videos/event_boss.mp4" });
  this.phase = "play2"; // ゲームの続きへ
  this.render();
}

守るべきポイント:

  • オープニング動画は必ずタイトル画面のタップ後に再生する。 ページ読み込み直後の自動再生はブラウザにブロックされ、音声も出ない。タップ起点なら音声付きで再生できる。
  • ゲーム中のイベント動画も、直前にユーザー操作(選択肢タップ等)がある遷移に置くのが安全。操作なしで発火する場合でもcutscene.tsが「タップで再生」にフォールバックするので破綻はしない。
  • スキップは常時有効(skippable: falseは演出上どうしても必要な場合のみ)。
  • 動画は16:9想定。縦画面ではレターボックス表示になる(cutscene.cssのobject-fit: contain)。
  • srcは"videos/opening.mp4"のように先頭スラッシュなしで書く(base: "./"のため)。

4. 登録チェックリスト(新規ゲーム時に全部やる)

  1. GAMES_PORTAL/games.json にエントリ追加(idはkebab-case、buildScript: "build"、distDir: "dist"、outputDir: "games/<id>"、imageはgames/<id>/og.png等、accent、controls)。
  2. .github/workflows/deploy-games-pages.yml:
    • on.push.paths に "<NN_GAME_DIR>/**" を追加。
    • 動画を組み込むゲームが初めての場合は "04_GAME_ASSETS/videos/**" も追加(動画差し替えで再デプロイさせるため)。
    • cache-dependency-path に <NN_GAME_DIR>/package-lock.json を追加。
  3. .claude/launch.json にdevサーバ設定を追加(npm run dev --prefix <NN_GAME_DIR>、vite.config.tsと同じポート)。
  4. ルートREADME.md の「ゲーム」一覧に1行追加。
  5. npm install を実行して package-lock.json を生成・コミットする(CIはnpm ciを使うため必須)。

5. IPルール(全制作物共通)

  • WORLD_BIBLE.mdの禁止事項(ブラック企業描写、いじめ、パワハラ、鬱展開、グロ描写)を厳守。Story Formula(変なことを始める→巻き込まれる→少し騒ぎになる→最後は笑顔)に沿ったトーンにする。
  • 各キャラのNG変更(そば屋の白い仮面/たこさんの触手/とーくんのアロハ・帽子・ウクレレ等)は2D表現でも維持する。キャラを描くコードには、08のavatar.tsのようにNG変更要素をコメントで明記する。

6. 動作確認(完了条件)

  1. npm run build が通る(tsc --noEmit含む)。
  2. .claude/launch.jsonのdevサーバで起動し、以下を確認する:
    • タイトル→オープニング動画→ゲーム→イベント動画→ゲーム続き、の一連フローが動く。
    • 動画のスキップ(タップ)が効く。
    • 動画を未配置にした状態でも自動スキップでゲームが進む(動画が後日届く運用の保証)。
    • モバイル幅(375px)でレイアウトが崩れない。
  3. 動画をコミットする場合はファイルサイズを再確認(1クリップ10MB目安、25MB超は要相談)。

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Turn character reference images into reusable, rigged voxel 3D assets for Blender and Three.js through an imagegen turnaround and user-approval workflow. Use when Codex needs to preserve a character's likeness across front, side, and back views; create or revise Minecraft-like cube-headed models; prevent missing rear hair or clothing; split features between block geometry and face/clothing textures; generate GLB and editable .blend files; add walk/smash-compatible rigid-part pivots; or diagnose why a voxel conversion is not recognizable.

日本語の概要は準備中です。原文の説明を表示しています。

sobaya-0141/Seedance_Madogiwa42026年10月9日 更新

colab-video

無料日本語概要

窓際族物語の動画生成工程(/local-videoのステップ7)だけをGoogle Colab(CUDA GPU)で実行する派生ワークフロー。ローカルMacにCUDA GPUが無くMiniMax H3を実行できないとき、ユーザーから「Colabで動画を作って」「H3をColabで回して」「LTXで動画を作って」と指示されたときに必ず使用する。台本・音声・キーフレーム生成・画像検証(ステップ1〜6)と最終結合(ステップ8〜9)はローカルで行い、動画生成だけを同梱ノートブック(H3=h3_colab.ipynb / LTX-2.5=ltx25_colab.ipynb)でColabに切り出す。セリフ(wav駆動リップシンク)はH3、セリフなしI2VチャプターはLTX-2.5も選べる。無料T4は配管検証用、本番生成はL4/A100(Pay As You Go / Colab Pro)。

sobaya-0141/Seedance_Madogiwa42026年10月9日 更新

image-validation

無料日本語概要

動画制作スキル(/seedance・/local-video)で生成されたキーフレーム・参考画像を台本(script.md)と突き合わせて検証するワークフロー。プロンプトどおりの内容になっているか、小道具の状態(ビールの残量等)や機構小物の位置(ドアノブ・蝶番)が物理的に正しいか、場面の時間帯・天気が急変していないか(昼→夜ジャンプ等)をQwen3-VL(Ollama)とClaudeの目視の二重チェックで検証する。ユーザーから「画像を検証して」「キーフレームをチェックして」と指示されたとき、キーフレーム生成後の検証工程を実行するときに必ず使用する。

sobaya-0141/Seedance_Madogiwa42026年10月9日 更新

local-video

無料日本語概要

窓際族物語の動画をクラウドを使わずフルローカルで生成するワークフロー(MiniMax H3 + ComfyUI)。ユーザーから「ローカルで動画作成して」「ローカルLLMで動画を作って」と指示されたとき、MiniMax H3での動画生成・修正を頼まれたときに必ず使用する。台本→Irodori-TTS/VOICEVOX音声→draw-things-cliキーフレーム一括生成→Qwen3-VL(Ollama)による画像検証→チャプター毎のH3動画生成→ffmpeg結合まで全工程をローカルで完結させる。

sobaya-0141/Seedance_Madogiwa42026年10月9日 更新

madogiwa-studio

無料日本語概要

Madogiwa StudioのRemote Web MCPを使い、窓際族物語のギャラリー、記事、エピソード、生成バージョン、使用モデル、登場メンバー、Seedanceプロンプト、入力画像・参照音声・資料、YouTube動画IDと公開状態を登録・確認する。ユーザーがMadogiwa Studioへの登録、公式サイトコンテンツ編集、動画アップロード、プロンプト同期、入力素材管理、Studio ID確認、MCP接続や同僚環境への導入を頼んだときに使用する。

sobaya-0141/Seedance_Madogiwa42026年10月9日 更新

no-image-video

無料日本語概要

窓際族物語の動画を、チャプター毎のキーフレーム画像を作らずに「プロンプト+キャラクターシート+セリフ音声」だけでMiniMax H3(R2V)に生成させるワークフロー。ユーザーから「画像なしで動画を作って」「キーフレームなしで動画を作って」「シートだけで動画を作って」と指示されたときに必ず使用する。大まかな指示→チャプター分割案→チャプター毎の動きを人間に確認→全チャプター確定→プロンプト作成の順で進め、確定前にプロンプトを書かない。画風の注意文はチャプターに映るものだけを最小限で書き、モブキャラはラン専用のキャラクターシートを作って渡す。動画生成の実行先は/colab-video(Colab)または/local-videoステップ7(ローカルCUDA)。

sobaya-0141/Seedance_Madogiwa42026年10月9日 更新

sobaya-0141 のスキルをすべて見る

このスキルの問題を報告する