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

| 규칙 목록 | 원문 Markdown

교역과 시세

시장(교역소)의 가격은 기준가 × 시세 지수로 정해집니다. 시장에 재고 수량은 없고, 거래와 시간에 따라 움직이는 것은 항구마다 저장된 10개 분류의 시세 지수뿐입니다.

1. 데이터 구조

1.1 교역품과 분류 (확인됨[직접])

교역품 46종은 10개 분류로 나뉩니다. 분류 판정 함수(KO 0x291C2)는 DS:0x07C0의 경계표 6,10,17,21,26,31,33,36,40,46에서 "품목 번호 < 경계"인 첫 칸을 분류로 씁니다.

분류품목 번호품목
0 향신료0–5정향, 계피, 후추, 육두구, 피망, 생강
1 기호품6–9담배, 차, 커피, 카카오
2 식품10–16설탕, 유제품, 어육, 곡류, 올리브유, 와인, 돌소금
3 섬유17–20생사, 무명, 양모, 마
4 직물21–25면직물, 견직물, 모직물, 벨벳, 삼베
5 보석26–30산호, 호박, 상아, 진주, 구갑
6 귀금속31–32금, 은
7 광석33–35동, 주석, 철광석
8 사치품36–39미술품, 융단, 사향, 향수
9 기타40–45유리구슬, 염료, 도자기, 유리그릇, 무기, 목재

품목 이름은 MAIN.EXE 파일 249074부터 빈 문자로 이어져 있습니다(editor/ports.py와 같음).

1.2 항구 메타 기록 (37바이트, 정규 항구 100곳) (확인됨[직접])

세이브 슬롯 0x5D4A + 항구번호 × 37 (DATA1.LZW 15번 같은 오프셋). 코드는 DS:0xC6E2에 이 기록의 +2 주소를 넣고 씁니다.

오프셋크기내용
+0x02u16경제(0–1000)
+0x04u16시장 투자 누적액(이달)
+0x06u16공업(0–1000)
+0x08u16조선소 투자 누적액(이달)
+0x0A..+0x0F6바이트국가별 지지도(포르투갈·에스파냐·터키·영국·이탈리아·네덜란드), 0–100
+0x10..+0x1910바이트분류별 시세 지수 R(0–100 저장, 실제 배율은 R+50 %)
+0x1Au16특산품 기준가
+0x1Cu8특산품 품목(0xFF 없음)
+0x1Du8특산품이 나오는 최소 경제 ÷ 10
+0x1Eu8지역(0 유럽 … 7 극동)
+0x1F..+0x213바이트도구점 상품
+0x22u8도구점 비밀 상품
+0x23u8시장 번호(0–12)
+0x24u8주점 술 종류
+0x25u8조선소 건조 남은 날(0xFF 주문 없음) (외부자료, 대조 미완)

1.3 시장 기록 (13개 × 128바이트) (확인됨[직접])

세이브 슬롯 0x6BC0 + 시장번호 × 0x80. 코드는 DS:0xC678 포인터로 읽습니다.

오프셋내용
+0x00..+0x5B품목별 매각 기준가 u16 × 46 (그 시장이 사 주는 값)
+0x5C..+0x6D매입 칸 9개의 매입 기준가 u16
+0x6E..+0x76매입 칸 9개의 품목 번호(0xFF 빈 칸)
+0x77..+0x7F매입 칸별 최소 경제 ÷ 10

2. 가격 공식

2.1 사는 값 (확인됨[직접], KO 0x29211 / EN 0x29EE3)

R   = 그 품목 분류의 저장 시세 지수 (항구 메타 +0x10+분류)
B   = 매입 칸의 매입 기준가 (특산품이면 메타 +0x1A)
보통값 = floor((R + 50) × B / 100)
사는 값 = floor(보통값 × 12 / 10)      … 면세증 없음 (20% 할증)
       = floor(보통값 × 10 / 10)      … 그 항구 지배국의 면세증 소지
  • 면세증 판정(KO 0x291E5): 항구 표시 기록 +0x13의 아래 3비트(캐시된 지배국)를 읽어, 6(지배국 없음)이면 할증이 항상 붙습니다. 0–5면 소지품 20칸(DS:0x2D93)에서 도구 번호 0x23 + 국가(포르투갈 면세증 … 네덜란드 면세증)를 찾습니다. (확인됨[직접])
  • 지지도 값이 아니라 캐시된 지배국을 씁니다. 캐시는 매일 자정 갱신됩니다(4.3절).

