품종 스프라이트 8종 재생성본 적용 (다리 5개 문제 해결)

- 앉은 자세 idle·측면 뷰 걷기·단일 앞발 work·양발 숟가락 cook으로
  해부학 오류를 원천 차단한 재생성 시트로 전량 교체
- 걷기: 측면 보폭 교대 2프레임 복원 (200ms), 기울임 보정 제거

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
이 커밋은 다음에 포함됨:
kjs
2026-08-13 14:46:57 +09:00
co-authored by Claude Fable 5
부모 2d1ae603b4
커밋 4f2d0d9d76
49개의 변경된 파일과 4개의 추가작업 그리고 5개의 파일을 삭제
바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 82 KiB

이후

너비:  |  높이:  |  크기: 90 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 79 KiB

이후

너비:  |  높이:  |  크기: 88 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 75 KiB

이후

너비:  |  높이:  |  크기: 83 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 80 KiB

이후

너비:  |  높이:  |  크기: 86 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 80 KiB

이후

너비:  |  높이:  |  크기: 85 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 86 KiB

이후

너비:  |  높이:  |  크기: 87 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 77 KiB

이후

너비:  |  높이:  |  크기: 84 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 77 KiB

이후

너비:  |  높이:  |  크기: 84 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 69 KiB

이후

너비:  |  높이:  |  크기: 69 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 72 KiB

이후

너비:  |  높이:  |  크기: 94 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 74 KiB

이후

너비:  |  높이:  |  크기: 92 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 81 KiB

이후

너비:  |  높이:  |  크기: 78 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 83 KiB

이후

너비:  |  높이:  |  크기: 89 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 78 KiB

이후

너비:  |  높이:  |  크기: 90 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 66 KiB

이후

너비:  |  높이:  |  크기: 86 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 78 KiB

이후

너비:  |  높이:  |  크기: 85 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 80 KiB

이후

너비:  |  높이:  |  크기: 87 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 88 KiB

이후

너비:  |  높이:  |  크기: 82 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 65 KiB

이후

너비:  |  높이:  |  크기: 83 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 64 KiB

이후

너비:  |  높이:  |  크기: 81 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 52 KiB

이후

너비:  |  높이:  |  크기: 69 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 62 KiB

이후

너비:  |  높이:  |  크기: 80 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 58 KiB

이후

너비:  |  높이:  |  크기: 77 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 66 KiB

이후

너비:  |  높이:  |  크기: 79 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 80 KiB

이후

너비:  |  높이:  |  크기: 93 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 74 KiB

이후

너비:  |  높이:  |  크기: 89 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 69 KiB

이후

너비:  |  높이:  |  크기: 82 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 73 KiB

이후

너비:  |  높이:  |  크기: 86 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 79 KiB

이후

너비:  |  높이:  |  크기: 92 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 75 KiB

이후

너비:  |  높이:  |  크기: 81 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 68 KiB

이후

너비:  |  높이:  |  크기: 86 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 68 KiB

이후

너비:  |  높이:  |  크기: 82 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 49 KiB

이후

너비:  |  높이:  |  크기: 63 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 66 KiB

이후

너비:  |  높이:  |  크기: 77 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 66 KiB

이후

너비:  |  높이:  |  크기: 73 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 69 KiB

이후

너비:  |  높이:  |  크기: 81 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 66 KiB

이후

너비:  |  높이:  |  크기: 78 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 67 KiB

이후

너비:  |  높이:  |  크기: 73 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 56 KiB

이후

너비:  |  높이:  |  크기: 70 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 63 KiB

이후

너비:  |  높이:  |  크기: 81 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 61 KiB

이후

너비:  |  높이:  |  크기: 78 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 69 KiB

이후

너비:  |  높이:  |  크기: 72 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 65 KiB

이후

너비:  |  높이:  |  크기: 67 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 61 KiB

이후

너비:  |  높이:  |  크기: 64 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 55 KiB

이후

너비:  |  높이:  |  크기: 66 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 60 KiB

이후

너비:  |  높이:  |  크기: 65 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 60 KiB

이후

너비:  |  높이:  |  크기: 63 KiB

바이너리 파일은 표시되지 않음.

이전

너비:  |  높이:  |  크기: 67 KiB

이후

너비:  |  높이:  |  크기: 62 KiB

+3 -4
파일 보기
@@ -529,8 +529,7 @@ export default function VillageView({
y: anim.y,
draw: () => {
shadow(anim.x, anim.y + 2, 11);
// 걷기는 프레임 교대 대신 한 프레임 + 총총 바운스 + 미세 기울임
// (두 걷기 프레임의 몸통 각도가 달라 교대 시 도리도리처럼 보이는 문제 회피)
// 걷기: 측면 보폭 교대 2프레임 (재생성 시트는 몸통이 고정되어 교대 가능)
const atKitchen =
working &&
state.buildings.find((b) => b.id === cat.assignedTo)?.type === "kitchen";
@@ -539,7 +538,9 @@ export default function VillageView({
? "cook"
: "work"
: moving
? Math.floor(now / 200) % 2 === 0
? "walk1"
: "walk2"
: "idle";
// 품종 스프라이트 → (cook 없으면 work) → 기본 스프라이트 순 폴백
let sprite = getImage(catSprite(cat.breed, frameName));
@@ -552,10 +553,8 @@ export default function VillageView({
if (sprite) {
const sh = 42;
const sw = (sprite.width / sprite.height) * sh;
const tilt = moving ? Math.sin(now / 150) * 0.06 : 0;
ctx.save();
ctx.translate(anim.x, anim.y + bob);
ctx.rotate(tilt);
if (anim.flip) ctx.scale(-1, 1);
ctx.drawImage(sprite, -sw / 2, -sh + 4, sw, sh);
ctx.restore();