# 시나리오: 바이트코드, 길드 의뢰·왕명, 작위, 주인공별 이야기와 엔딩

대항해시대 2의 이야기 진행은 `MAIN.EXE` 안의 작은 가상 기계(이하 VM)가 `SNR0.DAT`~`SNR6.DAT` 바이트코드를 실행해 처리합니다.
`SNR0`은 모든 주인공이 함께 쓰는 길드 의뢰와 왕명이고, `SNR1`~`SNR6`은 주인공 여섯 명의 이야기입니다.
표시 방법은 [index.md](index.md)의 신뢰도 표시를 따릅니다. 주소는 한글판 `MAIN.EXE` 파일 오프셋(`KO`)이고, `SNRn 0x1234`는 그 `.DAT` 파일 안의 오프셋입니다.

## 1. 파일 구성

**확인됨[직접]** (한글판 파일을 직접 해석)

| 파일 | 크기(한글판) | 내용 |
| --- | --: | --- |
| `SNR0.DAT` | 11,224 | 공통 시나리오 13개 섹션(대기 상태, 길드 의뢰 5종, 왕명 7종) |
| `SNR1.DAT`~`SNR6.DAT` | 3,934~15,413 | 주인공별 이야기. 1 조안, 2 카탈리나, 3 옷토, 4 에르네스트, 5 피에트로, 6 알 |
| `SNRn.MES` | 11,729~65,350 | 각 시나리오의 대사. 앞에 u32 빅엔디언 오프셋 표, 문자열은 CP949, NUL로 끝남 |
| `MESSAGE.DAT` | 45,384 | 공통 대사 1,179개. 앞에 u16 빅엔디언 오프셋 표 |
| `EVENT0.DAT`~`EVENT6.DAT` | 8,541~62,878 | 시나리오가 보여 주는 이벤트 그림(아래 9절) |

`SNRn.DAT` 구조:

- `+0x00` 문자열 `SNDT`, `+0x10`부터 u32 빅엔디언 섹션 오프셋 목록, `FFFFFFFF`로 끝.
- 섹션마다: u16 머리 길이, 그 뒤 "하위 섹션" 경로표 오프셋 목록(`FFFF`로 끝).
- 경로표: (경로 키 u16, 표 시작 기준 상대 목적지 u16) 쌍의 목록, `FFFF FFFF`로 끝.
- 게임은 지금 섹션·하위 섹션의 경로표에서 지금 상황에 맞는 키를 찾아, 그 목적지부터 명령을 실행합니다.

### 경로 키

키 = 선택 바이트 + 한정 바이트입니다. 한정 바이트 `0xFF`는 "아무거나"입니다. **확인됨[대조]** (경로 비교 루틴 `KO 0x380C1`·`KO 0x38202`가 영문판과 명령어 차이 0)

| 선택 바이트 | 뜻 | 한정 바이트 |
| --- | --- | --- |
| `0x00`~`0x63` | 그 번호의 항구(주인공 시나리오). `SNR0`은 `0x00`~`0x81`(보급항 포함 130곳) | 건물 번호 |
| `0xA3` | 아무 항구 | 건물 번호 |
| `0xA0` | 바다 위 | 이번 항해 일수 |
| `0xA1` | 해전 직전 | 상대 제독의 항해사 번호 |
| `0xA2` | 해전 직후 | 상대 제독의 항해사 번호 |

건물 번호: 0 시장, 1 주점, 2 조선소, 3 선착장(항구 사무소), 4 여관, 5 왕궁, 6 길드, 7 특수 건물(주인공 집 등), 8 은행, 9 도구점, 0x0A 교회, 0x0B 점술가, 0x15 국왕 알현.
예: `0x0007` = 리스본(0번 항)의 특수 건물(조안의 집), `0x0D08` = 베네치아 은행, `0xA306` = 아무 항구의 길드.

## 2. 해석기(VM) 위치

