Structure:
Player -> Camera3D + ThrowOrigin (Marker3D at hand)
2. Goose Projectile
Use Area3D or RigidBody3D with:
MeshInstance3D, CollisionShape3D, AnimationPlayer
Behavior: spawn from ThrowOrigin, apply velocity based on camera direction, apply spin
On hit: damage enemy, play honk, spawn hit effect, queue free
3. Enemy
Start with one enemy type:
Structure: Area3D/CharacterBody3D with Health component
Behavior: spawn at point, move toward base/player, attack when close, take damage, die and drop currency
Simple movement: direction := (target - global_position).normalized(), velocity = direction * speed, move_and_slide()
4. Basic Wave Spawner
Wave manager behavior:
Start wave, spawn enemies over time, track remaining enemies
When all dead, start next wave; after final wave, player wins
Data structure using Resource for WaveDef with enemies, spawn_interval, reward
5. Basic Economy
Enemy dies -> player gains feathers (100 starting, 5 per enemy)
Player can buy additional goose throws or better goose
Every 10 enemies, unlock extra goose in reserve
6. Minimal UI
Top-left: health, currency
Top-right: wave number, enemies remaining
Center: crosshair
Menu: resume, restart, quit
7. Win/Lose State
Win: survive all prototype waves
Lose: player health reaches 0 or base health reaches 0
Prototype Deliverables:
Single playable scene with first-person movement, mouse look, throw geese that hit enemies, enemies move/take damage/die, currency increases, waves progress, clear win/lose state.
Exit Criteria:
Core loop is playable
Throwing geese feels responsive
Enemies can be killed
Waves work
Economy works minimally
Game has clear win/lose state
**Goal:** Prove that throwing geese at enemies in a first-person tower defense arena is fun.
**Core Systems to Build**:
### 1. First-Person Player Controller
Create using Godot's CharacterBody3D with:
- Mouse look, WASD movement, ground snapping/gravity
- Optional head bob, sprint
- Throw input triggers projectile creation
Structure:
Player -> Camera3D + ThrowOrigin (Marker3D at hand)
### 2. Goose Projectile
Use Area3D or RigidBody3D with:
- MeshInstance3D, CollisionShape3D, AnimationPlayer
- Behavior: spawn from ThrowOrigin, apply velocity based on camera direction, apply spin
- On hit: damage enemy, play honk, spawn hit effect, queue free
### 3. Enemy
Start with one enemy type:
- Structure: Area3D/CharacterBody3D with Health component
- Behavior: spawn at point, move toward base/player, attack when close, take damage, die and drop currency
- Simple movement: direction := (target - global_position).normalized(), velocity = direction * speed, move_and_slide()
### 4. Basic Wave Spawner
Wave manager behavior:
- Start wave, spawn enemies over time, track remaining enemies
- When all dead, start next wave; after final wave, player wins
- Data structure using Resource for WaveDef with enemies, spawn_interval, reward
### 5. Basic Economy
- Enemy dies -> player gains feathers (100 starting, 5 per enemy)
- Player can buy additional goose throws or better goose
- Every 10 enemies, unlock extra goose in reserve
### 6. Minimal UI
- Top-left: health, currency
- Top-right: wave number, enemies remaining
- Center: crosshair
- Menu: resume, restart, quit
### 7. Win/Lose State
- Win: survive all prototype waves
- Lose: player health reaches 0 or base health reaches 0
**Prototype Deliverables:**
Single playable scene with first-person movement, mouse look, throw geese that hit enemies, enemies move/take damage/die, currency increases, waves progress, clear win/lose state.
**Exit Criteria:**
- Core loop is playable
- Throwing geese feels responsive
- Enemies can be killed
- Waves work
- Economy works minimally
- Game has clear win/lose state
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Goal: Prove that throwing geese at enemies in a first-person tower defense arena is fun.
Core Systems to Build:
1. First-Person Player Controller
Create using Godot's CharacterBody3D with:
Structure:
Player -> Camera3D + ThrowOrigin (Marker3D at hand)
2. Goose Projectile
Use Area3D or RigidBody3D with:
3. Enemy
Start with one enemy type:
4. Basic Wave Spawner
Wave manager behavior:
5. Basic Economy
6. Minimal UI
7. Win/Lose State
Prototype Deliverables:
Single playable scene with first-person movement, mouse look, throw geese that hit enemies, enemies move/take damage/die, currency increases, waves progress, clear win/lose state.
Exit Criteria: