고급강의실
2014.10.04 23:55

RPG Maker VX ACE - Map.rvdata2 데이터 구조

조회 수 1592 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
맵의 이름(Tool로 읽었을때의 이름)은 Map Info에 저장되어 있습니다.
그렇기 때문에 여기서 Map Name이 안 나온다고 말씀하시지 마시길 바랍니다.
참고 : Map Info에는 Tool에서 나오는 Tree구조 및 Map Name을 저장하는 파트입니다.

※일부 기록하지 않아서 누락되는 자료가 있음을 말씀드립니다.

RPG::Map:0x706dfb8//클래스명과 주소값

--속성 창--
--기본 설정파트--

-@display_name=""//출력될 맵 이름(-2014/10/4 박하민트님 제보)

-@tileset_id=1//타일셋 ID
Tilesets.rvdata2에 정의내려진 @id의 값을 가져와서 표현 저장 정보이다.
이것이 2가 되면, $data_tilesets.id=2인 타일이 불러와진다.

-@width=17//가로축(x 축)
맵의 x축의 크기

-@height=13//세로축(y 축)
맵의 y축의 크기

-@scroll_type=0//이동시 반복되는 형태
0 : 고정 맵 (none)
1 : 수평 반복 (Vertical Loop)
2 : 수직 반복 (Horizontal Loop)
3 : 둘다 반복 (Both Loop)

@autoplay_bgm=false//자동재생 배경음 설정
@bgm=#<RPG::BGM:0x706def0 @name="", @volume=100, @pitch=100>//배경음
@autoplay_bgs=false//자동재생 사운드 설정
@bgs=#<RPG::BGS:0x706ddc4 @name="", @volume=80, @pitch=100>//사운드

-@disable_dashing=false//대시 금지(-2014/10/04 박하민트님 제보)

--뒷 배경 설정--
-@parallax_show=false//뒷배경 보이기 설정
Tools에서 뒷 배경이 보이길 원하는지 체크하는 파트를 담당한다.
-@parallax_name=""//뒷배경 이미지 이름
뒷배경의 이미지 이름이다.

-@parallax_loop_y=false//세로축으로 스크롤
스크롤 할것인지의 유무(y축 방향으로)
-@parallax_loop_x=false//가로축으로 스크롤
스크롤 할것인지의 유무(x축 방향으로)

-@parallax_sx=0//뒷배경 속도 x축
-@parallax_sy=0//뒷배경 속도 y축

--랜덤 전투 설정--
-@encounter_step=30//자동전투의 걸음수를 저장하는 데이터입니다.

-@encounter_list=[]//랜덤 전투 list
 RPG::Map::Encounter라는 클래스를 가지는 배열입니다.
 Encounter클래스는 Troop.rvdata2에 영향을 받아서 적의 그룹을 연결 시켜주기 위한 데이터를 저장 시켜놓고 있습니다.

-@specify_battleback=false//배틀 배경 지정유/무
-@battleback1_name=""//배틀 배경1
-@battleback2_name=""//배틀 배경2
이미지 이름 저장하는 것.

-@note=""//메모


--맵 내용물--

-@events={}//이벤트들
 RPG::Event라는 클래스를 가지고 있으며,
 이벤트의 이름(EV001같은것), 맵에서의 위치, 조건, 행동데이터를 저장하는 배열.

