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

| 규칙 목록 | 원문 Markdown |

국가 관계와 우호도: 저장 위치, 처음 값, 월간 변화, 해전 결과, 추방

나라끼리의 관계(외교)와 주인공에 대한 각 나라의 우호도입니다. 표시 방법은 index.md를 따릅니다.
나라 번호: 0 포르투갈, 1 에스파냐, 2 오스만 투르크, 3 잉글랜드, 4 이탈리아, 5 네덜란드, 6 해적.

1. 저장 위치

확인됨[직접] (기록 그룹 00·01, KO 0x36A2E)

자료위치크기
국가 기록 7개세이브 슬롯 0x04D6 (DS:0x1106)32바이트
주인공 명성·우호도 6명세이브 슬롯 0x05B6 (DS:0x11E6)14바이트

국가 기록(32바이트). 필드 뜻은 확인됨[대조], 처음 값은 확인됨[직접](DATA1.LZW 15번 엔트리를 직접 읽음):

오프셋내용
+0x00길드 이익(u16)
+0x02노리는 나라(7 = 플레이어)
+0x03전략 모드
+0x04상선대 목적 항구(0xFF 없음)
+0x05~+0x08왕실 원조(금 천 단위, 미사용, 배 종류, 배 수)
+0x09공격성
+0x0A수도
+0x0B~+0x11다른 나라 7곳에 대한 관계(저장값 − 30 = 표시값)
+0x12~+0x18상태: 동맹 0x20, 봉쇄 0x10, 하위 4비트는 월간 값

주인공 기록(14바이트, 확인됨[직접]):

오프셋내용
+0x00교역 명성(u16)
+0x02해적 명성(u16)
+0x04모험 명성(u16)
+0x06~+0x0C나라 7곳의 우호도(저장값 − 100 = 표시값)
+0x0D작위(0 없음 ~ 9)

명성 세 위치는 시나리오가 읽는 필드로, 작위는 점술가 코드가 읽는 필드로 직접 확인했습니다(scenario.md). 우호도의 −100 치우침은 확인됨[대조]입니다.

2. 처음 값 (새 게임 자료)

확인됨[직접] (DATA1.LZW 15번 엔트리 0x04D6부터)

나라공격성수도(항구 번호)노리는 나라전략 모드상선대 목적 항구
포르투갈600 리스본2017
에스파냐701 세빌리아613
오스만802 이스탄불4261
잉글랜드9029 런던1552
이탈리아508 제노바2027
네덜란드8533 암스테르담0559
해적100418없음

표시 관계(행이 상대를 보는 값):

에서 / 에게포에오잉이네해
포르투갈7055 동맹020402010
에스파냐55 동맹705153520−10
오스만057025−5 봉쇄2040
잉글랜드20152570203030
이탈리아4035−5 봉쇄2070200
네덜란드20202030207030
해적10−10403003070

새 게임 자료에서 길드 이익과 주인공 기록(명성, 우호도, 작위)은 모두 0입니다. 게임 시작 때 다른 값으로 채우는지는 확인하지 않았습니다.

3. 월간 변화

확인됨[대조] (KO 0x1CFD1 월간 반복, KO 0x1CDAD 값 계산, KO 0x1CF46 실행, KO 0x1CEB4 항구 빼앗기; 영문판 EN 0x1D363/0x1D13F/0x1D2D8/0x1D246과 명령어 차이 0~9, 상수 차이 없음)

매달 여섯 나라의 모든 순서쌍(i가 j를 봄)에 대해 i의 j에 대한 상태 바이트 하위 4비트에 값을 쓰고, 그 값에 따라 행동합니다.

값 표는 확인됨[직접] (DS:0xAC74 = 파일 0x47924, 36바이트; 첨자 = 관계 구간 × 12 + 이익 비교 × 3 + 상태):

관계 구간 = floor((저장 관계 + 9) / 40)      0: 저장 0~30, 1: 31~70, 2: 71~110
이익 비교 0: i 이익/2 > j 이익   1: j 이익/2 > i 이익   2: i > j   3: 그 밖(j ≥ i)
상태     0: 동맹   1: 봉쇄   2: 둘 다 아님
관계 구간이익 비교동맹봉쇄둘 다 아님
0i가 j의 두 배 넘음030
0j가 i의 두 배 넘음135
0i가 더 큼031
0j가 같거나 큼135
1i가 j의 두 배 넘음64규칙 9
1j가 i의 두 배 넘음13규칙 10
1i가 더 큼6규칙 7규칙 9
1j가 같거나 큼03규칙 10
2i가 j의 두 배 넘음642
2j가 i의 두 배 넘음631
2i가 더 큼6규칙 7규칙 8
2j가 같거나 큼6규칙 7규칙 8

