1편부터 5편까지 착실하게 따라오셨다면, 이제 여러분의 작업 폴더에는 7개의 .ttarch2 파일(폰트, 공용UI, 에피소드 1~5)이 준비되어 있을 겁니다. 이제 이 파일들을 게임 엔진이 인식하게 만드는 마지막 관문, LUA 스크립트를 정복해 봅시다.
1. 가장 먼저 해야 할 일: LUA 파일의 암호화 이해
본격적인 코드 작성에 앞서 반드시 알아야 할 점이 있습니다. 테일즈 프롬 더 보더랜드 엔진은 메모장으로 작성한 일반적인 .lua 텍스트 파일을 읽지 못합니다. 5편 패킹 과정에서 설정했던 것처럼, 반드시 Auto(De)Packer를 통해 바이너리 암호화(Encrypt)를 거친 LUA 파일만 인식합니다. 즉, 코드를 짠 뒤 툴을 통해 최종 결과물을 만들어야 한다는 뜻입니다.
2. LUA 스크립트 작성 및 코드 정밀 분석
메모장을 열어 아래 내용을 작성하세요. 저는 관리 효율을 위해 폰트와 공용 자막 아카이브를 하나의 루아 파일로 묶어서 관리하며, 각 에피소드 자막은 별도의 루아로 지정합니다.
※ 공용 데이터 루아 (_resdesc_50_Common_KOR.lua) 분석
local set = {}
set.name = "Common_KOR_Patch" -- 패치 세트의 고유 이름
set.setName = "Common_KOR_Patch"
set.descriptionFilenameOverride = ""
set.logicalName = ""
-- [매우 중요] 공통 데이터(폰트, 메뉴 등)는 게임의 루트 주소인 <>가 타겟입니다.
set.logicalDestination = "<>"
-- [로드 서열] 우선순위를 1500으로 설정하여 순정 데이터보다 먼저 읽히게 합니다.
set.priority = 1500
set.localDir = _currentDirectory -- 현재 루아가 있는 폴더 참조
set.enableMode = "constant"
set.version = "trunk"
set.descriptionPriority = 0
set.gameDataName = "Common_KOR_Patch Game Data"
set.gameDataPriority = 0
set.gameDataEnableMode = "constant"
set.localDirIncludeBase = true
set.localDirRecurse = false -- 하위 폴더 탐색 안 함
set.localDirIncludeOnly = nil
set.localDirExclude = { "_dev/" }
-- [아카이브 리스트] 하나의 루아에 두 개의 파일을 묶는 핵심 파트입니다.
-- 폰트 파일과 공용 자막 파일을 리스트로 만들어 동시에 엔진에 주입합니다.
set.gameDataArchives =
{
_currentDirectory .. "Borderlands_pc_Font_KOR.ttarch2",
_currentDirectory .. "Borderlands_pc_Common_KOR.ttarch2"
}
RegisterSetDescription(set)
※ 에피소드 전용 루아 (Borderlands101_KOR.lua) 상세 분석
local set = {}
-- 패치 세트의 이름을 지정합니다.
set.name = "Borderlands101_KOR_Patch"
set.setName = "Borderlands101_KOR_Patch"
set.descriptionFilenameOverride = ""
set.logicalName = "<Borderlands101_KOR_Patch>"
-- [핵심] 에피소드 1 전용 가상 경로 지정.
-- 공용(Common)은 <>이지만, 에피소드는 반드시 해당 폴더명 <Borderlands101>을 찔러줘야 합니다.
-- 이 경로가 틀리면 게임은 에피소드 로딩 시 우리 한글 아카이브를 찾지 못합니다.
set.logicalDestination = "<Borderlands101>"
-- [우선순위] 로드 순서입니다. 러시아팀 기준(1500) 이상으로 설정하여
-- 순정 영문 자막보다 우리 패치가 먼저 화면에 출력되도록 서열을 정리합니다.
set.priority = 1500
set.localDir = _currentDirectory
set.enableMode = "constant"
set.version = "trunk"
set.descriptionPriority = 0
set.gameDataName = "Borderlands101_KOR_Patch Game Data"
set.gameDataPriority = 0
set.gameDataEnableMode = "constant"
set.localDirIncludeBase = true
set.localDirRecurse = false -- 속도를 위해 하위 폴더 탐색은 끕니다.
set.localDirIncludeOnly = nil
set.localDirExclude = { "_dev/" } -- 불필요한 개발 폴더 제외
-- [아카이브 매핑] 해당 에피소드의 자막이 들어있는 ttarch2 파일명을 적습니다.
set.gameDataArchives =
{
_currentDirectory .. "Borderlands_pc_Borderlands101_KOR.ttarch2"
}
RegisterSetDescription(set)
💡 중요 안내: 각 에피소드(1~5)마다logicalDestination과gameDataArchives의 파일명을 맞춰서 루아 파일을 각각 만들어야 합니다. 이 과정이 번거롭다면, 이 설정 문법 전체를 복사해서 AI(ChatGPT, Gemini 등)에게 입력하고 "내 ttarch2 파일명에 딱 맞는 코드를 만들어줘"라고 요청하세요. 1초 만에 정확한 코드를 완성해 줄 겁니다.
3. Auto(De)Packer를 이용한 최종 루아 빌드

코드를 다 짰다면 이제 5편에서 배운 툴 설정을 실제로 활용할 단계입니다.


4. 진짜 최종 적용: 판도라로 떠날 시간
이제 암호화된 .lua 파일들과 우리가 빌드한 7개의 .ttarch2 파일들을 모두 게임 설치 폴더 내의 Archives 폴더에 넣으세요. 게임을 실행하면 감격스러운 한글 자막이 여러분을 맞이할 겁니다.
돈 한 푼 나오지 않고 누구 하나 알아주지 않는 이 고된 작업을 끝내면서,
그래도 나름의 성취감과 뿌듯함을 느끼며 이 글을 마무리할 수 있어서 참 기쁩니다.
화이트 스크린에 절망하고 머리도 수없이 쥐어뜯었지만, 다 끝난 지금은 그저 즐겁네요.
여러분도 이 즐거움을 함께 느꼈으면 좋겠다는 마음에서 이 모든 과정을 기록해 봤습니다.
고생 많으셨습니다. 이제 즐겁게 게임을 즐겨주세요!
'[Lab] AI 조련과 피지컬 노트' 카테고리의 다른 글
| 테일즈 프롬 더 보더랜드 한패 삽질기 (5) - 패킹 (0) | 2026.01.27 |
|---|---|
| 테일즈 프롬 더 보더랜드 한패 삽질기 (4) - 제미나이(Gemini)를 활용한 번역 (0) | 2026.01.27 |
| 테일즈 프롬 더 보더랜드 한패 삽질기 (3) - 텍스트 추출 (0) | 2026.01.27 |
| 테일즈 프롬 더 보더랜드 한패 삽질기 (2) - 폰트 제작 (0) | 2026.01.25 |
| 테일즈 프롬 더 보더랜드 한패 삽질기 (1) - 언패킹 (0) | 2026.01.25 |