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