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

| 규칙 목록 | 원문 Markdown |

교회와 모스크: 기도·기부, 그리고 운

주소는 KO 한글판 MAIN.EXE 파일 오프셋 / EN 영문판 파일 오프셋입니다. 신뢰도 표시는 index.md를 보세요.

요약:

  • 기부로 운이 오르려면 기부액이 소지금의 1/11보다 많아야 합니다(약 9.09% 초과). 흔히 말하는 "소지금의 10% 이상"은 거의 맞지만 정확하지 않습니다.
  • 오르는 양은 11 − floor(소지금 ÷ 기부액), 즉 1~10입니다. 많이 낼수록 더 오르고, 전부 내면 +10입니다.
  • 기부액이 100 미만이면 운은 절대 오르지 않습니다. 100~499이면 확률로 오릅니다.
  • 운 말고는 아무것도 바뀌지 않습니다. 명성, 우호도, 선원, 건강, 숨은 축복 표시 모두 없습니다.
  • 운은 시간이 지나도 줄지 않습니다. 줄어드는 경우는 약탈과 유령선 두 가지뿐입니다.

1. 루틴 위치 (확인됨[직접])

루틴KOEN비고
입장(교회/모스크 판별, 이교도 거절)0x319EB0x32CCF기도 표시 DS:0xC6D8 = 1로 켬
교회/모스크 판별0x319150x32BF9현재 항구의 CHIP_NO.DAT 값이 2이면 모스크, 결과는 DS:0xC150
기도·기부 메뉴0x319580x32C3C
기도0x318080x32AA8
기부0x3184E0x32AF0
금액 입력 창0:0x58EA0:0x5742범위 0~소지금. 밖의 값은 다시 입력받음
32비트 나눗셈0:0x36A2부호 있는 long 나눗셈(C 런타임)
작은 값 고르기 min(a, b)0:0x4D42부호 없는 16비트 비교
난수 random(n)0:0x4D860 ~ n−1 (misc.md 8절)

메시지 번호는 교회 번호 + 712 × 모스크로 고릅니다(imul word [0xC150], 0x2C8 = 712). 같은 코드가 교회와 모스크에 쓰입니다. 확인됨[직접]

소지금은 DS:0x123A의 32비트 값입니다. 기부 루틴은 은행 예금이나 빚(은행 기록)을 읽지 않습니다. 손에 든 금화만 셉니다. 확인됨[직접]

2. 기부 공식 (확인됨[직접], KO 0x3184E–0x31914)

G = 기부 전 소지금 (32비트)
D = 입력한 기부액, 0 ≤ D ≤ G
D = 0 이면 아무 일 없이 메뉴로 돌아감
q = floor(G / D)                         # 0:36A2, 32비트 나눗셈
q > 10 이면 → 메시지 94 (작은 기부), 운 변화 없음
q ≤ 10 이면 → 메시지 95 (큰 기부), 그리고
    R = (random(5) + 1) × 100            # 100, 200, 300, 400, 500 중 하나
    D ≥ R 이면  운 = min(운 − q + 11, 100)
소지금 −= D                              # 두 경우 모두

코드 그대로입니다.

