RGSS Table 직렬구조 메모

https://github.com/zh99998/OpenRGSS/blob/master/lib/openrgss/table.rb#L49

OpenRGSS의 unpack 코드를 참고하여 Table 구조의 바이트 구조를 정리했다.

...

0x000001D992EEF216  75 3a 0a 54 61 62 6c 65  u:.Table

0x000001D992EEF21E  02 1c 07 03 00 00 00 14  ........

0x000001D992EEF226  00 00 00 0f 00 00 00 03  ........

0x000001D992EEF22E  00 00 00 84 03 00 00 4c  ...?...L

...

  • 02 = 총 데이터 크기의, 자료형 크기 (2바이트)
  • 1c 07 = 0x71c = 1820B = 20 + 1800 = 4Byte * 5개 + 2Byte * 900개 = 총 데이터 크기
  • 03 00 00 00 = 0x3 = @size = 3 = 3차원 배열
  • 14 00 00 00 = 0x14 = @xsize = 20 = 맵 가로 길이
  • 0f 00 00 00 = 0xf = @ysize = 15 = 맵 세로 길이
  • 03 00 00 00 = 0x3 = @zsize = 3 = 맵 레이어 개수
  • 84 03 00 00 = 0x384 = @xsize * @ysize * @zsize900 = 타일 id 개수
  • 4c 00 ... = 이후 2바이트씩 900개의 타일 id가 직렬로 나옴 (레이어#1: 300개, 레이어#2: 300개, 레이어#3: 300개)

아래는 Table을 불러오는 코드 작성 후 결과이다.

Start reading "marshals/Data/Map001.rxdata"
object of class RPG::Map
  :@bgm
  object of class RPG::AudioFile
    :@volume
    100
    :@name
    "015-Theme04"
    :@pitch
    100
  :@events
  {
  }
  :@tileset_id
  1
  :@bgs
  object of class RPG::AudioFile
    :@volume
    80
    :@name
    ""
    :@pitch
    100
  :@autoplay_bgm
  true
  :@data
  User-defined class Table
  - Dimension = 3
  - SizeX = 20
  - SizeY = 15
  - SizeZ = 3
  - ElementCount = 900
  :@autoplay_bgs
  false
  :@height
  15
  :@encounter_step
  30
  :@width
  20
  :@encounter_list
  [
  ]



댓글