mirror of
https://github.com/moparisthebest/rswiki-book
synced 2024-11-25 02:22:18 -05:00
Create MediaWiki page 'Data Types'
This commit is contained in:
parent
73c9e130b7
commit
5907b956ea
111
Data-Types.mediawiki
Normal file
111
Data-Types.mediawiki
Normal file
@ -0,0 +1,111 @@
|
||||
== Introduction ==
|
||||
|
||||
RuneScape uses a number of standard and non-standard data types.
|
||||
|
||||
== Byte Order ==
|
||||
|
||||
Data types that are two bytes or larger can be stored and ordered in a variety of different ways. Generally people either use big endian or little endian.
|
||||
|
||||
=== Big Endian ===
|
||||
|
||||
In big endian order, the most significant byte (MSB) is stored first and the least significant byte (LSB) is stored last.
|
||||
|
||||
=== Little Endian ===
|
||||
|
||||
In little endian order, the least significant byte (LSB) is stored first and the most significant byte (MSB) is stored last.
|
||||
|
||||
=== Byte order in RuneScape ===
|
||||
|
||||
RuneScape uses both little and big-endian byte orders throughout the protocol (however, the 194 client only uses big-endian order), presumably to make reverse-engineering of the protocol harder. Some confusion has arisen over the byte order as the data types are named incorrectly in [[Server Winterlove|Winterlove]]'s server where little endian data types are incorrectly named as big endian types.
|
||||
|
||||
== Standard data types ==
|
||||
These datatypes can also be read/written by a DataWriter/DataReader implementation (DataStreams and Buffers)
|
||||
|
||||
Naming conventions:
|
||||
{| border=2
|
||||
! Official name
|
||||
! Datatype name
|
||||
! Jagex name
|
||||
! Encoding
|
||||
|-
|
||||
| Byte
|
||||
| byte
|
||||
| 1,1b
|
||||
|-
|
||||
| [[Word|WORD]]
|
||||
| short
|
||||
| 2,2b
|
||||
|-
|
||||
| [[DWord|DWORD]]
|
||||
| int,int32
|
||||
| 4,4b
|
||||
|-
|
||||
| [[QWord|QWORD]]
|
||||
| long,int64
|
||||
| 8,8b
|
||||
|-
|
||||
| C style string
|
||||
| string,String,char *,char[]
|
||||
| str,strbyte
|
||||
| text bytes then '\n' or 10
|
||||
|-
|
||||
| Java style string
|
||||
| string,String,char *,char[]
|
||||
| strraw
|
||||
| WORD length then text bytes
|
||||
|}
|
||||
|
||||
Note that [[Jagex]] used to use a new line character as string terminator, in more recent versions they use the
|
||||
null character \0 or 0 to support multi-line strings.
|
||||
|
||||
== Non Standard Data Types ==
|
||||
|
||||
{| border=2
|
||||
! Winterlove's name
|
||||
! Jagex name
|
||||
! Read transformation
|
||||
! Write transformation
|
||||
|-
|
||||
| Special A
|
||||
| Unknown
|
||||
| value - 128
|
||||
| value + 128
|
||||
|-
|
||||
| Special C
|
||||
| Unknown
|
||||
| 0 - value
|
||||
| 0 - value
|
||||
|-
|
||||
| Special S
|
||||
| Unknown
|
||||
| 128 - value
|
||||
| 128 - value
|
||||
|-
|
||||
| SpaceSaverA
|
||||
| smarts
|
||||
| (value[0] < 128) ? (((value[0] - 128)<<8)+value[1]) : value[0]
|
||||
| if(value < 128) putword(value+32768) else putbyte(value);
|
||||
|-
|
||||
| SpaceSaverB
|
||||
| smart
|
||||
| (value[0] < 128) ? value[0] - 64 | ((value[0]<<8)+value[1]) - 49152
|
||||
| if(i < 64 && i >= -64) putbyte(i + 64) else if(i < 16384 && i >= -16384) putword(i + 49152);
|
||||
|-
|
||||
| tribyte / RGBColour / 3Byte / int3 / medium
|
||||
| 3
|
||||
| (value[0] << 24) + (value[1] << 16) + value[2]
|
||||
| putbyte(value >> 24);putbyte(value >> 16);putbyte(value);
|
||||
|-
|
||||
| [[RS String|RS_String]]
|
||||
| jstr
|
||||
| Old engine: read until newline delimiter ("\n") <br />New engine: read until null byte (value 0).
|
||||
| Old engine: write and finish with newline delimiter ("\n") <br />New engine: write and finish with null byte (value 0).
|
||||
|}
|
||||
|
||||
Additionally, RuneScape also uses two integers that are different from a big- or low endian order. Both byte orders are called middle endian. Their orders could be described as following:
|
||||
|
||||
Middle endian big int: C3 D4 A1 B2
|
||||
|
||||
Middle endian small int: B2 A1 D4 C3
|
||||
|
||||
(A1 smallest D4 biggest byte)
|
Loading…
Reference in New Issue
Block a user