<여름의 끝에 피는 꽃> 커스텀 가이드

English Guide >
简体中文 >

1. 언어 패치에 대해서

<여름의 끝에 피는 꽃>은 언어 패치를 공식적으로 지원합니다. 즉, 사용자가 원하는 언어를 자유롭게 수정 및 추가하고, 작품 내에서 마음껏 변경할 수 있다는 것을 뜻합니다.
또한, 언어 패치를 보조할 수 있는 여러 기능을 지원합니다. 다음은 <여름의 끝에 피는 꽃>의 비공식 언어 패치를 만들 때 참고하면 좋을 가이드입니다.

 

1-1. 언어 생성하기

Ren’py의 “번역 파일 만들기” 기능으로 <여름의 끝에 피는 꽃>의 기본적인 언어 템플릿을 생성할 수 있습니다. 언어를 생성할 때, “언어 코드명”을 기억해 주세요. 언어 코드명은 일반적으로 띄어쓰기가 없는 소문자 영어 문자열로 이루어져 있습니다. 예를 들어, 영어(English)라면 “english”, 간체 중국어(简体中文, Simplified Chinese)라면 “schinese”가 될 수 있습니다.
참고로, 기본 언어인 한국어의 언어 코드명은 따옴표가 없는 None입니다.

 

1-2. 언어 등록하기

<여름의 끝에 피는 꽃>의 시스템에 언어를 적용하려면, 언어를 등록해야 합니다. 언어가 등록되지 않은 언어 템플릿에 언어를 등록하거나, 언어가 등록된 언어 패치를 게임에 삽입하면, <여름의 끝에 피는 꽃>은 사용자 시스템의 언어 설정에 따라 <여름의 끝에 피는 꽃>의 언어를 맞춥니다.
또한, 시스템에 내장되어 있는 언어 선택기를 통해 사용자가 언어를 자유롭게 제어할 수 있도록 합니다.

이를 위해서는 .rpy 파일을 만들어서, tl/(언어 코드명 폴더)/lang_setting.rpy라는 이름과 경로로 집어넣어 주세요. 이 .rpy 파일의 맨 상단에, 다음과 같은 형식의 소스 코드가 들어가야 합니다.

init -1:
    register_language(name="해당 언어로 불리는 언어 이름", id="언어 코드명", subtitle_text="①언어 영문명", uifont_path="UI에서 쓰일 디폴트 폰트의 경로",
                      dialoguefont_path="대사창에서 쓰일 디폴트 폰트의 경로", breaking_method="②줄바꿈 프리셋", locale="③시스템 로케일의 언어 부분", script="④시스템 로케일의 script 부분", 
                      region=("⑤시스템 로케일의 지역 부분 1", "시스템 로케일의 지역 부분 2..."), version="⑥버전")

 

①언어 영문명은 만약 “English”와 같이 따로 영문명이 필요없는 경우에는, 비어 있다는 뜻의 None을 입력해 주세요.

②줄바꿈 프리셋해당 링크에서 확인할 수 있습니다. 일반적으로 “unicode”가 대부분의 언어에 적합합니다.

 

각 언어의 시스템 로케일은 해당 링크에서 확인할 수 있습니다. 아래에선 시스템 로케일이 “ko-kr”이라는 것을 가정하고 설명하겠습니다.

③시스템 로케일의 언어 부분은, 이 중 앞의 언어 부분인 “ko”를 써 주시면 됩니다.

④시스템 로케일의 script 부분은 일반적으로 대부분의 언어에서는 비어 있다는 의미인 None만 적으면 되고, 오직 macOS에서만 활용됩니다. Windows 환경에서는 이 부분은 쓰이지 않으며 또 존재하지 않지만, macOS에서는 대부분의 언어는 존재하지 않으나 “zh-hans-cn”과 같이 존재하는 일부 언어들이 있습니다.(이 때 Windows에선 그냥 “zh-cn”일 것입니다.) 이 때 “hans” 부분이 script입니다. 이 부분을 적어 주세요. 앞서 말했듯 시스템 로케일이 “ko-kr”이라면 script 부분에는 따옴표 없이 그냥 None이라고 적어 주세요. 이는 비어 있다는 뜻입니다. script가 사용되는 모든 언어는 해당 링크Table B-4를 참고하여 확인할 수 있습니다.

⑤시스템 로케일의 지역 부분은, 뒤의 부분인 “kr”을 써 주시면 됩니다.

 

그러면, 결론적으로 시스템 로케일이 “ko-kr” 일 때, 마지막 뒷 세 부분은 “ko”, None, “kr”이 됩니다. 하지만 한국어는 굳이 “kr”을 인식할 필요가 없으므로, “kr” 대신 None을 넣는 것을 권장합니다. 그럼 “ko”, None, None으로 입력할 수 있습니다.
만약, 마지막 뒤의 인식해야 할 지역 부분이 2개 이상일 경우, (“이런”, “식”, “으로”) 여러 개의 지역 부분을 추가할 수 있습니다.
시스템 로케일과 관련된 코드는 전부 소문자로 적어 주세요.

 

폰트는 game/tl/(언어 코드명)/fonts 경로에 넣을 수도 있으며, 기존 <여름의 끝에 피는 꽃>의 폰트 경로를 그대로 사용할 수도 있습니다.
예시는 다음과 같습니다.

 

한국어:

init -1:
    register_language(name="한국어", id=None, subtitle_text="Korean", uifont_path="fonts/NanumSquareB.ttf",
                      dialoguefont_path="fonts/NanumSquareRoundB.ttf", breaking_method="korean-with-spaces", locale="ko", script=None, 
                      region=None, version="1.0")

영어:

init -1:
    register_language(name="English", id="english", subtitle_text=None, uifont_path="fonts/NanumSquareB.ttf",
                      dialoguefont_path="fonts/NanumSquareRoundB.ttf", breaking_method="unicode", locale="en", script=None, 
                      region=None, version="1.1")

간체 중국어:

