VNAP (비공식) 관리위원회

블로그 이미지
VNAP Unofficial Support Page.
by pilza2

ARTICLE CATEGORY

전체 (48)
보관 (18)
정보 (5)
강좌 (16)
작품 (6)

RECENT ARTICLE

  • Total hit
  • Today hit
  • Yesterday hit

혹시 게임북이라는 도서 장르를 아시나요?
1980~1990년도에 유행한 어드벤처(모험) 책을 읽으면서 느끼게 있었던 장르였습니다.
어느 특정 내용을 읽고 갈림길이 나오지요, "~페이지로 가세요" 류의 책들을 많이 아실 것이라 생각합니다.
최근에도 나오고 있더군요(최근 유행하는 마법 천자문 시리즈로 나오는 것을 보았습니다.)

비주얼
노벨의 원류는 텍스트 어드벤처이며, 게임북 / 텍스트 어드벤처 작품들이 가지고 있었던 갈림길은
"선택지" 표현됩니다.


    <탐정퀴즈 게임, 각 페이지마다 이동지시가 나오고, 선택에 따라 다른 결말이 나온다. >    

 
                                              <KEY社의 클라나드  

선택지 시스템은 일본식 텍스트 어드벤처의 가장 특징적인 부분으로, 한방향이 아닌 여러갈레의 이야기가 나올 있게 만들어져 있습니다.
그렇기
때문에 선택지는 필수 사항이 되었습니다
   

자세한 것은 연구실 메뉴의 글을 참조해 주시고, 강좌에서는 분기, 그리고 변수와 플레그(flag) 이용한 분기를 알아 보도록 하겠습니다   

[Lecture 08. 분기 만들기.]    

select    

선택하다는 뜻의 명령어는 선택지를 만들수 있는 명령어입니다.
먼저, 명령어를 사용하기 전에, 강좌에서 들었던 내용을 다시 언급하겠습니다   

지금까지는 scenario.txt 파일에 모든 명령어를 적었던 것에 비해, 분기는 다른 텍스트 파일을 필요 합니다.
(물론 무조건 그렇게 하지 않아도 됩니다만, 수정을 시에 매우 어렵습니다.)    

분기이기 때문에 2 이상의 다른 텍스트 파일이 필요합니다.
그리하여 예제에서는 snr01.txt snr02.txt 라는 다른 텍스트 파일 2개를 준비했습니다      

   

   

   

      

위에 예를 들었던 것처럼 선택지가 나타났음을 있습니다.

"
유키에게 말을 건다" 선택하면 snr1.txt 내용이 나타나고,
"교실에 간다" 선택하면 snr2.txt 내용이 나타납니다.    

추후에도 계속 다루겠지만, 시나리오 파일을 불러오는 명령어인 loadsnr 개념이 비슷하다는 것을 확실히 인지하셔야 합니다.

[명령어 Check]  
loadsnr 텍스트파일


: 다른 텍스트 파일을 읽어온다.
이 명령어가 실행되면 지정된 파일을 읽게 되고, 추가적인 조치를 취하지 않는 이상 원래 파일로 돌아오지 않는다.

선택지를 추가시키시려면 다음 줄에 + snr3.txt 전화를 건다. 라는 식으로 추가를 시키시면 됩니다.     

 
< 경우에는 windowsize FULL 넣어서 화면에서 선택지를 넣으면 좋겠지요.>    

여기서 좋은 모양으로 선택지를 나타낼 수도 있습니다.
바로 ncselect 명령어입니다   

아래와 같이 scenario.txt 파일에 적고, 실행시켜 봅시다   

    

    

사용법은 완전히 동일합니다만, ncselect 출력된 부분이 이해도 쉽고 보기가 좋기 때문에
개인적으로는 분기 명령어를 ncselect 사용하는것을 추천합니다(^^)    

, 가장 기본적인 분기방법을 배웠습니다
하지만, 좀더 나가서 변수를 점목시켜서 분기를 짜게되면, 더욱 치밀한(!) 구성이 가능해집니다   

init

