fix(animation): 레거시 애니메이션 캐릭터 세로 위치 통일

- 모든 애니메이션 캐릭터 위치를 전투 기준에 맞춤 (머리=4, 몸통=5, 다리=6)
- townAnimation: 건물 1줄 확장하여 베이스와 다리 같은 줄에 배치
- levelUpAnimation: 캐릭터 1줄 아래로 이동
- questCompleteAnimation: 캐릭터 2줄 아래로 이동
- actCompleteAnimation: 캐릭터 2줄 아래로 이동
This commit is contained in:
JiWoong Sul
2025-12-15 18:32:40 +09:00
parent e7fb8a4adb
commit 8047abece4

View File

@@ -208,52 +208,53 @@ const battleAnimationBeast = AsciiAnimationData(
);
/// 마을/상점 애니메이션 (8줄 x 40자 고정)
/// 캐릭터 위치: 머리=4, 몸통=5, 다리=6 (전투 애니메이션 기준)
const townAnimation = AsciiAnimationData(
frames: [
// 프레임 1: 상점 앞 대기
' \n'
' ___________ \n'
' / SHOP \\ o \n'
' | [======] | /|\\ \n'
' | @@@@ | / \\ \n'
' | ITEMS | \n'
' |___________| \n'
' ___________ \n'
' / SHOP \\ \n'
' | [======] | \n'
' | @@@@ | \n'
' | ITEMS | o \n'
' | | /|\\ \n'
' |___________| / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 2: 이동 중
' \n'
' ___________ \n'
' / SHOP \\ o \n'
' | [======] | /|\\ \n'
' | @@@@ | / \\ \n'
' | ITEMS | \n'
' |___________| \n'
' ___________ \n'
' / SHOP \\ \n'
' | [======] | \n'
' | @@@@ | \n'
' | ITEMS | o \n'
' | | /|\\ \n'
' |___________| / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 3: 거래 시작
' \n'
' ___________ \n'
' / SHOP \\ o \$ \n'
' | [======] | /|\\ \$ \n'
' | @@@@ | / \\ \$ \n'
' | ITEMS | \n'
' |___________| \n'
' ___________ \n'
' / SHOP \\ \n'
' | [======] | \$ \n'
' | @@@@ | \$ \n'
' | ITEMS | o \$ \n'
' | | /|\\ \n'
' |___________| / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 4: 거래 중
' \n'
' ___________ \n'
' / SHOP \\ o \$\$\$ \n'
' | [<====>] | /|\\ \$\$\$ \n'
' | @@@@ | / \\ \n'
' | SOLD! | \n'
' |___________| \n'
' ___________ \n'
' / SHOP \\ \n'
' | [<====>] | \$\$\$ \n'
' | @@@@ | \$\$\$ \n'
' | SOLD! | o \n'
' | | /|\\ \n'
' |___________| / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 5: 거래 완료
' \n'
' ___________ \n'
' / SHOP \\ \\o/ + \n'
' | [======] | /|\\ + \n'
' | @@@@ | / \\ \n'
' | ITEMS | \n'
' |___________| \n'
' ___________ \n'
' / SHOP \\ \n'
' | [======] | + \n'
' | @@@@ | + \n'
' | ITEMS | \\o/ \n'
' | | /|\\ \n'
' |___________| / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
],
frameIntervalMs: 280,
@@ -517,156 +518,159 @@ AsciiAnimationData getBattleAnimation(MonsterCategory category) {
}
/// 레벨업 축하 애니메이션 (8줄 x 40자 고정)
/// 캐릭터 위치: 머리=4, 몸통=5, 다리=6 (전투 애니메이션 기준)
const levelUpAnimation = AsciiAnimationData(
frames: [
// 프레임 1: 시작
' * * * \n'
' * * * \n'
' * * \n'
' \n'
' \\O/ \n'
' * /|\\ * \n'
' / \\ \n'
' * * \n'
' * \\O/ * \n'
' /|\\ \n'
' * / \\ * \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 2: 별 확산
' * * * \n'
' * * \n'
' * * \n'
' \n'
' * \\O/ * \n'
' /|\\ \n'
' * / \\ * \n'
' * * \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 3: 레벨업 텍스트
' * L E V E L U P ! * \n'
' * * \n'
' * * \n'
' \n'
' * \\O/ * \n'
' /|\\ \n'
' * / \\ * \n'
' * * \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 4: 빛나는 캐릭터
' * * * * * \n'
' * * \n'
' * * * * \n'
' \n'
' * \\O/ * \n'
' * /|\\ * \n'
' * / \\ * \n'
' * * * * \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 5: 마무리
' + \n'
' +++ \n'
' +++++ \n'
' \n'
' \\O/ \n'
' /|\\ \n'
' / \\ \n'
' \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
],
frameIntervalMs: 300,
);
/// 퀘스트 완료 애니메이션 (8줄 x 40자 고정)
/// 캐릭터 위치: 머리=4, 몸통=5, 다리=6 (전투 애니메이션 기준)
const questCompleteAnimation = AsciiAnimationData(
frames: [
// 프레임 1: 퀘스트 깃발
' [=======] \n'
' || || \n'
' || \\O/ || \n'
' || /|\\ || \n'
' || / \\ || \n'
' || || \n'
' ||_____|| \n'
' \n'
' \\O/ \n'
' /|\\ \n'
' / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 2: 승리
' [QUEST!] \n'
' || || \n'
' \\\\O// \n'
' /|\\ \n'
' / \\ \n'
' || || \n'
' ||_____|| \n'
' \n'
' \\\\O// \n'
' /|\\ \n'
' / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 3: 보상
' COMPLETE! \n'
' \n'
' \\O/ \$\$\$ \n'
' /|\\ \$\$\$ \n'
' / \\ \$\$\$ \n'
' \n'
' \n'
' \$\$\$ \n'
' \\O/ \$\$\$ \n'
' /|\\ \$\$\$ \n'
' / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 4: 축하
' * * * * * \n'
' \\O/ \n'
' /|\\ +EXP \n'
' / \\ +GOLD \n'
' \n'
' \n'
' * * * * * \n'
' \n'
' \n'
' \\O/ +EXP \n'
' /|\\ +GOLD \n'
' / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 5: 마무리
' [ VICTORY! ] \n'
' \n'
' \n'
' \n'
' \\O/ \n'
' /|\\ \n'
' / \\ \n'
' \n'
' \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
],
frameIntervalMs: 350,
);
/// Act 완료 애니메이션 (8줄 x 40자 고정)
/// 캐릭터 위치: 머리=4, 몸통=5, 다리=6 (전투 애니메이션 기준)
const actCompleteAnimation = AsciiAnimationData(
frames: [
// 프레임 1: 커튼
' ______________________________ \n'
' | | \n'
' | A C T | \n'
' | | \n'
' | C O M P L E T E | \n'
' | | \n'
' |______________________________| \n'
' \n'
' \n'
' \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 2: 캐릭터 등장
' ______________________________ \n'
' | * * * * * | \n'
' | \\O/ | \n'
' | /|\\ | \n'
' | / \\ | \n'
' | * * * * * | \n'
' |______________________________| \n'
' \\O/ \n'
' /|\\ \n'
' / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 3: 플롯 진행 표시
' ______________________________ \n'
' | PROLOGUE --> ACT | \n'
' | \\O/ | \n'
' | /|\\ --> | \n'
' | / \\ | \n'
' | STORY CONTINUES | \n'
' | STORY CONTINUES --> | \n'
' |______________________________| \n'
' \\O/ \n'
' /|\\ \n'
' / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 4: 축하
' ______________________________ \n'
' | * * * * * | \n'
' | * \\O/ * | \n'
' | /|\\ | \n'
' | * / \\ * | \n'
' | * * * * * | \n'
' |______________________________| \n'
' * \\O/ * \n'
' /|\\ \n'
' * / \\ * \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
// 프레임 5: 마무리
' ______________________________ \n'
' | +---------+ | \n'
' | | NEXT | | \n'
' | | CHAPTER | | \n'
' | +---------+ | \n'
' | \\O/ | \n'
' |______________________________| \n'
' |____| CHAPTER |_______________| \n'
' \\O/ \n'
' /|\\ \n'
' / \\ \n'
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~',
],
frameIntervalMs: 400,