**확인됨[직접]**: 명령 분기표를 한글판에서 찾아 처리기 주소를 하나하나 맞췄습니다. 모든 명령의 처리기가 영문판과 같은 모양이고, `D9` 하나만 한글판에서 빠졌습니다(분기표 기본값으로 감).

| 역할 | 한글판 | 영문판 |
| --- | --- | --- |
| 명령 해석 반복문 | `KO 0x37F8B` | `EN 0x38F4F` |
| 섹션 불러오기 | `KO 0x37606` | `EN 0x38593` |
| 공통 시나리오 경로 비교 / 실행 | `KO 0x380C1` / `KO 0x38030` | `EN 0x39085` / `EN 0x38FF4` |
| 주인공 시나리오 경로 비교 | `KO 0x38202` | `EN 0x391C6` |
| 대입 / 산술 / 비교 명령군 | `KO 0x377B1` / `0x379B1` / `0x37AEB` | `EN 0x3873E` / `0x3893E` / `0x38A78` |
| 대사 문자열 펼치기(`$n` 이름, `$s` 성, `$dNN`·`$rNN` 변수) | `KO 0x373BE` | `EN 0x383A5` |
| 기록 그룹 주소 계산 | `KO 0x36A2E`(분기표 `0x36A54`) | `EN 0x37A24` |
| 시나리오 난수 | `KO 0x36F68` | `EN 0x37F4F` |

## 3. 명령어

명령 길이와 처리기 대응은 **확인됨[직접]**, 의미는 **확인됨[대조]** 입니다(영문판 연구의 해석, 처리기 코드가 같음).

### 대입·산술·조건 분기

- `0x00`~`0x3F` 대입: 비트 4~5 = 받는 쪽(0 변수, 1 변수가 가리키는 곳, 2 플래그), 비트 2~3 = 주는 쪽(0 변수, 1 가리키는 곳, 3 즉시값/시스템값), 비트 0~1 = 너비(1 바이트, 0 워드, 3 시스템값). 받는 쪽이 플래그가 아니고 즉시값 워드이면 4바이트, 나머지는 3바이트.
- `0x40`~`0x7F` 산술(3바이트): `op & 0x23`이 0 더하기, 1 빼기, 2 곱하기, 3 나누기, 0x20 OR, 0x21 AND, 0x22 오른쪽 시프트, 0x23 왼쪽 시프트.
- `0x80`~`0xBF` 조건 분기: 마지막 u16이 점프 목적지. `op & 3`이 0 같지 않음, 1 같음, 2 작음, 3 큼일 때 점프. `0xAC`/`0xAD`는 플래그가 켜짐/꺼짐이면 점프.

### 동작 명령 (`0xC0` 이상)

