대항해시대 2 백과 (DOS 한글판)

| 규칙 목록 | 원문 Markdown |

NPC 함대와 인물

주소는 KO 한글판 파일 오프셋 / EN 영문판 파일 오프셋. [대조] = 한글판 루틴이 영문판 분석 루틴과 명령·상수 단위로 일치(diff 0 또는 구조체 오프셋 차이만).

1. 함대 구성 (외부자료 + 확인됨[대조])

함대 번호는 10개씩 묶입니다. 나라 순서: 포르투갈 0, 스페인 10, 투르크 20, 영국 30, 이탈리아 40, 네덜란드 50, 해적 60.

위치나라 함대해적 함대
0그 나라 주인공–
1–4상선단버커니어
5–6호위대코르세어
7–9원정대사략선

함대 기록 0x85바이트. 영문판은 세이브 슬롯 +0x1DE0, 한글판은 세이브 슬롯 +0x2182(DS:0x2DB2) + 번호 × 0x85, 70개입니다(크기·위치 확인됨[직접]: 기록 그룹 08, KO 0x36AF7의 mov al, 0x85 / add si, 0x2DB2). 아래 필드 배치는 루틴들이 diff 0으로 일치하므로 같은 배치로 판단했습니다(확인됨[대조]):

오프셋내용
+0x00/+0x02현재 x, y
+0x04/+0x06목표 x, y
+0x1B목표(objective)
+0x1C목표 인자(항구 또는 인물 번호)
+0x1D보유 아이템(0xFF 없음)
+0x21실은 교역품(0xFF 없음)
+0x24금고(×100 금)
+0x26모항
+0x27도착 대기 일수
+0x28전력 = floor((내구 합 + 4) / 5)
+0x29플래그(0x01 활동, 0x10 정박, 0x40 시나리오 함대)

2. 목표 (외부자료)

값의미인자
0귀항모항
1투자항구
2교역항구
3매복항구
4상선 습격인물
5, 6함대 추적인물
7추적(교전 뒤 귀항하지 않음, 시나리오용)인물
8함대 호위인물
9항구 경비항구
10시나리오 추적인물

3. 국가 전략과 목표 선택 (확인됨[대조])

3.1 매월 국가 전략 (KO 0x1CB66 / EN 0x1CEFB; 상수 90, 120 확인)

나라마다 공격 대상국 T(국가 기록 +0x02, 7이면 주인공 소속국)와 공격성(+0x09):

r = random(120)   T의 길드 이익 ≥ 자기 길드 이익
r = random(90)    그 외
공격성 > r 이면  모드 = (T의 이익 > 자기 이익) ? 4 : 5
아니면           모드 = random(3)      (0–2)
해적: 대상이 주인공 나라(7)이면 모드 7, 아니면 8 (무작위 없음)

3.2 목표 표 (KO 0x387D6 / EN 0x397FF, 표 EN 파일 0x47818)

함대가 모항에 돌아와 대기를 마치면 모드와 위치로 목표를 고릅니다.

모드상선(1–4)호위(5–6)원정(7–9)
0, 11 투자9 항구 경비8 함대 호위
22 교역98
316 추적6
4–615 추적6
7696
864 상선 습격6
  • 모항이 수도가 아니면 항상 목표 0(귀항)을 받습니다. 그래서 수도(알제)가 모항이 아닌 해적 7개 함대는 영원히 모항 근처를 맴돌고, 실제로 사냥하는 것은 코르세어 65–66뿐입니다(외부자료의 분석).
  • 인자 선택: KO 0x386B9 / EN 0x396DB.

3.3 출항 제한 (확인됨[대조], KO 0x383FC / EN 0x3941E)

같은 나라에서 바다에 나가 있는(정박 비트 0x10이 없는) 같은 종류 함대가 상선 2개 이상, 호위·원정 1개 이상이면 출항하지 못하고 목표 0, 5일 대기. 시나리오 함대(0x40)는 예외. 패배한 함대도 재편성 전까지는 "바다에 있음"으로 셉니다.

3.4 도착 대기

  • 항구 도착 시 8 + random(8)일(KO 0x1EFA5 / EN 0x1F440), 재편성 시 5 + random(10)일, 출항 제한 시 5일.
  • 함대 t는 하루 중 틱 t에 한 번 갱신됩니다(KO 0x2008F / EN 0x2052F).

4. 투자와 교역 (확인됨[대조]; 시장 쪽 효과는 trade.md)

상선단만 하며, 자기 나라 수도에서는 하지 않습니다.

  • 투자(KO 0x38968 / EN 0x39991), 금고 2 이상일 때:
    1. floor(금고 / 2) × 100 금을 산업 > 경제이면 시장 투자에, 아니면 조선소 투자에 넣습니다(50,000 상한, 차면 다른 쪽).
    2. 금고를 반으로.
    3. 그 나라 지지도 += min(100 − 지지도, floor(6 × 금고 / 10)), 같은 만큼 다른 나라에서 1씩 돌아가며 뺍니다.
  • 교역(KO 0x38AE4 / EN 0x39B0D): 교역품 10–25 중 무작위 하나를 현재 시세로 금고 한도(최대 1,000개)만큼 사고, 그 품목 가격률 +3–5(최대 100).
  • 귀항(KO 0x3885D / EN 0x39886): 짐이 있으면 모항의 모든 가격률 −random(3), 그 품목은 2 더(0 미만 안 됨). 배를 전부 수리하고, 금고 = floor(길드 이익 / 10) + 1 + random(3), 짐 비움, 아이템이 없으면 1/2로 장신구(50 + random(20)).

5. 추적과 교전 (확인됨[대조])

5.1 접촉 (KO 0x1F854 / EN 0x1FCEF)

목표 4–7 함대와 표적이 같은 24×24 타일 구역에 있으면 접촉. 목표 4는 그 구역 안의 활동 중인 0–59번 함대 가운데 전력이 자기보다 낮은 함대를 찾습니다.

5.2 추적 갱신 (KO 0x1F280 / EN 0x1F71B)

추적 포기 확률 1/15 또는 1/30(상황별), 자기 나라가 공격받으면 호위·원정·해적 경비 함대가 12틱 단위로 반응. 시나리오 함대는 이 단계를 건너뜁니다. (세부 분기는 외부자료)

5.3 NPC끼리의 전투 (KO 0x1F583 / EN 0x1FA1E; 상수 150 확인)

화면 없이 처리됩니다.

  1. 낮(틱 18–53, 06:00–18:00)에만.
  2. 화면 밖이면 random(150) < 표적 선장 항해술일 때 표적이 도망.
  3. 목표 7이 아니면 공격 측은 교전 후 귀항(한 출항에 한 번).
  4. 서로 floor(전력 / 10)의 내구 피해를 마지막 칸 배부터 줍니다.
  5. 침몰 한 척마다 짐의 1/5(최대 1,000)과 금고의 1/5(최대 60,000)을 빼앗습니다.
  6. 공격국 → 표적국 관계 −2 또는 −3.

5.4 플레이어 습격

  • 표적이 주인공이면 해전 화면으로. 단 시나리오 함대가 아니면 주인공 작위가 0(무작위)일 때 귀항합니다. 그래서 코르세어는 작위가 있는 주인공만 습격합니다(EN 0x1FA87, 외부자료 + 대조).
  • 습격은 6:00–17:40에만.
  • 전투 뒤 살아남은 공격 측은 목표 7이 아니면 random(3) = 0일 때 귀항.

6. NPC 함대 이동 (외부자료, 루틴 일부 대조)

  • 세계 항로 그래프: DATA1.LZW 4번(16바이트 × 768, 사용 622개), 5번(노드 수). 가까운 노드로 간 뒤 그래프를 따라갑니다.
  • 화면 안 속도: 플레이어 공식(navigation.md 3.2)과 같지만 선원·적재 계수가 없고, 해류는 ±45° 안이면 더하고 135° 이상 역류면 뺍니다.
  • 화면 밖: 하루 한 번 경유점으로 바로 점프.

