VNAP (비공식) 관리위원회

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

ARTICLE CATEGORY

전체 (47)
보관 (18)
정보 (5)
강좌 (16)
작품 (6)
  • 52,765Total hit
  • 0Today hit
  • 0Yesterday 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/) 

TRACKBACK 0 AND COMMENT 4
  1. 입문 2010.11.23 19:24 address edit/delete reply

    이쪽부터가 어렵네요. 다행히 RPG만들기나 워크, 스타 맵 에디터를 많이 다뤄바서 변수쪽에서는 친숙한 감이... ㄷ

  2. 처음 2013.06.16 03:55 address edit/delete reply

    init에 변수를 대입할때 기호는 = 만 사용가능하고 > 나 < 는 사용 불가능 한가요? 그리고 set 에서 + - 를 설정했을때 적용되나요?

  3. 처음들어가보는 2014.09.01 23:05 address edit/delete reply

    타이틀 부터라는 느낌으로 해보지만.... 멀었네요 ^^ 열심히 노력해보고자 합니다. 이글을 올리시고, 지우지 않아주셔서 감사합니다.

  4. Favicon of http://blog.naver.com/kdzdsyygijfs?22136 하이 2016.06.08 13:50 address edit/delete reply

    좋은 정보 잘보고 갑니다