init -1:
    register_language(name="简体中文", id="schinese", subtitle_text="Simplified Chinese", uifont_path="tl/schinese/fonts/DreamHanSans.ttf",
                      dialoguefont_path="tl/schinese/fonts/975maru.ttf", breaking_method="korean-with-spaces", locale="zh", script="hans", 
                      region=("cn", "sg"), version="1.0")

 

맨 뒤의 ⑥버전은, 언어 패치의 버전이 올라갔을 때(예를 들면, 문자열에 변경 사항이 있을 때) 확인을 위해 변경할 수 있는 구분자입니다.

 

1-3. 폰트 설정하기

다음으로, UI에 들어갈 폰트를 설정해야 합니다.

<여름의 끝에 피는 꽃> UI 요소의 폰트는, lang_style.rpy를 통해 조정할 수 있습니다.
아래의 링크에서 다운로드받을 수 있습니다.

lang_style.rpy 템플릿 다운로드 (3.0+)

해당 lang_style.rpy를 알맞게 수정하여, tl/(언어 코드명 폴더)/lang_style.rpy라는 이름과 경로로 집어넣어 주세요.
해당 템플릿의 translate (language name) 부분의 (language name)은, 전부 적용할 언어 코드명이 되어야 합니다.
예를 들어 언어 코드명이 “english” 라면, translate (language name) style default:translate english style default:가 되어야 합니다.

 

1-4. UI 이미지 적용하기

<여름의 끝에 피는 꽃>의 UI는 대부분이 이미지로 이루어져 있습니다.
아래의 링크에서 UI PSD 템플릿을 다운로드받을 수 있습니다.

<여름의 끝에 피는 꽃> UI 템플릿 다운로드 (3.0+)

기본적으로 <여름의 끝에 피는 꽃>은 마우스가 버튼 위에 hover될 때는 반투명한 이미지를 활용하는데, hover 이미지는 (레이어 이름에 투명도 값이 따로 명시가 되어있지 않는 경우에는) 기본 이미지의 50%의 투명도 값을 가집니다.

 

1-5. 영상 자막 적용하기

<여름의 끝에 피는 꽃>의 ‘마지막 소원’ 불꽃놀이 컷 신, 그리고 다중 언어 자막을 지원하기 위해선 언어에 맞춘 영상 자막 적용이 필요합니다.
이 또한 템플릿 수정을 통하여 쉽게 적용할 수 있으며, 후술할 1-9. ‘마지막 소원’ 컷 신과 영상 커스텀 자막 시스템에서 적용 방법과 커스텀 템플릿을 다운로드할 수 있습니다.

 

1-6. 영어 원문을 그대로 번역하지 않는 문자열

번역 파일인 common.rpy의 몇몇 영어 문구는, 원본 문자열을 “old” 문자열으로 간주하지 않고, 아래에 작성된 “기반으로 할 새로운 문자열”을 새로운 “old” 문자열로 간주하여 new 문자열을 작성해주세요.

1.
old "Saved screenshot as %s."

(원본)

new "%s"

(기반으로 할 새로운 문자열)

 

2.
old "This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?"

(원본)

new "This save was created on a different device.{vspace=1}{size=23}Save files from untrusted sources may harm your device.\nYou may see this message if the save file from Steam Cloud was created on a different device.\nDo you trust this save and want to continue?{/size}"

(기반으로 할 새로운 문자열)

 

실제 <여름의 끝에 피는 꽃>에서 사용된 한국어 원문은 다음과 같습니다.

new "다른 PC에서 생성된 저장 파일입니다.{vspace=1}{size=23}신뢰할 수 없는 출처의 저장 파일은 PC에 해를 끼칠 수 있습니다.\nSteam Cloud의 저장 파일이 다른 PC에서 생성되었을 경우 이 메시지가 보일 수 있습니다.\n이 저장 파일을 신뢰하며, 계속 진행할까요?{/size}"

 

3.
old "Do you trust the device the save was created on? You should only choose yes if you are the device's sole user."

(원본)

new "Do you trust all the saves made on this device?{vspace=1}{/size}{size=23}Only click the confirm button to continue if the save file was created by another device, \nnot downloaded from an unknown web source or elsewhere. \nOnce you click the confirm button, any save file created on this device will be loaded without asking.{/size}"

(기반으로 할 새로운 문자열)

 

실제 <여름의 끝에 피는 꽃>에서 사용된 한국어 원문은 다음과 같습니다.

new "이 PC의 모든 저장 파일을 신뢰할까요?{vspace=1}{size=23}출처를 모르는 웹 등에서 다운로드한 것이 아닌,\n다른 PC에서 직접 생성한 저장 파일인 경우에만 확인 버튼을 눌러 계속하세요.\n확인 버튼을 누르면, 앞으로 이 PC에서 생성된 저장 파일은 질문 없이 불러옵니다.{/size}"

 

1-7. 한국어 번역문을 원본 문자열로 간주하는 문자열

screens.rpy의 일부 문자열은 <여름의 끝에 피는 꽃>의 버전에 따라 타 언어에서 문자가 깨지는 등의 문제를 방지하기 위해 한국어가 아닌 영어를 원문으로 설정해두었고, <여름의 끝에 피는 꽃>의 언어를 한국어로 설정 시 한국어로 변환해서 보여주고 있습니다.
따라서 원래 영어 문자열은 한국어 문자열의 모든 의미를 살리지 않을 수 있으며, 한국어 원문 문자열을 기준이 되는 “old” 문자열으로 삼아 번역해야 합니다.

아래는 해당되는 전체 문자열입니다.

