지금까지 여러분이 VNAP을 이용하여 최소한의 작품을 만들 수 있도록 뼈대를 잡아드렸습니다.
하지만 여러분이 몇날 몇일을(긴 분은 몇개월) 만든 소중한 작품의 내용을 다른 사람이 함부러 수정하면 기분이 나쁘시겠지요.
이번에는 작품 내용을 보호하는 ugu컴프레셔를 소개드리겠습니다.
[Lecture 11. UGU압축으로 원본 소스 보호하기.]
일단 보통의 상용 작품이나 공개된 VNAP 작품들은 눈을 씻고 찾아봐도 이미지나 글이 적혀있는 파일을 찾을 수가 없습니다.
하지만, 여러분이 작업중인 폴더는 아래와 같이 글과 이미지가 가득할 것입니다.
이대로라면 여러분의 작업내용을 보호받을수가 없습니다(ㅠ_ㅠ)
그렇기 때문에 VNAP제작 위원회에서는 ugu 컴프레셔를 제공하여 파일을 보호하는 유틸리티를 제공합니다(^^)
UGU 컴프레셔
다운 받으시고 실행하면 아래와 같습니다.
그리고 여러분이 작업중인 폴더를 엽시다. 그리고 ugu라는 폴더를 만듭시다.
ugu 컴프레셔로 보호 가능한 파일은 시나리오 파일과 이미지 파일입니다.
(약간의 프로그래밍 능력이 있다면 보호 가능한 파일은 더 늘어날 수 있습니다. 음악이나 영상도 말이지요.)
① 시나리오 파일 압축하기
실행한 ugu 컴프레셔에 압축할 시나리오 파일을 선택하여 드레그합니다.
그리고 Operation 항목에서 Compress를 누릅니다. 나온 창에서 역시 Compress를 누릅니다.
출력 파일명을 지정해달라는 창이 나옵니다.
... 단추를 눌러주시고, 여러분의 작업 폴더 중에서 좀전에 만들어둔 ugu 폴더를 선택하시고 파일명을 scenario.ugu 로 지정해주세요.
안내 메시지에 OK를 누르시면 성공적으로 압축이 됩니다.
② 이미지 파일 압축하기
이미지 파일도 동일하게 압축을 합니다. 이미지 파일은 image.ugu로 지정합니다.
그리고 여러분의 작업 폴더 중에 vnap.ini파일을 찾아 엽시다.
첫째줄의 DEBUG를 지우시고 저장하십시오.
그리고 여러분의 작업 폴더 중에서 다음의 파일들을 다른 폴더에 복사합니다. 아래의 파일은 필수로 복사하여야 합니다.
VNAP.exe
vnap.ini
DShowPlayer.dll
ugu폴더 및 음악/효과 폴더.
아래는 작업내용이 보호된 작품입니다. ^^
어느정도의 강의가 마무리되었습니다. 이제 하나의 작품을 만드는 것이 가능하실겁니다.
더욱 고급 사용법도 있고 노하우도 있지만, 그건 조금씩 풀어놓기로 하지요.
수고하셨습니다!
Copyright ⓒ 2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/)
이번 강좌에서는 비주얼 노벨류에서 나타나는 여러 엔딩을 구현하는 방법에 대해 알아보도록 합시다.
[Lecture 10. 다중 시나리오 만들기.]
① 멀티 엔딩 만들기.
멀티 엔딩은 하나의 엔딩으로 끝이 나는 소설과는 달리 여러개의 엔딩을 제공하는 비주얼 노벨에서 자주 볼 수 있습니다.
VNAP에서도 여러 엔딩을 만들어 볼 수 있습니다.
일단 예시를 들어 멀티 엔딩을 만들어보도록 합시다.
케릭터 1,2,3의 이야기가 있다고 합시다. 그렇다면 엔딩의 갯수는 최소 3개이겠군요.
각 엔딩의 내용을 준비하며, 파일의 구성은 아래와 같이 합니다.
케릭터 1의 이야기, 엔딩. - ch1.txt - ch1_end.txt
케릭터 2의 이야기, 엔딩. - ch2.txt - ch2_end.txt
케릭터 3의 이야기, 엔딩. - ch3.txt - ch3_end.txt
각자의 케릭터의 이야기 파일과 엔딩 파일을 준비했으면 구조는 아래와 같습니다.
구조를 만든 뒤에 작품을 만드시면 보수와 수정이 용이합니다 :D
스크립트는 첨부한 파일에서 참조해 보세요.
② 케릭터를 선택하여 이야기 전개하기.
간혹 처음부터 케릭터를 고를수 있어서, 그 케릭터의 시점으로 플레이하거나
그 케릭터의 이야기를 보여주는 메뉴를 지닌 작품을 볼 수 있을 것입니다.
VNAP에서도 이런 형태의 메뉴를 제공가능합니다.
<오픈마인드 월드의 Replay 4>
scenario.txt 파일에서 타이틀을 불러옵시다.
타이틀 파일을 title.txt 이라고 하면, 타이틀 화면에서 시작을 누르면 케릭터를 고르는 화면으로 넘어갈 수 있도록 하는데,
여기서 일종의 트릭(?)을 이용합니다.
즉, 메뉴(Menu)명령어로 한번더 케릭터 선택에 대한 파일을 불러오는 것입니다.
케릭터 선택에 관한 파일을 char_sel.txt라 하겠습니다.
char_sel.txt파일에 아래와 같이 메뉴명령어를 사용합니다.
sel_menu.txt에는 케릭터 CG를 메뉴의 버튼처럼 만든 것입니다.
메뉴 스크립트에서 메뉴 스크립트를 다시 한번 불러옴으로써 위와 같은 사용이 가능한 것입니다.
가장 아래의 스크립트는 다시 메뉴로 돌아갈 수 있도록 하는 메뉴입니다 :D
첨부 파일을 뜯어 보시면서 익혀보세요.
③ 처음 프롤로그를 볼 수 있게 한 후, 메뉴에서 다시 프롤로그를 볼 수 있게 하기.
많은 작품들은 그 작품의 시작부(프롤로그)를 제공하고 있는데요,
가장 먼저 프롤로그가 나타나고 메뉴가 나오는 구성은 이미 많은 작품이 채용하고 있습니다.
또한 다시 메뉴에서 그 프롤로그를 보는 것도 가능하지요.
VNAP에서도 그런 것이 가능합니다.(가능한것만 이야기하고 있다는...-_-;;)
이야기로 한다면 매우 복잡할거 같아서 아예 전체적인 구조를 만들었습니다(힘들었어요 ㅠ.ㅠ)
일단 senario.txt 파일부터 설명하겠습니다.
1행의 init readplog = 0 부분은 변수입니다.
왜 변수를 이용하였나 하면 나중에 나올 프롤로그를 볼것인가 스킵할것인가 때문에 만들어 둔 것입니다.
일단 선언을 해야겠지요.
3행의 ifflag intro_read 7 5 에서는 플레그가 발생했는지 체크하는 것입니다.
당연히 처음 실행했을때는 플레그가 없지요, 그래서 5행으로 넘어가서 intro.txt 파일, 즉 프롤로그 파일을 불러옵니다.
7행의 loadsnr intro.txt 부분은 두번째 실행부터(intro.txt에서 플레그가 체크 되면) 프롤로그를 넘기고
바로 title.txt 파일, 즉 타이틀 화면을 불러옵니다.
다음, 프롤로그 파일인 intro.txt 을 설명하겠습니다.
5행의 setflag intro_read 는 플레그를 설정하는 것입니다. 즉 프롤로그 읽었어요~ 하고 체크하는 것입니다. :D
7행의 if (readplog = 1) 9 11 는 변수를 체크하는 것인데요,
앞에서 변수를 설정하고 값이 변하지 않았으므로(즉 변수 readplog 값은 여전히 0이므로) 11행으로 가게 만드는 것입니다.
9행의 loadsnr snr01.txt 는 본 시나리오 파일(snr01.txt)을 불러오게 하는 것인데, 이는 변수 readplog값이 1일때만 불러옵니다.
즉 프롤로그를 볼것인가 물을때(이 파일의 내용은 p_log_check.txt 에 있어요.)만 프롤로그를 보여주고나서,
본 시나리오 파일(snr01.txt)을 보여주는 것입니다.
11행의 menu title.txt 는 처음 실행했을때 여전히 변수 값이 0 그대로이므로 7행의 if에서 연결되어, 타이틀 화면을 불러오게 하는 것입니다.
title.txt 파일에서는 타이틀 화면을 불러오는 것이라 메뉴만들기 강좌를 참고해 주시구요 ^^;
시작 버튼을 눌렀을때 p_log_check.txt 파일을 읽는다는 점을 알고 가시면 됩니다.
p_log_check.txt 파일의 내용은 프롤로그를 읽을 것인지 넘길 것인지 선택해야 하는 선택지가 있습니다.
프롤로그를 읽는다고 하면 read_p_log.txt 파일로 넘어가서 senario.txt 파일에 선언되었던 변수 readplog 값이 1이 되면서,
intro.txt 을 불러오게 하는데요, 이때 변수 값이 1이므로 intro.txt 파일의 7행에서 9행으로 넘어가게 됩니다.
그렇게 하면 프롤로그를 본 후에 본 시나리오(snr01.txt)로 연결됩니다.
물론 프롤로그를 읽지 않는다고 하면 본 시나리오 파일(snr01.txt)를 불러오게 됩니다 ^^
엄청나게 복잡해 보이지만, 플레그와 변수를 잘 이용하는 예시라고 볼 수 있습니다.
첨부파일을 뜯어보며 공부하시길 바랍니다 ^^;;;
④ 엔딩 후 바뀌는 타이들 만들기.
KEY사의 Air를 플레이해본 분이라면 처음의 이야기인 Dream편을 클리어하고 나면
타이틀이 바뀌면서 Summer편으로 넘어가는 것을 아실 것입니다.
< GIF파일로 만들어봤어요 >_< ! >
VNAP 공식 홈페이지에서 제공하고 있는 작품, 햇님 달님에서도 채용되어 있는 기능인데요,
쉬운 이해를 위해 준비해 보았습니다.
일단 메뉴는 3개를 준비했습니다. 바꾸고 싶은 만큼 메뉴를 더 추가하셔도 좋습니다.
처음 타이틀 파일을 first_title.txt 두번째 타이틀 파일을 second_title.txt 세번째 타이틀 파일을 third_title.txt 라고 합시다.
각각의 타이틀 파일에서 나올 이야기들의 엔딩 파일 (여기서는 ch1_end.txt ch2_end.txt ch3_end.txt 라고 하겠습니다.)에 플레그를 설정해둡니다.
여기서는
ch1_end.txt 의 마지막에는 read_first 라는 플레그
ch2_end.txt 의 마지막에는 read_second 라는 플레그
ch3_end.txt 의 마지막에는 read_third 라는 플레그를 설정합니다.
scenario.txt파일에는 플레그를 체크하는 명령어를 써둡니다.
(flag를 체크하는 것은 가장 나중에 나올 플레그 기준으로 합니다.)
즉, 플레그가 기록된 역순으로 체크합니다.
첫번째 실행때는 아무 플레그가 없기 때문에
1행의 ifflag read_third 13 3 에서 당연히 3행으로 넘어갑니다.
3행에서의 ifflag read_second 11 5 에서 역시 플레그가 없기 때문에 5행으로 넘어갑니다.
5행에서의 ifflag read_first 9 7 에서 역시나 플레그가 없기 때문에 7행의 menu title.txt 로 타이틀을 불러오게 됩니다.
7행은 menu title.txt 로 첫번째 타이틀을 불러옵니다.
9행은 두번째 실행부터 작동하는데요,
첫번째 이야기의 엔딩을 보고 난 후면, read_first 플레그가 체크되어 있어서 5행에서 9행으로 넘어오게 되어
menu second_title.txt 명령어가 실행되어 두번째 타이틀을 불러오게 됩니다.
11행 역시 마찬가지로, 두번째 이야기를 보고 난 후면, read_second 플레그가 체크되어 있어서3행에서 11행으로 바로 넘어오게 되어
menu third_title.txt 명령어가 실행되어 세번째 타이틀을 불러오게 됩니다.
13행은 뒤에 나올 부분인데 같은 파일로 다루겠습니다.
세번째 이야기를 보고 난 후면(그리고 모든 엔딩을 다 본 후), 1행에서 바로 13행으로 넘어오게 되어
menu special_title.txt 명령어가 실행되면서 특별 타이틀을 불러오게 됩니다.
⑤ 모든 엔딩을 본 후에 스페셜 엔딩 나오게 하기.
지금까지 멀티 엔딩에 대해 알아보았는데요, 작품들 중에서는 기존의 엔딩(배드엔딩 포함)을 모두 다 보았을때
새로운 엔딩이나 진엔딩이 나오는 경우도 있지요.
그러면, 각기 엔딩을 보게 되었을때 플레그들이 하나씩 활성화되게 됩니다.
그렇지만, 순서에 관계없이 모두 볼수 있게 하려면 플레그를 체크할수 있도록 해야겠죠.
그래서 ④ 항목과 같이 senario.txt파일을 구성했습니다.
(④ 항목만 이해하신다면 이 과정은 껌입니다 ^^;;)
그리고 새로운 메뉴 파일과 엔딩파일을 준비했지요.
④ 항목에서 또 다른 이야기와 엔딩, 타이틀을 준비했다고 생각하는 것이 가장 쉽습니다 ^^;
특별한 내용이 있는 것도 아니구요 ^^
강좌 파일은 ⑤ 기준으로 준비해 두었습니다. ④ 항목 역시 포함이 되므로 그렇게 했답니다.
※ 각 강좌 파일을 테스트 하실때 초기화하려면 아래의 cfg 파일을 지우시면 됩니다.
(정확히는 제목없음.cfg 파일입니다. 나중에 제목을 붙이게 되면 게임제목.cfg 파일이 되겠습니다.)
강좌 파일
Copyright ⓒ 2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/)
강좌를 시작하기에 앞서, 스크립트 파일에 대하여 언급을 하겠습니다.
VNAP에서는 3가지의 스크립트가 있는데요,
쇼(show), 메뉴(menu), 시나리오(scenario)스크립트입니다.
자세한 것은 14강 VNAP Helper Book을 참조해주시고, 본 강좌에서는 메뉴에 대해 알아보고자 합니다.
[Lecture 09. 메뉴의 구성.]
먼저 각종 상용 작품들의 메뉴, 즉 타이틀을 살펴보고 시작하도록 하지요.
<버튼이 가로로 정렬되어있는 Fate/stay night(왼쪽). 버튼이 세로로 정렬되어있는 CLANNAD(오른쪽)>
앞서 이야기드린 메뉴스크립트는 바로 이 타이틀을 만들기 위해 존재하는 스크립트입니다.
자, 직접 만들어보도록 합시다.
먼저 메뉴의 구조를 아셔야 합니다.
메뉴는 배경화면과 버튼으로 이루어져 있습니다.
<예제는 제가 작업했던 White Album Dramatic Edition :: Snowy Memory ::입니다.>
배경화면과 버튼이 될 이미지 파일은 여러분이 직접 포토샵을 이용해서 만드셔야 합니다.
만들어야 할 이미지 파일은 버튼당 최소 1개입니다만 좋은 모양을 위해서 2개를 준비합시다.
(누르기 전의 버튼의 모습과 누른 후의 버튼 모습.)
일단 scenario.txt 파일에 아래와 같이 title.txt 라는 파일을 menu명령어로 부릅시다.
(14강 VNAP Helper Book강좌 필수 참고!)
그리고 title.txt라는 파일을 만듭시다. 파일의 내용은 아래와 같습니다.
이해의 도움을 위해서 아래에 풀어썼습니다.
<3번째 줄 설명>
파란 줄로 그어진 button은 버튼을 만드는 명령어입니다.
()안에 담겨있는 것은 (왼,위,오른,아래)의 좌표지만, 실제로는 왼,위의 좌표만 알고 있으면 산수문제입니다(또냐!)
"좌표에 대해 알아봅시다" 게시물에서 소개했듯이 좌표는 왼쪽 가장 위가 기준입니다.
예제에 쓰인 버튼 파일의 크기는 200*40 픽셀의 사이즈입니다.
위와 같이 위치를 지정해 두고 왼쪽 가장 위의 좌표를 보니 380,270이로군요.
x좌표는 오른쪽으로 갈수록, y좌표는 아래로 내려갈수록 커지는 것을 숙지하고 계산을 하셔야 합니다 ^^
x좌표 : 380에서 버튼 크기의 가로길이가 200픽셀이므로 +200하면 오른쪽의 좌표가 나옵니다.
380+200=580
y좌표 : 270에서 버튼 크기의 세로길이가 40픽셀이므로 +40하면 아래의 좌표가 나옵니다.
270+40=310
따라서 첫번째 버튼의 좌표는 (380,270,580,310)이 되겠습니다.
다른 버튼 역시 같은 식으로 계산을 하시면 됩니다.
하나 나오면 버튼 사이의 간격을 생각하고 다 산수로 구해버리는 겁니다 ^^;
그런데 잘 보시면 공통된 숫자가 계속 사용되고 있는것이 보이시죠?
(380,270,580,310)
(380,310,580,350)
(380,350,580,390)
위와 같은 버튼 배치는 위와 같은 식으로 바뀌는 겁니다.
2번째와 4번째는 버튼의 크기의 높이(세로)만큼의 숫자만 더해지는 것이죠.
위의 예제에서는 버튼이 세로로 정렬되어 있기 때문에 모두 왼쪽, 오른쪽의 좌표가 각각 380, 580으로 동일하고,
위, 아래의 좌표만이 바뀜을 아실수 있을겁니다. (전 초기에 상당히 헤맸습니다.-_-;;)
버튼을 가로로 정렬하려면 위,아래를 고정하고 산수로 왼쪽,오른쪽을 고치시면 되겠습니다^^
ex) 첨부 파일의 title_another.txt를 참조하세요 ^^
가로 정렬의 좌표입니다. 위, 아래 좌표가 고정되어 있는 것을 볼 수 있습니다.
(10,270,210,310)
(220,270,420,310)
(430,270,630,310)
<가로 정렬된 버튼 모습>
그리고
3개의 파일명이 적혀있는데요.차례로
버튼이 눌리지 않은 상태에 쓸 그림파일/버튼이 눌린 상태에 쓸 그림파일 /버튼위에 마우스 커서가 놓였을 때 쓸 그림파일이 입니다만,
위에서 언급했듯이 그림파일은 1개만 있어도 되지만, 보통 버튼이 눌린 상태와 버튼위에 마우스 커서가 놓였을 때 쓸 그림파일은 같이 쓰는 경우가 많습니다(...라는 것은 귀차니즘을 정당화?!)
그래서 위에 예시에 든 버튼 그림들은 2개씩 준비되어 있지요 ^^
<4번째 줄 설명>
LOAD 는 말 그대로 세이브한 내용을 불러내어 이어서 플레이 할 수 있도록 해줍니다.
나머지는 3번째 줄과 동일합니다.
<5번째 줄 설명>
END는 작품을 종료하는 명령어입니다.
나머지는 3번째 줄과 동일합니다.
강좌 파일을 참조해서 이리 저리 버튼의 위치를 옮겨보세요^^
강좌 파일
Copyright ⓒ 2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/)