Underground 2 Revived
Chrome과 Firefox에서 Need for Speed Underground 2를 WebGPU로 두고 팬 프로젝트입니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗ドラクエ風に県内を歩きまわって、17日間の知事選挙を戦い抜くブラウザゲームです。 投票日の夜は開票速報が流れ、だれかに「当選確実」が出たらゲーム終了です。
Web 版はビルド不要の静的サイトです。index.html をブラウザで開くか、ローカルサーバーで配信してください。
npx http-server -p 8080 .
# → http://localhost:8080/
| 操作 | キーボード | スマホ |
|---|---|---|
| 移動 | 矢印キー / WASD | 十字ボタン |
| はなす・しらべる・決定 | Z / Enter / Space | A |
| メニュー・キャンセル | X / Esc | B |
端末やブラウザの言語が日本語なら日本語、それ以外なら英語で表示します(英語版のタイトルは「Run for Governor!」)。タイトル画面の「🌐 English / 🌐 日本語」でいつでも切り替えられ、選んだ言語は次回も使われます。
js/i18n-en.js の翻訳表(日本語の文 → 英語の文)から引きます。数や名前が入る文は tr('聴衆は {n}人ほど あつまっている。', { n }) のように {名前} の形で書きます({N} はプレイヤー名)。js/i18n.js にあります。node scripts/check-i18n.js を実行してください。英語の訳がない文と、{} の食い違いを一覧にします。android/app/src/main/res/values-en/strings.xml)。歩いていると、いろいろな出来事に出くわします。選んだ行動の結果が数日後に返ってくることもあります。
善いことに見えて裏目に出るもの、断ると得をするものが混ざっています。神社でお参りすると、その日は悪い縁に巻きこまれにくくなります。
初代ドラクエのようなファミコン風の電子音(矩形波2音+三角波ベース)を Web Audio で鳴らしています。音源ファイルは使っておらず、曲はすべてオリジナルです。
| 場面 | 曲 |
|---|---|
| タイトル | 堂々としたマーチ |
| フィールド(昼) | 軽快に歩きまわる曲 |
| フィールド(17時以降) | 少しさみしげな夕暮れの曲 |
| 建物の中・朝の事務所・出陣式 | のどかな町の曲 |
| 偶然の出来事・朝市などの集会 | 「なにか起きた!」曲 |
| スキャンダル報道・過労で倒れる | 不穏な曲 |
| 夜の報告 | 子守歌 |
| 公開討論会・テレビ討論・最後のお願い | 戦闘曲ふう |
| 開票速報 | 緊張感のある刻み |
| 当選 / 落選 | ファンファーレ / 哀しい曲 |
メニューの「おと」で効果音とBGMをまとめて ON/OFF できます。
Capacitor でゲームのファイルをアプリ内に同梱しているため、ネットにつながっていなくても遊べます(フォントも css/fonts/ に同梱)。
アプリ ID は jp.techgym.kenchiji です(Google Play に一度公開すると変更できません)。
Android アプリでのみ広告を表示します(Web 版には広告は出ません)。
| 広告 | タイミング |
|---|---|
| インタースティシャル(全画面) | 毎晩、夜の報告を閉じたあと(1〜17 日目)/タイトルからプレイを始めるとき(はじめから・つづきから)/メニューの「トップへ」でタイトルに戻るとき |
| リワード | 過労で倒れたときに「応援動画を見て立ちあがる」を選ぶと、体力 60 で その日の活動を続けられる(1 日 1 回) |
| リワード | 選挙事務所の「応援動画を見る」で体力が全回復(1 日 1 回) |
| バナー(画面の下) | 起動してからずっと表示(タイトル・プレイ中・メニュー・結果画面)。ゲーム画面はバナーのぶん上に詰めて、操作ボタンと重ならないようにする |
js/ads.js の production、AdMob のアプリ ID は android/app/src/main/res/values/strings.xml にあります。kenchiji.apk)は常に Google のテスト広告 を表示します。自分でタップしても問題ありません。ADMOB_MODE=production で本番の広告に切り替えます(scripts/build-web.js が js/ads-config.js を書き換えます)。GitHub Actions(自動): Web 版や android/ を変更して push すると、.github/workflows/android.yml が動作確認用の APK を作ります。
既定ブランチのビルドは GitHub の Release(android-latest)に自動で載るので、Android 端末で次の URL を開くか QR コードを読み取るだけで最新版をダウンロードできます。
https://github.com/techgymjp/kenchiji/releases/latest/download/kenchiji.apk
リリースページ(バージョンや説明を見てからダウンロードする場合): https://github.com/techgymjp/kenchiji/releases/tag/android-latest
ダウンロードした kenchiji.apk を開き、「提供元不明のアプリ」のインストールを許可するとインストールできます。
動作確認用の署名鍵(android/app/debug.keystore)はリポジトリで固定しているので、新しいビルドもアンインストールせずに上書きインストールできます。
(Release に載る APK はデバッグ版です。Google Play には下の手順で作る署名済み .aab を使います)
手元の PC(Android Studio):
npm ci
npm run android:sync # Web ファイルを www/ にまとめて Android プロジェクトへコピー
npm run android:open # Android Studio で開く
upload.jks)は他のゲームと同じものを使い回せます。新しく作る場合は次のとおり(Java が必要)
keytool -genkeypair -v -keystore upload.jks -alias upload -keyalg RSA -keysize 2048 -validity 10000
base64 -i upload.jks | tr -d '\n' | pbcopy # macOS(クリップボードにコピー)
| 名前 | 内容 |
|---|---|
ANDROID_KEYSTORE_BASE64 | upload.jks を base64 にした文字列 |
ANDROID_KEYSTORE_PASSWORD | キーストアのパスワード |
ANDROID_KEY_ALIAS | upload(作成時に指定した別名) |
ANDROID_KEY_PASSWORD | 鍵のパスワード |
kenchiji-release-aab(.aab)ができるストアに載せる画像(アイコン・フィーチャーグラフィック・日英のスクリーンショット)と掲載文の下書きは docs/store/ にあります(docs/store/listing.md)。
バージョン番号(versionCode)は Actions の実行回数が自動で使われます。表示用のバージョン名は package.json の version で、タイトル画面の右下に表示されます。
Android 版と同じ Capacitor のプロジェクトに ios/ を足して作っています(Swift Package Manager の構成)。Mac での作業手順は docs/IOS_BUILD.md にあります。
jp.techgym.kenchiji(Android と同じ)。iPhone 専用・横画面固定・全画面表示、プレイ中は画面が暗くならないios/App/App/Info.plist、広告ユニット ID は js/ads.js の UNITS.ios にありますios/App/App/*.lproj/InfoPlist.strings)npm run ios:sync(テスト広告)/ npm run ios:release(本番広告。App Store 用)/ npm run ios:open(Xcode で開く).github/workflows/ios.yml)が push のたびに、署名なしでシミュレーター向けにビルドできるかを確認する.github/workflows/ios-release.yml)が本番の広告でビルドして TestFlight にアップロードする(ビルド番号は 100 + 実行回数)docs/store/ios/(スクリーンショット 2622×1206 は 6.3inch/、ヘッダ 3840×1646、検索結果 3840×2560)package.json があるため、Vercel はビルドが必要なプロジェクトと判断します。vercel.json で npm run build と出力先 www を指定しています。
All rights reserved. 著作権はテックジム株式会社に帰属します。無断での複製・改変・再配布、Web サイトやアプリとしての公開を禁止します。ただし、テックジムの受講生が学習目的で複製・改変することは許可します(商用利用は不可。詳しくは LICENSE)。
同梱のフォント DotGothic16 は SIL Open Font License 1.1 です(css/fonts/OFL.txt)。
index.html
css/style.css
js/sprites.js ドット絵(キャラ・タイル)の生成
js/map.js マップ・地区・建物・NPC
js/ui.js メッセージ/選択肢ウィンドウ・入力・効果音
js/bgm.js ファミコン風BGM(曲データとシーケンサー)
js/events.js 団体・演説・ランダムイベント・遅延イベント・予定イベント・施設
js/election.js 支持率モデル・世論調査・開票速報・エンディング
js/engine.js ゲーム状態・移動・描画・1日の流れ・タイトル
js/i18n.js 表示言語の切り替えと、画面の固定文言(日本語 / 英語)
js/i18n-en.js 英語の翻訳表(日本語の文 → 英語の文)
js/native.js Android アプリとの連携(戻るボタン・アプリ切替・シェア・バージョン表示)
js/ads.js Google AdMob 広告(Android アプリのみ)
js/ads-config.js 広告のモード(test / production。ビルド時に生成)
js/build-info.js タイトル画面に出すバージョン(ビルド時に生成)
css/fonts/ DotGothic16 フォント(SIL OFL 1.1)
assets/ アイコンと起動画面の元画像
android/ Android アプリのプロジェクト(Capacitor)
ios/ iOS アプリのプロジェクト(Capacitor・Xcode)
scripts/ www/ にまとめるビルドスクリプトと、英語の訳もれチェック(check-i18n.js)
docs/ APK 用の QR コード、IOS_BUILD.md(Mac での iOS の作業手順)、store/ にストア用の画像と掲載文(ios/ は App Store 用)
セーブは自動です(出来事・施設・メニューのたびと、歩いているあいだ)。メニューの「トップへ」でタイトル画面に戻り、「つづきから」で同じところから再開できます。