게임 내 저장을 플레이 중에 파일에 기록하기
게임 내 저장을 백그라운드 전환이나 게임 종료 때만 파일에 기록하던 문제를 고쳤습니다. 1.2.0에서는 마지막 변경 후 1초 동안 더 바뀌지 않으면 파일에 기록합니다.
게임 내 저장을 하면 데이터가 먼저 에뮬레이터 메모리에 남습니다. 1.1.2까지는 앱이 백그라운드로 가거나 게임을 끝낼 때만 이 데이터를 파일에 옮겼습니다. 그사이 앱이 멈추거나 시스템이 앱을 종료하거나 배터리가 다 되면 마지막 전환 이후의 저장 데이터를 모두 잃었습니다.
GB와 GBA에는 다른 문제도 있었습니다. mGBA는 열어 둔 저장 파일에 직접 쓰는데, 앱이 그 파일을 새 파일로 교체한 뒤에도 삭제된 이전 파일에 계속 썼습니다. 그래서 처음 백그라운드로 다녀온 뒤에는 다음 전환 때까지 게임 내 저장이 새 파일에 기록되지 않았습니다.
1.2.0에서는 각 코어의 저장 메모리가 바뀌었는지 0.5초마다 확인합니다. 마지막 변경 후 1초 동안 더 바뀌지 않으면 파일에 기록합니다. 게임은 저장 데이터를 여러 프레임에 나눠 쓰기도 합니다. 변경될 때마다 파일에 기록하면 쓰기 횟수가 늘고 저장 중인 데이터가 파일에 남을 수 있습니다. 일시정지 메뉴를 열 때는 기다리지 않고 바로 기록합니다.
기록할 때는 임시 파일에 먼저 쓴 뒤 원래 파일과 교체합니다. 쓰는 도중 앱이 꺼져도 이전 저장 데이터가 남도록 하는 기존 방식입니다. 게임이 저장할 때만 파일에 쓰고 매 프레임 쓰지는 않습니다. PPSSPP는 메모리 스틱 폴더에 직접 쓰므로 이 방식의 대상이 아닙니다.
게임 내 저장 직후 1초 안에 앱이 종료되면 최근 저장 데이터는 여전히 잃을 수 있습니다. 실기기에서 게임 중 앱을 강제로 종료한 뒤 저장 데이터가 남는지는 아직 확인하지 않았습니다.
함께 읽을 개발 이야기
- 개발 이야기v1.0.7클로즈 베타 테스트
다른 에뮬레이터의 저장 데이터를 가져올 수 있도록
델타에서 사용하던 닌텐도 DS 저장 데이터를 가져올 수 없다는 제보를 받았습니다. 파일 형식뿐 아니라 N-EMU의 가져오기 기능이 어떤 파일을 받는지부터 확인해야 했습니다.
- 개발 이야기v0.4.2초기 개발
저장 지점을 잘못 불러왔을 때
저장 지점을 잘못 불러왔을 때 방금까지 플레이하던 상태로 돌아갈 수 있도록 ‘불러오기 취소’를 추가했습니다.