비주얼노벨 스타일의 채팅 화면을 구현해주는 스크립트입니다.
롤플레잉 대사를 화면에 부각되게 표시하고 시각적인 연출을 보여줄 수 있습니다.
- roll20 세션방의 대문에 해당하는 페이지에서 [설정]->[API 스크립트]를 선택해 스크립트 수정 페이지로 들어갑니다. (PRO 계정에서만 이 메뉴가 보입니다.)
- New Script에 [ 코드 ]들을 복사해 붙여넣습니다.
- 옵션 파트를 참조하여 세션방에 적용할 옵션을 설정합니다.
- [Save Script]를 눌러 저장합니다. 페이지 아래쪽의 API Output Console에 에러 메시지가 표시되지 않는다면 정상적으로 적용된 것입니다.
이 코드는 API를 통해 출력된 대사들은 기본적으로 표시대상에서 제외하도록 설정되어 있습니다. as_switcher.js, as_autofiller.js, narrator.js 등의 스크립트로 대사를 입력하실 경우 해당 스크립트들을 visual_dialogue.js와 호환되는 새 버전으로 업데이트하시기 바랍니다.
이 스크립트에서는 vd_area
, vd_panel
, vd_name
, vd_dialogue
를 각각 이름으로 하는 총 4개의 토큰을 필요로 합니다.
또한 필요에 따라 vd_deco
,vd_background
를 이름으로 하는 장식용 토큰을 사용할 수 있습니다.
각 토큰의 용도와 배치해야 할 레이어는 아래와 같습니다.
- 배치하는 토큰
vd_panel
: (필수) 대사 텍스트의 밑에 깔릴 배경이 됩니다. 또한 /desc 대사가 표시되는 위치의 기준이 됩니다.vd_deco
: (선택)vd_panel
위쪽에 배치됩니다. 평소엔 화면상에 보이다가 /desc 대사가 표시될 때만 잠시 사라지는 그래픽 요소를 사용하고 싶을 경우 이 이름을 사용합니다. (ex: 캐릭터 이름의 테두리)
- 생성되는 요소
- 캐릭터 이름 텍스트
- 대사 텍스트
- 배치하는 토큰
vd_background
: (선택) 생성되는 캐릭터 스탠딩의 뒤쪽에서 배경 이미지를 표시합니다.
- 생성되는 요소
- 캐릭터의 스탠딩 이미지
- 배치하는 토큰
vd_area
: (필수) 스탠딩 이미지들이 표시될 영역을 지정합니다.vd_name
: (필수) 대사를 한 캐릭터의 이름이 표시될 영역을 지정합니다.vd_dialogue
: (필수) 대사가 표시될 영역을 지정합니다.
- 생성되는 요소
- (없음)
스크립트는 vd_name
과 vd_dialogue
토큰의 좌표를 살펴보고 가급적 그 안쪽을 채우도록 텍스트를 생성합니다. 그러나 Roll20의 시스템 특성상 딱 맞는 크기의 텍스트 박스를 만들거나 정확한 위치에 좌측정렬 시키는 것은 불가능합니다.
때문에 vd_name
과 vd_dialogue
는 디자인 요소에 포함시키기 보다는 시각적으로 보이지 않게 만들어서(배경색에 묻히거나 투명한 이미지를 사용) 적당한 위치에 배치하세요. 그리고 vd_name
, vd_dialogue
를 조금씩 상하좌우로 옮겨가며 테스트 메시지를 써보는 식으로 글씨가 올바른 위치에 표시되는 좌표를 찾는 것을 추천합니다.
- 옵션의
deck_name
에서 설정한 이름의 카드 덱을 생성합니다. 기본값은standings
입니다. - 카드 덱 안에 캐릭터마다 하나씩 카드를 생성합니다.
- 각 카드에 캐릭터의 스탠딩 이미지를 삽입하고 카드의 이름을 저널에 등록된 캐릭터의 이름으로 설정합니다.
- 캐릭터의 기본 표정 이미지인 경우 카드의 이름을 저널에 등록된 캐릭터의 이름으로 설정합니다.
- 캐릭터의 추가 표정 이미지인 경우 카드의 이름을 캐릭터이름-감정이름으로 설정합니다.
- 덱의 카드 뒷면은 기본 엑스트라 캐릭터에 사용할 기본 스탠딩 이미지를 등록합니다. 각 카드들의 개별 뒷면은 설정하지 않으셔도 됩니다.
/as 명령어를 이용해 저널에 없는 인물로 채팅을 할 경우 이 캐릭터를 엑스트라로 취급하고 별도의 스탠딩 이미지를 표시할 수 있습니다.
- 덱의 카드 뒷면에 임의의 이미지 대신 엑스트라 캐릭터에 사용할 기본 스탠딩 이미지를 등록합니다.
- '점원','학생' 등 캐릭터를 생성하지는 않았지만 특정 이름을 가진 엑스트라의 스탠딩을 사용할 경우 덱 안에 카드를 생성하고 이름과 이미지를 설정합니다.
모든 스탠딩 이미지들은 옵션에서 설정한
width
,height
값과 같은 가로세로 비율을 가져야 찌그러져 보이지 않습니다.
게임 진행 도중 배경이미지를 변경할 경우 사용할 배경이미지들을 Card Deck에 미리 세팅할 수 있습니다.
- 콜렉션 탭에서 신규로 카드 덱을 생성한 뒤 이름을
background
로 설정합니다. - 덱 안에 원하는 배경 이미지를 카드로 생성한 뒤 적절하게 이름을 변경해주세요.
- 매크로 탭에 자동으로
배경전환
매크로가 생성됩니다.
이후background
덱의 배경 이미지를 추가하거나 변경할 때 마다배경전환
매크로에도 자동으로 적용됩니다.
모든 배경 이미지들은
vd_background
토큰과 동일한 가로세로 비율을 가져야 찌그러져 보이지 않습니다.
- 세션방에 들어가 저널에 등록되어 있는 캐릭터로 일반 채팅을 시도합니다. 정상적으로 스탠딩과 대사 텍스트가 표시되는지 확인합니다.
ignore_list
에 등록되어 있는 캐릭터로 일반 채팅을 시도합니다. 대사 텍스트가 표시되고 스탠딩은 생략되는지 확인합니다.- /as 명령어를 사용해 엑스트라 캐릭터로 일반 채팅을 시도합니다. 대사 텍스트가 표시되고 스탠딩이 옵션에 맞게 표시/생략되는지 확인합니다.
- 플레이어로 일반 채팅을 시도합니다. 채팅 로그에는 표시되지만 대사 텍스트와 스탠딩은 생략되는지 확인합니다.
- 배경을 바꾸는 기능을 사용한다면
배경전환
매크로를 클릭해서 배경이 잘 변경되는지 확인합니다. as_switcher.js
나as_autofiller.js
,narrator.js
등의 스크립트를 사용하는 경우visual_dialogue.js
와 호환되는 새 버전을 적용한 후, 스크립트를 사용한 대사도 정상적으로 표시되는지 확인합니다.- 동작이 정상적으로 이루어지지 않거나 오류가 발생한다면 아래의 동작 조건 단락을 체크해보세요.
캐릭터의 스탠딩 이미지 표시와 대사 텍스트 출력은 아래의 우선순위 순으로 모든 조건이 충족된 페이지에서 동작합니다.
- 현재 'player' 북마크가 놓여져 있는 페이지를 기준으로 동작합니다.
- 옵션의
page_list
에 이름이 올라가 있는 페이지에서만 스크립트가 동작합니다. - 필수 토큰인
vd_area
,vd_panel
,vd_name
,vd_dialogue
가 모두 배치되지 않으면 오류 메시지를 표시합니다. - 조건에 맞는 카드 덱이 없을 경우 오류 메시지를 표시합니다.
감정표현 기능을 사용할 경우 !@(감정표현)
명령어를 사용하여 캐릭터의 스탠딩 이미지를 변경할 수 있습니다. 아래는 예시입니다.
!@분노
!@기쁨
대사와 동시에 감정표현을 사용하고자 할 경우 대사 바로 아래에 shift+Enter로 줄바꿈을 한 뒤 명령어를 사용하세요. 아래는 예시입니다.
"으아악! 이...이게 뭐야...!"
!@공포
GM은 !@(캐릭터이름):(감정표현)
의 형식의 명령어를 사용해서 As를 바꾸지 않은 채로 특정 캐릭터의 감정표현을 바꿀 수 있습니다.
!@에밀리 허드슨:웃음
추가로 !@
만 입력하면 기본 감정표현(그 캐릭터 전용 카드 덱의 카드 뒷면 )으로 돌아갑니다.
"휴... 진정하자...!"
!@
캐릭터를 화면에서 퇴장시키고 싶을 때는 !@퇴장
혹은 !@exit
명령어를 사용해서 스탠딩을 삭제할 수 있습니다. 뒤에 옵션을 추가해서 특정 스탠딩을 퇴장시킬 수도 있습니다.
!@퇴장
: 현재 설정된 AS에 설정된 캐릭터를 화면에서 퇴장시킵니다.!@퇴장:(캐릭터명)
: 특정 이름을 가진 캐릭터를 화면에서 퇴장시킵니다. (GM전용)!@퇴장:엑스트라
: 화면에 표시중인 엑스트라들을 일괄적으로 화면에서 퇴장시킵니다. (GM전용)!@퇴장:전원
: 화면에 표시중인 모든 스탠딩을 삭제합니다. (GM전용)
명령어가 다소 길기 때문에 옵션을 추가하는 명령은 매크로로 만들어서 사용하시는 것을 추천합니다.
!@퇴장:?{퇴장시킬 대상}
대사 화면을 숨기고 싶을 때는 !@숨김
혹은 !@hide
명령어를 이용해서 대사 표시창을 숨길 수 있습니다. 이 때 모든 캐릭터 스탠딩은 퇴장처리 됩니다.
새 대사를 입력하면 화면에 다시 대사 표시창이 보여집니다.
/desc Chapter 1. END
!@숨김
화면에 대사가 표시되지 않고 멈춘 경우, !@리셋
혹은 !@reset
명령어를 통해 현재 대기열에 쌓여있는 대사들을 모두 지우고 초기상태로 돌려놓을 수 있습니다. (GM전용)
화면의 대사가 멈춘 경우, !@강제진행
, !@force-progress
명령어를 이용해 다음 대사로 넘어갈 수 있습니다. (GM전용)
vd_background
토큰을 사용하는 경우, !@배경
이나 !@background
명령어로 배경을 교체합니다.
!@배경 (https://이미지주소...)
max_number
: 한 화면에 표시할 수 있는 스탠딩 이미지의 최대 개수를 설정합니다.
이 숫자를 넘어가면 엑스트라, 혹은 채팅기록이 가장 오래된 캐릭터의 스탠딩이 삭제되고 그 위치에 새 스탠딩이 추가됩니다.width
: 표시할 스탠딩 이미지들의 가로 사이즈입니다.height
: 표시할 스탠딩 이미지들의 세로 사이즈입니다.fit_width
: 스탠딩 이미지의 가로 크기 중 화면 밖으로 빠져나가면 안되는 중요한 부분의 너비를 지정합니다. 이 옵션을width
값보다 작게 설정할 경우 스탠딩의 중심을 기준으로fit_width
를 넘어서는 부분은 덜 중요한 부분으로 취급하며, 필요에 따라vd_area
의 밖으로 나가는 것을 허용합니다.use_emotion
: 캐릭터들이 여러 감정표현을 사용할지(true
) 대표 스탠딩 하나만 사용할지(false
) 설정합니다.
false일 경우deck_name
에 설정한 카드 덱에서 스탠딩 이미지를 가져옵니다.show_extra_standing
: /as를 이용해 저널에 없는 캐릭터로 채팅할 경우 엑스트라 전용 스탠딩을 표시할지 (true
) 스탠딩을 생략할지(false
) 설정합니다.
true일 경우extra_name
에 설정한 이름에 따라 엑스트라용 스탠딩을 가져옵니다.extra_name
:use_emotion
이true
일 경우에 엑스트라용 스탠딩 이미지를 가져올 카드덱의 이름을 설정합니다.ignore_list
:show_extra_standing
옵션과 별개로 스탠딩을 표시하지 않을 캐릭터의 이름을 기입합니다. 여러개일 경우 콤마(,
)로 구분합니다.page_list
: 스크립트를 사용할 페이지의 이름을 지정합니다. 여러개일 경우 콤마(,
)로 구분합니다.
name_font_size
: 캐릭터의 이름이 표시되는 텍스트 박스의 폰트 사이즈를 설정합니다.name_font_color
: 캐릭터 이름의 글씨색을 설정합니다.dialogue_font_size
: 대사 내용이 표시되는 텍스트 박스의 폰트 사이즈를 설정합니다.dialogue_font_color
: 대사 내용의 글씨색을 설정합니다.desc_font_size
: /desc나 /em으로 표시되는 강조된 텍스트 박스의 폰트 사이즈를 설정합니다.desc_font_color
: /desc, /em의 글씨색을 설정합니다.
min_showtime
: 여러 채팅이 몰려서 순차적으로 표시할 경우 채팅당 최소 노출시간을 설정합니다. (1000=1초)showtime_ratio
: 채팅 1글자당 표시 시간. 숫자가 커질수록 글자수 대비 대사의 표시시간이 길어집니다.
letter_spacing
,line_height
: 문장 길이에 따른 텍스트 박스의 크기를 계산하기 위해 가정하는 1글자당 가로-세로 픽셀입니다. 글자 레이아웃과 관련된 큰 개조 외에는 일반적으로는 손댈 필요가 없습니다.margin
: 텍스트박스 여백을 포함한 크기 계산을 위한 픽셀사이즈입니다. 글자 레이아웃과 관련된 큰 개조 외에는 일반적으로는 손댈 필요가 없습니다.