| 명령 | 길이 | 한글판 처리기 | 뜻 |
| --- | --: | --- | --- |
| `C0` | 2 | `0x37D2F` | 대사 창 위치 |
| `C3`/`C4`/`C5` | 1/1/2 | — | 최근 창 닫기 / 모두 닫기 / 창 다시 배치 |
| `C7` | 1 | — | 보여 주고 키 대기 |
| `C8` | 3 | `0x37D5F` | 대사 출력 |
| `C9` | 4 | `0x37D73` | 강제 선택지 |
| `CA` | 2 | — | 음악 |
| `CB` | 6 | — | 이벤트 그림(`EVENTn.DAT` 레코드, x·y) |
| `CC`/`CD` | 3/2 | `0x37DC5`/`0x37DCF` | 인물 얼굴 / 변수에 든 인물 |
| `D0`/`DC` | 5 | `0x37DE9` | 기록 참조(그룹, 번호, 필드) |
| `D1` | 2 | `0x37E3D` | 함대 진로 다시 계산 |
| `D4` | 3 | `0x37E48` | 문자열 불러오기 |
| `D9` | 3 | 없음 | 영문판의 길드·왕명 형식 대사. 한글판에는 처리기가 없음 |
| `E2`/`E3` | 3 | `0x37E53`/— | 교역품 싣기 / 거둬 가기 |
| `E4`/`E6`/`E7` | 2 | `0x37E81`/`0x37E8C`/`0x37E97` | 소지금 설정 / 더하기 / 빼기 |
| `E8` | 2 | `0x37EA2` | 결투 |
| `E9` | 2 | `0x37EAD` | 예/아니오 |
| `EA` | 2 | `0x37EB8` | 금괴 수 = 소지금 ÷ 10,000 |
| `EB` | 4 | `0x37EC3` | 난수 |
| `EC`/`ED` | 2 | `0x37EDA`/`0x37EE5` | 난수 상태 되돌리기 / 저장 |
| `EE` | 2 | `0x37EF0` | 빈 짐칸 |
| `F0`/`F1` | 1 | `0x37EFB`/`0x37F01` | 하위 섹션 진행 / 섹션 진행 |
| `F2` | 1 | `0x37D2A` | 정지(이번 실행 끝) |
| `F4` | 2 | `0x37F07` | 엔딩. 번호 = 주인공 0~5, `END.EXE`로 나감 |
| `F8` | 1 | `0x37F1F` | 건물에서 내보내기 / 예정된 해전 취소 |
| `F9` | 3 | `0x37F28` | 건조 예정 배 만들기(배 종류) |
| `FA` | 4 | `0x37F3D` | 배 취역 |
| `FB` | 2 | `0x37F50` | 동료 합류 |
| `FC` | 3 | `0x37F5B` | 의미 미상(영문판 연구도 미상) |
| `FE` | 3 | `0x37F72` | 점프 |
| `FF` | 1 | `0x37F7F` | 아무것도 안 함 |

### 기록 그룹 (`D0`/`DC`가 가리키는 세이브 자료)

**확인됨[직접]** (`KO 0x36A2E` 분기표의 주소·크기를 직접 읽음). 세이브 슬롯 위치 = `DS − 0xC30`입니다. 전체 배치는 [data-formats.md](data-formats.md)에 있습니다.

| 그룹 | 내용 | 기록 크기 | DS 주소 |
| --- | --- | --: | --- |
| 00 | 국가 기록 7개 | 32 | `0x1106` |
| 01 | 주인공 명성·우호도 6명 | 14 | `0x11E6` |
| 02 | 소지금 | 4 | `0x123A` |
| 03 | 항해사 120명 | 50 | `0x1242` |
| 04 | 수집가·지도 제작자 | 21 | `0x29B2` |
| 05 | 주점 아가씨 | 17 | `0x2B56` |
| 06 | 이번 항해 상태 | — | `0x2D54` |
| 07 | 함대의 배 칸(지금 함대 / 번호 10 이상은 따로) | 9 | `[0xC6DA]+0x2B` / `0x5666` |
| 08 | 함대 70개 | 133 (0x85) | `0x2DB2` |
| 09 | 배 보급 기록 | 30 | `0x5210` |
| 0A | 배 개체 | 25 | `0x57CE` |
| 0B | 배 종류 능력 | 12 | `0x5E28` |
| 0C | 항구 표시 기록 | 20 | `0x5F54` |
| 0D | 항구 메타 기록 | 37 | `0x697C` |
| 0E | 시장 13개 | 128 | `0x77F0` |
| 0F | 미상 | 8 | `0x7E70` |
| 10 | 발견물 98곳 | 7 | `0x7E88` |
| 11 | 도구 100개 | 26 | `0x8144` |
| 12 | 발견물 설명(`COLONY.DAT`) | 218 | 파일 |
| 13 | 교역품 이름 포인터 | 2 | `0xC0B6` |

## 4. 시나리오 난수

**확인됨[대조]** (`KO 0x36F68`, 씨앗 함수 `KO 0x38165`가 영문판과 같은 구조)

```text
씨앗  = (연 바이트 × 월 바이트 × (항해 레벨 + 항해 경험) + 틱 + 일 바이트) << 8
상태  = 상태 × 0x5D588B65 + 1        (32비트)
값    = (상태 >> 8) & 0x7FFF
결과  = 값 mod n                     (EB 명령)
```

