thx to jiaqiang (sheesh, translation by me + more details explaination by me (flaming me not allowed + i bet jiaqiang, torune and kcinick would kill me.. lol) Razz) 【share】my geodata knowledge as of now, ppl with ability have fun with it thanks to ajia, hope that ppl will not be troubled by geodata problems again and concentrate on development new stuff speaking of geodata, i said before that geodata are the same, i believe torune and ajia understands the meaning of that no matter if it's 384k or a few MB, they are all the same (dig: again... this is wrong = = sheesh stabs jiaqiang, 384k geodata plainly only stores the information of terrain and seriously lack of detailed information of other related layers) i'll explain the rules of geodata below: firstly hex code reading rules - from left to right, top to bottom, high to low priniciple (dig: actually this is wrong Mad what is read should appear as y axis followed by x axis, shrugs... continue with translation) client side has a coordinate rule client's smallest /loc geodata height difference is 8 also in grayscale bmp geodata, the height we place in it is actually a multiple of 8. this fixes the 255 byte representation problem on our geodata. torune doesnt discover this problem when creating geodata, u could fix it by yourself (dig: O_o, seriously i dunno what he's trying to say... isnt this something everybody knows? (at least to those doing bmp->geodata, this is the basics), oh alright , i'll try not to sidetrack Mad) everybody should know 00 00 header and 00 00 aa bb xx yy base geodata template, i've said before xx yy isnt read and aa bb is the real height how to calculate these heights, i will not be going into, for those who doesnt understand read bfwd's post when we use 00 00 header to write geodata, we'll face a problem cause 00 00 header represents 1 area, and that 1 area can only have 1 height. for example, if this area needs 2 heights or more, the 00 00 header will not be able to accomplish what is needed. therefore we'll need to introduce new header coding format. and that new header is 40 00 or 40+ headers (e.g. 41 00 / 42 00 / 4x 00) *40 (hex) is 64 (decimal) in 40 00 header, this area could have up to 64 heights the whole 40 00 header area and 00 00 header area has the same size inside 40 00 header, it follows the same rule of left to right, top to bottom rule, 8 byte together forms 8*8 = 64 and the format of writing must match the multiple of 8 rule. concept of what is above: example in a area, we can use the knowledge above and know that within a header area, the max height in it is only 64. and what about the height above that area? this is where it is used. for example 41 00 header inside this header has 65 heights, it's format is 41 00 01 00 xx yy .... 02 00 xx yy aa bb that 02 represents 2 heights, xx yy as the top height and aa bb as bottom height. style of writing is the same as 40 00 header, later we'll talk about height detail calculations level connection concept: level to level height difference is max at 24 for example at 2 location, 1 location height is -3000 -5000 other location height is -3024 -5000 this means the level is connected if another location height is -3036 -5000 that means, u could walk from -3000 to -3036 but walking from -3036 to -3000 is impossible u'll drop to -5000, this is a problem that torune used to face environment variable concept: (dig: or our so called geodata wall bit) 40 00 header including 40+ headers (dig: this is from kcinick, hope he doesnt kill me for releasing this, but jiaqiang has already given it.. so i guess it's alright :X) 0000 = 0 = EAST -> WEST [WALL] WEST -> EAST [WALL] NORTH -> SOUTH [WALL] SOUTH -> NORTH [WALL] 0001 = 1 = EAST -> WEST [WALL] WEST -> EAST [OK] NORTH -> SOUTH [WALL] SOUTH -> NORTH [WALL] 0010 = 2 = EAST -> WEST [OK] WEST -> EAST [WALL] NORTH -> SOUTH [WALL] SOUTH -> NORTH [WALL] 0011 = 3 = EAST -> WEST [OK] WEST -> EAST [OK] NORTH -> SOUTH [WALL] SOUTH -> NORTH [WALL] 0100 = 4 = EAST -> WEST [WALL] WEST -> EAST [WALL] NORTH -> SOUTH [WALL] SOUTH -> NORTH [OK] 0101 = 5 = EAST -> WEST [WALL] WEST -> EAST [OK] NORTH -> SOUTH [WALL] SOUTH -> NORTH [OK] 0110 = 6 = EAST -> WEST [OK] WEST -> EAST [WALL] NORTH -> SOUTH [WALL] SOUTH -> NORTH [OK] 0111 = 7 = EAST -> WEST [OK] WEST -> EAST [OK] NORTH -> SOUTH [WALL] SOUTH -> NORTH [OK] 1000 = 8 = EAST -> WEST [WALL] WEST -> EAST [WALL] NORTH -> SOUTH [OK] SOUTH -> NORTH [WALL] 1001 = 9 = EAST -> WEST [WALL] WEST -> EAST [OK] NORTH -> SOUTH [OK] SOUTH -> NORTH [WALL] 1010 = 10 = EAST -> WEST [OK] WEST -> EAST [WALL] NORTH -> SOUTH [OK] SOUTH -> NORTH [WALL] 1011 = 11 = EAST -> WEST [OK] WEST -> EAST [OK] NORTH -> SOUTH [OK] SOUTH -> NORTH [WALL] 1100 = 12 = EAST -> WEST [WALL] WEST -> EAST [WALL] NORTH -> SOUTH [OK] SOUTH -> NORTH [OK] 1101 = 13 = EAST -> WEST [WALL] WEST -> EAST [OK] NORTH -> SOUTH [OK] SOUTH -> NORTH [OK] 1110 = 14 = EAST -> WEST [OK] WEST -> EAST [WALL] NORTH -> SOUTH [OK] SOUTH -> NORTH [OK] 1111 = 15 = EAST -> WEST [OK] WEST -> EAST [OK] NORTH -> SOUTH [OK] SOUTH -> NORTH [OK] basic calculation 65536-2X-2(variable) Note:X is a multiple of 8, so it could only be 0,8,24... etc variable is between 0-7.5, getting 16 results in the end