3186D  sub ax,ax / cdq / lcall 0:58EA      ; 입력 창: 최소 0, 최대 [0x123A:0x123C]
3187B  or dx,ax / jne → 0이면 끝
3188E  lcall 0:36A2                         ; G / D
31896  or dx,dx / jl … / jg → 작은 기부
3189C  cmp ax,0Ah / jbe → 큰 기부            ; q ≤ 10
318A1  … add ax,5Eh → 메시지 94
318B4  … add ax,5Fh → 메시지 95
318C5  mov ax,5 / random / inc / mul 64h     ; R
318D5  D < R 이면 운 계산을 건너뜀
318E5  dl = [주인공+23h] ; sub dx,q ; add dx,0Bh ; min(100, …)
318FB  mov [주인공+23h],al
31904  sub [123Ah],D / sbb [123Ch]
  • 주인공 인물 기록 포인터는 DS:0xC67A, 운은 인물 기록 +0x23입니다(data-formats.md). 확인됨[직접]
  • D ≤ G 이므로 q ≥ 1입니다. 그래서 운 증가는 11 − q, 즉 1~10이고 음수가 되지 않습니다. 확인됨[직접]
  • 상한은 100입니다. 운이 이미 100이면 그대로 100입니다. 확인됨[직접]
  • 기부 한 번마다 따로 계산합니다. 같은 방문에서 여러 번 기부해도 매번 오를 수 있습니다(기도와 달리 횟수 제한이 없음). 확인됨[직접]
  • 메시지 95는 운이 실제로 올랐는지와 상관없이 나옵니다. R 판정에 실패해도 같은 말을 듣습니다. 화면만으로는 성공 여부를 알 수 없습니다. 확인됨[직접]

문턱 정리

q ≤ 10 ⇔ G / D < 11 ⇔ **D > G / 11**. 운이 오를 수 있는 최소 기부액은 floor(G / 11) + 1입니다. 확인됨[직접]

기부액 D (소지금 G 기준)q운 증가
G/11 이하11 이상0 (메시지 94)
G/11 초과 ~ G/10 이하10+1
G/10 초과 ~ G/9 이하9+2
G/9 초과 ~ G/8 이하8+3
G/8 초과 ~ G/7 이하7+4
G/7 초과 ~ G/6 이하6+5
G/6 초과 ~ G/5 이하5+6
G/5 초과 ~ G/4 이하4+7
G/4 초과 ~ G/3 이하3+8
G/3 초과 ~ G/2 이하2+9
G/2 초과 ~ G1+10

경계는 나눗셈 내림 때문에 위처럼 "초과 ~ 이하"가 됩니다. 예: G = 10,000에서 D = 1,000이면 q = 10(+1), D = 1,001이면 q = 9(+2).

예: 소지금 10,000

기부액q결과
90911메시지 94, 운 변화 없음
91010메시지 95, 운 +1 (최소 문턱)
1,00010운 +1
1,001 ~ 1,1119운 +2
2,0005운 +6
3,334 ~ 5,0002운 +9
5,001 ~ 10,0001운 +10

910 이상이면 R(최대 500)을 항상 넘으므로 확률 없이 오릅니다.

100~499 금화 기부의 확률

R은 100·200·300·400·500이 각각 1/5입니다. 큰 기부 조건(q ≤ 10)을 채운 뒤 운이 오를 확률은 다음과 같습니다. 확인됨[직접]

기부액 D운이 오를 확률
1 ~ 990
100 ~ 1991/5
200 ~ 2992/5
300 ~ 3993/5
400 ~ 4994/5
500 이상1

예: 소지금 300을 전부 내면 q = 1이지만 R이 400·500이면 실패해 운 +10을 받을 확률은 3/5입니다. 소지금이 적을수록 비율보다 절대 금액이 문제가 됩니다.

3. 기도 (확인됨[직접], KO 0x31808–0x3184D)

메시지 92 표시
DS:0xC6D8 ≠ 0 이면:
    운 = min(운 + random(2), 100)        # +0 또는 +1
    DS:0xC6D8 = 0
  • DS:0xC6D8은 교회에 들어올 때(KO 0x319EC) 1이 됩니다. 그래서 방문 한 번에 첫 기도만 50% 확률로 운 +1입니다. 나갔다 다시 들어오면 다시 됩니다. 확인됨[직접]
  • 이 표시를 쓰는 곳은 이 세 군데뿐입니다(xref로 확인). 확인됨[직접]

4. 운 말고 바뀌는 것 (확인됨[직접])

