Graal: The Adventure:ROM map
Before the NPC data is the warp data, with coordinates that seem to make weird a combination.
0B1F0A01FF01 seems to be all coordinates data.
It might mimick PC Graal's warp data, so I compare both
0B1F0A01FF01 XXYYWWHHNXNY (NX & NY means New X and New Y when the new map is loaded, aka, where you end up.)
Which seems to be it. FF for NX may mean the old X.
03 is the Map # where you warp. Change it to change where the map warps.
00 seems to make the map corrupt when set to 01... Map Bank, perhaps?
Usually comes directly after Palette and Exit Data. I am still trying to find a pattern so we can edit and find NPCs easily.
Level 2 - Crystal Tree Thing:
- 1188D = NPC #1 Direction
- 1188E = NPC #1 Appearance
- 11892 = NPC #1 Walk or not (0/1)
Level 3 - Waterfall doesn't Belong here:
- 1483F = Sign # (Which Sign do they say when they are touched. It's somewhat based on PC version's way of NPC talking.)
Level 6 - Two Baddies:
- 120BB = Top NPC's Appearance
Level 3's Exit and NPC Data Analysis (Non Moving, Can't Hurt, triggers sign when touched)
0C1F0901FF01020006001901FF1F0600 ; This all seems to affect warp zones. The last 00 might be the sign's index number. 20202020202020202020202020202020 ; Sign Spaces, used to make it centered 20202020202020283F4646495F202020 ; "Hello!" 2020202000000010481A050206030100 ; Spaces, ends with 00s... 000021012280030000190B0003030100 ; This slab must be the NPCs 000021012280030000040B0306030100 ; as they all are nearly identical "030100" seems to start a new NPC. 00002101228003000000400000020048 ; other than a few digits. 013548033948 ; Unknown
Level 4's Exit and NPC Data Analysis (Moving, Can Hurt)
061F1901FF0105000B1002010C1C0100 ; Again, this is Warping, The 00 is still at the end. 20202020202020202020202020202020 ; Spaces for the sign, again 202034423B4E674D2053494F4C204249 ; Sign stuff, again 4F4D3F5F0006168650171A01050301FF ; Unknown... "0301FF" at the end must be part of the NPC data. 010021012280030000091303040301FF ; Noticeably similar to above's NPC data 01002101228003000076480000027650 ; With differences. 01AB5002AF50
Level 6's Exit and NPC Data Analysis (Hostile, Can Hurt)
0B000A01FF1F04000B1F0A01FF010000 ; Warping, etc. 100503010301FF020C150122A1030000 ; Half-way, Hostile NPC Data. 101202040301FF010C15012281030000 ; Hostile NPC data A858000002A86000000002B860
Comparing the first two together
So in thoery, full NPC data looks like this:
030100000021012280030000190B0003 (In bold is changed values)
- 030100 or 0301FF are always before an npc. Probably to define that it is an NPC.
- 00 and FF are unknown switches At the Moment.
- 01 means walk, while 00 means to stand in place.
- 00 is nothing? it doesn't affect anything when it's 01. Probably needs another value to be 01.
- 190B, listed above, is Coordinates when the level is loaded.
* The last 4 digits, listed above are 0003, they are different for all NPC, not sure what it does.
The last four digits:
- The first two digits are the direction they are facing.
- The last two digits seem to be a appearance modifier.
Comparing Hostile VS. Nice NPC
We learned in Comparing the first two nice NPCs, nothing was a whole lot of different. 0301XX starts the NPC. So, let's compare an NPC that attacks you to one that just walks:
0301FF01002101228003000009130304 0301FF020C150122A103000010120204 (Walking on top, Hostile on bottom)
I now note the values that are bolded. From left to right.
- Right off the bat, I noticed the "walk" value is now 02, which probably means, walk and kill.
- The Previously unknown value 00 is now 0C, probably contributes to the Hostility.
- Unknown 21 is now 15
- Unknown 80 is now A1
After testing, I came up with the following answers:
- Changing 02 to 01 did nothing, he walks anyway.
- Changing 0C back to 00 and 15 back to 21 seemed to make him unhostile. ; SUCCESS!
- Changing A1 back to 80 seemed to make him take off his shield. ; Extra Bonus
So, now the NPC Data should be as follows.
- 0301** = Some type of Header, ** can be 00 or FF.
- ** = 00 stands, 01 walks, 02 walks?
- **** = 0021 is normal, 0C15 is Hostile
- 0122 = Unknown, all NPC have it.
- ** = 80 No Shield, A1 Shield
- 030000 = Unknown, all NPC have it.
- **** = XXYY initial Coordinates on map load.
- ** = Initial Direction on map load.
- ** = NPC Appearance
- 10000 = Level data officially starts, with 0E unknown bytes.
- It's confirmed that it's not a header, Level 3 doesn't have any 0xE before.
Every Level is a total of 0x400 bytes starting at the starting point for tiles and palettes/properties.
Level 1 - Starting Point:
- 1000E = Start of Tiles GFX
- 1040E = Start of Palette
Level 2 - Crystal Tree Thing:
Level 3 - Waterfall shouldn't be there:
- 14000 = Start of Tiles GFX
- 14400 = Start of Palette
Level 4 - Two NPCs and a house
- 14876 = Start of Tiles GFX
- 14C76 = Start of Palette
Level 6 - Two Baddies
- 118A8 = Start of Tiles GFX
- 11CA8 = Start of Palette
How it's numbered
LEVELS ARE NUMBERED AS FOLLOWS (Location to number, etc.) 5 7 4 6 3 1 2 Level 2 is the Crystal, etc.
How levels are made
Each level is 0x400 bytes for both tiles and palette/properties.
Each level should look like this:
0A0000000000000000000000000000494848490000000000000000000000000A 0800000102000000000000000000004948484900000000000000000000000008 0A0000000000000000000000000000494848490000000000000000000000000A 0800000000000000000000000000004948484900000001020000000000000008 0A0000000000000000000000000000494848490000000000005B5B000000000A 080000000000000000000000010200494848490000000000005C5C0001020008 0A0000000000000000000000000000494848490000005558585858550000000A 08000000000000000000010200000049484849005B5B56595959595600000008 0A000000005558585858550000000049484849005C5C5659595959560000000A 08000000005659595959560000000049484849000000575A5A5A5A5700000008 0A00005B5B565959595956000000004948484900000000005B5B00000000000A 0800005C5C565959595956000000004948484900000000005C5C000000000008 0A0000000056595959595600000000494848490000000000000000000000000A 0800000000575A5A5A5A57000000004948484900000000000000000000000008 0A00000000005B5B00000000000000494848490000000000000000000000000A 0800000000005C5C000000000000004948484900000000000000000000000008 0A0000000000000000000000000000494848490000000000010200191A00000A 0800191A00000000000000000000004948484900000000000000001B1C000008 0A001B1C000000000000000000000049484849000000000000191A000000000A 080000000000000000010200000000494848490000000000001B1C0000000008 0A0000191A000000000000000000004948484900000000000000191A0000000A 0800001B1C00010200000000003F4245454545423F00000000001B1C00000008 0A00000000000000000000003F40434646464643403F0000000000000000000A 083F3F3F3F3F3F3F3F3F3F3F404044494848494440403F3F3F3F3F3F3F3F3F08 0A4040404040404040404040404000494848490040404040404040404040400A 0840404040404040404040404040004948484900404040404040404040404008 0A4040404040404040404040404000494848490040404040404040404040400A 08404040404040404040404040414C4C4C4C4C4C414040404040404040404008 0941414141414141414141414100004948484900004141414141414141414109 88898A8A898888898A8A898800000049484849000088898A8A898888898A8A89 8586878786858586878786858400004948484900848586878786858586878786 8182838382818182838382818000004948484900808182838382818182838382
1F Hex Values wide, 1.00 KB in size. Each Hex Value is a new 8x8 tile. To make a bush, in the map, put in the following:
That will produce a File:Graalbush.png
How Palettes and Properties work
Much like the Tileset of a map, Palettes are also 0x400 bytes. However, they define Horozonal Flip and color in a byte and basically correspond to the tile map. So 1,1 in the tile map would be 1,1 in the palette map, etc..
To make a simple green tile: In the tile of choice, put in 00
To make a simple flipped green tile: In the tile of choice, put in 20
Meaning, the first digit is the property, the second digit is the palette.