Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Grand Archive TCG の日本語カードDB(非公式)。英語カードに日本語訳を重ねる検索・デッキ構築・印刷用PDF・大会デッキ検索。
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Grand Archive TCG を日本で遊ぶ人向けの、非公式ファンサイトです。 英語カードに日本語訳を重ねるカードDBを中心に、デッキ構築ツール・印刷用PDF生成・用語解説などのツールを内包します。 フロントはビルド不要の静的サイト(バニラ JS)。デッキ構築ツールのバックエンドのみ Cloudflare Pages Functions + D1 で動いています。 英語版カードに日本語訳を重ねて検索・閲覧できる、Grand Archive TCG の非公式日本語カードDBです。 全カード翻訳済み(約2,240枚。新カードは随時対応)。カードごとの個別ページ・セット別ページも静的生成しています。檢視完整 README ↗
Grand Archive TCG を日本で遊ぶ人向けの、非公式ファンサイトです。 英語カードに日本語訳を重ねるカードDBを中心に、デッキ構築ツール・印刷用PDF生成・用語解説などのツールを内包します。
フロントはビルド不要の静的サイト(バニラ JS)。デッキ構築ツールのバックエンドのみ Cloudflare Pages Functions + D1 で動いています。
https://ga-card-tools-jp.pages.dev/(Cloudflare Pages)
英語版カードに日本語訳を重ねて検索・閲覧できる、Grand Archive TCG の非公式日本語カードDBです。 全カード翻訳済み(約2,240枚。新カードは随時対応)。カードごとの個別ページ・セット別ページも静的生成しています。
/
├─ index.html カードDB(サイト本体)
├─ app.js / style.css カードDB ロジック・スタイル
├─ cards/<slug>/ カード個別ページ(静的生成・SEO用。約2,240枚)
├─ sets/<prefix>/ セット別ページ(56セット)
├─ tournaments/ 大会デッキページ(静的生成。一覧 / 大会詳細+順位表 / デッキ断片 decks.html)
├─ data/
│ ├─ translations.js 日本語訳データ(用語辞書・メタ訳・カード個別訳の基盤)
│ ├─ tl/ セット別の翻訳ファイル(全セット分)
│ └─ tournaments/ 大会データ(Omnidex APIから取得。index.json / events/ / pending.json)
│
├─ tools/
│ ├─ deck-builder/ デッキ構築ツール(Discordログイン・保存・共有)
│ ├─ print/ 印刷PDFツール(カード画像 → A4に3×3=9枚)
│ └─ glossary/ ひとくちキーワード解説(用語集)
│
├─ shared/ 複数ツールで共有する部品
│ ├─ js/ card-i18n / card-search / card-detail(検索・詳細の共通モジュール)
│ ├─ css/ 共通スタイル(カード詳細モーダル等)
│ ├─ vendor/jspdf.umd.min.js
│ └─ pdf/card-sheet.js PDF生成の再利用コア
│
├─ functions/ Cloudflare Pages Functions(デッキ構築ツールのAPI)
│ ├─ api/ auth(Discord OAuth)/ decks / me / health
│ └─ docs/ docs/配下を本番配信から遮断(404)
├─ migrations/ D1スキーマ(users / sessions / decks ほか)
├─ wrangler.toml Pages/D1 設定(設定のソース・オブ・トゥルース)
│
├─ scripts/ 開発用スクリプト(serve / 静的ページ生成 / validate / 用語チェック)
├─ docs/ 設計書(docs/design/)・開発環境の再構築手順書(dev-setup.md)
├─ CLAUDE.md 開発運用ルール(セッション役割分担・タスク管理・設計書運用)
├─ _headers Cloudflare Pages 用(パス別CSP)
└─ sitemap.xml / robots.txt / ogp.png
/)cards/<slug>/)とセット別ページ(sets/<prefix>/)を静的生成(SEO・共有用)/tournaments/)api.gatcg.com/omnidex/events/*)から主要大会(Store Championship・Regionals・
Nationals・Ascent)の順位表・提出デッキを取得し、日本語訳付きの静的ページとして生成tournaments/<id>/decks.html から取得)/tools/deck-builder/)/tools/print/)/tools/glossary/)Dev Container(Node 20)での開発を想定しています。
npm run dev # 静的プレビュー(ポート3000)
npm run pages:dev # Pages Functions込みのローカル実行(wrangler、ポート8788)
npm run db:migrate:local # ローカルD1の初期化(migrations/ を順に適用。空のDB向け)
npm run validate # データ検証
npm run build:cards # カード個別ページ・セット別ページ・sitemap.xml を生成
npm run build:tournaments # 大会データをスキャンして大会ページを生成
build:tournaments は公式Omnidex APIのイベントidを順に走査して新しい大会を探します
(一覧・検索APIが存在しないため)。取得済みidは data/tournaments/index.json に記録され、
2回目以降は新規idと保留中の大会だけを見ます。--no-scan を付けるとAPIを叩かず既存データから
ページだけを再生成します。sitemapへの反映は build:tournaments → build:cards の順に実行してください。
カードDB・印刷ツールは静的なのでブラウザで開くだけでも動作します(公式APIへ fetch するためオフラインでは一覧が空になります)。
デッキ構築ツールのAPIを動かすには pages:dev + ローカルD1 + .dev.vars(.dev.vars.example 参照)が必要です。
環境を一から作り直す手順は docs/dev-setup.md(ディザスタリカバリ手順書)を参照してください。
パスごとに Content-Security-Policy を出し分けています(_headers)。
/tools/print/* … 外部通信なしの厳格な self のみhttps://api.gatcg.com への connect / img、Discordアバター用の
cdn.discordapp.com(img)、Cloudflare Web Analytics のみ追加許可style-src 'self' のためHTMLのstyle属性は使えません。動的スタイルは data 属性+CSSOM で適用します各 HTML にも <meta http-equiv="Content-Security-Policy"> を入れており、
ヘッダ非対応ホストでも最低限のCSPが効きます。
card.slug をキーに、window.GA_I18N.cards へ訳を追記します。少数の追加は
data/translations.js の cards に、セット単位のまとまった翻訳は
data/tl/ 配下のセット別ファイルに書き、index.html で translations.js の後に読み込みます。
"card-slug-here": {
name: "日本語カード名",
effect: "日本語の効果テキスト(**太字** / *斜体* / 改行 \\n が使えます)",
flavor: "フレーバーの訳(任意)",
},
表記ルール(用語の統一・自己名参照の「」など)は TRANSLATION.md を参照してください。
本番は Cloudflare Pages で公開しています(main への push で自動デプロイ)。
ビルド不要・出力ディレクトリはリポジトリのルート(/)で、_headers によるパス別CSPがそのまま適用されます。
migrations/ のファイルだけを本番D1へ単体で適用する
(npx wrangler d1 execute DB --remote --file=migrations/000N_xxx.sql)。
⚠️ 必ず「本番D1へ適用 → push」の順。逆順にすると、コードだけが本番に出た数分間、
新しい列を読むクエリが no such column で落ちます(列の追加は既存クエリを壊さないため、先に適用しておくのは安全)wrangler.toml が設定のソース・オブ・トゥルースのため、plain_text はデプロイごとに消えます).github/workflows/build-tournaments.yml が
毎日 03:00 JST に大会スキャン → ページ生成 → 差分があれば main へ直接 push します
(push をトリガーに Cloudflare Pages の自動デプロイが動きます)。
workflow_dispatch で手動実行できますdata/tournaments / tournaments / sitemap.xml / cards / sets /
data/card-meta-index.json / data/featured-sets.json / index.html
(⚠️ #30 以降、カードページ・セットページ・トップページも含みます。新セットが出た日は
数百〜数千ファイルがレビューなしで自動publishされます)
git add 行です。
⚠️ 変更したらこの列挙も直してください(npm run validate が一致を検査し、食い違うと exit 1 します)