thcrap
1. 개요
thcrap은 동방 프로젝트 게임에 적용할 수 있는 언어 패치/모딩 툴이다. 간단히 말해서 동방 프로젝트의 정규작과 외전작들을 한국어를 포함한 다양한 언어로 즐길 수 있게 해주는 프로그램. 게임에 재미를 더해주는 모드를 적용시킬 수도 있다.
2. 탄생 계기
프로젝트는 프랑스인 Brliron과 독일인 NamelessLegacy가 주축이 돼서 2013년쯤 시작됐다. 이들은 소개(#1#2)와 깃허브 기여 목록에서 알 수 있듯이 로우 레벨 프로그래밍, 리버스 엔지니어링, 파일 구조 분석까지 다룰 줄 아는 능력자들이다.
thcrap의 탄생 계기는 위키 번역과 다른 언어 패치 작업과정에서 기인한다. 예를 들어 동방위키 영문판의 경우, 대사 번역물은 항상 최신 상태가 유지되고 틀린 부분이 있으면 일본어에 더 능숙한 자가 나타나 올바르게 수정할 여지가 있다. 하지만 게임 패치는 어떤가? 제작자가 한 번 배포하고 나면 그냥 그걸로 끝이다. 오류를 고친 수정본을 배포하는 것 역시 한계가 있다.
또한 어떤 언어 A 패치를 만드는 과정을 생각해보자. A 패치를 만들기 위해선 데이터를 분해하고 텍스트와 이미지를 번역하고, 모든 번역물을 다시 결합하여 실제 게임에서 잘 적용되는지 검수과정을 거치는 등 수많은 노력이 필요하다. 그런데 이 힘든 과정을 거친 다음엔, 또 다른 언어 B 사용자가 패치를 만들고자 한다면 위 과정을 그대로 반복해야 하는 어려움이 따른다. 실질적으로 다른 부분은 데이터를 B로 번역하는 것뿐인데도 상당히 중복되는 작업이 발생하는 것이다. 이러한 문제들을 해결하기 위해 Touhou Patch Center와 thcrap이 제작되었다.
3. 특징
- 다국어를 지원한다.
thcrap이 가장 내세우는 기능이다. 메인 페이지만 봐도 수많은 언어들을 지원하며 추가로 요청할 수도 있다.
- 게임의 원본을 유지한다.
dll을 인젝션하는 방식이기 때문에 실행파일(exe)이나 원본 데이터를 변경하지 않으며 스코어 파일에도 문제가 없다. 때문에 원본 폴더에 다른 패치 방식의 로더나 패치 파일 등을 지저분하게 놓을 필요없이 깔끔하게 유지할 수 있다.
- 개발자와 번역자가 분리되어 있다.
개발자는 오로지 개발과 버그 수정에만 힘을 쓴다. 그 외 번역이나 번역물 결과 검수는 패치 센터와 커뮤니티에서 수많은 사용자가 참여하여 이루어진다. 이로 인해 개발자가 바로 작업에 착수한다면 상당히 빠른 속도로 패치를 제작할 수 있다. 예를 들어 비봉 나이트메어 다이어리는 발매된 지 이틀만에 기술적 지원이 완료되었고 같은 날에 영어 패치가 완성되었다.
- 위키 시스템으로 누구나 참여할 수 있으며, 업데이트를 통해 최신 상태를 유지한다.
- 여러 개의 패치를 중첩하여 동시에 적용할 수 있다.
예를 들어 한국어 패치를 적용하는 경우라면 'base_tsa', 'base_tasofro', 'script_latin' 패치 위에 'lang_ko' 패치가 적용되는 식이다. 여기에 추가로 alphes 그림체 패치나 보스 러쉬 패치를 적용하는 등 자유자재로 사용할 수가 있다.
- 모드 제작에 유용하다.
thcrap은 번역에 관련된 파일뿐만 아니라 다른 데이터 역시 교체하여 적용할 수 있기 때문에 수많은 모드들이 나와 있다.
- BGM을 변경할 수 있다.
18년 12월 3일자로 BGM 모딩 기능이 추가되었다. 적용 방법은 원문이나 한국어 설명을 참고. 이를 이용해 어레인지 음악을 넣거나 홍마향, 요요몽, 영야초의 미디 BGM을 ZUN이 사용하던 SC-88 Pro로 재생한 음으로 바꿔 들을 수도 있다. (Splashman's BGM patch)
- V패치와 같이 적용할 수 있다.
thcrap_configure.exe를 이용하여 한글화후 games.js를 메모장 등 텍스트 에디터를 통해 열어 게임 파일 경로를 ~/게임.exe에서 ~/vpatch.exe로 수정하면 적용된다. 동방홍마향의 경우 dll 파일 교체가 필요한데 이는 문제점 문단에서 후술.
- 게임 내 버그 수정
일부 작품에 있는 중대한 버그를 수정하는 기능이 있다.
- 동방천공장: 스테이지 5의 스펠 프랙티스에서 사토노를 먼저 격파할 때 발생하는 버그를 고친다.
- 비봉 나이트메어 다이어리: 악몽 화요일-5에서 에이린&신묘마루가 쓰는 스펠카드명을 올바르게 출력한다.
- 동방귀형수(체험판): 우루미와 쿠타카의 스펠카드가 바뀌어 출력되는 버그를 고친다.
- 홍마향과 요요몽에서 캐릭터 이름과 이명을 단순한 텍스트 형태가 아니라 이미지로 표시할 수 있다.
- 주석 표시 기능
19년 3월 23일자로 주석 기능이 추가되었다. 위키에서 {{Tlnote|주석내용}}으로 표기한 주석을 출력할 수 있다. 적용 이미지
주석은 게임 내 대사뿐만 아니라 스펠카드, 뮤직룸 코멘트 및 엔딩 대사에도 붙이는 것이 가능하다. 뮤직룸 코멘트의 주석은 화면을 벗어나도 잠시 글자가 남아있는 버그가 있다.
그리고 슈팅게임 계열에만 적용 가능하고 격투 게임은 아직 지원하지 않는다.
개발자가 생각하는 thcrap의 주요 4가지 특징[1]주석은 게임 내 대사뿐만 아니라 스펠카드, 뮤직룸 코멘트 및 엔딩 대사에도 붙이는 것이 가능하다. 뮤직룸 코멘트의 주석은 화면을 벗어나도 잠시 글자가 남아있는 버그가 있다.
그리고 슈팅게임 계열에만 적용 가능하고 격투 게임은 아직 지원하지 않는다.
4. 작동 방식
번역물의 흐름은 위 표와 같다. 사용자가 패치 센터에서 번역을 하거나 파일을 올리면 파서가 미디어위키의 내용을 파싱해서 패치 서버로 업데이트 한다. 파서의 소스 코드는 깃허브에 있다.
thcrap은 repo.js 혹은 patch.js에 저장된 서버의 주소에서 패치 파일들을 다운받아 적용시킨다. 일단 한번 다운받은 뒤로는 업데이트 기능이 정지된다 해도 로컬에 존재하는 파일로 패치를 실행할 수 있다.
패치 서버는 공식 서버 외에도 사용자가 파이썬을 써서 자유롭게 만들 수도 있다. 서버 구축 방법. 수많은 모드들이 이와 같은 커스텀 서버로 배포된다.
thcrap의 가장 핵심적인 두 가지 기능은 binhacks와 breakpoint이다.[2] 이를 통해 코드를 수정하고 C 함수를 불러오거나, 추가로 메모리를 할당할 수 있다. 이론적으로는 요요몽의 사쿠야 발사 타입을 휘침성에 적용할 수도 있다고 한다.[3]
5. 사용법
처음 설치하는 방법과 실행 방법, 게임 추가 방법 및 패치 중첩 방법을 설명한다.
기타 설정을 바꾸는 방법을 설명한다.
6. 한국어 패치
한국어 포탈 페이지
한국어 패치 페이지
한국어 패치 서버
thcrap은 빙의화 패치가 나오기 전까진 한국 팬덤에게 거의 알려지지 않았다. 알고 있는 사람도 몇몇(#, #, #) 존재했지만 극히 소수였고 결정적으로 번역이 거의 되어있지 않았기 때문이다. 그리고 심기루를 제외한 모든 작품은 thcrap을 쓰지 않는 패치가 이미 있기 때문에 알 필요도, 알 기회도 없었을 것이다.
그러나 빙의화 한국어 패치가 thcrap을 통해 배포된 것을 계기로 동방 패치 센터와 thcrap의 존재를 아는 사람이 늘어날 듯하다. 2018년까지의 상황은 요정대전쟁과 신령묘의 텍스트 부분과 천공장의 일부분만이 완성되었을 뿐이었다. 지령전과 휘침성의 극초반 부분도 되어있기는 했다.
'18년 12월에 빙의화가 완료된 것을 시작으로 '19년 1월 31일, '''thcrap이 지원하는 모든''' 작품에 대해 한국어 패치 작업이 완료되었다.[4] 이 모든 게 한 유저에 의해 불과 2개월만에 이루어졌다.
기존 한국어 패치에 비하면, 요요몽과 영야초를 제외하고 모든 정규 슈팅 게임과 심기루 이후 격투게임에 대해 완벽하게 한국어 패치를 지원할 수 있는 방법은 thcrap밖에 없다. 기존 패치에서 홍마향, 풍신록, 지령전은 엔딩이나 스태프롤이 제대로 번역되지 않았고 성련선 이후는 플레이어 데이터의 스펠카드명을 한글로 출력하지 않기 때문이다. 비상천칙 이전 격투게임은 불완전하거나 지원하지 않으니 기존 패치를 쓰는 것이 좋다.
한국어 패치의 의존성은 'base_tsa'(슈팅), 'base_tasofro'(격투) 뿐이었으나 '18년 12월 5일자로 'script_latin'을 추가했다. 이는 심기루~빙의화에서 가로방향 대사와 말풍선을 자동으로 적용하기 위해서이다.
주로 사용되는 글꼴은 신령묘 이전은 나눔고딕이고 휘침성 이후로는 나눔명조이다. 격투게임 계열의 대사에는 a자막체를 사용한다.
6.1. 번역이 완료된 작품
슈팅게임 전부 및 심기루 이후 격투게임을 포함한다.
- TH06 동방홍마향
- TH07 동방요요몽
- TH08 동방영야초
- TH09 동방화영총
- TH09.5 동방문화첩
- TH10 동방풍신록
- TH11 동방지령전
- TH12 동방성련선
- TH12.5 더블 스포일러
- TH12.8 요정대전쟁
- TH13 동방신령묘
- TH13.5 동방심기루
- TH14 동방휘침성
- TH14.3 탄막 아마노자쿠
- TH14.5 동방심비록
- TH15 동방감주전
- TH15.5 동방빙의화
- TH16 동방천공장
- TH16.5 비봉 나이트메어 다이어리
- TH17 동방귀형수
6.2. 부분적으로 완료된 작품
7. 패치 및 모드들
7.1. 기본 패치
이 패치들은 thcrap을 적용하기 위한 핵심 해킹 코드와 breakpoint들을 포함하고 있기 때문에 거의 모든 패치에 필수적이다. 이게 없으면 그냥 원본을 실행하는 것과 다름이 없는 셈.
- base_tsa: 상하이 앨리스 환악단이 제작한 슈팅 게임을 지원하기 위한 패치.
- base_tasofro: 황혼 프론티어가 제작한 격투 게임을 지원하기 위한 패치.
- script_latin: 라틴 문자를 사용하는 언어를 위한 패치. 보통 서양권 언어는 번역하면 길이가 길어지기 때문에[5] 폰트 크기를 줄이고 출력 위치를 조정하는 등의 역할을 한다. 그 외에도 심기루~빙의화의 대사와 말풍선을 가로로 바꿔주는 중요한 기능이 있다.
7.2. 언어 패치
- lang_ko: 한국어 패치.
- lang_en-4kids: 어린이를 위한(...) 영어 패치. 창씨개명은 기본이고, 그림도 유치한 것으로 바뀐다.
- lang_ja: 일본어. 사실 thpatch의 번역 방식은 원문 페이지를 먼저 만들어놓고 그에 대한 번역 페이지를 채워나가는 식이다. 때문에 일본어 데이터도 패치 서버에 예외없이 올라갈 뿐이다.
7.3. 모드
전체 목록 또는 https://www.thpatch.net/wiki/List_of_Patches
모드 제작에 필요한 ECL, SHT 파일에 대한 정보 모음
참고로 어떤 모드가 모든 게임에 대해 적용될 수 있는 것은 아니다. 모드를 다운받으면 어떤 게임 데이터들이 들어있는지 확인해보자.
다운받기 전에 미리 확인하는 방법은 위 패치 센터의 링크에 적혀있는 URL 목록을 보거나, 또는 thcrap이 있는 패치 폴더의 patch.js에 적혀있는 서버 주소를 보면 된다. ex) http://thcrap.nmlgc.net/repos/DTM/
그런데 'https://raw.githubusercontent.com/사용자/패치이름/master/' 이와 같은 형식이면 직접 접근할 수가 없고 'https://github.com/사용자/패치이름' 으로 들어가봐야 알 수 있다.
7.3.1. 리소스 교체 관련
- Braviretex: 리텍스처 패치. 몇몇 스프라이트와 효과음이 바뀐다.
- bgm_sc88pro: 위에서 언급한 미디음 패치.
- real_bullet_size: 피탄 판정에 맞게 탄 크기를 줄인다. 적용 이미지
- Fr00sk_Styled: 적용 이미지
- JzBoy_Styled: 적용 이미지
- mima: 미마를 볼 수 있다.
- untanned_cirno: 천공장의 치르노가 멀쩡하게 나온다.
- spaghetti:
- le_sanae:
- visuals: 천공장의 계절 아이템의 투명도를 증가시키고, 귀형수에서 폭주 로어링 모드일 때 샷을 덜 화려하게 바꾸어 보기 편하게 해준다.
- ufo_vivid: 성련선의 벤토라 색약패치. UFO들을 좀 더 분명하게 알아볼 수 있다. 출처
- bottom_enemy: 하단의 "enemy" 문구를 지령전 이전 스타일처럼 성련선 이후 작품에도 표시한다.
7.3.2. 게임 플레이 관련
- BossRush: 필드전을 생략하고 중보스와 보스만 상대할 수 있다.
- 0power: 파워를 0으로 고정하고 아이템을 먹어도 올라가지 않는다. 마조히스트를 위한 패치.
- transparent_seasen_items - 천공장 계절 아이템을 투명하게 만든다.
- th14sanae: 휘침성 레이무 B를 감주전 사나에로 바꾼다. 적용 영상
- th15sakuya: 감주전 레이센을 휘침성 사쿠야 A로 바꾼다. 다만 칼날에 감속 효과는 없고 그냥 유도탄이다. 적용 영상
- th16sanae: 천공장 마리사를 감주전 사나에로 바꾼다. 적용 영상
- th16nonprac: 천공장 스펠 프랙티스에서 스펠이 아니라 통상 패턴을 연습할 수 있다.
- RNG: 탄의 궤도를 랜덤하게 바꾼다. 성련선의 벤토라 등장 패턴도 랜덤이라고 한다.(...) 다음은 적용 영상들.
- th16ufos: 성련선의 UFO 시스템을 천공장으로 이식했다.(!!) 적용 영상. th16 사나에 패치와 같이 적용하면 유사 성련선이 된다.(...)
- th16mystia: 치르노를 선택하면 미스티아처럼 시야가 좁아진 채 플레이하게 된다.(...) 적용 이미지
- th165lolk: 비봉 나이트메어 다이어리에서 감주전 루나틱을 플레이할 수 있게 된다. 해당 스테이지는 다음과 같다.
- 월요일 1 / 2 - 스테이지 1 / 보스
- 화요일 1 / 2 - 스테이지 2 / 보스
- 수요일 2 / 3 - 스테이지 3 / 보스
- 목요일 1 / 2 - 스테이지 4 / 보스
- 금요일 1 / 2 - 스테이지 5 / 보스
- 뒷 금요일 1 / 2 - 스테이지 6 / 보스
- thanos: ECL[6] 명령문의 50%를 날려버려 적의 패턴이 엉망진창이 된다.(...) https://youtu.be/dp1y_QcI-7U?t=5m6s
적어도 이미 정해진 패턴에서 탄이 랜덤으로 변하는 것을 예측이라도 할 수 있는 RNG 패치와는 달리, 탄이 생성조차 안 되거나 적의 움직임마저 건너뛰어버리고, 심지어 화면 밖에서 생성된 자코가 화면 안으로 들어오지도 않는 등 진정한 의미의 랜덤패치일지도 모른다.
- th15gapping: 감주전에서 화면 끝으로 다가가면 반대편으로 넘어갈 수 있다.
- th15slippery: 플레이어의 움직임이 마치 얼음판 위에서 미끄러지는 것처럼 관성이 적용된다.
- vx-customshots: 풍신록의 레이무 C타입, 감주전의 마리사 샷 타입을 넓은 형태로 바꾼다. https://twitter.com/thpatch/status/1134761505369526272
- th15garbo: 감주전에서 모든 탄의 모양과 색깔을 랜덤으로 바꾼다. 온갖 탄이 등장하는 걸 볼 수 있다. https://youtu.be/P05jErC_jTo 그리고 RNG패치와 같이 적용하면 정말 혼파망이 따로 없다.(...)
- ultra-fast: 귀형수에서 스테이지의 진행 상황을 2배 빠르게 한다. 게임의 시간 자체를 빠르게 한다는 것이 아니라, 등장하는 적의 타이밍이나 탄환 발사 속도 등의 스크립트 진행을 빠르게 한다. 때문에 필드 BGM이 중간도 가기 전에 보스를 마주하게 된다.(...)
- vx-fixedshots: 풍신록 마리사 B의 비정상적으로 높은 데미지, 귀형수 요우무 C의 비정상적으로 낮은 데미지를 정상으로 바꾼다.
- THBL_01: 엄청난 난이도를 자랑한다. 신령묘로 실행하면 된다.
- th08_swapping: 플레이어 기체쌍을 섞어놓았다. 각각 레이무-마리사, 사쿠야-앨리스(...), 요우무-레밀리아, 유카리-유유코. 다만 요우무, 유카리의 샷 타입은 완벽히 작동하진 않는다.
- 8options: 지령전에서 마리사-파츄리를 제외한 모든 기체가 파워를 8까지 올릴 수 있다.
7.3.3. 기타
- skipgame: 모든 전투장면을 넘기고 대사만 확인해볼 수 있다. 주로 패치 결과를 검수할 때 쓰인다.
- instant_ending: 바로 엔딩 장면으로 넘어간다. 역시 검수과정에 주로 쓰인다.
- cheat: 무적, 오토 피탄 봄, 무한 봄 등등이 있다. 자세한 설명은 이 곳을 참고.
8. 알려진 문제점
깃허브 이슈 목록
이슈 목록을 보면 알겠지만 비상천/칙의 버그가 상당히 많다. 이 문제들을 해결하고 나서야 췌몽상을 지원할 수 있을 것으로 보인다.
8.1. thcrap
- 빙의화
- 대사 텍스트 위치와 말풍선이 맞지 않는다.
- 마미조 엔딩과 레이센 엔딩에서 마지막 대사 하나가 출력되지 않는다. 게다가 레이센 엔딩은 이미지가 텍스트보다 한 단계 먼저 넘어간다.
- 심기루
- 비상천 / 비상천칙
- 불안정해서 종종 튕기는 경우가 있다.
- 스펠 카드 코멘트 번역을 지원하지 않는다.
- 윈도우 모드로 실행시 제목 번역을 지원하지 않는다.
- 비상천칙에서 대화 도중 '戦闘再開処理' 라는 시스템 관련 문자열이 표시되는 증상이 나타난다.
- 췌몽상
- 아직 지원하지 않음.
8.2. lang_ko
이전에 제작된 요요몽 패치, 영야초 패치와 호환되지 않는 부분이 있다. 바로 스코어 파일 문제인데, scorek.dat을 그냥 score.dat으로 바꾸고 플레이하면 스펠카드가 나올 때 '''그 스펠카드의 획득 기록이 초기화 되어 버린다.''' thcrap은 반드시 원본에만 적용할 것.
9. 기타
문자열을 UTF-8로 래핑하는 기능이 있기 때문에 이를 이용해 앱로캘이 필요한 동방이 아닌 다른 게임을 구동하는 데 쓰는 사례도 있다.
패치 147개(...)를 한꺼번에 적용시킨 영상이 있다. 다만 정말로 모든 패치가 다 적용되는 게 아니라 겹치는 파일이나 속성은 리스트 중에서 가장 뒤에 있는 게 최종적으로 선택된다.
약자가 영 좋지 않다. crap에는 똥이란 뜻이 있는데, 즉 똥퍼가 되어버린다(...).
10. 외부 링크
- thcrap 개발 일지
- 서버 개발 일지
- 해킹 적용 방법
- https://youtu.be/BxJMx28V8uc - 비봉 나이트메어 다이어리에 적용하는 개발과정을 10시간 동안 스트리밍한 영상