콘텐츠로 이동

Switch - 리팩

Switch 게임 파일을 관리하고 언팩/리팩하는 탭입니다. 여러 타이틀을 한 번에 다룰 수 있으며, 본편/업데이트는 자동으로 최근 추가한 것으로 교체되고 DLC는 계속 추가됩니다.

키파일 필수

이 기능은 Switch 키파일(prod.keys)이 반드시 있어야 동작합니다. 키파일 구하는 방법은 실행 및 키파일 설정을 참고하세요.

지원 입력 형식: NSP, NSZ, XCI, XCZ

화면 구성

탭이 파일설정 두 개로 나뉩니다.

파일 탭

  • 타이틀 목록 — 종류, 타이틀(아이콘/이름/타이틀ID), 버전, 패치, 확장자, 용량이 표시됩니다.
    • 게임 파일이나 폴더를 목록에 드래그 앤 드롭하면 추가됩니다.
    • 목록에서 우클릭하면 폴더 열기, 한글패치 취소, 선택 삭제, 전체 삭제 메뉴를 사용할 수 있습니다.
    • 각 타이틀의 패치 칸을 클릭하거나 드래그하면 한글패치를 지정할 수 있습니다. 클릭하면 폴더 선택..., 압축파일 선택(zip/7z)... 메뉴로 지정할 수도 있습니다.
  • 오른쪽 버튼 — 파일 추가, 폴더 추가, 한글패치 일괄 지정(클릭 시 폴더에서 찾기... / 압축파일에서 찾기(zip/7z)... 선택 가능, title ID 기준으로 자동 매칭), 선택 삭제, 전체 삭제, 도움말

image

설정 탭

  • 지원 언어 목록 — 체크된 언어만 사용 가능하며, 체크 해제 시 강제로 비활성화됩니다.
  • 커버 이미지 — PNG, JPG, GIF, BMP, WEBP 지원. 드래그 앤 드롭으로 설정, 반대로 드래그하면 추출됩니다.
  • 타이틀명
  • 변경할 Title ID — 16자리 16진수(예: 0100000000010000)로 입력합니다. 비워두면 원본 Title ID가 그대로 유지됩니다.
  • 배급사
  • 멀티롬 인덱스 — 하나의 NSP 안에 여러 게임이 들어 있는 경우, 인덱스를 지정한 뒤 리팩하면 해당 인덱스의 게임만 별도 NSP로 만들 수 있습니다.
  • 강제 언어 설정 / 강제 언어 취소 — 강제 언어 설정을 적용하면 선택한 언어만 남기고 나머지는 전부 비활성화됩니다.

image

공통

  • 작업 폴더 — 여기 지정한 폴더 아래에 unpacked(언팩 결과), temp(작업용 임시 파일), build_nca(리빌드용 임시 파일) 세 개의 하위 폴더가 만들어집니다. 마지막으로 사용한 작업 폴더는 자동으로 기억되어 다음 실행 때도 그대로 유지됩니다.
  • 언팩 / 리팩 / 언팩 + 리팩(Full) 버튼
  • 진행률 — 진행률, 속도, 경과 시간

타이틀 목록에 파일을 추가할 때 실제로 일어나는 일

  • 본편(Base)과 업데이트(Update)는 종류당 최대 1개만 유지됩니다. 이미 본편이 목록에 있는 상태에서 본편 파일을 하나 더 추가하면, 버전을 비교하지 않고 무조건 방금 추가한 파일이 이전 것을 대체합니다. (업데이트도 동일) 즉 "더 높은 버전인지" 자동으로 판단해주는 게 아니라, 단순히 "가장 최근에 넣은 게 이긴다"는 규칙이니, 여러 버전을 갖고 있다면 최신 버전을 마지막에 넣어야 합니다.
  • DLC는 대체 없이 계속 쌓입니다. 다만 같은 DLC(같은 Title ID)를 실수로 두 번 추가하면 목록에 중복으로 남는데, 둘 다에 한글패치를 지정한 채로 실행하면 빌드 자체가 실패합니다. 같은 DLC는 하나만 남기고 나머지는 삭제하세요.
  • 하나의 NSP/XCI 안에 본편과 DLC가 같이 들어있는 경우, 자동으로 분리되어 본편은 본편 행으로, DLC는 각각 별도의 행으로 나뉘어 추가됩니다.
  • 새로 추가된 본편/업데이트가 기존에 지정되어 있던 파일을 대체할 때, 새로 추가하는 파일 자체에 패치가 지정되어 있지 않다면 대체되기 전 파일에 걸려있던 한글패치(비밀번호 포함)를 그대로 이어받습니다. 새 버전 파일로 교체할 때마다 패치를 다시 지정할 필요가 없습니다.

한글패치 자동 동기화 (숨은 기능)