명령어는 미소녀 게임에서는 특정 이벤트가 발생하기 위한 값을 의미합니다.
변수 미소녀 게임에서 주로 호감도 사용되는 요소입니다.    

가령 예를 들어 소녀1이라는 케릭터를 공원에서 만나고, 다음날 다시 공원에서 만나는 경우
그녀와의 새로운 이벤트가 발생하게
되는 경우가 그런 것입니다  

앞에서 배웠던 분기의 개념과 특정 조건을 만족했을 때만 특정한 이벤트가 발생하게 만드는 것이야말로
진정한
의미의 분기의 목적
이라고 있겠습니다 :) 
   

프로그래밍을 공부하셨다면 변수 선언을 알고 계실겁니다. 안배우셨다고 하더라도 걱정은 붙들어매십시오.
매우 간단히 사용이 가능하니까요 ^^    

변수의 사용은 다음 순서에 따릅니다   

  변수 선언
  변수에 대입
  if구문을 이용하여 변수값에 맞는 결과를 출력

머리가 지끈거린신다구요?
괜찮습니다. 이게 전부입니다 ^^; 
그림으로 쉽게 설명해 드리겠습니다   

변수의 선언    

init 명령어가 이용됩니다   

사용법은    

init 변수이름 = 초기값    

으로 이용하게 됩니다   

변수이름 : 사용할 변수의 이름입니다. 예제에서는 호감도를 표현하기 위해 like라고 지정했습니다.
초기값 : 변수가 선언될때 가장 초기의 입니다. 후에 변수에 값이 들어갑니다
             숫
(정수) 문자가 들어갈 있습니다   

변수에 대입

set 명령어가 이용됩니다  

사용법은    

set 선언한 변수이름 = 변수값

이용하게 됩니다  

선언한 변수이름 : init 선언한 변수의 이름입니다. 역시 예제에서는 like입니다 ^^;
변수값 : 여기서는 공원에 같이 갔을때 고백이 성공하게 하려합니다   

그러므로 공원에 갔을때(선택문에서 공원에 간다 선택시 snr1_1.txt 가게 되겠지요?)
변수를 변화시켜야 합니다.

여기서는 1 대입시켰습니다   

if구문을 이용하여 변수값에 맞는 결과를 출력    

if 명령어가 이용됩니다.
앞에서도 배웠지만, 어떤 조건에 맞는지 검사하는 명령어입니다.

여기서는 공원에 갔다면 호감도(여기서 선언한 변수 like) 올랐을때(여기서 공원에 간다를 선택시 like 1 되었죠?)
고백 이벤트가 성공하고, 집에 갔다면 호감도에는 변화가 없기 때문에 고백 이벤트는 실패합니다   

변수가 이용되었지만 if 명령어의 기본적인 사용법과 동일하게 괄호 안의 내용이 참이면 첫번째로,
거짓이면 두번째의 파일 내지는 라인을 읽게 됩니다   

snr2.txt파일을 참고하세요.    

참조
변수는 게임이 시작될때마다 값이 초기화 되기 때문에 사용자가 if 명령어가 나오기 전에 세이브 하고
다시 플레이하면 값이 초기값 그대로이기 때문에 이를 주의해서 시나리오 양을 조절하셔야 하셔야 합니다.    

게임 저장을 하고 로드를 하시면 변수까지 저장됩니다만, 그것을 이용하여 스크립트를 짜시면 문제 없지만
개인적으로는 조금 더 어려워도 앞으로 배울 Flag명령어가 오류를 원천적으로 막는 방법이라 생각이 듭니다.


 Flag
    

깃발이라는 뜻의 명령어는 어드벤처 게임에서는 특정 이벤트가 발생하기 위한 조건 의미합니다. 
변수를 이용하는 것과 같이, 분기를 만드는 쌍두마차라고 있겠습니다(거창하군요 ^^;)   

먼저 준비해야 것을 들자면 아래와 같습니다  

  구상도.
  상황에 맞는 텍스트 파일.    

구상도라는 것은 이벤트의 흐름을 어떻게 것인가를 정해놓은 입니다.
저는 보통 분기를 만들때 아래와 같이 미리 그려두고 작업을 시작합니다   

