feat: resume exploration exactly and harden campaign saves

This commit is contained in:
2026-07-28 17:39:20 +09:00
parent a08d251098
commit 8a6c8c2cd7
24 changed files with 8958 additions and 413 deletions

View File

@@ -349,7 +349,7 @@ RPG로 다듬는다.
Canvas·WebGL의 1920x1080 CSS viewport, 100% 확대, DPR 1에서
포인터·J·Esc 재열기, 카드 경계·비겹침·저장 불변을 자동 검증한다.
### 탐색 재개와 읽지 않은 도입 보존 (2026-07-28)
### 완료한 17차 묶음: 저장한 순간으로 돌아가는 탐색 (2026-07-28)
- 불러오기는 허브가 아니라 저장한 지점으로 돌아와야 하고 대화 중 저장을
막거나 허브로 돌려보내는 구현은 실패 사례라는
@@ -371,9 +371,40 @@ RPG로 다듬는다.
마지막 대사를 읽은 순간에만 완독 처리한다. 대화 도중 종료하면 다음
재개에서 첫 줄부터 안전하게 다시 들려준다.
다음 묶음은 버전이 있는 `explorationCheckpoint`로 주인공 좌표·방향과
대화 상대·대사 위치·선택창을 안정 ID로 보존하고, 선택·구매·공명 보상이
재로드 경계에서도 정확히 한 번만 적용되는지 검증한다.
- 버전이 있는 `explorationCheckpoint`를 도입해 세 막간 탐색, 서주·신야·성도
체류, 프롤로그 마을·의용군 막사의 주인공 좌표와 방향을 정확히 보존한다.
대화 상대와 대사 위치, 선택창, 상점, 아직 확정하지 않은 첫 군령 카드도
문자열 원문이나 실행 함수를 저장하지 않고 안정 ID로 다시 구성한다.
- 막사 세 곳·도시·프롤로그 두 장면마다 허용하는 대화·선택·상점 상태를
따로 검사한다. 손상되거나 구버전인 보조 화면만 버리고 유효한 위치는
살리며, 이미 다른 장소로 이동한 뒤 도착한 늦은 저장 요청은 기존 최신
체크포인트와 저장 시각을 전혀 바꾸지 않는다.
- 이동이 멈춘 때와 대화·선택·상점의 의미 있는 경계, 브라우저 숨김·종료
직전에 체크포인트를 갱신한다. 타이틀 이어하기는 전투 저장 다음으로 이
체크포인트를 우선해, 프롤로그 도입을 다시 거치거나 체류 허브로 밀려나는
일을 막는다.
- 캠프 선택과 공명 보상은 상태 변경·완료 표식·선택 직후 대화 체크포인트를
한 번의 저장으로 확정한다. 도시의 반복 구매에는 의도 ID와 완료 영수증을
붙여 같은 입력을 재시도해도 금전과 장비가 한 번만 바뀌게 했다. 이는
재시도를 안전하게 만드는
[AWS의 멱등 API 지침](https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/)과
변경 묶음이 전부 적용되거나 전부 취소되어야 한다는
[W3C IndexedDB 트랜잭션 모델](https://www.w3.org/TR/IndexedDB/#transaction-concept)을
로컬 저장 흐름에 맞게 적용한 것이다.
- 전투 승전 정산을 같은 보고서로 다시 실행해도 이미 소비한 금전·장비를
되살리거나 이후 바꾼 장비·공명·체류 위치를 과거로 되감지 않는다. 이미
확정된 승리 뒤 늦게 들어온 패배 기록도 무시하며, 저장 실패 시 화면 속
상태만 앞서 바뀌는 현상도 막았다. 활성 슬롯을 정본으로 먼저 저장하고
구버전 호환 저장은 보조 사본으로 다뤄, 둘째 쓰기 실패가 유효한 진행을
무효화하지 않게 했다.
- Canvas·WebGL 각각 1920x1080 CSS viewport, 100% 확대, DPR 1에서 정확한
위치·방향·대사 줄·선택창·상점·군령 카드 복원과 보상 1회성, 정상 퇴장
시 체크포인트 제거를 자동 검증한다.
다음 묶음은 이야기 화면의 페이지 단위 재개와 남은 직접 상태 변경 경로를
같은 저장 원칙으로 정리한다. 탐색 대사에는 문구나 순서가 바뀌어도 같은
장면을 찾는 안정적인 `beatId`와 구버전 변환표를 더해, 긴 캠페인에서
“중단해도 읽은 만큼만 이어지는” 경험을 전 구간으로 확장한다.
## 장기 개선 순서