Show GN: 30년전 RPG (포가튼사가) 소스 포팅 하기
(forgottensaga-classic.blogspot.com)포가튼 사가 (1997 한국 DOS RPG) 를 소스포팅 하기
동기
- 30년 전, 초등학교 때 처음 산 패키지 게임이 포가튼 사가
- 인생 첫 RPG, 자연스럽게 깊이 빠짐
- 20년 넘게 잊고 살다가 아직도 사람들이 많이 플레이하고 있다는 사실 알게 됨
- "이걸 멀티 플랫폼 게임으로 만들 수 없을까?"
- 남아 있는 건 1997 PE32 실행파일 + 데이터 파일 뿐 (당연히 소스코드는 없음)
접근 방식
- 원본 게임 재현 방법은 크게 두 가지
- 스펙 기반 재해석 — 게임플레이 보고 비슷하게 다시 만들기
- 원본 함수 단위 충실 복원 — 디컴파일된 코드를 그대로 포팅
- 후자를 선택. 추측이 아닌 검증된 원본 동작을 따르기 위함
- 원본은 1997 Windows MSVC
분석한 내용
원본 binary 디컴파일
- Ghidra 12 로 PE32 처리. 937 함수 100% 디컴파일 성공
- 51,799 줄의 pseudocode C
데이터 포맷 크래킹 (48 종, 모두 검증)
- LZSS — 표준 + FAM 변형 (ring init
0x00,ref_offset비트 배치 다름) - SPB — 256색 + RLE, 1,155 이미지
- MOB — 캐릭터/NPC 애니메이션 2,699 프레임.
0xA4header + RLE pixel + frame stride 20B - SCP — 바이트코드 VM, 128+ opcode, 6,026 entry, 43,036 대화문
- FAM — 292개 맵, 5 layer (base / overlay / collision / ...)
- DAT — CHAR / ITEM 290 종 / MAGIC / ABILITY / MONSTER
- SAV — actor struct
0x2A4(676B), party + inventory + global vars
사용자 입력 직접 검증
- 세이브파일을 직접 파싱해 actor struct offset 검증
- 이전 잘못된 매핑 (
0x3CATK→STR,0x40INT→TLT 등) 정정
만들어낸 내용
- Lua 263 파일, 157,277 줄
- 에셋 3,760 개
- LÖVE 2D 11.5 데스크톱 빌드 + love.js (emscripten) 웹 빌드
- 모바일 가상 조이스틱 + 한국어 IME 직접 구현
- SharedArrayBuffer 활성화 (COOP/COEP via coi-serviceworker)
- IndexedDB sav 영속화 (브라우저 환경)
- 배포 채널 5종 — Web / iOS / Android / Windows / macOS
재현 범위
- 타이틀 / 캐릭터 생성 / 필드 / 대화 / 상점 / 인벤토리 / 장비 / 함정 / DETECT·UNLOCK / 세이브 — 완료
- 전투 시스템 — 진행 중
AI 도구 활용
- GPT 5.5 의
/goal기능 위주, Claude Code 는 보조 + 실시간 디버그
GPT 5.5 /goal 역할 — 디컴파일 분석 / 정정 누적
- 원본 함수 cluster / call graph / opcode reference 자동화 분석
- 데이터 포맷 deep dive (sav format, actor offset, FAM 구조 등)
- 초기 자동 디코드본의 mislabel 정정 누적 (51,799 줄 정정본)
Claude Code 역할 — Lua 포팅 + 즉시 검증 사이클
- 원본 함수 read → Lua 포팅 →
verify.shtest 실행 (100+ test mode, 1,000+ assertion) - 브라우저 환경 디버그 (IDBFS / IME / SharedArrayBuffer 등)
- 사용자 보고 받으면 디버그 → fix → dev 배포 → 검증 → live 배포 사이클
작업 기간
- 약 1~3 개월
어떤 결과물인지
- Play (브라우저): https://forgottensaga-classic.blogspot.com/2026/05/…
- PC / 모바일 모두 동작. 모바일은 가상 조이스틱 + 한국어 IME 자체 구현
- 원본 게임플레이 충실 재현 — Z 정렬, 팔레트 사이클, NPC 상태머신, SCP VM 등 원본 동작 1:1
댓글과 토론
제가 중학생때 그 당시에 흔하지않았던 "예약구매"를 한 친구가 있었는데 포가튼사가가 출시일자를 계속 지키 못해 저에게 푸념을 늘어놓던 녀석이 생각나네요.ㅋㅋ
저도 요즘 초등학교 시절 재밌게 했던 고전게임을 웹을오 포팅하고 싶었는데 이런 글이 올라오네요. 동기나 분석한 내용에 대한 글을 어디서 가져와서 GeekNews에 뜨는지 궁금하네요