교회와 모스크: 기도·기부, 그리고 운
주소는 KO 한글판 MAIN.EXE 파일 오프셋 / EN 영문판 파일 오프셋입니다. 신뢰도 표시는 index.md를 보세요.
요약:
- 기부로 운이 오르려면 기부액이 소지금의 1/11보다 많아야 합니다(약 9.09% 초과). 흔히 말하는 "소지금의 10% 이상"은 거의 맞지만 정확하지 않습니다.
- 오르는 양은
11 − floor(소지금 ÷ 기부액), 즉 1~10입니다. 많이 낼수록 더 오르고, 전부 내면 +10입니다. - 기부액이 100 미만이면 운은 절대 오르지 않습니다. 100~499이면 확률로 오릅니다.
- 운 말고는 아무것도 바뀌지 않습니다. 명성, 우호도, 선원, 건강, 숨은 축복 표시 모두 없습니다.
- 운은 시간이 지나도 줄지 않습니다. 줄어드는 경우는 약탈과 유령선 두 가지뿐입니다.
1. 루틴 위치 (확인됨[직접])
| 루틴 | KO | EN | 비고 |
|---|---|---|---|
| 입장(교회/모스크 판별, 이교도 거절) | 0x319EB | 0x32CCF | 기도 표시 DS:0xC6D8 = 1로 켬 |
| 교회/모스크 판별 | 0x31915 | 0x32BF9 | 현재 항구의 CHIP_NO.DAT 값이 2이면 모스크, 결과는 DS:0xC150 |
| 기도·기부 메뉴 | 0x31958 | 0x32C3C | |
| 기도 | 0x31808 | 0x32AA8 | |
| 기부 | 0x3184E | 0x32AF0 | |
| 금액 입력 창 | 0:0x58EA | 0:0x5742 | 범위 0~소지금. 밖의 값은 다시 입력받음 |
| 32비트 나눗셈 | 0:0x36A2 | 부호 있는 long 나눗셈(C 런타임) | |
작은 값 고르기 min(a, b) | 0:0x4D42 | 부호 없는 16비트 비교 | |
난수 random(n) | 0:0x4D86 | 0 ~ 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 초과 ~ G | 1 | +10 |
경계는 나눗셈 내림 때문에 위처럼 "초과 ~ 이하"가 됩니다. 예: G = 10,000에서 D = 1,000이면 q = 10(+1), D = 1,001이면 q = 9(+2).
예: 소지금 10,000
| 기부액 | q | 결과 |
|---|---|---|
| 909 | 11 | 메시지 94, 운 변화 없음 |
| 910 | 10 | 메시지 95, 운 +1 (최소 문턱) |
| 1,000 | 10 | 운 +1 |
| 1,001 ~ 1,111 | 9 | 운 +2 |
| 2,000 | 5 | 운 +6 |
| 3,334 ~ 5,000 | 2 | 운 +9 |
| 5,001 ~ 10,000 | 1 | 운 +10 |
910 이상이면 R(최대 500)을 항상 넘으므로 확률 없이 오릅니다.
100~499 금화 기부의 확률
R은 100·200·300·400·500이 각각 1/5입니다. 큰 기부 조건(q ≤ 10)을 채운 뒤 운이 오를 확률은 다음과 같습니다. 확인됨[직접]
| 기부액 D | 운이 오를 확률 |
|---|---|
| 1 ~ 99 | 0 |
| 100 ~ 199 | 1/5 |
| 200 ~ 299 | 2/5 |
| 300 ~ 399 | 3/5 |
| 400 ~ 499 | 4/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) | 확인됨[직접] |
| 쥐 떼 | 0x1E13E | 30일 넘음, 고양이 없음, r(floor(항해 레벨/5)+2) = 0, r(105) > 운 | 확인됨[직접] (navigation.md) |
| 괴혈병 | 0x1E221 | 60일 넘음, r(105) > 운 | 확인됨[직접] |
| 폭풍·무풍·안개 피하기 | 0x1E894 | 주인공과 일등항해사·항해장 중 가장 높은 운 L로 L + 50 ≥ r(155)이면 무사 | L 고르기 확인됨[직접], 비교식 확인됨[대조] |
| 물 찾기 | 0x39953 | 운 × W > r(100) (사막 W=0) | 확인됨[직접] (landing.md) |
| 마을 탐색 | 0x39543 | floor(7×직감/20) + floor(3×운/20) + 친밀도 > 난이도 | 확인됨[직접] (landing.md) |
| 주점: "○○국이 당신을 노린다" 정보 | 0x2AC04 | r(200) < 운일 때 국가를 훑음 | 확인됨[직접] |
| 빚쟁이 받기 의뢰 | 0x2AFFB | r(100) > 운이고 r(3) = 0이면 빚쟁이가 달아남(메시지 610·613) | 확인됨[직접] |
| 도구점 되팔기 재흥정 | 0x2EACB | 운 ≥ r(100)이면 더 높은 값 제시 | 확인됨[직접] |
| 조선소 희귀 선수상 | 0x3112D | 경제·공업 > 800, 운 > 80, r(20) = 0이면 천사 추가, 이어 r(운) ≥ 90이면 여신도 추가 | 확인됨[직접] |
| 조선소 캐로네이드 포 | 0x311FC | 경제·공업 > 900, 운 > 90, r(20) = 0 | 확인됨[직접] |
| 소문(발견물 위치)이 맞을 확률 | 0x32480 | r(80) ≤ 운이면 진짜 좌표 | 확인됨[직접] |
| 점술가 운세 | 0x31F8E | floor(운 / 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을 고르는 부분만 직접 읽고 뒷부분은 영문판과 대조했습니다. - 시나리오 바이트코드가 운을 바꾸는 경우를 전부 모으지는 않았습니다(주앙의 기부 사건만 확인).