자료 파일 형식: 게임 파일 전부와 기록 배치
한글판 dos/ 폴더의 파일마다 무엇이 들었는지와 기록 배치를 정리했습니다. 표시 방법은 index.md를 따릅니다.
크기는 이 폴더의 한글판 파일 기준입니다. 숫자는 따로 적지 않으면 리틀엔디언입니다.
1. 실행 파일과 실행 순서
| 파일 | 크기 | 내용 | 근거 |
|---|---|---|---|
PLAY.BAT | 35 | FMDRV.COM을 올린 뒤 VOYAGE2.COM 실행 | 확인됨[직접] |
VOYAGE2.COM | 895 | 실행기. FMDRV.COM, OPEN.EXE, MAIN.EXE, END.EXE를 차례로 부름(PKLITE 압축) | 확인됨[직접](문자열) |
FMDRV.COM | 5,162 | FM 음원 드라이버. 게임은 인터럽트 0x66으로 부름 | 확인됨[대조] |
OPEN.EXE | 42,167 | 오프닝. OPGRAPH.LZW만 엶 | 확인됨[직접](문자열) |
MAIN.EXE | 297,783 | 본편. MZ 헤더 0x5400, 코드 세그먼트 0x0000·0x0FB8·0x1F74·0x2DA1, 데이터 세그먼트 0x378B(파일 0x3CCB0), 데이터 이미지 0xBE87바이트 | 확인됨[직접] |
END.EXE | 52,241 | 엔딩. ENDGRP.DAT, END_PUT.DAT, EVENT*.DAT, 글꼴 두 개를 엶 | 확인됨[직접](문자열) |
GRPDRV.EXE | 22,063 | 그래픽 드라이버(파일 이름 문자열 없음) | 추정 |
KOEI.COM / KOEI.DAT | 776 / 33,792 | 회사 로고 표시와 그 그림으로 보임. 세 EXE 모두 KOEI.DAT를 이름으로 부르지 않음 | 추정 |
MAIN.EXE는 이 폴더에 없는 DATA2.LZW, EVENT.LZW, IKKI.LZW, SNRDAT.LZW, SNRMES.LZW, USERNAME.DAT, KOUKAI2.COM, MOUSE.COM이라는 이름도 담고 있습니다. 쓰이는지는 확인하지 않았습니다.
2. LS10/LS11 묶음 (.LZW)
확인됨[직접] (편집기의 해독기로 전부 풀어 봄)
이름과 달리 LZW가 아니라 KOEI의 LZSS 변형입니다.
+0x000 "LS10" 또는 "LS11", 12바이트 0
+0x010 256바이트 글자 표(모든 엔트리 공용)
+0x110 엔트리 색인: (압축 크기 u32 BE, 원래 크기 u32 BE, 파일 오프셋 u32 BE) × n, 압축 크기 0으로 끝
| 파일 | 형식 | 엔트리 | 내용 |
|---|---|---|---|
DATA1.LZW | LS11 | 19 | 아래 표 |
KAO.LZW | LS11 | 256 | 얼굴 64 × 80 (엔트리마다 1,920바이트), 128번부터 48 × 48 발견물·도구 그림. 묶음 뒤 173,376바이트는 무작위 얼굴 부품(압축 안 됨) |
PORTMAP.LZW | LS11 | 101 | 항구 마을 지도 96 × 96칸(9,216바이트). 0~99 = 일반 항구, 100 = 보급항 공용 |
PORTCHIP.LZW | LS11 | 14 | 마을 타일 그림 7벌(30,720바이트)과 4바이트 짝 |
WORLDMAP.LZW | LS11 | 3 | 세계 지도 세 조각(각 720 × 1,080칸) |
OPGRAPH.LZW | LS11 | 14 | 오프닝 그림 |
CHAR.LZW | LS10 | 7 | 5,120바이트 6개 + 15,360바이트(글자·기호 그림으로 보임, 추정) |
IAE1.LZW | LS10 | 35 | 결투 상대 동작 그림 |
IAP1.LZW~IAP6.LZW | LS10 | 35 | 주인공별 결투 동작 그림(주인공 번호 + 1) |
DATA1.LZW 엔트리
| 엔트리 | 크기 | 내용 | 근거 |
|---|---|---|---|
| 0, 1 | 23,040 | 결투 배경 띠(바다 / 항구) | 확인됨[대조] |
| 2, 3 | 4,320 | 결투 화면 양끝 그림 | 확인됨[대조] |
| 4 | 12,288 | NPC 항로 그래프 노드(16바이트 기록) | 확인됨[대조] |
| 5 | 2 | 쓰이는 노드 수(622) | 확인됨[직접](값 0x026E) |
| 6, 7, 8 | 3,840 / 9,216 / 28,406 | 미상 | — |
| 9 | 5,568 | 통째로 버퍼에 읽는 표 | 확인됨[대조] |
| 10 | 512 | 바다 타일 색인 표 | 확인됨[대조] |
| 11 | 32,768 | 세계 지도 기본 타일 그림 | 확인됨[대조] |
| 12 | 512 | 미상 | — |
| 13 | 312 | 8086 기계어 조각(55 8B EC …로 시작) | 확인됨[직접](바이트), 용도 미상 |
| 14 | 16,032 | 함대 정보·해전 아이콘 그림 | 확인됨[대조] |
| 15 | 32,573 | 새 게임 자료 = 세이브 슬롯 앞부분(아래 4절) | 확인됨[직접] |
| 16, 17 | 81 | 작위 이름 9개 × 9바이트(16 유럽식, 17 오스만식) | 확인됨[직접] |
| 18 | 1,024 | 세계 지도 큰 타일(4칸 묶음) 표 | 확인됨[대조] |
3. 그림 파일
| 파일 | 크기 | 구조 | 근거 |
|---|---|---|---|
GRAPH.DAT | 441,794 | u32 BE 오프셋 표 + 레코드 65개. 레코드 = u16 너비, u16 높이, u16 × 8 표, 그 뒤 압축 평면 자료 | 확인됨[직접](개수·크기) |
GRAPH2.DAT | 78,875 | 같은 형식, 2개(144 × 56, 640 × 400) | 확인됨[직접] |
ENDGRP.DAT | 394,025 | 같은 형식, 엔딩 그림 59개 | 확인됨[직접] |
EVENT0.DAT~EVENT6.DAT | 8,541~62,878 | 같은 형식, 192 × 144 이벤트 그림 1/5/6/5/5/6/4개 | 확인됨[직접] |
HDAT.PUT | 31,624 | 해전 그림(배 모양 +0x1A00 + 0x280 × (6 × 세트 + 방향), 포탄 등) | 확인됨[대조] |
TRANSIT.DAT | 19,200 | 48 × 48 4평면 그림. 함대 정보의 선수상은 0x1980 + 0x480 × 선수상(0x480 × 11 = 뒤 12,672바이트) | 확인됨[대조](크기 계산은 확인됨[직접]) |
END_PUT.DAT | 40,864 | 엔딩 화면 조각 그림 | 확인됨[대조] |
ALL_FONT.16P | 104,340 | 16 × 16 한글·전각 글꼴 | 추정(이름과 크기) |
HANKAKU.FNT | 1,536 | 8 × 16 반각 글꼴 96자(16바이트 × 96) | 확인됨[직접](크기), 용도는 추정 |
4. 세이브 KOUKAI2.DAT와 새 게임 자료
파일 전체
확인됨[직접]
크기 333,551 = 머리 0x97 + 10칸 × 0x823C
머리: 1바이트 + 칸마다 15바이트 (이 폴더의 파일은 머리가 전부 0 = 저장한 칸 없음)
칸 n의 시작 = 0x97 + n × 0x823C
- 각 칸의 앞 32,573바이트는
DATA1.LZW15번 엔트리와 바이트 단위로 같습니다(이 폴더의 파일은 열 칸 모두 새 게임 상태). 나머지 767바이트는 새 게임 자료에 없는 실행 중 상태입니다. - 같은 내용이
MAIN.EXE파일0x3D8E0(=DS:0x0C30)에 한 벌 더 있습니다. 실행 중 세이브 한 칸은DS:0x0C30부터 놓이므로칸 오프셋 = DS 오프셋 − 0xC30입니다. - 영문판은 칸 크기
0x7CC8(31,944바이트, 전체 319,591)입니다. 한글판은 항해사 기록이 8바이트 길어 960바이트 늘어난 것을 비롯해 구조체가 커졌습니다. - 머리 15바이트의 뜻(날짜, 주인공 등)은 영문판 연구에 있으나 한글판에서 확인하지 않았습니다(외부자료).
칸 안의 배치
위치는 확인됨[직접](KO 0x36A2E 기록 그룹 분기표와 코드의 고정 주소). 칸 오프셋 기준입니다.
| 칸 오프셋 | DS | 크기 | 내용 |
|---|---|---|---|
0x0000 | 0x0C30 | 1 | 설정 비트(배경음 0x04, 효과음 0x08) — 확인됨[대조] |
0x000F | 0x0C3F | 1 | 이상기상·쥐(0x10)·괴혈병(0x20) 상태 |
0x00BA~0x00BB | 0x0CEA~ | 2 | 공통 시나리오 섹션·하위 섹션 — 확인됨[대조] |
0x036E / 0x0396 | 0x0F9E / 0x0FC6 | 10개 | 해상 이벤트 위치·종류 |
0x04D6 | 0x1106 | 32 × 7 | 국가 기록(relations.md) |
0x05B6 | 0x11E6 | 14 × 6 | 주인공 명성·우호도·작위 |
0x060A | 0x123A | 4 | 소지금(u32) |
0x0612 | 0x1242 | 50 × 120 | 항해사(아래) |
0x1D82 | 0x29B2 | 21 × 20 | 수집가·지도 제작자(개수 20은 다음 표까지의 간격으로 계산) |
0x1F26 | 0x2B56 | 17 × n | 주점 아가씨 |
0x2124 | 0x2D54 | — | 이번 항해: 일수(+0), 물 배급률(+1), 식량 배급률(+2) |
0x2163 | 0x2D93 | 20 | 도구 소지품(도구 번호) |
0x2182 | 0x2DB2 | 133 × 70 | 함대(+0x2B부터 배 칸 9바이트 × 10) |
0x45E0 | 0x5210 | 30 × n | 배 보급 기록(물·식량은 10분의 1 단위, 목재, 포탄, 짐 5칸) |
0x4A36 | 0x5666 | 9 × n | 함대 밖 배 칸 |
0x4B9E | 0x57CE | 25 × n | 배 개체 |
0x51F8 | 0x5E28 | 12 × 25 | 배 종류 능력 |
0x5322 | 0x5F52 | 20 × 130 | 항구 표시 기록(이름 +6, 좌표 +2·+4; 기록 그룹 0C는 +2부터 가리킴) |
0x5D4A | 0x697A | 37 × 100 | 항구 메타(경제·공업·투자·지지도·시세·특산·지역·시장; 그룹 0D는 +2부터) |
0x6BC0 | 0x77F0 | 128 × 13 | 시장 기록 |
0x7240 | 0x7E70 | 8 × 3 | 미상(기록 그룹 0F) |
0x7258 | 0x7E88 | 7 × 98 | 발견물(landing.md) |
0x7514 | 0x8144 | 26 × 100 | 도구(items.md) |
0x7F3C | 0x8B6C | — | 새 게임 자료 끝(+1바이트). 여기서 칸 끝 0x823C까지는 실행 중 상태 |
배 개체·주점 아가씨 등 × n은 개수를 따로 세지 않았습니다.
항해사 기록 (50바이트)
확인됨[직접]
| 오프셋 | 내용 |
|---|---|
+0x00 | 이름 13바이트 |
+0x0D | 성 13바이트 |
+0x1A | 얼굴 u16(위 두 비트 0이면 KAO.LZW 고정 초상 번호) |
+0x1C~+0x23 | 통솔력, 항해술, 지식, 직감, 용기, 검술, 매력, 운 |
+0x24 / +0x25 | 항해 레벨 / 전투 레벨 |
+0x26 / +0x28 | 항해 경험 / 전투 경험(u16) |
+0x2A~+0x2F | 나이, 충성도, 함대, 머무는 항구, 직책, 성격 |
+0x30 | 기술: 0x01 교섭, 0x02 회계, 0x04 포술, 0x08 지도 제작, 0x10 측량 |
+0x31 | 하위 4비트 국적(6 = 해적), 상위 비트 등장 조건 |
0~5번이 주인공입니다. 영문판은 42바이트(이름·성이 짧음)이고 능력치가 +0x14부터입니다.
5. 표 파일
| 파일 | 크기 | 구조 | 근거 |
|---|---|---|---|
COLONY.DAT | 21,800 | 발견물 100개 × 218바이트: 이름 18, 그림 번호 1(KAO.LZW 128+n), 설명 199 | 확인됨[직접] |
ITEM.MES | 14,500 | 도구 설명 100개 × 124바이트(뒤 2,100바이트는 다른 자료) | 확인됨[직접](크기·첫 기록) |
NAME.TBL | 2,496 | 새로 생기는 항해사 이름표: 나라 6 × 16쌍 × (이름 13 + 성 13) | 확인됨[직접](2,496 = 6 × 16 × 26) |
MENU.DAT | 2,579 | 메뉴 61개. u16 BE 오프셋 표, 항목은 NUL로 구분(예: 0번 "예금/출금/대출/상환") | 확인됨[직접] |
MESSAGE.DAT | 45,384 | 공통 대사 1,179개. u16 BE 오프셋 표, CP949, NUL로 끝 | 확인됨[직접] |
SNRn.DAT, SNRn.MES | — | 시나리오 바이트코드와 대사(scenario.md) | 확인됨[직접] |
ZA_DAT.DAT | 2,424 | 마을 지도 101개 × 건물 12곳 × (x, y) 바이트. (0,0)·(0xFF,0xFF)는 없음 | 확인됨[직접](2,424 = 101 × 24) |
CHIP_NO.DAT | 100 | 일반 항구 100곳의 마을 타일 세트 번호(0~3) | 확인됨[직접](값), 뜻은 확인됨[대조] |
WINDCUR.DAT | 1,350 | 세계를 30 × 15 구역(72 × 72칸)으로 나눈 표 3개: 바람(4~9월), 바람(10~3월), 해류(1년). 구역 = (y/72) × 30 + x/72 | 확인됨[대조](1,350 = 3 × 450은 확인됨[직접]) |
MONSTER.DAT | 200 | 해상 이벤트 대기열 5바이트 × 40: x u16, y u16, 종류. 30개만 쓰이고 나머지 0 | 확인됨[직접](값), 뜻은 확인됨[대조] |
D2.MML | 27,866 | 배경음 악보(FM 음원용) | 추정(이름) |
MONSTER.DAT의 처음 다섯 기록(한글판): (1771, 513, 6), (1905, 538, 9), (1953, 684, 5), (714, 484, 6), (1897, 1011, 4).
확인하지 못한 것
DATA1.LZW6·7·8·12·13번 엔트리의 용도.- 세이브 머리 15바이트, 칸 뒤쪽 767바이트 실행 중 상태의 배치.
- 기록 그룹 0F(8바이트 × 3)의 뜻.
KOEI.DAT,CHAR.LZW, 글꼴 파일의 정확한 형식.