7. 함대 재편성 (확인됨[대조])

매월(misc.md의 월간 순서) 패배해 비활성인 함대만 채웁니다.

  • 배 보충(KO 0x1D0C3·0x1D1B7·0x1D2AC / EN 0x1D455·0x1D549·0x1D63E): 길드 이익 G의 등급 0(<500), 1(500–999), 2(≥1000)마다 3가지 선택지 중 random(3). 보충 한도: 상선·호위는 floor(G / 50) + 5척을 나라 전체가 나눠 쓰고, 원정은 floor(G / 75) + 5. 대포는 상선 4 + random(3)(컬버린·데미컬버린·세이커), 그 외 1 + random(3).
  • 새 지휘관(KO 0x1D762·0x1D608 / EN 0x1DAF4·0x1D99A): 활동 배가 4 + random(2)척 이상이면 동전 던지기로 기존 인물 또는 새 인물을 지휘관으로. 해적 지휘관은 성향 비트 & 3 ≥ 2인 인물만.
  • 재출항(KO 0x1D556 / EN 0x1D8E8): 수도에서, 금고 floor(G / 10) + 1 + random(3), 대기 5 + random(10), 플래그 0x31.

7.1 새 일반 인물 (확인됨[대조], KO 0x1D38B / EN 0x1D71D)

항목값
이름NAME.TBL의 그 나라 16개에서 이름·성 각각 random(16), 중복이면 다시
나이20 + random(16)
8개 능력치각 60 + random(35)
항해·전투 레벨min(100, max(8 + random(5), 이전 + 2 + random(4)))
기능random(16) → 교섭·회계·포술·측량 각 1/2, 천측(0x10)은 주어지지 않음 (한글판 +0x30)
성향random(16) × 16 + 호출자 하위 비트

매월 빈 인물 기록은 1/3 확률로 새 인물이 되고(나라 random(6), 항구 random(42)), 실업 인물은 1/3 확률로 random(5) − 2만큼 항구 번호를 옮깁니다(비트 0x40이면 고정). (KO 0x1D8D2 / EN 0x1DC64)

7.2 라이벌 주인공 (확인됨[대조], KO 0x1DA3C·0x1D97B·0x1DADF / EN 0x1DDD0·0x1DD0F·0x1DE71)

  • 매월, 현재 주인공이 아닌 주인공 0–5와 인물 60: 항해 레벨이 플레이어보다 낮으면 플레이어 + 1 + random(2)로 올리고, 오른 레벨마다 통솔 +random(3), 항해술·지식·직감 각 +random(5). 전투 레벨이 낮으면 random(2) + trunc(차이 / 2) + 1 오르고, 레벨마다 통솔 +random(3), 용기·검술 각 +random(5). 상한 100.
  • 영문판 분석: 인물 60 차례에서는 포인터가 이미 넘어가 있어 레벨은 인물 6의 것이 바뀝니다(버그). 한글판 루틴도 명령 단위로 같으므로 같은 버그가 있을 것으로 봅니다(추정).
  • 라이벌 함대는 매월 배 한 척을 얻습니다. 이미 플레이어보다 강하면 1/3 확률로만.

8. 관계(외교) (확인됨[대조] 루틴, 수치는 외부자료)

매월 관계표 갱신(KO 0x1CFD1·0x1CDAD·0x1CEB4 / EN 0x1D363·0x1D13F·0x1D246), 해전 승리 시 상대국과의 관계 하락·개인 우호도 변화(KO 0x15A93 / EN 0x15DE5). 세부 수치는 연구 자료 friendship.md에 있으며 이 문서에서 재검증하지 않았습니다.

확인하지 못한 것

  • 추적 포기·반응 분기의 정확한 조건, 매복(목표 3)의 실제 동작.
  • 국가 공격성 값(+0x09)과 대상국(+0x02)이 처음에 어떻게 정해지는지.
  • 관계·우호도 월간 수치표는 relations.md로 옮겼습니다.

| 규칙 목록 | 원문 Markdown |