old "Language Switch Shortcuts"
new "언어 전환 단축키"
old "Multi-language Subtitles"
new "다중 언어 자막"
old "Labs"
new "실험실"
old "Flowers Blooming: Main Game"
new "‘여름의 끝에 피는 꽃’ 본편"
old "You are currently running the Main Game of Flowers Blooming \nat the End of Summer. Thank you sincerely for your purchase and support."
new "현재 ‘여름의 끝에 피는 꽃’ 본편을 실행 중이에요.\n‘여름꽃’을 구매하고 후원해주셔서, 진심으로 감사드립니다."
old "Flowers Blooming: Steam Edition"
new "‘여름의 끝에 피는 꽃’ 스팀 에디션"
old "You are currently running the Steam Edition of Flowers Blooming \nat the End of Summer. Thank you sincerely for your purchase and support."
new "현재 ‘여름의 끝에 피는 꽃’ 스팀 에디션을 실행 중이에요.\n‘여름꽃’을 구매하고 후원해주셔서, 진심으로 감사드립니다."
old "This Supporter’s Edition includes achievements, cloud saves, and \nSteam Points Shop rewards like Trading Cards, Avatars, and Profile Backgrounds."
new "도전 과제와 스팀 클라우드 등 편의 기능이 포함된 후원판입니다.\n트레이딩 카드, 아바타, 프로필 배경 등 포인트 상점 아이템을 포함합니다."
old "Flowers Blooming: Design Works"
new "‘여름의 끝에 피는 꽃’ 디자인 웍스"
old "The official digital artbook, featuring behind-the-scenes \nstories, setting details, concept art, and storyboards from development."
new "‘여름의 끝에 피는 꽃’의 공식 디지털 아트북입니다.\n개발 비화, 설정, 컨셉 아트, 스토리보드 등을 포함합니다."
old "Flowers Blooming: Soundtrack"
new "‘여름의 끝에 피는 꽃’ 사운드트랙"
old "The official OST with 16 tracks, \nincluding two previously unreleased bonus songs."
new "‘여름의 끝에 피는 꽃’의 공식 사운드트랙입니다.\n본편에 미공개된 두 곡을 포함, 총 16곡입니다."
old "Flowers Blooming: Wallpaper"
new "‘여름의 끝에 피는 꽃’ 디지털 월페이퍼"
old "Official wallpapers showcasing event CGs, \nincluding some that do not appear in the main game."
new "‘여름의 끝에 피는 꽃’의 공식 디지털 월페이퍼입니다.\n본편에 미공개된 이벤트 CG를 포함합니다."
old "Open"
new "열기"
old "Purchase"
new "구매"
old "Owned"
new "보유 중"
old "Play"
new "실행"
old "Open Design Works Now"
new "디자인 웍스 바로 열기"
old "View in Folder"
new "폴더에서 보기"
old "DLC installed but path not found.\nConfirm files haven’t been deleted, moved, or renamed."
new "DLC가 설치되었으나, 설치된 경로를 찾지 못했습니다.\n파일을 삭제 혹은 이동, 혹은 파일의 이름을 바꾸지 않았나 확인해 주세요."
old "DLC installed but path not found.\nConfirm files haven’t been deleted, moved, or renamed.\nThis may occur if your Free Edition and DLC paths differ.\nWould you like to launch the Steam Edition instead?"
new "DLC가 설치되었으나, 설치된 경로를 찾지 못했습니다.\n파일을 삭제 혹은 이동, 혹은 파일의 이름을 바꾸지 않았나 확인해 주세요.\n이는 현재 실행 중인 Free 버전과 설치된 경로가 달라서 그럴 수 있어요.\n대신 Steam 에디션을 실행할까요?"
old "Can access DLC folder but files are missing.\nConfirm files haven’t been deleted, moved, or renamed.\nOpen installation folder instead?"
new "DLC가 설치된 폴더는 열 수 있으나, 파일을 찾지 못했습니다.\n파일을 삭제 혹은 이동, 혹은 파일의 이름을 바꾸지 않았나 확인해 주세요.\n대신 설치된 폴더를 열까요?"
old "Game and soundtrack may have different installation paths.\nPlease check each path separately in Steam."
new "게임이 설치된 경로와 사운드트랙이 설치된 경로가 다를 수 있습니다.\n이 때는 Steam에서 각각의 설치 경로를 확인해 주세요."
old "Original expected path"
new "원래 존재해야 하는 경로"
old "This save file was created with a mod that is not currently installed.\nTo load this save file, you need to install the mod first."
new "{size=35}현재 설치되지 않은 모드에서 저장된 파일입니다.\n이 저장 파일을 불러오려면, 먼저 해당 모드를 설치해야 합니다.{/size}"
old "This save file has the following mod applied:"
new "이 저장 파일에 적용된 모드:"
old "The currently applied MOD file does not have a translation for this language ([lang_current]).\nText may appear broken.\nPlease download the latest version of the MOD or a MOD file translated to this language."
new "현재 적용된 MOD 파일에는, 해당 언어([lang_current])의 번역이 존재하지 않습니다.\n텍스트가 깨져 보일 수 있습니다.\nMOD의 최신 버전이나, 해당 언어로 번역된 MOD 파일을 다운로드해 주세요"

 

1-8. 추가적인 도움이 될 만한 정보

1-8-1. 주석

단어에 대해 설명하는 주석을 추가할 수 있습니다. 이 작업은 번역 .rpy 파일 내에서 진행할 수 있습니다.
예시로, 아래와 같은 번역문의 “comment”라는 단어에 주석을 삽입하려면 다음과 같은 방법대로 진행하면 됩니다.

translate english prologue_466c17b0:

    # "흘러가는 시간 속에서, 기억은 조각나 파편이 되기 마련이다. "
    "Hello? This is comment test.\nThank you!"

1. 주석이 들어가는 단어를 태그로 감싸기

먼저, 주석을 표시할 단어인 “comment”를, {cmt=(주석 코드명)}{/cmt}로 감싸 줍니다.
주석 코드명과 같은 경우는, 다른 언어 혹은 주석과 겹치지 않는 고유한 코드명이어야 합니다. 예시는 아래와 같습니다.

translate english prologue_466c17b0:
    
    # "흘러가는 시간 속에서, 기억은 조각나 파편이 되기 마련이다. "
    "Hello? This is {cmt=english_466c17b0}comment{/cmt} test.\nThank you!"