2.2 매입 목록에 나오는 조건 (확인됨[직접], KO 0x29614 부근)

  • 매입 칸 9개를 앞에서부터 보며 최소경제 × 10 ≤ 항구 경제인 칸만 올립니다. 빈 칸(0xFF)에서 멈춥니다.
  • 특산품은 메타+0x1D × 10 ≤ 경제 이고 그 분류의 저장 시세 R < 90(배율 140% 미만)일 때만 9번째 칸으로 나옵니다. 많이 사서 R이 90 이상이 되면 "품절"이 되고, R이 90 아래로 내려오면 다시 나옵니다.
  • 재고 개념은 없습니다. 한 번의 거래 수량 상한은 min(소지금 ÷ 가격, 선택한 배의 빈 짐칸)뿐입니다. (외부자료, 대조: EN 0x29FCA)

2.3 파는 값 (확인됨[직접], KO 0x29A28)

일반 품목: 파는 값 = floor((R + 50) × 매각기준가[품목] / 100)
특산품을 그 항구에 되팔 때: floor((R + 50) × 특산품기준가 / 200)   … 절반

매각에는 세금 할증도 흥정도 없습니다. (확인됨[직접])

2.4 예시 (리스본, 새 게임 값)

리스본(항구 0)은 시장 0, 경제 780. 식품(분류 2) 저장 시세 R = 52.

  • 유제품 매입 기준가 30 → 보통값 floor(102 × 30 / 100) = 30, 면세증 없으면 36.
  • 같은 시장에서 와인은 경제 300 이상, 벨벳 500, 염료 600, 무기 750 이상에서 매입 목록에 나옵니다.
  • 특산품 돌소금(기준가 38, 경제 100 이상)은 식품 시세가 90 미만일 때만 팝니다.

3. 흥정 (확인됨[직접], KO 0x29464 / EN 0x2A152)

매입 확인에서 "아니오"를 고르면 흥정이 열립니다. 난수는 쓰지 않습니다.

P = 사는 값(2.1)
N = 주인공의 작위 단계(명성 기록 +0x0D, 0 무작위 … 9 공작)
    단, 그 항구의 캐시 지배국이 주인공 국적과 같을 때만. 다르면 N = 0
F = floor(P × (19 − N) / 20)     … 최저 가능가
T = P − floor((P − F) / 2)       … 그대로 받아들이는 최저 제시가
C = P − floor((T − F) / 2)       … 상인이 되부르는 값
  • 제시가 ≥ T: 제시가로 거래(메시지 10).
  • 제시가 < T이고 T − F ≤ 1: 거절(메시지 11).
  • 그 외: 상인이 C를 부르고(메시지 12) 다시 묻습니다. 이때 협상자가 "교섭" 기술(기술 비트 0x01)을 가졌으면 F를 제시하고(메시지 851) 상인이 F로 양보합니다(852).
  • 협상자는 처음엔 주인공. 주인공에게 교섭이 없으면 경리주임(직책 4)이 협상자가 되며, 경리주임은 회계(비트 0x02)가 있어야 851을 말합니다.
  • 결론: 교섭(주인공) 또는 회계(경리주임)가 있으면 아무리 낮게 불러도 F에 살 수 있고, 없으면 최저 T입니다. 자국 항구에서 작위가 높을수록 F가 5%씩 내려갑니다(공작이면 P의 50%).

기타 (외부자료, 대조): 흥정 전에 경리주임이 시세 R로 가격을 평가합니다(R ≤ 40 "싸다", 41–60 "적당", 60 초과 "비싸다"). 소지금이 값의 절반 미만이면 살 수 없다는 말만 나옵니다.

4. 시세 변동

4.1 사면 오른다 (확인됨[직접], KO 0x293C9 / EN 0x2A0B7)

V  = 수량 × 단가        (16비트 곱셈: V mod 65536만 씀)
E  = 항구 경제
그 분류 R  ← min(100, R + min(10, floor((V mod 65536) / (E + 500))))
모든 10분류 R ← min(100, R + min(3, floor((V mod 65536) / 1000)))

선택 분류에는 두 증가가 모두 적용됩니다.

4.2 팔면 내린다 (확인됨[직접], KO 0x29C0D / EN 0x2A97C)