-@data=#<Table:0x706de14>//맵데이터
 여기서의 맵데이터는 Tilesets와 동일하게 Table로 되어 있지만, Table은 3차원 Table입니다.
 Map.data[x,y,z]로 x,y는 2차원 타일 위치를 뜻하고(x는 가로축, y는 세로축), z는 레이어입니다.
 0은 지형, 1은 지형/조형물, 2은 조형물, 3은 그림자 입니다.

 data 값은 Tileset의 인덱스와 동일하게, B-C-D-E-[Error Arrea 1090~1550]-A1-A2-A3-A4-A5(수정) 순으로 돌아가며,
 만약, data[0,0,0]=0일 경우에는 Tilesets의 0번째 인덱스 자원이, data[0,0,0]=1은 Tilesets의 1번째 형태의 지형이 나오게 됩니다.

 그래서 일반 타일 셋에서 기본적으로 맵을 형성 시켰을때, 나오는 물이 가득 채워진 형태의 맵의 데이터를 불러오면,
 2048의 데이터가 나오는데, 이것은 A1의 물의 아이콘에서 가장 깊은 상태의 물을 보여지고,
 2049는 그림에서 물 왼쪽 위에 약간의 흙 지형이 붙어 나오는 그림,
 2050은 그림에서 물 오른쪽 위에 약간의 흙 지형이 붙어 나오는 그림,
 2051은 그림에서 물 왼쪽/오른쪽 위에 약간의 흙 지형이 붙어 나오는 그림,
 2052은 그림에서 물 오른쪽 밑에 약간의 흙 지형이 붙어 나오는 그림 등으로 나오게 됩니다.

 예시는 그림에서...
study.jpg
 2048에서 1씩 증가 시켜서 만든 맵데이터들

 부족하거나 누락된 부분은 말씀하시면 차후에 추가하겠습니다.

 Script로 Map을 만드는 방법은 다음과 같습니다.

 map = RPG::Map.new(넓이, 높이)

 mpa.data[x,y,z]을 이용하여 맵의 데이터를 넣고,(넣지 않으면 기본 값은 0이됩니다.)

 save_data(map, "Data/Map001.rvdata")
 여기서 고정 값이 아니라 유동 값을 넣고 싶으시면,
 save_data(map, sprintf("Data/Map%3d.rvdata",map_num))을 입력하시면 유동값으로 저장이 됩니다.
 불러오는 방법은 반대로이며, Game_Map 클래스에서 사용합니다.

 --추가 사항--
 맵 지형 데이터에 관하여
 맵 지형은 0은 존재하지 않는 데이터로
 그 다음으론
 B-C-D-E순으로 하여 이것의 데이터량은 256개로,
 256*4로 1024까지 지원 하고 그것을 넘으면 지형의 출력이 되지 않습니다.
 그 다음 2048의 지형에서 2048 이하의 숫자는 지형이 출력되지 않습니다.

 1025~2043 사이에는 지형 데이터가 없고, 1090에서 1550사이에는 에러 데이터가 있기 때문에 사용할 필요가 없습니다.

 실험한 결과를 내면,
 0~255(B 파트)
 256~511(C 파트)
 512~767(D 파트)
 768~1023(E 파트)
 1024~2048(빈 파트)
 2048~2096(A1의 하나의 블록 파트)(차이는 48만큼)
 ...
 순으로 됩니다.

 여기서 대략적인 계산 방법을 말씀드리겠습니다.(문제 점이 있고 완벽한 계산방식이 아님을 명심해주시길 바랍니다.)
 방법
 0000 0000 일때, 초기 블럭(그림에서 보시면 깊은 물 같은 형태의 블럭)
 0000 0001 일때, 왼쪽위
 즉, 해석하면,
 0000 0000에서 앞에 0000일때, 뒤에 0000은 0000[왼쪽 밑, 오른쪽 밑, 오른쪽 위, 왼쪽 위]
 0001 0000에선 00[00은 좌, 01 위, 10 우측, 11밑] 00[00 비어있음, 01-10-11 위에 말한 위(왼-오)-밑(오-밑)순]

 이 다음은 제가 하는 계산 방법이랑 틀어집니다.(그래서 그냥 언급만 하겠습니다.)
 0010 0000에서 2개를 위-밑, 좌-우로 출력하게 나오게 되어 틀어집니다.
 0010 0011에서 다시 2개씩 나눠서, 나오되, 위에 떳던, 좌위 - 위우 - 우밑 - 좌밑 순으로 2개씩 가집니다.
 다음에, 좌위우 - 좌밑위 - 좌밑우 - 위우밑 순
 다음엔 그냥 전부다 나오는거 2개

 그래서 총 합쳐서 약 48개가 출력됩니다.
 

