한글패치 관련 짧은 글들

게임메이커 게임 한글화 - 폰트 교체

Snowyegret 2023. 4. 8. 05:09

테스트용 게임은 Shovel Knight Pocket Dungeon

 

 

1. 필요 툴 다운로드

https://gamemaker.io/en/download

 

 

Download GameMaker For Free | GameMaker

Download GameMaker today and start creating your own 2D games with one of the simplest and fastest game engines in the world today. Available for Windows and Mac.

gamemaker.io

게임메이커 스튜디오를 받아서 설치하자.

 

 

https://github.com/krzys-h/UndertaleModTool/releases

 

Releases · krzys-h/UndertaleModTool

The most complete tool for modding, decompiling and unpacking Undertale (and other Game Maker: Studio games!) - krzys-h/UndertaleModTool

github.com

UndertaleModTool을 받아서 압축을 풀자.

* 뭘 받아도 상관없으나,  GUI-windows-latest-Release-isBundled-true-isSingleFile-true.zip 를 받는게 좋다.

 

 

https://www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

폰트 변환 스크립트를 사용하기 위해 파이썬을 깔자.

 

 

 

2. 원본 폰트를 추출하여 정보 알아보기

UndertaleModTool을 실행한 후, data.win을 연다.

그 다음, 바꿔야 할 것으로 추정되는 폰트로 이동해서 기본 설정값들을 확인한다.

폰트 사이즈는 10, bold/italic이 아니며, charset은 0이고, anti aliasing도 0이다. scale은 1x1이다.

 

 

 

일단 폰트를 추출해놓자.

상단 메뉴바 scripts - resource unpackers - exportfontdata.csx를 누르면 2번째 캡처같은 창이 든다.

바꾸고 싶은 폰트를 체크해서 폰트 텍스쳐와 좌표를 추출하자.

추출된 파일은 게임폴더 내 Export_Fonts 폴더에 저장된다.

 

 

 

3. 폰트 생성

에셋 브라우저 빈 공간에서 우클릭을 한 후, 생성 - 글꼴을 누른다.

 

 

 

위에서 봤던 정보들을 이용해 왼쪽의 스타일, 크기, 앤티앨리어싱 설정을 하자.

폰트는 원하는 폰트를 고르면 된다.

 

 

 

그 다음, 원래 있던 범위 2개를 선택 후 "삭제" 버튼을 눌러 삭제하고,

"추가"버튼을 눌러 "ASCII" 선택 후 "범위 추가" 버튼을 눌러 범위를 추가한다..

이후 다시 "추가" 버튼을 눌러 원하는 문자열을 추가한다.

원하는 문자열을 추가할 땐, 아랫쪽 윈도우에 추가하고 싶은 문자들을 복붙한다음 "범위 추가"를 누르면 된다.

 

 

 

그럼 이런식으로 보이게 될 것이다.

좌측 하단 "다시 생성" 버튼을 눌러 텍스쳐를 다시 생성한 후, GameMaker를 종료한다.

폰트 텍스쳐와 좌표는 아래 경로에 있다.

C:\Users\{유저명}\Documents\GameMakerStudio2\{프로젝트명}\fonts\{폰트명}

그냥 "문서" 폴더 열어서 찾아가자.

 

 

 

4. 폰트 형식 변환

아까 추출했던 폰트의 좌표파일(.csv)와, 방금 만든 폰트의 좌표파일(.yy)을 비교해보자.

형식이 다르다.

심지어 .yy 파일을 json형식으로 열려고 하면, 형식이 올바르지 않다고 하며 오류가 발생한다.

 

그래서 .yy -> .csv로 간단하게 바꿔주는 파이썬 스크립트를 짰다.

당연히 사용하려면 Python이 깔려있어야 한다.

 

import json
import csv
import sys
import os


def yy_to_csv(src_file):
    with open(src_file, "r", encoding="utf-8") as f:
        data = f.read()
        data = data.replace(",},", "},")
        data = data.replace("},\n  },", "}\n  },")
        data = data.replace('",\n  },', '"\n  },')
        data = data.replace("},\n  ],", "}\n  ],")
        data = data.replace(",\n}", "\n}")
        data = json.loads(data)

    font_name = f'"{data["fontName"]}"'
    font_size = int(data["size"])
    font_bold = data["bold"]
    font_italic = data["italic"]
    font_charset = data["charset"]
    font_antialias = data["AntiAlias"]
    # 기본
    font_scale_x = 1
    font_scane_y = 1
    font_glyphs = data["glyphs"]

    with open(f"{src_file[:-3]}.csv", "w", newline="") as f:
        writer = csv.writer(f, delimiter=";", quotechar="'")
        writer.writerow(
            [
                font_name,
                font_size,
                font_bold,
                font_italic,
                font_charset,
                font_antialias,
                font_scale_x,
                font_scane_y,
            ]
        )
        for n in font_glyphs:
            glyph = font_glyphs[n]
            writer.writerow(
                [
                    glyph["character"],
                    glyph["x"],
                    glyph["y"],
                    glyph["w"],
                    glyph["h"],
                    glyph["shift"],
                    glyph["offset"],
                ]
            )


dir_full = sys.argv[1]
dir_fn = os.path.basename(dir_full)
print(f"작업할 파일: {dir_fn}")
try:
    yy_to_csv(dir_fn)
except Exception as e:
    print(f"Error!\n{e}")
print("작업 완료! 엔터를 눌러 종료하세요.")
input()

위 코드를 복사해서 main.py로 저장하자.

 

 

 

그 다음 main.py를 아까 생성했던 폰트의 폴더에 넣고

.yy 파일을 main.py에 드래그하자.

그러면 동명의 .csv파일이 새로 생긴다.

 

 

 

* 만약 .py 파일이 파이썬과 연결되어있지 않다면, cmd에서 직접 "python main.py 폰트명"을 쳐도 동작한다.

 

 

 

5. 폰트 교체

 

아까 게임에서 추출한 폰트가 있는 폴더로 이동해보자.

텍스쳐의 이름은 font_main_ko.png, 좌표파일의 이름은 glyphs_font_main_ko.csv이다.

아까 만들었던 폰트의 텍스쳐와, 변환했던 csv파일의 이름을 이것과 동일하게 만든 후, 덮어씌우자.

 

 

 

그 다음 다시 UndertaleModTool로 돌아가서, 상단바 Scripts - Resource Repackers - ImportFontData.csx를 누른다.

 

 

 

Export_Fonts 폴더를 지정해준다.

 

Import가 완료됐으면, Ctrl+S를 눌러 data.win을 저장한 다음 게임을 실행해준다.

 

 

6. 테스트

 

원본

 

 

10px폰트적용

게임을 켜보면 폰트가 제대로 바뀌었다는 것을 알 수 있다.

테스트용으로 빌드한 거라 원본크기 12px짜리 폰트를 사용하였고, 그래서 깔끔하지 않다.

미리미리 폰트를 추출해서 폰트 사이즈를 확인하고, 적당한 폰트를 찾아보자.

 

 

 

12px폰트적용

그리고 당연하게도 폰트 사이즈가 다르더라도 일단 적용이 되긴 된다.

이건 사용한 폰트에 최적화된 12px로 적용시킨 모습이다. 

ASCII계열 문자들이 조금 쳐진 모습을 보이는데, 폰트를 어떻게 잘 바꿔가면서 해보면 되지 않을까 싶다.

 

 

적용한 폰트: DeterminationSansK2