Super Videotome (Modded!) 가이드 한글 번역
Videtome Super의 설정 가이드에 오신 것을 환영합니다! 여기에는 VT:S 게임을 시작하고 실행하고, 새로운 자산, 사용 가능한 태그 및 더 복잡한 조정을 추가하는 여러 단계의 가이드가 있습니다.
이 가이드는 Windows를 사용한다고 가정합니다. Mac을 사용하고 Windows 관련 지침이 표시되는 경우 "[instructions] on mac"을 검색해 보세요. Linux를 사용하고 Google이 어떻게 작동하는지 모르는 경우 컴퓨터가 어떻게 작동하는지 전혀 모릅니다.
ctrl + f = 목차
소개 가이드
새 VT:S 프로젝트 만들기
로컬 서버 설정
스토리 쓰기
VT:S 다시 로드하기
초보자 가이드
새 애셋 추가하기
새 캐릭터 추가하기
스크립팅
캐릭터 말하게 하기
캔버스 레이어
이미지 사용
오디오 사용
중급 가이드
챕터 간 이동하기
선택 사항
변수 기반 분기
사용자 정의 변수
태그 목록
고급 가이드
구성
소개 가이드
이 부분에서는 VT:S를 원래 zip 파일에서 가져와 브라우저에서 실행하는 데 필요한 도구에 대한 지식이 전혀 없다고 가정합니다. 아카이브 압축 해제, 텍스트 편집기, 로컬 서버 설정에 대한 이해가 있다면 이 섹션을 건너뛰고 초보자 가이드로 이동할 수 있습니다.
이 섹션에는 웹 개발과 관련된 특정 주제에 대해 좀 더 자세히 설명하는 여러 가지 보충 자료가 있습니다. 게임을 설정하고 바로 제작을 시작하려는 경우 건너뛸 수 있습니다.
새 VT:S 프로젝트 만들기
VT:S는 zip 아카이브 파일로 다운로드됩니다. 기본적으로 이는 여러 개별 부분을 다운로드하지 않고도 인터넷을 통해 전체 폴더의 자료를 보내는 방법입니다.
오늘날 Windows는 외부 프로그램 없이도 zip 파일을 처리할 수 있습니다. 하지만 향후 개발 여정을 위해 7zip과 같은 프로그램을 다운로드하는 것을 적극 권장합니다. 이 프로그램을 사용하면 .rar 및 .7z와 같은 다른 여러 아카이브를 열 수 있으며 아카이브 파일을 훨씬 더 많이 제어할 수 있습니다.
7zip(https://www.7-zip.org/)을 다운로드하여 설치합니다. 설치가 완료되면 이제 Windows에서 7zip을 사용하여 zip 파일을 열도록 지정해야 합니다. VT:S zip 파일을 마우스 오른쪽 버튼으로 클릭하고 "Open with"를 누릅니다. 드롭다운에서 7zip을 사용할 수 없으면 "Choose another app"을 누릅니다. 목록이 나타나고 "7zip FM" 또는 "7zip File Manager"를 누를 때까지 스크롤해야 합니다. "7zip GUI"가 표시되면 무시합니다.
7zip이 열리고 zip 내부의 파일을 볼 수 있으면 모든 작업을 올바르게 수행한 것입니다. 이제 두 가지 옵션 중에서 선택하여 프로젝트를 압축 해제할 수 있습니다.
PC의 아무 곳에나 원하는 이름으로 폴더를 만듭니다. VT:S zip의 모든 파일을 선택하고 새 폴더로 끌어다 놓습니다.
클릭 횟수를 줄이려면 VT:S zip을 마우스 오른쪽 버튼으로 클릭하고 7zip 드롭다운으로 이동합니다. "[파일 이름]/에 추출"을 선택합니다. 그러면 자동으로 새 폴더가 생성되고 zip의 모든 내용이 그 안에 저장됩니다. 그런 다음 이 폴더를 원하는 곳으로 옮길 수 있습니다.
새 폴더를 열면 VT:S 프로젝트를 편집할 준비가 됩니다.
로컬 서버 설정
이전에 웹 페이지를 건드린 적이 있다면 VT:S 프로젝트 폴더에 html 파일이 있는 것을 알 수 있습니다. 그러나 브라우저에서 index.html을 열려고 하면 클릭하거나 스페이스바를 눌러도 아무 일도 일어나지 않습니다. 이는 CORS 보안 제한 때문이며 VT:S를 실행하려면 로컬 서버를 설정해야 합니다.
가장 쉬운 방법은 Python을 사용하는 것입니다. Python(https://www.python.org/downloads/)을 다운로드하고 설치하여 시작합니다. 무엇을 하는지 알지 못한다면 모든 기본 옵션에서 수락을 누릅니다.
이제 콘솔 명령을 사용하여 로컬 서버를 실행해야 합니다. VT:S 프로젝트 폴더에서 파일을 선택하지 않았는지 확인하고 Shift 키를 누른 채 마우스 오른쪽 버튼을 클릭합니다. 드롭다운 메뉴에서 "여기에서 PowerShell 창 열기"를 선택합니다. 그러면 파란색 창이 열리고 첫 번째 줄에 현재 있는 폴더의 경로가 있어야 합니다. VT:S 프로젝트의 최상위 수준에 있고 자산 폴더에 있지 않은지 확인합니다.
다음 명령을 입력합니다.
py -m http.server
그리고 Enter를 누릅니다. 다음 줄에는 "Serving HTTP on :: port 8000 (http://[::]:8000/)"이라고 표시되어야 합니다.
선택한 브라우저에서 http://localhost:8000/으로 이동합니다. 모든 것이 잘 진행되었다면 VT:S 시작 화면이 표시되고 다음 화면으로 넘어갈 수 있습니다.
로컬 서버를 계속 실행하려면 PowerShell 창을 열어 두어야 합니다. VT:S 프로젝트가 갑자기 작동을 멈추면 실수로 닫지 않았는지 확인하세요.
보충: CORS 제한
로컬 서버를 설정해야 하는 이유는 CORS 제한 때문입니다. CORS 제한은 "Cross-Origin Resource Sharing"의 약자입니다. 이에 대한 기술 자료는 MDN 페이지를 참조하세요: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
간단히 말해서: 최신 브라우저는 페이지가 다른 웹사이트(더 구체적으로는 도메인)의 코드와 데이터를 로드하는 것을 방지하는 여러 가지 제한이 있습니다. 단, 보호 조치가 취해지지 않는 한 말입니다. 예를 들어 광고주가 여러 다른 웹사이트에 임베드된 악성 코드를 자신의 웹사이트에서 실행한 다음 훔친 모든 데이터를 가지고 집으로 전화를 걸지 못하도록 하기 위한 것입니다.
하지만 우리는 html 파일만 열면 브라우저가 story.txt 파일이 다른 도메인에 있다고 생각합니다. CORS 오류가 발생하고 파일이 로드되지 않습니다. 로컬 서버를 실행하면 모든 파일을 동일한 도메인에 마운트하고 이제 브라우저가 기꺼이 로드합니다.
요약: 광고주를 비난하세요. 항상 광고주 때문입니다. 광고주가 우리가 웹페이지에서 상호작용하기 위해 클릭해야 하는 이유입니다. 광고주가 사운드와 함께 자동 재생되는 비디오를 남용했기 때문입니다.
스토리 쓰기
텍스트 편집기에서 story.txt를 엽니다. Windows를 사용하는 경우 지금은 괜찮은 메모장이 될 것입니다. story.txt 파일에는 VT:S가 읽고 표시할 모든 스토리 텍스트가 들어 있으며, 지금은 데모 스토리가 들어 있습니다. 원하시면 VT:S 데모를 실행하면서 story.txt 파일을 동시에 확인하여 얼마나 많은 내용을 직접 알아낼 수 있는지 확인할 수 있습니다.
여기에 있는 모든 텍스트를 선택하고(단축키 ctrl + a) 삭제합니다. 예제 스토리가 손실될까 걱정된다면 원래 데모로 돌아가서 story.txt를 확인할 수 있습니다.
첫 번째 줄은 START여야 합니다. VT:S는 파일의 첫 번째 줄을 챕터 제목으로 읽고 화면에 표시하지 않습니다. 마지막 줄은 ###여야 하며, 이는 VT:S에 챕터가 끝났음을 알려줍니다. ###뒤의 줄은 표시되지 않습니다.
이제 START 아래에 몇 줄의 텍스트를 입력합니다. 각 줄에 대해 Enter를 누르기만 하면 원하는 대로, 문장 수에 제한 없이 입력할 수 있습니다. 각 새 줄에 대해 VT:S는 클릭 시 표시할 다음 화면으로 이를 구문 분석합니다.
START
Here's an example story.
You can copy this over if you like!
But, it's probably more fun to write your own.
(watch out for the indents in this file, nothing in story.txt should be indented)
###
보충: 텍스트 편집기
기본 텍스트 편집기만 사용하여 VT:S 게임을 만드는 것은 전혀 문제가 없지만 프로그래밍을 위해 설계된 편집기를 다운로드하는 것이 좋습니다. 이렇게 하면 쓰는 텍스트를 훨씬 더 많이 제어할 수 있고 줄 번호를 볼 수 있으며 CJK 유니코드 블록과 같은 비표준 문자를 사용하려고 해도 이상한 동작이 발생하지 않습니다.
Notepad++(https://notepad-plus-plus.org/)는 초보자에게 권장되는 텍스트 편집기로, 압도적인 수의 기능이 없이 기본 Windows Notepad보다 개선되었습니다. 다른 텍스트 편집기도 있는데, 숙련된 프로그래머를 대상으로 합니다. 저는 개인적으로 VSCode(https://code.visualstudio.com/Download)를 사용합니다.
VT:S 다시 로드
story.txt 파일(또는 모든 VT:S 파일)을 변경할 때마다 브라우저를 새로 고쳐야 변경 사항을 볼 수 있습니다.
그러나 때로는 페이지를 새로 고쳐도 VT:S의 변경 사항이 표시되지 않고 여전히 이전 story.txt 파일을 통해 실행됩니다. 이는 이전 파일이 이제 브라우저의 캐시에 있고 브라우저가 로드할 파일에 새 콘텐츠가 있다는 사실을 알지 못하기 때문입니다.
이를 수정하려면 F12를 눌러 개발자 도구를 엽니다. 이 방법이 작동하지 않으면 "[브라우저] 개발자 도구"를 검색합니다. 액세스하려면 확인해야 하는 고급 옵션이 있거나 다른 단축키를 사용할 수 있습니다.
여기에는 고급 웹 개발에 매우 유용한 도구가 많이 있지만 지금은 사용하지 않을 것이므로 너무 어려워 보인다고 해서 걱정하지 마세요. F1을 눌러 접근할 수 있는 설정 메뉴로 가야 합니다. 작동하지 않으면 개발자 도구 창의 오른쪽 상단에 설정을 불러오는 작은 기어가 있어야 합니다. Firefox처럼 기어가 없다면 작은 미트볼 메뉴가 있어야 하며, 그 드롭다운에서 설정에 접근할 수 있습니다.
설정에서 "HTTP 캐시 사용 안 함" 또는 "캐시 사용 안 함"이라고 적힌 옵션을 찾아 켜세요. 이는 네트워크 또는 고급 설정 아래에 있어야 합니다. 새로 고침을 누르는 동안 개발자 도구 창을 열어 두면 캐시가 지워집니다.
캐시가 지워지면 새 story.txt가 정상적으로 로드됩니다.
모든 것이 잘 되었다면 클릭할 때마다 story.txt에 작성한 줄이 표시되어야 합니다. 축하합니다! 첫 번째 VT:S 게임을 만들었습니다!
보충: 캐싱
캐싱은 모든 최신 브라우저에서 찾을 수 있는 기능입니다. 처음으로 웹페이지를 방문하면 브라우저는 페이지의 리소스(이미지, 코드 등)를 캐시에 저장합니다. 이것이 이전에 웹페이지를 방문한 적이 있는 경우, 페이지의 리소스가 이미 캐시에 있기 때문에 이번에는 브라우저가 더 빨리 로드하는 이유입니다. 이전에 로드한 적이 없다고 생각되는 경우에만 새 리소스를 로드합니다. 이를 통해 현대 웹을 훨씬 더 빠르게 탐색할 수 있습니다.
초보자 가이드
이제 로컬 서버가 설정되었고 VT:S가 올바르게 실행 중이므로, 고유한 비주얼, 사운드 및 캐릭터로 적절한 게임을 만드는 것을 살펴볼 수 있습니다. 이를 위해 JSON을 조정해야 하지만, 매우 쉽게 할 수 있습니다.
새 자산 추가
VT:S는 게임에서 표시할 이미지, 사운드 및 비디오를 지원할 수 있습니다. 이를 표시하려면 VT:S에서 로드할 자산으로 추가해야 합니다.
코드 폴더를 열고 assets.js를 엽니다. 여기에는 이미지, 비디오, 음악 및 캐릭터를 보관하는 여러 JSON이 있습니다. 지금은 SPEAKERS 객체를 무시하고 처음 세 개에만 집중할 수 있습니다.
각 자산 JSON은 줄당 새 자산을 보관합니다. 줄은 다음과 같이 설정됩니다.
AssetAlias: "path/to/asset.png"
새 줄을 추가하는 경우 이전 줄의 끝에 쉼표를 추가해야 합니다. JSON의 마지막 줄에는 쉼표가 필요하지 않습니다.
AssetAlias: "path/to/asset.png",
AssetAlias2: "path/to/asset2.png"
자산 별칭은 story.txt에서 이미지를 호출하는 데 사용되므로 입력을 쉽게 하기 위해 별칭을 짧게 유지하는 것이 좋습니다. 별칭은 단일 단어여야 합니다. 이름을 공유하는 두 개의 별칭을 가질 수 없습니다.
VT:S는 VT:S 프로젝트 폴더 루트에서 슬래시가 없는 경로를 읽습니다. 이 예에서 AssetAlias는 "path" 폴더에 있는 "to" 폴더에 있는 "asset"이라는 png 파일을 가리키고, 이 경로는 프로젝트 폴더의 루트에 있습니다. 경로는 사용자가 정의하므로 기술적으로 자산은 VT:S 프로젝트 파일의 어디에나 저장할 수 있습니다. 그러나 파일을 정리하고 쉽게 찾을 수 있도록 폴더에 넣는 것이 좋습니다. 어떻게 구성할지는 사용자에게 달려 있습니다.
Explorer는 기본적으로 파일 확장자를 표시하지 않으며, VT:S에서 읽을 수 있도록 경로에 파일 확장자를 포함해야 합니다. 파일을 무엇으로 저장했는지 기억나지 않으면 어떤 종류의 확장자인지 알 수 없습니다. Explorer에서 확장자를 표시하려면 상단 리본에서 "보기"를 클릭합니다. 오른쪽에 "파일 이름 확장자" 체크박스가 있습니다. 이 체크박스를 켭니다.
명명 규칙
별칭의 명명 규칙을 알아차렸을 것입니다. 이는 VT:ADV에서 유래한 것으로, BG_와 FG_는 특정 태그로 읽힙니다. 그러나 이 규칙을 따르면 배경용 이미지와 스프라이트용 이미지를 쉽게 확인할 수 있습니다. 별칭은 반드시 대문자로 표시해야 하는 것은 아니지만, 그렇게 하면 일반 문장과 구별되는 것처럼 보입니다. 자신의 프로젝트에도 비슷한 명명 규칙을 사용하는 것이 좋지만, 궁극적으로는 사용자에게 달려 있습니다.
이에 대한 예외는 MUSIC 자산입니다. 이러한 별칭은 VT:S가 제대로 구문 분석할 수 있도록 MUS_ 또는 SFX_로 시작해야 합니다.
자산 삭제
게임에서 자산을 사용하지 않는 경우 JSON에서 제거하는 것이 좋습니다. VT:S가 자산을 로드하지 않기 때문입니다. 예를 들어 게임에 비디오가 없는 경우 오류가 발생하므로 VID 객체를 완전히 삭제하지 마십시오. 중괄호 안의 모든 내용을 삭제하고 객체를 그대로 두십시오.
새 캐릭터 추가
asset.js로 돌아가서, 캐릭터는 SPEAKERS 객체에서도 설정됩니다. 줄은 다음과 같이 설정됩니다.
CharacterAlias: {name: "character name", colour: "#hexcolour"}
자산을 추가할 때와 같은 방식으로 새 캐릭터를 추가할 수 있습니다.
스크립팅
VT:S는 매우 빠르고 쉽게 작성할 수 있도록 설계된 Videotome 스크립팅 언어(VSL)를 기반으로 구축되었습니다. 모든 VSL은 story.txt 파일에 작성됩니다.
위에서 보았듯이 텍스트만 있는 VSL 줄을 작성하면 다른 수정자 없이 화면에 텍스트가 표시됩니다. 화면에 자산과 캐릭터 이름을 표시하려면 태그를 사용해야 합니다.
SFX_BOOM - 태그가 있는 줄입니다. 하이픈 앞에는 아무리 많은 태그가 있어도 됩니다.
태그는 VSL의 중추입니다. 태그는 줄의 시작 부분에 작성되고 공백으로 둘러싸인 하이픈으로 본문과 구분됩니다. VT:S는 하이픈 앞에 있는 텍스트를 화면에 표시하지 않습니다.
캐릭터 말하게 하기
캐릭터가 말하게 하려면 assets.js에서 설정한 캐릭터 별칭을 가져와 태그로 사용해야 합니다.
기본 프로젝트에서 emily와 miku라는 두 캐릭터가 있습니다. 두 캐릭터 중 하나를 말하게 하려면 별칭을 가져와서 끝에 느낌표를 넣어 태그로 바꾸세요.
E! - emily가 한 줄 말합니다.
M! - 그리고 이제 miku가 한 줄 말합니다!
이것들은 일반적으로 가장 자주 쓰게 될 태그이므로 캐릭터 별칭은 가능한 한 짧게 만드는 것이 좋습니다.
다른 모든 태그는 순서에 상관하지 않지만 캐릭터 태그는 줄의 마지막에 있어야 합니다.
SFX_BOOM E! - 와, 뭐였지?
캔버스 레이어
자산을 살펴보기 전에 VT:S가 자산과 텍스트를 렌더링하는 방식에 대해 논의해야 합니다.
VT:S는 렌더링에 사용하는 4개의 레이어가 있습니다. 이것들은 위에서 아래로 다음과 같이 명명됩니다.
text
front2
front
back
배경과 세트 장식에 사용하는 것이 좋습니다. 위의 레이어에 추가하는 모든 자산은 항상 그 앞에 표시됩니다.
프런트 레이어는 스프라이트와 배경에서 쉽게 지우고 싶은 것에 사용하는 것이 좋습니다.
프런트2 레이어는 보이지 않습니다. 애니메이션에만 사용됩니다. 자세한 내용은 ANIM 태그에 대한 설명서를 읽어보세요.
텍스트 레이어는 모든 텍스트가 렌더링되는 곳입니다. 텍스트 레이어에 자산을 추가할 수 있지만 권장하지는 않습니다. 텍스트 레이어는 VT:S 텍스트 렌더러에서만 처리되고 모든 새 화면에서 지워지므로 예상치 못한 동작이 발생할 수 있습니다.
이미지 사용
레이어에 이미지를 배치하려면 IMAGE 태그를 사용할 수 있습니다. 이 태그는 다음과 같이 사용됩니다.
IMAGE:ImageAlias:layer:x:y -
x와 y는 좌표입니다. 0,0은 화면의 왼쪽 상단 모서리입니다. x를 추가하면 이미지가 오른쪽으로 이동하고 y를 추가하면 이미지가 아래로 이동합니다.
기본 프로젝트에서 사용할 수 있는 이미지가 여러 개 있습니다. Miku를 전면 레이어에 x 250, y 20에 추가하여 시작할 수 있습니다.
IMAGE:FG_MIKU:front:350:20 - 와! Miku네요!
같은 레이어에 여러 IMAGE 태그를 사용할 수도 있습니다. 이렇게 하면 이미지가 왼쪽에서 오른쪽으로 순서대로 적용됩니다.
IMAGE:FG_MIKU:front:50:20 IMAGE:FG_MIKU:front:90:0 IMAGE:FG_MIKU:front:100:50 - 이제 세 개가 되었습니다!!!
다음을 수행하여 IMAGE 태그로 전체 화면 배경을 설정할 수도 있습니다.
IMAGE:BG_GALLEY:back:0:0 - 이제 갤러리에 있습니다.
그러나 VT:S에는 배경에 대한 단축 태그가 있습니다. 이렇게 하면 동일한 결과를 얻을 수 있습니다.
BG:BG_GALLEY - 이제 갤리에 있습니다.
이것은 위의 IMAGE 태그와 정확히 동일한 코드를 수행하지만 입력할 텍스트가 줄었습니다.
오디오 사용
언급했듯이 모든 오디오 에셋은 MUS_ 또는 SFX_로 시작합니다. 오디오 에셋을 사용하는 것은 별칭을 태그로 복사하는 것만큼 간단합니다.
SFX_KAZOO F! - 놀랍죠!
MUS_PARTY G! - 파티를 시작합시다!
SFX 에셋은 한 번 재생되고 MUS 에셋은 무한정 반복됩니다. 음악 재생을 중지하는 가장 쉬운 방법은 빈 오디오 파일을 설정하는 것입니다.
MUS_STOP SFX_RECORDSCRATCH - 음악을 끕니다, 화나.
중급 가이드
위의 내용을 이해한 후 에셋과 말하는 캐릭터가 있는 기본 선형 스토리를 설정할 수 있습니다. 이제 선택 사항을 추가하고 분기 결과를 스토리에 가져오는 것을 살펴볼 수 있습니다.
챕터 간 이동
현재 스토리에는 START 챕터만 있습니다. 태그를 사용하여 챕터를 더 추가하고 챕터 간 이동을 시작할 수 있습니다. 여러 챕터는 START 챕터와 비슷하게 설정됩니다.
CHAPTER1
첫 번째 챕터입니다.
여기서 몇 가지 일이 발생합니다.
###
CHAPTER2
이제 두 번째 챕터입니다.
여기서 더 많은 일이 발생합니다.
###
챕터 이름은 단일 단어여야 합니다. story.txt의 챕터 이름 뒤에 공백이 없도록 해야 합니다. VT:S에서 인식하지 못하기 때문입니다.
챕터 간 이동을 위해 GOTO 태그를 다음과 같이 사용할 수 있습니다.
GOTO:ChapterName -
실제로는 다음과 같습니다.
CHAPTER1
첫 번째 챕터입니다.
GOTO:CHAPTER2 - 여기서 몇 가지 일이 발생합니다.
###
CHAPTER2
이제 두 번째 챕터입니다.
여기서 더 많은 일이 일어납니다.
###
자동 저장
게임에서 특정 챕터에서 자동 저장을 원하면 챕터 이름 끝에 _SAVE를 추가합니다.
선택
이제 이동할 수 있는 챕터가 몇 개 있으므로 이제 게임에 대화 선택 사항을 도입할 수 있습니다.
VT:S에서 선택 사항의 중요한 점은 게임 플레이를 일시 중지하지 않는다는 것입니다. 선택 사항을 클릭하고 챕터를 진행할 수 있으며 REMOVE 태그가 클릭될 때까지 선택 사항이 유지됩니다.
게임에 분기와 선택 사항을 도입하려면 CHOICE 태그를 사용해야 합니다.
CHOICEX:[선택 레이블]:ChapterName -
여기서 X는 선택 사항의 ID이며 int입니다. 이것은 선택 사항이 목록에 나타나는 순서와는 아무런 관련이 없으며, 대신 선택 사항을 제거하기 위한 식별에 사용됩니다.
REMOVE:X -
이로 인해 선택 사항 ID는 충돌이 발생하지 않도록 고유해야 합니다.
CHOICE1:[yes]:AnswerYes CHOICE2:[no]:AnswerNo - 이것은 유효한 선택 사항 설정이며 의도한 대로 작동합니다.
CHOICE1:[maybe]:AnswerMaybe - 그러나 1이 이미 사용 중이므로 문제가 발생합니다. 1을 다시 사용하려면 REMOVE해야 합니다.
CHOICE1:[yes]:AnswerYes CHOICE1:[no]:AnswerNo CHOICE:[maybe]:AnswerMaybe - 이것은 유효한 선택 사항 설정이 아니며 최종 선택 사항은 작동하지 않습니다.
VT:S의 비차단 선택 사항을 아래와 같이 영리하게 활용할 수 있습니다.
CHAPTER6
CHOICE1:[외출]:CHAPTER6_Outside - 밖으로 나가야 할까요?
궁금하네요, 궁금하네요...
REMOVE:1 - 아니요. 오늘은 안에 머물자.
이제 뭘 해야 할까요?
[...]
###
CHAPTER6_Outside
BG:OUTSIDE - 아, 참 좋은 날씨네요...
[...]
###
기본적으로 GOTO를 누르면 모든 선택 사항이 지워집니다.
CHAPTER3
CHOICE1:[팔로우]:FollowPerson - 팔로우해야 할까요?
흠...
GOTO:GoHome - 아니요. 팔로우하지 않기로 했습니다.
###
선택 강제
플레이어가 선택을 하도록 강제하고, 선택하기 전까지 진행하지 않게 하려면, 챕터의 마지막 줄에 선택 사항을 넣기만 하면 됩니다.
CHOICE1:[예]:답변 예 선택 2:[아니요]:답변 아니요 - 동의하십니까?
변수 기반 분기
플레이어 선택에 따른 분기는 스토리에 상호 작용을 추가하는 가장 쉬운 방법 중 하나입니다. 더 복잡한 작업을 하거나 플레이어가 이전에 본 내용을 다시 호출하려면 변수를 포함하고 사용할 수 있습니다.
변수는 SET 태그로 만들고 설정합니다.
SET:variableName:value -
변수 이름은 한 단어여야 합니다. 값은 문자열에서 숫자까지 무엇이든 될 수 있습니다.
CHECK 태그를 사용하여 확인할 수 있습니다.
CHECK:variable:value:command:ChapterName:ChapterName -
여기서 첫 번째 챕터 이름은 참 결과이고 두 번째는 거짓 결과입니다. 명령은 다음과 같습니다.
eq - 같음
gt - 보다 큼
lt - 보다 작음
gte - 크거나 같음
lte - 보다 작거나 같음
이것의 가장 일반적인 용도는 게임에서 특정 지점에 도달했는지 확인하는 것입니다.
GetApples
GOTO:AppleCheck SET:haveApples:true - 사과를 얻었어요!
###
NoApples
GOTO:AppleCheck - 오, 아니, 이게 옳은 방법이라고 생각하지 않아요...
###
AppleCheck
그녀가 뭐라고 하는지 들어보죠.
CHECK:haveApples:true:eq:AppleSuccess:AppleFailure A! - 사과를 얻었어요?
### AppleSuccess
A! - 네! 다 됐어요!
###
AppleFailure
A! - 이제 맛있는 사과 파이를 만들 수 없네요. 얼마나 슬픈 일인가요...
###
사용자 정의 변수
플레이어가 나중에 변수로 사용할 문자열을 입력하도록 하려면 INPUT 태그를 사용할 수 있습니다.
INPUT:variableName:limit -
INPUT에서 게임이 일시 중지되고 플레이어는 무언가를 입력할 때까지 진행할 수 없습니다. limit는 입력 길이가 그보다 높아지지 않도록 하는 int입니다.
변수 인쇄
사용자 입력의 가장 일반적인 용도는 플레이어가 자신의 이름을 입력하는 것입니다. 텍스트에서 $로 둘러싼 다음 변수를 인쇄할 수 있습니다.
INPUT:playerName:20 S! - 이름을 말해줄 수 있나요?
S! - $playerName$, 만나서 반갑습니다!
태그 목록
이 모든 것을 통해 플레이어 중심의 선택과 분기 엔딩이 있는 꽤 멋진 게임을 만들 수 있습니다. 이제 VT:S로 가능한 모든 것을 살펴보기 시작할 수 있습니다. 아래는 VSL에서 사용할 수 있는 모든 태그에 대한 설명서입니다. 재미있게 보내세요!
CHARACTER, alias!
캐릭터 태그는 assets.js의 SPEAKERS에 정의되어 있습니다. 태그를 사용하려면 별칭 뒤에 느낌표를 쓰세요. 이 별칭은 원하는 대로 지정할 수 있으며 캐릭터 이름과 같을 필요는 없습니다.
B: {name: "Barry, 63", colour: "green"}
B! - 저는 별칭이 "B"인 캐릭터입니다. 자산 파일에서 표시되는 캐릭터 텍스트는 녹색으로 표시된 Barry, 63입니다.
캐릭터 태그는 순서가 중요한 유일한 태그입니다. 태그가 몇 개이든 캐릭터 태그는 마지막 태그여야 합니다.
IMG:FG_MIKU:front:100:200 MUS_SEKAI MikuHatsune! - 유효한 태그 설정입니다. 모든 태그가 올바르게 실행되어야 합니다.
E! BG:LOUNGE - 유효한 태그 설정이 아닙니다. 오류가 발생하고 예상치 못한 동작이 발생할 수 있습니다.
캐릭터에 대한 색상을 정의하지 않으면 기본 색상이 사용됩니다.
J: {name: "Jimmy"}
J! - Jimmy가 말하고 있습니다. 기본 프로젝트에서는 빨간색인 기본 색상으로 내 이름이 표시됩니다.
사용자 지정 JS, FUNC:[javascript]]
사용자 지정 자바스크립트를 실행합니다. 무엇을 하는지 안다면 무한히 강력합니다.
FUNC:[alert("BOO!");]] J! - 무서워하세요!!!
J! - 알았어요, 그렇죠?
더 복잡한 자바스크립트를 별도의 함수로 나누어서 깔끔하게 유지하는 것을 적극 권장합니다. 새 함수를 code.js의 맨 아래에 넣을 수 있습니다.
P! - MAXIMUM OVERDRIVE로 전환할 때는 안 됩니다!
FUNC:[goFast();]] P! - 하이야!!!
function goFast() {
// 터보를 얻었어야 한다는 걸 알았어...
}
태그 끝에 있는 ]]를 두 번 조심하세요. 그렇지 않으면 태그가 읽히지 않습니다.
FUNC:[alert("BOO!");] J! - 무서워!!!
J! - 허? 아무 일도 일어나지 않았어?
사용자 지정 JS, FUNCDELAY:[javascript]]
FUNC와 기능적으로 동일하지만 플레이어가 라인에 도달했을 때가 아니라 라인에서 나갈 때 js를 실행합니다.
FUNCDELAY:[alert("BOO!");]] B! - 뭔가 일어날 것 같아요...
B! - 아아!!! 이이익!!!
AUTOPROGRESSION, AUTO:number:speed
지정된 속도에 도달하면 지정된 수의 줄을 자동 재생합니다.
몇 줄을 자동 재생합니다!
AUTO:3:1000 - 3,
2,
1... 완료!
자동 진행이 실행 중일 때는 플레이어가 정상적으로 진행할 수 없습니다.
정신 건강을 위해 AUTO로 진행하는 것을 자동 진행이라고 하며, 플레이어가 토글하는 자동 재생과는 대조적입니다. 자동 진행이 실행 중일 때는 자동 재생이 일시 중지되고 완료되면 다시 시작됩니다.
레이어 전환, TRANS:[name]:layer:speed
현재 레이어를 가져와 캐시한 다음 캐시에 전환 효과를 적용합니다. 캐시는 지정된 레이어 위에 나타나며 새로운 레이어로 혼합되는 것처럼 보입니다. 전환 중에는 플레이어가 전환이 완료될 때까지 다음 화면으로 진행할 수 없습니다.
현재 사전 코딩된 전환 효과는 "scatter" 하나뿐입니다. 이는 Videtome Heartbreak에서 백포트되었습니다.
태그를 무작위로 호출할 수 있지만 명확한 효과는 없습니다.
BG:BG_ROOM - 여기 bg가 있습니다!
TRANS:[scatter]:back:10 - 지금 전환 중입니다...
하지만 아무것도 보이지 않았습니다.
의도한 대로 사용하려면 전환 중인 레이어에 에셋을 설정하세요.
BG:BG_ROOM - 여기 bg가 있습니다!
TRANS:[scatter]:back:10 BG:BG_KITCHEN - 이제 전환 중입니다...
와! 새로운 곳!
전환은 js를 사용한 효과에 국한되지 않습니다. 사용자 지정 이름을 입력하면 VT:S에서 이를 css 클래스로 가져옵니다. 이렇게 하면 전환 기간 동안 클래스가 적용되고 제거됩니다.
이렇게 하면 간단한 css 전환을 할 수 있습니다...
.transitionFade {
opacity:0;
transition-property:opacity;
}
TRANS:[transitionFade]:back:1000 BG:BG_KITCHEN - 사라질 시간입니다.
또는 애니메이션으로 더 복잡한 작업을 수행하세요.
.transitionCircleWipe {
animation-name:circleWipe;
}
@keyframes circleWipe {
from {clip-path: circle(100% at 50% 50%);}
to {clip-path: circle(0% at 50% 50%);}
}
TRANS:[transitionCircleWipe]:back:2000 BG:BG_KITCHEN - Circle time!
STATUS BOX, STATUS:[html]]
오른쪽 상단의 상태 상자에 원하는 HTML을 추가합니다.
STATUS:[<span style="font-family:serif !important;color:blue;">여기에 파란색 세리프 텍스트</span><br><span style="color:red;font-family:sans-serif !important;font-weight:900;">새 줄에 빨간색 산 세리프 굵은 텍스트</span><br><img src="images/FG_MIKU.png"><br>miku]] - 상태 상자의 흉측함
태그 끝에 있는 두 개의 ]]를 조심하세요. 그렇지 않으면 태그가 읽히지 않습니다.
= 콘텐츠 제거, 지우기... 레이어와 컨텍스트 상자의 콘텐츠를 지우는 데 사용할 수 있는 태그가 여러 개 있습니다.
CLEARSTATUS - 안녕 상태 상자!
CLEARLAYER는 한 레이어를 지울 수 있습니다.
CLEARLAYER:front - 안녕 미쿠...
모든 레이어를 지우는 단축 태그는 CLEARSCREEN입니다.
CLEARSCREEN - 오 세상에, 난 공허 속에 있어
이것들은 어떤 에셋도 설정되기 전에 실행되므로 새로운 에셋을 지우지 않습니다.
CLEARSCREEN BG:BG_KITCHEN - 난 주방에 있어! 대단해!
= DRAW RECTANGLES, RECT:layer:[#colour]:x:y:width:height 지정된 레이어의 지정된 지점에 지정된 채우기로 사각형을 그립니다.
RECT:front:[green]:50:50:100:100 - 이제 왼쪽 상단 모서리에 녹색 사각형이 있습니다.
여러 개의 사각형을 같은 선에 그릴 수 있습니다.
RECT:front:[green]:50:50:100:100 RECT:front:[red]:0:200:200:300 RECT:front:[blue]:400:100:500:100 - 모양과 색상이 너무 많아요!
= PLACE IMAGES, IMAGE:imageAlias:layer:x:y 지정된 레이어의 지정된 지점에 이미지를 배치합니다.
IMAGE:FG_MIKU:front:300:50 - 미쿠 타임!
여러 이미지를 같은 줄에 배치할 수 있습니다.
IMAGE:FG_MIKU:front:50:20 IMAGE:FG_MIKU:front:90:0 IMAGE:FG_MIKU:front:100:50 - 이제 세 개가 생겼어요!!!
RAND를 x와 y에 전달하면 이미지를 임의의 위치에 배치할 수 있습니다.
IMAGE:FG_MIKU:front:RAND:RAND - 미쿠는 어디에 있을까? 누가 알겠어!
다음을 수행하는 단축 태그가 있습니다.
IMAGE:BG_GALLEY:back:0:0 - 이제 우리는 갤리에 있습니다.
BG:BG_GALLEY - 이제 우리는 갤리에 있습니다.
PLACE VIDEOS, VID:videoAlias:layer:x:y
지정된 레이어의 지정된 지점에 비디오를 배치합니다.
VID:VID_CAR:front:100:50 - 삐삐!
RAND를 x와 y에 전달하여 비디오를 임의의 위치에 배치할 수 있습니다.
VID:VID_CAR:front:RAND:RAND - 빌어먹을 차를 어디에 주차했어
여러 비디오를 같은 줄에 배치할 수 있습니다.
VID:VID_CAR:front2:100:50 VID:VID_CARCRASH:front:100:50 - 어머나
하지만 레이어에는 한 번에 하나의 비디오만 재생됩니다. 레이어에 두 번째 비디오를 배치하면 첫 번째 비디오는 현재 프레임에서 일시 정지되고 두 번째 비디오는 정상적으로 재생됩니다.
비디오가 있는 레이어에 이미지를 배치하는 경우에도 마찬가지입니다.
다음을 수행하는 단축 태그가 있습니다.
VID:VID_BEACH:back:0:0 - 해변에 있습니다.
VIDBG:VID_BEACH - 해변에 있습니다.
모든 비디오를 webm으로 저장하는 것이 좋습니다. 이것은 웹에서 가장 널리 지원되고 압축 가능한 비디오 형식이며 투명도도 허용합니다.
ANIMATE FRONT LAYER, ANIM:command
두 개의 전면 레이어에 애니메이션을 적용하여 간단한 2프레임 애니메이션을 위해 두 레이어 간의 가시성을 전환합니다. 유효한 명령은 PLAY와 STOP입니다.
애니메이션이 끝나면 전면 레이어가 다시 표시되고 front2는 표시되지 않습니다.
ANIM:PLAY - 아무 일도 일어나지 않았으면 좋겠어요!
IMAGE:FG_CAR:front2:100:50 IMAGE:FG_CARCRASH:front:100:50 - 어머나
ANIM:STOP - 버프가 될 거라고 확신해요.
PAN LAYER ACROSS, PAN:layer:[x]:[y]:speed
지정된 속도로 지정된 양만큼 레이어를 팬합니다.
테스트되지 않음. 내가 모르는 이유로 소스백 캔버스를 사용합니다.
ZOOM IN LAYER, ZOOM:layer:[x]:[y]:speed
지정된 속도로 지정된 양만큼 레이어를 확대합니다.
테스트되지 않음. 내가 모르는 이유로 소스백 캔버스를 사용합니다.
TURN OFF NEW LINE SOUND, SILENT:command
새 줄을 무음으로 만듭니다. 명령은 TRUE와 FALSE입니다.
SET NEW VARIABLES OR OVERWRITE, SET:variable:value
변수를 지정된 값으로 설정합니다.
SET:hasRock:true - 땅에서 흥미로운 바위를 보고 집어 올립니다.
MANIPULATE VARIABLES, MATH:variable:command:number
기본 연산으로 변수를 조작합니다.
명령어는 다음과 같습니다.
ADD - 덧셈
SUB - 뺄셈
MUL - 곱셈
DIV - 나눗셈
MATH:coins:ADD:1 F! - 여기까지 온 보답으로 반짝이는 동전을 하나 드리겠습니다.
F! - 지금 몇 개나 가지고 계신가요? $coins$? 꽤 좋네요!
LINE-LEVEL CONDITIONALS, CON:variable:command:value && {true string|false string}
변수 비교 결과에 따라 줄의 일부를 두 문자열 중 하나로 바꿉니다.
명령어는 다음과 같습니다.
eq - 같음
gt - 보다 큼
lt - 보다 작음
gte - 크거나 같음
lte - 보다 작거나 같음
CON:jimAgrees:eq:true J! - 동의합니까? {예|아니요}!
// jimAgrees가 참이면:
동의합니까? 예!
// 그렇지 않으면:
동의합니까? 아니요!
여러 개의 대괄호 그룹을 같은 줄에 사용할 수 있습니다. 모두 같은 변수 비교를 사용합니다.
CON:trans:eq:true J! - 네, {he|she}가 늦었어요. {He|She}가 몇 분 후에 올 거예요.
비교가 참일 때만 무언가 나타나기를 원한다면 두 번째 문자열을 비워둘 수 있습니다.
CON:apples:gt:5 D! - 지금 $apples$개의 사과가 있습니다.{ 거의 너무 많아요!|}
비교가 거짓일 때 무언가 나타나기를 원한다면 반대로 할 수 있습니다.
CON:relationship:gt:10 B! - 글쎄요...{| 그렇게 가깝지 않은 것 같아요.}
새 장으로 이동, 이동:ChapterName
도달했을 때 로드할 콘텐츠의 다음 장을 변경합니다.
이동:NewRoom - 좋아요, 저쪽으로 가보죠.
###
NewRoom
야, 여기 있어!
###
story.txt의 장 이름 뒤에 공백이 없는지 확인하세요. VT:S에서 인식하지 못하기 때문입니다.
변수에 따라 새 장으로 이동, CHECK:variable:value:command:ChapterName:ChapterName
변수 비교 결과에 따라 장을 변경하는 GOTO입니다. 첫 번째 장 이름은 참 결과이고 두 번째는 거짓 결과입니다.
명령은 다음과 같습니다.
eq - 같음
gt - 보다 큼
lt - 보다 작음
gte - 크거나 같음
lte - 보다 작거나 같음
CHECK:haveApples:3:gt:AppleSuccess:AppleFailure A! - 사과를 가져왔어?
###
AppleSuccess
A! - 네! 필요한 양이에요!
###
AppleFailure
A! - 맛있는 사과 파이를 만들기에는 충분하지 않아요. 얼마나 슬픈 일인가...
###
대화 선택 추가, 선택X:[선택 레이블]:장 이름
선택 시 지정된 장으로 변경합니다.
여기서 X는 선택의 ID이며, 정수입니다. 이는 선택이 목록에 나타나는 순서와는 관련이 없으며, 대신 선택 제거를 위한 식별에 사용됩니다.
따라서 선택 ID는 충돌이 발생하지 않도록 고유해야 합니다.
CHOICE1:[yes]:AnswerYes CHOICE2:[no]:AnswerNo - 이는 유효한 선택 설정이며 의도한 대로 작동합니다.
CHOICE1:[maybe]:AnswerMaybe - 그러나 1이 이미 사용 중이므로 문제가 발생합니다. 1을 다시 사용하려면 제거해야 합니다.
CHOICE1:[yes]:AnswerYes CHOICE1:[no]:AnswerNo CHOICE:[maybe]:AnswerMaybe - 이것은 유효한 선택 설정이 아니며, 최종 선택은 작동하지 않습니다.
기본적으로 GOTO 또는 CHECK를 누르면 모든 선택이 지워집니다.
REMOVE DIALOGUE CHOICE, REMOVE:X
ID를 기준으로 선택 항목을 제거합니다.
CHOICE1:[Go outside]:GoOutside - 밖으로 나가야 할까요?
궁금하네요, 궁금하네요...
REMOVE:1 - 아뇨. 오늘은 안에만 있을게요.
이제 어떻게 해야 할까요?
모든 선택 사항을 제거하는 단축 태그가 있습니다.
REMOVEALL - 더 이상 선택 사항이 없습니다! 쉿! 여러분 모두!
PLAY SOUNDS, MUS_ 또는 SFX_ 루핑 음악 또는 SFX를 재생합니다. assets.js에서 올바르게 지정해야 합니다.
SFX_KAZOO F! - 깜짝!
MUS_PARTY G! - 파티를 시작하자!
SFX 에셋은 한 번 재생되고 MUS 에셋은 무한정 반복됩니다. 음악 재생을 중지하는 가장 쉬운 방법은 빈 오디오 파일을 설정하는 것입니다.
MUS_STOP SFX_RECORDSCRATCH - 음악을 끕니다, 화나.
모든 오디오를 ogg로 저장하는 것을 적극 권장합니다. 이것은 웹에서 가장 널리 지원되고 압축 가능한 오디오 형식이며, 갭 없이 반복할 수 있습니다.
CHANGE SOUND VOLUME, MUSVOL:[float] 또는 SFXVOL:[float]
각각 음악과 SFX의 볼륨을 변경합니다. 0과 1 사이의 float를 사용하고 플레이어가 설정한 볼륨에 곱합니다.
맙소사, 오늘은 집중할 수가 없어요...
MUSVOL:[0.2] - 라디오를 낮춥니다. 별로 도움이 되지 않는 것 같아요.
플레이어 텍스트 입력, INPUT:variable:limit
플레이어가 값을 입력할 수 있는 입력을 열고, 그 값은 특정 변수에 저장됩니다. 제한은 입력이 그 수의 문자를 초과하는 것을 막습니다.
INPUT:플레이어 이름:20 S! - 이름을 말해 줄 수 있어?
S! - 만나서 반갑습니다, $playerName$!
INPUT에서 게임이 일시 정지되고 플레이어는 무언가를 입력할 때까지 진행할 수 없습니다.
VT:S는 플레이어가 어떤 종류의 데이터를 입력하는지 테스트하지 않으므로 지금은 숫자 입력과 같은 것보다 이름 입력과 같은 상황에서만 INPUT을 사용하는 것이 좋습니다.
텍스트 스타일, POS:x:y:endPosition 또는 COL:[#colour] 또는 FONT:[글꼴 이름] 또는 SIZE:size 또는 LINE:lineheight
텍스트가 표시되는 방식을 변경합니다. 텍스트 스타일은 한 번 설정된 후에도 유지됩니다.
POS:100:100:64 - 맨 위에 두는 것으로 시작하겠습니다.
COL:[blue] - 이제 파란색입니다!
FONT:[cursive] - 기본 cursive 글꼴이 comic sans라는 것을 알고 계셨나요?
SIZE:30 - 이제 커질 수 있습니다!
LINE:30 - 하지만 큰 텍스트와 많은 단어가 있는 경우 모든 것이 겹치므로 줄 높이를 늘리고 싶을 것입니다.
POS에는 POSX, POSY 및 POSEND라는 추가 태그가 있어 각각 x, y 및 끝 위치를 개별적으로 제어할 수 있습니다.
POSY:50 - 이제 화면 맨 위에 있습니다!
하지만 x 위치는 기본값으로 유지됩니다.
POSY:70 PERSIST:TRUE - 이것은 문단을 만드는 데 매우 유용합니다.
POSY:90 - 이렇게!
텍스트 태그는 RESET을 전달하면 재설정할 수 있습니다.
POS:0:0:64 COL:[red] - 화면 모서리에 빨간색이 있습니다...
POS:0:RESET:64 - 하지만 이제 Y 값이 기본값입니다!
COL:[RESET] - 이제 색상이 정상으로 돌아왔습니다.
RAND를 POS x 및 y에 전달하여 임의의 위치를 지정할 수 있습니다.
POS:RAND:RAND:64 - 난 무작위 위치에 있어!
POSX:RAND - 이제 내 Y 위치는 이전과 같지만 X는 다시 무작위야!
모든 텍스트 스타일은 RESETTEXT로 재설정할 수 있어.
RESETTEXT - 좋아, 재밌는 건 끝났어. 다시 정상으로 돌아와.
KEEP TEXT ON SCREEN, PERSIST:command
진행 중에 텍스트 레이어가 지워지지 않도록 강제하고, 이전 화면의 텍스트는 그대로 유지해. 명령은 TRUE와 FALSE야.
텍스트를 그대로 유지해 보자.
PERSIST:TRUE - 그러면 기본 위치에서 그냥 겹치게 될 거야...
POS:100:50:64 - 하지만 이런 식으로 할 수 있어!
POS:100:80:64 - 이렇게 하면 한 번에 여러 줄을 화면에 표시할 수 있어.
PERSIST:FALSE - 좋아, 이제 지워졌어.
고급 가이드
VT:S 게임을 만드는 방법을 잘 알고 있다면, 더 복잡한 기능을 사용하고 엔진을 사용자 정의할 수 있습니다.
CONFIG
거의 모든 하드코딩된 변수는 config.js의 CONFIG 또는 DEFAULT로 추출되었습니다. 태그로 무언가를 설정하지 않으면 VT:S에서 이 값을 사용합니다. 태그로 무언가를 재설정하면 이 값으로 재설정됩니다.
모든 DEFAULT 변수는 원하는 경우 런타임 중에 변경해도 안전합니다.
CONFIG는 런타임 중에 조정하도록 설계되지 않은 변수입니다. 이 변수에 대한 변경 사항은 예상치 못한 동작을 일으킬 수 있습니다.
여기의 대부분 설정은 자명합니다. 설명이 없는 설정은 아래에서 설명합니다.
부드러운 글꼴
기본적으로 VT:S는 선명한 글꼴 렌더링을 사용하고 픽셀 단위로 정확하게 렌더링하려고 합니다. 이는 픽셀 글꼴에는 좋지만 다른 종류의 글꼴은 읽기 어려울 수 있습니다. fontSmoothing을 켜면 픽셀 단위의 정확한 렌더링이 꺼집니다.
자동 저장 설정
기본적으로 VT:S는 _SAVE로 끝나는 챕터 이름에 도달할 때마다 자동 저장합니다. autosaveAll을 켜면 새로운 챕터에 도달할 때마다 저장됩니다.
자동 재생 설정
자동 재생은 줄에 있는 문자 수에 따라 속도를 변경합니다. 자동 재생이 계산을 시작하는 최소 문자와 최대 문자는 autoplayMinLineLength 및 autoplayMaxLineLength로 설정할 수 있습니다.
최소 줄 길이에서 속도는 기본 승수 값인 autoplayBaseMult로 곱해집니다. 최대 줄 길이에서 속도는 최대 승수 값인 autoplayMaxMult로 곱해집니다. 최소 및 최대 줄 길이 사이의 줄 길이의 경우 줄 길이에 대한 이러한 값 사이의 숫자가 사용됩니다.
특히, 이것은 플레이어가 자동 재생으로 설정하는 속도와 스칼라입니다. 예를 들어: 가장 빠른 속도에서 10개의 문자로 구성된 줄은 1000ms 후에 진행되고 200개의 문자는 2000ms 후에 진행됩니다. 가장 느린 속도에서 10개의 문자로 구성된 줄은 3000ms 후에 진행되고 200개의 문자는 8000ms 후에 진행됩니다.
autoplayBaseMult와 autoplayMaxMult 속도가 같으면 자동 재생이 줄의 문자 수에 따라 조정되지 않습니다.
선택 사항 자동 제거
removeChoiceAtBlockEnd는 GOTO 또는 CHECK 태그를 눌렀을 때 선택 사항 창을 자동으로 제거하지 않는 토글로, 선택 사항이 새 장으로 넘어갈 수 있도록 합니다. 이 토글은 금방 어수선해질 수 있으며 REMOVE를 수동으로 사용해야 하지만 올바르게 사용하면 차단되지 않는 선택 사항으로 매우 강력한 작업을 수행할 수 있습니다.
이 토글을 사용할 때는 광범위한 테스트를 수행하는 것이 좋습니다.