You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.6 KiB
62 lines
1.6 KiB
#!/usr/bin/env python3 |
|
""" |
|
Generate directional rat sprites (LEFT, RIGHT, UP, DOWN) from source LEFT PNGs. |
|
|
|
Source files (tools/vernon/output/): |
|
BMP_MALE_LEFT.png |
|
BMP_FEMALE_LEFT.png |
|
BMP_BABY_LEFT.png |
|
|
|
Output goes to assets/Rat/ as: |
|
BMP_<SEX>_LEFT.png — copy of source |
|
BMP_<SEX>_RIGHT.png — horizontal flip |
|
BMP_<SEX>_UP.png — rotate 270° (nose up) |
|
BMP_<SEX>_DOWN.png — rotate 90° (nose down) |
|
|
|
Usage (from project root): |
|
python tools/generate_rat_sprites.py |
|
""" |
|
|
|
import sys |
|
import os |
|
from pathlib import Path |
|
from PIL import Image |
|
|
|
REPO_ROOT = Path(__file__).resolve().parent.parent |
|
SOURCE_DIR = REPO_ROOT / "tools" / "vernon" / "output" |
|
OUTPUT_DIR = REPO_ROOT / "assets" / "Rat" |
|
|
|
SEXES = ["MALE", "FEMALE", "BABY"] |
|
|
|
|
|
def generate(sex: str) -> None: |
|
src_path = SOURCE_DIR / f"BMP_{sex}_LEFT.png" |
|
if not src_path.exists(): |
|
print(f" SKIP {sex}: source not found at {src_path}", file=sys.stderr) |
|
return |
|
|
|
src = Image.open(src_path).convert("RGBA") |
|
|
|
variants = { |
|
"LEFT": src, |
|
"RIGHT": src.transpose(Image.FLIP_LEFT_RIGHT), |
|
"UP": src.rotate(270, expand=True), |
|
"DOWN": src.rotate(90, expand=True), |
|
} |
|
|
|
for direction, img in variants.items(): |
|
out_path = OUTPUT_DIR / f"BMP_{sex}_{direction}.png" |
|
img.save(out_path) |
|
print(f" wrote {out_path.relative_to(REPO_ROOT)} {img.size}") |
|
|
|
|
|
def main() -> None: |
|
OUTPUT_DIR.mkdir(parents=True, exist_ok=True) |
|
for sex in SEXES: |
|
print(f"[{sex}]") |
|
generate(sex) |
|
print("Done.") |
|
|
|
|
|
if __name__ == "__main__": |
|
main()
|
|
|