V  = 수량 × 파는 값     (그 분류용은 32비트, 전체용은 16비트)
그 분류 R  ← R − min(R, min(10, floor(V / (E + 500))))
모든 10분류 R ← R − min(R, min(3, floor((V mod 65536) / 1000)))

R은 0 아래로 내려가지 않습니다.

실전 결과 (추정이 아닌 계산 결과):

  • 한 번의 거래액이 1,000 미만이면서 E + 500 미만이면 시세가 전혀 변하지 않습니다. 같은 물건을 여러 번 잘게 나눠 사고팔면 시세를 거의 움직이지 않습니다.
  • 매입 쪽은 거래액의 하위 16비트만 보므로, 거래액이 65,536의 배수를 막 넘으면(예: 262,449 = 4 × 65,536 + 305) 시세가 오르지 않습니다.
  • 가격은 거래 전 시세로 정해지므로, 한 번에 크게 팔아 시세를 떨어뜨린 뒤 같은 항구에서 다른 분류 물건을 싸게 살 수 있습니다(전 분류 −3).
  • 한 번에 움직이는 폭은 선택 분류 최대 +13/−13, 다른 분류 ±3입니다.

4.3 월말 회복 (확인됨[직접], KO 0x1C7CC / EN 0x1CB4E)

매달 말 정규 항구 100곳 각각에 대해:

각 분류마다 r = random(5) + 1     (1–5)
R > 50 이면 R ← R − r,  R ≤ 50 이면 R ← R + r

즉 시세는 한 달에 평균 3씩 기준(50 = 100%)으로 돌아갑니다. R이 50 근처면 매달 50±5 안에서 흔들립니다. 같은 루틴이 투자액을 경제·공업으로 바꿉니다(5.1절).

4.4 NPC 상선의 영향 (확인됨[대조], KO 0x38AE4·0x3885D / EN 0x39B0D·0x39886)

  • 교역 출항(국가 전략 모드 2일 때 상선): 목적 항구에서 품목 10 + random(16)(설탕~삼베, 식품·섬유·직물) 하나를 min(1000, floor(100 × 자금 / 가격))개 사고, 그 분류 시세를 min(100 − R, 3 + random(3))만큼 올립니다.
  • 귀항: 화물이 있으면 모항의 모든 분류 시세가 random(3)(0–2)씩, 화물 분류는 2를 더 내립니다(0 미만 없음).
  • 그래서 각국 수도(NPC 모항)의 시세는 상선이 돌아올 때마다 내려가고, 상선이 교역하러 간 항구의 식품·섬유·직물 시세는 오릅니다. (추정: 실제 체감 정도는 시뮬레이션하지 않음)

5. 투자, 지지도, 동맹항

5.1 투자 (확인됨[직접], 시장 KO 0x29E58 부근 / 조선소는 KO 0x3161x 부근)

  • 국가 수도에서는 투자할 수 없습니다(메시지 2).
  • 이달 누적 투자액(시장 메타+0x04, 조선소 +0x08)이 50,000이면 거절(메시지 7).
  • 입력 상한 = min(min(소지금, 50,000), 50,000 − 누적액).
  • 금액별 대사: 0 → 13, 1–499 → 14("이것뿐이야?"), 500–9,999 → 15, 10,000 이상 → 16.
  • 투자 즉시 경제·공업은 오르지 않습니다. 월말에(KO 0x1C7CC):
경제 ← min(1000, 경제 + floor(시장 투자 누적 / 300))
공업 ← min(1000, 공업 + floor(조선소 투자 누적 / 300))
두 누적액 ← 0

50,000을 넣으면 한 달에 최대 +166. 경제·공업을 낮추는 코드는 없습니다(외부자료, 연구 결론).

5.2 지지도 변화 (확인됨[직접], KO 0x29D36 / 조선소 KO 0x3144A[대조])

