#!/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)