Updated sprites and pet logic

This commit is contained in:
2026-05-18 11:56:09 -07:00
parent 4cd0d8c589
commit abf39ce4b8
81 changed files with 658 additions and 50 deletions

67
scripts/split_sprite_sheet.sh Executable file
View File

@@ -0,0 +1,67 @@
#!/usr/bin/env bash
set -euo pipefail
if [[ $# -lt 4 || $# -gt 5 ]]; then
cat <<'EOF'
Usage:
bash scripts/split_sprite_sheet.sh <sheet> <cell_width> <cell_height> <output_dir> [prefix]
Example:
bash scripts/split_sprite_sheet.sh assets/pets/maple/spritesheet.webp 192 208 assets/pets/maple/frames maple
Outputs:
<output_dir>/<prefix>-r01-c01.png
<output_dir>/<prefix>-r01-c02.png
...
Requirements:
- ffmpeg
- ffprobe
EOF
exit 1
fi
sheet=$1
cell_width=$2
cell_height=$3
output_dir=$4
prefix=${5:-frame}
if [[ ! -f "$sheet" ]]; then
echo "error: sheet not found: $sheet" >&2
exit 1
fi
if ! command -v ffmpeg >/dev/null 2>&1 || ! command -v ffprobe >/dev/null 2>&1; then
echo "error: ffmpeg and ffprobe are required" >&2
exit 1
fi
sheet_width=$(ffprobe -v error -select_streams v:0 -show_entries stream=width -of csv=p=0 "$sheet")
sheet_height=$(ffprobe -v error -select_streams v:0 -show_entries stream=height -of csv=p=0 "$sheet")
if (( sheet_width % cell_width != 0 )); then
echo "error: sheet width $sheet_width is not divisible by cell width $cell_width" >&2
exit 1
fi
if (( sheet_height % cell_height != 0 )); then
echo "error: sheet height $sheet_height is not divisible by cell height $cell_height" >&2
exit 1
fi
cols=$(( sheet_width / cell_width ))
rows=$(( sheet_height / cell_height ))
mkdir -p "$output_dir"
for ((row = 0; row < rows; row++)); do
for ((col = 0; col < cols; col++)); do
x=$(( col * cell_width ))
y=$(( row * cell_height ))
out="$output_dir/${prefix}-r$(printf '%02d' $((row + 1)))-c$(printf '%02d' $((col + 1))).png"
ffmpeg -loglevel error -y -i "$sheet" -frames:v 1 -vf "crop=${cell_width}:${cell_height}:${x}:${y}" "$out"
done
done
echo "split complete: ${rows} rows x ${cols} cols -> $output_dir"