`ED`로 상태를 변수에 저장하고 `EC`로 되돌릴 수 있습니다. 길드는 의뢰 세 줄마다 상태를 저장해 두므로, 같은 줄을 다시 고르면 같은 의뢰가 나옵니다.
일반 난수(`KO 0xA186`)와는 별개입니다([misc.md](misc.md)).

## 5. 작위

### 작위 이름

**확인됨[직접]** (`DATA1.LZW` 16번·17번 엔트리, 각 81바이트 = 9칸 × 9바이트, CP949)

| 작위 번호 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 16번 엔트리 | 기사 | 준훈작 | 훈작 | 준남작 | 남작 | 자작 | 백작 | 후작 | 공작 |
| 17번 엔트리 | 사족 | 감찰관 | 군수 | 지사 | 영주 | 대영주 | 군후 | 재상 | 대재상 |

0은 작위 없음입니다. 17번 엔트리는 영문판 연구에 따르면 오스만(알) 쪽 이름입니다(**외부자료**).
작위 번호는 명성 기록 `+0x0D` 바이트입니다(**확인됨[직접]**: 아래 점술가 코드가 이 바이트로 표를 찾음).

### 승급 조건: 왕명 자격

**확인됨[직접]** (`SNR0 0x0066`~`0x00E1`, 한글판 바이트코드)

길드·왕궁에 들어갈 때 공통 시나리오가 다음을 계산해 플래그 16(왕명 자격)을 켭니다.

```text
최고 명성 = max(교역 명성, 해적 명성, 모험 명성)   (같으면 모험 > 해적 > 교역 순으로 뒤의 것)
필요 명성 = 500 × (작위 + 1)²
자격      = 작위 ≤ 8  그리고  최고 명성 ≥ 필요 명성  그리고  소속 ≠ 해적(국적 하위 3비트 6)
```

| 지금 작위 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| --- | --: | --: | --: | --: | --: | --: | --: | --: | --: |
| 왕명 자격에 필요한 최고 명성 | 500 | 2,000 | 4,500 | 8,000 | 12,500 | 18,000 | 24,500 | 32,000 | 40,500 |

- 자격이 생기면 고국 왕궁에서 왕명을 받고, 그 왕명을 끝내면 작위가 1 오릅니다(**확인됨[대조]**: `SNR0` 섹션 6~12의 완료 블록. 영문판 연구가 해석한 바이트코드와 한글판이 같음).
- 왕명을 거절하거나 중도 포기하면 명성 세 가지가 모두 절반이 됩니다(**확인됨[대조]**).
- 어느 명성으로 자격을 얻었는지(위 "최고 명성"의 종류)가 왕명 종류 선택에 쓰입니다(`SNR0 0x00E8`~`0x018D`, 세부 분기는 **확인됨[대조]**).

### 점술가가 말하는 "다음 작위까지 필요한 명성"

**확인됨[직접]** (`KO 0x31FFD`~`0x32049`, 표 `DS:0xB8AE` = 파일 `0x4855E`)

점술가는 세 명성 중 가장 큰 값을 `표[작위 + 1]`과 비교해, 모자라면 그 차이를 공통 대사 547 "마지막으로, 당신이 한 단계 위의 작위를 얻기 위해선, %d 정도의 명성이 필요하겠지요."로 알려 줍니다. 해적 소속이면 이 줄을 건너뜁니다.

표(u16 × 10): 0, 500, 2,000, 4,500, 8,000, 12,500, 18,000, 24,500, 32,000, 40,000.
마지막 값만 공식(500 × 9² = 40,500)과 500 다릅니다. 그래서 후작(8)의 최고 명성이 40,000~40,499이면 점술가는 더 필요 없다고 하지만 왕명 자격은 아직 없습니다(두 코드를 직접 읽은 결과이며, 게임에서 시험하지는 않았습니다).