위와 같이 개요를 만들어 두고, 분기를 짜야 치밀하고도 쉽게 만들 있습니다.
간단한 같아보이지만, 뒤에는 수많은 본인의 포크레인질이 있었습니다(침묵[...])
... 강요는 아니지만 삽질은 피하는 것이 좋은겁니다 _    

개요를 만든 뒤에는 그에 맞는 내용을 준비해야겠지요.

snr1.txt
에서 선택지가 2개입니다.
그렇기 때문에 snr1.txt 라는 파일에서 선택할 2개의 파일을 각각 snr1_1.txt snr1_2.txt 라고 해두었습니다.
그리고 파란 표시를 해둔곳을 플레그를 설정하기 위하여 미리 적어두었습니다   

snr2.txt에서는 snr1.txt 에서 무슨 선택지를 선택했는가에 따라 내용이 달라지게 설정해두었습니다.
그렇기 때문에 빨간 표시를 해둔곳을 플레그가 설정되어 있는지 체크하기 위하여 미리 적어두었습니다   

위의 구상도를 실제로 옮겨보도록 합시다
                                               * setflag : snr1_1.txt 파일에 있는 빨간 줄은 플레그를 설정하는 명령어입니다
   ifflag : snr2.txt 파일에 있는 빨간 줄은 플레그를 체크하는 명령어입니다
   

ifflag park 뒤에 파일명이 2개가 적혀 있는데,
플레그가
설정되어 있으면 앞의 파일을 읽고,
없으면 뒤의 파일을 읽도록 되어있습니다.    

따라서, 공원에 갔을때 park라는 플레그가 설정되어서(setflag), snr2.txt에서 플레그를 체크하여(ifflag)
snr2_1.txt 읽게 되어 고백 이벤트가 성공합니다   

공원에 가지 않고 집에 가면 park 플레그가 설정되지 않아서 snr2_2.txt 파일을 읽게 되어 고백 이벤트가 실패합니다   

 첨부한 파일에 강좌를 참고하여 명령어를 바꾸어 시험해보세요^^    

위의 분기 방법은 플레그를 이용한 방법이기 때문에 테스트 해보실때 공원에 간다를 먼저 누르시게 되면
플레그의 특성상 지워지지 않으므로, 나중에 다시 선택문에 돌아와서 집으로 간다고 선택문을 누른다 해도
고백 이벤트가 성공하는 알고리즘적 버그[...] 있습니다.    

이와 같은 버그를 방지하기 위하여 아래와 같이 수정하시면 해결됩니다만, 이해가 어려우신 분들은 일단 개념만을 익히시고,
나중에
익숙해지시면 도전해보시면 되겠습니다.
 
   

논리적 플레그 사용법    
: 아래의 "더 보기"를 눌러주세요.

강좌 파일

 
Copyright 2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/) 

AND

강좌의 버퍼(buffer) 명령어를 배웠습니다.
버퍼 명령어는 주로 케릭터 CG 이용되어서 자연스럽고 실제로 움직이는 듯한 효과를 주었습니다
이번에는 배경 CG 실제로 움직이는 듯한 효과를 있는 명령어인 cgeffect cgeffect2 대해 알아보겠습니다   

역시 자주 이용되는 명령어 위주로 알아보겠습니다.
실력이 붙으시면 VNAP 제작 위원회에서 제공하는 스크립트 가이드만을 보더라도 충분히 부족한 부분을 있습니다
강좌는 어디까지나 뼈대를 잡아드릴 뿐이니까요^^    

[Lecture 07. 이미지 연출법.]    

1. cgeffect

먼저, cgeffect 명령어의 일반적인 사용법입니다.
VNAP 제작 위원회에서 제공하는 스크립트 가이드를 열어보시면 아래와 같이 나올것입니다   

cgeffect effecttype time filename pos    

 effecttype : 효과 타입을 말합니다주로 FADETO, BLINDSHOW, SCROLL, QUAKE, ZOOMIN, ZOOMOUT 사용됩니다  

time : 그림 파일이 나타나는데 걸리는 시간을 의미합니다   

