'전체'에 해당되는 글 48건
- 2021.01.22
- 2016.12.12
- 2010.04.12
- 2010.01.05
- 2010.01.05
- 2010.01.05
- 2010.01.05
- 2010.01.05
- 2010.01.05
- 2010.01.05
- 2009.12.31
- 2009.12.31
- 2009.12.31
- 2009.12.31
- 2009.12.30
2020년 10월, 티스토리를 운영하는 카카오에서 티스토리 계정을 카카오 계정으로 전환시킨다고 밝혔습니다.
티스토리를 다음(현 카카오)에서 인수했을 때도 우려를 했으나 다음 블로그 등 기존 서비스와 별도로 티스토리를 독립적이고 자유롭게 이용할 수 있도록 운영했기에 이를 믿고 지금까지 이용해왔습니다.
그렇지만 현재 카카오에서 기존의 방침을 바꾸어 강제로 카카오 계정에 통합시키려는 정책을 밀어붙였고 저는 이를 반대하기에 티스토리를 탈퇴할 생각입니다.
2021년 5월부터 카카오 계정으로 전환하지 않으면 이용할 수 없다고 하네요.
따라서 이 블로그는 5년 이상 사용하지 않으면 블로그가 폐쇄되는 티스토리 정책에 따라 2026년 5월쯤에 사라질 예정입니다.
혹시라도 이 블로그 혹은 운영자에 대한 관심이 있거나 근황이 궁금하신 분은 트위터(트위터라는 서비스가 현재 살아 있다면 말이지만요!) 혹은 웹사이트를 방문해주세요.
안녕하세요.
이 블로그는 2011년 이후 내용 추가 및 대응이 없었습니다.
그럼에도 이렇게 새로 글을 쓰는 이유는 티스토리 운영진에서 백업 기능 삭제를 알렸기 때문입니다.
http://notice.tistory.com/m/2359
백업은 중요한 기능이며 티스토리를 이용하는 이유 중 하나이기도 했습니다.
따라서 백업을 할 수 없는 이 블로그의 공식 종료를 선언합니다.
앞으로도 새로운 내용 추가가 없을 것이며 댓글 및 방명록에 대한 대답도 없을 겁니다.
다만 일부러 블로그를 지우지는 않고 이대로 놔두겠습니다.
혹시나 티스토리가 서비스를 종료하면 자연히 사라질 것이고 다시 부활시킬 계획도 없습니다.
그동안 방문하고 이용해주셔서 고맙습니다.
14강은 자주 있는 질문에 대한 답을 FAQ으로 정리한 것과, 스크립트 가이드 이용법에 대해 다룹니다.
13강까지의 기능은 많이 사용되는 주 기능을 많이 다루었지만, 모든 기능을 사용한 것은 아니지요.
모두 다룰 수도 없고, 지금쯤이면 응용력도 많이 늘어나셨을 테니, 필수 개념을 잡을 수 있는 내용으로 다루었습니다.
[Lecture 14. VNAP Helper Book.]
1. 시나리오 파일의 종류와 그 관리법.
VNAP은 프로그래밍 없이도 비주얼 노벨류의 작품을 만들 수 있게하는 게임 엔진입니다.
프로그래밍을 하지 않는 대신에 우리는 명령어라고 하는 스크립트(Script)를 작성해야만 했습니다.
이 강좌에서는 VNAP의 구동방식에 대해 언급하려고 합니다.
강좌에 사용되는 명령어의 사용법을 이해하기 위해 꼭 알고 있어야 하는 부분이기에 잘 알아두시길 바랍니다.
일단 VNAP 제작위원회가 제공하는 스크립트 가이드를 엽시다.
<왼쪽은 명령어를 바로 찾을수 있고, 오른쪽에 설명이 나오는 형식으로 구성되어 있다.>
현재 VNAP의 기능을 설명해 놓은 스크립트 가이드입니다.
처음에는 좀 어렵고 보기가 힘들지만, 아주 조금만 실력이 붙어도 충분히 혼자서도 VNAP의 기능을 이용하실 수 있습니다.
본 강좌에서는 모든 기능을 설명해 드리고자 하는 것이 아닌, 최소한의 뼈대를 제공해 드릴뿐입니다.
스크립트 가이드를 여셨으면, 마우스로 스크롤해서 아래쪽의 내용을 읽읍시다.
파란색과 주황색 줄로 감싸진 부분은 강좌에서도 들었던 형식입니다만, 실제로는 VNAP 제작위원회의 스크립트 가이드의 내용을
설명해 둔 것입니다. 따라서, 위의 스크립트 가이드에 설명된 내용을 읽고 예제를 그대로 따라해 보시면 되는 것입니다.
여기서는 빨간색 줄로 감싸진 부분인, 스크립트의 종류와 그 설명을 하도록 하겠습니다.
① 쇼(SHOW) 스크립트
보여주다라는 뜻의 이 스크립트는 주로 동영상을 재생하는데 필요한 스크립트입니다.
그리고 cgeffect의 대부분의 기능을 주로 이 쇼스크립트로 수행하게 되는데요,
여기서 동영상을 재생하는 법을 설명하면서 쇼 스크립트에 대해 알아보겠습니다.
VNAP에서는 동영상 파일(*.avi , *.mpg) 등을 재생가능하고, 플레시 파일(*.swf) 역시 재생이 가능합니다.
이런 동영상 파일들은 쇼 스크립트 안에서만 재생이 가능합니다.
먼저 VNAP 폴더에 동영상 파일을 넣읍시다.
(예제에 든 동영상 파일은 용량 및 저작권으로 파일첨부는 하지 않습니다.)
그리고 openning.txt 라는 텍스트 파일을 만듭시다.
그리고 scenario.txt 파일에 아래와 같이 적읍시다.
이미 만들어둔 openning.txt 파일에는 아래와 같이 적습니다.
이렇게 했을때 비로서 동영상이 재생됩니다.
(중요) 여기서 show 명령어로 openning.txt 파일을 불러내었으므로, openning.txt 파일은 쇼 스크립트가 됩니다.
<명령어 체크>
movie : 동영상 재생 명령어, 크기 조절은 FULL 옵션을 이용하여 전체 화면에서 재생이 가능.
자, 지금까지 배워왔던 스크립트의 종류가 무엇이었는지 스크립트 가이드를 통해 알아볼까요?
자, 스크립트 가이드를 보니 명령어 옆에 가로안에 영어가 쓰여져 있습니다.
그 명령어는 가로안의 스크립트 안에서만 사용이 가능하다는 뜻입니다.
그래서 text,cg,char 명령어는 시나리오 스크립트(아주 일반적으로 사용됨)에 사용됨을 알 수 있으나,
text나 char 명령어는 시나리오 스크립트 이외에는 사용할 수 없다는 것을 알수 있습니다.
간혹 동영상 재생을 위와 같이 하지 않고 아래와 같이 타이핑하시는 분들이 많습니다.
<잘못된 사용법>
※ 시나리오 스크립트인 scenario.txt 파일 안에서는 movie 명령어가 작동하지 않으므로 재생이 안되는 것입니다.
이제, 스크립트들의 차이를 아시겠습니까?
② 메뉴(Menu) 스크립트.
타이틀을 만들때 사용하는 스크립트입니다.
이 스크립트 역시 아래와 같은 사용법으로 이용합니다.
(중요) 위의 쇼스크립트와 동일하게, title.txt파일(타이틀에 관한 명령어가 적혀있는 텍스트)을
menu 명령어로 불러내기 때문에 메뉴 스크립트가 됩니다.
[Lecture 09. 메뉴의 구성.] 강좌를 참조해주세요.
③ 시나리오(Scenario) 스크립트.
지금껏 배워왔던 종류의 스크립트입니다.
시나리오 스크립트는 위의 쇼,메뉴스크립트같이 명령어로 다른 파일을 불러내지 않고 그대로 이용하면 시나리오 스크립트입니다.
가장 많이 이용되니 특수한 경우를 제외하고는 모두 시나리오 스크립트라고 생각하십시오 ^^
※ 시나리오 파일의 관리법.
여러분이 작품을 만드시다 보면, 명령어와 글들이 많아지게 될것입니다.
하지만, 텍스트 파일은 그 용량의 한계도 있고, 긴 글을 한 텍스트 파일 안에 넣으시면 관리가 매우 불편합니다.
수정을 하려면 그 긴 파일을 찾아가며 고쳐야 하니 여간 불편한 것이 아니지요(__)
그렇기 때문에 긴 시나리오 파일을 여러 파일로 나누어서 관리하시는 것이 좋습니다.
예를 들어 1장, 2장 이렇게 나누어진다면 하나의 파일에 그 두개의 내용을 담기보다는 하나의 내용은 하나의 파일에 담는것이
보기도 좋고 관리하기도 편합니다.
아래는 저의 작업폴더 파일을 예시로 들었습니다.
mow_p_log.txt 에서 부터 mow_snr5.txt 파일로 나뉘어져 있는 것을 볼수 있습니다.
이렇게 작업을 하시기 위해서는 loadsnr 명령어를 알고 있어야 합니다.
사용법은 아주 간단합니다.
시나리오 스크립트 안에서만 사용가능하며, 보통 한 파일의 가장 마지막에 위치해서 다른 파일을 불러오는 기능입니다.
이렇게 하면 mow_snr1.txt 파일을 불러오게 되어, 계속해서 글을 이을 수 있습니다.
<명령어 체크>
loadsnr : 다른 시나리오 파일을 불러오는 기능.
분기에 필요한 개념이니 잘 알아두시길 바랍니다.
그리고, 여러분들이 작업중인 폴더에 파일이 늘어나면 대단히 많은 파일 숫자로 헤깔리실 것입니다.
그것을 깔끔하게 만들어 봅시다.
마우스 오른클릭을 하여 아이콘 정렬 순서(I) -> 형식(T) 그룹별로 표시(G)에 체크를 합시다.
파일이 종류별로 정렬되어 매우 깔끔한 폴더가 됩니다^^
2. 자주 묻는 질문과 오류.
VNAP을 사용하면서 지금껏 보아왔던 질문을 모아봤습니다.
1) 파일이름을 찾을수가 없어요.
[scenario.txt]가 아니라 [scenario]로 보이는데 왜 scenario.txt라고 부르지요?
- 윈도우즈는 자주 사용되거나 잘 알려진 확장자에 대해 기본값으로 확장자를 숨겨서 보이지 않게 합니다.
따라서 이것은 옵션에 따라서 scenario.txt로 보일 수도 있고, scenario로도 보일수 있습니다.
폴더의 메뉴에서 도구(T) - 폴더 옵션(O)로 이동하여 폴더 옵션을 엽니다.
폴더 옵션 탭의 <보기>를 선택하고, 고급 선택란에 보시면 [숨김 파일 및 폴더]라는 항목이 있습니다.
기본값은 <알려진 파일 형식의 파일 확장명 숨기기>에 체크가 되어있으므로 자주 알려진 파일 확장자 .txt 는 표시되지 않습니다.
여기서 체크를 해제하면 아래와 같이 표시됩니다.
간혹 위의 사항을 모르시고, 체크가 된 상태에서 scenario.txt라고 모두 써 버리셔서 오류가 나는 경우가 있는데 조심하시길 바랍니다.
그렇게 쓰시면 실제 파일의 이름은 scenario.txt.txt가 됩니다.
<잘못 사용된 예>
2) 그림 파일을 읽을 수 없어요.
윈도우에서는 읽는 파일을 VNAP에서는 읽지 못해요.
정상 파일인데 VNAP에서 오류가 나요.
- 그 경우는 대부분의 경우 2가지로 좁혀집니다.
① 그림파일의 확장자를 임의로 바꾸었을 경우.
VNAP은 정상적인 이미지 파일을 올바르게 인식합니다.
예를 들어 BMP파일의 확장자를 JPG로 바꾸었다고 해봤을 때, 윈도우즈 안에서는 비록 그렇게 확장자가 바뀌어도
그림파일을 읽을 수 있지만, VNAP은 그것이 불가능합니다.
그것은 이름만 JPG파일일 뿐, 실은 BMP파일의 속성을 지니고 있기 때문이죠.
<이와 같은 경우는 잘못 사용된 경우입니다.>
제대로 된 방법을 알아봅시다. 저는 포토샵을 예로 들었지만, 그림판 역시 동일합니다.
이미지 뷰어도 파일 변환 기능을 가지고 있으니 어떤 방법을 사용하셔도 됩니다^^
① 포토샵의 메뉴 중 File-Open을 눌러서 원하는 그림을 불러옵니다.
② File-Save As를 누릅니다.
③ Format 항목에서 원하는 확장자를 선택하여 저장하시면 됩니다.
(다른 파일 역시 동일한 방법으로 바꿀수 있습니다.)
② 배경이 되는 그림파일의 크기가 지원하는 해상도와 다를 경우.
이 경우, 높은 확률로 런타임 오류를 내곤 합니다.
VNAP은 vnap.ini에 저장된 해상도를 기본으로 해서 실행되는데, 배경화면이 될 그림 파일이 그와 다른 크기일 경우 오류를 냅니다.
이에 맞는 크기의 이미지를 사용하시길 바랍니다^^
이미지의 크기 조절은 포토샵의 Crop기능이나 image size를 조정하여 변경이 가능합니다.
<위의 숫자는 가로의 길이, 즉 넓이이고, 아래는 세로의 길이, 즉 높이입니다.>
항목 추가시 업데이트됩니다...
Copyright ⓒ 2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/)
전 강좌에 이어 VNAP을 잘 꾸며서 가급적 상용작품처럼 만들어 봅시다.
보기 좋은 떡이 먹기도 좋지요♡
[Lecture 13. 앨범 모드의 구성.]
지금까지의 강좌를 바탕으로 어느정도 수준의 작품을 만들어 내셨을 것입니다.
내용은 잘 준비되었지만, 포장도 정말로 중요하지요 ^^
그 포장 중에서도 타이틀 메뉴의 구성과, 열심히 만들어내신 CG나 BGM을 소개하거나,
자신의 게임 제작 후기 등을 적어둔 앨범 모드는 정말 그 작품을 돋보이게 합니다.
<과거 제작하였던 WA-DE의 소스를 예로 들겠습니다. 조악한 디자인 센스는 봐주세용 ;ㅁ;>
먼저 앨범 모드로의 진입을 위하여 선행될 부분이 있습니다.
[Lecture 10. 다중 시나리오 만들기.] 에서 나온 "엔딩 후 타이틀 바꾸기"와 같은 원리로 사용자가 앨범모드를 볼 수 있도록 시점을 만드는 것입니다. 그것을 하지 않으시려면 타이틀의 처음부터 앨범모드를 활성화시키시면 되고, 엔딩 이후에 앨범을 보게 하시려면 10강의 강좌를 참조하여 만드시면 되겠습니다.
본 강좌는 소스 파일만 제공하고, 그 부분은 설명을 생략하고 앨범 모드의 설명을 하겠습니다.
앨범 모드에서 제공하는 항목은 대부분의 경우 그림(CG), 음악(BGM), 추가 시나리오(오마케) 옵션(OPTION)등입니다만, 오늘 이 자리에서는 모든 쪽의 응용이 가능하도록 아래와 같이 다루어보겠습니다.
1. CG
사용자가 게임을 하면서 보았던 CG를 보여주는 항목입니다.
[Lecture 09. 메뉴의 구성.] 에서 다루었던 타이틀 만들기에서 MENU스크립트의 사용과 button명령어에 대해 다루었던것과 동일하게, CG의 경우는 VNAP에서 cgbutton 명령어를 이용하여, 그 파일 이름으로, CG를 본 것의 여부를 알 수가 있습니다.
따라서 CG를 보여주는 것의 기능의 핵심은 바로 cgbutton 명령어입니다.
① CGBUTTON
이 명령어의 사용법은 매우 간단합니다.
준비물은 해당 CG가 출력되지 않았을 때(즉, 아직 사용자가 게임상에서 CG를 보지 못했을 때) 보여줄 이미지가 필요합니다.
그리고 이 이미지는, 사용자가 게임 상에서 해당하는 CG를 보았을 때 해당하는 CG로 대체되고,
그것을 클릭하면 원래 사이즈로 돌아가서 볼 수 있게 합니다.
CG모드의 스크립트 실행 순서는 아래와 같습니다.
scenario.txt파일이 MENU스크립트로 title.txt를 불러오고, 나머지는 위의 순서대로 CG모드의 스크립트는 실행됩니다.
BUTTON과 CGBUTTON은 MENU스크립트 안에서만 실행되기 때문에 도중 도중에 MENU스크립트로 파일들을 불러옵니다.
나머지는 아시리라 믿고 마지막 부분을 설명드리겠습니다.
cgbutton (340,100,468,196) eve_cg_01.png cg_mode_cover.png
cgbutton (478,100,606,196) eve_cg_02.png cg_mode_cover.png
먼저 cgbutton 옆의 좌표는 익숙하신 좌표의 설정입니다.
<여기서의 좌표 사이즈는 정격 해상도의 배율입니다.>
예시의 좌표는 (340,100) 좌표를 기준으로 하여, 128*96 사이즈의 미니 화면을 표시하게 합니다.
즉, 340+128=468
100+96=196 이기 때문에 (340,100,468,196) 로 나왔습니다.
두번째 줄은 그 옆에 배치하기 위하여 그렇게 했습니다.
즉, 간격 10을 포함하여 왼쪽 버튼의 크기를 고려하면 340+128+10 = 478의 x좌표
y좌표는 이동하지 않기 때문에 동일하게 (100,196)이기 때문에 (478,100,606,196)로 나왔습니다.
여기서 미니화면을 가로 정렬하시려면 y좌표를 동일한 원리로 수정해주시면 되겠습니다.
eve_cg_01.png는 게임에 실제 등장하는 CG이고, 만약 출력된 적이 있으면 작게 표시되고, 클릭하면 커집니다.
cg_mode_cover.png는 해당 CG가 출력되지 않았을 때 임시로 보여주는 CG로, 클릭해도 커지지 않습니다.
첨부파일의 테스트법은 메인 타이틀에서 시작하기를 눌러 시나리오 파일을 진행한 후에 확인해보시면 됩니다.
2. BGM
사용자가 게임을 하면서 들었던 음악들을 다시 들을수 있게 한 항목입니다.
BGM의 경우 유감스럽게도 위의 CGBUTTON이 가지고 있는 실행 여부를 체크할 수 있는 기능이 없습니다.
따라서 우리는 두 가지의 방법으로 이를 구현해야 합니다.
① 조건 여부에 관계없이 모든 BGM을 듣게 한다.
② 상용 작품처럼 BGM을 들을 때 마다 리스트를 추가하고 싶다.
①의 경우 매우 쉽고 간단히 구현이 가능하며, 처음 접하는 분이시라면 가급적 이 방법을 추천합니다.
②의 경우 타이틀 변화를 구현하는 것과 같이, 음악 파일 하나가 추가시 텍스트 파일이 그때마다 늘어납니다.
매우 노가다성이 짙고, 소스가 섞이면 코딩시간보다 수정시간이 더 길어집니다.
나는 무조건 상용작품처럼 재생시마다 추가하고 싶고, 조금 더 고레벨(?)의 VNAP노가다를 원하셔도 이 방법을 비추합니다 ㄱ-;;
모두가지 모두 구현해 두었으니[...] 저의 삽질을 감상해보시길 바랍니다;;
먼저 ①의 경우를 구현해봅시다.
① 조건 여부에 관계없이 모든 BGM을 듣게 한다.
이 경우는 굉장히 간단한 구조로 되어있습니다.
(사실 강좌 소스를 너무 간단히 구성해서 ㄱ-...는 아니라고 주장(?)하고 있습니다.)
<조악한 실행화면은 미공개했습니다 ㄱ->
시작하자마자, MENU명령어로 bgm_mode.txt라는 파일을 불러왔습니다.
타이틀 부분을 생략하고 바로 넘어갔기에 이점 유의하시구요,
이번 부분은 BGM항목 구현의 기초 뼈대만을 구현했으니 타이틀과의 접목은 아래에서 다루겠습니다.
bgm_mode.txt에서 BGM을 고를 수 있는 버튼을 제공하기 때문에 이 역시 MENU스크립트로 불러왔습니다.
그리고 어느 하나의 버튼을 누르면 화살표처럼 연결된 스크립트로 이동하여, 먼저 재생되고 있는 음악을 정지시킨 후
해당하는 음악을 재생하게 합니다. cg명령어나 text명령어 등의, 화면을 넘기는 기능이 없기에
사용자의 컴퓨터는 상용 작품의 그것처럼 음악의 제목을 누르면 바로 재생되는 구조로 만들어졌습니다.
이것을 반복하여 좌표 설정하면 BGM항목은 마무리가 되겠지요.
하지만, 이와 같은 방식이 싫다고 하신다면 아래와 같은 노가다의 세계에 뛰어들어야 합니다.
② 상용 작품처럼 들을 때마다 추가하고 싶다!
Welcome to 『NOGADA』!
환상적인 노가다의 세계로 당신을 초대합니다!
입장료는 성의껏<- 퍽퍽
이번에 구현할 부분의 결과물부터 보시면 아래와 같습니다.
위의 결과와 별 다를것 없는 화면이긴 합니다만, 예제로 겨우 2개를 구현한 이유는 위에서 말한 것처럼,
파일 하나당 스크립트 파일이 추가적으로 계속 필요하기 때문입니다.
그리고 여기에서의 가정은, 트랙 1과 트랙 2는 순서대로 게임상에서 등장한다는 것입니다.
그렇게 해야, 순서대로 나타나지요(엄밀히 말하면 이 방법이 완전하지는 않다는 이야기입니다 OTL)
scenario.txt파일이 MENU스크립트로 title.txt를 불러오고, 나머지는 위의 순서대로 CG모드의 스크립트는 실행됩니다.
실행 순서는 CG모드의 실행 순서와 같습니다.
따라서 special_mode.txt 즉, 모든 앨범 모드의 시작이 되는 스크립트부터 설명드리겠습니다.
위의 스크립트는 최초 실행되어서, 1번 트랙의 BGM이 재생되었을 때의 동작입니다.
CG와는 다르게 bgm_flag_check.txt라는 파일을 불러오는 것을 보실 수가 있는데, 이는 사용자가 게임을 진행하면서 음악을 들으면 그 하나 하나의 음악당 하나의 플레그를 설정하셔서 일일이 생성여부를 판단하기 위함입니다.
bgm_flag_check.txt에서 플레그를 검사하는 것을 볼 수 있는데, 1번 트랙이 재생되면 시나리오 파일에
미리 bgm_01_played이라는 플레그를 세워두워서, 이 BGM이 실행되었는지 체크해둡니다.
그러면, bgm_01_played는 bgm_01_play_mode.txt라는 파일을 불러오게 되지요.
bgm_01_play_mode.txt에서는 2개의 버튼만이 동작합니다.
바로, 1번 트랙을 재생하도록 하는 loadsnr bgm_01.txt명령어와
이 파일에서 나올 수 있게 하는 동작인 loadsnr special.txt이지요.
(중간을 보시면 2번 트랙은 "// (주석처리)"가 되어 실행이 안됩니다.)
이번에는 2번 트랙까지 재생이 된 것으로 가정해 봅시다.
그러면 bgm_02_played라는 플레그가 생성되고, bgm_02_play_mode.txt라는 파일을 불러오게 되지요.
bgm_02_play_mode.txt라는 파일에서는 3개의 버튼이 동작하고, 위의 경우에 2번 트랙까지 재생하게 하는 항목이
추가 실행될 수 있습니다.
그렇기 때문에 실행된 음악만을 골라서 체크한 후에 BGM항목에 추가시키는 것이 가능하지요.
하지만 이 방법은 음악 하나가 추가 될 때마다
bgm_XX_played라는 플레그와
bgm_XX_play_mode.txt라는 파일을 필요로 합니다.
그래서 노가다지요[...] 고로 추천하지는 않습니다<-
첨부한 강좌 파일을 잘 참고 하시길 바랍니다.
그리고 용량과 저작권상 음악은 첨부시키지 않았습니다.
VNAP폴더에 bgm_01.mp3 , bgm_02.mp3 로 이름을 바꾸어 음악 파일을 넣어서 테스트 해보시길 바랍니다.
<첨부 파일에는 없습니다.[...]>
3. 추가 시나리오 및 후기 삽입과 오마케의 이용.
추가 시나리오의 삽입에 대해서는 [Lecture 10. 다중 시나리오 만들기.] 에서 다루었기 때문에 그것을 참조해주세요.
흔히 올클리어를 하여 모든 이야기를 본 후에 추가로 제공되는 스토리 모드나 게임을 올클리어 상태로 만들어 주는 것을 흔히
오마케(おまけ [御負け]:덤)이라고 부릅니다.
VNAP에서의 오마케 기능에 대해 알아봅시다...라고 하고 싶지만, 상용 프로그램과 같이 CG와 읽은 텍스트 정보가 담긴
.CFG파일을 복사하는 것입니다.
클리어를 모두 한 PC의 .cfg파일을 다른 유저의 컴퓨터의 VNAP폴더로 복사하면 됩니다.
같은 원리로 게임을 초기화하려면 .cfg파일을 지우면 됩니다(12강에서 강조했었죠^^)
<노파심으로 다시 한번! vnap.ini파일을 고치실때도 언제나 지워주셔야 합니다! 강조 또 강조!>
수고하셨습니다.
첨부된 강좌 파일을 보시고 응용하시고, 혹시 안되는 부분이 있으면 질문해주세요^^
강좌 파일
Copyright ⓒ 2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/)
지금까지 기능 위주로 다루어 왔지만, VNAP의 기본 형태는 많이 투박한 것이 사실입니다.
후속으로 나온 바실리어트나, 외국계 프로그램들은 좀 더 세련된 디자인을 제공하고 있지요.
VNAP도 예쁘게 치장해 봅시다!
이번 강좌의 핵심은 vnap.ini파일의 설정 세팅입니다.
물론 매뉴얼에 상세한 기능이 소개되어있지만, 일단 많이 궁금해하시고, 자주 쓰는 기능부터 이야기 드리겠습니다.
[Lecture 12. VNAP 튜닝하기]
1. VNAP 해상도와 윈도우 모드 설정하기.
VNAP의 기본 설정은, 창 크기는 640*480에 윈도우 모드입니다.
많은 분들이 이 기본 사이즈를 그냥 이용하시더군요, 아마 VNAP이 출시되었을 시점을 보면 이 사이즈가 적절했던것 같으나,
최근에는 와이드 모니터를 많이 이용하시니, 크기에 불만이 있었던 분들도 계셨을 거라 생각합니다.
먼저 창 크기 변경에 대해 알아보지요.
창 크기는 vnap.ini파일에서 조절이 가능합니다.
먼저 vnap.ini파일을 열면 메모장에 여러 글씨들이 적혀있습니다.
그 중에 아래 스크린 샷에 적힌 부분을 찾아봅시다.
빨간 선 안에 들어있는 부분이 바로 해상도를 조절하는 옵션입니다.
여기서는 기본값인 640*480이 아닌 다른 해상도를 선택하였습니다.
추천하는 해상도는 그래픽 카드가 구현하는 정격 해상도로, 640*480 , 800*600 , 1024*768입니다.
정격 해상도가 아니면 풀 스크린 모드로 변경은 불가능하다고 하네요.
앞에서 이야기했듯, VNAP의 기본값은 윈도우 모드입니다.
SCREEN MODE값이 WINDOW로 되어있을때는 윈도우모드, FULL로 되어있을때에는 풀 스크린 모드가 됩니다.
2. 작품의 이름과 시나리오 파일 이름 변경하기.
여러분이 제작하시고 계시는 작품들의 이름은 다 있을테지만 아무런 설정을 하지 않으면 무정하게도[...]
"제목없음"이라는 타이틀이 적혀있을겁니다. 이를 바꾸어봅시다.
GAME_TITLE항목에 따옴표를 포함해서 원하는 제목을 적습니다.
그리고 반드시 저장을 합니다.
다음, VNAP 폴더에 가서 제목없음.cfg파일을 지웁니다.(중요합니다.)
그리고 VNAP을 실행시켜봅시다.
vnap.ini파일에 적은 그대로의 제목이 타이틀에 나타났고, WHITE ALBUM Dramatic Edition.cfg 라는 파일이 새로이 생겨난 것을 볼 수 있습니다.
앞으로 vnap.ini파일을 변경시에는 정상 작동을 위하여 이전의 .cfg파일을 지워주는 것을 잊지 마셔야 합니다.
이전 .cfg파일이 있으면 변경된 결과가 제대로 적용되지 않습니다.
다음에는 VNAP 시나리오 핵심 파일인 scenario.txt파일의 이름을 바꾸는 법을 알아봅시다.
이름이 마음에 안들어! 하시는 분들은 바로 바꾸시면 되겠습니다;
예제에서는 start.txt로 바꾸었습니다. 오류를 방지하기 위하여 알파벳 이름을 권장합니다;
그리고 .cfg파일을 지우고 실행하면 친숙한[...] 오류가 발생합니다.
그때는 모르는 척 하시지 마시고[...] scenario.txt파일을 지정한 start.txt파일로 바꾸시면 됩니다.
3. 텍스트 창 설정 및 스킨 변경하기.
<화려하거나 혹은 깔끔한 상용작품의 텍스트 창에 비하면 다소 투박한 VNAP의 기본 스킨.>
그동안 VNAP의 기본 텍스트 인터페이스에 많은 아쉬움을 가지고 계셨을 것입니다.
이미 변경은 가능했으나, 변경에 대한 언급이나 강좌는 많이 없었지요.
그 때문에 자세히 알아보도록 하겠습니다.
VNAP의 텍스트 창 구조는 포토샵의 레이어 개념과 동일하게 구성되어있습니다.
표지에 해당하는 공간인 텍스트 창이 가장 아래에 깔려있고, 그 위가 스킨, 가장 위가 텍스트입니다.
텍스트 창은 window ON 혹은 OFF로 보이기 / 숨기기를 하더라도 텍스트는 표시할 수 있는 이유가 위의 구조이기 때문이죠.
먼저 기본값으로 제공되는 텍스트 창은 아래와 같은 세부 속성이 합쳐져서 표현되어있습니다.
사실 현란하게 적혀있다고 보일뿐이지 실은 간단합니다(...정말이에요;;)
① 텍스트 창 색 설정
텍스트 창의 색을 지정해 줄수 있는 항목입니다.
TEXTWINDOWCOLOR1=(0,0,0)
TEXTWINDOWCOLOR2=(255,255,255)
라고 되어있는데요,
TEXTWINDOWCOLOR1 가 가장 위, TEXTWINDOWCOLOR2가 그 아래에 깔리도록 되어있습니다.
가로 안의 숫자는 RGB(Red / Green / Blue)값으로, 255가 최대치입니다.
RGB값이 모두 0이면 검은색을 의미합니다. 그래서 기본 텍스트 창의 색은 검정색이 되지요.
괄호 안의 숫자를 변경시키면 텍스트 창의 색이 변합니다.
TEXTWINDOWCOLOR2의 기본값은 (255,255,255). 즉 흰색이 되고, 검은 색과 흰색이 섞여서 최초의 모습이 되는 것이죠.
마찬가지로 값을 변경시켜보시면서 익히시길 바랍니다^^
② 텍스트 창 효과 설정
텍스트 창의 효과를 설정하는 부분입니다.
순서대로 대사창의 투명도 , 그라데이션 스타일, 테두리 스타일을 설정하는 것입니다.
예제에서는
TEXTWINDOWALPHA=2
TEXTWINDOWGRADATION=1
TEXTWINDOWOUTLINE=0
라고 되어있는데, 이에 대해 자세히 알아보도록 합시다.
1) TEXTWINDOWALPHA
대사창의 투명도를 조절하는 것으로 5단계에 걸쳐서 변경이 가능합니다.
0 = 0%
1 = 12.5%
2 = 25%
3 = 50%
4= 100%
의 단계값을 가지고 있으며, 실제로 변경되는 값에 따라 변화를 보면 아래와 같습니다.
숫자의 값이 올라갈수록 투명해짐을 알 수 있습니다.
(투명해지니 텍스트 창의 검정색이 진해지는 것이지요.)
그리고, 나중에 스킨을 적용하실때, 주셔야 할 값은 4. 즉 투명도 100%입니다.
그렇게 하셔야 스킨 파일의 색이 지정하신대로 나타납니다.
알아두셔야 할 점은 포토샵에서의 투명도는 불투명도(Opacity)로, 값이 높을수록 불투명합니다.
즉, 포토샵에서 투명 처리를 하실 때에는 값을 낮추어야 하는 것을 잊지 마시길 바랍니다 ^^;
2) TEXTWINDOWGRADATION
대사창의 그라데이션 스타일을 설정하며, 5단계로 이루어져 있습니다.
기본값은 1로, 세로 방향으로 TEXTWINDOWCOLOR1 과 TEXTWINDOWCOLOR2의 값이 그라데이션 처리되어
나타나며, 0으로 지정하면 투명도 100으로 고정되며, 텍스트 창은 색을 가지지 못합니다.
0 = 없음.
1 = 세로 방향
2 = 가로 방향
3 = 왼쪽 위 -> 오른쪽 아래 방향
4 = 왼쪽 아래 -> 오른쪽 위 방향
3) TEXTWINDOWOUTLINE
대사창의 테두리의 모양을 설정하며, 4단계로 이루어져 있습니다.
0 = 보통테두리
1 = 간이테두리
2 = 없음
3 = 자체스킨 사용
보통테두리는 기본값이며 볼록한 모양을 가지고 있고,
간이 테두리는 보통 테두리에 있던 입체 효과(볼록한 모양)이 사라지며,
없음은 테두리의 모양이 사라지고, 다른 설정에 의해 텍스트 창의 모양이 결정되며,
자체 스킨 사용시 그에 맞는 파일을 준비해야 합니다. 없을 시에는 아래 스샷과 같이 에러가 나지요;
4) TEXT_WINDOW_RECT
텍스트 창의 위치를 설정하는 부분입니다.
TEXT_WINDOW_RECT=(10,350,625,450)
괄호 안의 숫자는 기존의 버튼 좌표를 설정하는 것과 동일하게 (왼쪽,위쪽,오른쪽,아래쪽)순서입니다.
기본값인 640*480에서는 건드릴 필요가 없으나 해상도를 바꾸거나 특별한 모양의 스킨을 사용하고 싶을때 변경합니다.
주의할 점은 텍스트 창은 설정해둔 해상도 이상의 크기로 만들면 에러가 난다는 점입니다.
예를 들어 640*480의 해상도에서 텍스트 창은 615*440 아래의 크기로 만들어야 합니다.
(텍스트 창은 자동으로 간격을 설정하기 때문에 위와 같은 제한 범위가 있습니다.)
같은 원리로 800*600의 추천 크기는 778*560 아래입니다.
이 설정의 자세한 이용법은 아래에 더 자세히 서술하도록 하겠습니다.
⑤ TEXT_WINDOW_SKIN
TEXT_WINDOW_SKIN_POS
텍스트 스킨 파일의 파일 이름과 게임상에서 표현될 좌표를 설정하는 부분입니다.
TEXT_WINDOW_SKIN="skin.bmp"
TEXT_WINDOW_SKIN_POS=(0,348)
먼저, 스킨을 이용하기 위해서는 TEXTWINDOWOUTLINE를 3으로 지정하여 자체 스킨모드로 만들어야 합니다.
그 다음에는 스킨 파일을 제작하여 TEXT_WINDOW_SKIN에 파일 이름을 지정합니다.
스킨은 보통 하단 아래부분의 일부분에 적용되며, 대부분 투명한 색을 기본으로 하기 때문에 투명값을 지니는 PNG파일을 추천합니다.
스킨 제작디자인은 독자님들의 미적 센스에 맞기고(^^;;) 전 아래와 같은 형태의 스킨을 구현해보도록 하겠습니다.
많이 질문하시는 유형의 모양이고, 아래의 형태를 구현하는 것을 배우시면 응용으로 다른 것도 구현이 가능하시겠지요.
텍스트 창 왼쪽에 케릭터의 소형 화상이 나오고 그 오른쪽에 글이 나오는 형태를 가장 궁금해하시는 분들이 많더군요.
위와 같은 형태를 구현하기 위하여 저는 아래와 같은 구조로 만들기로 하였습니다.
먼저, VNAP의 해상도를 조절하여 크게 만듭니다.
(예제는 800*600입니다. 해상도 조절을 안해도 상관없습니다.)
다음, 텍스트 창의 가로 사이즈를 전체 해상도보다 줄입니다.
(남는 왼쪽 공간에 소형 화상 이미지를 배치하기 위해서입니다.)
다음, 텍스트 창의 시작 좌표를 오른쪽으로 이동합니다.
결과적으로 왼쪽은 캐릭터 CG와 같은 형태의 소형 이미지가 텍스트 창의 왼쪽에 위치하여,
위의 스크린샷과 동일한 패턴의 스킨을 완성하는 것이지요.
그럼 이와 같은 텍스트 창의 구성을 위해 단계별로 알아보도록 하겠습니다.
먼저 전체 윈도우 창의 해상도를 800*600으로 조절하였습니다.
그리고 vnap.ini파일의 설정 중에 반드시 아래와 같이 값을 조절합니다.
TEXTWINDOWALPHA=4 : 대사창의 투명도를 100%로 합니다.
TEXTWINDOWOUTLINE=3 : 테두리 사용 모드는 스킨 모드로 합니다.
그리고 스킨의 사이즈를 정해보았는데, 이 부분은 여러분의 재량에 맡기도록 하겠습니다.
예제에서는 왼쪽 하단에 나올 소형 이미지의 사이즈는 200*180 , 스킨 창의 사이즈는 600*180으로 하였습니다.
이때 스킨은, 텍스트가 잘 보일 정도로 불투명도를 조절하는 것이 중요합니다.
저는 60%를 주었습니다.
다음, 아래의 값을 이렇게 지정하였습니다.
TEXT_WINDOW_RECT=(210,422,789,579)
TEXT_WINDOW_SKIN="skin.png"
TEXT_WINDOW_SKIN_POS=(200,420)
그 이유는 스크린 샷을 보면서 설명드리지요.
일단 소형 이미지는 char 명령어에 좌표를 설정하여 나오게 할 것이기 때문에 scenario.txt에 0 420의 값을 줍니다.
텍스트는 소형 이미지가 나오는 부분을 피해서 나와야 하므로, 소형 이미지가 차지하는 x좌표와, 간격 10을 생각해서
x좌표는 210(200+10), y좌표는 422를 주었습니다.
(이는 스킨 파일의 형태에 따라 사이즈 조절에 따라 조금씩의 차이가 날 수 있습니다. 저의 경우는 예입니다.)
마지막의 값 789, 579는 에러 발생을 막기 위한 텍스트 창 좌표의 최대값입니다. (800*600기준)
따라서 텍스트 창의 스킨 좌표가 (210,422,789,579)로 나왔습니다.
텍스트 스킨은 그 크기가 게임의 해상도에 정확하게 맞추시면 됩니다.
따라서 가로 크기 총 800에서 소형 이미지의 가로 크기 200을 감안하여 x좌표는 200.
세로 크기 총 600에서 소형 이미지의 세로 크기 180을 감안하여 y좌표는 420이 됩니다.
자, 여기까지 따라오셨으면 예쁜 여러분만의 스킨을 적용하셨습니다!
4. 실행 아이콘과 커서, 대기 이미지(Caret) 변경하기.
VNAP 튜닝도 마지막의 단계에 왔습니다.
바로 실행 아이콘과 커서, 대기 이미지의 변경인데요,
아이콘 파일의 확장자는 .ico 커서 파일의 확장자는 .cur이며, 대기 이미지는 통상의 이미지 파일을 씁니다.
아이콘과 커서는 구하셔도 되고, 프로그램으로도 제작이 가능합니다.
저는 IconXP라는 프로그램을 사용해서 만들어보았습니다.
사용법이 매우 간단하니 아래의 그림을 참조해서 만드시거나, 원하는 이미지를 불러와서 커서 혹은 아이콘 파일로
저장만 하시면 되겠습니다. 커서는 다른이름으로 저장하실때 창이 하나 더 뜨는데 기본값으로 나두고 ok를 누릅니다.
대기 이미지는 글을 읽을때 넘기라는 표시를 말하고, vnap.ini에 아래와 같이 한줄을 더 추가 시켜줍니다.
CARET_FILE = "caret.png"
그리고 만든 이미지의 이름을 쌍 따옴표 안에 적어주시면 됩니다.
실행하여 결과를 확인해보세요.
이 강좌로 더 예쁜 여러분들만의 작품을 만들수 있으면 좋겠네요^^
강좌 파일 / 커서 및 아이콘 제작 프로그램(쉐어웨어)
Copyright ⓒ 2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/)
지금까지 여러분이 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/)
혹시 게임북이라는 도서 장르를 아시나요?
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 파일을 읽게 되어 고백 이벤트가 실패합니다.
※ 첨부한 파일에 강좌를 참고하여 명령어를 바꾸어 시험해보세요^^
위의 분기 방법은 플레그를 이용한 방법이기 때문에 테스트 해보실때 공원에 간다를 먼저 누르시게 되면
플레그의 특성상 지워지지 않으므로, 나중에 다시 저 선택문에 돌아와서 집으로 간다고 선택문을 누른다 해도
고백 이벤트가 성공하는 알고리즘적 버그[...]가 있습니다.
이와 같은 버그를 방지하기 위하여 아래와 같이 수정하시면 해결됩니다만, 이해가 어려우신 분들은 일단 개념만을 익히시고,
나중에 익숙해지시면 도전해보시면 되겠습니다.
※ 논리적 플레그 사용법
: 아래의 "더 보기"를 눌러주세요.
강좌 파일.
앞 강좌의 버퍼(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/)
지금껏 그림과 글을 띄우는 명령어를 배웠습니다만, 여타의 상용작품들과 비교했을때 만족스럽지 못한 부분이 많았을 것입니다.
특히 작품상에서 출력되는 그림이 썩 부드럽게 나타나지 않은 부분이 아쉬었으리라 생각합니다.
그렇지만, 버퍼(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/)
전 강좌에서 글을 출력하는 명령어인 text 와 atext를 배웠습니다.
이번 강좌에서는 글을 출력하는데 있어서 창의 조절과 대사를 연출하는 법을 다룹니다.
[Lecture 05. 깔끔하게 글 출력하기.]
① windowsize
미소녀 게임에서의 글은 크게 묘사, 대사로 이루어져 있습니다.
작품마다 다르지만, 작은 창(보통 윈도우의 아래부분)에 글과 대사가 출력이 되는 작품도 있고, 전체 화면에 출력되는 작품도 있습니다.
<창 전체에서 글이 출력되는 시즈쿠(왼쪽) 창이 아래쪽에 작게 위치하여 글이 출력되고 있는 카논(오른쪽)>
VNAP에서 이런 연출을 위한 기능은 windowsize 명령어로 제공합니다.
windowsize FULL 명령어는 예제의 왼쪽처럼 전체 화면에 글을 출력합니다.
windowsize window 명령어는 예제의 오른쪽처럼 기본적으로 화면에 작은 창으로 표시되어 글을 출력합니다.
그리고 때에 따라서는 창을 숨겨야 하는 경우도 있을 것입니다.
그때는 window 명령어를 사용합니다.
window ON : window OFF 명령어로 숨긴 창을 다시 보여줍니다.
window OFF : 창을 숨깁니다.
② 대사를 깔끔히 표시하기.
일반적으로 프로게임이든 아마추어 게임작품이든 간에 대사는 아래와 같이 표시하는 경우가 많습니다.
(케릭터 이름) (대사) | (케릭터 이름)
(대사) |
text 유키 안녕? | text 유키
+ 안녕? |
여기서 + 는 아래에 글을 덧붙이는 명령어입니다.
실행시킨 결과는 그다지 좋지는 않네요.
그렇기 때문에 케릭터 이름을 []로 감싸고, 대사를 「」로 감싸면 한결 보기가 나아집니다.
다시 고쳐 쓰면 + 「안녕?」
text [유키] 「안녕?」
text [유키]
그리고 앞서 배운 text 나 atext 에서 글을 출력할때 너무 길면 적당히 나누어서 씁시다.
1 강좌에서 예를 들었던 구문인
text 그러나 그 또래의 아이들이 대개 그렇듯이, 둘은 금방 친숙해졌다. 어느 정도냐면, 심심하다는 핑계로 우일이 방에 와서 자는 일도 종종 있을 정도가 되었다. 그러나, 아직까지도 우일이를 오빠라고 부르지 않고 이름으로 부르고 있긴 하지만.
이 구문을 적당히 나누어서 출력하게 해두는 것이 좋습니다.
text 그러나 그 또래의 아이들이 대개 그렇듯이, 둘은 금방
+ 친숙해졌다. 어느 정도냐면, 심심하다는 핑계로 우일이
+ 방에 와서 자는 일도 종종 있을 정도가 되었다.
text 그러나, 아직까지도 우일이를 오빠라고 부르지 않고
+ 이름으로 부르고 있긴 하지만.
이런 식으로 하면 글이 더 깔끔히 표시되는 것을 알 수 있습니다.
첨부 파일을 참조해 주세요.
첨부 파일
Copyright ⓒ 2005-2009. 아우름이. All rights Reserved.
앞으로의 강좌에서는 그림과 글에 좌표를 적용하여 출력하도록 하는 것을 다룰 것입니다.
하지만 포토샵을 다루는데 있어서 초심자라면 좌표의 개념은 잘 모르실 수도 있기에 준비했습니다.
[Lecture 04. 좌표의 사용.]
자, 일단 포토샵을 실행시켜서 그림 파일을 열어봅시다.
(예제에 사용된 포토샵 버전은 7.0버전입니다. 상위버전도 동일하게 적용됩니다.)
포토샵 메뉴의 View-Rulers 항목을 클릭합니다.
그러면 아래와 같이 눈금이 생성되는데요, 이것이 좌표를 알려줍니다.
빨간 선으로 둘러싸인 부분이 X좌표입니다. 오른쪽으로 갈수록 값이 커집니다.
파란 선으로 둘러싸인 부분이 Y좌표입니다. 아래쪽으로 갈수록 값이 커집니다.
눈금모양을 마우스 오른쪽 클릭을 한 후, Pixels 에 클릭을 합시다.
그리고 포토샵 메뉴의 오른쪽 상단에서 Info 를 누릅니다.
불러온 그림의 건물그림에서 모서리의 좌표를 알아보기 위해 마우스를 대면 오른쪽 빨간 선에서처럼 좌표가 나타납니다.
그리고, 알씨같은 뷰어 프로그램이나 윈도우의 기본 그림판으로도 좌표는 나오기 때문에 참조하세요^^
좌표는 그림이나 글의 위치를 이동하는데 사용되므로 꼭 알아두셔야 합니다 ^^
포토샵 기능을 설명하려고 했던것이 아니기에[...] VNAP에서 좌표가 어떻게 이용되는지 소개하겠습니다.
VNAP에서 좌표를 이용하는 대표적인 명령어는 char 와 drawtext가 되겠습니다.
① char
케릭터 CG를 출력하는 명령어인 char 명령어는 앞 강좌에서 소개했지만, 좌표의 개념을 추후에 언급한다고 했었습니다.
이제는 좌표를 이용해서 둘 이상의 케릭터를 출력할 수 있습니다.
케릭터 CG를 둘 이상 나타내고 싶을때는 단순히 char 명령어를 연속으로 사용하는 것만으로는 안됩니다.
아래와 같이 scenario.txt 파일에 적고, 저장한 뒤에 VNAP을 실행하면 아래와 같이 케릭터가 겹침을 볼 수 있습니다.
<케릭터가 겹친 모습>
하지만 좌표를 이용하면 겹치지 않게 만들수 있습니다.
일단 아래와 같이 scenario.txt 파일에 적고, 저장해봅시다.
char 명령어 뒤에 숫자 3개를 적었습니다.(한칸씩 띄우는 것 알고 계시죠?)
빨간 테두리에 감싼 숫자는 이미지가 뜨는데 걸리는 시간입니다.
파란 테두리에 감싼 숫자는 각각 x좌표, y좌표입니다.
※ VNAP에서의 이미지 출력속도는 1초=1000 으로 표기합니다.
위의 명령어는 yuki_nomal.png 라는 이미지 파일을 0.1초 만에 x좌표 0 y좌표 32에 띄우라는 뜻입니다.
여기서 좌표의 기준은 이미지 파일의 가장 왼쪽 위를 의미합니다.
조금 어려운 설명이므로 예제를 들겠습니다.
일단 포토샵을 실행시켜서 배경에 쓰일 이미지 파일과 케릭터 CG로 사용될 그림 2장을 불러옵시다.
그리고 케릭터 CG의 크기를 알아냅시다.
포토샵 메뉴의 Image-Image Size를 클릭합니다.
Width가 가로의 길이, 즉 폭입니다.
Height가 세로의 길이, 즉 높이입니다.
예제의 그림의 사이즈는 328*448 픽셀인 것을 알 수 있습니다.
※ VNAP에서의 전체화면기본값은 보통 640*480 픽셀을 사용하므로 이번 예제에서도 640*480 픽셀을 기준으로 설명하겠습니다.
x축을 조정하면 케릭터 CG의 가로쪽 방향이 조정됩니다.
y축을 조정하면 케릭터 CG의 세로쪽 방향이 조정됩니다.
다시말해서, x축의 좌표는 케릭터 CG를 오른쪽, 왼쪽으로 움직이게 만들 수 있고,
y축은 위, 아래로 움직이게 만들 수 있다는 것입니다.
미소녀 게임에서의 케릭터는 보통 상반신만 나오므로, 화면의 가장 아래에까지만 이미지가 표시됩니다.
그렇기 때문에 좌표를 지정할 때 아래부분에 빈 부분이 생기지 않게 만드는 것이 보기 좋다는 것을 알 수 있습니다.
그러면 먼저 높이(y좌표)부터 정할 수 있습니다.
산수문제입니다(^^)
좀전에 예를 든 이미지의 크기는 328*448 픽셀이었습니다.
VNAP의 전체 창 사이즈는 640*480 픽셀이므로, 높이를 계산 할 수 있습니다.
즉 480-448=32
y축은 아래로 갈수록 값이 커지고, 이미지의 가장 왼쪽 위가 좌표값이 되므로,
y좌표는 32으로 해야 하는 것을 알 수 있습니다.
그리고 x 좌표는 0으로 지정했습니다.
(다시말해, 가장 왼쪽에 이미지가 뜨게 됩니다.)
포토샵 왼쪽 위의 Info란에 좌표가 0 32 가 표시되었을 것입니다.
이 좌표가 바로 케릭터가 나타날 기준점인것입니다.
(왼쪽 위입니다. 완전 중요합니다!)
두번째 이미지의 x좌표는 첫번째 이미지의 오른쪽에 표시되어야 하기 때문에 x좌표를 296에 지정했습니다.
y좌표 역시 위와 동일한 방법으로 48에 지정했습니다.
사실 좌표의 개념이 상당히 헤깔리실 것입니다.하지만, 이리 저리 숫자를 바꿔본다면 쉽게 익히실 것입니다.
② drawtext
글을 출력하는 명령어 중의 하나입니다만, drawtext 명령어는 창 이외에도 글을 표시할 수 있는 명령어입니다.
지정한 좌표에 글이 나타나므로 일단 위치를 잡으셔야겠지요?
포토샵을 실행하여 글자의 위치를 정한다음, 좌표를 적어두십시오.
예제에서는 x좌표 : 163 y좌표 : 181 로 위치를 지정해 두었습니다.
drawtext 한 칸을 띄우시고 x좌표 한칸 띄우시고 y좌표를 적어주시면 됩니다.
VNAP을 실행시키면 창 밖에 글이 나타나는 것을 알 수 있습니다.
drawtext는 주로 주인공의 심리를 표현하는데 좋습니다. 적절히 필요한 부분에 사용하시길 바랍니다 ^^
drawtext는 글이 나오지만 실제로는 CG처럼 처리됩니다. 따라서 지우실 때는 drawtext 만 써주셔도 지워집니다.
강좌에 사용된 파일을 이래저래 수정해 보시며 공부하시길 ^^
강좌 파일
Copyright ⓒ 2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/)
앞의 강좌에서 기본적인 글과 그림을 나타내는 방법을 배웠습니다.
이번에는 음악과 영상을 재생하는 방법에 대해 알아보겠습니다.
[Lecture 03. 음악(BGM)과 동영상 재생하기.]
1. 음악 재생하기.
bgm 명령어는 음악을 재생하게 하는 명령어입니다. 배경음악(Background Music)의 준말입니다.
기본적으로 계속하여 반복 재생합니다.
먼저, vnap 폴더 안에 bgm이라는 폴더를 만듭시다.
그리고 재생하고자 하는 음악 파일을 bgm폴더에 복사합니다.
(단, 확장자는 mp3,mid,wav,wma 파일을 사용하세요.)
예제에서는 music1.mid라는 음악 파일을 복사했습니다.
(확장자가 안나오지만 툴팁에 MIDI시퀸스라고 나오지요, 이 파일의 정확한 이름은 music1.mid입니다^^)
여기서 주의해야 할 점은 음악 파일은 한글명으로도 가능합니다만, 가능하면 영어로 적어주어야 에러가 나지 않습니다.
그리고 음악 파일의 이름은 빈 칸이 없어야 합니다.
올바른 파일 이름
잘못된 파일 이름
music1.mp3
music 1.mp3
다음과 같이 scenario.txt 파일에 씁시다.
(음악을 끄는 방법은 bgm FADEOUT 명령어입니다.)
첨부 시킨 파일로 직접 음악이 재생/정지되는 것을 확인하시길 바랍니다. ^^
2. 효과음 재생
effect 명령어는 연출에 사용되는 명령어입니다. 주로 효과음에 많이 이용되는 기능입니다.
걸음을 걷는다든지, 심장이 뛰는 소리 같은, 글에 더 몰입할 수 있도록 하는 역할을 합니다.
기본적으로 한번만 재생됩니다.
먼저, vnap 폴더 안에 effect 라는 폴더를 만듭시다.
그리고 재생하고자 하는 효과음 파일을 effect 폴더에 복사합니다.
(단, 확장자는 mp3,mid,wav,wma 파일을 사용하세요.)
예제에서는 BIRD.WAV 라는 음악 파일을 복사했습니다.
(마찬가지로 확장자가 없지만 툴팁을 보시면 WAV파일임을 알 수 있습니다.)
역시 주의해야 할 점은 음악 파일은 한글명으로도 가능합니다만, 가능하면 영어로 적어주어야 에러가 나지 않습니다.
마찬가지로 음악 파일의 이름은 빈 칸이 없어야 합니다.
다음과 같이 scenario.txt 파일에 씁시다.
(효과음을 계속 반복시키는 명령어는 effect 음악파일 REPEATS 이고
반복되는 효과음을 중지시키는 명령어는 effect 음악파일 STOP 입니다.)
배경음과 효과음은 동시에 연주가 가능합니다.
그래서 아래와 같이 써주시면 배경음과 효과음이 동시에 나타나게 됩니다.
첨부 시킨 파일로 직접 음악이 재생/정지되는 것을 확인하시길 바랍니다. ^^
3. 동영상 재생하기.
게임을 처음 실행하면, 오프닝이 나오지요, 이 오프닝들은 대부분 미리 만들어진 동영상이 재생이 되어 나타납니다.
VNAP역시 동영상 실행이 가능합니다.
VNAP에서는 동영상 파일(*.avi , *.mpg) 등을 재생가능하고, 플레시 파일(*.swf) 역시 재생이 가능합니다.
이런 동영상 파일들은 쇼 스크립트 안에서만 재생이 가능합니다.
(쇼스크립트는 배우지 않았지요, 차후 올라올 14강 VNAP Helper Book을 참조해주세요.)
먼저 VNAP 폴더에 동영상 파일을 넣읍시다.
(예제에 든 동영상 파일은 용량 및 저작권으로 파일첨부는 하지 않습니다.)
그리고 openning.txt 라는 텍스트 파일을 만듭시다.
그리고 scenario.txt 파일에 아래와 같이 적읍시다.
이미 만들어둔 openning.txt 파일에는 아래와 같이 적습니다.
이렇게 했을때 동영상이 재생됩니다.
(중요) 여기서 show 명령어로 openning.txt 파일을 불러내었으므로, openning.txt 파일은 쇼 스크립트가 됩니다.
<명령어 체크>
movie : 동영상 재생 명령어, 크기 조절은 FULL 옵션을 이용하여 전체 화면에서 재생이 가능.
간혹 동영상 재생을 위와 같이 하지 않고 아래와 같이 타이핑하시는 분들이 많습니다.
<잘못된 사용법>
※ 시나리오 스크립트인 scenario.txt 파일 안에서는 movie 명령어가 작동하지 않으므로 재생이 안되는 것입니다.
강좌에 쓰인 파일을 받으셔서 압축을 푸시고, scenario.txt파일을 이리저리 고쳐보시면 훨씬 빨리 익히실 것입니다 ^^
강좌 파일
Copyright ⓒ 2005-2009. 아우름이. All rights Reserved.
미디어 연구소(http://mediastudio.tistory.com/)