World Expansion Plan - Towns Scout Raiders - Characters Updated - NPCs Detailed - New Systems Added

This commit is contained in:
2026-01-05 10:23:05 +01:00
parent c1c40446ec
commit b29f08b257
3 changed files with 1291 additions and 36 deletions

View File

@@ -0,0 +1,422 @@
#!/usr/bin/env python3
"""
WORLD EXPANSION ASSET GENERATOR
Generates Phase 1 assets for Town Restoration, Zombie Scout, and Nomad Raiders systems.
Total Phase 1 Assets: ~80 sprites
- 48 Town buildings (3 towns × 8 buildings × 2 states)
- 8 Zombie Scout sprites (base form)
- 20 Raider sprites (Desert Nomads)
- 4 Camp structures
"""
# PHASE 1: SAMPLE TOWNS (3 biomes)
TOWN_BUILDINGS = {
"forest_town": {
"biome": "Temperate Forest",
"style": "Wooden cabins, thatched roofs, brown/green palette",
"buildings": [
{
"name": "town_hall",
"size": "64x64",
"states": ["ruined", "restored"],
"description": "Main building, two-story wooden structure"
},
{
"name": "trading_post",
"size": "48x48",
"states": ["ruined", "restored"],
"description": "Merchant shop with counter and shelves"
},
{
"name": "inn",
"size": "64x48",
"states": ["ruined", "restored"],
"description": "Small hotel, beds visible through windows"
},
{
"name": "blacksmith",
"size": "48x48",
"states": ["ruined", "restored"],
"description": "Forge with chimney, anvil outside"
},
{
"name": "general_store",
"size": "48x48",
"states": ["ruined", "restored"],
"description": "Shop with barrels and crates"
},
{
"name": "guard_tower",
"size": "32x64",
"states": ["ruined", "restored"],
"description": "Tall wooden watchtower"
},
{
"name": "farm_school",
"size": "64x48",
"states": ["ruined", "restored"],
"description": "Greenhouse-like structure, crop displays"
},
{
"name": "town_gate",
"size": "64x48",
"states": ["ruined", "restored"],
"description": "Main entrance with wooden arch"
}
]
},
"desert_town": {
"biome": "Desert Storm",
"style": "Sandstone domes, flat roofs, tan/gold palette",
"buildings": [
{
"name": "town_hall",
"size": "64x64",
"states": ["ruined", "restored"],
"description": "Domed sandstone palace, market stalls"
},
{
"name": "trading_post",
"size": "48x48",
"states": ["ruined", "restored"],
"description": "Bazaar with canopy, spice barrels"
},
{
"name": "inn",
"size": "64x48",
"states": ["ruined", "restored"],
"description": "Caravanserai, courtyard visible"
},
{
"name": "blacksmith",
"size": "48x48",
"states": ["ruined", "restored"],
"description": "Stone forge, bellows, scimitar display"
},
{
"name": "general_store",
"size": "48x48",
"states": ["ruined", "restored"],
"description": "Market stall with pottery and cloth"
},
{
"name": "guard_tower",
"size": "32x64",
"states": ["ruined", "restored"],
"description": "Minaret-style watchtower"
},
{
"name": "farm_school",
"size": "64x48",
"states": ["ruined", "restored"],
"description": "Oasis garden, palm trees"
},
{
"name": "town_gate",
"size": "64x48",
"states": ["ruined", "restored"],
"description": "Arched sandstone gate with carvings"
}
]
},
"frozen_town": {
"biome": "Frozen Wasteland",
"style": "Ice/metal buildings, flat roofs, white/blue palette",
"buildings": [
{
"name": "town_hall",
"size": "64x64",
"states": ["ruined", "restored"],
"description": "Ice palace, metal reinforcements, icicles"
},
{
"name": "trading_post",
"size": "48x48",
"states": ["ruined", "restored"],
"description": "Igloo shop, fur pelts visible"
},
{
"name": "inn",
"size": "64x48",
"states": ["ruined", "restored"],
"description": "Warm lodge, smoke from chimney"
},
{
"name": "blacksmith",
"size": "48x48",
"states": ["ruined", "restored"],
"description": "Ice forge, blue flame, frost weapons"
},
{
"name": "general_store",
"size": "48x48",
"states": ["ruined", "restored"],
"description": "Supply depot, crates and barrels"
},
{
"name": "guard_tower",
"size": "32x64",
"states": ["ruined", "restored"],
"description": "Metal tower, frozen flag on top"
},
{
"name": "farm_school",
"size": "64x48",
"states": ["ruined", "restored"],
"description": "Heated greenhouse, frost-resistant crops"
},
{
"name": "town_gate",
"size": "64x48",
"states": ["ruined", "restored"],
"description": "Ice arch gate with metal spikes"
}
]
}
}
# ZOMBIE SCOUT SPRITES
ZOMBIE_SCOUT = {
"base_form": [
{
"name": "scout_idle_down",
"size": "32x32",
"description": "Zombie scout idle facing down, blue bandana, backpack, red eyes with pupils, friendly pose"
},
{
"name": "scout_idle_up",
"size": "32x32",
"description": "Zombie scout idle facing up, blue bandana visible, backpack, friendly pose"
},
{
"name": "scout_idle_left",
"size": "32x32",
"description": "Zombie scout idle facing left, blue bandana, side view, backpack visible"
},
{
"name": "scout_idle_right",
"size": "32x32",
"description": "Zombie scout idle facing right, blue bandana, side view, backpack visible"
},
{
"name": "scout_walking_down",
"size": "32x32",
"description": "Zombie scout walking down, one leg forward, blue bandana"
},
{
"name": "scout_walking_up",
"size": "32x32",
"description": "Zombie scout walking up, one leg forward, backpack bouncing"
},
{
"name": "scout_pointing",
"size": "32x32",
"description": "Zombie scout pointing at discovery, excited pose, blue bandana"
},
{
"name": "scout_digging",
"size": "32x32",
"description": "Zombie scout digging ground, bent over, finding item, backpack"
}
]
}
# NOMAD RAIDERS - DESERT NOMADS
DESERT_RAIDERS = {
"units": [
{
"name": "nomad_warrior_idle",
"size": "32x32",
"description": "Desert nomad warrior idle, tan robes, scimitar, turban, Style 32"
},
{
"name": "nomad_warrior_attack",
"size": "32x32",
"description": "Desert nomad warrior attacking, scimitar raised, aggressive"
},
{
"name": "nomad_archer_idle",
"size": "32x32",
"description": "Desert nomad archer idle, bow, quiver, tan clothing"
},
{
"name": "nomad_archer_shoot",
"size": "32x32",
"description": "Desert nomad archer shooting arrow, bow drawn"
},
{
"name": "nomad_scout_idle",
"size": "32x32",
"description": "Desert nomad scout, lighter armor, dagger, lookout pose"
},
{
"name": "nomad_scout_run",
"size": "32x32",
"description": "Desert nomad scout running, fast movement"
},
{
"name": "nomad_brute_idle",
"size": "32x32",
"description": "Desert nomad brute, heavy armor, large axe, intimidating"
},
{
"name": "nomad_brute_smash",
"size": "32x32",
"description": "Desert nomad brute smashing with axe, powerful attack"
},
{
"name": "nomad_leader_idle",
"size": "32x32",
"description": "Desert nomad leader, ornate robes, golden scimitar, commander"
},
{
"name": "nomad_leader_command",
"size": "32x32",
"description": "Desert nomad leader giving orders, raised hand"
}
],
"camps": [
{
"name": "nomad_tent_large",
"size": "48x48",
"description": "Large desert tent, tan fabric, ropes, entrance visible"
},
{
"name": "nomad_tent_small",
"size": "32x32",
"description": "Small desert tent, simple structure, bedroll inside"
},
{
"name": "nomad_campfire",
"size": "32x32",
"description": "Desert campfire, burning logs, cooking pot, sand circle"
},
{
"name": "nomad_loot_chest",
"size": "32x32",
"description": "Raider loot chest, locked box, gold trim, treasures"
}
]
}
# GENERATION MANIFEST
def generate_manifest():
"""Generate complete asset manifest for Phase 1."""
manifest = {
"phase": 1,
"total_assets": 0,
"categories": {}
}
# Count town buildings
town_count = 0
for town_key, town_data in TOWN_BUILDINGS.items():
for building in town_data["buildings"]:
town_count += len(building["states"]) # ruined + restored
manifest["categories"]["towns"] = town_count
# Count scout sprites
manifest["categories"]["zombie_scout"] = len(ZOMBIE_SCOUT["base_form"])
# Count raider sprites
raider_count = len(DESERT_RAIDERS["units"]) + len(DESERT_RAIDERS["camps"])
manifest["categories"]["nomad_raiders"] = raider_count
# Total
manifest["total_assets"] = sum(manifest["categories"].values())
return manifest
# PROMPT GENERATOR
def generate_prompts():
"""Generate all Style 32 prompts for asset generation."""
prompts = []
# TOWN BUILDINGS
for town_key, town_data in TOWN_BUILDINGS.items():
biome = town_data["biome"]
style = town_data["style"]
for building in town_data["buildings"]:
for state in building["states"]:
prompt = {
"category": "town_building",
"town": town_key,
"building": building["name"],
"state": state,
"size": building["size"],
"prompt": f"{state.capitalize()} {building['name']} in {biome} biome, {style}, {building['description']}, "
f"{'collapsed walls broken windows debris' if state == 'ruined' else 'restored clean functional'}, "
f"Style 32 Dark-Chibi Noir, thick black outlines, top-down view, {building['size']}px, green background"
}
prompts.append(prompt)
# ZOMBIE SCOUT
for sprite in ZOMBIE_SCOUT["base_form"]:
prompt = {
"category": "zombie_scout",
"name": sprite["name"],
"size": sprite["size"],
"prompt": f"{sprite['description']}, Style 32 Dark-Chibi Noir, thick black outlines, chibi proportions, "
f"{sprite['size']}px, green background"
}
prompts.append(prompt)
# NOMAD RAIDERS
for unit in DESERT_RAIDERS["units"]:
prompt = {
"category": "nomad_raider",
"type": "unit",
"name": unit["name"],
"size": unit["size"],
"prompt": f"{unit['description']}, thick black outlines, chibi proportions, {unit['size']}px, green background"
}
prompts.append(prompt)
for camp in DESERT_RAIDERS["camps"]:
prompt = {
"category": "nomad_raider",
"type": "camp",
"name": camp["name"],
"size": camp["size"],
"prompt": f"{camp['description']}, Style 32 Dark-Chibi Noir, thick black outlines, top-down view, "
f"{camp['size']}px, green background"
}
prompts.append(prompt)
return prompts
if __name__ == "__main__":
import json
# Generate manifest
manifest = generate_manifest()
print("=" * 60)
print("WORLD EXPANSION - PHASE 1 MANIFEST")
print("=" * 60)
print(f"\nTotal Assets: {manifest['total_assets']}")
print(f"\nBreakdown:")
for category, count in manifest["categories"].items():
print(f" - {category}: {count} sprites")
# Generate prompts
prompts = generate_prompts()
# Save to JSON
output = {
"manifest": manifest,
"prompts": prompts
}
with open("world_expansion_phase1.json", "w", encoding="utf-8") as f:
json.dump(output, f, indent=2, ensure_ascii=False)
print(f"\n✅ Generated {len(prompts)} prompts")
print(f"📝 Saved to: world_expansion_phase1.json")
print("\n" + "=" * 60)