survival-crafting について
サバイバルクラフトゲームの設計者向けの組み合わせ型スキルです。採集、クラフト、建築、生存ニーズのループを構成し、資源不足や技術進行、脅威の増大といった設計上の圧力を扱います。
主な機能
- 01採集から建築までの基本ループ設計
- 02空腹・渇き・体温ニーズの計画
- 03レシピ、作業台、技術ツリーの設計
- 04資源ノードと道具要件の設定
- 05拠点建築と脅威の段階的強化
- 06大規模ワールドのセーブ要件
活用シーン
- 01サバイバルサンドボックスの採集ループ設計
- 02クラフトレシピと技術進行の計画
- 03ニーズの減少速度と失敗時の影響調整
- 04拠点防衛と段階的な脅威の設計
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ gamedev-skills/ awesome-gamedev-agent-skills --skill survival-craftingインストール後、Claude Code で/survival-craftingを入力して読み込まれたか確認します。
同梱ファイルreferences/needs-and-crafting.md
詳細
サバイバルクラフト
サバイバルクラフトゲームのためのプレイブックです。採集 → クラフト → 建築のループ、サバイバルに必要な要素、クラフトや技術の進行、拠点建築について解説します。これは組み合わせ型のスキルです。インベントリデータ、ワールドコンテンツ、永続化、脅威を連携させます。これらの基本要素を改めて説明するのではなく、サバイバルを退屈ではなく緊張感のあるものにするループとプレッシャーシステム(必要要素、資源不足、エスカレーション)を定義します。
使用する場面
- プレイヤーが、増大する脅威に立ち向かいながら資源を集め、アイテムや建築物をクラフトし、サバイバルに必要な要素を管理し、拠点を建築する場合に使用します。サバイバルサンドボックスやクラフト/拠点建築ゲームが該当します。
- 必要要素(空腹、喉の渇き、体温)、クラフトの技術ツリー、採集ループ、拠点の配置や建築を設計する場合に使用します。
使用しない場面: RPGの小規模な要素としてのクラフト → rpg。パーマデスありのグリッドダンジョン → roguelike。インベントリやアイテムをデータアセットとして扱う場合は godot-resources / unity-scriptableobjects、ワールド生成には procedural-gen を使用します。
コアループ
原材料を集める → ツールやアイテムをクラフトする → 拠点を建築・アップグレードする → サバイバルに必要な要素を管理する → より良い資源を求めて遠くまで探索する → 増大する脅威から生き延びる → より高いティアで繰り返す。 各ループで、次のループをアンロックできるようにします(より良いツール → 新しいバイオームに到達 → 新しい資源 → より良いクラフト)。この進行の階段が途切れると、ゲームは単なる作業の繰り返しになります。
必須システム
- 資源ノードと採集 — 採集可能なワールドオブジェクト、必要なツールやティア、リスポーン。
- インベントリ — スタック、容量(スロットまたは重量)、ドロップ/移動、ホットバー。
- クラフト — レシピ(入力 → 出力)、クラフトステーション/技術による制限、技術ツリー。
- サバイバルに必要な要素 — 空腹、喉の渇き、体温、スタミナ、体力と、減少およびその結果。
- 拠点建築 — 配置可能な建築物、建築グリッド/スナップ、保管庫、クラフトステーション。
- ワールドと昼夜 — バイオーム/資源(多くの場合はプロシージャル生成)、脅威を左右する時間サイクル。
- 脅威 — エスカレートする敵対生物/天候/イベント、戦闘または回避。
- セーブ/ロード — ワールド状態、インベントリ、拠点、必要要素、進行状況、大規模ワールドの永続化。
デザイン上の調整項目
| 調整項目 | 効果 | 備考 |
|---|---|---|
| 必要要素の減少速度 | プレッシャーの頻度 | 探索できるだけの余裕を持たせつつ、無視できない速さにします。 |
| 必要要素が満たされない場合の影響 | 緊張感 | 即死ではなく、時間経過によるダメージにします。 |
| 資源の希少性/リスポーン | 探索を促す | 拠点の近くでは資源を少なくし、追加分を求めて遠出させます。 |
| ツールのティア/制限 | 進行の階段 | より良いツールで新しい種類のノードを採集できるようにします。 |
| レシピの複雑さ/技術の深さ | 長期目標 | 単純な一覧ではなく、複数段階の連鎖にします。 |
| インベントリ上限(スロット/重量) | 運搬の緊張感 | 拠点への帰還や保管を促します。 |
| 脅威のエスカレーション曲線 | 時間経過による難易度 | 夜間/季節/イベントに応じて段階的に上げます。 |
| 昼の長さ | リズム | 昼は採集、夜は防衛。 |
パターン
1. 段階的な影響を伴う必要要素の減少
# Pseudocode in the per-frame/per-tick update. dt = seconds. Needs fall; failure bleeds HP.
def update_needs(p, dt):
p.hunger = max(0, p.hunger - HUNGER_RATE * dt)
p.thirst = max(0, p.thirst - THIRST_RATE * dt)
p.temp = approach(p.temp, ambient_temperature(p), TEMP_RATE * dt)
# Consequences are graded, not binary: warnings, then attrition — never instant death.
if p.hunger == 0 or p.thirst == 0:
p.hp -= STARVE_DAMAGE * dt # damage over time creates urgency with recovery room
if p.temp < COLD_THRESHOLD or p.temp > HEAT_THRESHOLD:
p.hp -= EXPOSURE_DAMAGE * dt
if p.hunger > 0 and p.thirst > 0 and not exposed(p):
p.hp = min(p.max_hp, p.hp + REGEN_RATE * dt) # safe + fed => heal
2. クラフト:入力を検証してから、まとめて消費する
# Pseudocode. Recipes are data: inputs -> output, with an optional station/tech requirement.
recipe = {"id": "stone_axe",
"inputs": {"wood": 3, "stone": 2}, "output": ("stone_axe", 1),
"station": "workbench", "requires_tech": "basic_tools"}
def can_craft(recipe, inv, tech, station):
if recipe.get("requires_tech") and recipe["requires_tech"] not in tech: return False
if recipe.get("station") and recipe["station"] != station: return False
return all(inv.count(item) >= n for item, n in recipe["inputs"].items())
def craft(recipe, inv, tech, station):
if not can_craft(recipe, inv, tech, station): return False
for item, n in recipe["inputs"].items(): inv.remove(item, n) # consume all, then add
inv.add(*recipe["output"]) # atomic: no partial craft
return True
3. ツールのティアによる採集制限
# Pseudocode. A node yields only if the held tool meets its required tier.
def harvest(node, tool):
if tool.tier < node.required_tier:
return notify("Need a better tool") # e.g. stone node needs a pickaxe, not fists
node.hp -= tool.power
if node.hp <= 0:
spawn_drops(node.drop_table) # weighted drops (see roguelike loot pattern)
node.start_respawn(node.respawn_time) # node returns later; world isn't depleted forever
落とし穴/失敗パターン
- すぐにプレイ不能になるニーズ → フラストレーションとセーブ&ロードの繰り返しにつながります。失敗によるダメージが時間とともに進行するようにし、明確な警告と回復手段を用意してください(パターン 1)。
- 道筋のない作業の繰り返し → 採集を続けても、新たな採集手段が解放されません。各ティアで次の段階を解放できるようにしてください(より良いツール → 新たな採集ポイント → 新たなリソース → より良いクラフト)。
- アトミックでないクラフト → 特殊なケースで、素材が消費されたのにアイテムが付与されないことがあります。まず検証し、その後、消費と追加を一度の処理で行ってください(パターン 2)。
- 上限のないインベントリ → 物流面での緊張感がなくなり、拠点や保管場所を作る理由もなくなります。スロット数または重量で上限を設けてください。
- 世界のリソースが恒久的に枯渇する → プレイヤーがマップ上の資源を採り尽くし、ゲームをやめてしまいます。採集ポイントを復活させるか、時間経過でリソースを再生成してください。
dtでスケーリングされないフレームごとの減少 → ハードウェアによってニーズの減少速度が異なります。dtでスケーリングしてください。- セーブがない/広大な世界のセーブが脆弱 → クラッシュで何時間分もの進行が失われます。ワールド、拠点、ニーズを段階的に保存し、バージョン管理してください(
save-systemsを参照)。 - 脅威の変化が一様 → エンドゲームでの緊張感がありません。夜、季節、イベントのティアによって脅威を段階的に強めてください。
構成(これらのスキルを組み合わせて構築)
- アイテム/レシピをデータとして管理:
godot-resources/unity-scriptableobjects— アイテム、レシピ、技術ツリー、ドロップテーブル。 - ワールド: バイオーム/リソース配置には
procedural-gen、作り込まれたエリアにはlevel-designを使用します。 - 永続化: 広大なワールドの状態、拠点、インベントリ、ニーズ、バージョン管理には
save-systemsを使用します。 - 脅威: クリーチャーには
game-ai、近接戦闘/衝突にはエンジンの物理演算スキルを使用します。 - 建築/配置: 2D には
godot-tilemap/unity-tilemap-2d、3D にはgodot-3d-essentialsと UI のスナップ機能を使用します。 - UI: インベントリ/クラフト/HUD のレイアウトとスケーリングには
game-ui-ux、具体的なインベントリ、クラフトメニュー、ニーズ HUD、建築モードにはgodot-ui-controlを使用します。
参考資料
- ニーズのモデルとしきい値、クラフト技術ツリーのグラフ、採集/復活の調整、拠点建築用グリッド、脅威の段階的な強化については、
references/needs-and-crafting.mdをお読みください。