2. 주석 등록하기

위에서 삽입한 lang_setting.rpy에 python 블록을 새로 만들어 아래와 같은 형식으로 주석을 등록하는 소스 코드를 추가합니다.

init python:
    TooltipComment("(주석 코드명)", "(주석 내용)")

이를 반영하면, 아래와 같이 변수가 작성됩니다. 주석 코드명의 경우는 겹치지 않는 아무 코드명을 입력할 수 있습니다.

init python:
    TooltipComment("english_466c17b0", "This is the content of the comment.")

다음과 같이, 여러 주석을 등록할 때는 Python 블록은 유지한 채 여러 줄로 주석을 등록해줄 수 있습니다.

init python:
    TooltipComment("english_466c17b0", "This is the content of the comment.")
    TooltipComment("english_3af24308", "This is the content of the comment. (2)")
    TooltipComment("english_06bfe242", "This is the content of the comment. (3)")
    # ... (계속)

이러면, 해당 대사창에서 위와 같이 커서를 올려두면 주석이 나옵니다.

 

1-8-2. 폰트 라이선스

폰트의 저작권(라이선스)를 추가 및 등록할 수 있습니다.
폰트의 라이선스는, game/License/Fonts 폴더에 .txt 파일의 형식으로 넣을 수 있습니다.

 

init -2 python:
    register_font(name="(폰트 이름)", font_path="(폰트 경로)", license_path="License/Fonts/(파일명).txt")

예시는 다음과 같습니다.

init -1:
    register_font(name="Roboto", font_path="tl/english/fonts/Roboto.ttf", license_path="License/Fonts/Roboto.txt")

이러면, ‘제작진’의 Font License 스크린에 License가 추가됩니다.

 

1-8-3. 제작진 추가하기

game/tl/(언어 코드명)/lang_developer/ 폴더에, 단순히 이미지를 추가하는 것만으로도 각 언어에 맞게 언어 패치의 제작진을 포함할 수 있습니다.
해당 이미지는 메인 메뉴의 ‘제작진’ 탭 내 ‘번역가’ 탭을 클릭할 때 보여줍니다.

예를 들면, 언어 코드명이 ‘schinese(간체 중국어)’일 때, 같은 중국어로 설정되어 있다면 “schinese.png”를 보여주며, 현재 여름꽃의 언어가 한국어로 설정된 경우, “none.png”를 보여줍니다. (한국어는 여기서 소문자 ‘none’이라는 언어 코드명을 가진 것으로 간주합니다.) 또한, 그 외 언어에서 보여주는 포괄적인 크레딧 이미지인 “others.png”도 포함할 수 있습니다. “others.png”의 내용은 영어로 쓰는 것이 가장 좋은 방법일 것입니다.

물론, 언어 패치의 개발자는 이를 전부 신경쓰지 않고, 자신이 추가한 언어와 같은 언어의 크레딧 이미지 하나, 예를 들면 앞서 말했듯 개발자가 개발한 언어 패치가 ‘schinese(간체 중국어)’인 경우 오직 “schinese.png”만 포함해도 됩니다. 이러면 모든 언어에서 “schinese.png”만 보여줍니다


언어 코드명이 ‘schinese(간체 중국어)’일 때 제작진 크레딧 이미지 번역의 예시입니다.

또한, 다음과 같은 형식의 소스 코드를 lang_setting.rpy에 추가하여 자신의 웹페이지를 직접 제작진에 추가할 수 있습니다.

init -4:
    $ developer_webpage['(언어 코드명)'] = {(홈페이지 아이콘 1): '(웹페이지 링크 1)', (홈페이지 아이콘 2): '(웹페이지 링크 2)', ...}

홈페이지 아이콘은 43×43 크기의 이미지로, <여름의 끝에 피는 꽃>은 기본적으로 다음의 총 4가지의 템플릿을 제공합니다.

developer_webpage_icons['x']
developer_webpage_icons['x_oldbird']
developer_webpage_icons['steam']
developer_webpage_icons['others']

또한, 홈페이지 아이콘 부분에는 앞서 언급한 developer_webpage_icons[‘x’] 등의 아이콘 템플릿을 입력하는 것이 아닌, 필요하다면 해당 부분에 ‘tl/schinese/gui/github.png’와 같이 커스텀된 이미지 경로를 대신 입력하는 방식으로 직접 만든 43×43의 이미지의 경로를 포함할 수도 있습니다. 이 때 주의해야 할 점은, ‘developer_webpage_icons…’ 등을 제외한 경로만 작은 따옴표로 감싸서 입력해줘야 합니다.

 

다음은 현재 <여름의 끝에 피는 꽃>에 포함된 ‘schinese(간체 중국어)’ 번역에 홈페이지를 추가한 예시 이미지와 소스 코드입니다.

init -4:
    $ developer_webpage['schinese'] = {developer_webpage_icons['x']: 'https://x.com/test', developer_webpage_icons['others']: 'https://test.com/'}

 

아래의 링크에서 제작진 PSD 템플릿 파일을 다운로드할 수 있습니다.
이미지 파일의 강점은 자유자재로 수정할 수 있는 것이기에, 타이틀 부분을 제외한 내용의 위치는 가이드로서 참고만 해 주시고, 마음껏 수정할 수 있습니다.

staff_template.psd 템플릿 다운로드

 

1-8-4. 언어 패치에 소스 코드를 추가하고 싶을 때

game/tl/(언어 코드명)/ 폴더에, lang_(스크립트 이름).rpy라는 이름으로 추가해 주시는 것을 권장합니다.
tl 폴더 안에 언어 번역과 상관 없는 추가적인 .rpy 파일을 넣을 때는 꼭 접두사 “lang_”을 파일명 앞에 붙여주세요.

 

1-9. ‘마지막 소원’ 컷 신과 영상 커스텀 자막 시스템

