World Expansion Plan - Towns Scout Raiders - Characters Updated - NPCs Detailed - New Systems Added
This commit is contained in:
422
scripts/generate_world_expansion_assets.py
Normal file
422
scripts/generate_world_expansion_assets.py
Normal 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)
|
||||
Reference in New Issue
Block a user