制作日誌:超マタギ村 ― 一枚のHTMLに詰めた狩猟の記録/クロードAIゲーム制作

お得な情報

薪割りゲームを作ったのをきっかけに、マタギのアクションゲームを作ってみた。

⇩ゲームはここから⇩

超マタギ村

一枚のHTMLファイルに、猟師の一年を詰め込む。

開発者:ひろ
形式:単一HTML / Vanilla JS / Canvas
対象:モバイルブラウザ
状態:継続開発中

狩りの舞台を、ブラウザの中に

ORIGIN

「超マタギ村」は、モバイルブラウザだけで遊べる横スクロール型の狩猟アクションゲームとして始まった。
特別なインストールも、専用エンジンもいらない。HTML一枚、Canvas一枚で獣を狩り、
雪山を越え、村を守る。ライブラリに頼らず素のJavaScriptで組んでいるぶん、動きの一つひとつに手触りが残る。

最初の森林ステージから始まり、少しずつ舞台を広げてきた。竹林、渓谷、雪山——そして最奥の
クマの巣窟。地図が育つたびに、村も少しずつ賑やかになっていった。

拡張

ワールドマップという「村の顔」

WORLD MAP

ステージが増えると同時に、それらを見渡すワールドマップを実装した。木の看板をあしらったマーカー、
進行度に応じて外れていく🔒錠前、そして奥へ続く一本道。プレイヤーが「次はどこへ向かうか」を
地図の上で選べるようになったことで、ゲーム全体がひとつの村として呼吸し始めた。

薪割り小屋や射撃訓練場といったミニゲームも、この地図の上に生えている。狩り一辺倒だった
ゲームに、寄り道と息抜きの場所ができた。

難関

クマの巣窟 ― 5連戦のボスラッシュ

BOSS RUSH

雪山の先、洞窟の奥に据えたのが「クマの巣窟」。ヒグマ、パンダ、シロクマ……そして最後に
待ち構える強敵まで、5体を連続で相手取る耐久ステージだ。
視覚的にも他ステージと差をつけたくて、洞窟らしい薄暗さと岩肌のテクスチャを別で用意した。

終盤1分間は時間経過で画面が暗くなり、夜行性の強力な狼が湧く——という仕掛けも、この頃に
組み込んでいる。緊張感を演出するタイマー駆動のギミックは、単純な実装のわりに手応えが大きかった。

褒賞

やり込みに応える、恒久アイテム

REWARD SYSTEM

ミニゲームやボス戦を「やり込む理由」が欲しくなって、恒久強化アイテムの仕組みを追加した。
一度手に入れれば、以後ずっと本編に効果が乗り続ける。localStorageにフラグを一つ立てるだけの
シンプルな設計だが、プレイヤーの目標設計としてはよく効いた。

🪓
匠の斧
条件:薪割りで50コンボ
効果:近接攻撃力が2倍に
🔫
強化ショットガン
条件:射撃訓練で5000点
効果:弾の射程と威力が2倍に
🦫
高級な毛皮
条件:黄金パンダを討伐
効果:被ダメージが半減

ワールドマップの隅には、所持しているアイテムのバッジを並べて表示している。地図を開くたびに
「自分がここまで積み上げてきたもの」が目に入るのは、地味だが効果的な演出だと思う。

磨き

小さなズレを、ひとつずつ正す

POLISH & FIX

機能を積み重ねるほど、細部のズレが目立ってくる。ステージクリア画面に「もう一度」ボタンが
不要に残っていたり、右下に並べたはずのバッジ同士が重なっていたり。プレイヤー目線のスクリーンショット
一枚から気づく不具合は多い。

クリア画面:もう一度/マップへ

クリア画面:マップへのみ
バッジが左上・右下に分散して重なる

右下に3つ縦並びで整理
learned: データリセット後にバッジが残る不具合は、リセット処理の中で
localStorage.removeItemを呼ぶだけでなく、表示を管理する
applyUnlocks()まで呼び直して初めて直る。状態を変えたら、
「見た目を更新する関数」もセットで呼ぶ——という当たり前のことを、何度も再確認した。
記録

積み上げてきた、開発の作法

WORKING NOTES

この村を育てる中で、いくつかの習慣が身についた。

// 崩れやすい前提ほど、明文化しておく
1. 構造を変える前には、必ずバックアップを取る
2. 一度に一つだけ変更し、都度動作を確認する
3. 編集のたびに Node.js で構文チェックをかける
4. ctx.save() / ctx.restore() は必ず対で書く
5. localStorage のキー構造を変えたらバージョンを上げる

特に3番目は地味だが裏切らない。数百行のCanvas描画コードを触ったあと、
ブラウザで動かす前にterminalで一呼吸置くだけで、防げる不具合の数がまるで違う。

まだ、道の途中

雪山の先にも、地図の外にも、まだ描いていない場所がある。
次に狩るべきは、きっとまだ見ぬ獣だ。

コメント