E' = 경제(시장 투자) 또는 공업(조선소 투자)        (0으로 나누기 검사 없음)
얻는 지지 g = min(100 − 내 나라 지지도, floor(투자액 / E'))
해적 주인공: g = min(100, floor(투자액 / E')) 만큼 다른 나라에서 깎기만 함

g는 지지도가 0이 아닌 다른 나라 n곳에서 floor(g / n)씩 고르게 빼고(0 아래면 모자란 만큼 나머지에 합침), 나머지는 국가 순서대로 1점씩 뺍니다.

예: 경제 500 항구에 10,000을 넣으면 +20, 경제 900이면 +11. 경제가 낮은 항구일수록 지지도를 사기 쉽습니다.

5.3 지배국 결정과 동맹항 (확인됨[대조], KO 0x3156E·0x1E42A / EN 0x327C3·0x1E88F)

  • 지배국 = 지지도 75 이상인 나라(여럿이면 번호가 큰 쪽), 없으면 6(중립). 투자 직후와 매일 자정에 갱신됩니다.
  • 투자로 지배국이 내 나라로 바뀌면: 교역 명성 += 경제 + 공업(최대 50,000), 내 나라 우호도 +5.
  • 내 나라가 아닌 옛 지배국에서 다른 나라로 넘어가면 옛 지배국 우호도 −5.

5.4 국가 경제력(길드 수익) (확인됨[대조], KO 0x1C864 / EN 0x1CBE6)

매달 초 각국에 대해, 그 나라가 지배하는 항구의 경제·공업을 지역별로 합산합니다.

지역 경제력 = floor(지역 경제 합 / 지역 제수)
제수: 유럽 4, 신대륙 3, 서아프리카 3, 동아프리카 2, 중동 3, 인도·동남아·극동 1
길드 수익 = 활성 지역 경제력의 합,  해적의 값 = 6개국 평균

지역이 활성이려면 그 지역 동맹항 공업 합이 300 이상이어야 하고, 동쪽 지역은 보급로가 필요합니다(동아프리카: 서아프리카 또는 중동도 300 이상, 인도: 중동, 동남아: 중동·인도, 극동: 중동·인도·동남아도 각각 300 이상). (외부자료, 지역 조건 세부는 EN 0x2FFB7–0x300B3; 한글판 함수 구조 일치)

이 값은 NPC 함대 자금, 함대 재생성, 국가 공격 성향에 쓰입니다(npc.md).

6. 그 밖의 가격

6.1 항구 보급품 (외부자료, 대조 부분 일치: KO 0x2C7FA, 메시지 처리 차이 있음)

물 = 무료
식량 = floor( 20 × (식품 분류 R + 50) / 100)
목재 = floor( 90 × (기타 분류 R + 50) / 100)
포탄 = floor(120 × (식품 분류 R + 50) / 100)     ← 연구 자료 그대로(식품 시세 사용)

6.2 조선소 가격 지수 (확인됨[직접], KO 0x3060A)

조선소 지수 I = 50 + floor(그 항구 10개 분류 R의 합 / 10)     (보통 50–150%)
견적 = 10 × floor(기준가(10 단위) × I / 100)
최저 수락가 = floor(견적 × (500 − 주인공 매력) / 500)
  • 경리주임이 있으면 추천가를 말합니다: 회계 기술이 있으면 정확히 최저 수락가, 없으면 최저 수락가 × (95 + random(10)) / 100.
  • 교역으로 시세를 내리면 그 항구의 배값도 내려갑니다(시세 합이 조선소 지수를 만들기 때문).
  • 교환(중고 구입 시 현재 배를 넘김)에서는 넘기는 배의 매각가를 2로 나눈 값을 소지금에 더해 구매 가능 여부를 봅니다(KO 0x30673–0x3068A, 영문판도 같음). (확인됨[직접] 코드, 의미 해석은 추정)

7. 교역 명성

일반 매매로는 교역 명성이 오르지 않습니다. 오르는 길은 투자로 항구를 동맹항으로 만들기(경제+공업)와 길드 의뢰(편지 50, 운송·구매 200/700/1,500, 빚 받기 150/500)입니다. (동맹항 부분 확인됨[대조]; 길드 의뢰 수치는 외부자료: SNR0 스크립트)

확인하지 못한 것

  • 시장 메뉴의 "시세" 화면 세부 출력, 경리주임 평가 대사 문턱값은 대조만 했고 직접 읽지 않았습니다.
  • 보급품 가격의 정확한 분류 바이트(+0x12, +0x19)는 한글판 Supply 루틴이 메시지 처리 차이로 자동 대조되지 않아 연구 값을 그대로 옮겼습니다.
  • NPC 교역·귀항이 장기적으로 시세에 주는 영향의 크기는 시뮬레이션하지 않았습니다.

| 규칙 목록 | 원문 Markdown