규칙(확인됨[직접], KO 0x1CE5D~0x1CEA1; R = 저장 관계):

  • 규칙 7: random(100) < R이면 3, 아니면 0.
  • 규칙 8: random(100) > R이면 2, 아니면 0.
  • 규칙 9: 30 + random(20) > R이면 2, 아니면 0.
  • 규칙 10: 30 + random(10) > R이면 2, 아니면 0.

값에 따른 행동(확인됨[대조], 상태 바이트 전체로 비교하므로 동맹·봉쇄 비트가 없는 쌍만 해당):

  • 1: j가 i를 보는 관계가 3 + random(5) 오르고, i의 값도 같은 값으로 맞춥니다. 상한이 없습니다. 이것이 플레이어 없이 관계가 오르는 유일한 길입니다.
  • 4: i가 j의 항구를 빼앗는 처리지만, 4는 봉쇄 칸에서만 나오므로 실제로는 일어나지 않습니다.
  • 0, 2, 3, 5, 6은 다른 곳에서 읽지 않습니다.

4. 관계가 바뀌는 다른 경우

확인됨[대조]

원인변화
왕명: 문서 전달두 방향 +5, 저장 100 상한
왕명: 조약 교섭두 방향 +10, 저장 100 상한
플레이어가 해전에서 이김(결과 코드가 짝수)내 나라→상대 random(5) + 3(3~7) 감소, 0 하한, 반대 방향도 같은 값으로
컴퓨터 함대끼리 싸움−2 또는 −3(npc.md)

5. 해전 승리 뒤 우호도

확인됨[대조] (KO 0x15A93, 영문판 EN 0x15DE5와 명령어 차이 0; 등급 고르기 KO 0x14F8D, 영문판 EN 0x15240과 2개 차이, 소지품 주소만 다름)

결과 코드가 짝수(적 기함 도주 2, 승리 4·6, 시나리오 취소 8)일 때만 적용됩니다. 밤이 되거나 도주·항복이면 적용하지 않습니다.

외교 등급(처음 0). 내 나라의 사략허가서(도구 0x1D + 나라)를 가지고 있으면 1로 시작하고, 그때만 아래 검사를 차례로 덮어씁니다.

저장 관계 ≤ 40                    → 2
상대→나 상태에 봉쇄 비트           → 3
내 나라 기록 +2(노리는 나라) = 상대 → 4
저장 관계 ≥ 60                    → 5
나→상대 상태에 동맹 비트           → 6
등급모국 배수상대 배율
0, 1+130
2+210
3+36
4+43
5−190
6−160
모국 우호도 변화 = 모국 배수 × (5~9 사이 무작위)
상대 우호도 감소 = floor(상대 배율 × (10~14 사이 무작위) / 30)

우호도 저장값은 0~200(표시 −100~+100)으로 묶입니다.

같은 나라 배를 친 경우와 추방

확인됨[대조]

  • 상대가 내 나라이면 위 감소에 더해 10~14를 더 빼고, 모국 증가는 없습니다. 관계도 3~7 내려갑니다.
  • 그 뒤 모국 우호도 저장값이 40 이하(표시 −60 이하)이면 추방: 작위를 잃고 소속이 해적이 됩니다(공통 대사 568).
  • 41~70(표시 −59~−30)이고 작위가 있으면 작위 박탈: 소속은 유지(569).
  • 둘 다 작위를 0으로, 공통 시나리오를 섹션 0으로 되돌리고 플래그 16~18을 지워 진행 중인 왕명·길드 의뢰를 취소합니다(KO 0x15CD0, 영문판 EN 0x16020). 명성은 줄지 않습니다.

확인하지 못한 것

  • 우호도·명성의 게임 시작 때 초기화 코드.
  • 길드 정보(국가가 노리는 나라를 매달 다시 고르는 공식)는 영문판 연구에 있으나 한글판 루틴을 따로 맞추지 않았습니다(외부자료): 나라 n은 floor(나라 m의 길드 이익 × n의 m에 대한 관계 / 100)가 가장 작은 m을 고르고, 100 + random(180 − 공격성) < |200 − 플레이어 우호도|이고 플레이어가 n 소속이 아니면 플레이어(7)를 노립니다.
  • 투자에 따른 항구 지지도 변화는 trade.md에 있습니다.

| 규칙 목록 | 원문 Markdown |