본편과 업데이트에 지정하는 한글패치는 항상 서로 자동으로 동기화됩니다.

  • 본편 행의 패치 칸에 패치를 지정하면, 업데이트 행에도 똑같은 패치가 자동으로 복사됩니다. 반대로 업데이트 쪽에 지정해도 마찬가지로 본편 쪽에 복사됩니다.
  • 둘 중 하나를 바꾸면 다른 하나도 즉시 따라 바뀝니다. 둘을 서로 다르게 지정해둘 수는 없습니다(다르게 되어 있으면 방금 바꾼 쪽 값으로 강제로 맞춰집니다).
  • 목록에서 한글패치 취소를 실행하면, 그 항목뿐 아니라 짝이 되는 본편/업데이트 쪽 패치도 함께 취소됩니다.
  • DLC는 이 동기화 대상이 아닙니다. DLC별 패치는 각 DLC 행에 독립적으로 지정합니다.

이 때문에 실제로는 본편이나 업데이트 둘 중 아무 곳에나 한 번만 한글패치를 지정하면 됩니다. (내부적으로는 리팩 시 "본편에 지정된 게 있으면 그걸 우선 사용하고, 없으면 업데이트 쪽을 사용"하는 방식으로 동작하지만, 위 동기화 덕분에 평소에는 이 우선순위를 신경 쓸 일이 거의 없습니다.)


한글패치 압축파일 비밀번호 (숨은 기능)

패치 칸에서 압축파일 선택(zip/7z)... 으로 비밀번호가 걸린 압축파일을 선택하면, 자동으로 비밀번호 입력 창이 뜹니다. 입력한 비밀번호는 해당 항목에 저장되어, 실제 리팩 시 압축을 여는 데 그대로 사용됩니다. 이 동작은 개별 지정과 한글패치 일괄 지정 양쪽 모두에서 동일하게 적용됩니다. DLC마다 서로 다른 비밀번호가 걸린 압축파일을 지정해도 각 DLC별로 독립적으로 저장되어 처리됩니다.

image


언팩 / 리팩 / 언팩+리팩(Full) 동작 차이

버튼 동작
언팩 작업 폴더의 unpacked/temp/build_nca를 전부 비우고 새로 만든 뒤, 원본 게임 파일을 언팩까지만 진행하고 멈춥니다. 리빌드는 하지 않습니다.
리팩 이전에 언팩으로 만들어둔 unpacked 폴더의 결과를 그대로 스캔해서 재사용하며, 원본 게임 파일이 목록에 없어도(비어 있어도) 실행할 수 있습니다. build_nca만 새로 비우고 다시 만듭니다.
언팩 + 리팩(Full) 언팩부터 리팩까지 한 번에 처리합니다. unpacked/temp/build_nca를 전부 비우고 새로 시작합니다.
  • 언팩 또는 Full을 실행할 때, 작업 폴더에 이미 unpacked 폴더가 남아있으면 "기존 언팩 데이터를 삭제하고 새로 진행할까요?"라고 먼저 확인합니다. 확인하면 기존 언팩 데이터는 통째로 삭제되고 처음부터 다시 진행됩니다.
  • 리팩만 단독 실행하려면 작업 폴더에 unpacked 폴더가 반드시 있어야 하며, 없으면 "언팩된 데이터가 없습니다" 오류로 실행되지 않습니다.
  • 작업 중 취소하면, temp/build_nca는 항상 삭제됩니다. unpacked리팩 단독 실행 중 취소한 경우에만 보존되고, 언팩/Full 진행 중 취소하면 unpacked도 함께 삭제됩니다.
  • 목록에 원본 파일 중 하나라도 키 인식 실패("키 없음") 상태인 항목이 있으면, 언팩/Full 실행 자체가 시작되지 않고 바로 오류로 멈춥니다. (리팩 단독 실행은 원본 파일을 안 보므로 이 체크에 걸리지 않습니다.)

사용 방법

한글패치 배포 방식에 따라 2가지 케이스로 나뉩니다.

케이스 1) LayeredFS 방식 (대부분의 한글패치)

romfs, exefs 폴더가 그대로 들어있는, 원본 파일을 통째로 교체하는 방식의 한글패치입니다. 대부분의 Switch 한글패치가 이 케이스입니다.

  1. 게임 파일(본편/업데이트/DLC)을 목록에 드래그 앤 드롭합니다. 본편/업데이트는 나중에 추가한 것으로 교체되고, DLC는 계속 추가됩니다.
  2. 패치 칸에 패치 폴더 또는 zip/7z 압축파일을 그대로 지정합니다. 압축을 미리 풀 필요는 없습니다. 비밀번호가 걸려있으면 자동으로 입력창이 뜹니다. 여러 타이틀에 한꺼번에 적용하려면 한글패치 일괄 지정 버튼을 사용하세요.
  3. 필요하면 설정 탭에서 언어, 커버 이미지, 타이틀명, 배급사, Title ID, 멀티롬 인덱스, 강제 언어 설정을 조정합니다.
  4. 작업 폴더를 지정합니다.
  5. 언팩, 리팩, 또는 언팩 + 리팩(Full) 중 상황에 맞는 것을 실행합니다.

