Genre Templates
Template Bootstrap (MANDATORY)
Before writing gameplay scripts for any template:
- •Call
godot_generate_asset_packwith the closest preset and style. - •Verify generated files in
res://assets/sprites/. - •Wire entities to generated sprites first, then layered procedural fallback.
- •Do not use plain
ColorRectentity visuals in full-game builds.
Top-Down Shooter
File Manifest
| File | Type | Purpose |
|---|---|---|
scripts/main.gd | Script | Score, health, spawning, game loop |
scripts/player.gd | Script | WASD + mouse aim + click to shoot |
scripts/bullet.gd | Script | Move in direction, destroy enemies |
scripts/enemy.gd | Script | Chase player, damage on contact |
scenes/main.tscn | Scene | Minimal root (5 lines) |
scenes/Bullet.tscn | Scene | Bullet prefab (Area2D) |
scenes/Enemy.tscn | Scene | Enemy prefab (CharacterBody2D) |
Node Hierarchy (built by main.gd)
code
Main (Node2D + main.gd)
├── Background (Sprite2D using bg_arena + optional gradient shader)
├── Player (CharacterBody2D + player.gd)
│ ├── CollisionShape2D (rect 32x32)
│ └── Visual (Sprite2D: player + glow/outline shader)
├── SpawnTimer (Timer, 1.5s)
├── Camera2D (follows player)
└── UI (CanvasLayer)
├── HudPanel (TextureRect/Sprite2D from ui_hud_panel)
├── ScoreLabel (+ icon_score)
└── HealthBar (+ icon_heart)
Key Mechanics
- •Player: WASD movement (220 speed), mouse aiming, click to shoot
- •Bullets: Area2D, layer 2, mask 4, speed 450, 3s lifetime
- •Enemies: CharacterBody2D, layer 4, chase player (90 speed), damage on contact
- •Score: +100 per kill, displayed in HUD
- •Health: 100 HP, -10 per enemy contact, game over at 0
- •Spawning: every 1.5s, random position 500px from player, max 15
- •Asset baseline: generate and use
player,enemy_chaser,enemy_ranged,enemy_charger,bullet_player,pickup_health,icon_heart,icon_score,bg_arena,ui_hud_panel
Platformer
File Manifest
| File | Type | Purpose |
|---|---|---|
scripts/main.gd | Script | Level setup, coins, goal |
scripts/player.gd | Script | Move, jump, coyote time |
scripts/coin.gd | Script | Collectible, score +1 |
scripts/spike.gd | Script | Hazard, instant death |
scripts/level_builder.gd | Script | Procedural level from array |
scenes/main.tscn | Scene | Root |
Node Hierarchy
code
Main (Node2D + main.gd)
├── Level (Node2D + level_builder.gd)
│ ├── [StaticBody2D platforms, generated]
│ ├── [Coin Area2Ds, generated]
│ └── [Spike Area2Ds, generated]
├── Player (CharacterBody2D + player.gd)
│ ├── CollisionShape2D (capsule)
│ ├── Visual (Sprite2D: player_runner or layered procedural fallback)
│ └── Camera2D
└── UI (CanvasLayer)
├── CoinLabel (+ icon_life or coin icon)
└── LivesLabel
Level Builder Pattern
gdscript
# level_builder.gd
const TILE = 64
var level_data = [
".....................",
".....................",
"...C..........C.....",
"...####....####.....",
".....................",
"........C...........",
"......#####.........",
".....S......S.......",
"#####################",
]
# P=player start, #=platform, C=coin, S=spike, .=empty
func build():
for y in range(level_data.size()):
for x in range(level_data[y].length()):
var ch = level_data[y][x]
var pos = Vector2(x * TILE, y * TILE)
match ch:
"#": _make_platform(pos)
"C": _make_coin(pos)
"S": _make_spike(pos)
Key Mechanics
- •Gravity: 800, Jump: -350, Speed: 200
- •Coyote time: 0.1s, Jump buffer: 0.1s
- •Coins: Area2D layer 7, body_entered → collect
- •Spikes: Area2D layer 8, body_entered → respawn
- •Camera follows player with smoothing
- •Asset baseline:
player_runner,enemy_patrol,enemy_flyer,pickup_coin,tile_ground,tile_platform,tile_hazard,bg_platform_sky
Puzzle Game (Match-3 / Grid)
File Manifest
| File | Type | Purpose |
|---|---|---|
scripts/main.gd | Script | Game state, score |
scripts/board.gd | Script | Grid logic, matching, gravity |
scripts/piece.gd | Script | Individual piece (visual + click) |
scenes/main.tscn | Scene | Root |
Node Hierarchy
code
Main (Node2D + main.gd)
├── Board (Node2D + board.gd)
│ └── [Piece nodes, grid of NxM]
└── UI (CanvasLayer)
├── ScoreLabel
└── MovesLabel
Key Mechanics
- •Grid stored as
Array[Array](model) - •Pieces are visual nodes positioned on grid
- •Click to select, click adjacent to swap
- •After swap: check matches (3+ in row/column)
- •Matched pieces removed, gravity drops pieces down
- •New pieces spawned at top
- •Score: +10 per matched piece, combos multiply
RPG / Top-Down Adventure
File Manifest
| File | Type | Purpose |
|---|---|---|
scripts/main.gd | Script | World state, transitions |
scripts/player.gd | Script | 4-direction movement, interact |
scripts/npc.gd | Script | Dialog trigger |
scripts/dialog.gd | Script | Dialog box UI |
scripts/inventory.gd | Script | Item management |
scenes/main.tscn | Scene | Root |
Key Mechanics
- •Player: 4-direction movement (no diagonal), grid-snapped or smooth
- •NPCs: Area2D trigger, show dialog on interact
- •Dialog: CanvasLayer with text box, advance with Space/Click
- •Inventory: Array of item dictionaries, UI grid display
- •Transitions: Fade to black between areas
Tower Defense
File Manifest
| File | Type | Purpose |
|---|---|---|
scripts/main.gd | Script | Waves, economy, game state |
scripts/enemy_td.gd | Script | Follow path, health bar |
scripts/tower.gd | Script | Target nearest enemy, shoot |
scripts/tower_bullet.gd | Script | Homing projectile |
scripts/tower_placer.gd | Script | Click to place tower |
scenes/main.tscn | Scene | Root with Path2D |
Key Mechanics
- •Enemies follow Path2D/PathFollow2D
- •Towers: Area2D detection range, target nearest enemy
- •Tower bullets: homing (lerp toward target)
- •Economy: start with gold, earn per kill, spend to place towers
- •Waves: increasing enemy count and speed
- •Lives: enemies reaching end cost lives
Template Selection Logic
Given user prompt, pick template:
- •Contains "shoot", "gun", "bullet", "top-down" → Top-Down Shooter
- •Contains "jump", "platform", "side", "mario" → Platformer
- •Contains "puzzle", "match", "grid", "swap", "tile" → Puzzle
- •Contains "RPG", "adventure", "dialog", "quest", "inventory" → RPG
- •Contains "tower", "defense", "wave", "path" → Tower Defense
- •Contains "sandbox", "build", "craft" → Start with Top-Down Shooter base, add building
- •Unclear → Top-Down Shooter (best default, most satisfying prototype)