(청아) [AI번역, 세이브/공략 포함] 조카소녀 Mei Shoujo (姪少女) たぬきそふと GC 1173544
GC 1173544
aHR0cHM6Ly9raW8uYWMvYy9jTlVMWnNyT19JTG81N3NPNWY1ajRi
재공유자유, 수정자유, 기간한달
v1: 첫 릴리즈
v2: 전체화면/창화면 번역 수정, 필요 없는 파일 제거
v3: meishoujo_ko.exe 추가
meishoujo_kor.exe
으로 실행해야 한글로 실행된다.
아이콘이 없는건 귀찮아서 아이콘을 설정 안했기 때문이다.
100% 내가 만든 실행파일이니 바이러스 걱정 X
그래도 걱정된다면
여기 이 소스코드에서 직접 빌드해서 사용하면 된다.
(추가)
만약 meishoujo_kor.exe 로 실행이 안되는 유저는 아래 meishoujo_ko.exe 를 다운받아 게임폴더에 위치시킨후 meishoujo_ko.exe 로 실행해볼것
aHR0cHM6Ly9raW8uYWMvYy9hU3RVa3h3dHVhUmRMNlFJbTc1ajRi
바이러스 토탈 검사 결과
https://www.virustotal.com/gui/file/d0757c97aef2cd4a874dd0c30eb258f4e78321aca640fed12ace876e76a05380
바이러스가 검출되는 이유는 밑에 서술
---
본작의 남자 주인공은 조카인 쿠라야마 사야와 쿠라야마 아야로부터 편지를 받는다. 두 사람은 주인공의 집 근처 학원에 다니게 되었고, 통학 편의를 위해 그의 집에 머물게 된다. 주인공은 약속한 날 두 조카를 집으로 데려오고, 이후 함께 일상생활을 시작한다. 그는 사야가 그림을 좋아하고, 아야가 아이돌을 꿈꾼다는 사실을 알게 된다.
이후 이야기는 플레이어의 선택에 따라 달라지며, 크게 네 개의 개인 루트와 두 개의 하렘 루트로 나뉜다.
《조카 소녀》는 타누키소프트(たぬきそふと)가 2008년 12월 12일 발매한 연애 어드벤처 계열의 성인 게임이며, 이 회사의 첫 작품이다. 원화는 노노하라 미키가 담당했고, 각본은 카난 렌, 네코지타 아치, 아카네 이츠키가 공동으로 맡았다. UMDPG판은 2010년 1월 29일에 발매되었다.
노노하라 미키 등은 원래 일본 게임 회사 RUNE의 구성원이었다. 이들은 RUNE을 떠난 뒤 자신들이 만들고 싶은 작품을 개발하기 위해 타누키소프트를 설립했다. RUNE이 모에 요소를 중시한 것과 비교하면, 타누키소프트는 성인향 요소를 더 중시했다.
발매 후 《조카 소녀》는 여러 미소녀 게임 판매 순위에 올랐다. 미소녀 게임 및 애니메이션 관련 상품 판매 사이트 Getchu.com의 2008년 미소녀 게임 대상에서도 여러 부문에 이름을 올렸고, 2009년도 모에 게임 어워드에서는 업계 관계자가 선정하는 에로계 작품상 PINK 은상을 받았다. UMDPG판은 같은 어워드의 2010년도 PG상 우수상을 받았다.
---
여러모로 너무 힘들었던 번역이었다
이 게임은 타누키 소프트(TanukiSoft) 사의 자체 엔진으로 돌아가는데
자체 파일 포맷, 자체 형식, 자체 명령어를 골때리는 방식으로 사용해서 조금이라도 잘못하면 게임이 터지거나 정상 작동을 안한다.
게다가 국내/해외 번역 자료도 거의 없어서 혼자서 삽질을 많이 했다.
어디서 게임이 터질지 몰라서 게임 검수하느라 세이브 100% 다채웠다. 세이브 파일도 같이 첨부한다.
리소스만 한글 번역 한다고 게임이 정상동작 하지 않는다
게임이 한글로 실행되려면 실행파일의 바이트를 패치하고, 실시간으로 게임의 메모리를 변조해야만 했다.
타 .exe 파일을 변조하고 실행동작을 제멋대로 바꾸는걸, 좋게 말하면 '패치' 이지만 나쁘게 말하면 '해킹' 이다.
그렇기 때문에 몇몇 백신에서는 바이러스로 오탐 될 수 있다.
너무 힘든 작업이었기 때문에 미래의 다른이를 위해서 한글패치 방법을 상세하게 적어둘테니 관심있는 사람은 한번 읽어보고 관심없는 사람은 아 얘가 고생 많이 했구나 하고 추천이나 눌러줘라.
타누키 소프트 ‘조카소녀‘ 한글 패치 방법
한글 패치는 크게 세 부분으로 나눠진다
# 1. 리소스 언팩
파일을 처음보면 .tac 이라는 낮선 파일이 보인다.
지금까지 경험해본 .tac 파일은 확장자가 같아도 TArc1.10, TArc1.20, glib/glib2 세가지 분류로 나눠진다
파일 헤더를 확인해보면 바로 알수 있다. TArc1.10, TArc1.20 로 적혀있는 경우가 있고 헤더가 이상하면 glib2 로 의심해본다
TArc1.10, TArc1.20 는 패키지 안의 파일 이름(경로)을 미리 알고 있어야만 정확한 파일이름으로 unpack 이 가능하다.
반면 glib2 는 파일 이름까지 완벽하게 unpack 가능하다.
TArc1.10 와 glib2 는 arc_unpacker 로 unpack 이 가능하며 TArc1.20 는 파일 구조가 알려져있지 않아 현존하는 unpack 도구가 없다.
다행이도 조카소녀는 .tac 파일이 모두 glib2 로 이루어져있어 arc_unpacker 로 완벽하게 풀수 있었다.
한글패치만 하려면 datascn.tac 만 unpack 하면 된다 해당 파일 안에 모든 시나리오 스크립트 파일이 존재한다.
datascn.tac 를 풀면 처음보는 .BCS 파일이 반겨준다. 이 파일도 TanukiSoft의 자체 파일 포맷이고 csv 파일을 담고 있다.
다행히 양덕들이 bcs 파일을 리버싱하여 bcs to csv 변환이 가능한 도구 BcsExtractor 가 있다. github 에서 찾아보면 나온다.
.BCS 를 .csv 로 바꾸었으면 unpack 은 모두 끝났다.
특이한 점은 .tac 으로 리팩을 하지 않아도 패치가 가능하다는것이다.
csv 가 올바르게 작성되었다는 가정하에
datascn.tac 라는 이름의 폴더를 만들고 그 안에 csv 파일만 위치 시키면 게임 실행이 가능하다.
.BCS 파일이나 원본 datascn.tac 파일은 지워야 한다.
# 2. csv 번역
csv 는 shift-jis 인코딩으로 되어있으며 일반적인 csv와는 약간 다른 자체 포맷으로 이루어져있다.
이 게임의 시나리오 CSV는 일반적인 RFC 스타일 CSV처럼만 다루면 안 된다.
게임 엔진이 일부 줄, 기호, 줄바꿈, 명령 문자열을 바이트 단위로 민감하게 처리한다.
번역 CSV를 작성할 때는 원본 파일의 형태를 최대한 유지해야 한다.
조금이라도 이 포맷에서 벗어나면 게임실행이 안되거나 게임이 비정상으로 동작한다.
%info% 나 %comment% 는 주석이라 번역하지 않아도 되고 %text% 와 %seq% 만 번역하면 된다.
이 게임은 utf-8 을 지원하지 않으므로 ansi 포맷인 cp949 로 저장하여 번역해야 한다.
다음은 csv 를 번역할때 주의해야 할 점이다
## 인코딩
- 번역본 CSV는 cp949로 작성한다.
- 일본어 원본 CSV는 실질적으로 cp932 / Shift-JIS 계열이다.
- 단, 일부 메뉴 제어 기호는 번역본이 cp949이더라도 원본 cp932 바이트를 유지해야 한다. (후에 서술)
## 줄바꿈
- 기본적인 줄바꿈은 CRLF 이지만 모든 줄을 무조건 CRLF로 정규화하면 안 된다.
- 원본 파일의 각 물리 라인별 CR 개수와 LF 개수를 맞춰야 한다.
- 일부 원본 파일에는 CRLF가 아니라 LF만 있는 줄이 있다.
## 컬럼
- 일반 논리 행은 18컬럼이다.
- 원본에는 CSV의 정상 18컬럼 행 대신 쉼표가 없는 라인이 존재한다.
- 이런 라인은 빈 줄이거나 텍스트만 있는 줄이다.
- 이 줄들을 18컬럼짜리 빈 행으로 확장하면 안 되고 원본 쉼표 개수를 정확히 맞춰야 한다
## 마지막 footer 행
원본 파일의 마지막에는 보통 comma-only footer 행이 있다.
```
,\r\n
```
번역 원본에 18컬럼짜리 빈 행이 있어도, 출력할 때는 대상 원본 파일의 footer 형태에 맞춰야 한다.
## 쉼표 처리
ASCII 쉼표 ,는 위험하다. CSV 구분자이기도 하고, 게임 스크립트 명령의 인자 구분자로도 쓰인다.
텍스트용 대체 쉼표는 전각 쉼표를 사용한다.
```
, U+FF0C
```
규칙:
- %text% 안의 ASCII 쉼표 ,는 전각 쉼표 ,로 바꾼다.
- %text% 안의 , 는 , 하나로 바꾼다.
- 이미 , 형태가 있으면 뒤의 스페이스를 제거해서 ,만 남긴다.
- $menu_item의 %seq%에서는 명령 구분용 쉼표 2개는 유지하고, 선택지 텍스트 내부 쉼표만 ,로 바꾼다.
- %seq%의 다른 명령 구분 쉼표는 바꾸면 안 된다. 이 쉼표는 반드시 ASCII 쉼표로 남겨야 한다.
예:
올바른 출력:
```
$menu_item 0,응,당연하지!, sel_1a
```
잘못된 출력:
```
$menu_item 0,응,당연하지!,sel_1a
```
## 따옴표 처리
%text% 안에 ASCII double quote "가 있고, 이것을 CSV 방식으로 "" 이스케이프하면 게임실행이 실패한다.
규칙:
- %text% 안에 ASCII "를 남기지 않는다.
- 맨 앞 "는 「로 바꾼다.
- 맨 뒤 "는 」로 바꾼다.
- 중간에 남은 "는 "로 바꾼다.
예:
```
"아아, 마음대로 써."
```
올바른 처리:
```
「아아,마음대로 써.」
```
단, 텍스트가 아닌 다른 필드에서는 CSV quote가 필요할 수 있다.
이런 필드는 그대로 CSV quote를 사용한다.
예:
```
"aya,private"
"saya,m_private"
```
## 메뉴 및 라벨 기호
게임 엔진은 일부 메뉴 기호를 문자 디코딩 결과가 아니라 원본 바이트값으로 검사하는 것으로 보인다. 같은 문자라도 cp949 바이트로 쓰면 실패한다.
현재까지 반드시 필요한 것으로 확인된 바이트는 ■, ↓이다.
전체 파일을 cp949로 인코딩한 뒤, 아래 기호는 원본 cp932 바이트로 후처리해야 한다.
■ cp949 A1 E1 -> cp932 81 A1 -> 걾
↓ cp949 A1 E9 -> cp932 81 AB -> 겓
예:
```
52300 ,$menu_begin,,,,,,,,,,,,,,,,■選択肢
↓,"$menu_item 0,一緒に出掛ける,sel_1a",,,,,,,,,,,,,,,,
↓,"$menu_item 1,留守番をしている,sel_1b",,,,,,,,,,,,,,,,
↓,$menu_end,,,,,,,,,,,,,,,,
52600 ,*sel_1a,,,,,,,,,,,,,,,,■①一緒に出掛ける
```
올바른 처리:
```
52300 ,$menu_begin,,,,,,,,,,,,,,,,걾선택지
겓,"$menu_item 0,함께 외출한다,sel_1a",,,,,,,,,,,,,,,,
겓,"$menu_item 1,집을 지키고 있는다,sel_1b",,,,,,,,,,,,,,,,
겓,$menu_end,,,,,,,,,,,,,,,,
52600 ,*sel_1a,,,,,,,,,,,,,,,,걾①같이 외출한다
```
## $menu_item 규칙
%seq% 컬럼의 $menu_item은 내부적으로 다시 쉼표로 split된다.
형식:
```
$menu_item 번호,선택지 텍스트,이동 라벨
```
따라서 ASCII 쉼표는 정확히 2개가 있어야 한다.
올바른 예:
전각 쉼표 사용
```
$menu_item 0,응,당연하지!, sel_1a
```
잘못된 예:
ascii 쉼표 사용
```
$menu_item 0,응, 당연하지!, sel_1a
```
## 정합성 검증
검증해야 할 항목:
- 라인 수
- 각 라인의 ASCII comma 개수
- 각 라인의 CR 개수
- 각 라인의 LF 개수
원본에 쉼표 없는 continuation 줄이 있으면 출력에도 같은 위치에 쉼표 없는 줄이 있어야 한다.
이 구조를 CRLF로 정규화하거나 18컬럼 빈 행으로 만들면 게임 진행이 깨질 수 있다.
## troubleshooting
1. %text% 안의 ASCII "를 CSV 방식으로 "" 이스케이프함
- 게임실행 실패.
- 「」 / "로 바꿔 해결했다.
2. ■, ↓를 cp949 바이트로 저장함
- 선택지 진행에서 오류.
- 원본 cp932 바이트로 후처리하여 해결했다.
3. $menu_item 선택지 텍스트 안에 ASCII 쉼표가 남음
- 게임 진행중 오류.
- 선택지 내부 쉼표만 전각 쉼표 ,로 바꿔 해결했다.
4. %seq%의 모든 쉼표를 전각 쉼표로 바꿈
- $fset %f_010,1 같은 명령이 깨졌다.
- $menu_item 선택지 텍스트만 특수 처리하도록 수정했다.
5. 모든 줄바꿈을 CRLF로 정규화함
- 원본의 bare LF 라인 이후 게임 타이틀화면으로 돌아감.
- 원본의 각 라인별 CR/LF 개수를 맞춰 해결했다.
6. 원본 continuation 물리 라인을 18컬럼 빈 행으로 확장함
- 원본과 같은 쉼표 없는 물리 라인으로 맞춰 해결했다.
# 3. 실행파일 변조
게임 exe 실행파일을 변조하지 않으면 한글 csv 파일을 만들어도 게임은 실행되지만 한글이 깨진채로 보인다.
만약 게임 실행도 되지 않는다면 그것은 csv 파일 문제이다.
exe 파일을 변조해서 CreateFontIndirectA에 넘기는 LOGFONTA.lfCharSet 값을 0x80 (SHIFTJIS_CHARSET) 에서 81 (HANGEUL_CHARSET) 로 바꾸어줘야 한다.
또한 게임내 설정 문구나 여러 메시지가 exe 안에 일본어로 박혀있어서 이것 또한 한국어 문자열로 번역해줘야 한다.
exe 를 패치하려고 헥스 에디터를 열었지만 exe 가 패킹되어있어서 위의 리소스를 쉽게 찾아볼 수 없었다.
exe 언패킹 시도는 실력이 없어 실패했고 대신 c# 으로 게임을 후킹 및 런타임 변조 하는 방식으로 meishoujo_kor.exe 를 만들었다.
패치한 내용은 다음과 같다.
1. 런처가 같은 폴더의 meishoujo.exe를 실행한다.
2. OpenProcess, ReadProcessMemory, WriteProcessMemory, VirtualProtectEx로 원본 프로세스 메모리에 접근한다.
3. 언패킹 완료를 특정 바이트 패턴으로 감지한 뒤, raw 파일 오프셋에 RawToVaDelta = 0x400C00을 더해 실제 메모리 주소를 계산한다.
4. 일본어 문자열 슬롯을 한국어 문자열 바이트로 덮어쓴다.
- 일반 게임/메뉴 문자열: 한국어를 CP949로 인코딩
- 설정 다이얼로그 리소스 문자열: UTF-16LE로 인코딩
- 포인터/구분자 등은 별도 HexPatch로 바이트 직접 수정
5. 폰트 생성부의 charset 값을 일본어 0x80에서 한글 0x81로 바꿔 GDI 텍스트가 한글 폰트/문자셋으로 렌더링되게 한다.
6. 설정창처럼 실행 중 Win32 컨트롤이 동적으로 생성하는 텍스트는 메모리 패치만으로 부족해서, SetWinEventHook으로 창 생성/이름 변경 이벤트를 감시하고 SetWindowTextW 및 콤보박스 항목 재삽입으로 일본어 UI를 한국어로 바꾼다.
7. 제품명 姪少女는 저장 폴더명 생성 전에 깨질 수 있으므로, 언패킹 감지 전부터 CP932 원본 바이트를 찾아 CP949 바이트로 먼저 교체한다. 단, 이름 자체는 한국어로 번역하지 않고 원래 한자명을 유지한다.
직접 작성한 공략도 첨부한다.
조카소녀 공략 - 스포있음
## 먼저 알아둘 것
이 게임의 큰 루트는 셋입니다.
| 루트 | 진입 방식 |
|---|---|
| 아야 루트 | 조교 파트에서 아야를 3번 선택 |
| 사야 루트 | 조교 파트에서 사야를 3번 선택 |
| 하렘 루트 | 조교 파트에서 아야 2번, 사야 2번 선택 |
각 루트에 들어간 뒤에는 다시 임신 엔딩과 비임신 엔딩으로 갈립니다.
## 공통 파트 선택지
초반 공통 파트에는 장면만 바뀌고 큰 루트에는 영향을 주지 않는 선택지가 여럿 있습니다.
### 첫 아침
| 선택 | 결과 |
|---|---|
| 함께 외출한다 | 외출 이벤트를 봅니다 |
| 집을 지키고 있는다 | 집 안 탐색 이벤트를 봅니다 |
큰 루트나 엔딩에는 영향이 없습니다.
### 교복을 본 뒤 반응
| 선택 | 결과 |
|---|---|
| 솔직하게 칭찬한다 | 두 사람이 부끄러워하는 반응 |
| 얼버무린다 | 조금 어색한 반응 |
큰 루트나 엔딩에는 영향이 없습니다.
### 목욕탕 청소 이야기
| 선택 | 결과 |
|---|---|
| 먼저 목욕해도 된다고 말한다 | 배려하는 반응 |
| 고맙다고 말한다 | 무난한 반응 |
| 이상한 질문을 한다 | 코믹한 오해 반응 |
큰 루트나 엔딩에는 영향이 없습니다.
### 연애와 성장 이야기
| 선택 | 결과 |
|---|---|
| 연애 이야기를 꺼낸다 | 연애 화제로 진행 |
| 몸 변화 이야기를 꺼낸다 | 민감한 반응 |
| 필요한 것이 많아지겠다고 말한다 | 생활 준비 화제로 진행 |
큰 루트나 엔딩에는 영향이 없습니다.
## 행동 파트
행동 파트에서는 여러 번 다음 선택지가 나옵니다.
- 아야와 함께 보내고 싶다
- 사야와 함께 보내고 싶다
행동 파트의 선택은 그때 볼 이벤트를 고르는 성격이 강합니다. (엔딩 영향 없음)
최종 루트 진입은 뒤의 조교 파트 선택이 중요합니다.
### 행동 파트 선택지가 나오는 타이밍
| 순서 | 직전 장면 | 공통 질문 바로 앞 본문 |
|---|---|---|
| 1 | 소나기 | `날아간 걸 주웠을 뿐이라, 그 점에 딱히 꺼림칙한 건 없지만, 몰래 못 받아서 아쉽다고 생각했던 걸 들킨 것 같은 기분이 들어서…….` 다음 선택지가 나옵니다 |
| 2 | 청소하는 법 | `엄마한테 혼나고 있는 것 같네.` 다음 선택지가 나옵니다 |
| 3 | 쇼핑 | `역시, 곁에 여자애가 있다는 건 좋구나…….` 다음 선택지가 나옵니다 |
| 4 | 자매 싸움 | `아아~, 이거 아직 한동안 걸릴 것 같네.` 다음 선택지가 나옵니다 |
## 조교 파트: 루트 결정 구간
조교 파트에서도 다음 선택지가 반복해서 나옵니다.
- 아야와 함께 보내고 싶다
- 사야와 함께 보내고 싶다
이 선택 누적에 따라 다음 큰 루트가 결정됩니다.
### 조교 파트 선택지가 나오는 타이밍
| 순서 | 직전 장면 | 공통 질문 바로 앞 본문 |
|---|---|---|
| 1 | 잠이 덜 깬 아이 | `그거…… 사야쨩의 흑역사? 아니,사야쨩의 의외의? 일면을 봤네…….` 다음 선택지가 나옵니다 |
| 2 | 동경하던 온열 변좌 | `아, 자지 서 버렸다...` 다음 선택지가 나옵니다 |
| 3 | 누명 | `전화위복이란 게 이런 거지.` 다음 선택지가 나옵니다 |
| 4 | 낮잠 자는 자매 | `미안, 아야쨩, 사야쨩…….` 다음 선택지가 나옵니다 |
## 사야 루트로 가는 방법
조교 파트에서 사야를 3번 선택하면 됩니다.
예시:
- 사야 3
- 아야 1, 사야 3
## 아야 루트로 가는 방법
조교 파트에서 아야를 3번 선택하면 됩니다.
예시:
- 아야 3
- 사야 1, 아야 3
## 하렘 루트로 가는 방법
조교 파트에서 아야 2번, 사야 2번을 선택하면 하렘 루트로 갑니다.
순서는 상관없습니다. 단, 처음 세 번을 전부 같은 캐릭터로 고르면 그 캐릭터 단독 루트가 확정되므로 피해야 합니다.
## 사야 루트 엔딩 분기
사야 루트에서는 편의점에서 무엇을 살지 고르는 선택이 엔딩을 결정합니다.
| 선택 | 결과 |
|---|---|
| 콘돔을 산다 | 사야 비임신 엔딩 |
| 성인 만화 잡지를 산다 | 사야 임신 엔딩 |
사야 비임신 엔딩을 보고 싶다면 `콘돔을 산다`를 고르세요.
사야 임신 엔딩을 보고 싶다면 `성인 만화 잡지를 산다`를 고르세요.
## 아야 루트 엔딩 분기
아야 루트에서는 촬영 관련 장면의 중요한 선택지가 엔딩을 결정합니다.
| 선택 | 결과 |
|---|---|
| 안에 사정한다 | 아야 임신 엔딩 |
| 밖에 사정한다 | 아야 비임신 엔딩 |
이후 아야 루트 안에서 나오는 비슷한 선택지는 대부분 장면 차이만 만들고, 이미 정해진 임신/비임신 루트를 바꾸지는 않습니다.
## 하렘 루트 엔딩 분기
하렘 루트에 들어간 뒤, 후반의 중요한 선택지가 엔딩을 결정합니다.
| 선택 | 결과 |
|---|---|
| 밖에 사정한다 | 하렘 비임신 엔딩 |
| 안에 사정한다 | 하렘 임신 엔딩 |
s/somisoft
• 150,630명 구독중- 1. 게시물 규정 양식
업로드 시 링크 암호화 & 필수 정보를 기입할 것
- 2. 질문
국룰, 암호화 링크 등 기본사항 질문 금지, 탭 미준수시 차단 및 삭제
- 3. 요청
요청 기준 및 양식 미준수 & 댓글로만 자료 복구 요청 시 차단
- 4. 미성년자 / 근첩 / 페미 / 다중계정
조금이라도 의심되면 선 차단, 후 해명
- 5. 좆목 / 네임드화
닉언, 네임드화 등 친목질 금지
- 6. 분탕 및 어그로 / 혐짤 / 낚시 / 뇌절
해당 카테고리의 차단 기간 및 가중처벌은 처리자 재량으로 판단
- 7. 홍보 / 판촉 / 거래
허용되지 않은 모든 형태의 홍보, 거래, 교환, 조건부 공유 시 차단
- 8. 쌀먹 / 바이러스
조건부 공유 & 수익성 링크 & 고의적인 바이러스 유포 시 갱신차단
- 9. 자료 분류 / AI
미검수 시 표기 필수, 생성형 AI를 사용한 자료의 제목에 AI 미기입 시 차단
- 10. 실사 / 토들러
업로드시 갱신 차단
- 11. 기타 세부 규정은 서브 공지사항 참고
삭제된 댓글입니다.