# 30년전 RPG (포가튼사가) 소스 포팅 하기

> Clean Markdown view of GeekNews topic #29586. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=29586](https://news.hada.io/topic?id=29586)
- GeekNews Markdown: [https://news.hada.io/topic/29586.md](https://news.hada.io/topic/29586.md)
- Type: news
- Author: [namyunwoo](https://news.hada.io/@namyunwoo)
- Published: 2026-05-17T18:37:00+09:00
- Updated: 2026-05-17T18:37:00+09:00
- Original source: [forgottensaga-classic.blogspot.com](https://forgottensaga-classic.blogspot.com/2026/05/forgottensagaclassic.html)
- Points: 5
- Comments: 0

## Topic Body

### 포가튼 사가 (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 프레임. `0xA4` header + 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 검증  
- 이전 잘못된 매핑 (`0x3C` ATK→STR, `0x40` INT→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.sh` test 실행 (100+ test mode, 1,000+ assertion)  
- 브라우저 환경 디버그 (IDBFS / IME / SharedArrayBuffer 등)  
- 사용자 보고 받으면 디버그 → fix → dev 배포 → 검증 → live 배포 사이클  
  
##### 작업 기간  
  
- 약 1~3 개월  
  
#### 어떤 결과물인지  
  
- **Play (브라우저)**: https://forgottensaga-classic.blogspot.com/2026/05/forgottensagaclassic.html  
- PC / 모바일 모두 동작. 모바일은 가상 조이스틱 + 한국어 IME 자체 구현  
- 원본 게임플레이 충실 재현 — Z 정렬, 팔레트 사이클, NPC 상태머신, SCP VM 등 원본 동작 1:1

## Comments



_No public comments on this page._
