From 15098c887a30da69f13a82b0ab9d9ea201615243 Mon Sep 17 00:00:00 2001 From: Andrew Yeet Date: Mon, 7 Sep 2026 15:40:02 -0700 Subject: [PATCH] Issue #3 Task #3, basic structure --- AI Docs/01-AI-GUIDE.md | 16 +++++++++++++- Docs/Game Design Overview.md | 22 +++++++++++++++++++ .../YeetGeese Design Document.md | 0 src/core/AudioManager.gd | 14 ++++++++++++ src/core/SettingsManager.gd | 14 ++++++++++++ 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 Docs/Game Design Overview.md rename AI Docs/YeetGeese_Design_Document.md => Docs/YeetGeese Design Document.md (100%) create mode 100644 src/core/AudioManager.gd create mode 100644 src/core/SettingsManager.gd diff --git a/AI Docs/01-AI-GUIDE.md b/AI Docs/01-AI-GUIDE.md index 9ca1978..a035c62 100644 --- a/AI Docs/01-AI-GUIDE.md +++ b/AI Docs/01-AI-GUIDE.md @@ -22,4 +22,18 @@ When prompting an AI about this project, include: - Flag any Godot 3 vs 4 API differences (e.g., `move_and_slide()` behavior, signal typing). - If a request needs multiple scenes, describe the scene hierarchy before showing code. -Read `ARCHITECTURE.md` for system boundaries and data flow expectations. + +## Handling Ambiguity & Assumptions (Crucial!) + +When a request is ambiguous, incomplete, or requires knowledge outside the scope of the provided documents: +1. **DO NOT guess.** Do not write code based on assumptions you cannot validate. +2. **Acknowledge the Gap:** Explicitly state what information is missing or unclear (e.g., "The current architecture does not specify how \`WaveRunner\` handles player death."). +3. **Propose Assumptions:** If a concrete implementation path *must* be shown, list all assumptions made clearly before writing code. Use a dedicated section like: + +\`\`\`markdown +**[ASSUMPTIONS MADE]** +1. We assume that the \`PlayerStats\` Resource is accessible from the global scope. +2. We are assuming the signal for enemy death will be named \`mob_killed\`. +\`\`\` + +This ensures that the final code provided by AI can be reviewed against project reality before integration. diff --git a/Docs/Game Design Overview.md b/Docs/Game Design Overview.md new file mode 100644 index 0000000..c296238 --- /dev/null +++ b/Docs/Game Design Overview.md @@ -0,0 +1,22 @@ +# 🚀 YeetGeese - Phase 0 Design Summary + +**Genre:** Third-Person Over-the-Shoulder Tower Defense +**Core Fantasy:** A lone defender in a farm arena, utilizing powerful projectile geese to defend their base from waves of approaching enemies. The goal is simple but satisfying: yeet and survive! + +## ðŸĶĒ Core Loop +Enemies spawn → Player maneuvers & aims → **Yeets Goose** (Damage/Stun) → Currency collected (Feathers) → Player upgrades defenses/geese → Wave ends → Repeat with increased difficulty. + +## ðŸŽŊ Minimum Viable Product (MVP) Scope +| Feature | Detail | Status | +| :--- | :--- | :--- | +| **Arena** | Single, open 3D farm arena. | Defined | +| **Player** | Third-person controller (WASD + Mouse Look). Basic Health System. | Defined | +| **Weapon** | One basic Goose projectile (medium damage, spinning, self-lifetime). | Defined | +| **Enemies** | Two types: **Pigs** (Slow/Tank) & **Chickens** (Fast/Skirmisher). | Defined | +| **Progression** | 5 Waves total. Basic economy (Feathers collected from kills). | Defined | +| **UI/Win/Loss** | Health bar, Feather Count, Wave Counter. Win: Survive 5 waves. Loss: Player HP $\le$ 0. | Defined | + +## ⚙ïļ Technical Foundation +* **Engine:** Godot 4.x (3D, Forward+). +* **Architecture:** Utilize autoloads (`GameState`, `EventBus`, etc.) to manage state centrally and decouple systems. +* **Key Systems:** Input mapping (Movement, Aim, Throw), defined collision layers (Environment, Player, Enemy, Goose, Currency). \ No newline at end of file diff --git a/AI Docs/YeetGeese_Design_Document.md b/Docs/YeetGeese Design Document.md similarity index 100% rename from AI Docs/YeetGeese_Design_Document.md rename to Docs/YeetGeese Design Document.md diff --git a/src/core/AudioManager.gd b/src/core/AudioManager.gd new file mode 100644 index 0000000..ce9c61b --- /dev/null +++ b/src/core/AudioManager.gd @@ -0,0 +1,14 @@ +# AudioManager.gd +extends Node +var music_player # Reference to AudioStreamPlayer for background music + +func _ready(): + print("AudioManager loaded. Ready to play sounds.") + +func play_sfx(sound_path: String): + # Logic to play a sound effect + pass + +func play_music(stream: AudioStream): + # Logic to set and play background music + pass \ No newline at end of file diff --git a/src/core/SettingsManager.gd b/src/core/SettingsManager.gd new file mode 100644 index 0000000..762fc03 --- /dev/null +++ b/src/core/SettingsManager.gd @@ -0,0 +1,14 @@ +# SettingsManager.gd +extends Node + +const SETTINGS_PATH = "user://settings.save" + +func save_setting(key: String, value): + print("Saving setting: " + key) + # Logic to serialize and save settings data + pass + +func load_setting(key: String): + print("Loading setting: " + key) + # Logic to read saved setting data + return null