filename : 그림 파일을 적습니다   

pos : 세부 조정이 가능한 옵션입니다   

위에 일반적인 사용법에 맞춰 그대로 사용하시면 됩니다.
필요에 따라서는 모두  갖춰주어야  하는 명령어도 있고, 생략해도 되는 명령어도 있습니다.
여기서는 자주 사용되는 양식으로 설명하겠습니다 ^^    

, 그러면 직접 사용해 보도록 합시다   

FADETO  

배경 CG 서서히 나타나게 하는 명령어입니다. 앞에서 배웠던 buffercg 기능이 동일합니다.
사용법은
아래 스크립트를 참고하세요
    

     

실행해 보시면, 아주 서서히 그림이 나타납니다.
cg 명령어보다는 cgeffect FADETO 명령어를 자주 이용하는 것이 깔끔한 작품을 만들 있습니다. ^^   

SCROLL

스크롤 기능을 말합니다. , 그림이 아래로 움직이는 효과를 말합니다.
하지만, 실제로는 그림을 끌어주면서 보여주는 이랍니다.
(애니메이션의 기법입니다 ^^)    

, 우선 그림 파일을 준비합시다.
필요한 그림 파일의 조건은 기본 크기에서 한쪽을 늘려주는 것입니다.    

    

왼쪽, 오른쪽으로 스크롤하기.    

<명령어 체크>

LSCROLL : 이미지를 왼쪽으로 스크롤.
RSCROLL : 이미지를 오른쪽으로 스크롤
  

준비물 : 왼쪽, 오른쪽으로 스크롤을 하려면 옆으로 그림이 필요합니다.    

예를 들어 1280*480 픽셀의 그림을 사용하면 왼쪽, 혹은 오른쪽으로 스크롤이 가능합니다.
물론 800*480같은 크기같이, 기본 크기의 가로 크기보다 크면 상관없습니다.
다만, 가로의 길이를 늘리되, 세로는 고정해야 합니다   

아래로 스크롤하기.    

<명령어 체크>

USCROLL : 이미지를 위쪽으로 스크롤.
DSCROLL : 이미지를 아래쪽으로 스크롤
   

준비물 : 아래로 스크롤을 하려면 아래로 그림이 필요합니다.    

예를 들어 640*960  사용하면 , 아래로 스크롤이 가능합니다.
역시 640*800 같은 크기같이, 기본 크기의 세로보다 크면 상관없습니다.
다만, 세로의 길이를 늘리되, 가로는 고정해야 합니다   

첨부 파일을 뜯어 고쳐 보시면서 익히시길 바랍니다   

BLINDSHOW

화면의 일부분을 가리면서 그림이 나타나는 효과입니다.
주로 장소의 이동시에 많이 이용되는데요, 명령어는 별도의 설명 없이 직접 사용해 보세요   

    

<명령어 체크>

LBLINDSHOW : 이미지를 왼쪽부터 블라인드효과를 적용해 출력.
RBLINDSHOW : 이미지를 오른쪽부터 블라인드효과를 적용해 출력.
UBLINDSHOW : 이미지를 위쪽부터 블라인드효과를 적용해 출력.
DBLINDSHOW : 이미지를 아래쪽부터 블라인드효과를 적용해 출력
   

2. cgeffect2    

위에서 다룬 cgeffect명령어와는 비교하면, cgeffect2 명령어는 별도의 연결 파일이 필요하며
지정한 시간동안 효과는 지속된다는 점에서 다릅니다.      

연결 파일은 VNAP 플러그 (Plug-In) 파일 모음인 RVPF(Ricanet VNAP Plugin Factory) 에서 제공합니다
그리고, VNAP폴더에 cgeffect 라는 폴더를 생성한 후에 파일들을 복사해넣어야만 하지요  

그리고 vnap.ini파일을 열어서 아래의 빨간 줄과 같이 추가합니다   

CGEFFECT_DIRECTORY=".\cgeffect\"     

 

RVPF 플러그인 파일을 다운 받으셔서 VNAP폴더의 cgeffect폴더에는 화면효과이름.cpp 파일과
화면효과이름.dll파일을 복사해옵니다  