## 6. 길드 의뢰 (`SNR0` 섹션 0~5)

| 섹션 | 의뢰 | 한글판 위치 | 실행되는 곳 |
| --: | --- | --- | --- |
| 0 | 대기 상태, 의뢰·왕명 고르기 | `0x0048`~`0x09B8` | 길드, 왕궁, 아무 건물 |
| 1 | 화물 운송 | `0x09B8`~`0x0C50` | 시장 |
| 2 | 물품 구입 | `0x0C50`~`0x0E61` | 시장 |
| 3 | 편지 전달 | `0x0E61`~`0x0FC3` | 길드 |
| 4 | 해적 토벌 | `0x0FC3`~`0x1140` | 길드, 해전 직전·직후 |
| 5 | 빚 받아 오기 | `0x1140`~`0x13F5` | 베네치아 은행 |

**확인됨[직접]** (`SNR0 0x0195`~`0x01EB`):

- 길드에 들어가면 의뢰 세 줄을 준비합니다. 항구 번호 41 이하(유럽)이면 줄마다 `random(5)`로 0 화물 운송, 1 물품 구입, 2 편지 전달, 3 해적 토벌, 4 빚 받아 오기 중 하나(중복 가능). 항구 번호 42 이상이면 세 줄 모두 편지 전달.
- 줄마다 난수 상태를 변수 3·4·5에 저장합니다(`ED 03`/`ED 04`/`ED 05`).
- 작위 단계 = `min(작위, 6) ÷ 3`: 0 작위 없음~훈작, 1 준남작~자작, 2 백작 이상. 이 단계가 의뢰 거리와 보수 크기를 정합니다.
- 왕명 자격(플래그 16)이 있으면 의뢰 줄을 새로 만들지 않고 왕명 쪽으로 갑니다.

**확인됨[대조]** (영문판 연구, 바이트코드 논리가 한글판과 같음):

- 목적 항구는 의뢰 받은 항구 p에서 두 번 건너뜁니다. A = p ± d1, B = A ± d2(방향은 `random(2)`, 범위 끝에서는 강제).

  | 작위 단계 | d1 | d2 |
  | --- | --- | --- |
  | 0 | 1~5 | 1~20 |
  | 1 | 6~10 | 16~35 |
  | 2 | 16~20 | 31~50 |

- 기한은 "날짜 일련번호" `(1501년부터 지난 해 × 12 + 월 + 허용 개월) × 30 + 일`로 저장하고, `기한 < 오늘`일 때만 늦은 것입니다.
- 명성 벌칙: 진행 중 포기 → `floor(floor(명성/10) × 9/10) × 10`, 기한 넘김 → `× 8/10`, 빚 받아 오기에서 돈을 넘기지 않음 → `× 5/10`.
- 완료 보상은 `min(명성 + 보상, 50,000)`.

## 7. 왕명 (`SNR0` 섹션 6~12)

섹션 경로는 **확인됨[직접]**, 내용 해석은 **확인됨[대조]** 입니다.

| 섹션 | 왕명 | 한글판 위치 |
| --: | --- | --- |
| 6 | 교역 시험: 지정 교역품 바치기(작위 단계별 목표 1,000 / 5,000 / 20,000을 기준가로 나눈 수량, 최대 250) | `0x13F5`~`0x172C` |
| 7 | 다른 나라 국왕에게 문서 전달(성공 시 두 나라 관계 +5) | `0x172C`~`0x1B4E` |
| 8 | 조약 교섭(관계 +10) | `0x1B4E`~`0x1F70` |
| 9 | 동맹항 늘리기 | `0x1F70`~`0x2289` |
| 10 | 국왕을 위해 발견 | `0x2289`~`0x2549` |
| 11 | 특별 탐색(보물) | `0x2549`~`0x2855` |
| 12 | 적국 함대·해적 격파 | `0x2855`~`0x2BD8` |

