스크립트이야기

습작의 스크립트 이야기 : 자작스크립트 이야기 - 2편 : Etude87_Map_Remember

by 습작 posted Jun 05, 2012
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

자작스크립트 이야기


2편 : Etude87_Map_Remember

 

0. 들어가기 전에

 

  지난 Etude87_Variables에 이은 두번째 자작 스크립트 이야기 입니다. 이번에는 두번째로 배포했던 스크립트인 Etude87_Map_Remember를 이야기 해볼까 합니다. 물론 스크립트립트 이름이야 1편에서 이야기 한 것과 같이 큰 의미가 없으므로, 여기서는 생략하도록 하겠습니다.

 


 

1. 왜 만들었는가?


Etude87_Map_Remember_XP ver.1.2 : http://avangs.info/rgss_vx/396971

Etude87_Map_Remember_VX ver.1.2 : http://avangs.info/rgss_xp/689750

Etude87_Map_Remember_Ace ver.1.2 : http://avangs.info/study_rpg_vx_ace/689741

 

   위 영상은 Etude87_Map_Remember의 Test 영상입니다. 월드맵으로 보이는 맵의 이벤트들이 돌아다닙니다. 다른 맵으로 계속 전환하고 다시 돌아오지만, 해당 이벤트들은 처음 시작했던 제자리로 돌아가지 않고있습니다. 영상에는 나오지 않지만, 단순히 이벤트의 위치만이 계속되는 것이 아닙니다. 허걱님께서 제작하신 타일바꾸기1 스크립트는 다른 맵으로 전환시 다시 원상복귀되는 스크립트이지만, 이 스크립트를 함께 사용하게 되면, 원상복구되지 않습니다. 또한 일시삭제했던 이벤트도 돌아오지 않습니다. 이 스크립트가 맵전환, 저장, 로드간 맵타일, 이벤트가 리셋되지 않도록 상태를 함께 저장하기 때문입니다.

 

  이 스크립트를 제작한 까닭은 개인용도로 사용하기 위함이었습니다. (처음부터 배포용으로 제작하지 않은 것은  Etude87_Variables 에서 장황하게 말했던 내용이므로 생략하도록 하겠습니다.) 당시에는 호러 어드벤쳐 게임을 하나 제작하고 있엇는데, 각종 오브젝트와 이벤트들이 맵간 이동시 처음 위치로 리셋되는 것이 불편함을 자아냈습니다. 죽은 시체가 원위치되거나, 뒤돌아섰던 이벤트가 돌아서는 것은 참을 수 없는 것들이었습니다.


  물론 기본 기능만으로도 이는 해결이 가능한 것이긴 했습니다. 맵간 이동시 마지막 좌표를 입력해두었다가, 다시 돌아오면 해당 변수를 참조하여 위치시켜주고 시작하는 것이지요. 하지만, 이런 작업은 꽤나 번거로운 것이었습니다. 이런 기능의 스크립트는 누군가 만들법도 한데, 아무도 안 만들었더군요. 그래서 제작을 시작했습니다.


  아마 무난히 작업이 진행되고, 끝났다면 다른 제 스크립트들 처럼 그냥 혼자서 사용하고 말거나, 지금쯤 배포될 스크립트이기도 했습니다만, 애석하게도 작업이 순탄하지 않았습니다. 어디선가 삽질을 한 것이 분명한데, 자기가 한 일이다 보니 쉽게 눈에 띠지 않았습니다. 무엇인 문제인지 한참 고민하다가, 결국 포기 선언을 하고 허걱님께 조언을 구하게 되었습니다.


  문제는 서로다른 객체의 인스턴스 변수를 같은 것으로 착각한 것이었습니다. 허걱님의 조언 덕에 무사히 이 스크립트가 완성될 수 있었고, 개인용으로 작성하던 이 스크립트는 다른 호러게임 제작자분들을 위해서 배포가 되게 되었습니다.




2. 이 스크립트의 사용법

 

  이 스크립트는 앞서 언급한 바와 같이 맵의 상태와 이벤트의 상태를 저장하는 스크립트입니다. 첫 제작시 개인용으로 만들때는 모든 맵과 모든 이벤트의 상태를 같이 저장하는 방식이었는데, 이는 도리어 저장하기 싫은 맵과 저장하기 싫은 이벤트 까지 모두 저장해서 불편함을 야기시켰습니다. 빈대잡다가 초가삼간을 다 태운 격이었지요.


  그래서 차후 배포시에는 이러한 점을 해결하기 위해서, 관리 모듈에 설정 항목을 추가하였습니다.

 

 

  module Etude87_Map_Remember

    # 데이터 보존 대상 맵 아이디 목록

    Remember_Map_ID = [1]

    # 보존하지 않는 이벤트 아이디 목록

    Dont_Remember_Event_ID = { 1 => [5, 6],   #1번맵의 5, 6번 이벤트

                                               2 => [1]    #2번맵의 1번 이벤트

    } # <=지우지 말것

  end

 


  위의 내용에서 초록색 문자는 지워도 되는 주석이며, 빨간색 문자들은 수정 가능한 항목들입니다.


  일단 Remember_Map_ID 라는 항목은 저장할 대상 맵 아이디 리스트 입니다. 보존하려는 맵 아이디의 갯수가 한 개이든 여러 개이든 항상 여기에는 리스트를 대입해 줘야 합니다. 예를 들면 Remember_Map_ID = [1] 은 ID 1번 맵을 보존한다는 것이며  Remember_Map_ID = [1,6,7] 은 ID 1번, 6번 7번 맵을 보존한다는 것입니다. 대입시에는 항상 대괄호가 있어야 한다는 사실을 명심하면 됩니다.


  Dont_Remember_Event_ID는 위에서 설정한 보존 대상 맵에서의 예외항목입니다. 일단 설정된 ID의 맵에 존재하는 모든 이벤트는 같이 보존 되지만, 여기서 추가 설정된 ID의 이벤트는 보존되지 않습니다. 적을 때 맵ID => [이벤트 ID 리스트], 와 같은 형태로 적어줘야 합니다.(대괄호 쉽표 등 잊지 말아야 합니다.)


  이 스크립트는 대단히 복잡한 내용의 스크립트가 아니므로 위 설정만 잘 알고 계신다면 손쉽게 사용이 가능하리라 생각합니다.




 3. 나오며

 

  개인적 필요에 의해서 제작했습니다만, 나름 재미있는 스크립트라고 생각합니다. 겉으로 드러나느 형태는 아니라 대단할 것 같아보이지는 않지만, 리얼리티를 좀 더 강조하는 호러게임제작에 있어서 도움이 되리라 생각합니다.


  벌써 습작의 스크립트 이야기가 3회를 맞이했습니다. 그럼 다음 부터는 기획연재 스크립트 이야기 카테고리에서 만나뵙겠습니다.

 

 

 ※ 주석 ----------------------------------------------------------------------------------------------------

1. 타일 바꾸기 by 허걱 :  http://avangs.info/rgss_vx/266080

Who's 습작

profile

* 게임소재 자료실 관리자 (2012.04.17 ~ ) / 게임리뷰 게시판 관리자 (2012.08.23 ~ )
* 개인 블로그 : https://eternalworld.tistory.com
└ RPG Maker VX/Ace 메뉴 편집기 등 배포
* 리뷰 블로그 : https://etude87.tistory.com
└ RPG Maker 시리즈 한글패치 정리, 쯔꾸르 시리즈 이용 규약 등 소개
* 프리 게임 한글화 DB : https://freegame.tistory.com
└ 한글화된 해외 무료 게임 정리