주의: game/tl/(언어 코드명)/video/lastwish.webm(=미리 자막이 임베드된 영상 파일)이 이미 있는 경우, ‘마지막 소원’ 불꽃놀이 컷 신은 자막을 표기하지 않고 해당 영상을 우선시합니다. ‘마지막 소원’의 자막을 커스텀하기 위해서는, 언어 패치 내에 lastwish.webm을 포함하면 안 됩니다.

<여름의 끝에 피는 꽃> 4주년 업데이트부터, 영상 연출 등에 적용할 수 있는 커스텀 자막 기능이 추가되었습니다.
커스텀 자막 기능을 통해서, 언어 패치를 만들 때 굳이 영상을 직접적으로 수정할 필요 또한 없게 되었으며(특히 ‘마지막 소원’ 불꽃놀이 컷 신), 자막만 수정하는 것으로 이를 지원하는 것이 가능합니다.
자막은 ‘리스트’를 통해 무한정 추가가 가능하기에(1-9-4. 세부: 사전 정의된 자막 리스트에 자막 추가 참고), 자막에 대해 추가로 설명하는 주석과 같은 방식으로도 활용할 수 있습니다.

또한, 아래의 실험실 기능에서 설명하는 다중 언어 자막(Multi-Language Subtitles)에서도 이는 유용하게 사용됩니다. 즉, 대사창 텍스트로 보여지는 글이 아닌 특정 언어(ex. 원본인 한국어)로 이미 글귀가 적혀져 있는 영상/이미지 연출을 사용할 때, 해당 연출 영상/이미지에서는 이미 원본 언어인 한국어로 글이 써져 있으니 기본적으로 자막이 보이지 않도록 설정하고, 다중 자막이 켜져 있고 다른 언어(ex. 중국어, 영어 등)가 선택되어 있을 때에만 자막이 보이도록 할 수 있습니다.
언어 패치를 만들 때는 이에 대한 상세한 부분까지 신경 쓸 필요 없이, 아래 제공될 템플릿에서 언어 코드명과 실제 자막 내용만 수정하면 언어 패치가 완벽하게 다중 언어 자막을 지원하도록 할 수 있습니다.