- 모든 왕명은 고국 왕궁(`0xA305`)에서 시작해 알현(`0xA315`)에서 진행·보고합니다. 기한은 없습니다.
- 완료하면 작위 +1, 섹션 끝의 `F1`로 공통 시나리오가 대기 상태(섹션 0)로 돌아가고 플래그 16~18이 지워집니다.
- 모국에서 추방되거나 작위를 박탈당하면 공통 시나리오도 대기 상태로 초기화됩니다([relations.md](relations.md)).

## 8. 주인공별 이야기

아래 표의 명성 조건·보상·동료·배·엔딩은 **확인됨[직접]** 입니다(한글판 `SNRn.DAT`를 직접 디스어셈블해 뽑음).
각 사건의 줄거리와 부가 조건(소속 검사 등)은 영문판 연구의 해석이며 **확인됨[대조]** 입니다(한글판 바이트코드 논리가 영문판과 같음을 비교, 차이는 10절).
한글판은 인물 이름이 영문판과 다릅니다(조안 페레로 = 영문 João Franco, 옷토 스피노라 = Otto Baynes, 에르네스트 로페스 = Ernst von Bohr, 알 베자스 = Ali Vezas).

명성 "조건 X"는 그 명성이 X 이상이어야 다음 사건이 열린다는 뜻입니다(같은 값이면 통과). 이미 명성이 높아도 지금 섹션의 사건을 건너뛰지는 못합니다.

### 조안 페레로 (`SNR1`, 모험 명성)

| 섹션 | 조건 | 일어나는 곳 | 내용(한글판 위치) |
| --: | --- | --- | --- |
| 0 | — | 리스본 집(`0x0007`)·주점·교회, 항해 3일째 | 배 종류 5 카라벨 라티나 건조 예정(`0x025C`), 동료 69 로코 알렘켈(`0x028C`), 교회에서 동료 70 엔리코 마리오네(`0x0554`), 항해 3일째 밀항자 동료 71 도밍고 마나나(`0x08F8`) |
| 1 | 모험 2,000 | 아무 항구의 선착장(`0x099F`) | 결투 상대 60 안토니오 칸(`0x0C5E`, `0x0FB4`), 리스본 집에서 해적 명성 +1,000(상한 50,000, `0x0ECE`) |
| 2 | 모험 8,000 | 아무 건물(`0x136A`) | 섹션 끝은 2번 항(이스탄불) 여관(`0x1C9C`) |
| 3 | 모험 16,000 | 항해 5일째(`0x1D79`) 후 아무 건물(`0x1DFE`) | 74번 항 맛사와 특수 건물에서 모험 명성 +5,000(`0x2AB3`) |
| 4 | 모험 30,000 | 아무 항구의 주점(`0x2C32`) | 99번 항 나가사키 선착장에서 모험 명성 +1,000(`0x2DFF`) |
| 5 | 모험 40,000 | 아무 건물(`0x2EC7`) | 주점에서 결투 상대 60(`0x3270`), 해전 직전 사건 둘, 리스본 집에서 **엔딩 0**(`0x3C2C`) |

### 카탈리나 에란초 (`SNR2`, 해적 명성)

| 섹션 | 조건 | 내용(한글판 위치) |
| --: | --- | --- |
| 0 | — | 세빌리아(1번 항) 선착장에서 동료 72 프랑코 사누드, 배 종류 10 갤리온(`0x0692`·`0x069C`) |
| 1 | 해적 1 | 해전 직후 동료 73 안드레아 기지(`0x0ABD`) |
| 2 | 해적 1,500, 주점에서 2,000 | `0x0B6D`, `0x0C7A` |
| 3 | 해적 2,000 | `0x0CDD`, 조선소·선착장에서 섹션 끝 |
| 4 | 해적 8,000 | `0x10E4` |
| 5 | — | 상대 60(안토니오 칸)과의 해전 직후 섹션 끝(`0x1DBA`) |
| 6 | 해적 15,000 | `0x1E16`, 맛사와 특수 건물에서 섹션 끝 |
| 7 | 해적 30,000(항해 5일째) | `0x24BE`, 주점 결투 상대 60(`0x2910`), 해전 직후 **엔딩 1**(`0x3085`) |