경우에 따라서는 추가적인 파일 모두를 복사해와야 합니다.    

파트에서도 가장 널리 사용되는 명령어 위주로 설명하겠습니다.     

Rain

비가 내리는 효과를 가진 명령어입니다 구조 아래와 같습니다   

cgeffect2 rain 개수 수직 최대 속력 수직 최소 속력 크기     

rain : rain 효과 타입을 사용합니다   

 빗줄기 개수 : 세부옵션. 화면에 나타나는 빗줄기의 개수. 수의 제한은 없으나 30~300 값을 추천합니다   

빗줄기의 수직 최대 속력 : 세부옵션. 빗줄기의 수직 최대속력. 10~50 값을 추천합니다.    

빗줄기의 수직 최소 속력 : 세부옵션. 빗줄기의 수직 최소속력. 3~15 값을 추천합니다.    

빗줄기의 크기  : 세부옵션. 빗줄기의 크기. 100~500 값을 추천합니다.    

세부 옵션은 모두 생략이 가능하기 때문에 아래와 같이 간단히 사용해봅시다   

     

SmoothCu    

부드럽게 화면을 전환시키는 명령어로, 위의 FADETO 명령어와 사용이 비슷합니다
구조는 아래와 같습니다   

cgeffect2 SmoothCU 전환 시간 전환할 파일 페이딩       

 SmoothCU : smoothCU 효과 타입을 사용합니다   

 전환 시간 :  초동안 효과를 지속할지 결정합니다. 1000이면 1초동안 지속됩니다   

 전환할 파일 : 바뀔 화면 파일의 이름을 지정합니다.    

 페이딩  : 페이딩(바뀌는 부분) 픽셀의 폭입니다. 50이면 50픽셀씩 페이딩됩니다. 
 
*
사용상 주의사항
해상도 제한 - 세로 768픽셀까지 가능합니다.
현재 왼쪽에서 오른쪽으로 페이딩하는 것만 지원합니다
   

 
      <변환 장면은 캡쳐가 안되는 고로[...]>    

Snow 

 눈이 내리는 듯한 효과를 가진 명령어입니다
구조는 아래와 같습니다   

cgeffect2 Snow 개수  수평 최대 속력 수직 최대 속력 수직 최소 속력 수평 최대 가속도 크기     

 Snow : Snow 효과 타입을 사용합니다   

 눈송이 개수 : 세부옵션. 화면에 나타나는 눈송이의 개수. 최대 제한 100   

눈송이의 수평 최대 속력 : 세부옵션   

눈송이의 수직 최대 속력 : 세부옵션   

눈송이의 수직 최소 속력 : 세부옵션   

 눈송이의 수평 최대 가속도  : 세부옵션. 빗줄기의 크기. 100~500 값을 추천합니다.    

눈송이의 크기 : 세부옵션. 눈송이의 크기. 1000~2000 값을 추천합니다   

역시 세부 옵션 모두를 생략 가능하기 때문에 아래와 같이 사용해도 됩니다   

   




<
제가 예전에 연출한WA-DE 장면입니다. 부족하지만, 응용하면 이렇게도 만들 있습니다;;> 
   

다른 명령어도 많지만, 가장 많이 사용되는 명령어에 대해 이야기했습니다.
나머지는 스크립트 가이드를 보시더라도 충분히 있는 내용이기에 생략하겠습니다.
첨부한 파일을 참고하시면서 뜯어고치며 공부하시길 바랍니다 ^^

 강좌 파일    



CG EFFECT모음(RVPF)    


Copyright
2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/)

AND

지금껏 그림과 글을 띄우는 명령어를 배웠습니다만, 여타의 상용작품들과 비교했을때 만족스럽지 못한 부분이 많았을 것입니다.
특히
작품상에서 출력되는 그림이 부드럽게 나타나지 않은 부분이 아쉬었으리라 생각합니다.  
  

그렇지만, 버퍼(buffer) 이용하게 되면, 부드러운 화면 연출 가능하게 됩니다
   

