자작스크립트 이야기
1편 : Etude87_Variables
1. 배포용 스크립트를 제작하게 될 줄은 몰랐다.
자주 묻는 질문 게시판의 [[RPG Maker XP/VX/VX Ace] 스크립트를 배우고 싶습니다.]를 작성할때 잠깐 언급한 바와 같이 스크립트를 수정/개조 하면서 ruby를 배웠습니다. 때문에 RGSS 라이브러리와 표준 라이브러리의 구분도 조금 잘 못 했고, 실력도 엉성하지요. 어느정도 ruby를 알았다는 시점에서 본격적으로 ruby를 배웠어야 했는데, 이 정도면 간단히 스크립트 수정하는데는 크게 어렵지 않겠다는 판단에 ruby가 아닌 python 교재를 구입해서 배웠습니다. 그래서 지금은 스크립트를 작성하다가 막히면 늦게배운 python의 문법이 ruby에서는 어떻게 작성되는지 역으로 찾아가며 코드를 작성하곤 합니다.1
그렇기 때문에 자작 스크립트를 작성해서 배포할 생각이 없었습니다. ruby 실력은 그리 뛰어나지 않고, 이미 좋은 스크립트가 널려있는데다가 여기서 무언가를 더 작성할 거리가 남아있으리란 생각이 들지 않았기 때문입니다. 그냥 좋은 스크립트가 있으면 가져다가 입맛대로 수정해서 사용하면 된다는 생각이었지요.
그런 생각을 하고 있었는데, 어느새 몇 개의 자작 스크립트를 제작하고, 일부는 배포했습니다. 이번 게시물에서는 첫번째 배포작인 Etude87_Variables에 대해서 이야기 해보도록 하겠습니다.
2. Etude87_Variables
'Etude87_Variables'라는 이름은 풀어 설명하자면 '습작 변수'라는 뜻입니다. Etude87은 제 ID일 뿐이지요. 사실 이 스크립트는 배포용으로 제작했던 것이 아니었습니다. 앞서 언급한 바와 같이 스크립트를 배포하리란 생각을 하지 않고 살아왔기 때문에 이 스크립트 또한 그저 개인용으로 작성했던 것이었습니다.
이 스크립트를 작성한 계기는 변수 낭비가 하고 싶어서 였습니다. VX에서 제공하는 기본 변수의 갯수는 5000개인데, 데이터베이스에서 다루는 수치의 양은 그보다 많습니다. 당시에는 변수에 해당 수치들을 할당해서 디버그창으로 해당 수치들을 조정해보려는 짓을 하고 있었기 때문에 5000개로는 어림도 없었습니다. 그래서 추가 변수가 필요하단 생각을 하게 되었습니다.
물론 이전에 추가 변수 관련 스크립트가 존재하지 않았던 것은 아닙니다. 예를 들면 허걱님의 변수 확장 시스템인 HG_Variables2가 이미 존재했었습니다.(이렇게 다시 보니 스크립트 이름을 따라한 것이 보이네요.) 하지만 제가 필요로 했던 스크립트는 디버그창에서 관리가 가능한 변수기능이었기 때문에 조금 경우가 달랐습니다. 그래서, 자작 스크립트를 제작하였습니다.
배포용으로 제작하지 않았기 때문에 처음에는 설정을 모아둔 관리 모듈이 존재하지 않았습니다. 그저 변수클래스를 하나 복제한 다음 디버그씬과 유관련 스크립트를 수정했을 뿐이었습니다. 지금도 원본 스크립트를 살펴보면 따로 스크립트가 정리되지 않은채로 마구 칼질해서 만들어 놓은 것이 그대로 입니다.
그냥 개인적으로 사용하기 위해서 만들었던 스크립트 였지만, 웹서핑 도중 RPG Maker 2k3 유저(였던 것으로 기억)의 글에서 변수가 부족해서 다시 수정 중이라는 글을 보게 되었습니다. 누군지는 기억이 나지 않습니다만, 변수가 모자를 정도로 많은 작업을 했던 것을 볼 수 있었습니다. 스크립트를 모르는 분들 중에서도 능력자들은 기본기능만 가지고도 좋은 작품들을 많이 만들어내는데, 변수가 부족해서야 되겠냐는 생각이 들어 배포하게 되었습니다.
Etude87_Variables_VX: http://avangs.info/rgss_vx/269511
Etude87_Variables_XP : http://avangs.info/rgss_xp/257043
Etude87_Variables_Ace : http://avangs.info/study_rpg_vx_ace/407560
별로 대단치 않은 스크립트이기 때문에 배포하는 순간까지도 이걸 배포해야할지 고민했었습니다만, 게임 제작하는데 있어서 스크립트를 모르는 유저에게는 큰 기능의 스크립트보다 오히려 작고 간단한 기능의 스크립트들이 유용하다는 것을 알기 때문에 이런 것 하나쯤 있다면, 나름 괜찮겠다는 생각에 배포를 했습니다.
이후 질문/답변 게시판에서 XP유저의 변수 부족문제 해결 질문이 올라왔고, 기왕 만들어둔 스크립트인 만큼 XP용으로 컨버전해서 배포했습니다. 그리고 VX Ace용으로도 컨버전해서 지금에 이르게 되었습니다.
3. 이 스크립트 사용법
이 스크립트를 사용하는 방법에 대해서 설명하겠습니다. 우선 설정이 모여있는 관리 모듈부터 살펴보겠습니다. 아마 각 버전에 따라서 모듈 이름이 조금씩 다르겠습니다만, 기본 구조는 같습니다.
module Etude87_Variables_VX
# etude87 변수의 최대수 Etude87_Var_Max = 100
# etude87 변수의 이름 설정(디버그 창) Etude87_Var_Name = { 1 => "1번 변수 입니다. 뿌잉뿌잉", # 변수 ID => 변수 이름 2 => "2번 변수 입니다. ㅎㅎㅎ", # 변수 ID => 변수 이름 3 => "3번째는 접니다.", # 변수 ID => 변수 이름
} # <= 지우지 마세요
end |
일단 녹색은 지워도 되는 주석이며, 붉은 색은 수정해도 되는 내용들입니다. Etude87_Var_Max는 사용할 추가 변수 갯수 입니다. VX에서 테스트 해본 결과 몇 만개가 넘어가면 디버그창을 열었을때 오류가 생기긴 합니다만, 1만개 넘는 수준에서는 무리가 없었습니다. 원하는 수량을 적어주시면 됩니다.
Etude87_Var_Name = {} 는 위의 스크린샷에서 보여지는 것과 같이 디버그창에서 보여질 변수의 이름입니다. 기본 변수에서 이름을 적지 않았다고 문제가 생기는 것이 아닌 것과 같이, 이것 또한 적어두지 않아도 문제가 생기지 않습니다. 다만, 적어두는 편이 디버그했을 때 알아보기 좋습니다. 적을때는 반드시 변수번호 => "변수이름", 으로 적어주셔야 합니다.(큰따옴표와 쉼표 등 잊지 말아야 합니다.)
게임 내에서 참조하는 방법은 이벤트의 스크립트창이나 조건분기의 스크립트란에 $game_etude87_variables[n] 을 포함하여 작성하는 것입니다.(n은 변수 번호)
초보자들 분들을 위해서 간단히 몇가지 설명해 드리자면, 기본 변수의 조작에서 사용하는 기능은 아래와 같이 작성해 줄 수 있습니다.(x는 정수)
$game_etude87_variables[n] += x # 더하기 $game_etude87_variables[n] -= x # 빼기 $game_etude87_variables[n] *= x # 곱하기 $game_etude87_variables[n] **= x # 제곱하기 $game_etude87_variables[n] /= x # 나누기 $game_etude87_variables[n] %= x # 나머지
|
여기에 x값으로 사용할 수 있는 참조값으로는 아래 링크를 참고하시면 도움이 되리라 생각합니다. 다만 아래 링크의 내용은 VX에만 해당하므로 타 버전에서는 다를 수 있음을 유의하시기 바랍니다.
<중수이상>RPG VX의 대표적 참조값 by 까까까 : http://avangs.info/rgss_vx/264410
물론 정수가 아닌 문자열이나 변수에 대입 가능한 한계를 넘은 수치의 경우 디버그 창을 열었을때 오류가 생길 수 있습니다. 이러한 경우에는 사용 이후 정수를 재 대입해줘서 오류를 방지하는 것이 좋습니다.
for i in n..m do $game_etude87_variables[i] = x end #n번부터 m번까지 변수에 x를 대입
|
일괄 처리는 위와 같이 적어 줄 수 있습니다.
$game_etude87_variables[n] > x # x 초과 $game_etude87_variables[n] >= x # x 이상 $game_etude87_variables[n] < x # x 미만 $game_etude87_variables[n] <= x # x 이하 $game_etude87_variables[n] != x # x 이외
|
더불어 조건분기에서 조건문으로 적어 줄 수 있는 내용입니다. 사실 이런 내용들은 이 스크립트를 사용하는데 필요하지만, 이 스크립트에만 해당하는 내용이 아닙니다. ruby를, 아니 프로그래밍 언어를 어느 정도 아는 사람이라면 다 아는 기본적인 내용일 뿐입니다만, 이를 모르는 초보자 분들을 위해서 적었습니다.
4. 마치며
주저리 주저리 길게 적었습니다만, 별로 내용은 실속이 없었을지도 모르겠습니다. 다음글 역시 기존 글의 후속편이 될지, 아니면 다른 내용으로 찾아뵙게 될지는 알 수 없으나, 일단 이 글은 여기서 마치도록 하겠습니다. 그럼 다음 글에서 뵙겠습니다.
※ 주석 ----------------------------------------------------------------------------------------------------
1. 인터프리터 언어인 php, perl, python, ruby가 비교 되어 있는 사이트 : http://hyperpolyglot.org/scripting
2. 아방스 VX 스크립트 게시판 : http://avangs.info/rgss_vx/267717