기부 루틴이 쓰는 메모리는 [주인공+0x23](운)과 DS:0x123A(소지금) 둘뿐입니다. 나머지 호출은 메시지 출력(0:0x8D4B)과 키 입력 대기(0FB8:0x456A)입니다.

  • 명성(교역·해적·모험): 바뀌지 않음.
  • 국가 우호도·관계: 바뀌지 않음.
  • 선원 수·건강·사기, 폭풍 보호: 바뀌지 않음. 폭풍 판정은 운 자체를 볼 뿐입니다(5절).
  • 숨은 "축복" 표시나 누적 기부액 기록: 없음.

5. 이교도 거절 (확인됨[직접], KO 0x31A00–0x31A2D)

주인공 인물 기록 +0x31의 낮은 4비트(현재 소속)가 2(오스만)인지 봅니다.

  • 교회인데 2이면 메시지 90으로 거절합니다.
  • 모스크인데 2가 아니면 메시지 802로 거절합니다.

알리만이 아니라 소속 값이 기준입니다. 영문판은 같은 값을 +0x29에서 읽습니다(한글판 인물 기록이 더 큼). 확인됨[대조](EN 0x32CE9–0x32D11과 같은 구조)

6. 메시지 (확인됨[직접], MESSAGE.DAT)

경우교회모스크
입장91 "어서 오세요, 주님의 품으로!"803 "알라신께 기부하시는 겁니까?"
이교도 거절90 "당신의 깊은 신앙심은 잘 알겠습니다만, 이교도는 삼가해 주십시오."802 "당신이 코란을 구하는 마음은 잘 알겠지만, 이교도는 삼가해 주세요."
기도92 "주님께 기도드립시다."804 "알라신께 기도합시다."
기부 금액 묻기93 "기부하시겠습니까?"805 "기부해 주시는 겁니까?"
작은 기부 (q > 10)94 "주님께선 금화보다도 경건한 마음을 더 소중히 여기신답니다."806 "알라신께서는 경건한 회교도를 사랑하신답니다."
큰 기부 (q ≤ 10)95 "가난한 자는 행복합니다. 천국은 당신을 위해 문을 열어 주겠지요."807 "오! 이렇게 많이 기부해 주시다니……"
나가기96 "성부 성자 성신의 이름으로 아멘."808 "당신에게 알라신의 은총이 깃드시길!"

메시지 94/806이 나오면 운은 오르지 않은 것이고, 95/807이 나와도 오르지 않았을 수 있습니다(2절).

7. 운이 쓰이는 곳

운(인물 +0x23)을 읽는 곳을 한글판 전체에서 찾았습니다(xref로 [bx+0x23] 전부). 아래는 주인공 기록 포인터(DS:0xC67A)를 거친 것입니다.

쓰임KO공식 (r(n) = random(n), 0 ~ n−1)신뢰도
새 게임 처음 운0x1B67E운 = r(101) (0~100)확인됨[직접]
해전 중 결투 신청0x0FE61아군 기함 선원 + r(운) ≥ 적 기함 선원이면 성립확인됨[직접] (combat.md)
해전 도주0x14C4D운 + 항해 레벨(+0x24) > r(150)이면 도주 성공(메시지 822)확인됨[직접]
쥐 떼0x1E13E30일 넘음, 고양이 없음, r(floor(항해 레벨/5)+2) = 0, r(105) > 운확인됨[직접] (navigation.md)
괴혈병0x1E22160일 넘음, r(105) > 운확인됨[직접]
폭풍·무풍·안개 피하기0x1E894주인공과 일등항해사·항해장 중 가장 높은 운 L로 L + 50 ≥ r(155)이면 무사L 고르기 확인됨[직접], 비교식 확인됨[대조]
물 찾기0x39953운 × W > r(100) (사막 W=0)확인됨[직접] (landing.md)
마을 탐색0x39543floor(7×직감/20) + floor(3×운/20) + 친밀도 > 난이도확인됨[직접] (landing.md)
주점: "○○국이 당신을 노린다" 정보0x2AC04r(200) < 운일 때 국가를 훑음확인됨[직접]
빚쟁이 받기 의뢰0x2AFFBr(100) > 운이고 r(3) = 0이면 빚쟁이가 달아남(메시지 610·613)확인됨[직접]
도구점 되팔기 재흥정0x2EACB운 ≥ r(100)이면 더 높은 값 제시확인됨[직접]
조선소 희귀 선수상0x3112D경제·공업 > 800, 운 > 80, r(20) = 0이면 천사 추가, 이어 r(운) ≥ 90이면 여신도 추가확인됨[직접]
조선소 캐로네이드 포0x311FC경제·공업 > 900, 운 > 90, r(20) = 0확인됨[직접]
소문(발견물 위치)이 맞을 확률0x32480r(80) ≤ 운이면 진짜 좌표확인됨[직접]
점술가 운세0x31F8Efloor(운 / 25)로 메시지 302~306확인됨[대조]
점술가 항해사 운세0x32118항해사의 floor(운 / 25)확인됨[대조]