[Lecture 06. 버퍼(Buffer) 사용.]    

먼저 버퍼(buffer) 대해 간단히 알아보면, 임시 저장공간을 의미합니다.

VNAP
에서는 기본적으로 drawbuffer라는 명령어와 같이 사용하게 되는데요,

임시저장공간인 버퍼에 이미지나 글을 담고(buffer), 담은 파일을 화면에 뿌려주는(drawbuffer)구조로 되어있습니다.    

VNAP에서는 주로 케릭터와 그림을 불러내는데 많이 이용하고 있습니다.
이번 강좌에서는 가장 많이 사용되는 명령어를 위주로 다루기로 하겠습니다    

bufferchar

케릭터를 불러내는 char에서 앞에 buffer 붙은 명령어입니다.
기본적으로 케릭터를 불러내는 명령어이지만, bufferchar 명령어는 이상의 케릭터 CG 출력했을때 주로 이용됩니다   

예를 들어, 케릭터중 케릭터만 사라지게 한다든가, 표정을 바꾸는데 이용되지요
먼저, 케릭터를 부드럽게 나타내는 것부터 설명드리도록 하겠습니다.

지금껏 써왔던 char 명령어에서 출력되는 시간을 조절하는 것입니다.
아래는 비교를 두었습니다.

char 명령어는 케릭터가 처음 등장시에는 출력되는 시간을 조절하여 자연스레 나타나지만, 표정이 바뀔때에는 어색합니다.

하지만
, bufferchar 명령어는 표정이 바뀌는 것도 자연스럽습니다
bufferchar char 명령어가 다른점은 바로 명령어 뒤에 써주는 값들입니다.
그리고 출력되는 시간은 drawbuffer 뒤에 써주는 이지요   

<스크립트 해석>

15번째 줄에 bufferchar 에는 임시 저장 공간에 아무것도 담기지 않습니다. ( 자연스러운 표정변화를 위한 코드.)

17번째 줄에 bufferchar yuki_smile.png 에서 임시저장 공간에 yuki_smile.png 파일을 담습니다.
18
번째 줄에 drawbuffer 1000 에서 1초동안 변화가 되며 yuki_smile.png 파일이 나타나게 됩니다
    

아래는 하나의 케릭터만이 표정이 바뀝니다   

     

<스크립트 해석>

6번째 줄의 bufferchar yuki_smile.png 0 32 부분에서 임시저장공간에 yuki_smile.png 파일을 담습니다.
8번째 줄의 bufferchar misaki_surprise.png 296 48 부분에서 임시저장공간에 misaki_surprise.png 파일을 담습니다.
9번째 줄인 drawbuffer 100 와서야 yuki_smile.png misaki_surprise.png 동시에 나타나게 되어,
결론적으로는 왼쪽의 케릭터의 표정이 바뀜을 알수 있습니다   

케릭터만을 지우려면 어떻게 할까요?
아래와 같이 표현할수 있습니다   

<스크립트 해석>

6번째 줄에 bufferchar에는 아무것도 담지 않습니다.

8번째 줄에 bufferchar yuki_smile.png 0 32 에서 yuki_smile.png이라는 파일이 임시저장공간에 담깁니다.
9
번째 줄에 drawbuffer 100에서 yuki_smile.png 파일만이 출력되지요
   

그렇게 하면 케릭터만 사라지는것을 있습니다    

buffercg    

기본적으로 cg명령어와 기능이 비슷합니다만부드러운 화면연출을 가능하게 하는 명령어입니다  

   

여기서 출력되는데 걸리는 시간을 조절해야 하는데요, 적당한 시간으로 맞추면 마치 동영상처럼 변하는 모습을 보실 있습니다
강좌에 사용된 파일을 여기저기 고쳐보시면서 익히시길 바랍니다.   

강좌 파일

P.S 중급 강의로 넘어왔으니 이미지는 자제[...]
-> 여러분의 수준이 올라갔다고 쓰고, 귀챠니즘이라고 읽습니다.(맞는다.)

Copyright 2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/)

AND

RECENT COMMENT

RECENT TRACKBACK

VNAP 게임