image

케이스 2) xdelta 패치

한글패치가 통파일을 통째로 교체하지 않고, abc.xdelta처럼 원본과의 차이(diff)만 담은 파일로 배포되는 경우입니다. 용량이 작다는 장점 때문에 일부 한글패치가 이 방식을 씁니다.

동작 방식

  • 패치 폴더(또는 압축파일)에 abc.xdelta 같은 파일이 있으면, RomForge는 romfs 안에서 이름이 일치하는 abc.* 파일을 찾아 자동으로 대상을 지정합니다.
  • 즉 파일명이 곧 패치 대상을 가리키는 열쇠입니다. 예를 들어 data.arc.xdelta가 있으면 romfs/data.arc를 찾아서 패치를 시도합니다.
  • 추가로 11_abc.org_kr_v1.2.xdelta 같은 파일이 있으면, RomForge는 romfs 안에서 이름이 포함되는 11_abc.org, abc.org, abc.org_kr 등의 파일을 찾아 자동으로 대상을 지정합니다.
  • romfs, exefs 같은 세부 폴더 구조를 그대로 맞춰서 넣을 필요는 없습니다. 패치 폴더 루트에 그냥 던져 놓아도 하위 전 폴더를 뒤져서 알아서 대상을 찾아 패치합니다.

원본 검증

  • xdelta는 diff 기반이라 원본 파일이 패치 제작 당시와 정확히 일치해야만 적용됩니다.
  • 원본과 바이트 단위로 일치하지 않는 파일은 자동으로 건너뛰고, 일치하는 파일만 패치됩니다. (오류로 멈추지 않고 조용히 스킵되니, 패치가 하나도 안 먹었다면 원본 버전이 패치 제작 당시와 다른지부터 의심해보세요.)

폴더 구조 예시

한글패치.zip
└─ data.arc.xdelta        ← romfs/data.arc 를 자동으로 찾아서 패치

나머지 진행 방법(게임 추가 → 한글패치 지정 → 언팩/리팩)은 케이스 1과 동일합니다.

image

IPS 패치 자동 처리

IPS 패치는 자동으로 처리됩니다.

Atmosphere 커스텀 펌웨어에서 쓰는 exefs_patches 규격을 그대로 지원합니다. 코드(NSO) 자체를 통째로 바꾸지 않고, 특정 오프셋만 골라 패치하는 IPS(Classic IPS, IPS32) 형식입니다. 주로 게임 실행 파일(main, sdk 등)의 텍스트나 로직을 살짝 건드리는 한글패치에서 이 방식을 씁니다. 예) 한글 키보드 지원 등

폴더 구조

한글패치.zip
└─ exefs_patches/
   └─ 패치이름(임의)/
      └─ FCF93A41B08C5193A1410D262602DC621617C56F.ips ← 패치 대상 NSO(main,sdk)의 ModuleID와 일치해야 함
  • exefs_patches 바로 아래 폴더 이름은 패치 세트를 구분하는 용도일 뿐, 아무 이름이나 상관없습니다.
  • 그 안의 .ips 파일명은 패치할 NSO 모듈ID(main, sdk 등)와 반드시 일치해야 인식됩니다.

모듈ID 매칭

  • IPS 패치 파일명은 대상 NSO의 모듈ID.ips 입니다. RomForge는 리팩 시 실제 NSO의 모듈ID와 이 값을 비교해서, 일치할 때만 패치를 적용합니다.
  • 모듈ID가 다르면(즉 패치 제작 당시와 게임 버전이 다르면) 패치가 조용히 건너뛰어지고 로그에 불일치 메시지가 남습니다. 패치가 안 먹는다면 가장 먼저 이 로그를 확인하세요.

처리 흐름

  1. 대상 NSO를 자동으로 압축 해제(디컴프레스)합니다.
  2. IPS 패치를 적용합니다.
  3. 다시 압축해서 원래 형식으로 되돌린 뒤 리팩합니다.

이 과정은 모두 자동으로 처리되므로, 한글패치 폴더/압축파일만 지정하면 되며, 내부에 IPS 파일이 포함된 압축파일이 있는 경우는 자동으로 압축 해제 후 패치합니다.


강제 언어 설정 활용

일본어를 한글로 패치한 게임의 경우 미국 영어가 있으면 그쪽이 우선 활성화되는 경우가 있습니다. 게임 내부에 언어 설정 기능이 없을 때 강제 언어 설정을 쓰면 별도 설정 없이 바로 한글로 나오게 할 수 있습니다.