mcpField
S
survival-crafting

survival-crafting

github.com/gamedev-skills開発5.4k6.6k 回インストール1 日前に更新
リポジトリ

survival-crafting について

サバイバルクラフトゲームの設計者向けの組み合わせ型スキルです。採集、クラフト、建築、生存ニーズのループを構成し、資源不足や技術進行、脅威の増大といった設計上の圧力を扱います。

主な機能

  1. 01採集から建築までの基本ループ設計
  2. 02空腹・渇き・体温ニーズの計画
  3. 03レシピ、作業台、技術ツリーの設計
  4. 04資源ノードと道具要件の設定
  5. 05拠点建築と脅威の段階的強化
  6. 06大規模ワールドのセーブ要件

活用シーン

  1. 01サバイバルサンドボックスの採集ループ設計
  2. 02クラフトレシピと技術進行の計画
  3. 03ニーズの減少速度と失敗時の影響調整
  4. 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. 資源ノードと採集 — 採集可能なワールドオブジェクト、必要なツールやティア、リスポーン。
  2. インベントリ — スタック、容量(スロットまたは重量)、ドロップ/移動、ホットバー。
  3. クラフト — レシピ(入力 → 出力)、クラフトステーション/技術による制限、技術ツリー。
  4. サバイバルに必要な要素 — 空腹、喉の渇き、体温、スタミナ、体力と、減少およびその結果。
  5. 拠点建築 — 配置可能な建築物、建築グリッド/スナップ、保管庫、クラフトステーション。
  6. ワールドと昼夜 — バイオーム/資源(多くの場合はプロシージャル生成)、脅威を左右する時間サイクル。
  7. 脅威 — エスカレートする敵対生物/天候/イベント、戦闘または回避。
  8. セーブ/ロード — ワールド状態、インベントリ、拠点、必要要素、進行状況、大規模ワールドの永続化。

デザイン上の調整項目

調整項目効果備考
必要要素の減少速度プレッシャーの頻度探索できるだけの余裕を持たせつつ、無視できない速さにします。
必要要素が満たされない場合の影響緊張感即死ではなく、時間経過によるダメージにします。
資源の希少性/リスポーン探索を促す拠点の近くでは資源を少なくし、追加分を求めて遠出させます。
ツールのティア/制限進行の階段より良いツールで新しい種類のノードを採集できるようにします。
レシピの複雑さ/技術の深さ長期目標単純な一覧ではなく、複数段階の連鎖にします。
インベントリ上限(スロット/重量)運搬の緊張感拠点への帰還や保管を促します。
脅威のエスカレーション曲線時間経過による難易度夜間/季節/イベントに応じて段階的に上げます。
昼の長さリズム昼は採集、夜は防衛。

パターン

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 をお読みください。

コメント