# 대항해시대 2 백과 (DOS 한글판) > DOS용 '대항해시대 2'(Uncharted Waters: New Horizons, KOEI, 1993) 한글판의 게임 자료를 보고 고치는 웹 편집기입니다. > 모든 화면은 JS 없이도 표(HTML )로 자료를 보여 주고, 같은 자료를 JSON·CSV·Markdown으로 내려받을 수 있습니다. > 저장(수정 파일 만들기)은 원본 게임 파일을 절대 바꾸지 않고, 바뀐 파일만 내려보냅니다. 기준 주소: https://uw2.sijun.kr ## 화면 (HTML, JS 없이 읽기 가능) - / : 백과 첫 화면 (목차, 개수, 찾기 상자) - /search?q=<말> : 이름·설명·대사·규칙 문서 전체 찾기 (서버에서 처리, JS 불필요) - /az : 모든 이름 가나다 색인 - /world : 세계 지도 + 항구·발견물 위치(SVG, 누르면 상세). 그림: /img/world.png (2160×1080, 1칸=1픽셀), /img/world-half.png - /img/map/port/<번호>.png, /img/map/discovery/<번호>.png : 그 위치 주변 지도(빨간 표시) - /nations, /nations/<0-6> : 국가(6은 해적): 수도·공격성·노리는 나라, 처음 관계표(동맹·봉쇄), 지지 항구, 함대, 항해사 - /fleets, /fleets/<0-69> : 함대 70개(새 게임 자료 0x2182, 133바이트씩): 나라, 종류, 항해사, 모항, 배 수, 금고, 위치, 상태. /img/map/fleet/<번호>.png 위치 지도 - /titles : 작위 9단계(DATA1.LZW 16·17번)와 왕명 자격 명성 500 × (작위 + 1)² - /ports/by-region : 지역별 항구, /trade : 교역로(기준가 차익), /ships/compare?sort=<키>&order=asc|desc : 선박 비교표 - /items/by-category, /discoveries/by-type, /sailors/by-nation?skill=<비트> : 묶어 보기 - /story : 주인공 6명과 시나리오, /glossary : 용어, /sources : 자료 출처(파일·오프셋) - /rules : 게임 규칙 분석 문서 목록, /rules/<이름> : 문서(HTML), /rules/<이름>.md : 원문 Markdown (문서가 없으면 '분석 중') - 지도 좌표: 자료의 (x, y)는 지도 그림의 ((x + 720) mod 2160, y) 칸 - /editor : 시나리오 대사 편집기 + 시나리오 목록 - /scenarios : 시나리오 목록, /scenarios/<0-6> : 시나리오 대사(장면 순서와 전체 대사), /scenarios/general : 공통 대사(MESSAGE.DAT) - 게임 규칙 문서 13개 (요청할 때마다 docs/ 폴더를 읽어 만듭니다): - https://uw2.sijun.kr/rules/index : 대항해시대 2 (한글 DOS판) 내부 규칙·공식 문서 (원문 https://uw2.sijun.kr/rules/index.md) - https://uw2.sijun.kr/rules/character : 인물: 능력치, 레벨, 경험치, 명성, 충성도, 급여, 나이 (원문 https://uw2.sijun.kr/rules/character.md) - https://uw2.sijun.kr/rules/church : 교회와 모스크: 기도·기부, 그리고 운 (원문 https://uw2.sijun.kr/rules/church.md) - https://uw2.sijun.kr/rules/combat : 해전과 결투 (원문 https://uw2.sijun.kr/rules/combat.md) - https://uw2.sijun.kr/rules/data-formats : 자료 파일 형식: 게임 파일 전부와 기록 배치 (원문 https://uw2.sijun.kr/rules/data-formats.md) - https://uw2.sijun.kr/rules/items : 도구: 분류, 사용 효과, 측량, 항해 용품, 보물 지도 (원문 https://uw2.sijun.kr/rules/items.md) - https://uw2.sijun.kr/rules/landing : 상륙: 상륙할 수 있는 땅, 물 찾기, 마을 탐색·환대·약탈, 보물 파내기 (원문 https://uw2.sijun.kr/rules/landing.md) - https://uw2.sijun.kr/rules/misc : 기타: 은행, 주점, 여관, 조선소, 아이템, 건물 시간, 월간 처리, 이벤트 (원문 https://uw2.sijun.kr/rules/misc.md) - https://uw2.sijun.kr/rules/navigation : 항해 (원문 https://uw2.sijun.kr/rules/navigation.md) - https://uw2.sijun.kr/rules/npc : NPC 함대와 인물 (원문 https://uw2.sijun.kr/rules/npc.md) - https://uw2.sijun.kr/rules/relations : 국가 관계와 우호도: 저장 위치, 처음 값, 월간 변화, 해전 결과, 추방 (원문 https://uw2.sijun.kr/rules/relations.md) - https://uw2.sijun.kr/rules/scenario : 시나리오: 바이트코드, 길드 의뢰·왕명, 작위, 주인공별 이야기와 엔딩 (원문 https://uw2.sijun.kr/rules/scenario.md) - https://uw2.sijun.kr/rules/trade : 교역과 시세 (원문 https://uw2.sijun.kr/rules/trade.md) - /items/list : 도구 목록 표 (100개) (/items 는 편집기), /items/<번호 0-99> : 도구 하나의 모든 필드, 그림, 이전/다음 링크 - /discoveries/list : 발견물 목록 표 (100개) (/discoveries 는 편집기), /discoveries/<번호 0-99> : 발견물 하나의 모든 필드, 그림, 이전/다음 링크 - /ships/list : 선박 목록 표 (25개) (/ships 는 편집기), /ships/<번호 0-24> : 선박 하나의 모든 필드, 그림, 이전/다음 링크 - /sailors/list : 항해사 목록 표 (120개) (/sailors 는 편집기), /sailors/<번호 0-119> : 항해사 하나의 모든 필드, 그림, 이전/다음 링크 - /ports/list : 항구 목록 표 (130개) (/ports 는 편집기), /ports/<번호 0-129> : 항구 하나의 모든 필드, 그림, 이전/다음 링크 - /goods : 교역품 목록 표 (46개), /goods/<번호 0-45> : 교역품 하나의 모든 필드, 그림, 이전/다음 링크 - /portraits/list : 초상 목록 표 (128개) (/portraits 는 편집기), /portraits/<번호 0-127> : 초상 하나의 모든 필드, 그림, 이전/다음 링크 - /nations : 국가 목록 표 (7개), /nations/<번호 0-6> : 국가 하나의 모든 필드, 그림, 이전/다음 링크 - /fleets : 함대 목록 표 (70개), /fleets/<번호 0-69> : 함대 하나의 모든 필드, 그림, 이전/다음 링크 - /map : 세계 지도 편집기 (지도 자료는 /api/map, 타일 그림은 /api/map/tiles.png) ## 그림 (PNG, 게임 8색 팔레트) - /img/portrait/<번호>.png : 인물 초상 64×80 (0-127) - /img/picture/<번호>.png : 발견물·도구 그림 48×48 (KAO.LZW 128번부터, 0-127) - /img/item/<도구 번호>.png : 도구 그림 (= /img/picture/<85 + 도구의 그림 번호>.png) - /img/discovery/<발견물 번호>.png : 발견물 그림 (= /img/picture/<발견물의 그림 번호>.png) - 모든 그림 주소에 ?scale=1-8 를 붙이면 픽셀을 그대로 정수배 확대합니다. ETag/Last-Modified 캐시 머리를 줍니다. - 편집기용 한 장짜리 그림판: /api/portraits.png (16열), /api/pictures.png (16열) ## 내보내기 (읽기 전용) 각 자료는 /api/<자료>.json, /api/<자료>.csv, /api/<자료>.md 로 받습니다. .json 은 {resource, title, about, sourceFiles, fields:[{key,label,meaning}], rows:[{key: 값}]} 형식, .csv 는 첫 줄이 key(UTF-8, BOM), .md 는 필드 설명 표 + 자료 표입니다. 편집기가 쓰는 원래 형식(저장할 때 보내는 형식)은 /api/items, /api/discoveries, /api/ships, /api/sailors, /api/trade(항구·시장·교역품), /api/scenario/<0-6>, /api/general 입니다. ### items — 도구 도구점·비밀 상점에서 파는 무기·방어구·항해 도구 100개. 새 게임 자료(DATA1.LZW 15번 항목, MAIN.EXE 사본)와 ITEM.MES(설명). 원본 파일: DATA1.LZW, MAIN.EXE, ITEM.MES, KAO.LZW. 내보내기: /api/items.json, /api/items.csv, /api/items.md - id (번호): 도구 번호 0–99 - name (이름): 도구 이름 - category (종류): 도구 종류 이름 (MAIN.EXE의 종류 목록) - price (가격): 도구점 가격(두카트), 100 단위 - rating (성능): 성능 수치(무기는 공격, 방어구는 방어, 측량기는 눈금 등). 보물 지도는 새 게임 때 게임이 이 값을 보물을 숨긴 발견물 번호로 바꿈 - image (그림 번호): 도구 그림 번호 0–42. 그림 파일은 /img/picture/(85+그림 번호).png - shops (파는 항구): 이 도구를 도구점에서 파는 항구 - secretShops (비밀 상점): 비밀로 파는 항구 - description (설명): 도구 설명 (ITEM.MES) ### discoveries — 발견물 탐험으로 찾는 유적·동식물 등 100개(98개 사용). 이름·그림·설명은 COLONY.DAT, 위치·난이도·종류는 새 게임 자료. 원본 파일: DATA1.LZW, MAIN.EXE, COLONY.DAT, KAO.LZW. 내보내기: /api/discoveries.json, /api/discoveries.csv, /api/discoveries.md - id (번호): 발견물 번호 0–99 (98, 99는 게임이 쓰지 않는 빈 자리) - name (이름): 발견물 이름 - type (종류): 발견물 종류 이름 - difficulty (난이도): 발견 난이도 0–255 - fame (보고 명성): 보고했을 때 오르는 명성(난이도로 계산) - gold (보고 상금): 보고했을 때 받는 상금(두카트, 난이도로 계산) - x (가로): 세계 지도 가로 위치 - y (세로): 세계 지도 세로 위치 - picture (그림 번호): 그림 번호. 그림 파일은 /img/picture/<번호>.png - unused (빈 자리): 게임이 쓰지 않는 자리면 예 - description (설명): 발견물 설명 (COLONY.DAT) ### ships — 선박 조선소에서 사는 배 25종. 능력치는 새 게임 자료, 설명은 MESSAGE.DAT 168–192번. 원본 파일: DATA1.LZW, MAIN.EXE, MESSAGE.DAT. 내보내기: /api/ships.json, /api/ships.csv, /api/ships.md - id (번호): 배 종류 번호 0–24 - name (이름): 배 이름 - price (가격): 조선소 가격(두카트) - industry (필요 공업): 이 배를 만들 수 있는 항구의 최소 공업치 - durability (내구): 최대 내구도 - tacking (조타): 조타(돌기) 성능 - power (동력): 동력(노·돛 속도) 성능 - capacity (적재량): 전체 적재량 - maxGuns (최대 대포): 실을 수 있는 대포 수 - guns (기본 대포): 새로 샀을 때 실린 대포 - crew (기본 선원): 새로 샀을 때 선원 칸 - cargo (짐칸): 새로 샀을 때 짐칸 = 적재량 − 대포 − 선원 - minCrew (최소 선원): 항해에 필요한 최소 선원 - maxCrew (최대 선원): 태울 수 있는 최대 선원 - sailType (돛 종류): 돛 종류 번호 0–7 - description (설명): 조선소에서 보이는 배 설명 ### sailors — 항해사 주인공 6명과 주점에서 고용하는 항해사 등 120명. 새 게임 자료(DATA1.LZW, MAIN.EXE 사본)와 NAME.TBL(국가별 무작위 이름표). 원본 파일: DATA1.LZW, MAIN.EXE, NAME.TBL, KAO.LZW. 내보내기: /api/sailors.json, /api/sailors.csv, /api/sailors.md - id (번호): 항해사 번호 0–119 (0–5는 주인공) - name (이름): 이름과 성 - hero (주인공): 주인공이면 예 - nation (국적): 국적(포르투갈·에스파니아·오스만제국·영국·이탈리아·네덜란드·해적) - age (나이): 새 게임 시작 때 나이 - attr0 (통솔력): 능력치 통솔력 - attr1 (항해술): 능력치 항해술 - attr2 (지식): 능력치 지식 - attr3 (직감): 능력치 직감 - attr4 (용기): 능력치 용기 - attr5 (검술): 능력치 검술 - attr6 (매력): 능력치 매력 - attr7 (운): 능력치 운 - navigationLevel (항해 레벨): 항해 레벨 - battleLevel (전투 레벨): 전투 레벨 - navigationExp (항해 경험): 항해 경험치 - battleExp (전투 경험): 전투 경험치 - loyalty (충성도): 충성도 0–100 - duty (직책): 함대 안 직책 - port (있는 항구): 새 게임 시작 때 머무는 항구(주점) - skills (기술): 가진 기술(교섭·회계·포술·지도제작·측량) - portrait (초상 번호): 초상 번호. 그림 파일은 /img/portrait/<번호>.png ### ports — 항구 항구 130곳(0–99 일반 항구, 100–129 보급항). 위치·경제·공업·국가 지지·시세·특산품·도구점. 새 게임 자료(DATA1.LZW, MAIN.EXE 사본). 원본 파일: DATA1.LZW, MAIN.EXE. 내보내기: /api/ports.json, /api/ports.csv, /api/ports.md - id (번호): 항구 번호 0–129 - name (이름): 항구 이름 - kind (구분): 일반 항구 또는 보급항 - region (지역): 지역(유럽·신대륙 등) - x (가로): 세계 지도 가로 위치 - y (세로): 세계 지도 세로 위치 - economy (경제): 경제치 (보급항은 없음) - industry (공업): 공업치 (조선소에서 만들 수 있는 배를 정함) - marketInvestment (시장 투자): 시장 투자 누계 - shipyardInvestment (조선소 투자): 조선소 투자 누계 - allegiance (국가 지지): 국가별 지지도(0이 아닌 것만) - rates (시세): 교역품 종류별 시세(100이 보통) - specialty (특산품): 특산품, 기본 가격, 나오는 경제 조건 - market (시장 번호): 시장 가격표 번호 0–12 (/goods 참고) - buys (살 수 있는 교역품): 이 항구 시장 매입 목록의 교역품(필요 경제) - shop (도구점): 도구점에서 파는 도구 3칸 - secret (비밀 상품): 비밀로 파는 도구 ### goods — 교역품 교역품 46가지와 시장(0–12)별 판매가·매입 목록. 이름은 MAIN.EXE, 가격은 새 게임 자료. 원본 파일: DATA1.LZW, MAIN.EXE. 내보내기: /api/goods.json, /api/goods.csv, /api/goods.md - id (번호): 교역품 번호 0–45 - name (이름): 교역품 이름 - category (분류): 교역품 분류(향신료·섬유 등) - salePrices (시장별 판매가): 시장 번호:이 교역품을 팔 때 기준 가격 - bought (매입 시장): 시장 번호:살 수 있는 가격(경제 조건) ### portraits — 초상 KAO.LZW의 인물 초상(64×80, 8색). 대화 화자와 항해사 얼굴. 원본 파일: KAO.LZW, DATA1.LZW, MAIN.EXE. 내보내기: /api/portraits.json, /api/portraits.csv, /api/portraits.md - id (번호): 초상 번호 - image (그림): 초상 그림 주소 - sailors (쓰는 항해사): 이 초상을 쓰는 항해사 ### messages — 대사 시나리오별 대사(SNR0–6.MES)와 공통 대사(MESSAGE.DAT). $n 등은 게임이 채우는 자리 표시. 원본 파일: SNR0.MES, SNR0.DAT, SNR1.MES, SNR1.DAT, SNR2.MES, SNR2.DAT, SNR3.MES, SNR3.DAT, SNR4.MES, SNR4.DAT, SNR5.MES, SNR5.DAT, SNR6.MES, SNR6.DAT, MESSAGE.DAT. 내보내기: /api/messages.json, /api/messages.csv, /api/messages.md - scenario (시나리오): 시나리오 번호 0–6 또는 general(공통 대사) - scenarioTitle (시나리오 이름): 시나리오 이름 - id (대사 번호): 그 파일 안의 대사 번호 - speaker (화자): 말하는 사람(없으면 빈칸) - body (내용): 대사 내용. $n=주인공 이름 등 게임이 채우는 자리 - uses (쓰인 곳): 시나리오 장면에서 이 대사를 부르는 횟수 ### nations — 국가 여섯 나라와 해적. 항구 자료의 국가 지지(새 게임 시작 때)와 항해사 국적에서 모았습니다. 이름은 항구 자료 표기, 항해사 자료 표기는 별칭. 원본 파일: DATA1.LZW, MAIN.EXE, NAME.TBL. 내보내기: /api/nations.json, /api/nations.csv, /api/nations.md - id (번호): 국가 번호 (항구 지지 칸 순서, 6은 해적) - name (이름): 국가 이름 (항구 자료 표기) - alias (별칭): 항해사 자료의 국가 이름 표기 - leadPorts (지지 1위 항구 수): 이 나라 지지가 가장 높은 항구 수 - fullPorts (지지 100 항구): 이 나라만 지지하는 항구 - sailors (항해사 수): 이 국적 항해사 수 - heroes (주인공): 이 나라 주인공 ### fleets — 함대 함대 위치 70개가 모두 바다·해안 칸에 놓여 좌표계가 항구와 같음을 확인했습니다. 새 게임 자료(DATA1.LZW 15번) 0x2182부터 0x85바이트 × 70개의 함대 기록. 번호 10개씩 한 나라(포르투갈 0, 에스파냐 10, 오스만 20, 잉글랜드 30, 이탈리아 40, 네덜란드 50, 해적 60). 함대 종류(위치 0 주인공, 1–4 상선단, 5–6 호위대, 7–9 원정대)와 목표 이름은 외부자료(docs/npc.md). 원본 파일: DATA1.LZW, MAIN.EXE, NAME.TBL. 내보내기: /api/fleets.json, /api/fleets.csv, /api/fleets.md - id (번호): 함대 번호 0–69 - nationName (나라): 번호 ÷ 10 (6 = 해적) - role (종류): 나라 안 위치로 나눈 함대 종류 (외부자료) - leader (항해사): 항해사 기록의 함대 번호가 이 함대인 항해사 - homeName (모항): 기록 +0x26 모항 (항구 번호) - ships (배 수): 기록 +0x2B 배 칸 10개 중 비어 있지 않은 칸 수 - gold (금고): 기록 +0x24 (× 100 금) - position (현재 위치): 기록 +0x00/+0x02 (항구와 같은 자료 좌표) - wait (대기 일수): 기록 +0x27 도착 뒤 대기 일수 - flags (상태): 기록 +0x29 플래그 (0x01 활동, 0x10 정박, 0x40 시나리오 함대) - objective (목표): 기록 +0x1B (뜻은 외부자료) ### routes — 교역로 살 수 있는 항구(경제 조건 충족)마다 판매 기준가가 가장 높은 항구를 고른 한 단위 차익 목록. 기준가만 쓴 계산이고 시세·투자·세금·변동은 넣지 않았습니다. 원본 파일: DATA1.LZW, MAIN.EXE. 내보내기: /api/routes.json, /api/routes.csv, /api/routes.md - id (순위): 차익 순위 - good (교역품): 교역품 이름 - buyPort (사는 항구): 사는 항구 - buyPrice (매입 기준가): 사는 항구의 매입 기준가(특산품이면 특산품 기준가) - sellPort (파는 항구): 판매 기준가가 가장 높은 항구 - sellPrice (판매 기준가): 파는 항구 시장의 판매 기준가 - margin (차익): 판매 기준가 − 매입 기준가 (한 단위) - distance (거리): 두 항구 사이 지도 칸 직선 거리(가로는 둥글게 이어짐) - specialty (특산품): 특산품으로 사는 경우 예 ## 저장 API (수정 파일 만들기) POST 요청은 원본 dos 파일을 바꾸지 않습니다. 서버가 메모리에서 수정본을 만들고 검증(LS11 압축을 다시 풀어 비교 등)한 뒤 내려보냅니다. - 바뀐 파일이 하나면 그 파일(원래 DOS 파일 이름, Content-Disposition: attachment, application/octet-stream). - 여러 개면 zip(application/zip, 이름 uw2-<편집기>-YYYYMMDD-HHMMSS.zip, 안에는 원래 이름의 파일들). - 바뀐 것이 없으면 200 JSON {"saved": false, "message": ...}. 잘못된 값은 400 JSON {"error": ...}. - 응답 머리 X-UW2-Filename, X-UW2-Files, X-UW2-Message (URL 인코딩). - 새 게임 자료(DATA1.LZW 15번 항목)를 바꾸면 MAIN.EXE 안의 같은 사본(252128바이트부터)도 같이 바꿉니다. 본문 형식 (먼저 GET 으로 받은 형식을 고쳐서 그대로 보냅니다): - POST /api/items JSON {"items": [GET /api/items 의 items 행...]} → DATA1.LZW, MAIN.EXE, ITEM.MES 중 바뀐 것 - POST /api/discoveries JSON {"discoveries": [...]} → DATA1.LZW, MAIN.EXE, COLONY.DAT - POST /api/ships JSON {"ships": [...]} → DATA1.LZW, MAIN.EXE, MESSAGE.DAT - POST /api/sailors JSON {"sailors": [...], "names": [...]} → DATA1.LZW, MAIN.EXE, NAME.TBL - POST /api/trade JSON {"ports": [...], "markets": [...], "goods": [...]} → DATA1.LZW, MAIN.EXE - POST /api/general JSON {"edits": [{"id": 대사 번호, "speaker": ..., "body": ...}]} → MESSAGE.DAT - POST /api/scenario/<0-6> JSON {"steps": [단계...]} 단계는 차례로 적용: {"edits": [...], "append": [{"speaker","body"}], "retargets": [{"messageOffset", "messageId"(번호 또는 "new")}], "routes": [{"keyOffset","selector","qualifier"}], "addRoutes": [...]} → SNR.MES, SNR.DAT. 같은 본문을 /api/scenario//preview 로 보내면 적용 결과 화면 자료(JSON)만 돌려줍니다. - POST /api/map 바이너리: GET /api/map 과 같은 4바이트 머리 + 격자 → WORLDMAP.LZW - POST /api/portraits 바이너리: (초상 번호 u16 big-endian + 64×80 픽셀, 픽셀은 색 번호 0-7) 묶음 반복 → KAO.LZW. /api/portraits/<번호> 는 픽셀 5120바이트 하나. ## 기타 - /robots.txt : 모두 허용, /favicon.png : 사이트 아이콘(게임의 육분의 그림), /img/og.png : 미리보기 그림(세계 지도) - 숫자는 게임 안의 값 그대로입니다(가격 단위 두카트). 텍스트는 CP949 한글판에서 읽었습니다.