0x0000 ~ 0x1FFF (8192Byte)는 파일 헤더 부분.
0x2000, 0x4000, ... 0x20000까지 각각 세이브 슬롯. 1~15번 + 임시저장 슬롯.
이하 구조는 베이스 주소로 부터의 offset이다.(가령 3번째 슬롯이라면 0x6000 + 오프셋으로 계산)
Offset | Bytes | ||
0x0008 | 4 | Playing Time | |
0x0020 | 4 | Money(Gil) | |
0x0024 | 1 | must 0 | |
0x0025~0x0043 | 31 | 소모성 item(0x01~0x1F) | <=99 |
0x0044~0x0049 | 6 | 소환수 item(0x20~0x25) | 1 이면 충분 |
0x004A~0x0114 | 203 | 그외 item(0x26~0xf0) | <=99 |
0x0115 | 1 | must 0 (0xF1 item) | |
0x0116~0x0129 | 20 | 주요 quest item(0xF2~0x105) | 1 이면 충분 |
0x0150~0x0357 | 2*n | 소지품 순서 | |
0x03BA~0x03E1 | ... | Skills - F8 FF*8 00 00 FC FF 0F 21*00 F8 FF*3 01 | |
0x0419~ | 케릭터 1 | ||
0x051D~ | 케릭터 2 | ||
0x0621~ | 케릭터 3 | ||
0x0725~ | 케릭터 4 | ||
0x0829~ | 케릭터 5 | ||
0x13AC | 4 | Checksum |
아이템은 0x0150~ 영역에 순서가 저장되어 있다. 2byte씩의 item code array이다. http://www.gendoh.com/2511314 참조. 새로운 아이템을 추가하고 싶다면 이 array에 해당 item code를 추가시킨 후 0x0024 + item code 위치에 있는 값을(아마 처음엔 0) 셋팅해 준다.
아래는 케릭터별 데이터. 시작 주소 기준의 offset이다.
Offset | Bytes | |
0x00 | ... | 케릭터 이름: Pascal String with UTF-8 |
0x33 | 4 | Exp |
0x37 | 2 | HP |
0x39 | 2 | MP |
0x41~0x59 | 25 | 직업별 레벨 |
0x91~0x9A | 2*5 | 착용장비:오른손-왼손-머리-몸통-장식 |
0xE0~0xEF | 16 | 어빌리티 E0 FF*15 |
이름은 첫번째 바이트가 길이를 의미하고(Pascal style string) 이후 UTF-8 형식으로 저장되어 있다.
이름 고칠 일은 드물텐데 아마 현재 케릭이 누구인지 확인용 정도로 쓰면 될듯하다.
마지막 0x13AC offset의 Checksum 영역.
보통은 덧셈 뺄셈 잘하라고 하는데.. 간단하게는 돈이나 시간(Playing Time)과 자리 바꾸기 해도 되고.
Checksum의 값은 offset 0x0000~0x13AB까지의 합이다.
Signed BYTE로 읽어서 Signed Long(4byte)으로 덧셈을 하면 된다. Type Casting은 알아서 잘...
덧1)
아.. 모든 타입은 Little Endian
'정보 > 게임' 카테고리의 다른 글
FF5 for Android/iOS 아이템 코드표 (0) | 2014.01.07 |
---|