영문판 연구에 따르면 주점의 2,000 비교 하나를 빼고 모두 해적 소속(국적 하위 4비트 6)도 요구합니다(**확인됨[대조]**).

### 옷토 스피노라 (`SNR3`, 해적 명성)

| 섹션 | 조건 | 내용(한글판 위치) |
| --: | --- | --- |
| 0 | — | 런던(29번 항) 왕궁·주점. 주점에서 결투 상대 75 마슈 로이(`0x0236`) 후 동료 75(`0x02CF`), 조선소에서 배 종류 5(`0x039C`), 세빌리아 선착장에서 배 종류 10 갤리온(`0x07A6`) |
| 1 | — | 해전 직후 해적 명성 +500(`0x0A15`) |
| 2 | 해적 5,000(주점) | `0x0A52`, 주점에서 +500 |
| 3 | 런던 주점에서 15,000, 다른 곳 20,000 | `0x0FE2`·`0x1216`, 금괴 확인과 소지금 차감(`0x109A`~`0x11C1`) |
| 4 | 해적 30,000(선착장) | 해전 직후 +1,000 두 번(`0x15B4`, `0x16BF`) |
| 5 | 해적 30,000(선착장) | 런던 왕궁에서 **엔딩 2**(`0x2033`) |

영문판 연구에 따르면 섹션 2 이후 비교는 잉글랜드 소속(국적 하위 4비트 3)도 요구합니다(**확인됨[대조]**).

### 에르네스트 로페스 (`SNR4`, 모험 명성)

| 섹션 | 조건 | 내용(한글판 위치) |
| --: | --- | --- |
| 0 | — | 암스테르담(33번 항) 특수 건물에서 소지금 설정, 동료 77 로이드 스탓텐, 배 종류 5(`0x0102`~`0x018C`) |
| 1 | 모험 1,000(암스테르담 선착장) | `0x0335` |
| 2 | 모험 5,000(아무 선착장) | `0x05A9` |
| 3 | 모험 20,000(아무 선착장) | `0x0731` |
| 4 | 모험 40,000(아무 선착장) | `0x090E`, 97번 항 장안의 특수 건물에서 **엔딩 3**(`0x0F57`) |

해전·결투·항해 일수 사건이 하나도 없습니다(한글판에서도 `E8` 명령과 `A0`·`A1`·`A2` 경로가 없음, **확인됨[직접]**).

### 피에트로 콘티 (`SNR5`, 모험 명성)

| 섹션 | 조건 | 내용(한글판 위치) |
| --: | --- | --- |
| 0 | — | 제노바(8번 항) 주점에서 동료 76 카미로 스테파노, 배 종류 5(`0x00F8`·`0x0102`), 리스본 특수 건물에서 소지금 설정 |
| 1 | 금괴(소지금 ÷ 10,000) 확인 | 아무 주점에서 금괴 읽기와 소지금 차감(`0x050E`~`0x05F7`, 영문 연구: 메달의 지도 구입), 선착장에서 모험 +1,000(`0x0790`) |
| 2 | 모험 10,000(리스본 특수 건물) | 맛사와 주점에서 모험 +5,000(`0x0D73`) |
| 3 | 모험 40,000(아무 선착장) | 리스본 특수 건물에서 **엔딩 4**(`0x14F6`) |

에르네스트처럼 결투·해전·항해 일수 사건이 없습니다(**확인됨[직접]**).

### 알 베자스 (`SNR6`, 교역 명성)