아래에서 제공되는 lang_subtitle.rpy 템플릿은 이미 자막 스타일이나 ID 등이 전부 미리 채워져 있는 완성된 템플릿입니다.
해당 lang_subtitle.rpy 템플릿에서 (language name) 부분을 실제 언어 코드명으로 일괄 수정하고, {‘text’: 이하의 텍스트를 실제 매칭되는 언어의 자막으로 수정한 후, game/tl/(언어 코드명)/lang_subtitle.rpy와 같이 언어 패치 폴더 내에 추가하면, 바로 ‘마지막 소원’ 불꽃놀이 컷 신 등에서 영상 번역 자막의 적용을 완료할 수 있습니다.

lang_subtitle.rpy 템플릿 다운로드(3.0+)

 

이 이하 1-9-1. 세부: 자막 설정 및 스타일 지정부터의 내용은 단순히 언어 패치를 만들기 위해서는 lang_subtitle.rpy의 내용만 수정해도 되므로, 일반적으로 꼭 알지 않아도 되는 내용입니다.

다만, 세부적인 자막의 커스텀 방법을 알고 싶다면 아래의 내용을 추가적으로 참고해 주세요.

 

1-9-1. 세부: 자막 설정 및 스타일 지정

'settings': {
    'id': '자막 ID', 'language': '언어 코드명',
    'style': {'pos': (자막 X좌표, 자막 Y좌표), 'anchor': ①(자막 중앙 기준 X 위치, 자막 중앙 기준 Y 위치), 'bg': ②(자막 전경 X 간격, 자막 전경 Y 간격), 'text_style': '③자막 스타일', 'text_font': '④자막 폰트 경로', 'enabled': ⑤활성/비활성 여부},
    'alt_style': {'pos': (자막 X좌표, 자막 Y좌표), 'anchor': ①(자막 중앙 기준 X 위치, 자막 중앙 기준 Y 위치), 'bg': ②(자막 전경 X 간격, 자막 전경 Y 간격), 'text_style': '③자막 스타일', 'text_font': '④자막 폰트 경로', 'enabled': ⑤활성/비활성 여부}
}

id는, 자막 고유의 ID를 입력합니다. 같은 ID를 가진 여러 언어의 자막 또한 존재할 수 있습니다.

language는 해당 자막이 표시될 언어 코드명(ex. None, ‘english’, ‘schinese’)을 입력합니다. None은 기본 언어인 한국어로 간주합니다.

style은 자막의 전반적인 메인 스타일을 정의합니다. 일반적으로 보이는 스타일입니다. style이 들어갈 자리에 None을 입력하면 아예 자막 스타일을 사용하지 않는 것으로 간주해, 자막이 보이지 않게 됩니다. alt_style만 보여주고 싶은 경우(ex. 다중 언어 자막에서만 보조 자막으로 활용할 때) None으로 아예 스타일을 지정하지 않을수도 있습니다.

alt_style은 자막의 대체 스타일입니다. 이는 아래에서 설명할 다중 언어 자막(Multi-Language Subtitles)을 활성화했을 때, 이 자막이 이 자막 언어의 보조 자막으로 사용될 때 사용되는 스타일입니다. alt_style이 들어갈 자리에 None을 입력하면 아예 자막 스타일을 사용하지 않는 것으로 간주해, 자막이 보이지 않게 됩니다.

 

①(자막 중앙 기준 X 위치, 자막 중앙 기준 Y 위치)는 자막의 중심이 어디에 위치할지 지정합니다. 범위는 0.0~1.0입니다. 만약, 자막의 좌표가 (300, 300)이고, ①(자막 중앙 기준 X 위치, 자막 중앙 기준 Y 위치)의 값이 (0.0, 0.0)이면, 자막은 (300, 300)부터 오른쪽, 윗쪽 정렬로 표시됩니다. 하지만 ①(자막 중앙 기준 X 위치, 자막 중앙 기준 Y 위치)의 값이 (0.5, 0.5)라면 자막은 (300, 300)을 기준으로 정중앙 정렬로 표시됩니다.

②(자막 전경 X 간격, 자막 전경 Y 간격)은 자막에 검은색 전경을 추가할 때 활용할 수 있습니다. X 간격(=padding)과 Y 간격을 입력해서, 예를 들면 (10, 10)처럼 입력할 수 있습니다. 그럼 상하좌우 10픽셀까지 펼쳐지는 검은색 전경이 뒷배경에 생깁니다.

③자막 스타일은 Style 문을 통해 지정된 Style을 입력할 수 있습니다. 이 Style 문은 size(자막의 크기), color(자막의 색상), font(자막 폰트의 경로), align(중앙 정렬), xsize(자막의 최대 가로 길이) 과 같은 스타일을 지정합니다. 예를 들어, style custom_subtitles_text_style:과 같은 형식의 Style 문이 있다면, ‘custom_subtitles_text_style’을 입력할 수 있습니다. 해당 Style 문법의 사용법은 위에서 제공된 lang_style.rpylang_subtitle.rpy를 참고할 수 있습니다.

④자막 폰트 경로에는 ③자막 스타일에서 지정한 Style 문에서 이미 폰트가 선언된 경우, 일반적으로는 None을 적어 무시되도록 합니다. 또한, alt_style인 경우에는 ‘language_font’를 적어, 해당 자막에 지정된 언어 코드명의 기본 대사창에서 사용되는 폰트를 유동적으로 적용할 수 있습니다. 또한, Style 문에서 폰트가 선언되지 않은 경우 직접 따옴표 내에 작품 내의 커스텀 폰트 경로를 수동으로 입력할 수 있습니다.

⑤활성/비활성 여부는 True/False를 입력하면 됩니다. 테스트 시 사용할 수 있으며, 일반적으로 True를 입력합니다.

 

1-9-2. 세부: 자막 내용 및 싱크 지정
'subtitles': (
    {'text': '자막 텍스트', 'time': (자막 시작 시간(초), 자막 끝 시간(초)), 'fade': (자막 페이드 인 시간(초), 자막 페이드 아웃 시간(초)), 'warper': ①('자막 페이드 인 보간 방법', '자막 페이드 아웃 보간 방법')},
    {'text': '자막 텍스트', 'time': (자막 시작 시간(초), 자막 끝 시간(초)), 'fade': (자막 페이드 인 시간(초), 자막 페이드 아웃 시간(초)), 'warper': ①('자막 페이드 인 보간 방법', '자막 페이드 아웃 보간 방법')}
    # 이하 계속 추가 가능...
)

①(‘자막 페이드 인 보간 방법’, ‘자막 페이드 아웃 보간 방법’)은 자막이 어떤 방식으로 나타나고 사라질지에 대한 보간기를 지정하는 부분입니다. ‘linear’, ‘ease’, ‘easeout’, ‘easein’으로 총 네 가지의 보간기를 지원합니다.

‘linear’는 아무런 보간 없는 기본적인 페이드 인/아웃, ‘ease’는 시작 시 느리다가, 중간 지점에서는 빨라졌다가, 끝날 때 다시 느려지는 페이드 인/아웃, ‘easeout’은 시작은 빠르다가 끝에 가서는 느려지는 페이드 인/아웃, ‘easein’은 시작은 느리다가 끝에 가서는 빨라지는 페이드 인/아웃을 보여줍니다.

 

1-9-3. 세부: 자막 설정 및 스타일과 자막 내용 및 싱크 합치기
init -3:
    $ my_custom_subtitles = {
        'settings': {
            'id': 'custom_subtitles', 'language': 'english',
            'style': {'pos': (640, 7), 'anchor': (0.5, 0.5), 'bg': None, 'text_style': 'custom_subtitles_text_style', "text_font": None, 'enabled': True},
            'alt_style': {'pos': (640, 45), 'anchor': (0.5, 0.5), 'bg': (10, 5), 'text_style': 'custom_subtitles_text_alt_style', "text_font": 'language_font', 'enabled': True}
        },
        'subtitles': (
            {'text': 'Test1', 'time': (1.0, 2.0), 'fade': (0.3, 0.3), 'warper': ('linear', 'linear')},
            {'text': 'Test2', 'time': (2.0, 3.0), 'fade': (0.3, 0.3), 'warper': ('linear', 'linear')},
            {'text': 'Test3', 'time': (3.0, 4.0), 'fade': (0.3, 0.3), 'warper': ('linear', 'linear')}
        )
    }

style custom_subtitles_text_style:
    align (0.5, 0.5)
    color '#ffffff'
    font 'fonts/NanumSquareEB.ttf' 
    size 20
    xsize 600

style custom_subtitles_text_alt_style:
    align (0.5, 0.5)
    color '#ffffff'
    size 15
    xsize 500

위의 자막 예시와 같이 ‘자막 설정 및 스타일(settings: { … })’‘자막 내용 및 싱크(subtitles: ( … ))’를 합쳐 하나의 변수로 자막을 지정해야 합니다.

예시에서는 <여름의 끝에 피는 꽃>의 언어가 영어(english)로 설정된 경우(style)에 해당 자막이 보이고, 자막이 보일 때는 640, 7 위치로 중앙 정렬되며, ‘custom_subtitles_text_style’을 통해 자막의 색상은 흰색이고, 자막의 폰트 크기는 20px이며, 최대 자막의 길이는 가로 600픽셀이고, ‘NanumSquareEB.ttf’ 폰트가 적용된 모습을 보여줍니다.
또한, <여름의 끝에 피는 꽃>의 언어가 다른 언어로 설정되어 있고, 영어가 다중 언어 자막에서 보여지는 언어로 설정된 경우(alt_style)에는 640, 45 위치로 중앙 정렬되며, 가로 좌우 10픽셀, 세로 상하 5픽셀의 전경이 있으며, ‘custom_subtitles_text_alt_style’을 통해 자막의 색상은 흰색이고, 자막의 폰트 크기는 15px이며, 최대 자막의 길이는 가로 500픽셀이고, 폰트는 따로 지정하지 않고 영어(english)의 기본 대사창에서 사용되는 폰트를 그대로 사용하는 것을 확인할 수 있습니다.

 

1-9-4. 세부: 사전 정의된 자막 리스트에 자막 추가

위와 같은 식으로 변수를 지정해 자막을 만든 다음, 아래의 사전 정의된 영상 커스텀 자막 리스트에 .append() 문법을 쓰는 방식으로 자막을 추가할 수 있습니다.
모든 사전 정의된 영상 커스텀 자막 리스트는 아래와 같습니다.

lastwish_subtitle_list
edmovie_subtitle_list
yef1_subtitle_list
yef2_subtitle_list
yef3_subtitle_list
yef4_subtitle_list
yef5_subtitle_list
yef6_subtitle_list
yef7_subtitle_list
yef8_subtitle_list
yef9_subtitle_list
yef10_subtitle_list
yef11_subtitle_list
yef12_subtitle_list
yef13_subtitle_list
yef14_subtitle_list
yef15_subtitle_list
yef16_subtitle_list
yef17_subtitle_list
jef6_subtitle_list
typ_1_subtitle_list
typ_2_subtitle_list
yef18_subtitle_list
yef19_subtitle_list
yef20_subtitle_list
yef21_subtitle_list
yef22_subtitle_list
yef23_subtitle_list
yef24_subtitle_list

만약 커스텀 자막을 1-9-3. 세부: 자막 설정 및 스타일과 자막 내용 및 싱크 합치기에서와 같이 my_custom_subtitles라는 변수로 정의했고, 이를 ‘마지막 소원’ 컷 신에 추가하고 싶다면, 아래와 같은 방식으로 자막을 추가할 수 있습니다.
자막을 .append() 할 수 있는 갯수에는 제한이 없습니다.

init -3:
    $ lastwish_subtitle_list.append(my_custom_subtitles)

<여름의 끝에 피는 꽃> 본편에 사전 정의된 자막 리스트를 제외하고도, 자신이 만든 모드의 영상/이미지 컷 신에 커스텀 자막 리스트를 추가하고 싶다면, 2-2. 영상 커스텀 자막 추가를 참고하세요.

 

1-10. 실험실 기능

<여름의 끝에 피는 꽃>은 언어 실험실 기능을 지원합니다. Console“labs”를 입력하거나, 설정의 언어 선택 창에서 활성화할 수 있습니다.
언어 실험실 기능은, ‘여름꽃’의 공식 커스텀 언어 패치 지원 기능을 지원하는 모든 언어 패치에서 활용 가능하며, 새로운 언어 학습 등에 특히 도움을 줄 수 있습니다.
다만 실험실 기능은 아직 완벽하게 완성되지 않았기에, 부족한 부분이 있을 수 있습니다.

 

1-10-1. 언어 변경 단축키(Language Switch Shortcuts)

스토리를 진행 중, 언어를 쉽게 변경할 수 있는 단축키를 제공합니다.
각 단축키는 언어 변경 창에서 확인할 수 있습니다.

 

1-10-2. 다중 언어 자막(Multi-Language Subtitles)

다른 언어의 추가적인 자막을 함께 띄운 채 스토리를 진행할 수 있습니다.
이 기능은 언어 학습 등에 도움이 될 수 있습니다.
다중 언어 자막은 모든 기본 대사 창에 출력되는 대사에 적용되며, 영상이나 이미지 효과에서 다중 언어 자막을 적용하려면 1-9. ‘마지막 소원’ 컷 신과 영상 커스텀 자막 시스템을 참고해 주세요.

 

2. 커스텀 모드에 대해서

<여름의 끝에 피는 꽃>은 사용자가 작품을 직접 수정하는, 모딩이 가능합니다.
game/(모드 파일 이름)/ 폴더를 생성하고, 그 안에 접두사가 “mod_”인 .rpy 파일과 리소스 파일을 삽입하는 것을 권장합니다. 예를 들면, mod_screens.rpy, mod_script.rpy가 될 수 있습니다.

모드는 Console을 통해서 진입하거나, 빠져나올 수 있습니다. 또한 모드만의 커스텀 Console 명령어를 만들 수 있습니다.

모드의 rpy에는, 언어와 같이 모드를 등록하는 소스 코드가 들어가야 합니다. 다음과 같은 형식입니다.

init -1:
    $ modlist.append(("모드 타이틀", "①모드 코드명", "메인 화면 이미지", "②메인 화면 로고 이미지", "메인 화면을 클릭했을 때 나오는 메뉴 화면의 전경에 채워지는, 블러 처리된 메인 화면 이미지", "메뉴 화면에서 메뉴를 클릭했을 때 전경에 채워지는, 블러 처리된 메뉴 화면 이미지", "③메인 화면을 클릭했을 때 진입하는 메뉴 screen", "모드 진입 시 사용할 콘솔 명령어", "모드 퇴장 시 사용할 콘솔 명령어", ("④추가하고 싶은 커스텀 콘솔 명령어 1", "추가하고 싶은 커스텀 콘솔 명령어 2..."), "버전"))

①모드 코드명: 모드를 식별하기 위한 코드명입니다. “flowersblooming”, “custommod1234”과 같이 간단하지만 구분되는 코드명이어야 하며, 모드가 업데이트될 때도 변하면 안 됩니다.

②메인 화면 로고 이미지: 1280 x 720의 전체화면 이미지 파일 또한 지원하여, 로고를 아무 곳에나 자유롭게 둘 수 있습니다.

③메인 화면을 클릭했을 때 진입하는 메뉴 screen: 메인 화면 스크린에서 클릭했을 때, 해당 screen으로 진입합니다. 시스템의 기본값은 “main_menu_menu”이며, 원래 시스템 rpy의 내용인 “main_menu_menu” screen을 복사해서 mod_screens.rpy에 옮긴 뒤, “main_menu_menu_custom”이라고 다시 이름지은 다음 이를 사용할 수 있습니다.

④추가하고 싶은 커스텀 콘솔 명령어: 커스텀 콘솔 명령어를 지을 수 있습니다.

만약, 추가하고 싶은 커스텀 콘솔 명령어가 “custom1” 이라면, 다음과 같은 label을 통해 커스텀 콘솔 명령어가 수행할 명령을 지정할 수 있습니다.

label custom1:
    (내용)
    return

 

실제 <여름의 끝에 피는 꽃>의 시스템 파일 경로를 참고한, 전체 예시는 다음과 같습니다.

init -1:
    $ modlist.append(("여름의 끝에 피는 꽃", "flowersblooming", "gui/main/main/bg_1.png", "gui/main/main/tag_1.png", "gui/blur/0/steam/main.png", "gui/blur/0/steam/menu.png", "main_menu_menu", "entermod", "exitmod", ("customcommand1", "customcommand2"), "1.0"))

 

2-1. 커스텀 인물 추가

<여름의 끝에 피는 꽃>의 모드를 만들 때, 커스텀 인물 추가는 아래의 규칙을 지켜야 합니다.
이를 지키지 않는다면, 스타일이 망가지거나 4주년 업데이트(3.0)부터 추가된 대사 투명도 옵션이 작동하지 않을 수 있습니다.

 

2-1-1. 기본 대사창을 사용하는 커스텀 인물 추가 예시
define 커스텀 캐릭터 변수명 = Character(_('커스텀 캐릭터 표시 이름'), voice_tag="custom_voice_tag", ctc="ctc_blink", ctc_position="nestled")

 

2-1-2. 회상 대사창을 사용하는 커스텀 인물 추가 예시
define 커스텀 캐릭터 변수명o = Character(_('커스텀 캐릭터 표시 이름'), who_style = "dialogue_name_text_letterbox", what_style = "dialogue_text_letterbox", voice_tag="custom_character", window_background = None, ctc="ctc_blink", ctc_position="nestled")

또한, 아래의 코드를 함께 추가해 배경 이미지의 속성을 등록해야 합니다.

init -3:
    $ say_background[Image('gui/quickbutton/nvl.png')].append('커스텀 캐릭터 변수명o')

 

2-1-3. 그림자가 있는 전체 화면 대사창(NVL)을 사용하는 커스텀 인물 추가 예시
define shnvl_커스텀 캐릭터 변수명 = Character(_('커스텀 캐릭터 표시 이름'), who_color = "#ffffff00", what_style = "dialogue_nvl_text", voice_tag="custom_voice_tag", window_style = "say_nvl_window")

또한, 아래의 코드를 함께 추가해 배경 이미지의 속성을 등록해야 합니다.
해당 코드는 설정에서 대사창의 투명도를 조절할 시, 제대로 된 대사창 이미지를 보여주기 위해 필요합니다.

init -3:
    $ say_background[Image('gui/quickbutton/hiding.png')].append('shnvl_커스텀 캐릭터 변수명')

 

2-1-4. 완전히 투명한 전체 화면 대사창(NVL)을 사용하는 커스텀 인물 추가 예시
define trnvl_커스텀 캐릭터 변수명 = Character(_('커스텀 캐릭터 표시 이름'), who_color = "#ffffff00", what_style = "dialogue_nvl_text", voice_tag="custom_voice_tag", window_background = None)

또한, 아래의 코드를 함께 추가해 배경 이미지의 속성을 등록해야 합니다.
해당 코드는 설정에서 대사창의 투명도를 조절할 시, 제대로 된 대사창 이미지를 보여주기 위해 필요합니다.

init -3:
    $ say_background[Image('gui/quickbutton/nvl.png')].append('trnvl_커스텀 캐릭터 변수명')

 

2-2. 영상 커스텀 자막 추가

자신이 만든 모드의 영상/이미지 컷 신에 영상 커스텀 자막을 추가할 수 있습니다.
다음은 my_custom_subtitles1과 my_custom_subtitles2라는 변수명을 가진 두 개의 커스텀 자막을 한 영상에서 보여주는 예시입니다.

label custom_mod_label:
    # ...

    $ custom_movie_subtitles = [my_custom_subtitles1, my_custom_subtitles2] # 커스텀 자막 리스트를 custom_movie_subtitles로 지정, 추후 .append()로 추가 가능
    show custom_movie # 영상 재생
    $ show_movie_subtitle(custom_movie_subtitles) # 커스텀 자막(custom_movie_subtitles) 재생
    $ renpy.pause(5, hard=True) # 영상이 중지될 때까지 대기
    hide custom_movie # 영상 중지
    $ hide_movie_subtitle(custom_movie_subtitles) # 커스텀 자막(custom_movie_subtitles) 중지

    # ...

 

커스텀 자막을 구성하는 방법에 대해서는, 1-9. ‘마지막 소원’ 컷 신과 영상 커스텀 자막 시스템 및 1-9-1. 세부: 자막 설정 및 스타일 지정 이하를 참고해 주세요.

 

2-2-1. show_movie_subtitle() 속성

자막을 재생하는 역할을 하는 show_movie_subtitle()는 다음과 같은 속성을 받습니다.

show_movie_subtitle(커스텀 자막 리스트, exclude=①('제외할', '자막', 'ID'), offset=②(이동시켜 표시할 X좌표, 이동시켜 표시할 Y좌표))

①(‘제외할’, ‘자막’, ‘리스트’)에는 제외할 자막의 ID를 적을 수 있습니다. 상황에 따라 자막을 보여주지 않아야 할 때 유용합니다.

②(이동시켜 표시할 X좌표, 이동시켜 표시할 Y좌표)에는 자막을 이동시켜 표시할 X와 Y 좌표를 적습니다. 예를 들면 (-10, -20)을 적을 경우, (300, 300)에 표시되는 자막은 (290, 280)에서 표시됩니다.

여름의 끝에 피는 꽃 커스텀 가이드

Privacy Preference Center