[첨부파일 study.jpg 다운로드]
?
  • ?
    AKALA 2014.10.05 00:14
    @display_name=""은 맵 이름 띄우기, @disable_dashing=false 는 대시 금지 설정 같네요,

    그리고 마지막 즈음에 mpa.data[x,y,z]을 이용하여 맵의 데이러를 넣고 라고 오타났네요

    map.data[x,y,z]을 이용하여 맵의 데이터를 넣고 아닐까요?
  • ?
    AKALA 2014.10.05 00:22
    확실한건 아니고 그냥 이름보고 추측 한겁니다만, 그 창에서 설정 가능 한 거에선 그거 밖에 없겠죠. 아마도…
  • ?
    JunkMan 2014.10.05 00:21
    오타 수정했습니다.
    제가 Script 위주로 하다보니, 제대로 확인을 못했는데 제보 감사합니다. 수정 하겠습니다.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
공지 초급강의실 게임제작강좌 A-Z 색인 (2016.1.24 ver) 2 file 천무 2016.01.12 7372 1
92 고급강의실 RPG Maker VX ACE - Classes 데이터 구조. JunkMan 2014.10.07 836 0
91 고급강의실 RPG Maker VX Ace - Event 추가 하기/ Event Command 추가하기. 1 JunkMan 2014.10.06 2811 0
90 고급강의실 RPG Maker VX ACE - Actor 데이터 구조 JunkMan 2014.10.06 1064 0
89 고급강의실 RPG Maker VX Ace - RPG::Event의 구조. 4 JunkMan 2014.10.05 2650 0
88 고급강의실 RPG Maker VX ACE - MapInfos.rvdata2 데이터 구조. JunkMan 2014.10.05 3625 0
» 고급강의실 RPG Maker VX ACE - Map.rvdata2 데이터 구조 3 JunkMan 2014.10.04 1592 0
86 고급강의실 RPG Maker VX ACE Lite -Tilesets.rvdata2 데이터 구조 JunkMan 2014.10.04 2276 0
85 고급강의실 아이템 한번에 받기  운 2014.08.24 1147 0
84 중급강의실 대쉬몬스터만들기 2 만두카레 2014.08.24 1215 0
83 중급강의실 xp 타이틀 화면 바꾸기 8 주섬주섬 2014.07.20 1832 0
82 고급강의실 캐릭터그래픽 픽셀 3  운 2014.07.19 3621 0
81 고급강의실 배틀창 이름 체력 레벨 좌표 변경하기 1 Seed 2014.06.19 1032 0
80 중급강의실 잠와서 실수가 많은 저 게임만들고 싶어요 -1- 데이터베이스-1- 1 시버암 2014.06.14 1165 0
79 중급강의실 저 게임만들고 싶어요!! -0- 기초 4 시버암 2014.06.13 1725 0
78 중급강의실 RPG XP에서 소를 집적타보자!! -일명 음모XP - (자작 이벤트) 7 BY_RAIN 2014.06.09 1168 0
77 중급강의실 이벤트에 지도넣기 (그림의 표시) 5 물판 2014.05.07 2275 1
76 중급강의실 맵으로 이동되었을때 자동으로 타이머 실행 3 물판 2014.05.01 1189 1
75 중급강의실 10퍼센트 확률로 당첨되기(브금추가) 12 천둥번들 2014.04.30 1370 1
74 중급강의실 한글암호 만들기 5 치와도라 2014.04.26 1855 0
73 중급강의실 RPG 만들기 VX 한글 도움말 0.8버전 1 Omegaroid 2014.03.29 2602 0
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 Next
/ 10






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)