| 섹션 | 조건 | 내용(한글판 위치) |
| --: | --- | --- |
| 0 | — | 이스탄불(2번 항) 조선소에서 동료 78 자한 사림, 배 종류 5(`0x01EE`·`0x01F8`). 주점·선착장·은행·여관에서 돈을 받음 |
| 1 | 네 곳에 빚 갚기 | 이스탄불 주점·선착장·은행·조선소에서 금괴 확인 후 차감, 갚을 때마다 교역 명성 +500(`0x0804`, `0x08F8`, `0x09EE`, `0x0B10`, `0x0C28`), 알현에서 섹션 끝(`0x0F30`) |
| 2 | 금괴 확인(영문 연구: 100개 = 1,000,000) | 76번 항 바스라 주점에서 교역 +1,000(`0x187D`) |
| 3 | 영문 연구: 오스만 지배 항구 30곳 | 베네치아(13번) 은행에서 차감 후 교역 +1,000(`0x2075`), 98번 항 사카이 주점에서 금 지급, 교역 명성을 50,000으로 설정(`0x21FE`) |
| 4 | — | 이스탄불 알현에서 금 지급과 교역 +1,000(`0x242D`) |
| 5 | 교역 40,000(주점·선착장) | `0x2622`·`0x269D`, 이스탄불 주점에서 **엔딩 5**(`0x2D2A`) |

## 9. 엔딩과 `EVENTn.DAT`

- 엔딩은 `F4 n` 하나뿐이며 n = 주인공 번호 0~5입니다. 한글판 여섯 시나리오의 `F4`는 위 표의 여섯 곳뿐입니다(**확인됨[직접]**). 처리기(`KO 0x37F07`)는 화면을 어둡게 하고 `END.EXE`로 넘어가므로 뒤의 명령은 실행되지 않습니다(**확인됨[대조]**).
- `EVENTn.DAT`는 이벤트 그림 묶음입니다. 앞에 u32 빅엔디언 오프셋 표가 있고, 레코드는 u16 너비·높이로 시작하는 `GRAPH` 형식 그림입니다. 레코드 수: `EVENT0` 1, `EVENT1` 5, `EVENT2` 6, `EVENT3` 5, `EVENT4` 5, `EVENT5` 6, `EVENT6` 4. 모두 192 × 144입니다(**확인됨[직접]**). 시나리오의 `CB` 명령이 지금 주인공 번호의 파일에서 레코드를 골라 그립니다(**확인됨[대조]**).

## 10. 한글판과 영문판의 시나리오 차이

**확인됨[직접]** (대사·창 배치 명령을 빼고 논리 명령만 비교)

- 차이 323곳 거의 모두가 기록 필드 위치 이동입니다(항해사 기록 50바이트, 수집가 기록 21바이트 등 구조체 크기가 다름).
- `SNR0` 섹션 1~5와 `SNR3` 섹션 5: 영문판의 변수 `0x0C`(성별에 따른 대명사) 분기가 한글판에는 없습니다.
- `SNR0` 섹션 9: 영문판 `0x23F6`의 블록 하나(`DC 0A 02 00 07 … F1`)가 한글판에 없습니다.
- `SNR1` 섹션 1·4: 동료를 내보낼 때 함대·항구 바이트에 영문판은 `0xFE`, 한글판은 `0xFF`를 씁니다.
- `SNR5` 섹션 0: 영문판에 `F2` 두 개가 더 있고 경로 키가 일부 다릅니다.
- `SNR6` 섹션 5: 영문판의 플래그 검사(`AC 00`/`AD 00`)가 한글판에 없습니다.
- `D9`(형식 대사) 명령은 한글판 바이트코드에 나오지 않고 해석기에도 없습니다.

## 확인하지 못한 것

- `FC` 명령의 의미, 기록 그룹 0F(8바이트)의 내용.
- 왕명 종류 선택(`SNR0 0x00E8`~`0x018D`)의 날짜 의존성: 바이트코드는 영문판과 같지만 한글판에서 따로 풀어 쓰지 않았습니다.
- 줄거리 해석(누가 무엇을 말하는지)은 영문판 연구를 따랐고, 한글 대사 전문을 사건별로 대조하지는 않았습니다.
- 게임 실행으로 확인하지 않았습니다.
