mirror of
https://github.com/cliffe/BreakEscape.git
synced 2026-02-20 13:50:46 +00:00
119 lines
3.8 KiB
Python
119 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Create simple 32x32px pixel-art NPC avatars
|
|
"""
|
|
from PIL import Image, ImageDraw
|
|
|
|
def create_helper_avatar():
|
|
"""Create a friendly helper avatar (green theme)"""
|
|
img = Image.new('RGBA', (32, 32), (0, 0, 0, 0))
|
|
draw = ImageDraw.Draw(img)
|
|
|
|
# Head (beige)
|
|
head_color = (255, 220, 177)
|
|
draw.ellipse([8, 6, 24, 22], fill=head_color, outline=(0, 0, 0))
|
|
|
|
# Eyes (friendly)
|
|
draw.rectangle([11, 12, 13, 14], fill=(0, 0, 0))
|
|
draw.rectangle([19, 12, 21, 14], fill=(0, 0, 0))
|
|
|
|
# Smile
|
|
draw.arc([12, 14, 20, 20], 0, 180, fill=(0, 0, 0), width=1)
|
|
|
|
# Body (green shirt - helpful)
|
|
body_color = (95, 207, 105) # Match game's green theme
|
|
draw.rectangle([10, 22, 22, 32], fill=body_color, outline=(0, 0, 0))
|
|
|
|
# Arms
|
|
draw.rectangle([6, 24, 9, 30], fill=body_color, outline=(0, 0, 0))
|
|
draw.rectangle([23, 24, 26, 30], fill=body_color, outline=(0, 0, 0))
|
|
|
|
# Hands (beige)
|
|
draw.rectangle([6, 30, 9, 32], fill=head_color)
|
|
draw.rectangle([23, 30, 26, 32], fill=head_color)
|
|
|
|
return img
|
|
|
|
def create_adversary_avatar():
|
|
"""Create a suspicious adversary avatar (red theme)"""
|
|
img = Image.new('RGBA', (32, 32), (0, 0, 0, 0))
|
|
draw = ImageDraw.Draw(img)
|
|
|
|
# Head (beige)
|
|
head_color = (255, 220, 177)
|
|
draw.ellipse([8, 6, 24, 22], fill=head_color, outline=(0, 0, 0))
|
|
|
|
# Eyes (suspicious/narrowed)
|
|
draw.line([11, 13, 13, 13], fill=(0, 0, 0), width=2)
|
|
draw.line([19, 13, 21, 13], fill=(0, 0, 0), width=2)
|
|
|
|
# Frown
|
|
draw.arc([12, 16, 20, 22], 180, 360, fill=(0, 0, 0), width=1)
|
|
|
|
# Body (red shirt - warning)
|
|
body_color = (220, 50, 50)
|
|
draw.rectangle([10, 22, 22, 32], fill=body_color, outline=(0, 0, 0))
|
|
|
|
# Arms
|
|
draw.rectangle([6, 24, 9, 30], fill=body_color, outline=(0, 0, 0))
|
|
draw.rectangle([23, 24, 26, 30], fill=body_color, outline=(0, 0, 0))
|
|
|
|
# Hands (beige)
|
|
draw.rectangle([6, 30, 9, 32], fill=head_color)
|
|
draw.rectangle([23, 30, 26, 32], fill=head_color)
|
|
|
|
return img
|
|
|
|
def create_neutral_avatar():
|
|
"""Create a neutral NPC avatar (gray theme)"""
|
|
img = Image.new('RGBA', (32, 32), (0, 0, 0, 0))
|
|
draw = ImageDraw.Draw(img)
|
|
|
|
# Head (beige)
|
|
head_color = (255, 220, 177)
|
|
draw.ellipse([8, 6, 24, 22], fill=head_color, outline=(0, 0, 0))
|
|
|
|
# Eyes (neutral)
|
|
draw.ellipse([11, 12, 13, 14], fill=(0, 0, 0))
|
|
draw.ellipse([19, 12, 21, 14], fill=(0, 0, 0))
|
|
|
|
# Neutral mouth (straight line)
|
|
draw.line([12, 17, 20, 17], fill=(0, 0, 0), width=1)
|
|
|
|
# Body (gray shirt - neutral)
|
|
body_color = (160, 160, 173) # Match game's gray
|
|
draw.rectangle([10, 22, 22, 32], fill=body_color, outline=(0, 0, 0))
|
|
|
|
# Arms
|
|
draw.rectangle([6, 24, 9, 30], fill=body_color, outline=(0, 0, 0))
|
|
draw.rectangle([23, 24, 26, 30], fill=body_color, outline=(0, 0, 0))
|
|
|
|
# Hands (beige)
|
|
draw.rectangle([6, 30, 9, 32], fill=head_color)
|
|
draw.rectangle([23, 30, 26, 32], fill=head_color)
|
|
|
|
return img
|
|
|
|
if __name__ == '__main__':
|
|
import os
|
|
|
|
# Create avatars directory if it doesn't exist
|
|
avatars_dir = 'assets/npc/avatars'
|
|
os.makedirs(avatars_dir, exist_ok=True)
|
|
|
|
# Create and save avatars
|
|
helper = create_helper_avatar()
|
|
helper.save(os.path.join(avatars_dir, 'npc_helper.png'))
|
|
print('✅ Created npc_helper.png (green, friendly)')
|
|
|
|
adversary = create_adversary_avatar()
|
|
adversary.save(os.path.join(avatars_dir, 'npc_adversary.png'))
|
|
print('✅ Created npc_adversary.png (red, suspicious)')
|
|
|
|
neutral = create_neutral_avatar()
|
|
neutral.save(os.path.join(avatars_dir, 'npc_neutral.png'))
|
|
print('✅ Created npc_neutral.png (gray, neutral)')
|
|
|
|
print('\n✅ All NPC avatars created successfully!')
|
|
print('Files saved to:', avatars_dir)
|