- 모든 애니메이션 캐릭터 위치를 전투 기준에 맞춤 (머리=4, 몸통=5, 다리=6)
- townAnimation: 건물 1줄 확장하여 베이스와 다리 같은 줄에 배치
- levelUpAnimation: 캐릭터 1줄 아래로 이동
- questCompleteAnimation: 캐릭터 2줄 아래로 이동
- actCompleteAnimation: 캐릭터 2줄 아래로 이동
- 게임 중 일시 정지/재개 버튼 추가 (테마 버튼 옆)
- 5x 배속이 2x와 동일하게 작동하던 버그 수정
- progress_service.dart clamp 제한을 100ms에서 500ms로 확장
- ASCII 애니메이션 40x8 규격 통일
- townAnimation, walkingAnimation, levelUpAnimation 등 8줄로 통일
- 레거시 애니메이션 TextAlign.left로 정렬 문제 수정
- 캐릭터 프레임 구조 통일 (머리/몸통/다리 3줄)
- 몬스터 크기 enum 실제 프레임 줄 수와 일치하도록 수정
- walkingAnimation, townAnimation 4줄 → 3줄 통일
- character_frames.dart 모든 프레임 폭 6자로 통일
- _compose() 이펙트 Y 위치 동적 계산 (하드코딩 제거)
- withShield() 3줄 캐릭터용으로 수정 (index 3 → index 1)
- BattleComposer 캔버스 시스템 및 배경 합성 추가
- 무기 카테고리별 이펙트, 몬스터 크기/색상 시스템 구현
- game_text_l10n.dart에 게임 데이터 번역 함수 추가
- translateMonster, translateRace, translateKlass
- translateTitle, translateImpressiveTitle
- translateBoringItem, translateInterestingItem
- pq_logic.dart monsterTask에서 몬스터 이름 번역
- completeQuest에서 퀘스트 아이템/몬스터 번역
- impressiveGuy, namedMonster에서 NPC 이름 번역
- interplotCinematic에서 시네마틱 아이템 번역
- dropItemTranslationsKo 추가 (250+ 드롭 아이템 번역)
- translateItemString 함수 리팩터링:
- specialItem 형식 정확히 감지 (itemOfs 검증)
- 몬스터 드롭 형식 지원 ("{monster} {drop}" → "{몬스터}의 {드롭}")
- 인벤토리 아이템이 올바르게 한글로 표시됨
- newCharacterTitle, soldButton 키 추가 (app_en.arb, app_ko.arb)
- new_character_screen.dart 하드코딩 텍스트를 L10n 함수로 변경
- 관련 테스트 업데이트 (widget_test.dart, new_character_screen_test.dart)
변경 내역:
- "Progress Quest - New Character" → L10n.newCharacterTitle
- "Sold!" → L10n.soldButton
- game_text_l10n.dart: BuildContext 없이 사용할 수 있는 게임 텍스트 l10n 파일 생성
- progress_service.dart: 프롤로그/태스크 캡션 l10n 함수 사용으로 변경
- pq_logic.dart: 퀘스트/시네마틱/몬스터 수식어 l10n 함수 사용으로 변경
번역 적용 범위:
- 프롤로그 텍스트 (4개)
- 태스크 캡션 (컴파일, 이동, 디버깅, 판매 등)
- 퀘스트 캡션 (패치, 찾기, 전송, 다운로드, 안정화)
- 시네마틱 텍스트 (캐시 존, 전투, 배신 시나리오)
- 몬스터 수식어 (sick, young, big, special 등 모든 수식어)
- 시간 표시 (초, 분, 시간, 일)
- impressiveGuy, namedMonster 패턴
- pq_logic.dart: 구조화된 결과 타입 (EquipResult, ItemResult) 추가
- pq_logic.dart: 구조화된 생성 함수 (winEquipStructured, winItemStructured 등) 추가
- GameDataL10n: 구조화된 결과 렌더링 함수 추가 (renderEquipResult, renderItemResult)
- GameDataL10n: 문자열 파싱 기반 번역 함수 추가 (translateEquipString, translateItemString)
- game_play_screen.dart: 장비/아이템 목록에 번역 함수 적용
new_character_screen.dart:
- 종족 목록에 GameDataL10n.getRaceName() 적용
- 직업 목록에 GameDataL10n.getKlassName() 적용
game_play_screen.dart:
- 캐릭터 정보의 종족/직업 번역 적용
- 주문 목록에 GameDataL10n.getSpellName() 적용
- game_translations_ko.dart: 한국어 번역 데이터
- 종족/직업/몬스터/무기/갑옷/방패/주문 번역
- 아이템 속성/접미사 번역
- 칭호/특수 아이템 번역
- game_data_l10n.dart: 번역 헬퍼 클래스
- getRaceName(), getKlassName(), getMonsterName() 등
- BuildContext 기반 로케일 감지
- flutter_localizations 및 intl 패키지 추가
- l10n.yaml 설정 파일 및 app_ko.arb 메시지 파일 생성
- 모든 화면(app, front, game_play, new_character, save_picker)의 하드코딩 텍스트를 L10n 키로 변환
- 테스트 파일에 localizationsDelegates 추가하여 L10n 지원
- TaskType별 애니메이션 (전투, 마을, 걷기)
- 몬스터 카테고리별 전투 애니메이션 (7종)
- 특수 애니메이션 (레벨업, 퀘스트 완료, Act 완료)
- 색상 테마 옵션 (green, amber, white, system)
- 테마 설정 SharedPreferences 저장
- 프로그레스 바를 상단으로 이동
- Equipment 클래스를 11개 슬롯으로 확장 (원본 Main.dfm 충실)
- TaskInfo에 몬스터 정보(baseName, part) 추가
- Stats에 현재 HP/MP 필드 추가
- 히스토리 기능 구현 (plotHistory, questHistory)
- pq_logic winEquip/winStatIndex 원본 로직 개선
- 퀘스트 몬스터 처리 로직 구현
- SaveData 직렬화 확장