운이 줄어드는 곳은 둘뿐입니다. 확인됨[직접]

사건KO변화
마을 약탈0x397B2운 −= min(2, 운)
유령선(해상 사건 9, 메시지 528·529)0x359C2운 −= min(30, 운)

주인공의 운([DS:0xC67A] + 0x23)에 값을 쓰는 코드는 새 게임, 기도, 기부, 약탈, 유령선 다섯 곳뿐입니다. 레벨업, 나이, 월말 처리에는 운을 바꾸는 코드가 없습니다. 그래서 시간이 지나도 운은 줄지 않고, 기부로 올린 운은 영구입니다. 시나리오 바이트코드는 따로 운을 바꿀 수 있습니다(주앙 이야기에서 펠리페 신부의 금화를 기부하면 운 100, scenario.md). 확인됨[직접](기계어 쪽), 시나리오 쪽은 확인됨[대조]

8. 영문판·알려진 공략과의 차이

  • "소지금의 10% 이상 기부하면 운이 오른다": 정확하지 않습니다. 실제 문턱은 floor(소지금 / 기부액) ≤ 10, 즉 1/11 초과입니다. 정확히 10%는 q = 10이라 통과하고(+1), 10%보다 조금 적은 9.1%~10%도 통과합니다. 또 금액이 500 미만이면 확률이 붙고, 100 미만은 비율과 상관없이 실패합니다. 오르는 양도 고정이 아니라 1~10입니다. 확인됨[직접]
  • 영문판 연구(JohanLi/uncharted-waters-2-research, buildings.md "Church and Mosque command dialogue")의 공식 Luck − floor(gold / donation) + 11, 상한 100, (random(5)+1) × 100 조건은 한글판 코드와 상수까지 같습니다. 확인됨[직접]
  • 한글판에만 없는 것: 영문판은 소지금이 0일 때 메시지 28 "Commodore, we have no gold!"을 띄우고 끝내지만(EN 0x32B07–0x32B31), 한글판 기부 루틴에는 이 확인이 없어 곧바로 0~0 범위의 입력 창이 뜹니다. 0을 넣으면 그냥 끝나므로 결과는 같습니다. 영문판의 입력 취소 표시(DS:0x8E9E) 확인도 한글판에는 없습니다. 확인됨[직접]

확인하지 못한 것

  • 게임을 실행해 운 변화를 직접 재 보지는 않았습니다.
  • 폭풍 판정의 비교식(L + 50 ≥ r(155))은 한글판에서 L을 고르는 부분만 직접 읽고 뒷부분은 영문판과 대조했습니다.
  • 시나리오 바이트코드가 운을 바꾸는 경우를 전부 모으지는 않았습니다(주앙의 기부 사건만 확인).

| 규칙 목록 | 원문 Markdown |