RSWiki
A source of documentation for the RSC/RS2/RS3 protocols and related systems.
Navigation
Game Protocol
- RSC (2001 - 2004)
- RS2 (2004 - 2013)
- RS3 (2013 - present)
Cache
Many of you may recall Graham and Blakeman's runewiki project - it contained very useful information about numerous client revision protocols and other resources. Unfortunately, the wiki and any backups of the database have been lost for over two years now (and there are no cached copies floating around). Because of this, we've decided (and have started) embarking on the journey of re-creating the wiki.
In regards to the aforementioned, backups have (and are continuously) being made of the database. Currently, the majority of the information covered is based on the #317 and #377 revisions. Currently, the majority of the information covered is based on the '''#317''' Protocol, '''JAGGRAB''' Protocol, '''Ondemand''' Protocol, '''Cache Archive Format''','''RS Data Types''', and'''#202''' Protocol.
The format of the wiki is fairly laid out, so it will be quite easy to expand on certain topics. If anyone has any information on the other commonly used client revisions (or perhaps a new one) feel free to contribute.
RSWiki is hosted and maintained by the moparisthebest community.
Vandalism
We do not allow vandalism of any kind.
Advertising
Attempting to advertise web sites which do not provide educational benefits is strictly prohibited.
Download Links/Uploads
Any link or upload that contains copywrited material (e.g. a client revision or cache archive) is strictly prohibited and will be removed
Posting Unreliable Information
The wiki is an education resource, so posting misinformed information is not optimal for learning - please avoid this. This includes edits with unclear explanations or bad information.
Proprietary Code
No server-specific code, only easily interpretable pseudo-code.
Want to chat with RSWiki members? Discuss anything and everything? Join our IRC network!
Connection Information
Join from a browser here:
https://www.moparisthebest.com/irc/
Or from a regular client with these details:
Server: irc.moparisthebest.com
Port: 6697 with TLS/SSL
Channel: #mopar
How To Guide (New Users)
Important commands
- Register your nickname - /msg nickserv register [YourPassword] [YourEmail]
- Identifying yourself (logging in) - /msg nickserv identify [YourPassword]
- Joining a channel - /msg #[channel name]
Recommended IRC clients
All information provided on this wiki is provided AS IS and contains NO WARRANTY. All information provided is purely for educational purposes only.
If you find something on this wiki page that infringes on your intellectual rights, please contact admin [at] moparisthebest.com to ask for the content's removal.
We collect information from you when you register on our site or information posted on our site.
When ordering or registering on our site, as appropriate, you may be asked to enter your: e-mail address. You may, however, visit our site anonymously.
What do we use your information for?
Any of the information we collect from you may be used to improve customer service (your information helps us to more effectively respond to your customer service requests and support needs)
How do we protect your information?
We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information.
Do we use cookies?
Yes (Cookies are small files that a site or its service provider transfers to your computers hard drive through your Web browser (if you allow) that enables the sites or service providers systems to recognize your browser and capture and remember certain information
We use cookies to compile aggregate data about site traffic and site interaction so that we can offer better site experiences and tools in the future.
Do we disclose any information to outside parties?
We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our website, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety. However, non-personally identifiable visitor information may be provided to other parties for marketing, advertising, or other uses.
Data
This section covers the raw data-related facilities and systems within the Client.
This includes an overview of the data-types used, as well as protocols like JAGGRAB Protocol and Ondemand Protocol.
Data types
RuneScape uses a number of common and bespoke data types in the process of data transmission.
Byte Order
Data types that are two bytes or larger can be stored and ordered in a variety of different ways. The traditional byte orders are big endian and little endian. Generally people either use big endian or little endian.
RuneScape uses both little and big-endian byte orders throughout the protocol (however, the 194 client only uses big-endian order). This presumably to make reverse-engineering of the protocol harder.
Note: Some confusion has arisen over the byte order as the data types are named incorrectly in Winterlove's server where little endian data types are incorrectly named as big endian types.
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.
Bespoke Byte Orders
Additionally, RuneScape also uses two endian orders for integers that are different from a big- or low endian order. We call these byte orders middle endian.
Middle Endian Big Int
The bytes are stored in the following order, where A1 is the smallest byte (I.e. LSB) and D4 the bigger (i.e. MSB): C3 D4 A1 B2.
Middle Endian Small Int
The bytes are stored in the following order, where A1 is the smallest byte (I.e. LSB) and D4 the bigger (i.e. MSB): B2 A1 D4 C3.
Common data types
These data types are traditional, hence they can typically be written and read by a standard DataStream, or Buffer implementation.
Naming conventions:
Standardized name | Data-type name | Jagex name | Encoding |
---|---|---|---|
Byte | byte | 1,1b | Bytes |
Word | short | 2,2b | Bytes |
DWord | int, int32 | 2,2b | Bytes |
QWord | long, int64 | 8,8b | Bytes |
C-style String | string, String, char*, char[] | str, strbyte | Text bytes followed by \n or the byte 10 . |
Java-string String | string, String, char*, char[] | strraw | Length as a word, followed by the text bytes. |
Note: In more recent versions of the client, C-style strings are terminated with the null character (i.e. \0
) or the byte 0
to support multi-line strings.
Bespoke data types
These data types are bespoke, that is, they were developed with the sole intention of only being used within Jagex products.
We presume that this is another technique employed to make reverse-engineering and packet manipulation harder.
Naming conventions:
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] << 24) + (value[1] << 16) + value[2] | putbyte(value >> 24); putbyte(value >> 16); putbyte(value); |
Tribyte, RGBColour, 3Byte, int3, medium | 3 | (value[0] << 24) + (value[1] << 16) + value[2] | putbyte(value >> 24); putbyte(value >> 16); putbyte(value); |
RS String | jstr | Old engine: read until newline terminated ("\n"). New engine: read until null byte (value 0). | Old engine: write and finish with newline delimiter ("\n"). New engine: write and finish with null byte (value 0). |
Note: The read transformation is the process which must be applied to read data, to reconstruct the original. The write transformation applies analogously, to when data is written.
Bit Access
Initiating Bit Access
Whenever data is to be sent to the server or to the client using bits; the stream needs to be prepared by setting the bit position. The bit position can be calculated by multiplying the current buffer position by 8. This is because each byte is comprised of 8 bits.
e.g. int bitPos = bufferPos * 8;
ISAAC cipher
ISAAC is a cryptographically secure pseudorandom number generator, and a stream cipher designed by Robert J. Jenkins Jr (see ISAAC).
You can find the standard Java implementation used here.
ISAAC instance creation
When a client logs into the server, two instances of ISAAC are created,
and the generated seeds are transmitted between them.
One instance is for encryption, and one for decryption.
The seed is comprised of 128-bits, half is generated by the client, and
half by the server.
This is to ensure that no individual entity has entire control of
the key generation process.
Use in the client
ISAAC is used to encrypt and decrypt packet opcodes before transmission, to make packet manipulation harder.
When a packet is sent, its opcode becomes the original opcode added to the generated ISAAC opcode from the encryption instance.
The packet opcode is decrypted analogously on the server.
Word
A "word" is a data-type that consists of 2 bytes.
It is also commonly known as the "short" data-type in programming.
DWord
A "DWord" (double-word) is a data-type that consists of 4 bytes.
It is also commonly known as the "int" data-type in programming.
QWord
A "QWord" (quad-word) is a data-type that consists of 8 bytes.
It is also commonly known as the "long" data-type in programming.
RS String
RS String is the internal name for a custom string data-type used in the RuneScape protocol. The string data-type stores a collection of characters in order to represent a textual message.
Old Engine
In the old engine client, the RS String datatype is terminated by the new line
character (i.e. \n
).
New Engine
In the new-engine client, the RS String datatype is terminated by a null byte (i.e. 0
).
JAGGGRAB protocol
Introduction
In the early days of the client, it was distributed as an embedded JAR within a web page. So, reloading the web page would result in the user being served an up-to-date client. However, the cache files were stored locally and thus required a separate mechanism for updating.
The JAGGRAB protocol addresses this by updating the client's cache files. It does this by 'grabbing' cache files from the file server and downloading them.
It is a text-based protocol, similar to HTTP/0.9, and the client will fall-back to HTTP if JAGGRAB is unavailable. This generally happens in unsigned mode and helps users who are behind firewalls.
Request format
A request is simply the text JAGGRAB, a space, the path to the file and a newline character. Therefore, it is very similar to a HTTP/0.9 GET request.
e.g. JAGGRAB /path/to/file
.
Note: In possibly all new engine clients, the client prefixes the JAGGRAB request line with a single byte (value 17).
Response format
The response is the file bytes. Once the response is sent, the connection is closed.
Files
There are a number of files which map to files in the cache.
/crc
- the CRC table/title
- cache 0, file 1/config
- cache 0, file 2/interface
- cache 0, file 3/media
- cache 0, file 4/versionlist
- cache 0, file 5/textures
- cache 0, file 6/wordenc
- cache 0, file 7/sounds
- cache 0, file 8
Note: the client will usually postfixes these with random numbers, so when checking for the file only the start of the string should be examined: not the whole one. This is to help avoid caches when these files are fetched over HTTP.
Note: The crc is postfixed with the client revision.
Ondemand protocol
The Ondemand protocol is used to stream updates to the cache. The client knows which files to update from the CRC file downloaded using the JAGGRAB Protocol.
Request format
The client first authenticates as an ondemand client by using the opcode '15' (as opposed to the game, which uses the type '14').
The format of the request is:
unsigned byte cacheId;
unsigned short fileId;
unsigned byte priority;
Furthermore, there can be multiple requests per session.
Response format
The response is sent in blocks. The maximum size of a block is 500 bytes. Smaller blocks (e.g. towards the end of a file) are permitted.
The format of a block is:
unsigned byte cacheId;
unsigned short fileId;
unsigned short fileSize;
unsigned byte blockNumber;
unsigned byte[] blockData;
Archive format
From client revision 194 until 377, all the files in cache 0
are in an archive-like format which contains a collection of named
files (e.g. BADENC.TXT
is a file which contains bad words in the
wordenc
archive).
Usage
These files are used by the client for a variety of purpose.
The files themselves represent either an index, which contains information about to where to locate data in the cache, and the data themselves.
e.g. DATA
contains data for interfaces.
e.g. MAP_INDEX
contains information about where to find the map and landscape files in the cache.
Format
tribyte uncompressedSize
tribyte compressedSize
If the uncompressed and compressed sizes are equal, the whole file is not compressed but the individual entries are compressed using bzip2. If they are not equal, the entire file is compressed using bzip2 but the individual entries are not.
Note: The magic id at the start of the bzip2 entries are not included
in the cache.
If you use an existing API to read the files and want to add this back,
you must append the characters BZh1
before you decompress.
short fileCount
Each file entry has the format:
int nameHash
tribyte uncompressedSize
tribyte compressedSize
Extracting the data
If you iterate over the files using a for-loop, you need to keep track of the file offset. The following pseudo-code demonstates how:
int offset = buffer.getCurrentOffset() + numFiles * 10;
for(int i = 0; i < numFiles; i++) {
// read values
int thisFileOffset = offset;
offset += thisFileCompressedSize;
}
To acquire a named file using its name, hash the name as follows:
public static int hash(String name) {
int hash = 0;
name = name.toUpperCase();
for(int j = 0; j < name.length(); j++) {
hash = (hash * 61 + name.charAt(j)) - 32;
}
return hash;
}
Then, loop through the file entries you loaded earlier to find a matching hash. Read the compressed file size from the offset. If the whole file is not compressed, you should decompress the individual entry.
#194 Archive Format
The #194 (RuneScape 2 beta) client worked with a very simple cache format. Each file in the cache corresponded to a file on the operating system.
Name hashing
Every name in the cache was hashed using the following method which is, incidentally, similar to the way player names are converted to longs.
public static final long gethash(String string) {
string = string.trim();
long l = 0L;
for (int i = 0; i < string.length() && i < 12; i++) {
char c = string.charAt(i);
l \*= 37L;
if (c >= 'A' && c <= 'Z')
l += (long) ('\\001' + c - 'A');
else if (c >= 'a' && c <= 'z')
l += (long) ('\\001' + c - 'a');
else if (c >= '0' && c <= '9')
l += (long) ('\\033' + c - '0');
}
return l;
}
The resulting long was converted to a string and the file was given that name.
Files
The files in the cache were the ones used in the JAGGRAB protocol (i.e. files in cache 0 in old engine caches), map (mX_Y), and landscape (lX_Y) files.
Incidentally, this naming is very similar to the names of the map and landscape files in new engine caches.
#317 Archive Format
The old engine cache is made up two types of files.
Data file
The data file holds all of the files in the cache and is named
main_file_cache.dat
.
It is therefore very big, typically ~10-20MB in size.
Index file
There are several index files, named main_file_cache.idx
and
then post-fixed with a number.
Each index file holds 'pointers' to where a file is located in
the main cache.
Each index file represents a type of file.
Index file format
The index file is comprised of a collection of six byte blocks which hold information about where a file can be located in the data file.
The format of a single block is as follows:
tribyte fileSize
tribyte initialDataBlockId
Data file format
The data file is comprised of a collection of 520 byte blocks.
The format of each of these blocks is as follows:
short nextFileId
short currentFilePartId
tribyte nextDataBlockId
byte nextFileTypeId
byte[512] blockData
Running example
Suppose, the client wishes to fetch file type 2, file id 17.
First off, it will open the main_file_cache.idx2
file and seek to the
index 17 * 6
(102).
It will then read the two tribytes:
fileSize = 1200
intialDataBlockId = 4
The client will now open the main_file_cache.dat
file and seek to the
index 4 * 520
(2080).
It will then read the following:
nextFileId = 17
currentFilePartId = 0
nextDataBlockId = 5
nextFileTypeId = 2
blockData = ... // 512 bytes of data
It will read the first 512 bytes of the file and then knows that there is 688 bytes left.
Therefore, it has to read the next block:
nextFileId = 17
currentFilePartId = 1
nextDataBlockId = 6
nextFileTypeId = 2
blockData ... // 512 bytes of data
It reads these next 512 bytes of the file and now knows that there are 176 bytes left.
So for a final time, it will read the next block:
nextFileId = 18
currentFilePartId = 2
nextDataBlockId = 7
nextFileTypeId = 2
blockData = ... // 176 bytes of data
It can ignore most of these values (the next ones are meaningless at this stage) and read the final 176 bytes. The whole 1200 byte file has now been read.
0B3
This page documents the .ob3
format, a bespoke format for 3D models
created by Jagex.
It is used by the RuneScape Classic engine since client version
#74.
Note: There is also an earlier version of this format called .ob2
.
OB3 Model Class
The following is the fully renamed client code used to represent OB3 models.
public class OB3Model {
private static final int num_seq = 0xbc614e; // 12345678
public int vertex_count;
public int vertices_x[];
public int vertices_y[];
public int vertices_z[];
public int face_count;
public int face_vertex_count[];
public int face_vertices[][];
public int face_fill_back[];
public int face_fill_front[];
public int face_gouraud[];
public OB3Model(byte data[], int offset) {
int vertex_count = get_uint16(data, offset);
offset += 2;
int face_count = get_uint16(data, offset);
offset += 2;
vertices_x = new int[vertex_count];
vertices_y = new int[vertex_count];
vertices_z = new int[vertex_count];
face_vertex_count = new int[face_count];
face_vertices = new int[face_count][];
face_fill_back = new int[face_count];
face_fill_front = new int[face_count];
face_gouraud = new int[face_count];
for (int v = 0; v < vertex_count; v++) {
vertices_x[v] = get_int16b(data, offset);
offset += 2;
}
for (int v = 0; v < vertex_count; v++) {
vertices_y[v] = get_int16b(data, offset);
offset += 2;
}
for (int v = 0; v < vertex_count; v++) {
vertices_z[v] = get_int16b(data, offset);
offset += 2;
}
this.vertex_count = vertex_count;
for (int f = 0; f < face_count; f++)
face_vertex_count[f] = get_ubyte(data[offset++]);
for (int f = 0; f < face_count; f++) {
face_fill_back[f] = get_int16b(data, offset);
offset += 2;
if (face_fill_back[f] == 32767)
face_fill_back[f] = num_seq;
}
for (int f = 0; f < face_count; f++) {
face_fill_front[f] = get_int16b(data, offset);
offset += 2;
if (face_fill_front[f] == 32767)
face_fill_front[f] = num_seq;
}
for (int f = 0; f < face_count; f++) {
int i = get_ubyte(data[offset++]);
if (i == 0)
face_gouraud[f] = 0;
else
face_gouraud[f] = num_seq;
}
for (int f = 0; f < face_count; f++) {
face_vertices[f] = new int[face_vertex_count[f]];
for (int fv = 0; fv < face_vertex_count[f]; fv++) {
if (vertex_count < 256) {
face_vertices[f][fv] = get_ubyte(data[offset++]);
} else {
face_vertices[f][fv] = get_uint16(data, offset);
offset += 2;
}
}
}
this.face_count = face_count;
}
private static int get_ubyte(byte b) {
return (b & 0xff);
}
private static int get_uint16(byte b[], int start) {
return (get_ubyte(b[start]) << 8) + get_ubyte(b[start + 1]);
}
private static int get_int16b(byte b[], int start) {
int i = get_ubyte(b[start]) * 256 + get_ubyte(b[start + 1]);
if (i > 32767)
i -= 0x10000;
return i;
}
}
Faces
A negative face_fill_back or face_fill_front value indicates a solid colour, whereas a positive value indicates a texture. The texture is defined by its offset in the client's texture array.
When converting to/from Wavefront OBJ format, remember that the OB3 face vertices are one less than the OBJ face vertices.
The below code will allow you to encode or decode colours in this format.
public static int decode_colour(int i) {
i = -(i + 1);
int r = i >> 10 & 0x1f;
int g = i >> 5 & 0x1f;
int b = i & 0x1f;
return (r << 19) + (g << 11) + (b << 3);
}
public static int encode_colour(int r, int g, int b) {
return -1 - (r / 8) * 1024 - (g / 8) * 32 - b / 8;
}
Client functions
This section will describe the following:
Map region system
A coordinate system is used to navigate through the RuneScape world. That coordinate system is based upon three variables, the absolute X-, Y-, and Z-coordinates.
Definitions
A tile is the in-game representation of an absolute coordinate.
e.g. The coordinates (3222, 3222)
represents one tile in the heart
of the Lumbridge castle.
A chunk of tiles, 8 x 8 in size. Also known as a region before the scope of a region was understood. The chunk is considered a point so it has X and Y coordinates. There are two forms of a Chunk: formatted and non-formatted, a formatted chunks equation is:
int chunkX = (getAbsoluteX() >> 3) - 6;
int chunkY = (getAbsoluteY() >> 3) - 6;
This centers the chunk on the map, more on that later.
The normal chunk equation is:
int chunkX = (getAbsoluteX() >> 3);
int chunkY = (getAbsoluteY() >> 3);
e.g. For the coordinates (3211, 3424)
, chunk X (formatted) is 395 and
the chunk Y (un-formatted) is 428.''
Region
A region is 64 x 64 in size, or 8 x 8 in chunks. The region is considered a point so it has X and Y coordinates.
The equation for finding the region the coordinates is within is:
int regionX = (getUnformattedRegionX() >> 3); // getUnformatedRegionX() / 8;
int regionY = (getUnformattedRegionY() >> 3); // getUnformatedRegionY() / 8;
e.g. For the coordinates (3211, 3424)
, region X is 50, and the
region Y is 53.
Note: The Region X and Region Y coordinates are traditionally not used in server location calculations; but practical region systems should use this calculation for many purposes.
Map
There is no calculation for a map, and there is no Map X or Map Y.
A Map is, however, a 104 x 104 area made up of 13 x 13 chunks.
Why is the number not even you may ask?
Because it has a center.
The (7, 7)
map chunk of the map is the center, and is also the formatted
chunk.
When a region update is called by the server, a new map is called, but you
must understand that the formatted chunk never changes; the tiles in the
map, however, are updated and trimmed.
When the player moves out of the formatted chunk, the map is re-positioned
to make that chunk the center yet again.
As stated, a new update is not needed every time the player enters a
new region, but when the range of +- 32 from the point in the center of
the chunk is reached, an update is required to update the map to the
new objects so that the 'black space' or fog is not reached. Confused?
Diagram
The active chunk is the chunk in which the player resides. The definite rendering chunks are the chunks in which will be rendered on the players screen no matter where they are in the active chunk. The indefinite rendering chunks are the chunks in which depending on where the player is within the active chunk they may be rendered or not. Remember this depends on the +- distance of 32 from the players absolute position. The queue chunks are pre-loaded chunks in whichafter the active chunk is moved may be disposed of or activated depending upon the direction in which the active chunk changes.
Loading
The following were the regions loaded for the coordinates (3183, 3217)
:
If you can imagine a puzzle, a 64 x 64 piece does not fit equally within the 104 x 104 area. So, bits of each region are taken that are within the 104 x 104 map area.
The amount of regions that are to be loaded can be calculated this way:
Please note that Region X and Region Y are not formatted.
int amt = 0;
for (int i21 = (player.getLocation().getRegionX() - 6) / 8; i21 <= (player.getLocation().getRegionX() + 6) / 8; i21++) {
for (int k23 = (player.getLocation().getRegionY() - 6) / 8; k23 <= (player.getLocation().getRegionY() + 6) / 8; k23++)
amt++;
}
Along with this, the base X and base Y of each of the region can be calculated:
for (int i21 = (player.getLocation().getRegionX() - 6) / 8; i21 <= (player.getLocation().getRegionX() + 6) / 8; i21++) {
for (int k23 = (player.getLocation().getRegionY() - 6) / 8; k23 <= (player.getLocation().getRegionY() + 6) / 8; k23++)
System.out.println(i21 + " X " + (i21 << 6) + "," + k23 + " Y " + (k23 << 6));;;
}
The 'X' and 'Y' coordinates represents the coordinates of the region as depicted in the diagram. After the regions are loaded they are trimmed to the tiles that are necessary.
Example Location class
The following is an example Location class written by sinisoul. It is not heavily commented due to it being a very simple class, and it should be easy to follow if you read this section in full.
package net.forge.content.world.node;
/**
* RuneForge (317)
* @version 1.0.0
* @author SiniSoul (SiniSoul@live.com)
*/
public final class Location {
/**
* The Tile X and Y coordinates.
*/
private int tilex = 0,
tiley = 0;
/**
* The Height of the location.
*/
private int height = 0;
/**
* The asynchronous Chunk X and Y coordinates; used in region updating.
*/
private int chunkx = 0,
chunky = 0;
public void setTileX(int tilex) {
this.tilex = (tilex & 0xFFFF);
}
public int getTileX() {
return tilex;
}
public void setTileY(int tiley) {
this.tiley = (tiley & 0xFFFF);
}
public int getTileY() {
return tiley;
}
/**
* @param formatted If the chunk is formatted for map positioning or
* other formatted chunk comparison.
*/
public int calculateChunkX(boolean formatted) {
return formatted ? (getTileX() >> 3) - 6 : (getTileX() >> 3);
}
/**
* @param formatted If the chunk is formatted for map positioning or
* other formatted chunk comparison.
*/
public int calculateChunkY(boolean formatted) {
return formatted ? (getTileY() >> 3) - 6 : (getTileY() >> 3);
}
public void updateChunkX() {
this.chunkx = calculateChunkX(true);
}
public void updateChunkY() {
this.chunkx = calculateChunkY(true);
}
public int getChunkX() {
return chunkx;
}
public int getMapLocalX() {
return getTileX() - (getChunkX() << 3);
}
public int getChunkY() {
return chunky;
}
public int getMapLocalY() {
return getTileX() - (getChunkY() << 3);
}
public void setHeight(int height) {
this.height = (height & 0x3);
}
public int getHeight() {
return height;
}
public int getRegionX() {
return calculateChunkX(false) >> 3;
}
public int getRegionLocalX() {
return getTileX() - (getRegionX() << 6);
}
public int getRegionY() {
return calculateChunkY(false) >> 3;
}
public int getRegionLocalY() {
return getTileY() - (getRegionY() << 6);
}
public void set(int tilex, int tiley, int height) {
setTileX(tilex);
setTileY(tiley);
setHeight(height);
}
public Location(int tilex, int tiley, int height) {
set(tilex, tiley, height);
updateChunkX();
updateChunkY();
}
}
Censorship
Chat message censorship is applied client-side.
Traditionally, the use of bad words does not always result in a punishment, unless if applied manually by a staff member.
Process
There are four related cache files which are loaded and used in censorship.
They are as follows:
Cache file name | Purpose |
---|---|
fragmentsenc.txt | ? |
badenc.txt | Contains bad words, including variations (e.g. fuck , fok , etc.). |
domainenc.txt | Contains bad domain names. |
tldlist.txt | Contains possible top-level domain names. |
When an input is received, if bad phrases are found they are replaced with a sequence of astericks.
Bad phrases are either a bad word, or a combination of a bad domain name and a top-level domain name.
Mouse coordinate tracking
There is a mechanicsm of mouse coordinate tracking within the client.
This records the (x, y)
coordinates of the mouse, and sends them
back to the server each tick.
When the client connects with the server, after it receives the player privilege, it receives a byte denoting whether or not the client should send these coordinates to the server periodically.
Packet structure
byte opcode = 45;
byte dummy = 0;
byte[] mouse_data;
Class check
The class check originated with the new Runescape engine update which took place around the 4xx revisions. It gives the Jagex servers the ability to check the modifiers, update, or fetch the value for a field. It also gives functionality to invoke a method with parameters and get it's return value, or check it's modifiers. Each of these functionalities are described with a request type. A class check request is built up with many of these request types. Each request is tagged with an unique id.
Request format
unsigned byte numberOfRequests;
int uid;
byte[] requests_block;
The requests_block
is comprised of multiple requests, each with the following format:
unsigned byte type;
type-dependent data;
Response format
int uid;
byte[] responses_block;
short payloadCrc;
The responses_block
is comprised of multiple responses, each with the following format:
byte responseCode;
type-dependent data;
Request Types
For request types 0, 2, 4 there will only be one successful response code and a short value of the value being requested will be sent. For request type 1, only the successful response code will be used but no value will be sent back.
Opcode | Name | Description |
---|---|---|
0 | Fetch fumeric field | Fetches the value of a numeric field. |
1 | Update numeric field | Updates the value of a numeric field. |
2 | Get field modifiers | Gets the modifiers of a field. |
3 | Invoke method | Invokes a method and sends back its return object. |
4 | Get method modifiers | Gets the modifiers of a method. |
Return Codes
For opcode 0, there are cases where a numeric value is sent to the server on fetch requests. This value is always a short.
For a method invoke request, there isn't a value that is sent to the server. It is just assumed that there wasn't a return object from the invoked method.
Opcode | Name | On Receive/Response | Description |
---|---|---|---|
0 | Successful | Response | Successfully executed the request. |
1 | Successful - Returned numeric value | Response | Successfully executed the request, and returned a numeric value. |
2 | Successful - Returned string value | Response | Successfully executed the request, and returned a string value. |
4 | Successful - Returned object value | Response | Successfully executed the request, and returned an object value. |
-1 | ClassNotFoundException | Receive | A ClassNotFoundException was thrown while receiving a request from the server. |
-2 | SecurityException | Receive | A SecurityException was thrown while receiving a request from the server. |
-3 | NullPointerException | Receive | A NullPointerException was thrown while receiving a request from the server. |
-4 | Exception | Receive | An Exception was thrown while receiving a request from the server. |
-5 | Throwable | Receive | An error or exception was thrown while receiving a request from the server. |
-10 | ClassNotFoundException | Response | A ClassNotFoundException was thrown while responding to a request from the server. |
-11 | InvalidClassException | Response | An InvalidClassException was thrown while responding to a request from the server. |
-12 | StreamCorruptedException | Response | A StreamCorruptedException was thrown while responding to a request from the server. |
-13 | OptionDataException | Response | An OptionDataException was thrown while responding to a request from the server. |
-14 | IllegalAccessException | Response | An IllegalAccessException was thrown while responding to a request from the server. |
-15 | IllegalArgumentException | Response | An IllegalArgumentException was thrown while responding to a request from the server. |
-16 | InvocationTargetException | Response | An InvocationTargetException was thrown while responding to a request from the server. |
-17 | SecurityException | Response | A SecurityException was thrown while responding to a request from the server. |
-18 | IOException | Response | An IOException was thrown while responding to a request from the server. |
-19 | NullPointerException | Response | A NullPointerException was thrown while responding to a request from the server. |
-20 | Exception | Response | An Exception was thrown while responding to a request from the server. |
-21 | Throwable | Response | An error or exception was thrown while receiving a request from the server. |
RuneScape Protocol
The RuneScape Protocol is the protocol used for data transmission between the RuneScape client and server. The protocol changes with every revision, however, typically only the packet opcodes are changed, and possibly some new packets are added.
The entire protocol is generally separated into two sub-protocols:
- Login Protocol
- Game Protocol
Login Protocol
The Login Protocol is the protocol that is used to log a player into RuneScape. This protocol contains information that sets up the encryption for the entire session, using the ISAAC algorithm. The "login block" is encrypted using RSA to prevent third party programs from packet-sniffing the ISAAC cipher keys and breaking the session encryption for the purpose of monitoring, injecting, and generally sniffing packets.
Game Protocol
The Game Protocol is the protocol in which game action information is transmitted. The opcodes are encrypted using ISAAC in order to prevent third party programs from tampering with the stream. The game protocol is made up of packets that are structured like so:
for fixed-size packets:
opcode, payload[size]
for variable-sized packets:
opcode, size, payload[size]
The opcode
of a game packet is basically an identifier for the type
of game action that the packet represents. The size
of the packet is
the amount of bytes that the payload of the packet carries, and the
payload
is an array of bytes that holds the actual data
(information) of the packet.
A fixed-size
packet is a packet whose payload size does never
change, and the size for the specified opcode is already known between
both client and server. A variable-sized
packet is a packet whose
payload size changes according to the situation of the game session.
Protocol #135 (RSC)
This is a RuneScape Classic protocol. You can find a partially refactored client for it here.
Packet structure
if (len >= 160 {
[byte] (160 + (len / 256))
[byte] (len & 0xff)
} else {
[byte] len
if (len > 0) {
len--; // skip it
[byte] data[len] // last byte
}
}
[byte] opcode
for (int i = 0; i < len; i++)
[byte] data[i]
Byte order
This protocol uses big-endian byte order exclusively.
Data types
Name | Description |
---|---|
int8 | An 8-bit integer (i.e. byte) |
int16 | An 16-bit integer (i.e. short/Word) |
int32 | An 32-bit integer (i.e. int/DWord) |
int64 | An 64-bit integer (i.e. long/QWord) |
Note: If the name is postfixed with u
, it means that the type is unsigned.
Note: If the name is postfixed with a
, then when writing, increment the MSB
(most significant byte, or first byte) by 128.
When reading, if the first byte unsigned is lower than 128, that's your
value, otherwise decrement the first byte by 128 and read as normally.
Bit access
private static final int bitmasks[] = {
0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535,
0x1ffff, 0x3ffff, 0x7ffff, 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, 0x1ffffff,
0x3ffffff, 0x7ffffff, 0xfffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, -1
};
public void start_bit_access() {
bitpos = offset * 8;
}
public void write_bits(int num, int val) {
int bytepos = bitpos >> 3;
int bitoffset = 8 - (bitpos & 7);
bitpos += num;
for (; num > bitoffset; bitoffset = 8) {
buffer[bytepos] &= ~bitmasks[bitoffset];
buffer[bytepos++] |= (val >> (num - bitoffset)) & bitmasks[bitoffset];
num -= bitoffset;
}
if (num == bitoffset) {
buffer[bytepos] &= ~bitmasks[bitoffset];
buffer[bytepos] |= val & bitmasks[bitoffset];
} else {
buffer[bytepos] &= ~(bitmasks[num] << (bitoffset - num));
buffer[bytepos] |= (val & bitmasks[num]) << (bitoffset - num);
}
}
public void end_bit_access() {
offset = (bitpos + 7) / 8;
}
Reference
Player usernames are encoded and decoded with the following methods:
public static long encode_37(String s) {
String s1 = "";
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 'a' && c <= 'z')
s1 = s1 + c;
else if (c >= 'A' && c <= 'Z')
s1 = s1 + (char) ((c + 97) - 65);
else if (c >= '0' && c <= '9')
s1 = s1 + c;
else
s1 = s1 + ' ';
}
s1 = s1.trim();
if (s1.length() > 12)
s1 = s1.substring(0, 12);
long l = 0L;
for (int j = 0; j < s1.length(); j++) {
char c1 = s1.charAt(j);
l *= 37L;
if (c1 >= 'a' && c1 <= 'z')
l += (1 + c1) - 97;
else if (c1 >= '0' && c1 <= '9')
l += (27 + c1) - 48;
}
return l;
}
public static String decode_37(long l) {
String s = "";
while (l != 0L) {
int i = (int) (l % 37L);
l /= 37L;
if (i == 0) {
s = " " + s;
} else if (i < 27) {
if (l % 37L == 0L)
s = (char) ((i + 65) - 1) + s;
else
s = (char) ((i + 97) - 1) + s;
} else {
s = (char) ((i + 48) - 27) + s;
}
}
return s;
}
Chat messages are encoded and decoded with the following methods:
public static byte encodedmsg[] = new byte[100];
public static char decodedmsg[] = new char[100];
private static char charmap[] = {
' ', 'e', 't', 'a', 'o', 'i', 'h', 'n', 's', 'r', 'd', 'l', 'u', 'm', 'w', 'c', 'y', 'f',
'g', 'p', 'b', 'v', 'k', 'x', 'j', 'q', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', ' ', '!', '?', '.', ',', ':', ';', '(', ')', '-', '&', '*', '\\', '\'', '@', '#', '+',
'=', '\243', '$', '%', '"', '[', ']'
};
public static String decode_msg(byte buffer[], int off, int enclen) {
try {
int i = 0;
int j = -1;
for (int k = 0; k < enclen; k++) {
int l = buffer[off++] & 0xff;
int i1 = l >> 4 & 0xf;
if (j == -1) {
if (i1 < 13)
decodedmsg[i++] = charmap[i1];
else
j = i1;
} else {
decodedmsg[i++] = charmap[((j << 4) + i1) - 195];
j = -1;
}
i1 = l & 0xf;
if (j == -1) {
if (i1 < 13)
decodedmsg[i++] = charmap[i1];
else
j = i1;
} else {
decodedmsg[i++] = charmap[((j << 4) + i1) - 195];
j = -1;
}
}
boolean flag = true;
for (int j1 = 0; j1 < i; j1++) {
char c = decodedmsg[j1];
if (j1 > 4 && c == '@')
decodedmsg[j1] = ' ';
if (c == '%')
decodedmsg[j1] = ' ';
if (flag && c >= 'a' && c <= 'z') {
decodedmsg[j1] += '\uFFE0';
flag = false;
}
if (c == '.' || c == '!')
flag = true;
}
return new String(decodedmsg, 0, i);
} catch (Exception ex) {
return "Cabbage";
}
}
public static int encode_msg(String str) {
if (str.length() > 80)
str = str.substring(0, 80);
str = str.toLowerCase();
int enclen = 0;
int i = -1;
for (int j = 0; j < str.length(); j++) {
char c = str.charAt(j);
int k = 0;
for (int l = 0; l < charmap.length; l++) {
if (c != charmap[l])
continue;
k = l;
break;
}
if (k > 12)
k += 195;
if (i == -1) {
if (k < 13)
i = k;
else
encodedmsg[enclen++] = (byte) k;
} else if (k < 13) {
encodedmsg[enclen++] = (byte) ((i << 4) + k);
i = -1;
} else {
encodedmsg[enclen++] = (byte) ((i << 4) + (k >> 4));
i = k & 0xf;
}
}
if (i != -1)
encodedmsg[enclen++] = (byte) (i << 4);
return enclen;
}
Login
- The username and password are prepared by replacing any spaces or illegal characters with _ and appending spaces to the string until its length is 20.
- The connection with the server is established.
- The client reads a raw long from the server, this is the "session id".
- The client creates a new frame, opcode 0 or 19 if the player is reconnecting.
- A short, the client's revision number (135) is placed in the buffer.
- A long, the player's username encoded with mod37 (see above) is placed in the buffer.
- A string encoded with RSA and the player's session id (the password) is placed in the buffer.
- An integer, the player's "ranseed" value is placed in the buffer.
- "ranseed" does not seed anything. RSC135 does not use ISAAC ciphering. It is an applet parameter or read from uid.dat. Presumably, it was used to identify players connecting from the same computer.
- The stream is then flushed.
- A byte is read from the stream and discarded.
- Another byte is read, this is the login response code from the server.
Login responses
Response Code | Description |
---|---|
0 | Success. |
1 | ? |
3 | Invalid username or password. |
4 | Username already in use. |
5 | Client has been updated. |
6 | IP address already in use. |
7 | Login attempts exceeded. |
11 | Account temporarily disabled. |
12 | Account permanently disabled. |
15 | Server is currently full. |
16 | Members-only server. |
17 | Members only area? |
Registration
- The username and password are prepared. This is done by replacing any spaces or illegal characters with _ and appending spaces to the string until its length is 20.
- The connection with the server is established.
- The client reads a raw long from the server, this is the "session id".
- The client creates a new frame, opcode 2.
- A short, the client's revision number (135) is placed in the buffer.
- A long, the player's username encoded with mod37 (see above) is placed in the buffer.
- A short, the applet's "referid" parameter is placed in the buffer.
- A string encoded with RSA and the player's session id (the password) is placed in the buffer.
- An integer, the player's "ranseed" value is placed in the buffer. "ranseed" does not seed anything. RSC135 does not use ISAAC ciphering. It is an applet parameter or read from uid.dat. Presumably, it was used to identify players connecting from the same computer.
- The stream is then flushed.
- A byte is read from the stream and discarded.
- Another byte is read, this is the newplayer response code from the server.
Registration responses
Response Code | Description |
---|---|
2 | Success. |
3 | Username already taken. |
5 | Client has been updated. |
6 | IP address already in use. |
7 | Registration attempts exceeded? |
Mob Appearance Update
Firstly, create a new packet with the opcode 250. Write the total number of expected updates (uint16).
Secondly, for each entity to update, write the (server) index of the mob the update applies to (uint16), and the 'update type' (int8) followed by whatever data that type expects.
Update type 1: Public chat messages
- uint8 - The length of the chat message.
- string (raw) - The encoded chat message.
Update type 2: Combat damage
- uint8 - The damage recieved.
- uint8 - That mob's 'current' hitpoints level.
- uint8 - That mob's 'base' hitpoints.
Update type 3/4: Projectiles
The update type is 3 when the target is a NPC, or 4 is the target is a player.
The standard magic projectile id is 1, and the standard ranged projectile id is 2.
- uint16 - The projectile's id.
- uint16 - The (server) index of the projectile's target entity.
Update type 5: Appearance
Hair style, body type, leg type, and colours are as they are sent by the client's character design packet.
- uint16 - The player's status? Doesn't appear to do anything.
- int64 - The player's username encoded with mod37.
- uint8 - The size of the sub-update.
- uint8 - The player's hair style + 1, or 0 if they are wearing a helmet.
- uint8 - The player's body type + 1, or 0 if they are wearing a platebody.
- uint8 - The player's leg type + 1, or 0 if they are wearing legs.
- uint8 - The animation id + 1 (look in the client) of the player's offhand item or 0.
- uint8 - The animation id + 1 of the player's hand item or 0.
- uint8 - The animation id + 1 of the player's head item or 0.
- uint8 - The animation id + 1 of the player's body item or 0.
- uint8 - The animation id + 1 of the player's leg item or 0.
- uint8 - The animation id + 1 of the player's neck item or 0.
- uint8 - The animation id + 1 of the player's shoes or 0.
- uint8 - The animation id + 1 of the player's gloves or 0.
- uint8 - The animation id + 1 of the player's cape or 0.
- uint8 - The player's hair colour.
- uint8 - The player's top colour.
- uint8 - The player's leg colour.
- uint8 - The player's skin colour.
- uint8 - The player's combat level.
- uint8 - 1 if the player is skulled.
Packets
The packet opcodes are unchanged from previous revisions, presumably this was before the protocol was being regularly modified to deter the developers of bots such as AutoRune.
The payload/structure is quite similar to most other RSC revisions.
Incoming packets
'''TODO: Duelling stuff, 240''' {| class="wikitable" |- ! scope="col" width="140px" | Name ! scope="col" width="50px" | Opcode ! scope="col" width="350px" | Payload ! scope="col" width="300px" | Description |- ! Display Message | 8 || * string - A raw string, the message. | Informs the client of a line to be printed in the in-game message box. Messages preceded by @que@ are sent to the quest history box, messages preceded by @pri@ are sent to the private chat history box. |- ! Close Connection | 9 || * None | Forces the client to log out. |- ! Logout Failed | 10 || * None | You can't log out now! |- ! Initialize Friends List | 23 || * uint8 - The total number of players in the list. * int64... - The friend's username, encoded with mod37. * uint8... - The world the friend is logged in to. 0 indicates the player is logged out. | Initializes the player's friends list. Variable length. |- ! Update Friends List | 24 || * int64 - The friend's username, encoded with mod37. * uint8 - 0 if the friend is logged in, 1 if the friend is logged out. | Informs the client that a friend has logged in/out or that a new friend has been added to the list. |- ! Initialize Ignore List | 26 || * uint8 - The total number of players in the list. * int64... - The friend's username, encoded with mod37. | Initializes the player's ignore list. Variable length. |- ! Initialize Privacy Settings | 27 || * int8 - 0/1. Block public chat messages. * int8 - 0/1. Block private chat messages. * int8 - 0/1. Block trade requests. * int8 - 0/1. Block duel requests. | Initializes the player's privacy settings. |- ! Private Message | 28 || * int64 - The sender's username, encoded with mod37. * string - The encoded message. | Sends a private message to the client. |- ! Player Movement | 255 || * bits[10] - This player's x position. * bits[12] - This player's y position. * bits[4] - This player's direction. * bits[8] - The number of players the client already knows about to be sent (but it reads them in order?) ** bits[1]... - If the player has not moved & does not need to be removed, 0 & don't send the next 2 lots of bits, otherwise 1. ** bits[1]... - 1 if the player is to be removed. ** bits[3/4]... - The player's direction. 4 bits with a value of 12 if the player is to be removed, otherwise 3 bits. * bits[11]... - The new player's (server) index. * bits[5]... - The new player's offset x position. * bits[5]... - The new player's offset y position. * bits[4]... - The new player's direction. * bits[1]... - something to do with c>s 254? 0 | Updates the position/movement of the client's player and nearby players. Usually sent every game engine tick (600ms) rather than when needed as with other packets. Offset positions are this_x - player_x and are incremented by 32 if less than zero. Variable length. |- ! Ground Item Positions | 254 || * uint16 - The id of the item to update * int8 - The x position of the item relative to the player (item_x - player_x) * int8 - The y position of the item relative to the player (item_y - player_y) | Updates the positions of nearby ground items. if ((id & 0x8000) == 0), remove the item. Therefore, if the server increments the id by 0x8000, the item will be removed by the client. Variable length. |- ! Object Positions | 253 || * uint16 - The id of the object to update * int8 - The x position of the object relative to the player (object_x - player_x) * int8 - The y position of the object relative to the player (object_y - player_y) | Updates the positions of nearby objects. Variable length. If the id is real fuckin' big, remove it. |- ! Whole Inventory | 252 || * uint8 - The number of items in the player's inventory. * uint16... - The item's id. If equipped, increment by 0x8000. * int32a... - The item's stack size. Only sent when the item is stackable. | Sends over the player's whole inventory. Variable length. |- ! Player Appearance | 250 || * See [[135 Protocol#Mob Appearance Update|Mob Appearance Update]] | Updates things to do with nearby players that aren't related to movement. |- ! Boundary Positions | 249 || * uint16 - The id of the bound to update * int8 - The x position of the bound relative to the player (object_x - player_x) * int8 - The y position of the bound relative to the player (object_y - player_y) * int8 - The bound's direction | Updates the positions of nearby bounds. Variable length. If the id is real fuckin' big, remove it. |- ! NPC Movement | 248 || * bits[8] - The number of NPCs the client already knows about to be sent (but it reads them in order?). ** bits[1]... - 1 if the NPC has moved, otherwise 0 & don't send the next 2 lots of bits. ** bits[1]... - 1 if the NPC is to be removed, otherwise 0. ** bits[3/4]... - The NPC's direction, 4 bits with a value of 12 if the NPC is to be removed, otherwise 3 bits. * bits[11]... - The new NPC's (server) index. * bits[5]... - The new NPC's offset x position. * bits[5]... - The new NPC's offset y position. * bits[4]... - The new NPC's direction. * bits[9]... - The new NPC's id. | Updates the positions/movement of nearby NPCs. Usually sent every game engine tick (600ms) rather than when needed as with other packets. Offset positions are player_x - npc_x and are incremented by 32 if less than zero. Variable length. |- ! NPC Appearance | 247 || * See [[135 Protocol#Mob Appearance Update|Mob Appearance Update]]. | Updates things to do with nearby NPCs that aren't related to movement. Only the first two update types apply (NPCs cannot send projectiles or have changed sprites). NPC server index is used instead of player server index, obviously. |- ! Display Dialog | 246 || * uint8 - The total number of options. * uint8... - The length of the option string. * string... - The option string. | Displays a NPC chat dialog. Variable length. |- ! Hide Dialog | 245 || * None | Hides the NPC chat dialog. |- ! Initialize Plane | 244 || * uint16 - The player's server index. * uint16 - The width of the plane. (2304) * uint16 - The height of the plane. (1776) * uint16 - The index of the plane. (player_y / multiplier) * uint16 - The plane multiplier. (944) | Initializes the plane. Sent when the player first logs in, and when the player is teleported or moves up/down a height. |- ! All Skills | 243 || * for (int i = 0; i < skill_count; i++) * uint8... - The skill's current level. * for (int i = 0; i < skill_count; i++) * uint8... - The skill's base level. * for (int i = 0; i < skill_count; i++) * int32... - The skill's xp points. * uint8
- The player's quest points. | Updates all of the player's skills and quest points. The 135 client reads 18 skills: Attack, Defense, Strength, Hits, Ranged, Prayer, Magic, Cooking, Woodcutting, Fletching, Fishing, Firemaking, Crafting, Smithing, Mining, Herblaw, Carpentry, Thieving. |- ! Equipment Bonuses | 242 || * uint8 - The armour's bonus. * uint8 - The weapon's accuracy bonus. * uint8 - The weapon's strength bonus. * uint8 - The magic bonus. * unit8 - The prayer bonus. | Updates the player's equipment bonuses. Variable length. |- ! Player Death | 241 || * None | Displays the "Oh dear! You are dead..." screen. |- ! Environment | 240 || * ? | Doesn't appear to be important when you have everything else. It might be useful to have though, so why don't you be kind and document it? :) |- ! Display Character Design | 239 || * None | Displays the character design interface. |- ! Display Trade Offer | 238 || * uint16 - The server index of the player we are trading with. | Displays the trade offer interface. |- ! Hide Trade | 237 || * None | Hides the trade offer and confirm interfaces. |- ! Update Trade Offer | 236 || * int8 - The number of items the other player has traded. * uint16... - The item's id. * int32a... - The item's stack size. | Updates the other player's trade offer. |- ! Other's Trade Status | 235 || * int8 - 1 = yes, anything else = no | Has the other player accepted the trade offer? |- ! Display Shop | 234 || * uint8 - The number of items in the shop. * int8 - 1 if the shop is a general store. * uint8 - This shop's selling price modifier. * uint8 - This shop's buying price modifier. * uint16... - The item's id. * uint16... - The item's stack size. * uint8... - The item's price. | Displays the shop interface. Variable length. |- ! Hide Shop | 233 || * None | Hides the shop interface. |- ! Our Trade Status | 229 || * int8 - 1 = yes, anything else = no | Have we accepted the trade offer? |- ! Init Game Settings | 228 || * int8 - Automatic camera rotation. 1 = enabled, anything else is disabled. * int8 - Single mouse button. 1 = enabled, anything else is disabled. * int8 - Sound effects. 1 = disabled, anything else is enabled. | Sets the player's gameplay settings. |- ! Set Prayers | 227 || * int8... - The prayer's status. 1 = enabled, anything else is disabled. | Sets the status of every prayer. Variable length. |- ! Set Quests | 226 || * int8... - The quest's completion status. 1 = completed, anything else is incomplete. | Sets the player's quest completion status. Variable length. |- ! Display Bank | 222 || * uint8 - The number of items in the player's bank. * uint8 - The maximum number of items the player is allowed to store. * uint16... - The item's id. * int32a... - The item's stack size. | Displays the bank interface. Variable length. |- ! Hide Bank | 221 || * None | Hides the bank interface. |- ! Bank Update | 214 || * uint8 - The item's slot. * uint16 - The item's id. * int32a - The item's stack size. 0 to remove. | Updates/adds/removes a single item in the bank interface to save bytes. |- ! Single XP Update | 220 || * uint8 - The skill's id. * int32 - The skill's xp. | Updates a single skill's XP to save bytes. |- ! Update InvItem | 213 || * uint8 - The item's slot. * uint16 - The item's id. Increment by 0x7fff to change stack size. * int32a - The item's stack size. May not be read. | Adds a single item, or changes the ID, or changes the stack size to save bytes. If id / 32768 == 1, the item is equipped. |- ! Remove InvItem | 212 || * uint8 - The item's slot. | Removes a single item from the player's inventory to save bytes. |- ! Single Skill Update | 211 || * uint8 - The skill's id. * uint8 - The skill's current level. * uint8 - The skill's base level. * int32 - The skill's experience points. | Updates a single skill to save bytes. |- ! Play Sound | 207 || * byte[] - The name of the sound. | Plays a sound/audio file in the client. |- ! Open Character Design Panel | 203 || * None. | Open the character design panel. |- |} === '''Outgoing Data''' === '''TODO: recovery questions''' {| class="wikitable" |- ! scope="col" width="140px" | Name ! scope="col" width="50px" | Opcode ! scope="col" width="350px" | Payload ! scope="col" width="300px" | Description |- ! Login | 0 || * See [[135 Protocol#Login|Login]] | Logs the player in. |- ! Reconnect | 19 || * See [[135 Protocol#Login|Login]] | Reconnects the player after they are disconnected. |- ! Disconnect | 1 || * None | Sent after the server sends Close Connection (opcode 9), possibly to notify the server that the player is to be removed. |- ! Newplayer (Registration) | 2 || * See [[135 Protocol#Registration|Registration]] | Registers a new user. |- ! Public Chat | 3 || * String - The encoded message. | Sends a message to public chat. |- ! Ping | 5 || * None | Ping |- ! Attempt Logout | 6 || * None | Inform the server that the client is attempting to log out |- ! Admin Command | 7 || * String - The command | Sends a command to the server to be executed |- ! Report Abuse | 10 || * int64 - The mod37 encoded username to report | Sends an abuse report to the server |- ! Change Password | 25 || * RSAString - Your old password + new password encoded with RSA * Old password substring - RSAString.substring(0,20).trim() * New password substring - RSAString.substring(20, RSAString.length()).trim(); | Is used to change your password ingame |- ! Add Friend | 26 || * int64 - mod37 encoded username | Adds a user to your friends list |- ! Remove Friend | 27 || * int64 - The mod37 encoded username to report | Removes a user from your friends list |- ! Private Message | 28 || * int64 - The mod37 encoded username to send the message to * String - The message, scrambed | Sends a message to the specified user |- ! Ignore User | 29 || * int64 - The mod37 encoded username to ignore | Adds a user to your ignore list |- ! Remove Ignore | 30 || * int64 - mod37 encoded username | Removes a user from your ignore list |- ! Update Privacy Settings | 31 || * int8 - 1 to block public chat * int8 - 1 to block private chat * int8 - 1 to block trade requests * int8 - 1 to block duel requests | Updates the privacy settings |- ! Walk to Tile | 255 || * int16 - (start_x + area_x). The initial position. * int16 - (start_y + area_y) * int8... - (route_x[i] - start_x) * int8... - (route_y[i] - start_y) | Variable length. Walks to a tile. The number of steps can be calculated by dividing the available data by 2. |- ! Walk to Entity | 215 || * The same as
- | Variable length. Walks to an entity. The number of steps can be calculated by dividing the available data by 2. |- ! Player Response | 254 || * int16 - The number of players sent * int16... - The player's server index * int16... - The player's status, as sent with the appearance update packet | Variable length. Informs the server of players the client knows about after a positions/movement update packet. |- ! Drop Item | 251 || * int16 - The slot of the item to drop | Drops the specified item on the ground |- ! Cast on Item | 220 || * int16 - The slot of the item to cast a spell on * int16 - The id of the spell to cast | Casts a spell (such as High Alchemy) on the specified item |- ! Use with Item | 240 || * int16 - The slot of the first item to use * int16 - The slot of the second item to use | Uses an item in the player's inventory with another item in the player's inventory |- ! Remove Item | 248 || * int16 - The slot of the item to unequip | Unequips the specified inventory item |- ! Wear Item | 249 || * int16 - The slot of the item to equip | Equips the specified inventory item |- ! Item Command | 246 || * int16 - The slot of the item to use | Buries, eats, etc the specified inventory item |- ! Select Option | 237 || * int8 - The position of the option in the dialog_options array | Selects an option in a NPC dialog |- ! Combat Style | 231 || * int8 - The position of the combat style in the list | Sets the player's combat style. * 0 - Controlled * 1 - Aggressive * 2 - Accurate * 3 - Defensive |- ! Close Bank | 207 || * None | Informs the server that the player has closed the banking interface. |- ! Withdraw Item | 206 || * int16 - The ID of the item to withdraw * int16 - The amount of the specified item to withdraw | Withdraws a single type of item from the player's bank. |- ! Deposit Item | 205 || * int16 - The ID of the item to deposit * int16 - The amount of the specified item to deposit | Deposits a single type of item into the player's bank. |- ! Disable Prayer | 211 || * int8 - The ID of the prayer to disable | Disables a prayer. |- ! Enable Prayer | 212 || * int8 - The ID of the prayer to enable | Enables a prayer. |- ! Update Game Setting | 213 || * int8 - The setting type * int8 - The setting value (1 or 0) | Setting types: * 0
-
Camera angle mode (auto/manual) * 1 - Number of mouse buttons (1/2) * 2 - Sound effects (off/on) |- ! Confirm Trade | 202 || * None | Confirms the trade offer. |- ! Accept Trade | 232 || * None | Accepts the trade offer. |- ! Decline Trade | 233 || * None | Declines the trade offer. |- ! Trade Update | 234 || * int8 - The amount of traded items to send to the server * int16... - The id of the item * int32... - The amount/stack size of the item | Variable length. Updates the trade offer. |- ! Cast on GItem | 224* || * int16 - The item's X coordinate * int16 - The item's Y coordinate * int16 - The item's ID * int16 - The spell's ID | Casts a spell on an item on the ground. |- ! Use with GItem | 250* || * int16 - The item's X coordinate * int16 - The item's Y coordinate * int16 - The item's ID * int16 - The inventory slot | Uses an item in the player's inventory with an item on the ground. |- ! Take GItem | 252* || * int16 - The item's X coordinate * int16 - The item's Y coordinate * int16 - The item's ID | Picks up an item on the ground. |- ! Cast on Boundary | 223* || * int16 - The bound's X coordinate * int16 - The bound's Y coordinate * int8 - The bound's direction * int16 - The spell's ID | Casts a spell on a boundary (or 'wall object'). |- ! Use with Boundary | 239* || * int16 - The bound's X coordinate * int16 - The bound's Y coordinate * int8 - The bound's direction * int16 - The inventory slot | Uses an item in the player's inventory with a boundary (or 'wall object'). |- ! Boundary Cmd 1 | 238* || * int16 - The bound's X coordinate * int16 - The bound's Y coordinate * int8 - The bound's direction | Performs the primary action (usually 'open') on a boundary (or 'wall object'). |- ! Boundary Cmd 2 | 229* || * int16
-
The bound's X coordinate * int16 - The bound's Y coordinate * int8 - The bound's direction | Performs the secondary action (usually 'close' or 'picklock') on a boundary (or 'wall object'). |- ! Cast on Object | 222* || * int16 - The object's X coordinate * int16 - The object's Y coordinate * int16 - The spell's ID | Casts a spell on an object. |- ! Use with Object | 241* || * int16 - The object's X coordinate * int16 - The object's Y coordinate * int16 - The inventory slot | Uses an item in the player's inventory with an object. |- ! Object Cmd 1 | 241* || * int16 - The object's X coordinate * int16 - The object's Y coordinate | Performs the primary action on an object (for example, 'mine'). |- ! Object Cmd 2 | 230* || * int16 - The object's X coordinate * int16 - The object's Y coordinate | Performs the secondary action on an object (for example, 'prospect'). |- ! Cast on NPC | 225* || * int16 - The NPC's server index * int16 - The spell's ID | Casts a spell on a non-player character. |- ! Use with NPC | 243* || * int16 - The NPC's server index * int16 - The inventory slot | Uses an item in the player's inventory with a non-player character. |- ! Talk to NPC | 245* || * int16 - The NPC's server index | Starts talking to a non-player character. |- ! Attack NPC | 244* || * int16 - The NPC's server index | Starts attacking a non-player character. |- ! NPC Cmd 2 | 195* || * int16
-
The NPC's server index | Performs the secondary action on a non-player character, usually 'pickpocket'. |- ! Cast on Self | 227 || * int16 - The spell's ID | Cast a teleport or charge spell on the local player. |- ! Cast on Player | 226* || * int16 - The player's server index * int16 - The spell's ID | Casts a spell on another player. |- ! Use with Player | 219* || * int16 - The player's server index * int16 - The inventory slot | Uses an item (for example, a Gnomeball, or a Christmas cracker) on another player. |- ! Attack Player | 228* || * int16 - The player's server index | Starts attacking another player. |- ! Trade Player | 235 || * int16 - The player's server index | Sends a trade request to another player. |- ! Follow Player | 214 || * int16 - The player's server index | Starts following another player. |- ! Duel Player | 204 || * int16 - The player's server index | Sends a duel request to another player. |- ! RuntimeException | 17 || * String - The text of the error. | Sent when the client throws an exception while processing data sent by the server. |- ! Confirm Duel Offer | 198 || * None | Confirms the duel offer. |- ! Accept Duel Offer | 199 || * None | Accepts the duel offer. |- ! Duel Settings | 200 || * int8 - No retreating, 1 or 0 * int8 - No magic, 1 or 0 * int8 - No prayers, 1 or 0 * int8 - No weapons, 1 or 0 | Updates the duel settings. |- ! Duel Items | 201 || * int8 - The total number of offered items * int16... - Offered item ID * int32... - Offered item stack size | Variable length. Updates the stake. |- ! Decline Duel Offer | 203 || * None | Declines the duel offer. |- ! Character Design | 236 || * int8 - The player's gender - 2=Female, 1=Male * int8 - The player's hair style * int8 - The player's 'body type' - 4=Female, 1=Male * int8 - The player's 'leg type' - always 2 * int8 - The player's hair colour * int8 - The player's top colour * int8 - The player's leg colour * int8
-
The player's skin colour * int8 - The player's class | Submits the player's chosen design when they log in for the first time. * 0 - Adventurer class * 1 - Warrior class * 2 - Wizard class * 3 - Ranger class * 4 - Miner class |} Notes:
- Opcodes marked with * are preceded by Walk to Entity.
- When closing the duel confirm screen, it may send the decline trade packet, for some reason.
[[Category Packet]] [[Category Packet 194]] [[Category RS2]]
Just in case somebody cares about this.
== '''Packet structure''' == ?
== '''Login''' == ?
== '''Game Protocol''' ==
===Server -> Client Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 137 | FIXED | 2 | [[194 Show interface|Show interface]] | Displays a normal interface. |- | 164 | VARIABLE_BYTE | N/A | [[194 Send message|Send message]] | Sends a server message (e.g. 'Welcome to RuneScape') or trade/duel request. |- | 192 | FIXED | 0 | [[194 Logout|Logout]] | Disconnects the client from the server. |- | 206 | VARIABLE_BYTE | N/A | [[194 Set MIDI|Set MIDI]] | Sets the current song playing on the client. |- | 210 | FIXED | 3 | [[194 Send sidebar interface|Send sidebar interface]] | Assigns an interface to one of the tabs in the game sidebar. |- | 240 | FIXED | 0 | [[194 Clear screen|Clear screen]] | Clears the screen of all open interfaces. |- |}
===Client -> Server Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 54 | VARIABLE_BYTE | N/A | Send Chat Message | Sends a chat message to the server. |- | 237 | VARIABLE_BYTE | N/A | Send Command | Sends a command (any message prefixed with ::) to the server. |- |}
[[Category Packet]] [[Category Packet 194]] {{packet|name=Clear screen|description=Clears the screen of all open interfaces.|opcode=240|type=Fixed|length=0|revision=194}} == Clear Screen ==
=== Description ===
Removes all open interfaces from the players screen.
[[Category Packet]] [[Category Packet 194]] {{packet|name=Logout|description=Forces the client to logout.|opcode=192|type=Fixed|length=0|revision=194}} == Send Message ==
=== Description ===
Forces the client to logout cleanly and return to the login screen, without attempting a reconnection.
[[Category Packet]] [[Category Packet 194]] {{packet|name=Show interface|description=Displays a normal interface.|opcode=137|type=Fixed|length=2|revision=194}} == Show interface ==
=== Description ===
Displays a normal interface with the given id.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Short]] | The interface id. |- |}
[[Category RSC]]
This page refers to the RSC #202 client revision (the original distribution by eXemplar)
== '''Packet structure''' == ?
== '''Login''' == ?
== '''Incoming Data''' == '''TODO:''' Document packet structures
#define IDX_WEIRD_USERNAME 32 #define IDX_LOGIN 0 #define IDO_LOGOUT_ACK 39 // acknowledge logout command from server #define IDO_PING 153 // send ping to server, so it knows we're still there #define IDO_IGNORE_ADD 25 // add name to ignore list #define IDO_IGNORE_REMOVE 108 // remove name from ignore list #define IDO_FRIENDS_ADD 168 // add name to friends list #define IDO_FRIENDS_REMOVE 52 // remove name from friends list #define IDO_PM_FRIEND 254 // send pm to someone in friends list #define IDO_SEND_CHAT 145 #define IDO_SEND_SERVER_CMD 90 // sends a command to the server (type "::xxx" in chat and it sends command 'xxx') #define IDO_UPDATE_SETTINGS 176 // changes settings (chatblock, privateblock, tradeblock, duelblock) #define IDO_LOGOUT 129 #define IDO_CHAR_DESIGN 218 // send character design (makeover mage, creation) #define IDO_SLEEPWORD 72 #define IDO_NEW_PLAYER_ACK 83 // send ids of newly added player back to server, if it wants to #define IDO_EXCEPTION_SEND 156 #define IDO_WALKCMD_1 246 #define IDO_WALKCMD_2 132 #define IDO_CLICKDIALOGITEM 154 #define IDO_SETCOMBATSTYLE 41 #define IDO_WITHDRAW 183 #define IDO_DEPOSIT 198 #define IDO_CLOSE_BANK 48 #define IDO_BUYITEM 128 #define IDO_SELLITEM 255 #define IDO_CLOSE_SHOP 253 #define IDO_CANCEL_TRADE 216 #define IDO_CONFIRM_TRADE 53 #define IDO_TRADE_UPDATE 70 #define IDO_ACCEPT_TRADE 211 #define IDO_DUEL_CONFIRM_1 87 #define IDO_DUEL_UPDATE 123 #define IDO_DUEL_FLAG_1 225 #define IDO_DUEL_FLAG_2 252 #define IDO_CANCEL_DUEL 35 #define IDO_PRAYER_OFF 248 #define IDO_PRAYER_ON 56 #define IDO_CHANGE_SETTINGS 157 // action commands... #define IDO_CAST_GR_ITEM 104 #define IDO_USEWITH_GR_ITEM 34 #define IDO_TAKE_ITEM 245 #define IDO_CAST_WALLOBJ 67 #define IDO_USEWITH_WALLOBJ 36 #define IDO_WALLOBJ_CMD1 126 #define IDO_WALLOBJ_CMD2 235 #define IDO_CAST_OBJECT 17 #define IDO_USEWITH_OBJECT 94 #define IDO_OBJECT_CMD1 51 #define IDO_OBJECT_CMD2 40 #define IDO_CAST_INVITEM 49 #define IDO_USEWITH_INVITEM 27 #define IDO_REMOVE_ITEM 92 #define IDO_WEAR_ITEM 181 #define IDO_INVITEM_CMD 89 #define IDO_DROP_ITEM 147 #define IDO_CAST_NPC 71 #define IDO_USEWITH_NPC 142 #define IDO_TALK_NPC 177 #define IDO_NPC_CMD 74 #define IDO_ATTACK_NPC 73 #define IDO_CAST_PLAYER 55 #define IDO_USEWITH_PLAYER 16 #define IDO_ATTACK_PLAYER 57 #define IDO_DUEL_PLAYER 222 #define IDO_TRADE_PLAYER 166 #define IDO_FOLLOW_PLAYER 68 #define IDO_CAST_GROUND 232 #define IDO_CAST_SELF 206 #define IDO_REPORT_ABUSE 7
opcode | usage | size | payload |
// login responses... #define IDX_MOD_ACCEPTED 25 // logged in as player mod #define IDX_LOGIN_SUCCESS 0 #define IDX_RELOGIN_SUCCESS 1 // connection reestablished after lost connection... #define IDX_WRONG_PWD 3 #define IDX_NAME_LOGGED_IN 4 #define IDX_CLIENT_UPDATED 5 #define IDX_IP_IN_USE 6 #define IDX_LOGINS_EXCEEDED 7 #define IDX_SERV_REJECTED 8 #define IDX_LOGINSERV_REJCT 9 #define IDX_NAME_IN_USE 10 #define IDX_TEMP_DISABLED 11 #define IDX_PERM_DISABLED 12 #define IDX_SERVER_FULL 14 #define IDX_MEMBERACC_REQ 15 // requires member account to login here #define IDX_LOGINSERV_DOWN 16 #define IDX_DECODE_FAIL 17 #define IDX_LOGIN_MISMATCH 20#define IDI_MESSAGE 48 // (game) messages from server #define IDI_LOGOUT 222 // logout command from server (forced, or initiated by client IDO_LOGOUT) #define IDI_LOGOUT_REJECT 136 // not allowed to log out (e.g. when in combat) #define IDI_FRIENDS_LOAD 249 // when logging in, sends the whole friends list to the client #define IDI_FRIEND_LOGGED 25 // a friend from friends list logged in or out (also used to add a friend to friends list) #define IDI_IGNORE_LOAD 2 // when logging in, sends the whole ignore list to the client #define IDI_SETTINGS_LOAD 158 // load settings upon logging in (blocks) #define IDI_FRIENDS_PM 170 // someone pm'd us
#define IDI_PLAYER_MOVEMENT 145 // player movement update #define IDI_GRITEMS_UPDATE 109 // update ground items #define IDI_OBJECTS_UPDATE 27 #define IDI_INV_LOAD 114 // load inventory #define IDI_PLAYER_UPDATE 53 #define IDI_WALLOBJ_UPDATE 95 #define IDI_NPC_MOVEMENT 77 // npc movement update #define IDI_NPC_UPDATE 190 #define IDI_DIALOG_SHOW 223 #define IDI_DIALOG_CLOSE 127 #define IDI_LOAD_NEWMAPAREA 131 // entering a new region (maparea) #define IDI_XP_LOAD 180 // load xp and stats #define IDI_EQUIP_UPDATE 177 // equipment stats (armour, magic, prayer, weapaim/power) #define IDI_PLAYER_DIED 165 #define IDI_LOADWORLD 115 // load objects, wallobjects, items #define IDI_DESIGN_CHAR 207 #define IDI_OPEN_TRADE_1 4 #define IDI_CLOSE_TRADE 187 #define IDI_TRADE_UPDATE 250 // opponents offer was updated #define IDI_TRADE_B_UPDATE 92 // update of opponents acception status #define IDI_SHOP_OPEN 253 #define IDI_SHOP_CLOSE 220 #define IDI_TRADE_A_UPDATE 18 // update of thisplayers acception status #define IDI_LOAD_OPTIONS 152 // camera angle, sound, mousebutton settings #define IDI_PRAYER 209 #define IDI_QUESTS 224 #define IDI_BANK_OPEN 93 #define IDI_BANK_CLOSE 171 #define IDI_XP_UPDATE 211 #define IDI_OPEN_DUEL_1 229 #define IDI_CLOSE_DUEL 160 #define IDI_OPEN_TRADE_2 251 // trade confirmation window #define IDI_DUEL_UPDATE 63 // opponents offer was updated #define IDI_DUELOPT_UPDATE 198 // update duel options #define IDI_BANK_UPDATE 139 #define IDI_INV_ADD 228 #define IDI_INV_REMOVE 191 #define IDI_STAT_UPDATE 208 #define IDI_DUEL_B_UPDATE 65 // update of opponents acception status #define IDI_DUEL_A_UPDATE 197 // update of thisplayers acception status #define IDI_OPEN_DUEL_2 147 // duel confirmation window #define IDI_SOUND 11 #define IDI_SPLASH 23 #define IDI_WELCOMEWINDOW 248 #define IDI_MESSAGE_1 148 #define IDI_MESSAGE_2 64 #define IDI_FATIGUE_UPDATE 126 #define IDI_NEW_SLEEPWORD 219 #define IDI_FATIGUE_SLEEPN 168 // fatigue update in sleeping window #define IDI_SLEEP_SUCCESS 103 #define IDI_SLEEP_FAILED 15 #define IDI_SYSTEM_UPDATE 172
opcode | usage | size | payload |
[[Category RSC]]
This page refers to the RSC #204 client revision, all of the opcodes are the same with the exception of the last three in the Outgoing Data section.
== '''Packet structure''' == ?
== '''Login''' == ?
== '''Incoming Data''' == '''TODO:''' Document packet structures
#define IDX_WEIRD_USERNAME 32 #define IDX_LOGIN 0 #define IDO_LOGOUT_ACK 31 // acknowledge logout command from server #define IDO_PING 67 // send ping to server, so it knows we're still there #define IDO_IGNORE_ADD 132 // add name to ignore list #define IDO_IGNORE_REMOVE 241 // remove name from ignore list #define IDO_FRIENDS_ADD 195 // add name to friends list #define IDO_FRIENDS_REMOVE 167 // remove name from friends list #define IDO_PM_FRIEND 218 // send pm to someone in friends list #define IDO_SEND_CHAT 216 #define IDO_SEND_SERVER_CMD 38 // sends a command to the server (type "::xxx" in chat and it sends command 'xxx') #define IDO_UPDATE_SETTINGS 64 // changes settings (chatblock, privateblock, tradeblock, duelblock) #define IDO_LOGOUT 102 #define IDO_CHAR_DESIGN 235 // send character design (makeover mage, creation) #define IDO_SLEEPWORD 45 #define IDO_NEW_PLAYER_ACK 163 // send ids of newly added player back to server, if it wants to #define IDO_EXCEPTION_SEND 3 #define IDO_WALKCMD_1 16 #define IDO_WALKCMD_2 187 #define IDO_CLICKDIALOGITEM 116 #define IDO_SETCOMBATSTYLE 29 #define IDO_WITHDRAW 22 #define IDO_DEPOSIT 23 #define IDO_CLOSE_BANK 212 #define IDO_BUYITEM 236 #define IDO_SELLITEM 221 #define IDO_CLOSE_SHOP 166 #define IDO_CANCEL_TRADE 230 #define IDO_CONFIRM_TRADE 104 #define IDO_TRADE_UPDATE 46 #define IDO_ACCEPT_TRADE 55 #define IDO_DUEL_CONFIRM_1 77 #define IDO_DUEL_UPDATE 33 #define IDO_DUEL_FLAG_1 8 #define IDO_DUEL_FLAG_2 176 #define IDO_CANCEL_DUEL 197 #define IDO_PRAYER_OFF 254 #define IDO_PRAYER_ON 60 #define IDO_CHANGE_SETTINGS 111 // action commands... #define IDO_CAST_GR_ITEM 249 #define IDO_USEWITH_GR_ITEM 53 #define IDO_TAKE_ITEM 247 #define IDO_CAST_WALLOBJ 180 #define IDO_USEWITH_WALLOBJ 161 #define IDO_WALLOBJ_CMD1 14 #define IDO_WALLOBJ_CMD2 127 #define IDO_CAST_OBJECT 99 #define IDO_USEWITH_OBJECT 115 #define IDO_OBJECT_CMD1 136 #define IDO_OBJECT_CMD2 79 #define IDO_CAST_INVITEM 4 #define IDO_USEWITH_INVITEM 91 #define IDO_REMOVE_ITEM 170 #define IDO_WEAR_ITEM 169 #define IDO_INVITEM_CMD 90 #define IDO_DROP_ITEM 246 #define IDO_CAST_NPC 50 #define IDO_USEWITH_NPC 135 #define IDO_TALK_NPC 153 #define IDO_NPC_CMD 202 #define IDO_ATTACK_NPC 190 #define IDO_CAST_PLAYER 229 #define IDO_USEWITH_PLAYER 113 #define IDO_ATTACK_PLAYER 171 #define IDO_DUEL_PLAYER 103 #define IDO_TRADE_PLAYER 142 #define IDO_FOLLOW_PLAYER 165 #define IDO_CAST_GROUND 158 #define IDO_CAST_SELF 137 #define IDO_REPORT_ABUSE 206
opcode | usage | size | payload |
// login responses... #define IDX_MOD_ACCEPTED 25 // logged in as player mod #define IDX_LOGIN_SUCCESS 0 #define IDX_RELOGIN_SUCCESS 1 // connection reestablished after lost connection... #define IDX_WRONG_PWD 3 #define IDX_NAME_LOGGED_IN 4 #define IDX_CLIENT_UPDATED 5 #define IDX_IP_IN_USE 6 #define IDX_LOGINS_EXCEEDED 7 #define IDX_SERV_REJECTED 8 #define IDX_LOGINSERV_REJCT 9 #define IDX_NAME_IN_USE 10 #define IDX_TEMP_DISABLED 11 #define IDX_PERM_DISABLED 12 #define IDX_SERVER_FULL 14 #define IDX_MEMBERACC_REQ 15 // requires member account to login here #define IDX_LOGINSERV_DOWN 16 #define IDX_DECODE_FAIL 17 #define IDX_LOGIN_MISMATCH 20#define IDI_MESSAGE 131 // (game) messages from server #define IDI_LOGOUT 4 // logout command from server (forced, or initiated by client IDO_LOGOUT) #define IDI_LOGOUT_REJECT 183 // not allowed to log out (e.g. when in combat) #define IDI_FRIENDS_LOAD 71 // when logging in, sends the whole friends list to the client #define IDI_FRIEND_LOGGED 149 // a friend from friends list logged in or out (also used to add a friend to friends list) #define IDI_IGNORE_LOAD 109 // when logging in, sends the whole ignore list to the client #define IDI_SETTINGS_LOAD 51 // load settings upon logging in (blocks) #define IDI_FRIENDS_PM 120 // someone pm'd us
#define IDI_PLAYER_MOVEMENT 191 // player movement update #define IDI_GRITEMS_UPDATE 99 // update ground items #define IDI_OBJECTS_UPDATE 48 #define IDI_INV_LOAD 53 // load inventory #define IDI_PLAYER_UPDATE 234 #define IDI_WALLOBJ_UPDATE 91 #define IDI_NPC_MOVEMENT 79 // npc movement update #define IDI_NPC_UPDATE 104 #define IDI_DIALOG_SHOW 245 #define IDI_DIALOG_CLOSE 252 #define IDI_LOAD_NEWMAPAREA 25 // entering a new region (maparea) #define IDI_XP_LOAD 156 // load xp and stats #define IDI_EQUIP_UPDATE 153 // equipment stats (armour, magic, prayer, weapaim/power) #define IDI_PLAYER_DIED 83 #define IDI_LOADWORLD 211 // load objects, wallobjects, items #define IDI_DESIGN_CHAR 59 #define IDI_OPEN_TRADE_1 92 #define IDI_CLOSE_TRADE 128 #define IDI_TRADE_UPDATE 97 // opponents offer was updated #define IDI_TRADE_B_UPDATE 162 // update of opponents acception status #define IDI_SHOP_OPEN 101 #define IDI_SHOP_CLOSE 137 #define IDI_TRADE_A_UPDATE 15 // update of thisplayers acception status #define IDI_LOAD_OPTIONS 240 // camera angle, sound, mousebutton settings #define IDI_PRAYER 206 #define IDI_QUESTS 5 #define IDI_BANK_OPEN 42 #define IDI_BANK_CLOSE 203 #define IDI_XP_UPDATE 33 #define IDI_OPEN_DUEL_1 176 #define IDI_CLOSE_DUEL 225 #define IDI_OPEN_TRADE_2 20 // trade confirmation window #define IDI_DUEL_UPDATE 6 // opponents offer was updated #define IDI_DUELOPT_UPDATE 30 // update duel options #define IDI_BANK_UPDATE 249 #define IDI_INV_ADD 90 #define IDI_INV_REMOVE 123 #define IDI_STAT_UPDATE 159 #define IDI_DUEL_B_UPDATE 253 // update of opponents acception status #define IDI_DUEL_A_UPDATE 210 // update of thisplayers acception status #define IDI_OPEN_DUEL_2 172 // duel confirmation window #define IDI_SOUND 204 #define IDI_SPLASH 36 #define IDI_WELCOMEWINDOW 182 #define IDI_MESSAGE_1 89 #define IDI_MESSAGE_2 222 #define IDI_FATIGUE_UPDATE 114 #define IDI_NEW_SLEEPWORD 117 #define IDI_FATIGUE_SLEEPN 244 // fatigue update in sleeping window #define IDI_SLEEP_SUCCESS 84 #define IDI_SLEEP_FAILED 194 #define IDI_SYSTEM_UPDATE 52
#define IDX_ACCOUNT_STOLEN 18 // "Account suspected stolen.", "Press 'recover a locked account' on front page." #define IDX_ACCOUNT_NOT_RSC 21 // "Unable to login.", "That is not an RS-Classic account" #define IDX_PASSWD_STOLEN 22 // "Password suspected stolen.", "Press 'change your password' on front page."
opcode | usage | size | payload |
Items
ID | Name | Description | Wieldable | Stackable |
---|---|---|---|---|
0 | Iron Mace | A spiky mace | Y | N |
1 | Iron Short Sword | A razor sharp sword | Y | N |
2 | Iron Kite Shield | A large metal shield | Y | N |
3 | Iron Square Shield | A medium metal shield | Y | N |
4 | Wooden Shield | A solid wooden shield | Y | N |
5 | Medium Iron Helmet | A medium sized helmet | Y | N |
6 | Large Iron Helmet | A full face helmet | Y | N |
7 | Iron Chain Mail Body | A series of connected metal rings | Y | N |
8 | Iron Plate Mail Body | Provides excellent protection | Y | N |
9 | Iron Plate Mail Legs | These look pretty heavy | Y | N |
10 | Coins | Lovely money! | N | Y |
11 | Bronze Arrows | Arrows with bronze heads | N | Y |
12 | Iron Axe | A woodcutters axe | Y | N |
13 | Knife | A dangerous looking knife | N | N |
14 | Logs | A number of wooden logs | N | N |
15 | Leather Armour | Better than no armour! | Y | N |
16 | Leather Gloves | These will keep my hands warm! | Y | N |
17 | Boots | Comfortable leather boots | Y | N |
18 | Cabbage | Yuck I don't like cabbage | N | N |
19 | Egg | A nice fresh egg | N | N |
20 | Bones | Ew it's a pile of bones | N | N |
21 | Bucket | It's a wooden bucket | N | N |
22 | Milk | It's a bucket of milk | N | N |
23 | Flour | A little heap of flour | N | N |
24 | Amulet of GhostSpeak | It lets me talk to ghosts | Y | N |
25 | Silverlight key 1 | A key given to me by Wizard Traiborn | N | N |
26 | Silverlight key 2 | A key given to me by Captain Rovin | N | N |
27 | skull | A spooky looking skull | N | N |
28 | Iron dagger | Short but pointy | Y | N |
29 | grain | Some wheat heads | N | N |
30 | Book | |||
N | N | |||
31 | Fire-Rune | One of the 4 basic elemental runes | N | Y |
32 | Water-Rune | One of the 4 basic elemental runes | N | Y |
33 | Air-Rune | One of the 4 basic elemental runes | N | Y |
34 | Earth-Rune | One of the 4 basic elemental runes | N | Y |
35 | Mind-Rune | Used for low level missile spells | N | Y |
36 | Body-Rune | Used for curse spells | N | Y |
37 | Life-Rune | Used for summon spells | N | Y |
38 | Death-Rune | Used for high level missile spells | N | Y |
39 | Needle | Used with a thread to make clothes | N | Y |
40 | Nature-Rune | Used for alchemy spells | N | Y |
41 | Chaos-Rune | Used for mid level missile spells | N | Y |
42 | Law-Rune | Used for teleport spells | N | Y |
43 | Thread | Used with a needle to make clothes | N | Y |
44 | Holy Symbol of saradomin | This needs a string putting on it | N | N |
45 | Unblessed Holy Symbol | This needs blessing | Y | N |
46 | Cosmic-Rune | Used for enchant spells | N | Y |
47 | key | The key to get into the phoenix gang | N | N |
48 | key | The key to the phoenix gang's weapons store | N | N |
49 | scroll | An intelligence Report | N | N |
50 | Water | It's a bucket of water | N | N |
51 | Silverlight key 3 | A key I found in a drain | N | N |
52 | Silverlight | A magic sword | Y | N |
53 | Broken shield | Half of the shield of Arrav | N | N |
54 | Broken shield | Half of the shield of Arrav | N | N |
55 | Cadavaberries | Poisonous berries | N | N |
56 | message | A message from Juliet to Romeo | N | N |
57 | Cadava | I'm meant to give this to Juliet | N | N |
58 | potion | this is meant to be good for spots | N | N |
59 | Phoenix Crossbow | Former property of the phoenix gang | Y | N |
60 | Crossbow | This fires crossbow bolts | Y | N |
61 | Certificate | I can use this to claim a reward from the king | N | N |
62 | bronze dagger | Short but pointy | Y | N |
63 | Steel dagger | Short but pointy | Y | N |
64 | Mithril dagger | Short but pointy | Y | N |
65 | Adamantite dagger | Short but pointy | Y | N |
66 | Bronze Short Sword | A razor sharp sword | Y | N |
67 | Steel Short Sword | A razor sharp sword | Y | N |
68 | Mithril Short Sword | A razor sharp sword | Y | N |
69 | Adamantite Short Sword | A razor sharp sword | Y | N |
70 | Bronze Long Sword | A razor sharp sword | Y | N |
71 | Iron Long Sword | A razor sharp sword | Y | N |
72 | Steel Long Sword | A razor sharp sword | Y | N |
73 | Mithril Long Sword | A razor sharp sword | Y | N |
74 | Adamantite Long Sword | A razor sharp sword | Y | N |
75 | Rune long sword | A razor sharp sword | Y | N |
76 | Bronze 2-handed Sword | A very large sword | Y | N |
77 | Iron 2-handed Sword | A very large sword | Y | N |
78 | Steel 2-handed Sword | A very large sword | Y | N |
79 | Mithril 2-handed Sword | A very large sword | Y | N |
80 | Adamantite 2-handed Sword | A very large sword | Y | N |
81 | rune 2-handed Sword | A very large sword | Y | N |
82 | Bronze Scimitar | A vicious curved sword | Y | N |
83 | Iron Scimitar | A vicious curved sword | Y | N |
84 | Steel Scimitar | A vicious curved sword | Y | N |
85 | Mithril Scimitar | A vicious curved sword | Y | N |
86 | Adamantite Scimitar | A vicious curved sword | Y | N |
87 | bronze Axe | A woodcutters axe | Y | N |
88 | Steel Axe | A woodcutters axe | Y | N |
89 | Iron battle Axe | A vicious looking axe | Y | N |
90 | Steel battle Axe | A vicious looking axe | Y | N |
91 | Mithril battle Axe | A vicious looking axe | Y | N |
92 | Adamantite battle Axe | A vicious looking axe | Y | N |
93 | Rune battle Axe | A vicious looking axe | Y | N |
94 | Bronze Mace | A spiky mace | Y | N |
95 | Steel Mace | A spiky mace | Y | N |
96 | Mithril Mace | A spiky mace | Y | N |
97 | Adamantite Mace | A spiky mace | Y | N |
98 | Rune Mace | A spiky mace | Y | N |
99 | Brass key | I wonder what this is the key to | N | N |
100 | staff | It's a slightly magical stick | Y | N |
101 | Staff of Air | A Magical staff | Y | N |
102 | Staff of water | A Magical staff | Y | N |
103 | Staff of earth | A Magical staff | Y | N |
104 | Medium Bronze Helmet | A medium sized helmet | Y | N |
105 | Medium Steel Helmet | A medium sized helmet | Y | N |
106 | Medium Mithril Helmet | A medium sized helmet | Y | N |
107 | Medium Adamantite Helmet | A medium sized helmet | Y | N |
108 | Large Bronze Helmet | A full face helmet | Y | N |
109 | Large Steel Helmet | A full face helmet | Y | N |
110 | Large Mithril Helmet | A full face helmet | Y | N |
111 | Large Adamantite Helmet | A full face helmet | Y | N |
112 | Large Rune Helmet | A full face helmet | Y | N |
113 | Bronze Chain Mail Body | A series of connected metal rings | Y | N |
114 | Steel Chain Mail Body | A series of connected metal rings | Y | N |
115 | Mithril Chain Mail Body | A series of connected metal rings | Y | N |
116 | Adamantite Chain Mail Body | A series of connected metal rings | Y | N |
117 | Bronze Plate Mail Body | Provides excellent protection | Y | N |
118 | Steel Plate Mail Body | Provides excellent protection | Y | N |
119 | Mithril Plate Mail Body | Provides excellent protection | Y | N |
120 | Adamantite Plate Mail Body | Provides excellent protection | Y | N |
121 | Steel Plate Mail Legs | These look pretty heavy | Y | N |
122 | Mithril Plate Mail Legs | These look pretty heavy | Y | N |
123 | Adamantite Plate Mail Legs | These look pretty heavy | Y | N |
124 | Bronze Square Shield | A medium metal shield | Y | N |
125 | Steel Square Shield | A medium metal shield | Y | N |
126 | Mithril Square Shield | A medium metal shield | Y | N |
127 | Adamantite Square Shield | A medium metal shield | Y | N |
128 | Bronze Kite Shield | A large metal shield | Y | N |
129 | Steel Kite Shield | A large metal shield | Y | N |
130 | Mithril Kite Shield | A large metal shield | Y | N |
131 | Adamantite Kite Shield | A large metal shield | Y | N |
132 | cookedmeat | Mmm this looks tasty | N | N |
133 | raw chicken | I need to cook this first | N | N |
134 | burntmeat | Oh dear | N | N |
135 | pot | This pot is empty | N | N |
136 | flour | There is flour in this pot | N | N |
137 | bread dough | Some uncooked dough | N | N |
138 | bread | Nice crispy bread | N | N |
139 | burntbread | This bread is ruined! | N | N |
140 | jug | This jug is empty | N | N |
141 | water | It's full of water | N | N |
142 | wine | It's full of wine | N | N |
143 | grapes | Good grapes for wine making | N | N |
144 | shears | For shearing sheep | N | N |
145 | wool | I think this came from a sheep | N | N |
146 | fur | This would make warm clothing | N | N |
147 | cow hide | I should take this to the tannery | N | N |
148 | leather | It's a piece of leather | N | N |
149 | clay | Some hard dry clay | N | N |
150 | copper ore | this needs refining | N | N |
151 | iron ore | this needs refining | N | N |
152 | gold | this needs refining | N | N |
153 | mithril ore | this needs refining | N | N |
154 | adamantite ore | this needs refining | N | N |
155 | coal | hmm a non-renewable energy source! | N | N |
156 | Bronze Pickaxe | Used for mining | N | N |
157 | uncut diamond | this would be worth more cut | N | N |
158 | uncut ruby | this would be worth more cut | N | N |
159 | uncut emerald | this would be worth more cut | N | N |
160 | uncut sapphire | this would be worth more cut | N | N |
161 | diamond | this looks valuable | N | N |
162 | ruby | this looks valuable | N | N |
163 | emerald | this looks valuable | N | N |
164 | sapphire | this looks valuable | N | N |
165 | Herb | I need a closer look to identify this | N | N |
166 | tinderbox | useful for lighting a fire | N | N |
167 | chisel | good for detailed crafting | N | N |
168 | hammer | good for hitting things! | N | N |
169 | bronze bar | it's a bar of bronze | N | N |
170 | iron bar | it's a bar of iron | N | N |
171 | steel bar | it's a bar of steel | N | N |
172 | gold bar | this looks valuable | N | N |
173 | mithril bar | it's a bar of mithril | N | N |
174 | adamantite bar | it's a bar of adamantite | N | N |
175 | Pressure gauge | It looks like part of a machine | N | N |
176 | Fish Food | Keeps your pet fish strong and healthy | N | N |
177 | Poison | This stuff looks nasty | N | N |
178 | Poisoned fish food | Doesn't seem very nice to the poor fishes | N | N |
179 | spinach roll | A home made spinach thing | N | N |
180 | Bad wine | Oh dear | N | N |
181 | Ashes | A heap of ashes | N | N |
182 | Apron | A mostly clean apron | Y | N |
183 | Cape | A bright red cape | Y | N |
184 | Wizards robe | I can do magic better in this | Y | N |
185 | wizardshat | A silly pointed hat | Y | N |
186 | Brass necklace | I'd prefer a gold one | Y | N |
187 | skirt | A ladies skirt | Y | N |
188 | Longbow | A Nice sturdy bow | Y | N |
189 | Shortbow | Short but effective | Y | N |
190 | Crossbow bolts | Good if you have a crossbow! | N | Y |
191 | Apron | this will help keep my clothes clean | Y | N |
192 | Chef's hat | What a silly hat | Y | N |
193 | Beer | A glass of frothy ale | N | N |
194 | skirt | A ladies skirt | Y | N |
195 | skirt | A ladies skirt | Y | N |
196 | Black Plate Mail Body | Provides excellent protection | Y | N |
197 | Staff of fire | A Magical staff | Y | N |
198 | Magic Staff | A Magical staff | Y | N |
199 | wizardshat | A silly pointed hat | Y | N |
200 | silk | It's a sheet of silk | N | N |
201 | flier | Get your axes from Bob's axes | N | N |
202 | tin ore | this needs refining | N | N |
203 | Mithril Axe | A powerful axe | Y | N |
204 | Adamantite Axe | A powerful axe | Y | N |
205 | bronze battle Axe | A vicious looking axe | Y | N |
206 | Bronze Plate Mail Legs | These look pretty heavy | Y | N |
207 | Ball of wool | Spun from sheeps wool | N | N |
208 | Oil can | Its pretty full | N | N |
209 | Cape | A warm black cape | Y | N |
210 | Kebab | A meaty Kebab | N | N |
211 | Spade | A fairly small spade | N | N |
212 | Closet Key | A slightly smelly key | N | N |
213 | rubber tube | Its slightly charred | N | N |
214 | Bronze Plated Skirt | Designer leg protection | Y | N |
215 | Iron Plated Skirt | Designer leg protection | Y | N |
216 | Black robe | I can do magic better in this | Y | N |
217 | stake | A very pointy stick | Y | N |
218 | Garlic | A clove of garlic | N | N |
219 | Red spiders eggs | eewww | N | N |
220 | Limpwurt root | the root of a limpwurt plant | N | N |
221 | Strength Potion | 4 doses of strength potion | N | N |
222 | Strength Potion | 3 doses of strength potion | N | N |
223 | Strength Potion | 2 doses of strength potion | N | N |
224 | Strength Potion | 1 dose of strength potion | N | N |
225 | Steel Plated skirt | designer leg protection | Y | N |
226 | Mithril Plated skirt | Designer Leg protection | Y | N |
227 | Adamantite Plated skirt | Designer leg protection | Y | N |
228 | Cabbage | Yuck I don't like cabbage | N | N |
229 | Cape | A thick blue cape | Y | N |
230 | Large Black Helmet | A full face helmet | Y | N |
231 | Red Bead | A small round red bead | N | N |
232 | Yellow Bead | A small round yellow bead | N | N |
233 | Black Bead | A small round black bead | N | N |
234 | White Bead | A small round white bead | N | N |
235 | Amulet of accuracy | It increases my aim | Y | N |
236 | Redberries | Very bright red berries | N | N |
237 | Rope | A Coil of rope | N | N |
238 | Reddye | A little bottle of dye | N | N |
239 | Yellowdye | A little bottle of dye | N | N |
240 | Paste | A bottle off skin coloured paste | N | N |
241 | Onion | A strong smelling onion | N | N |
242 | Bronze key | A heavy key | N | N |
243 | Soft Clay | Clay that's ready to be used | N | N |
244 | wig | A blonde wig | N | N |
245 | wig | A wig made from wool | N | N |
246 | Half full wine jug | It's half full of wine | N | N |
247 | Keyprint | An imprint of a key in a lump of clay | N | N |
248 | Black Plate Mail Legs | These look pretty heavy | Y | N |
249 | banana | Mmm this looks tasty | N | N |
250 | pastry dough | Some uncooked dough | N | N |
251 | Pie dish | For making pies in | N | N |
252 | cooking apple | I wonder what i can make with this | N | N |
253 | pie shell | I need to find a filling for this pie | N | N |
254 | Uncooked apple pie | I need to cook this first | N | N |
255 | Uncooked meat pie | I need to cook this first | N | N |
256 | Uncooked redberry pie | I need to cook this first | N | N |
257 | apple pie | Mmm Apple pie | N | N |
258 | Redberry pie | Looks tasty | N | N |
259 | meat pie | Mighty and meaty | N | N |
260 | burntpie | Oops | N | N |
261 | Half a meat pie | Mighty and meaty | N | N |
262 | Half a Redberry pie | Looks tasty | N | N |
263 | Half an apple pie | Mmm Apple pie | N | N |
264 | Portrait | It's a picture of a knight | N | N |
265 | Faladian Knight's sword | A razor sharp sword | Y | N |
266 | blurite ore | What Strange stuff | N | N |
267 | Asgarnian Ale | A glass of frothy ale | N | N |
268 | Wizard's Mind Bomb | It's got strange bubbles in it | N | N |
269 | Dwarven Stout | A Pint of thick dark beer | N | N |
270 | Eye of newt | It seems to be looking at me | N | N |
271 | Rat's tail | A bit of rat | N | N |
272 | Bluedye | A little bottle of dye | N | N |
273 | Goblin Armour | Armour Designed to fit Goblins | N | N |
274 | Goblin Armour | Armour Designed to fit Goblins | N | N |
275 | Goblin Armour | Armour Designed to fit Goblins | N | N |
276 | unstrung Longbow | I need to find a string for this | N | N |
277 | unstrung shortbow | I need to find a string for this | N | N |
278 | Unfired Pie dish | I need to put this in a pottery oven | N | N |
279 | unfired pot | I need to put this in a pottery oven | N | N |
280 | arrow shafts | I need to attach feathers to these | N | Y |
281 | Woad Leaf | slightly bluish leaves | N | Y |
282 | Orangedye | A little bottle of dye | N | N |
283 | Gold ring | A valuable ring | N | N |
284 | Sapphire ring | A valuable ring | N | N |
285 | Emerald ring | A valuable ring | N | N |
286 | Ruby ring | A valuable ring | N | N |
287 | Diamond ring | A valuable ring | N | N |
288 | Gold necklace | I wonder if this is valuable | Y | N |
289 | Sapphire necklace | I wonder if this is valuable | Y | N |
290 | Emerald necklace | I wonder if this is valuable | Y | N |
291 | Ruby necklace | I wonder if this is valuable | Y | N |
292 | Diamond necklace | I wonder if this is valuable | Y | N |
293 | ring mould | Used to make gold rings | N | N |
294 | Amulet mould | Used to make gold amulets | N | N |
295 | Necklace mould | Used to make gold necklaces | N | N |
296 | Gold Amulet | It needs a string so I can wear it | N | N |
297 | Sapphire Amulet | It needs a string so I can wear it | N | N |
298 | Emerald Amulet | It needs a string so I can wear it | N | N |
299 | Ruby Amulet | It needs a string so I can make wear it | N | N |
300 | Diamond Amulet | It needs a string so I can wear it | N | N |
301 | Gold Amulet | I wonder if I can get this enchanted | Y | N |
302 | Sapphire Amulet | I wonder if I can get this enchanted | Y | N |
303 | Emerald Amulet | I wonder if I can get this enchanted | Y | N |
304 | Ruby Amulet | I wonder if I can get this enchanted | Y | N |
305 | Diamond Amulet | I wonder if I can get this enchanted | Y | N |
306 | superchisel | I wonder if I can get this enchanted | N | N |
307 | Mace of Zamorak | This mace gives me the creeps | Y | N |
308 | Bronze Plate Mail top | Armour designed for females | Y | N |
309 | Steel Plate Mail top | Armour designed for females | Y | N |
310 | Mithril Plate Mail top | Armour designed for females | Y | N |
311 | Adamantite Plate Mail top | Armour designed for females | Y | N |
312 | Iron Plate Mail top | Armour designed for females | Y | N |
313 | Black Plate Mail top | Armour designed for females | Y | N |
314 | Sapphire Amulet of magic | It improves my magic | Y | N |
315 | Emerald Amulet of protection | It improves my defense | Y | N |
316 | Ruby Amulet of strength | It improves my damage | Y | N |
317 | Diamond Amulet of power | A powerful amulet | Y | N |
318 | Karamja Rum | A very strong spirit brewed in Karamja | N | N |
319 | Cheese | It's got holes in it | N | N |
320 | Tomato | This would make good ketchup | N | N |
321 | Pizza Base | I need to add some tomato next | N | N |
322 | Burnt Pizza | Oh dear! | N | N |
323 | Incomplete Pizza | I need to add some cheese next | N | N |
324 | Uncooked Pizza | This needs cooking | N | N |
325 | Plain Pizza | A cheese and tomato pizza | N | N |
326 | Meat Pizza | A pizza with bits of meat on it | N | N |
327 | Anchovie Pizza | A Pizza with Anchovies | N | N |
328 | Half Meat Pizza | Half of this pizza has been eaten | N | N |
329 | Half Anchovie Pizza | Half of this pizza has been eaten | N | N |
330 | Cake | A plain sponge cake | N | N |
331 | Burnt Cake | Argh what a mess! | N | N |
332 | Chocolate Cake | This looks very tasty! | N | N |
333 | Partial Cake | Someone has eaten a big chunk of this cake | N | N |
334 | Partial Chocolate Cake | Someone has eaten a big chunk of this cake | N | N |
335 | Slice of Cake | I'd rather have a whole cake! | N | N |
336 | Chocolate Slice | A slice of chocolate cake | N | N |
337 | Chocolate Bar | It's a bar of chocolate | N | N |
338 | Cake Tin | Useful for baking cakes | N | N |
339 | Uncooked cake | Now all I need to do is cook it | N | N |
340 | Unfired bowl | I need to put this in a pottery oven | N | N |
341 | Bowl | Useful for mixing things | N | N |
342 | Bowl of water | It's a bowl of water | N | N |
343 | Incomplete stew | I need to add some meat too | N | N |
344 | Incomplete stew | I need to add some potato too | N | N |
345 | Uncooked stew | I need to cook this | N | N |
346 | Stew | It's a meat and potato stew | N | N |
347 | Burnt Stew | Eew it's horribly burnt | N | N |
348 | Potato | Can be used to make stew | N | N |
349 | Raw Shrimp | I should try cooking this | N | N |
350 | Shrimp | Some nicely cooked fish | N | N |
351 | Raw Anchovies | I should try cooking this | N | N |
352 | Anchovies | Some nicely cooked fish | N | N |
353 | Burnt fish | Oops! | N | N |
354 | Raw Sardine | I should try cooking this | N | N |
355 | Sardine | Some nicely cooked fish | N | N |
356 | Raw Salmon | I should try cooking this | N | N |
357 | Salmon | Some nicely cooked fish | N | N |
358 | Raw Trout | I should try cooking this | N | N |
359 | Trout | Some nicely cooked fish | N | N |
360 | Burnt fish | Oops! | N | N |
361 | Raw Herring | I should try cooking this | N | N |
362 | Herring | Some nicely cooked fish | N | N |
363 | Raw Pike | I should try cooking this | N | N |
364 | Pike | Some nicely cooked fish | N | N |
365 | Burnt fish | Oops! | N | N |
366 | Raw Tuna | I should try cooking this | N | N |
367 | Tuna | Wow this is a big fish | N | N |
368 | Burnt fish | Oops! | N | N |
369 | Raw Swordfish | I should try cooking this | N | N |
370 | Swordfish | I'd better be careful eating this! | N | N |
371 | Burnt Swordfish | Oops! | N | N |
372 | Raw Lobster | I should try cooking this | N | N |
373 | Lobster | This looks tricky to eat | N | N |
374 | Burnt Lobster | Oops! | N | N |
375 | Lobster Pot | Useful for catching lobsters | N | N |
376 | Net | Useful for catching small fish | N | N |
377 | Fishing Rod | Useful for catching sardine or herring | N | N |
378 | Fly Fishing Rod | Useful for catching salmon or trout | N | N |
379 | Harpoon | Useful for catching really big fish | N | N |
380 | Fishing Bait | For use with a fishing rod | N | Y |
381 | Feather | Used for fly-fishing | N | Y |
382 | Chest key | A key to One eyed Hector's chest | N | N |
383 | Silver | this needs refining | N | N |
384 | silver bar | this looks valuable | N | N |
385 | Holy Symbol of saradomin | This improves my prayer | Y | N |
386 | Holy symbol mould | Used to make Holy Symbols | N | N |
387 | Disk of Returning | Used to get out of Thordur's blackhole | N | N |
388 | Monks robe | I feel closer to the God's when I am wearing this | Y | N |
389 | Monks robe | Keeps a monk's legs nice and warm | Y | N |
390 | Red key | A painted key | N | N |
391 | Orange Key | A painted key | N | N |
392 | yellow key | A painted key | N | N |
393 | Blue key | A painted key | N | N |
394 | Magenta key | A painted key | N | N |
395 | black key | A painted key | N | N |
396 | rune dagger | Short but pointy | Y | N |
397 | Rune short sword | A razor sharp sword | Y | N |
398 | rune Scimitar | A vicious curved sword | Y | N |
399 | Medium Rune Helmet | A medium sized helmet | Y | N |
400 | Rune Chain Mail Body | A series of connected metal rings | Y | N |
401 | Rune Plate Mail Body | Provides excellent protection | Y | N |
402 | Rune Plate Mail Legs | These look pretty heavy | Y | N |
403 | Rune Square Shield | A medium metal shield | Y | N |
404 | Rune Kite Shield | A large metal shield | Y | N |
405 | rune Axe | A powerful axe | Y | N |
406 | Rune skirt | Designer leg protection | Y | N |
407 | Rune Plate Mail top | Armour designed for females | Y | N |
408 | Runite bar | it's a bar of runite | N | N |
409 | runite ore | this needs refining | N | N |
410 | Plank | This doesn't look very useful | N | N |
411 | Tile | This doesn't look very useful | N | N |
412 | skull | A spooky looking skull | N | N |
413 | Big Bones | Ew it's a pile of bones | N | N |
414 | Muddy key | It looks like a key to a chest | N | N |
415 | Map | A map showing the way to the Isle of Crandor | N | N |
416 | Map Piece | I need some more of the map for this to be useful | N | N |
417 | Map Piece | I need some more of the map for this to be useful | N | N |
418 | Map Piece | I need some more of the map for this to be useful | N | N |
419 | Nails | Nails made from steel | N | Y |
420 | Anti dragon breath Shield | Helps prevent damage from dragons | Y | N |
421 | Maze key | The key to the entrance of Melzar's maze | N | N |
422 | Pumpkin | Happy halloween | N | N |
423 | Black dagger | Short but pointy | Y | N |
424 | Black Short Sword | A razor sharp sword | Y | N |
425 | Black Long Sword | A razor sharp sword | Y | N |
426 | Black 2-handed Sword | A very large sword | Y | N |
427 | Black Scimitar | A vicious curved sword | Y | N |
428 | Black Axe | A sinister looking axe | Y | N |
429 | Black battle Axe | A vicious looking axe | Y | N |
430 | Black Mace | A spikey mace | Y | N |
431 | Black Chain Mail Body | A series of connected metal rings | Y | N |
432 | Black Square Shield | A medium metal shield | Y | N |
433 | Black Kite Shield | A large metal shield | Y | N |
434 | Black Plated skirt | designer leg protection | Y | N |
435 | Herb | I need a closer look to identify this | N | N |
436 | Herb | I need a closer look to identify this | N | N |
437 | Herb | I need a closer look to identify this | N | N |
438 | Herb | I need a closer look to identify this | N | N |
439 | Herb | I need a closer look to identify this | N | N |
440 | Herb | I need a closer look to identify this | N | N |
441 | Herb | I need a closer look to identify this | N | N |
442 | Herb | I need a closer look to identify this | N | N |
443 | Herb | I need a closer look to identify this | N | N |
444 | Guam leaf | A herb used in attack potion making | N | N |
445 | Marrentill | A herb used in poison cures | N | N |
446 | Tarromin | A useful herb | N | N |
447 | Harralander | A useful herb | N | N |
448 | Ranarr Weed | A useful herb | N | N |
449 | Irit Leaf | A useful herb | N | N |
450 | Avantoe | A useful herb | N | N |
451 | Kwuarm | A powerful herb | N | N |
452 | Cadantine | A powerful herb | N | N |
453 | Dwarf Weed | A powerful herb | N | N |
454 | Unfinished potion | I need another ingredient to finish this Guam potion | N | N |
455 | Unfinished potion | I need another ingredient to finish this Marrentill potion | N | N |
456 | Unfinished potion | I need another ingredient to finish this Tarromin potion | N | N |
457 | Unfinished potion | I need another ingredient to finish this Harralander potion | N | N |
458 | Unfinished potion | I need another ingredient to finish this Ranarr potion | N | N |
459 | Unfinished potion | I need another ingredient to finish this Irit potion | N | N |
460 | Unfinished potion | I need another ingredient to finish this Avantoe potion | N | N |
461 | Unfinished potion | I need another ingredient to finish this Kwuarm potion | N | N |
462 | Unfinished potion | I need another ingredient to finish this Cadantine potion | N | N |
463 | Unfinished potion | I need another ingredient to finish this Dwarfweed potion | N | N |
464 | Vial | It's full of water | N | N |
465 | Vial | This vial is empty | N | N |
466 | Unicorn horn | Poor unicorn | N | N |
467 | Blue dragon scale | A large shiny scale | N | N |
468 | Pestle and mortar | I can grind things for potions in this | N | N |
469 | Snape grass | Strange spikey grass | N | N |
470 | Medium black Helmet | A medium sized helmet | Y | N |
471 | White berries | Poisonous berries | N | N |
472 | Ground blue dragon scale | This stuff isn't good for you | N | N |
473 | Ground unicorn horn | A useful potion ingredient | N | N |
474 | attack Potion | 3 doses of attack potion | N | N |
475 | attack Potion | 2 doses of attack potion | N | N |
476 | attack Potion | 1 dose of attack potion | N | N |
477 | stat restoration Potion | 3 doses of stat restoration potion | N | N |
478 | stat restoration Potion | 2 doses of stat restoration potion | N | N |
479 | stat restoration Potion | 1 dose of stat restoration potion | N | N |
480 | defense Potion | 3 doses of defense potion | N | N |
481 | defense Potion | 2 doses of defense potion | N | N |
482 | defense Potion | 1 dose of defense potion | N | N |
483 | restore prayer Potion | 3 doses of restore prayer potion | N | N |
484 | restore prayer Potion | 2 doses of restore prayer potion | N | N |
485 | restore prayer Potion | 1 dose of restore prayer potion | N | N |
486 | Super attack Potion | 3 doses of attack potion | N | N |
487 | Super attack Potion | 2 doses of attack potion | N | N |
488 | Super attack Potion | 1 dose of attack potion | N | N |
489 | fishing Potion | 3 doses of fishing potion | N | N |
490 | fishing Potion | 2 doses of fishing potion | N | N |
491 | fishing Potion | 1 dose of fishing potion | N | N |
492 | Super strength Potion | 3 doses of strength potion | N | N |
493 | Super strength Potion | 2 doses of strength potion | N | N |
494 | Super strength Potion | 1 dose of strength potion | N | N |
495 | Super defense Potion | 3 doses of defense potion | N | N |
496 | Super defense Potion | 2 doses of defense potion | N | N |
497 | Super defense Potion | 1 dose of defense potion | N | N |
498 | ranging Potion | 3 doses of ranging potion | N | N |
499 | ranging Potion | 2 doses of ranging potion | N | N |
500 | ranging Potion | 1 dose of ranging potion | N | N |
501 | wine of Zamorak | It's full of wine | N | N |
502 | raw bear meat | I need to cook this first | N | N |
503 | raw rat meat | I need to cook this first | N | N |
504 | raw beef | I need to cook this first | N | N |
505 | enchanted bear meat | I don't fancy eating this now | N | N |
506 | enchanted rat meat | I don't fancy eating this now | N | N |
507 | enchanted beef | I don't fancy eating this now | N | N |
508 | enchanted chicken meat | I don't fancy eating this now | N | N |
509 | Dramen Staff | A magical staff cut from the dramen tree | Y | N |
510 | Dramen Branch | I need to make this into a staff | N | N |
511 | Cape | A thick Green cape | Y | N |
512 | Cape | A thick yellow cape | Y | N |
513 | Cape | A thick Orange cape | Y | N |
514 | Cape | A thick purple cape | Y | N |
515 | Greendye | A little bottle of dye | N | N |
516 | Purpledye | A little bottle of dye | N | N |
517 | Iron ore certificate | Each certificate exchangable at draynor market for 5 iron ore | N | Y |
518 | Coal certificate | Each certificate exchangable at draynor market for 5 coal | N | Y |
519 | Mithril ore certificate | Each certificate exchangable at draynor market for 5 mithril ore | N | Y |
520 | silver certificate | Each certificate exchangable at draynor market for 5 silver nuggets | N | Y |
521 | Gold certificate | Each certificate exchangable at draynor market for 5 gold nuggets | N | Y |
522 | Dragonstone Amulet | A very powerful amulet | Y | N |
523 | Dragonstone | This looks very valuable | N | N |
524 | Dragonstone Amulet | It needs a string so I can wear it | N | N |
525 | Crystal key | A very shiny key | N | N |
526 | Half of a key | A very shiny key | N | N |
527 | Half of a key | A very shiny key | N | N |
528 | Iron bar certificate | Each certificate exchangable at draynor market for 5 iron bars | N | Y |
529 | steel bar certificate | Each certificate exchangable at draynor market for 5 steel bars | N | Y |
530 | Mithril bar certificate | Each certificate exchangable at draynor market for 5 mithril bars | N | Y |
531 | silver bar certificate | Each certificate exchangable at draynor market for 5 silver bars | N | Y |
532 | Gold bar certificate | Each certificate exchangable at draynor market for 5 gold bars | N | Y |
533 | Lobster certificate | Each certificate exchangable at draynor market for 5 lobsters | N | Y |
534 | Raw lobster certificate | Each certificate exchangable at draynor market for 5 raw lobsters | N | Y |
535 | Swordfish certificate | Each certificate exchangable at draynor market for 5 swordfish | N | Y |
536 | Raw swordfish certificate | Each certificate exchangable at draynor market for 5 raw swordfish | N | Y |
537 | Diary | Property of Nora.T.Hag | N | N |
538 | Front door key | A house key | N | N |
539 | Ball | A child's ball | N | N |
540 | magnet | A very attractive magnet | N | N |
541 | Grey wolf fur | This would make warm clothing | N | N |
542 | uncut dragonstone | this would be worth more cut | N | N |
543 | Dragonstone ring | A valuable ring | N | N |
544 | Dragonstone necklace | I wonder if this is valuable | Y | N |
545 | Raw Shark | I should try cooking this | N | N |
546 | Shark | I'd better be careful eating this! | N | N |
547 | Burnt Shark | Oops! | N | N |
548 | Big Net | Useful for catching lots of fish | N | N |
549 | Casket | I hope there is treasure in it | N | N |
550 | Raw cod | I should try cooking this | N | N |
551 | Cod | Some nicely cooked fish | N | N |
552 | Raw Mackerel | I should try cooking this | N | N |
553 | Mackerel | Some nicely cooked fish | N | N |
554 | Raw Bass | I should try cooking this | N | N |
555 | Bass | Wow this is a big fish | N | N |
556 | Ice Gloves | These will keep my hands cold! | Y | N |
557 | Firebird Feather | A red hot feather | N | N |
558 | Firebird Feather | This is cool enough to hold now | N | N |
559 | Poisoned Iron dagger | Short but pointy | Y | N |
560 | Poisoned bronze dagger | Short but pointy | Y | N |
561 | Poisoned Steel dagger | Short but pointy | Y | N |
562 | Poisoned Mithril dagger | Short but pointy | Y | N |
563 | Poisoned Rune dagger | Short but pointy | Y | N |
564 | Poisoned Adamantite dagger | Short but pointy | Y | N |
565 | Poisoned Black dagger | Short but pointy | Y | N |
566 | Cure poison Potion | 3 doses of cure poison potion | N | N |
567 | Cure poison Potion | 2 doses of cure poison potion | N | N |
568 | Cure poison Potion | 1 dose of cure poison potion | N | N |
569 | Poison antidote | 3 doses of anti poison potion | N | N |
570 | Poison antidote | 2 doses of anti poison potion | N | N |
571 | Poison antidote | 1 dose of anti poison potion | N | N |
572 | weapon poison | For use on daggers and arrows | N | N |
573 | ID Paper | ID of Hartigen the black knight | N | N |
574 | Poison Bronze Arrows | Venomous looking arrows | N | Y |
575 | Christmas cracker | Use on another player to pull it | N | N |
576 | Party Hat | Party!!! | Y | N |
577 | Party Hat | Party!!! | Y | N |
578 | Party Hat | Party!!! | Y | N |
579 | Party Hat | Party!!! | Y | N |
580 | Party Hat | Party!!! | Y | N |
581 | Party Hat | Party!!! | Y | N |
582 | Miscellaneous key | I wonder what this unlocks | N | N |
583 | Bunch of keys | Some keys on a keyring | N | N |
584 | Whisky | A bottle of Draynor Malt | N | N |
585 | Candlestick | A valuable candlestick | N | N |
586 | Master thief armband | This denotes a great act of thievery | N | N |
587 | Blamish snail slime | Yuck | N | N |
588 | Blamish oil | made from the finest snail slime | N | N |
589 | Oily Fishing Rod | A rod covered in Blamish oil | N | N |
590 | lava eel | Strange it looks cooler now it's been cooked | N | N |
591 | Raw lava eel | A very strange eel | N | N |
592 | Poison Crossbow bolts | Good if you have a crossbow! | N | Y |
593 | Dragon sword | A Razor sharp sword | Y | N |
594 | Dragon axe | A vicious looking axe | Y | N |
595 | Jail keys | Keys to the black knight jail | N | N |
596 | Dusty Key | A key given to me by Velrak | N | N |
597 | Charged Dragonstone Amulet | A very powerful amulet | Y | N |
598 | Grog | A murky glass of some sort of drink | N | N |
599 | Candle | An unlit candle | N | N |
600 | black Candle | A spooky but unlit candle | N | N |
601 | Candle | A small slowly burning candle | N | N |
602 | black Candle | A spooky candle | N | N |
603 | insect repellant | Drives away all known 6 legged creatures | N | N |
604 | Bat bones | Ew it's a pile of bones | N | N |
605 | wax Bucket | It's a wooden bucket | N | N |
606 | Excalibur | This used to belong to king Arthur | Y | N |
607 | Druids robe | I feel closer to the Gods when I am wearing this | Y | N |
608 | Druids robe | Keeps a druids's knees nice and warm | Y | N |
609 | Eye patch | It makes me look very piratical | Y | N |
610 | Unenchanted Dragonstone Amulet | I wonder if I can get this enchanted | Y | N |
611 | Unpowered orb | I'd prefer it if it was powered | N | N |
612 | Fire orb | A magic glowing orb | N | N |
613 | Water orb | A magic glowing orb | N | N |
614 | Battlestaff | It's a slightly magical stick | Y | N |
615 | Battlestaff of fire | A Magical staff | Y | N |
616 | Battlestaff of water | A Magical staff | Y | N |
617 | Battlestaff of air | A Magical staff | Y | N |
618 | Battlestaff of earth | A Magical staff | Y | N |
619 | Blood-Rune | Used for high level missile spells | N | Y |
620 | Beer glass | I need to fill this with beer | N | N |
621 | glassblowing pipe | Use on molten glass to make things | N | N |
622 | seaweed | slightly damp seaweed | N | N |
623 | molten glass | hot glass ready to be blown | N | N |
624 | soda ash | one of the ingredients for making glass | N | N |
625 | sand | one of the ingredients for making glass | N | N |
626 | air orb | A magic glowing orb | N | N |
627 | earth orb | A magic glowing orb | N | N |
628 | bass certificate | Each certificate exchangable at Catherby for 5 bass | N | Y |
629 | Raw bass certificate | Each certificate exchangable at Catherby for 5 raw bass | N | Y |
630 | shark certificate | Each certificate exchangable at Catherby for 5 shark | N | Y |
631 | Raw shark certificate | Each certificate exchangable at Catherby for 5 raw shark | N | Y |
632 | Oak Logs | Logs cut from an oak tree | N | N |
633 | Willow Logs | Logs cut from a willow tree | N | N |
634 | Maple Logs | Logs cut from a maple tree | N | N |
635 | Yew Logs | Logs cut from a yew tree | N | N |
636 | Magic Logs | Logs made from magical wood | N | N |
637 | Headless Arrows | I need to attach arrow heads to these | N | Y |
638 | Iron Arrows | Arrows with iron heads | N | Y |
639 | Poison Iron Arrows | Venomous looking arrows | N | Y |
640 | Steel Arrows | Arrows with steel heads | N | Y |
641 | Poison Steel Arrows | Venomous looking arrows | N | Y |
642 | Mithril Arrows | Arrows with mithril heads | N | Y |
643 | Poison Mithril Arrows | Venomous looking arrows | N | Y |
644 | Adamantite Arrows | Arrows with adamantite heads | N | Y |
645 | Poison Adamantite Arrows | Venomous looking arrows | N | Y |
646 | Rune Arrows | Arrows with rune heads | N | Y |
647 | Poison Rune Arrows | Venomous looking arrows | N | Y |
648 | Oak Longbow | A Nice sturdy bow | Y | N |
649 | Oak Shortbow | Short but effective | Y | N |
650 | Willow Longbow | A Nice sturdy bow | Y | N |
651 | Willow Shortbow | Short but effective | Y | N |
652 | Maple Longbow | A Nice sturdy bow | Y | N |
653 | Maple Shortbow | Short but effective | Y | N |
654 | Yew Longbow | A Nice sturdy bow | Y | N |
655 | Yew Shortbow | Short but effective | Y | N |
656 | Magic Longbow | A Nice sturdy bow | Y | N |
657 | Magic Shortbow | Short but effective | Y | N |
658 | unstrung Oak Longbow | I need to find a string for this | N | N |
659 | unstrung Oak Shortbow | I need to find a string for this | N | N |
660 | unstrung Willow Longbow | I need to find a string for this | N | N |
661 | unstrung Willow Shortbow | I need to find a string for this | N | N |
662 | unstrung Maple Longbow | I need to find a string for this | N | N |
663 | unstrung Maple Shortbow | I need to find a string for this | N | N |
664 | unstrung Yew Longbow | I need to find a string for this | N | N |
665 | unstrung Yew Shortbow | I need to find a string for this | N | N |
666 | unstrung Magic Longbow | I need to find a string for this | N | N |
667 | unstrung Magic Shortbow | I need to find a string for this | N | N |
668 | barcrawl card | The official Alfred Grimhand barcrawl | N | N |
669 | bronze arrow heads | Not much use without the rest of the arrow! | N | Y |
670 | iron arrow heads | Not much use without the rest of the arrow! | N | Y |
671 | steel arrow heads | Not much use without the rest of the arrow! | N | Y |
672 | mithril arrow heads | Not much use without the rest of the arrow! | N | Y |
673 | adamantite arrow heads | Not much use without the rest of the arrow! | N | Y |
674 | rune arrow heads | Not much use without the rest of the arrow! | N | Y |
675 | flax | I should use this with a spinning wheel | N | N |
676 | bow string | I need a bow handle to attach this too | N | N |
677 | Easter egg | Happy Easter | N | N |
678 | scorpion cage | I need to catch some scorpions in this | N | N |
679 | scorpion cage | It has 1 scorpion in it | N | N |
680 | scorpion cage | It has 2 scorpions in it | N | N |
681 | scorpion cage | It has 3 scorpions in it | N | N |
682 | Enchanted Battlestaff of fire | A Magical staff | Y | N |
683 | Enchanted Battlestaff of water | A Magical staff | Y | N |
684 | Enchanted Battlestaff of air | A Magical staff | Y | N |
685 | Enchanted Battlestaff of earth | A Magical staff | Y | N |
686 | scorpion cage | It has 1 scorpion in it | N | N |
687 | scorpion cage | It has 1 scorpion in it | N | N |
688 | scorpion cage | It has 2 scorpions in it | N | N |
689 | scorpion cage | It has 2 scorpions in it | N | N |
690 | gold | this needs refining | N | N |
691 | gold bar | this looks valuable | N | N |
692 | Ruby ring | A valuable ring | N | N |
693 | Ruby necklace | I wonder if this is valuable | Y | N |
694 | Family crest | The crest of a varrocian noble family | N | N |
695 | Crest fragment | Part of the Fitzharmon family crest | N | N |
696 | Crest fragment | Part of the Fitzharmon family crest | N | N |
697 | Crest fragment | Part of the Fitzharmon family crest | N | N |
698 | Steel gauntlets | Very handy armour | Y | N |
699 | gauntlets of goldsmithing | metal gloves for gold making | Y | N |
700 | gauntlets of cooking | Used for cooking fish | Y | N |
701 | gauntlets of chaos | improves bolt spells | Y | N |
702 | robe of Zamorak | A robe worn by worshippers of Zamorak | Y | N |
703 | robe of Zamorak | A robe worn by worshippers of Zamorak | Y | N |
704 | Address Label | To lord Handelmort- Handelmort mansion | N | N |
705 | Tribal totem | It represents some sort of tribal god | N | N |
706 | tourist guide | Your definitive guide to Ardougne | N | N |
707 | spice | Put it in uncooked stew to make curry | N | N |
708 | Uncooked curry | I need to cook this | N | N |
709 | curry | It's a spicey hot curry | N | N |
710 | Burnt curry | Eew it's horribly burnt | N | N |
711 | yew logs certificate | Each certificate exchangable at Ardougne for 5 yew logs | N | Y |
712 | maple logs certificate | Each certificate exchangable at Ardougne for 5 maple logs | N | Y |
713 | willow logs certificate | Each certificate exchangable at Ardougne for 5 willow logs | N | Y |
714 | lockpick | It makes picking some locks easier | N | N |
715 | Red vine worms | Strange little red worms | N | Y |
716 | Blanket | A child's blanket | N | N |
717 | Raw giant carp | I should try cooking this | N | N |
718 | giant Carp | Some nicely cooked fish | N | N |
719 | Fishing competition Pass | Admits one to the Hemenster fishing competition | N | N |
720 | Hemenster fishing trophy | Hurrah you won a fishing competition | N | N |
721 | Pendant of Lucien | Gets me through the chamber of fear | Y | N |
722 | Boots of lightfootedness | Wearing these makes me feel like I am floating | Y | N |
723 | Ice Arrows | Can only be fired with yew or magic bows | N | Y |
724 | Lever | This was once attached to something | N | N |
725 | Staff of Armadyl | A Magical staff | Y | N |
726 | Pendant of Armadyl | Allows me to fight Lucien | Y | N |
727 | Large cog | A large old cog | N | N |
728 | Large cog | A large old cog | N | N |
729 | Large cog | A large old cog | N | N |
730 | Large cog | A large old cog | N | N |
731 | Rat Poison | This stuff looks nasty | N | N |
732 | shiny Key | Quite a small key | N | N |
733 | khazard Helmet | A medium sized helmet | Y | N |
734 | khazard chainmail | A series of connected metal rings | Y | N |
735 | khali brew | A bottle of khazard's worst brew | N | N |
736 | khazard cell keys | Keys for General Khazard's cells | N | N |
737 | Poison chalice | A strange looking drink | N | N |
738 | magic whistle | A small tin whistle | N | N |
739 | Cup of tea | A nice cup of tea | N | N |
740 | orb of protection | a strange glowing green orb | N | N |
741 | orbs of protection | two strange glowing green orbs | N | N |
742 | Holy table napkin | a cloth given to me by sir Galahad | N | N |
743 | bell | I wonder what happens when i ring it | N | N |
744 | Gnome Emerald Amulet of protection | It improves my defense | Y | N |
745 | magic golden feather | It will point the way for me | N | N |
746 | Holy grail | A holy and powerful artifact | N | N |
747 | Script of Hazeel | An old scroll with strange ancient text | N | N |
748 | Pineapple | It can be cut up with a knife | N | N |
749 | Pineapple ring | Exotic fruit | N | N |
750 | Pineapple Pizza | A tropicana pizza | N | N |
751 | Half pineapple Pizza | Half of this pizza has been eaten | N | N |
752 | Magic scroll | Maybe I should read it | N | N |
753 | Mark of Hazeel | A large metal amulet | N | N |
754 | bloody axe of zamorak | A vicious looking axe | Y | N |
755 | carnillean armour | the carnillean family armour | N | N |
756 | Carnillean Key | An old rusty key | N | N |
757 | Cattle prod | An old cattle prod | N | N |
758 | Plagued sheep remains | These sheep remains are infected | N | N |
759 | Poisoned animal feed | This looks nasty | N | N |
760 | Protective jacket | A thick heavy leather top | Y | N |
761 | Protective trousers | A thick pair of leather trousers | Y | N |
762 | Plagued sheep remains | These sheep remains are infected | N | N |
763 | Plagued sheep remains | These sheep remains are infected | N | N |
764 | Plagued sheep remains | These sheep remains are infected | N | N |
765 | dwellberries | some rather pretty blue berries | N | N |
766 | Gasmask | Stops me breathing nasty stuff | Y | N |
767 | picture | A picture of a lady called Elena | N | N |
768 | Book | Turnip growing for beginners | N | N |
769 | Seaslug | a rather nasty looking crustacean | N | N |
770 | chocolaty milk | Milk with chocolate in it | N | N |
771 | Hangover cure | It doesn't look very tasty | N | N |
772 | Chocolate dust | I prefer it in a bar shape | N | N |
773 | Torch | A unlit home made torch | N | N |
774 | Torch | A lit home made torch | N | N |
775 | warrant | A search warrant for a house in Ardougne | N | N |
776 | Damp sticks | Some damp wooden sticks | N | N |
777 | Dry sticks | Some dry wooden sticks | N | N |
778 | Broken glass | Glass from a broken window pane | N | N |
779 | oyster pearls | I could work wonders with these and a chisel | N | N |
780 | little key | Quite a small key | N | N |
781 | Scruffy note | It seems to say hongorer lure | N | N |
782 | Glarial's amulet | A bright green gem set in a necklace | Y | N |
783 | Swamp tar | A foul smelling thick tar like substance | N | Y |
784 | Uncooked Swamp paste | A thick tar like substance mixed with flour | N | Y |
785 | Swamp paste | A tar like substance mixed with flour and warmed | N | Y |
786 | Oyster pearl bolts | Great if you have a crossbow! | N | Y |
787 | Glarials pebble | A small pebble with elven inscription | N | N |
788 | book on baxtorian | A book on elven history in north runescape | N | N |
789 | large key | I wonder what this is the key to | N | N |
790 | Oyster pearl bolt tips | Can be used to improve crossbow bolts | N | Y |
791 | oyster | It's empty | N | N |
792 | oyster pearls | I could work wonders with these and a chisel | N | N |
793 | oyster | It's a rare oyster | N | N |
794 | Soil | It's a bucket of fine soil | N | N |
795 | Dragon medium Helmet | A medium sized helmet | Y | N |
796 | Mithril seed | Magical seeds in a mithril case | N | Y |
797 | An old key | A door key | N | N |
798 | pigeon cage | It's for holding pigeons | N | N |
799 | Messenger pigeons | some very plump birds | N | N |
800 | Bird feed | A selection of mixed seeds | N | N |
801 | Rotten apples | Yuck! | N | N |
802 | Doctors gown | I do feel clever wearing this | Y | N |
803 | Bronze key | A heavy key | N | N |
804 | Distillator | It's for seperating compounds | N | N |
805 | Glarial's urn | An urn containing glarials ashes | N | N |
806 | Glarial's urn | An empty metal urn | N | N |
807 | Priest robe | I feel closer to saradomin in this | Y | N |
808 | Priest gown | I feel closer to saradomin in this | Y | N |
809 | Liquid Honey | This isn't worth much | N | N |
810 | Ethenea | An expensive colourless liquid | N | N |
811 | Sulphuric Broline | it's highly poisonous | N | N |
812 | Plague sample | An air tight tin container | N | N |
813 | Touch paper | For scientific testing | N | N |
814 | Dragon Bones | Ew it's a pile of bones | N | N |
815 | Herb | I need a closer look to identify this | N | N |
816 | Snake Weed | A very rare jungle herb | N | N |
817 | Herb | I need a closer look to identify this | N | N |
818 | Ardrigal | An interesting | N | N |
819 | Herb | I need a closer look to identify this | N | N |
820 | Sito Foil | An rare species of jungle herb | N | N |
821 | Herb | I need a closer look to identify this | N | N |
822 | Volencia Moss | A very rare species of jungle herb | N | N |
823 | Herb | I need a closer look to identify this | N | N |
824 | Rogues Purse | A rare species of jungle herb | N | N |
825 | Soul-Rune | Used for high level curse spells | N | Y |
826 | king lathas Amulet | The amulet is red | Y | N |
827 | Bronze Spear | A bronze tipped spear | Y | N |
828 | halloween mask | aaaarrrghhh ... i'm a monster | Y | N |
829 | Dragon bitter | A glass of frothy ale | N | N |
830 | Greenmans ale | A glass of frothy ale | N | N |
831 | halloween mask | aaaarrrghhh ... i'm a monster | Y | N |
832 | halloween mask | aaaarrrghhh ... i'm a monster | Y | N |
833 | cocktail glass | For sipping cocktails | N | N |
834 | cocktail shaker | For mixing cocktails | N | N |
835 | Bone Key | A key delicately carved key made from a single piece of bone | N | N |
836 | gnome robe | A high fashion robe | Y | N |
837 | gnome robe | A high fashion robe | Y | N |
838 | gnome robe | A high fashion robe | Y | N |
839 | gnome robe | A high fashion robe | Y | N |
840 | gnome robe | A high fashion robe | Y | N |
841 | gnomeshat | A silly pointed hat | Y | N |
842 | gnomeshat | A silly pointed hat | Y | N |
843 | gnomeshat | A silly pointed hat | Y | N |
844 | gnomeshat | A silly pointed hat | Y | N |
845 | gnomeshat | A silly pointed hat | Y | N |
846 | gnome top | rometti - the ultimate in gnome design | Y | N |
847 | gnome top | rometti - the only name in gnome fashion! | Y | N |
848 | gnome top | rometti - the only name in gnome fashion! | Y | N |
849 | gnome top | rometti - the only name in gnome fashion! | Y | N |
850 | gnome top | rometti - the only name in gnome fashion! | Y | N |
851 | gnome cocktail guide | A book on tree gnome cocktails | N | N |
852 | Beads of the dead | A curious looking neck ornament | Y | N |
853 | cocktail glass | For sipping cocktails | N | N |
854 | cocktail glass | For sipping cocktails | N | N |
855 | lemon | It's very fresh | N | N |
856 | lemon slices | It's very fresh | N | N |
857 | orange | It's very fresh | N | N |
858 | orange slices | It's very fresh | N | N |
859 | Diced orange | Fresh chunks of orange | N | N |
860 | Diced lemon | Fresh chunks of lemon | N | N |
861 | Fresh Pineapple | It can be cut up with a knife | N | N |
862 | Pineapple chunks | Fresh chunks of pineapple | N | N |
863 | lime | It's very fresh | N | N |
864 | lime chunks | Fresh chunks of lime | N | N |
865 | lime slices | It's very fresh | N | N |
866 | fruit blast | A cool refreshing fruit mix | N | N |
867 | odd looking cocktail | A cool refreshing mix | N | N |
868 | Whisky | A locally brewed Malt | N | N |
869 | vodka | A strong spirit | N | N |
870 | gin | A strong spirit | N | N |
871 | cream | Fresh cream | N | N |
872 | Drunk dragon | A warm creamy alcoholic beverage | N | N |
873 | Equa leaves | Small sweet smelling leaves | N | N |
874 | SGG | A short green guy..looks good | N | N |
875 | Chocolate saturday | A warm creamy alcoholic beverage | N | N |
876 | brandy | A strong spirit | N | N |
877 | blurberry special | Looks good..smells strong | N | N |
878 | wizard blizzard | Looks like a strange mix | N | N |
879 | pineapple punch | A fresh healthy fruit mix | N | N |
880 | gnomebatta dough | Dough formed into a base | N | N |
881 | gianne dough | It's made from a secret recipe | N | N |
882 | gnomebowl dough | Dough formed into a bowl shape | N | N |
883 | gnomecrunchie dough | Dough formed into cookie shapes | N | N |
884 | gnomebatta | A baked dough base | N | N |
885 | gnomebowl | A baked dough bowl | N | N |
886 | gnomebatta | It's burnt to a sinder | N | N |
887 | gnomecrunchie | They're burnt to a sinder | N | N |
888 | gnomebowl | It's burnt to a sinder | N | N |
889 | Uncut Red Topaz | A semi precious stone | N | N |
890 | Uncut Jade | A semi precious stone | N | N |
891 | Uncut Opal | A semi precious stone | N | N |
892 | Red Topaz | A semi precious stone | N | N |
893 | Jade | A semi precious stone | N | N |
894 | Opal | A semi precious stone | N | N |
895 | Swamp Toad | Slippery little blighters | N | N |
896 | Toad legs | Gnome delicacy apparently | N | N |
897 | King worm | Gnome delicacy apparently | N | N |
898 | Gnome spice | Aluft Giannes secret reciepe | N | N |
899 | gianne cook book | Aluft Giannes favorite dishes | N | N |
900 | gnomecrunchie | yum ... smells good | N | N |
901 | cheese and tomato batta | Smells really good | N | N |
902 | toad batta | actually smells quite good | N | N |
903 | gnome batta | smells like pants | N | N |
904 | worm batta | actually smells quite good | N | N |
905 | fruit batta | actually smells quite good | N | N |
906 | Veg batta | well..it looks healthy | N | N |
907 | Chocolate bomb | Looks great | N | N |
908 | Vegball | Looks pretty healthy | N | N |
909 | worm hole | actually smells quite good | N | N |
910 | Tangled toads legs | actually smells quite good | N | N |
911 | Choc crunchies | yum ... smells good | N | N |
912 | Worm crunchies | actually smells quite good | N | N |
913 | Toad crunchies | actually smells quite good | N | N |
914 | Spice crunchies | yum ... smells good | N | N |
915 | Crushed Gemstone | A gemstone that has been smashed | N | N |
916 | Blurberry badge | an official cocktail maker | N | N |
917 | Gianne badge | an official gianne chef | N | N |
918 | tree gnome translation | Translate the old gnome tounge | N | N |
919 | Bark sample | A sample from the grand tree | N | N |
920 | War ship | A model of a karamja warship | N | N |
921 | gloughs journal | Glough's private notes | N | N |
922 | invoice | A note with foreman's timber order | N | N |
923 | Ugthanki Kebab | A strange smelling Kebab made from Ugthanki meat - it doesn't look too good | N | N |
924 | special curry | It's a spicy hot curry | N | N |
925 | glough's key | Glough left this at anita's | N | N |
926 | glough's notes | Scribbled notes and diagrams | N | N |
927 | Pebble | The pebble has an inscription | N | N |
928 | Pebble | The pebble has an inscription | N | N |
929 | Pebble | The pebble has an inscription | N | N |
930 | Pebble | The pebble has an inscription | N | N |
931 | Daconia rock | A magicaly crafted stone | N | N |
932 | Sinister key | You get a sense of dread from this key | N | N |
933 | Herb | I need a closer look to identify this | N | N |
934 | Torstol | A useful herb | N | N |
935 | Unfinished potion | I need Jangerberries to finish this Torstol potion | N | N |
936 | Jangerberries | They don't look very ripe | N | N |
937 | fruit blast | A cool refreshing fruit mix | N | N |
938 | blurberry special | Looks good..smells strong | N | N |
939 | wizard blizzard | Looks like a strange mix | N | N |
940 | pineapple punch | A fresh healthy fruit mix | N | N |
941 | SGG | A short green guy..looks good | N | N |
942 | Chocolate saturday | A warm creamy alcoholic beverage | N | N |
943 | Drunk dragon | A warm creamy alcoholic beverage | N | N |
944 | cheese and tomato batta | Smells really good | N | N |
945 | toad batta | actually smells quite good | N | N |
946 | gnome batta | smells like pants | N | N |
947 | worm batta | actually smells quite good | N | N |
948 | fruit batta | actually smells quite good | N | N |
949 | Veg batta | well..it looks healthy | N | N |
950 | Chocolate bomb | Looks great | N | N |
951 | Vegball | Looks pretty healthy | N | N |
952 | worm hole | actually smells quite good | N | N |
953 | Tangled toads legs | actually smells quite good | N | N |
954 | Choc crunchies | yum ... smells good | N | N |
955 | Worm crunchies | actually smells quite good | N | N |
956 | Toad crunchies | actually smells quite good | N | N |
957 | Spice crunchies | yum ... smells good | N | N |
958 | Stone-Plaque | A stone plaque with carved letters in it | N | N |
959 | Tattered Scroll | An ancient tattered scroll | N | N |
960 | Crumpled Scroll | An ancient crumpled scroll | N | N |
961 | Bervirius Tomb Notes | Notes taken from the tomb of Bervirius | N | N |
962 | Zadimus Corpse | The remains of Zadimus | N | N |
963 | Potion of Zamorak | It looks scary | N | N |
964 | Potion of Zamorak | It looks scary | N | N |
965 | Potion of Zamorak | It looks scary | N | N |
966 | Boots | They're soft and silky | Y | N |
967 | Boots | They're soft and silky | Y | N |
968 | Boots | They're soft and silky | Y | N |
969 | Boots | They're soft and silky | Y | N |
970 | Boots | They're soft and silky | Y | N |
971 | Santa's hat | It's a santa claus' hat | Y | N |
972 | Locating Crystal | A magical crystal sphere | N | N |
973 | Sword Pommel | An ivory sword pommel | N | N |
974 | Bone Shard | A slender piece of bone | N | N |
975 | Steel Wire | Useful for crafting items | N | N |
976 | Bone Beads | Beads carved out of bone | N | N |
977 | Rashiliya Corpse | The remains of the Zombie Queen | N | N |
978 | ResetCrystal | Helps reset things in game | N | N |
979 | Bronze Wire | Useful for crafting items | N | N |
980 | Present | Click to use this on a friend | N | N |
981 | Gnome Ball | Lets play | N | N |
982 | Papyrus | Used for making notes | N | N |
983 | A lump of Charcoal | a lump of cooked coal good for making marks. | N | N |
984 | Arrow | linen wrapped around an arrow head | N | N |
985 | Lit Arrow | A flamming arrow | N | Y |
986 | Rocks | A few Large rocks | N | N |
987 | Paramaya Rest Ticket | Allows you to rest in the luxurius Paramaya Inn | N | N |
988 | Ship Ticket | Allows you passage on the 'Lady of the Waves' ship. | N | N |
989 | Damp cloth | It smells as if it's been doused in alcohol | N | N |
990 | Desert Boots | Boots made specially for the desert | Y | N |
991 | Orb of light | The orb gives you a safe peaceful feeling | N | N |
992 | Orb of light | The orb gives you a safe peaceful feeling | N | N |
993 | Orb of light | The orb gives you a safe peaceful feeling | N | N |
994 | Orb of light | The orb gives you a safe peaceful feeling | N | N |
995 | Railing | A broken metal rod | N | N |
996 | Randas's journal | An old journal with several pages missing | N | N |
997 | Unicorn horn | Poor unicorn went splat! | N | N |
998 | Coat of Arms | A symbol of truth and all that is good | N | N |
999 | Coat of Arms | A symbol of truth and all that is good | N | N |
1000 | Staff of Iban | It's a slightly magical stick | Y | N |
1001 | Dwarf brew | It's a bucket of home made brew | N | N |
1002 | Ibans Ashes | A heap of ashes | N | N |
1003 | Cat | She's sleeping..i think! | N | N |
1004 | A Doll of Iban | A strange doll made from sticks and cloth | N | N |
1005 | Old Journal | I wonder who wrote this! | N | N |
1006 | Klank's gauntlets | Heavy hand protection | Y | N |
1007 | Iban's shadow | A dark mystical liquid | N | N |
1008 | Iban's conscience | The remains of a dove that died long ago | N | N |
1009 | Amulet of Othainian | A strange looking amulet | Y | N |
1010 | Amulet of Doomion | A strange looking amulet | Y | N |
1011 | Amulet of Holthion | A strange looking amulet | Y | N |
1012 | keep key | A small prison key | N | N |
1013 | Bronze Throwing Dart | A deadly throwing dart with a bronze tip. | Y | X |
1014 | Prototype Throwing Dart | A proto type of a deadly throwing dart. | N | Y |
1015 | Iron Throwing Dart | A deadly throwing dart with an iron tip. | Y | X |
1016 | Full Water Skin | A skinful of water | N | N |
1017 | Lens mould | A peculiar mould in the shape of a disc | N | N |
1018 | Lens | A perfectly formed glass disc | N | N |
1019 | Desert Robe | Cool light robe to wear in the desert | Y | N |
1020 | Desert Shirt | A light cool shirt to wear in the desert | Y | N |
1021 | Metal Key | A large metalic key. | N | N |
1022 | Slaves Robe Bottom | A dirty desert skirt | Y | N |
1023 | Slaves Robe Top | A dirty desert shirt | Y | N |
1024 | Steel Throwing Dart | A deadly throwing dart with a steel tip. | Y | X |
1025 | Astrology Book | A book on Astrology in runescape | N | N |
1026 | Unholy Symbol mould | use this with silver in a furnace | N | N |
1027 | Unholy Symbol of Zamorak | this needs stringing | N | N |
1028 | Unblessed Unholy Symbol of Zamorak | this needs blessing | Y | N |
1029 | Unholy Symbol of Zamorak | a symbol indicating allegiance to Zamorak | Y | N |
1030 | Shantay Desert Pass | Allows you into the desert through the Shantay pass worth 5 gold. | N | Y |
1031 | Staff of Iban | The staff is damaged | N | N |
1032 | Dwarf cannon base | bang | N | N |
1033 | Dwarf cannon stand | bang | N | N |
1034 | Dwarf cannon barrels | bang | N | N |
1035 | Dwarf cannon furnace | bang | N | N |
1036 | Fingernails | Ugh gross! | N | N |
1037 | Powering crystal1 | An intricately cut gemstone | N | N |
1038 | Mining Barrel | A roughly constructed barrel for carrying rock. | N | N |
1039 | Ana in a Barrel | A roughly constructed barrel with an Ana in it! | N | N |
1040 | Stolen gold | I wish I could spend it | N | N |
1041 | multi cannon ball | A heavy metal spiked ball | N | Y |
1042 | Railing | A metal railing replacement | N | N |
1043 | Ogre tooth | big sharp and nasty | N | N |
1044 | Ogre relic | A grotesque symbol of the ogres | N | N |
1045 | Skavid map | A map of cave locations | N | N |
1046 | dwarf remains | The remains of a dwarf savaged by goblins | N | N |
1047 | Key | A key for a chest | N | N |
1048 | Ogre relic part | A piece of a statue | N | N |
1049 | Ogre relic part | A piece of a statue | N | N |
1050 | Ogre relic part | A piece of a statue | N | N |
1051 | Ground bat bones | The ground bones of a bat | N | N |
1052 | Unfinished potion | I need another ingredient to finish the shaman potion | N | N |
1053 | Ogre potion | A strange liquid | N | N |
1054 | Magic ogre potion | A strange liquid that bubbles with power | N | N |
1055 | Tool kit | These could be handy! | N | N |
1056 | Nulodion's notes | Construction notes for dwarf cannon ammo | N | N |
1057 | cannon ammo mould | Used to make cannon ammo | N | N |
1058 | Tenti Pineapple | The most delicious in the whole of Kharid | N | N |
1059 | Bedobin Copy Key | A copy of a key for the captains of the mining camps chest | N | N |
1060 | Technical Plans | Very technical looking plans for making a thrown weapon of some sort | N | N |
1061 | Rock cake | Yum... I think! | N | N |
1062 | Bronze dart tips | Dangerous looking dart tips - need feathers for flight | N | Y |
1063 | Iron dart tips | Dangerous looking dart tips - need feathers for flight | N | Y |
1064 | Steel dart tips | Dangerous looking dart tips - need feathers for flight | N | Y |
1065 | Mithril dart tips | Dangerous looking dart tips - need feathers for flight | N | Y |
1066 | Adamantite dart tips | Dangerous looking dart tips - need feathers for flight | N | Y |
1067 | Rune dart tips | Dangerous looking dart tips - need feathers for flight | N | Y |
1068 | Mithril Throwing Dart | A deadly throwing dart with a mithril tip. | Y | X |
1069 | Adamantite Throwing Dart | A deadly throwing dart with an adamantite tip. | Y | X |
1070 | Rune Throwing Dart | A deadly throwing dart with a runite tip. | Y | X |
1071 | Prototype dart tip | Dangerous looking dart tip - needs feathers for flight | N | Y |
1072 | info document | read to access variable choices | N | N |
1073 | Instruction manual | An old note book | N | N |
1074 | Unfinished potion | I need another ingredient to finish this potion | N | N |
1075 | Iron throwing knife | A finely balanced knife | Y | N |
1076 | Bronze throwing knife | A finely balanced knife | Y | N |
1077 | Steel throwing knife | A finely balanced knife | Y | N |
1078 | Mithril throwing knife | A finely balanced knife | Y | N |
1079 | Adamantite throwing knife | A finely balanced knife | Y | N |
1080 | Rune throwing knife | A finely balanced knife | Y | N |
1081 | Black throwing knife | A finely balanced knife | Y | N |
1082 | Water Skin mostly full | A half full skin of water | N | N |
1083 | Water Skin mostly empty | A half empty skin of water | N | N |
1084 | Water Skin mouthful left | A waterskin with a mouthful of water left | N | N |
1085 | Empty Water Skin | A completely empty waterskin | N | N |
1086 | nightshade | Deadly! | N | N |
1087 | Shaman robe | This has been left by one of the dead ogre shaman | N | N |
1088 | Iron Spear | An iron tipped spear | Y | N |
1089 | Steel Spear | A steel tipped spear | Y | N |
1090 | Mithril Spear | A mithril tipped spear | Y | N |
1091 | Adamantite Spear | An adamantite tipped spear | Y | N |
1092 | Rune Spear | A rune tipped spear | Y | N |
1093 | Cat | it's fluffs | N | N |
1094 | Seasoned Sardine | They don't smell any better | N | N |
1095 | Kittens | purrr | N | N |
1096 | Kitten | purrr | N | N |
1097 | Wrought iron key | This key clears unlocks a very sturdy gate of some sort. | N | N |
1098 | Cell Door Key | A roughly hewn key | N | N |
1099 | A free Shantay Disclaimer | Very important information. | N | N |
1100 | Doogle leaves | Small sweet smelling leaves | N | N |
1101 | Raw Ugthanki Meat | I need to cook this first | N | N |
1102 | Tasty Ugthanki Kebab | A fresh Kebab made from Ugthanki meat | N | N |
1103 | Cooked Ugthanki Meat | Freshly cooked Ugthanki meat | N | N |
1104 | Uncooked Pitta Bread | I need to cook this. | N | N |
1105 | Pitta Bread | Mmmm I need to add some other ingredients yet. | N | N |
1106 | Tomato Mixture | A mixture of tomatoes in a bowl | N | N |
1107 | Onion Mixture | A mixture of onions in a bowl | N | N |
1108 | Onion and Tomato Mixture | A mixture of onions and tomatoes in a bowl | N | N |
1109 | Onion and Tomato and Ugthanki Mix | A mixture of onions and tomatoes and Ugthanki meat in a bowl | N | N |
1110 | Burnt Pitta Bread | Urgh - it's all burnt | N | N |
1111 | Panning tray | used for panning gold | N | N |
1112 | Panning tray | this tray contains gold nuggets | N | N |
1113 | Panning tray | this tray contains mud | N | N |
1114 | Rock pick | a sharp pick for cracking rocks | N | N |
1115 | Specimen brush | stiff brush for cleaning specimens | N | N |
1116 | Specimen jar | a jar for holding soil samples | N | N |
1117 | Rock Sample | A rock sample | N | N |
1118 | gold Nuggets | Real gold pieces! | N | Y |
1119 | cat | looks like a healthy one | N | N |
1120 | Scrumpled piece of paper | A piece of paper with barely legible writing - looks like a recipe! | N | N |
1121 | Digsite info | IAN ONLY | N | N |
1122 | Poisoned Bronze Throwing Dart | A venomous throwing dart with a bronze tip. | Y | X |
1123 | Poisoned Iron Throwing Dart | A venomous throwing dart with an iron tip. | Y | X |
1124 | Poisoned Steel Throwing Dart | A venomous throwing dart with a steel tip. | Y | X |
1125 | Poisoned Mithril Throwing Dart | A venomous throwing dart with a mithril tip. | Y | X |
1126 | Poisoned Adamantite Throwing Dart | A venomous throwing dart with an adamantite tip. | Y | X |
1127 | Poisoned Rune Throwing Dart | A deadly venomous dart with a runite tip. | Y | X |
1128 | Poisoned Bronze throwing knife | A finely balanced knife with a coating of venom | Y | N |
1129 | Poisoned Iron throwing knife | A finely balanced knife with a coating of venom | Y | N |
1130 | Poisoned Steel throwing knife | A finely balanced knife with a coating of venom | Y | N |
1131 | Poisoned Mithril throwing knife | A finely balanced knife with a coating of venom | Y | N |
1132 | Poisoned Black throwing knife | A finely balanced knife with a coating of venom | Y | N |
1133 | Poisoned Adamantite throwing knife | A finely balanced knife with a coating of venom | Y | N |
1134 | Poisoned Rune throwing knife | A finely balanced knife with a coating of venom | Y | N |
1135 | Poisoned Bronze Spear | A bronze tipped spear with added venom | Y | N |
1136 | Poisoned Iron Spear | An iron tipped spear with added venom | Y | N |
1137 | Poisoned Steel Spear | A steel tipped spear with added venom | Y | N |
1138 | Poisoned Mithril Spear | A mithril tipped spear with added venom | Y | N |
1139 | Poisoned Adamantite Spear | An adamantite tipped spear with added venom | Y | N |
1140 | Poisoned Rune Spear | A rune tipped spear with added venom | Y | N |
1141 | Book of experimental chemistry | A book on experiments with volatile chemicals | N | N |
1142 | Level 1 Certificate | A Certificate of education | N | N |
1143 | Level 2 Certificate | A Certificate of education | N | N |
1144 | Level 3 Certificate | A Certificate of education | N | N |
1145 | Trowel | A small device for digging | N | N |
1146 | Stamped letter of recommendation | A stamped scroll with a recommendation on it | N | N |
1147 | Unstamped letter of recommendation | I hereby recommend this student to undertake the Varrock City earth sciences exams | N | N |
1148 | Rock Sample | A rock sample | N | N |
1149 | Rock Sample | A rock sample | N | N |
1150 | Cracked rock Sample | It's been cracked open | N | N |
1151 | Belt buckle | been here some time | N | N |
1152 | Powering crystal2 | An intricately cut gemstone | N | N |
1153 | Powering crystal3 | An intricately cut gemstone | N | N |
1154 | Powering crystal4 | An intricately cut gemstone | N | N |
1155 | Old boot | that's been here some time | N | N |
1156 | Bunny ears | Get another from the clothes shop if you die | Y | N |
1157 | Damaged armour | that's been here some time | N | N |
1158 | Damaged armour | that's been here some time | N | N |
1159 | Rusty sword | that's been here some time | N | N |
1160 | Ammonium Nitrate | An acrid chemical | N | N |
1161 | Nitroglycerin | A strong acidic formula | N | N |
1162 | Old tooth | a large single tooth | N | N |
1163 | Radimus Scrolls | Scrolls that Radimus gave you | N | N |
1164 | chest key | A small key for a chest | N | N |
1165 | broken arrow | that's been here some time | N | N |
1166 | buttons | they've been here some time | N | N |
1167 | broken staff | that's been here some time | N | N |
1168 | vase | An old vase | N | N |
1169 | ceramic remains | some ancient pottery | N | N |
1170 | Broken glass | smashed glass | N | N |
1171 | Unidentified powder | who knows what this is for? | N | N |
1172 | Machette | A purpose built tool for cutting through thick jungle. | Y | N |
1173 | Scroll | A letter written by the expert | N | N |
1174 | stone tablet | some ancient script is engraved on here | N | N |
1175 | Talisman of Zaros | an ancient item | N | N |
1176 | Explosive compound | A dark mystical powder | N | N |
1177 | Bull Roarer | A sound producing instrument - it may attract attention | N | N |
1178 | Mixed chemicals | A pungent mix of 2 chemicals | N | N |
1179 | Ground charcoal | Powdered charcoal! | N | N |
1180 | Mixed chemicals | A pungent mix of 3 chemicals | N | N |
1181 | Spell scroll | A magical scroll | N | N |
1182 | Yommi tree seed | A magical seed that grows into a Yommi tree - these need to be germinated | N | Y |
1183 | Totem Pole | A well crafted totem pole | N | N |
1184 | Dwarf cannon base | bang | N | N |
1185 | Dwarf cannon stand | bang | N | N |
1186 | Dwarf cannon barrels | bang | N | N |
1187 | Dwarf cannon furnace | bang | N | N |
1188 | Golden Bowl | A specially made bowl constructed out of pure gold | N | N |
1189 | Golden Bowl with pure water | A golden bowl filled with pure water | N | N |
1190 | Raw Manta ray | A rare catch! | N | N |
1191 | Manta ray | A rare catch! | N | N |
1192 | Raw Sea turtle | A rare catch! | N | N |
1193 | Sea turtle | Tasty! | N | N |
1194 | Annas Silver Necklace | A necklace coated with silver | Y | N |
1195 | Bobs Silver Teacup | A tea cup coated with silver | N | N |
1196 | Carols Silver Bottle | A little bottle coated with silver | N | N |
1197 | Davids Silver Book | An ornamental book coated with silver | N | N |
1198 | Elizabeths Silver Needle | An ornamental needle coated with silver | N | N |
1199 | Franks Silver Pot | A small pot coated with silver | N | N |
1200 | Thread | A piece of red thread discovered at the scene of the crime | N | N |
1201 | Thread | A piece of green thread discovered at the scene of the crime | N | N |
1202 | Thread | A piece of blue thread discovered at the scene of the crime | N | N |
1203 | Flypaper | Sticky paper for catching flies | N | N |
1204 | Murder Scene Pot | The pot has a sickly smell of poison mixed with wine | N | N |
1205 | A Silver Dagger | Dagger Found at crime scene | Y | N |
1206 | Murderers fingerprint | An impression of the murderers fingerprint | N | N |
1207 | Annas fingerprint | An impression of Annas fingerprint | N | N |
1208 | Bobs fingerprint | An impression of Bobs fingerprint | N | N |
1209 | Carols fingerprint | An impression of Carols fingerprint | N | N |
1210 | Davids fingerprint | An impression of Davids fingerprint | N | N |
1211 | Elizabeths fingerprint | An impression of Elizabeths fingerprint | N | N |
1212 | Franks fingerprint | An impression of Franks fingerprint | N | N |
1213 | Zamorak Cape | A cape from the almighty zamorak | Y | N |
1214 | Saradomin Cape | A cape from the almighty saradomin | Y | N |
1215 | Guthix Cape | A cape from the almighty guthix | Y | N |
1216 | Staff of zamorak | It's a stick of the gods | Y | N |
1217 | Staff of guthix | It's a stick of the gods | Y | N |
1218 | Staff of Saradomin | It's a stick of the gods | Y | N |
1219 | A chunk of crystal | A reddish crystal fragment - it looks like it formed a shape at one time. | N | N |
1220 | A lump of crystal | A reddish crystal fragment - it looks like it formed a shape at one time. | N | N |
1221 | A hunk of crystal | A reddish crystal fragment - it looks like it formed a shape at one time. | N | N |
1222 | A red crystal | A heart shaped red crystal | N | N |
1223 | Unidentified fingerprint | An impression of the murderers fingerprint | N | N |
1224 | Annas Silver Necklace | A silver necklace coated with flour | Y | N |
1225 | Bobs Silver Teacup | A silver tea cup coated with flour | N | N |
1226 | Carols Silver Bottle | A little silver bottle coated with flour | N | N |
1227 | Davids Silver Book | An ornamental silver book coated with flour | N | N |
1228 | Elizabeths Silver Needle | An ornamental silver needle coated with flour | N | N |
1229 | Franks Silver Pot | A small silver pot coated with flour | N | N |
1230 | A Silver Dagger | Dagger Found at crime scene coated with flour | Y | N |
1231 | A glowing red crystal | A glowing heart shaped red crystal - great magic must be present in this item | N | N |
1232 | Unidentified liquid | A strong acidic formula | N | N |
1233 | Radimus Scrolls | Mission briefing and the completed map of Karamja - Sir Radimus will be pleased... | N | N |
1234 | Robe | A worn robe | Y | N |
1235 | Armour | An unusually red armour | N | N |
1236 | Dagger | Short but pointy | Y | N |
1237 | eye patch | It makes me look very piratical | Y | N |
1238 | Booking of Binding | An ancient tome on Demonology | N | N |
1239 | Holy Water Vial | A deadly potion against evil kin | Y | N |
1240 | Enchanted Vial | This enchanted vial is empty - but is ready for magical liquids. | N | N |
1241 | Scribbled notes | It looks like a page ripped from a book | N | N |
1242 | Scrawled notes | It looks like a page ripped from a book | N | N |
1243 | Scatched notes | It looks like a page ripped from a book | N | N |
1244 | Shamans Tome | An ancient tome on various subjects... | N | N |
1245 | Edible seaweed | slightly damp seaweed | N | N |
1246 | Rough Sketch of a bowl | A roughly sketched picture of a bowl made from metal | N | N |
1247 | Burnt Manta ray | oops! | N | N |
1248 | Burnt Sea turtle | oops! | N | N |
1249 | Cut reed plant | A narrow long tube - it might be useful for something | N | N |
1250 | Magical Fire Pass | A pass which allows you to cross the flaming walls into the Flaming Octagon | N | N |
1251 | Snakes Weed Solution | Snakes weed in water - part of a potion | N | N |
1252 | Ardrigal Solution | Ardrigal herb in water - part of a potion | N | N |
1253 | Gujuo Potion | A potion to help against fear of the supernatural | N | N |
1254 | Germinated Yommi tree seed | A magical seed that grows into a Yommi tree - these have been germinated. | N | Y |
1255 | Dark Dagger | An unusual looking dagger made of dark shiny obsidian | Y | N |
1256 | Glowing Dark Dagger | An unusual looking dagger made of dark shiny obsidian - it has an unnatural glow . | Y | N |
1257 | Holy Force Spell | A powerful incantation - it affects spirits of the underworld | N | N |
1258 | Iron Pickaxe | Used for mining | N | N |
1259 | Steel Pickaxe | Requires level 6 mining to use | N | N |
1260 | Mithril Pickaxe | Requires level 21 mining to use | N | N |
1261 | Adamantite Pickaxe | Requires level 31 mining to use | N | N |
1262 | Rune Pickaxe | Requires level 41 mining to use | N | N |
1263 | Sleeping Bag | Not as comfy as a bed but better than nothing | N | N |
1264 | A blue wizards hat | An ancient wizards hat. | Y | N |
1265 | Gilded Totem Pole | A well crafted totem pole - given to you as a gift from Gujuo | N | N |
1266 | Blessed Golden Bowl | A specially made bowl constructed out of pure gold - it looks magical somehow | N | N |
1267 | Blessed Golden Bowl with Pure Water | A golden bowl filled with pure water - it looks magical somehow | N | N |
1268 | Raw Oomlie Meat | Raw meat from the Oomlie bird | N | N |
1269 | Cooked Oomlie meat Parcel | Deliciously cooked Oomlie meat in a palm leaf pouch. | N | N |
1270 | Dragon Bone Certificate | Each certificate exchangable at Yanille for 5 Dragon Bones | N | Y |
1271 | Limpwurt Root Certificate | Each certificate exchangable at Yanille for 5 Limpwort roots | N | Y |
1272 | Prayer Potion Certificate | Each certificate exchangable at Yanille for 5 prayer potions | N | Y |
1273 | Super Attack Potion Certificate | Exchangable at Yanille for 5 | N | Y |
1274 | Super Defense Potion Certificate | Exchangable at Yanille for 5 | N | Y |
1275 | Super Strength Potion Certificate | Exchangable at Yanille for 5 | N | Y |
1276 | Half Dragon Square Shield | The Right Half of an ancient and powerful looking Dragon Square shield. | N | N |
1277 | Half Dragon Square Shield | Left Half of an ancient and powerful looking Dragon Square shield. | N | N |
1278 | Dragon Square Shield | An ancient and powerful looking Dragon Square shield. | Y | N |
1279 | Palm tree leaf | A thick green plam leaf - natives use this to cook meat in | N | N |
1280 | Raw Oomlie Meat Parcel | Oomlie meat in a palm leaf pouch - just needs to be cooked. | N | N |
1281 | Burnt Oomlie Meat parcel | Oomlie meat in a palm leaf pouch - it's burnt. | N | N |
1282 | Bailing Bucket | It's a water tight bucket | N | N |
1283 | Plank | Damaged remains of the ship | N | N |
1284 | Arcenia root | the root of an arcenia plant | N | N |
1285 | display tea | A nice cup of tea - for display only | N | N |
1286 | Blessed Golden Bowl with plain water | A golden bowl filled with plain water | N | N |
1287 | Golden Bowl with plain water | A golden bowl filled with plain water | N | N |
1288 | Cape of legends | Shows I am a member of the legends guild | Y | N |
1289 | Scythe | Get another from the clothes shop if you die | Y | N |
NPCs
ID | Name | Level | Description | Attackable |
---|---|---|---|---|
0 | Unicorn | 21 | It's a unicorn | Y |
1 | Bob | 2 | An axe seller | N |
2 | Sheep | 0 | A very wooly sheep | N |
3 | Chicken | 3 | Yep definitely a chicken | Y |
4 | Goblin | 13 | An ugly green creature | Y |
5 | Hans | 3 | A castle servant | Y |
6 | cow | 8 | It's a multi purpose cow | Y |
7 | cook | 15 | The head cook of Lumbridge castle | N |
8 | Bear | 24 | Eek! A bear! | Y |
9 | Priest | 0 | A priest of Saradomin | N |
10 | Urhney | 8 | He looks a little grumpy | N |
11 | Man | 9 | One of runescapes many citizens | Y |
12 | Bartender | 0 | I could get a beer off him | N |
13 | Camel | 0 | Oh its a camel | N |
14 | Gypsy | 0 | An old gypsy lady | N |
15 | Ghost | 12 | Ooh spooky | N |
16 | Sir Prysin | 40 | One of the king's knights | N |
17 | Traiborn the wizard | 12 | An old wizard | N |
18 | Captain Rovin | 51 | The head of the palace guard | N |
19 | Rat | 8 | Overgrown vermin | Y |
20 | Reldo | 12 | I think he's the librarian | N |
21 | mugger | 10 | He jumps out and attacks people | Y |
22 | Lesser Demon | 79 | Lesser but still pretty big | Y |
23 | Giant Spider | 8 | I think this spider has been genetically modified | Y |
24 | Man | 30 | A shifty looking man | N |
25 | Jonny the beard | 10 | I can see why he's called the beard | Y |
26 | Baraek | 30 | A fur trader | N |
27 | Katrine | 25 | She doesn't look to friendly | N |
28 | Tramp | 7 | A scruffy looking chap | N |
29 | Rat | 2 | A small muddy rat | Y |
30 | Romeo | 45 | He looks mildly confused | N |
31 | Juliet | 2 | She looks a little stressed | N |
32 | Father Lawrence | 0 | A kindly looking priest | N |
33 | Apothecary | 6 | I wonder if he has any good potions | N |
34 | spider | 2 | Incey wincey | Y |
35 | Delrith | 30 | A freshly summoned demon | Y |
36 | Veronica | 2 | She doesn't look too happy | N |
37 | Weaponsmaster | 25 | The phoenix gang quartermaster | Y |
38 | Professor Oddenstein | 4 | A mad scientist if I ever saw one | N |
39 | Curator | 2 | He looks like he's daydreaming | N |
40 | skeleton | 21 | It rattles as it walks | Y |
41 | zombie | 24 | The living dead | Y |
42 | king | 30 | King Roald the VIII | N |
43 | Giant bat | 32 | An angry flying rodent | Y |
44 | Bartender | 0 | A friendly barman | N |
45 | skeleton | 31 | It rattles as it walks | Y |
46 | skeleton | 25 | It rattles as it walks | Y |
47 | Rat | 13 | overgrown vermin | Y |
48 | Horvik the Armourer | 16 | He looks strong | N |
49 | Bear | 0 | A bear | N |
50 | skeleton | 19 | It rattles when it walks | Y |
51 | Shopkeeper | 0 | Maybe he'd like to buy some of my junk | N |
52 | zombie | 19 | The living dead | Y |
53 | Ghost | 25 | Ooh spooky | Y |
54 | Aubury | 0 | I think he might be a shop keeper | N |
55 | Shopkeeper | 0 | I wonder what he's got for sale | N |
56 | shopkeeper | 0 | I can buy swords off him | N |
57 | Darkwizard | 13 | He works evil magic | Y |
58 | lowe | 0 | The owner of the archery store | N |
59 | Thessalia | 0 | A young shop assistant | N |
60 | Darkwizard | 25 | He works evil magic | Y |
61 | Giant | 37 | A very large foe | Y |
62 | Goblin | 7 | An ugly green creature | Y |
63 | farmer | 15 | He grows the crops in this area | Y |
64 | Thief | 21 | He'll take anything that isn't nailed down | Y |
65 | Guard | 28 | He tries to keep order around here | Y |
66 | Black Knight | 46 | A sinister looking knight | Y |
67 | Hobgoblin | 32 | A large ugly green creature | Y |
68 | zombie | 32 | The living dead | Y |
69 | Zaff | 0 | He trades in staffs | N |
70 | Scorpion | 21 | An extremely vicious scorpion | Y |
71 | silk trader | 0 | He sells silk | N |
72 | Man | 9 | One of Runescapes many citizens | Y |
73 | Guide | 1 | He gives hints to new adventurers | N |
74 | Giant Spider | 31 | I think this spider has been genetically modified | Y |
75 | Peksa | 9 | A helmet salesman | N |
76 | Barbarian | 16 | Not civilised looking | Y |
77 | Fred the farmer | 9 | An old farmer | N |
78 | Gunthor the Brave | 37 | The barbarians fearless leader | Y |
79 | Witch | 25 | She's got warts | Y |
80 | Ghost | 25 | Ooh spooky | Y |
81 | Wizard | 16 | An old wizard | Y |
82 | Shop Assistant | 0 | Maybe he'd like to buy some of my junk | N |
83 | Shop Assistant | 0 | Maybe he'd like to buy some of my junk | N |
84 | Zeke | 0 | He sells Scimitars | N |
85 | Louie Legs | 0 | He might want to sell something | N |
86 | Warrior | 18 | A member of Al Kharid's military | Y |
87 | Shopkeeper | 0 | I wonder what he's got for sale | N |
88 | Shop Assistant | 0 | Maybe she'd like to buy some of my junk | N |
89 | Highwayman | 13 | He holds up passers by | Y |
90 | Kebab Seller | 0 | A seller of strange food | N |
91 | Chicken | 3 | Yep definitely a chicken | N |
92 | Ernest | 3 | A former chicken | N |
93 | Monk | 13 | A Peaceful monk | Y |
94 | Dwarf | 18 | A short angry guy | Y |
95 | Banker | 9 | He can look after my money | N |
96 | Count Draynor | 43 | A vicious vampire | Y |
97 | Morgan | 9 | A frigtened villager | N |
98 | Dr Harlow | 9 | His nose is very red | N |
99 | Deadly Red spider | 36 | I think this spider has been genetically modified | Y |
100 | Guard | 28 | He's here to guard this fortress | Y |
101 | Cassie | 25 | She sells shields | N |
102 | White Knight | 56 | A chivalrous knight | Y |
103 | Ranael | 25 | A shopkeeper of some sort | N |
104 | Moss Giant | 62 | his beard seems to have a life of its own | Y |
105 | Shopkeeper | 0 | I wonder what he's got for sale | N |
106 | Shop Assistant | 0 | Maybe he'd like to buy some of my junk | N |
107 | Witch | 25 | She's got warts | N |
108 | Black Knight | 46 | A sinister looking knight | Y |
109 | Greldo | 7 | A small green warty creature | Y |
110 | Sir Amik Varze | 56 | The leader of the white knights | N |
111 | Guildmaster | 40 | He's in charge of this place | N |
112 | Valaine | 25 | She runs the champion's store | N |
113 | Drogo | 18 | He runs a mining store | N |
114 | Imp | 5 | A cheeky little imp | Y |
115 | Flynn | 16 | The mace salesman | N |
116 | Wyson the gardener | 8 | An old gardener | N |
117 | Wizard Mizgog | 12 | An old wizard | N |
118 | Prince Ali | 20 | A young prince | N |
119 | Hassan | 20 | the Chancellor to the emir | N |
120 | Osman | 20 | He looks a little shifty | N |
121 | Joe | 40 | Lady Keli's head guard | N |
122 | Leela | 20 | She comes from Al Kharid | N |
123 | Lady Keli | 20 | An Infamous bandit | N |
124 | Ned | 20 | An old sailor | N |
125 | Aggie | 25 | A witch | N |
126 | Prince Ali | 10 | That is an effective disguise | N |
127 | Jailguard | 34 | I wonder what he's guarding | Y |
128 | Redbeard Frank | 25 | A pirate | N |
129 | Wydin | 0 | A grocer | N |
130 | shop assistant | 0 | I can buy swords off him | N |
131 | Brian | 0 | An axe seller | N |
132 | squire | 0 | A young squire | N |
133 | Head chef | 15 | He looks after the chef's guild | N |
134 | Thurgo | 18 | A short angry guy | N |
135 | Ice Giant | 68 | He's got icicles in his beard | Y |
136 | King Scorpion | 36 | Wow scorpions shouldn't grow that big | Y |
137 | Pirate | 27 | A vicious pirate | Y |
138 | Sir Vyvin | 56 | One of the white knights of Falador | N |
139 | Monk of Zamorak | 29 | An evil cleric | Y |
140 | Monk of Zamorak | 19 | An evil cleric | Y |
141 | Wayne | 16 | An armourer | N |
142 | Barmaid | 25 | a pretty barmaid | N |
143 | Dwarven shopkeeper | 18 | I wonder if he wants to buy any of my junk | N |
144 | Doric | 18 | A dwarven smith | N |
145 | Shopkeeper | 0 | I wonder what he's got for sale | N |
146 | Shop Assistant | 0 | Maybe he'd like to buy some of my junk | N |
147 | Guide | 1 | She gives hints to new adventurers | N |
148 | Hetty | 25 | A witch | N |
149 | Betty | 25 | A witch | N |
150 | Bartender | 0 | I could get a beer off him | N |
151 | General wartface | 13 | An ugly green creature | N |
152 | General Bentnoze | 13 | An ugly green creature | N |
153 | Goblin | 13 | An ugly green creature | Y |
154 | Goblin | 13 | An ugly green creature | Y |
155 | Herquin | 0 | A gem merchant | N |
156 | Rommik | 0 | The owner of the crafting shop | N |
157 | Grum | 0 | Grum the goldsmith | N |
158 | Ice warrior | 57 | A strange inhuman warrior | Y |
159 | Warrior | 27 | A skilled fighter | Y |
160 | Thrander | 16 | A smith of some sort | N |
161 | Border Guard | 18 | a guard from Al Kharid | N |
162 | Border Guard | 18 | a guard from Al Kharid | N |
163 | Customs Officer | 16 | She is here to stop smugglers | N |
164 | Luthas | 16 | The owner of the banana plantation | N |
165 | Zambo | 16 | He will sell me exotic rum | N |
166 | Captain Tobias | 20 | An old sailor | N |
167 | Gerrant | 0 | I wonder what he's got for sale | N |
168 | Shopkeeper | 0 | I wonder what he's got for sale | N |
169 | Shop Assistant | 0 | Maybe he'd like to buy some of my junk | N |
170 | Seaman Lorris | 20 | A young sailor | N |
171 | Seaman Thresnor | 20 | A young sailor | N |
172 | Tanner | 45 | He makes leather | N |
173 | Dommik | 0 | The owner of the crafting shop | N |
174 | Abbot Langley | 13 | A Peaceful monk | N |
175 | Thordur | 18 | He runs a a tourist attraction | N |
176 | Brother Jered | 13 | human | N |
177 | Rat | 13 | Overgrown vermin | Y |
178 | Ghost | 25 | Ooh spooky | Y |
179 | skeleton | 31 | it rattles when it walks | Y |
180 | zombie | 32 | the living dead | Y |
181 | Lesser Demon | 79 | Lesser but still very big | Y |
182 | Melzar the mad | 45 | He looks totally insane | Y |
183 | Scavvo | 10 | He has lopsided eyes | N |
184 | Greater Demon | 87 | big red and incredibly evil | Y |
185 | Shopkeeper | 0 | I wonder what he's got for sale | N |
186 | Shop Assistant | 0 | Maybe he'd like to buy some of my junk | N |
187 | Oziach | 0 | A strange little man | N |
188 | Bear | 26 | Eek! A bear! | Y |
189 | Black Knight | 46 | An armoured follower of Zamorak | Y |
190 | chaos Dwarf | 59 | a dwarf gone bad | Y |
191 | dwarf | 18 | A dwarf who looks after the mining guild | N |
192 | Wormbrain | 7 | Dumb even by goblin standards | Y |
193 | Klarense | 20 | A young sailor | N |
194 | Ned | 20 | An old sailor | N |
195 | skeleton | 54 | A Taller than normal skeleton | Y |
196 | Dragon | 110 | A powerful and ancient dragon | Y |
197 | Oracle | 57 | A mystic of unknown race | N |
198 | Duke of Lumbridge | 30 | Duke Horacio of Lumbridge | N |
199 | Dark Warrior | 21 | A warrior touched by chaos | Y |
200 | Druid | 29 | A worshipper of Guthix | Y |
201 | Red Dragon | 140 | A big powerful dragon | Y |
202 | Blue Dragon | 105 | A mother dragon | Y |
203 | Baby Blue Dragon | 50 | Young but still dangerous | Y |
204 | Kaqemeex | 29 | A wise druid | N |
205 | Sanfew | 29 | An old druid | N |
206 | Suit of armour | 29 | A dusty old suit of armour | N |
207 | Adventurer | 13 | A cleric | N |
208 | Adventurer | 12 | A wizard | N |
209 | Adventurer | 56 | A Warrior | N |
210 | Adventurer | 25 | An archer | N |
211 | Leprechaun | 18 | A funny little man who lives in a tree | N |
212 | Monk of entrana | 13 | A Peaceful monk | N |
213 | Monk of entrana | 13 | A Peaceful monk | N |
214 | zombie | 32 | The living dead | Y |
215 | Monk of entrana | 13 | A Peaceful monk | N |
216 | tree spirit | 95 | Ooh spooky | Y |
217 | cow | 8 | It's a dairy cow | N |
218 | Irksol | 2 | Is he invisible or just a set of floating clothes? | N |
219 | Fairy Lunderwin | 2 | A fairy merchant | N |
220 | Jakut | 2 | An unusual looking merchant | N |
221 | Doorman | 56 | He guards the entrance to the faerie market | N |
222 | Fairy Shopkeeper | 0 | I wonder what he's got for sale | N |
223 | Fairy Shop Assistant | 0 | Maybe he'd like to buy some of my junk | N |
224 | Fairy banker | 9 | He can look after my money | N |
225 | Giles | 30 | He runs an ore exchange store | N |
226 | Miles | 30 | He runs a bar exchange store | N |
227 | Niles | 30 | He runs a fish exchange store | N |
228 | Gaius | 16 | he sells very big swords | N |
229 | Fairy Ladder attendant | 0 | A worker in the faerie market | N |
230 | Jatix | 29 | A hard working druid | N |
231 | Master Crafter | 0 | The man in charge of the crafter's guild | N |
232 | Bandit | 29 | He's ready for a fight | Y |
233 | Noterazzo | 29 | A bandit shopkeeper | N |
234 | Bandit | 29 | A wilderness outlaw | Y |
235 | Fat Tony | 15 | A Gourmet Pizza chef | N |
236 | Donny the lad | 39 | A bandit leader | Y |
237 | Black Heather | 39 | A bandit leader | Y |
238 | Speedy Keith | 39 | A bandit leader | Y |
239 | White wolf sentry | 31 | A vicious mountain wolf | Y |
240 | Boy | 39 | He doesn't seem very happy | N |
241 | Rat | 2 | He seems to live here | N |
242 | Nora T Hag | 25 | She's got warts | N |
243 | Grey wolf | 64 | A sinister looking wolf | Y |
244 | shapeshifter | 24 | I've not seen anyone like this before | Y |
245 | shapeshifter | 34 | I think this spider has been genetically modified | N |
246 | shapeshifter | 44 | Eek! A bear! | N |
247 | shapeshifter | 54 | A sinister looking wolf | N |
248 | White wolf | 41 | A vicious mountain wolf | Y |
249 | Pack leader | 71 | A vicious mountain wolf | Y |
250 | Harry | 0 | I wonder what he's got for sale | N |
251 | Thug | 18 | He likes hitting things | Y |
252 | Firebird | 6 | Probably not a chicken | Y |
253 | Achetties | 46 | One of Asgarnia's greatest heros | N |
254 | Ice queen | 103 | The leader of the ice warriors | Y |
255 | Grubor | 15 | A rough looking thief | N |
256 | Trobert | 13 | A well dressed thief | N |
257 | Garv | 28 | A diligent guard | N |
258 | guard | 27 | A vicious pirate | N |
259 | Grip | 46 | Scar face petes head guard | Y |
260 | Alfonse the waiter | 9 | He should get a clean apron | N |
261 | Charlie the cook | 15 | Head cook of the Shrimp and parrot | N |
262 | Guard Dog | 46 | He doesn't seem pleased to see me | Y |
263 | Ice spider | 64 | I think this spider has been genetically modified | Y |
264 | Pirate | 30 | A vicious pirate | Y |
265 | Jailer | 51 | Guards prisoners for the black knights | Y |
266 | Lord Darquarius | 76 | A black knight commander | Y |
267 | Seth | 30 | He runs a fish exchange store | N |
268 | Banker | 9 | He can look after my money | N |
269 | Helemos | 46 | A retired hero | N |
270 | Chaos Druid | 19 | A crazy evil druid | Y |
271 | Poison Scorpion | 26 | It has a very vicious looking tail | Y |
272 | Velrak the explorer | 3 | he looks cold and hungry | N |
273 | Sir Lancelot | 56 | A knight of the round table | N |
274 | Sir Gawain | 56 | A knight of the round table | N |
275 | King Arthur | 56 | A wise old king | N |
276 | Sir Mordred | 58 | An evil knight | Y |
277 | Renegade knight | 51 | He isn't very friendly | Y |
278 | Davon | 27 | An amulet trader | N |
279 | Bartender | 0 | I could get some grog off him | N |
280 | Arhein | 0 | A merchant | N |
281 | Morgan le faye | 25 | An evil sorceress | N |
282 | Candlemaker | 16 | He makes and sells candles | N |
283 | lady | 0 | She has a hint of magic about her | N |
284 | lady | 0 | She has a hint of magic about her | N |
285 | lady | 0 | She has a hint of magic about her | N |
286 | Beggar | 7 | A scruffy looking chap | N |
287 | Merlin | 12 | An old wizard | N |
288 | Thrantax | 90 | A freshly summoned demon | N |
289 | Hickton | 0 | The owner of the archery store | N |
290 | Black Demon | 156 | A big scary jet black demon | Y |
291 | Black Dragon | 200 | A fierce dragon with black scales! | Y |
292 | Poison Spider | 63 | I think this spider has been genetically modified | Y |
293 | Monk of Zamorak | 47 | An evil cleric | Y |
294 | Hellhound | 114 | Hello nice doggy | Y |
295 | Animated axe | 46 | a magic axe with a mind of it's own | Y |
296 | Black Unicorn | 31 | It's a sort of unicorn | Y |
297 | Frincos | 13 | A Peaceful monk | N |
298 | Otherworldly being | 66 | Is he invisible or just a set of floating clothes? | Y |
299 | Owen | 30 | He runs a fish exchange store | N |
300 | Thormac the sorceror | 25 | A powerful sorcerrer | N |
301 | Seer | 16 | An old wizard | N |
302 | Kharid Scorpion | 21 | a smaller less dangerous scorpion | N |
303 | Kharid Scorpion | 21 | a smaller less dangerous scorpion | N |
304 | Kharid Scorpion | 21 | a smaller less dangerous scorpion | N |
305 | Barbarian guard | 16 | Not very civilised | N |
306 | Bartender | 0 | I could get a beer off him | N |
307 | man | 9 | A well dressed nobleman | N |
308 | gem trader | 0 | He sells gems | N |
309 | Dimintheis | 9 | A well dressed nobleman | N |
310 | chef | 15 | A busy looking chef | N |
311 | Hobgoblin | 48 | An ugly green creature | Y |
312 | Ogre | 58 | A large dim looking humanoid | Y |
313 | Boot the Dwarf | 18 | A short angry guy | N |
314 | Wizard | 16 | A young wizard | N |
315 | Chronozon | 121 | Chronozon the blood demon | Y |
316 | Captain Barnaby | 20 | An old sailor | N |
317 | Customs Official | 16 | She's here to stop smugglers | N |
318 | Man | 9 | One of Runescape's citizens | Y |
319 | farmer | 15 | An humble peasant | Y |
320 | Warrior | 27 | A skilled fighter | Y |
321 | Guard | 28 | He tries to keep the law and order around here | Y |
322 | Knight | 56 | A knight of Ardougne | Y |
323 | Paladin | 71 | A paladin of Ardougne | Y |
324 | Hero | 83 | A Hero of Ardougne | Y |
325 | Baker | 15 | He sells hot baked bread | N |
326 | silk merchant | 0 | He buys silk | N |
327 | Fur trader | 0 | A buyer and seller of animal furs | N |
328 | silver merchant | 0 | He deals in silver | N |
329 | spice merchant | 15 | He sells exotic spices | N |
330 | gem merchant | 0 | He sells gems | N |
331 | Zenesha | 25 | A shopkeeper of some sort | N |
332 | Kangai Mau | 0 | A tribesman | N |
333 | Wizard Cromperty | 12 | An old wizard | N |
334 | RPDT employee | 12 | A delivery man | N |
335 | Horacio | 8 | An old gardener | N |
336 | Aemad | 16 | He helps run the adventurers store | N |
337 | Kortan | 16 | He helps run the adventurers store | N |
338 | zoo keeper | 20 | He looks after Ardougne city zoo | Y |
339 | Make over mage | 0 | He can change how I look | N |
340 | Bartender | 0 | I could get a beer off him | N |
341 | chuck | 0 | A wood merchant | N |
342 | Rogue | 21 | He needs a shave | Y |
343 | Shadow spider | 53 | Is it a spider or is it a shadow | Y |
344 | Fire Giant | 109 | A big guy with red glowing skin | Y |
345 | Grandpa Jack | 20 | A wistful old man | N |
346 | Sinister stranger | 43 | not your average fisherman | N |
347 | Bonzo | 30 | Fishing competition organiser | N |
348 | Forester | 21 | He looks after McGrubor's wood | Y |
349 | Morris | 30 | Fishing competition organiser | N |
350 | Brother Omad | 13 | A Peaceful monk | N |
351 | Thief | 21 | A dastardly blanket thief | Y |
352 | Head Thief | 34 | A dastardly blanket thief | Y |
353 | Big Dave | 15 | A well built fisherman | N |
354 | Joshua | 15 | A grumpy fisherman | N |
355 | Mountain Dwarf | 18 | A short angry guy | N |
356 | Mountain Dwarf | 28 | A short angry guy | Y |
357 | Brother Cedric | 13 | A Peaceful monk | N |
358 | Necromancer | 34 | A crazy evil necromancer | Y |
359 | zombie | 24 | The living dead | Y |
360 | Lucien | 21 | He walks with a slight limp | N |
361 | The Fire warrior of lesarkus | 63 | A strange red humanoid | Y |
362 | guardian of Armadyl | 54 | A worshipper of Armadyl | N |
363 | guardian of Armadyl | 54 | A worshipper of Armadyl | N |
364 | Lucien | 21 | He walks with a limp | Y |
365 | winelda | 25 | A witch | N |
366 | Brother Kojo | 13 | A Peaceful monk | N |
367 | Dungeon Rat | 16 | Overgrown vermin | Y |
368 | Master fisher | 15 | The man in charge of the fishing guild | N |
369 | Orven | 30 | He runs a fish exchange store | N |
370 | Padik | 30 | He runs a fish exchange store | N |
371 | Shopkeeper | 0 | He smells of fish | N |
372 | Lady servil | 2 | She look's wealthy | N |
373 | Guard | 28 | It's one of General Khazard's guard's | N |
374 | Guard | 28 | It's one of General Khazard's guard's | N |
375 | Guard | 28 | It's one of General Khazard's guard's | N |
376 | Guard | 28 | It's one of General Khazard's guard's | N |
377 | Jeremy Servil | 0 | A young squire | N |
378 | Justin Servil | 0 | Jeremy servil's father | N |
379 | fightslave joe | 0 | He look's mistreated and weak | N |
380 | fightslave kelvin | 0 | He look's mistreated and weak | N |
381 | local | 7 | A scruffy looking chap | N |
382 | Khazard Bartender | 0 | A tough looking barman | N |
383 | General Khazard | 100 | He look's real nasty | Y |
384 | Khazard Ogre | 58 | Khazard's strongest ogre warrior | Y |
385 | Guard | 28 | It's one of General Khazard's guard's | N |
386 | Khazard Scorpion | 46 | A large angry scorpion | Y |
387 | hengrad | 0 | He look's mistreated and weak | N |
388 | Bouncer | 122 | Hello nice doggy | Y |
389 | Stankers | 0 | A cheerful looking fellow | N |
390 | Docky | 20 | An old sailor | N |
391 | Shopkeeper | 0 | Maybe he'd like to buy some of my junk | N |
392 | Fairy queen | 2 | A very little queen | N |
393 | Merlin | 12 | An old wizard | N |
394 | Crone | 25 | A strange old lady | N |
395 | High priest of entrana | 13 | A Peaceful monk | N |
396 | elkoy | 3 | It's a tree gnome | N |
397 | remsai | 3 | It's a tree gnome | N |
398 | bolkoy | 3 | It's a tree gnome | N |
399 | local gnome | 3 | It's a young tree gnome | Y |
400 | bolren | 3 | It's a gnome he look's important | N |
401 | Black Knight titan | 146 | He is blocking the way | Y |
402 | kalron | 3 | he look's lost | Y |
403 | brother Galahad | 13 | A Peaceful monk | N |
404 | tracker 1 | 3 | It's a tree gnome | N |
405 | tracker 2 | 3 | It's a tree gnome | N |
406 | tracker 3 | 3 | It's a tree gnome | N |
407 | Khazard troop | 28 | It's one of General Khazard's warrior's | Y |
408 | commander montai | 3 | It's a tree gnome | N |
409 | gnome troop | 3 | It's a tree gnome trooper | Y |
410 | khazard warlord | 100 | He look's real nasty | Y |
411 | Sir Percival | 56 | He's covered in pieces of straw | N |
412 | Fisher king | 30 | an old king | N |
413 | maiden | 2 | She has a far away look in her eyes | N |
414 | Fisherman | 30 | an old fisherman | N |
415 | King Percival | 56 | The new fisher king | N |
416 | unhappy peasant | 25 | He looks tired and hungry | Y |
417 | happy peasant | 25 | He looks well fed and full of energy | Y |
418 | ceril | 9 | It's Sir ceril carnillean a local noblemen | N |
419 | butler | 9 | It's the carnillean family butler | N |
420 | carnillean guard | 28 | It's a carnillean family guard | Y |
421 | Tribesman | 39 | A primative warrior | Y |
422 | henryeta | 2 | It's a wealthy looking woman | N |
423 | philipe | 0 | It's a young well dressed boy | N |
424 | clivet | 20 | A strange looking man in black | N |
425 | cult member | 20 | An suspicous looking man in black | Y |
426 | Lord hazeel | 100 | He could do with some sun | Y |
427 | alomone | 42 | A musculer looking man in black | N |
428 | Khazard commander | 41 | It's one of General Khazard's commander's | Y |
429 | claus | 15 | the carnillean family cook | N |
430 | 1st plague sheep | 0 | The sheep has the plague | N |
431 | 2nd plague sheep | 0 | The sheep has the plague | N |
432 | 3rd plague sheep | 0 | The sheep has the plague | N |
433 | 4th plague sheep | 0 | The sheep has the plague | N |
434 | Farmer brumty | 15 | He looks after livestock in this area | N |
435 | Doctor orbon | 15 | A local doctor | N |
436 | Councillor Halgrive | 20 | A town counceller | N |
437 | Edmond | 20 | A local civilian | N |
438 | Citizen | 11 | He look's tired | Y |
439 | Citizen | 10 | He look's frightened | Y |
440 | Citizen | 12 | She look's frustrated | Y |
441 | Citizen | 20 | He look's angry | Y |
442 | Citizen | 15 | He look's disillusioned | Y |
443 | Jethick | 15 | A cynical old man | N |
444 | Mourner | 2 | A mourner or plague healer | N |
445 | Mourner | 2 | A mourner or plague healer | N |
446 | Ted Rehnison | 9 | The head of the Rehnison family | N |
447 | Martha Rehnison | 12 | A fairly poor looking woman | N |
448 | Billy Rehnison | 45 | The Rehnisons eldest son | N |
449 | Milli Rehnison | 39 | She doesn't seem very happy | N |
450 | Alrena | 2 | She look's concerned | N |
451 | Mourner | 2 | A mourner or plague healer | N |
452 | Clerk | 2 | A bueracratic administrator | N |
453 | Carla | 2 | She look's upset | N |
454 | Bravek | 30 | The city warder of West Ardougne | N |
455 | Caroline | 2 | A well dressed middle aged lady | N |
456 | Holgart | 20 | An old sailor | N |
457 | Holgart | 20 | An old sailor | N |
458 | Holgart | 20 | An old sailor | N |
459 | kent | 45 | caroline's husband | N |
460 | bailey | 15 | the fishing platform cook | N |
461 | kennith | 0 | A young scared looking boy | N |
462 | Platform Fisherman | 30 | an emotionless fisherman | Y |
463 | Platform Fisherman | 30 | an emotionless fisherman | Y |
464 | Platform Fisherman | 30 | an emotionless fisherman | Y |
465 | Elena | 2 | She doesn't look too happy | N |
466 | jinno | 30 | He doesn't seem to mind his lack of legs | N |
467 | Watto | 30 | He doesn't seem to mind his lack of legs | N |
468 | Recruiter | 51 | A member of the Ardougne royal army | N |
469 | Head mourner | 2 | In charge of people with silly outfits | N |
470 | Almera | 2 | A woman of the wilderness | N |
471 | hudon | 0 | A young boisterous looking lad | N |
472 | hadley | 30 | A happy looking fellow | N |
473 | Rat | 7 | Overgrown vermin | Y |
474 | Combat instructor | 51 | He will tell me how to fight | N |
475 | golrie | 3 | It's a tree gnome | N |
476 | Guide | 1 | She gives hints to new adventurers | N |
477 | King Black Dragon | 245 | The biggest meanest dragon around | Y |
478 | cooking instructor | 15 | Talk to him to learn about runescape food | N |
479 | fishing instructor | 15 | He smells of fish | N |
480 | financial advisor | 0 | He knows about money | N |
481 | gerald | 15 | An old fisherman | N |
482 | mining instructor | 18 | A short angry guy | N |
483 | Elena | 2 | She looks concerned | N |
484 | Omart | 30 | A nervous looking fellow | N |
485 | Bank assistant | 9 | She can look after my stuff | N |
486 | Jerico | 15 | He looks friendly enough | N |
487 | Kilron | 15 | He looks shifty | N |
488 | Guidor's wife | 2 | She looks rather concerned | N |
489 | Quest advisor | 51 | I wonder what advise he has to impart | N |
490 | chemist | 4 | human | N |
491 | Mourner | 2 | A mourner or plague healer | N |
492 | Mourner | 2 | A mourner or plague healer | N |
493 | Wilderness guide | 29 | He's ready for a fight | N |
494 | Magic Instructor | 12 | An old wizard | N |
495 | Mourner | 22 | A mourner or plague healer | Y |
496 | Community instructor | 2 | This is the last advisor - honest | N |
497 | boatman | 20 | An old sailor | N |
498 | skeleton mage | 21 | It rattles as it walks | Y |
499 | controls guide | 29 | He's ready for a fight | N |
500 | nurse sarah | 2 | She's quite a looker | N |
501 | Tailor | 29 | He's ready for a party | N |
502 | Mourner | 25 | A mourner or plague healer | Y |
503 | Guard | 28 | He tries to keep order around here | N |
504 | Chemist | 29 | He looks clever enough | N |
505 | Chancy | 29 | He's ready for a bet | N |
506 | Hops | 29 | He's drunk | N |
507 | DeVinci | 29 | He has a colourful personality | N |
508 | Guidor | 29 | He's not that ill | N |
509 | Chancy | 29 | He's ready for a bet | N |
510 | Hops | 29 | He's drunk | N |
511 | DeVinci | 29 | He has a colourful personality | N |
512 | king Lathas | 30 | King Lanthas of east ardounge | N |
513 | Head wizard | 12 | He runs the wizards guild | N |
514 | Magic store owner | 12 | An old wizard | N |
515 | Wizard Frumscone | 12 | A confused looking wizard | N |
516 | target practice zombie | 24 | The living dead | Y |
517 | Trufitus | 6 | A wise old witch doctor | N |
518 | Colonel Radick | 51 | A soldier of the town of Yanille | Y |
519 | Soldier | 28 | A soldier of the town of Yanille | Y |
520 | Bartender | 0 | I could get a beer off him | N |
521 | Jungle Spider | 47 | A venomous deadly spider | Y |
522 | Jiminua | 0 | She looks very interested in selling some of her wares. | N |
523 | Jogre | 58 | An aggressive humanoid | Y |
524 | Guard | 28 | He tries to keep order around here | N |
525 | Ogre | 58 | Useful for ranged training | Y |
526 | Guard | 28 | He tries to keep order around here | N |
527 | Guard | 28 | He tries to keep order around here | N |
528 | shop keeper | 0 | he sells weapons | N |
529 | Bartender | 0 | I could get a beer off him | N |
530 | Frenita | 0 | runs a cookery shop | N |
531 | Ogre chieftan | 78 | A slightly bigger uglier ogre | Y |
532 | rometti | 3 | It's a well dressed tree gnome | N |
533 | Rashiliyia | 80 | A willowy ethereal being who floats above the ground | N |
534 | Blurberry | 3 | It's a red faced tree gnome | N |
535 | Heckel funch | 3 | It's another jolly tree gnome | N |
536 | Aluft Gianne | 3 | It's a tree gnome chef | N |
537 | Hudo glenfad | 3 | It's another jolly tree gnome | N |
538 | Irena | 0 | human | N |
539 | Mosol | 0 | A jungle warrior | N |
540 | Gnome banker | 3 | It's tree gnome banker | N |
541 | King Narnode Shareen | 3 | It's a gnome he look's important | N |
542 | UndeadOne | 62 | One of Rashaliyas Minions | Y |
543 | Drucas | 20 | engraver | N |
544 | tourist | 29 | human | N |
545 | King Narnode Shareen | 3 | It's a gnome he look's important | N |
546 | Hazelmere | 3 | An ancient looking gnome | N |
547 | Glough | 3 | An rough looking gnome | N |
548 | Shar | 0 | Concerned about the economy | N |
549 | Shantay | 0 | human | N |
550 | charlie | 0 | Poor guy? | Y |
551 | Gnome guard | 31 | A tree gnome guard | Y |
552 | Gnome pilot | 3 | He can fly the glider | N |
553 | Mehman | 29 | local | N |
554 | Ana | 16 | This lady doesn't look as if she belongs here. | N |
555 | Chaos Druid warrior | 44 | A crazy evil druid | Y |
556 | Gnome pilot | 3 | He can fly the glider | N |
557 | Shipyard worker | 44 | He look's busy | Y |
558 | Shipyard worker | 44 | He look's busy | Y |
559 | Shipyard worker | 44 | He look's busy | Y |
560 | Shipyard foreman | 62 | He look's busy | N |
561 | Shipyard foreman | 62 | He look's busy | N |
562 | Gnome guard | 23 | A tree gnome guard | Y |
563 | Femi | 3 | It's a little tree gnome | N |
564 | Femi | 3 | It's a little tree gnome | N |
565 | Anita | 3 | It's a little tree gnome | N |
566 | Glough | 3 | An rough looking gnome | N |
567 | Salarin the twisted | 69 | A crazy evil druid | Y |
568 | Black Demon | 175 | A big scary jet black demon | Y |
569 | Gnome pilot | 3 | He can fly the glider | N |
570 | Gnome pilot | 3 | He can fly the glider | N |
571 | Gnome pilot | 3 | He can fly the glider | N |
572 | Gnome pilot | 3 | He can fly the glider | N |
573 | Sigbert the Adventurer | 56 | A Warrior | N |
574 | Yanille Watchman | 33 | He watches out for invading ogres | Y |
575 | Tower guard | 33 | He stops people going up the tower | N |
576 | Gnome Trainer | 11 | He can advise on training | N |
577 | Gnome Trainer | 11 | He can advise on training | N |
578 | Gnome Trainer | 11 | He can advise on training | N |
579 | Gnome Trainer | 11 | He can advise on training | N |
580 | Blurberry barman | 3 | He serves cocktails | N |
581 | Gnome waiter | 3 | He can serve you gnome food | N |
582 | Gnome guard | 27 | A tree gnome guard | Y |
583 | Gnome child | 3 | that's a little gnome | Y |
584 | Earth warrior | 52 | A strange inhuman warrior | Y |
585 | Gnome child | 3 | He's a little fellow | Y |
586 | Gnome child | 3 | hello little gnome | Y |
587 | Gulluck | 10 | He sells weapons | N |
588 | Gunnjorn | 16 | Not civilised looking | N |
589 | Zadimus | 0 | Ghostly Visage of the dead Zadimus | N |
590 | Brimstail | 3 | An ancient looking gnome | N |
591 | Gnome child | 3 | He's a little fellow | N |
592 | Gnome local | 9 | A tree gnome villager | Y |
593 | Gnome local | 3 | A tree gnome villager | Y |
594 | Moss Giant | 62 | his beard seems to have a life of its own | Y |
595 | Gnome Baller | 70 | A tree gnome ball player | Y |
596 | Goalie | 70 | A gnome ball goal catcher | N |
597 | Gnome Baller | 70 | A tree gnome ball player | Y |
598 | Gnome Baller | 70 | A tree gnome ball player | Y |
599 | Gnome Baller | 70 | A tree gnome ball player | Y |
600 | Gnome Baller | 70 | A tree gnome ball player | Y |
601 | Referee | 3 | He controls the game | N |
602 | Gnome Baller | 70 | A tree gnome ball player | Y |
603 | Gnome Baller | 70 | A tree gnome ball player | Y |
604 | Gnome Baller | 70 | A tree gnome ball player | Y |
605 | Gnome Baller | 70 | A tree gnome ball player | Y |
606 | Gnome Baller | 70 | A tree gnome ball player | Y |
607 | Gnome Baller | 70 | A tree gnome ball player | Y |
608 | Gnome Baller | 70 | A tree gnome ball player | Y |
609 | Gnome Baller | 70 | He's on your team | N |
610 | Gnome Baller | 70 | He's on your team | N |
611 | Cheerleader | 3 | It's a little tree gnome | N |
612 | Cheerleader | 3 | It's a little tree gnome | N |
613 | Nazastarool Zombie | 83 | One of Rashaliyas Minions | Y |
614 | Nazastarool Skeleton | 83 | One of Rashaliyas Minions | Y |
615 | Nazastarool Ghost | 83 | One of Rashaliyas Minions | Y |
616 | Fernahei | 6 | An enthusiastic fishing shop owner | N |
617 | Jungle Banker | 9 | He can look after my money | N |
618 | Cart Driver | 15 | He drives the cart | N |
619 | Cart Driver | 15 | He drives the cart | N |
620 | Obli | 0 | An intelligent looking shop owner | N |
621 | Kaleb | 0 | This is Kaleb Paramaya - a warm and friendly inn owner | N |
622 | Yohnus | 0 | This is Yohnus - he runs the local blacksmiths | N |
623 | Serevel | 0 | This is Serevel - he sells tickets for the 'Lady of the Waves' | N |
624 | Yanni | 0 | Yanni Salika - He buys and sells antiques. | N |
625 | Official | 3 | He helps the referee | N |
626 | Koftik | 16 | The kings top tracker | N |
627 | Koftik | 16 | The kings top tracker | N |
628 | Koftik | 16 | The kings top tracker | N |
629 | Koftik | 16 | The kings top tracker | N |
630 | Blessed Vermen | 14 | A undead servent of iban | Y |
631 | Blessed Spider | 35 | One of iban's eight legged friends | Y |
632 | Paladin | 71 | A paladin of Ardougne | Y |
633 | Paladin | 71 | A paladin of Ardougne | Y |
634 | slave | 16 | He seems possessed | Y |
635 | slave | 16 | He seems possessed | Y |
636 | slave | 16 | He seems to have been here a while | Y |
637 | slave | 16 | He seems possessed | Y |
638 | slave | 16 | He seems to have been here a while | Y |
639 | slave | 16 | He seems possessed | Y |
640 | slave | 16 | He seems to have been here a while | Y |
641 | Kalrag | 78 | I think this is one of Ibans pets | Y |
642 | Niloof | 18 | A short angry guy | N |
643 | Kardia the Witch | 25 | She's got warts | N |
644 | Souless | 16 | He seems an empty shell | Y |
645 | Othainian | 78 | big red and incredibly evil | Y |
646 | Doomion | 98 | A big scary jet black demon | Y |
647 | Holthion | 78 | big red and incredibly evil | Y |
648 | Klank | 18 | A short angry guy | N |
649 | Iban | 21 | You feel terror just looking at him | N |
650 | Koftik | 16 | The kings top tracker | N |
651 | Goblin guard | 48 | An imposing green creature | Y |
652 | Observatory Professor | 4 | He works in the observatory | N |
653 | Ugthanki | 45 | A dangerous type of spitting camel that can temporarily blind an | |
opponent. | Y | |||
654 | Observatory assistant | 4 | The Professor's assistant | N |
655 | Souless | 24 | A servent to zamorak | Y |
656 | Dungeon spider | 22 | A nasty poisonous arachnid | Y |
657 | Kamen | 18 | A short angry guy | N |
658 | Iban disciple | 19 | An evil follower of Iban | Y |
659 | Koftik | 16 | The kings top tracker | N |
660 | Goblin | 19 | These goblins have grown strong | Y |
661 | Chadwell | 16 | A sturdy looking gent | N |
662 | Professor | 4 | The owner of the observatory | N |
663 | San Tojalon | 120 | The animated spirit of San Tojalon | Y |
664 | Ghost | 29 | A doomed victim of zamorak | Y |
665 | Spirit of Scorpius | 100 | The undead spirit of the follower of Zamorak | N |
666 | Scorpion | 21 | There are nasty scorpions around this grave | N |
667 | Dark Mage | 0 | He works in the ways of dark magic | N |
668 | Mercenary | 50 | He seems to be guarding an area | Y |
669 | Mercenary Captain | 64 | He's in control of the local guards. | Y |
670 | Mercenary | 39 | He seems to be guarding an area | Y |
671 | Mining Slave | 16 | A chained slave forced to mine rocks. | Y |
672 | Watchtower wizard | 12 | A learned man | N |
673 | Ogre Shaman | 100 | An intelligent form of ogre | N |
674 | Skavid | 3 | Servant race to the ogres | N |
675 | Ogre guard | 78 | These ogres protect the city | N |
676 | Ogre guard | 78 | These ogres protect the city | N |
677 | Ogre guard | 78 | These ogres protect the city | N |
678 | Skavid | 3 | Servant race to the ogres | N |
679 | Skavid | 3 | Servant race to the ogres | N |
680 | Og | 78 | The chieftan of this ogre tribe | N |
681 | Grew | 78 | The chieftan of this ogre tribe | N |
682 | Toban | 78 | The chieftan of this ogre tribe | N |
683 | Gorad | 78 | A high ranking ogre official | Y |
684 | Ogre guard | 96 | this creature looks very tough | Y |
685 | Yanille Watchman | 33 | A captured guard of Yanille | N |
686 | Ogre merchant | 58 | He sells ogre-inspired items | N |
687 | Ogre trader | 58 | He trades in metals | N |
688 | Ogre trader | 58 | He trades in food | N |
689 | Ogre trader | 58 | He trades in food | N |
690 | Mercenary | 39 | He seems to be guarding an area | Y |
691 | City Guard | 78 | high ranking ogre guards | N |
692 | Mercenary | 39 | He seems to be guarding this area | Y |
693 | Lawgof | 18 | He guards the mines | N |
694 | Dwarf | 18 | A short angry guy | Y |
695 | lollk | 18 | He looks scared | N |
696 | Skavid | 3 | Servant race to the ogres | N |
697 | Ogre guard | 78 | These ogres protect the city | Y |
698 | Nulodion | 18 | He's the head of black guard weapon development | N |
699 | Dwarf | 18 | A short angry guy | Y |
700 | Al Shabim | 0 | The leader of a nomadic Bedabin desert people - sometimes referred to as the 'Tenti's' | N |
701 | Bedabin Nomad | 0 | A Bedabin nomad - they live in the harshest extremes in the desert | N |
702 | Captain Siad | 48 | He's in control of the whole mining camp. | Y |
703 | Bedabin Nomad Guard | 70 | A Bedabin nomad guard - he's protecting something important | Y |
704 | Ogre citizen | 58 | A denizen of Gu'Tanoth | Y |
705 | Rock of ages | 150 | A huge boulder | Y |
706 | Ogre | 58 | A large dim looking humanoid | Y |
707 | Skavid | 3 | Servant race to the ogres | N |
708 | Skavid | 3 | Servant race to the ogres | N |
709 | Skavid | 3 | Servant race to the ogres | N |
710 | Draft Mercenary Guard | 50 | He's quickly drafted in to deal with trouble makers | Y |
711 | Mining Cart Driver | 15 | He drives the mining cart | N |
712 | kolodion | 12 | He runs the mage arena | N |
713 | kolodion | 12 | He runs the mage arena | Y |
714 | Gertrude | 20 | A busy housewife | N |
715 | Shilop | 0 | A young boisterous looking lad | N |
716 | Rowdy Guard | 50 | He looks as if he's spoiling for trouble | Y |
717 | Shantay Pass Guard | 32 | He seems to be guarding the Shantay Pass | Y |
718 | Rowdy Slave | 16 | A slave who's looking for trouble. | Y |
719 | Shantay Pass Guard | 32 | He seems to be guarding the Shantay Pass | N |
720 | Assistant | 0 | He is an assistant to Shantay and helps him to run the pass. | N |
721 | Desert Wolf | 31 | A vicious Desert wolf | Y |
722 | Workman | 9 | This person is working on the site | N |
723 | Examiner | 2 | As you examine the examiner you examine that she is indeed an examiner!! | N |
724 | Student | 0 | A student busily digging! | N |
725 | Student | 20 | A student busily digging! | N |
726 | Guide | 12 | This person specialises in panning for gold | N |
727 | Student | 18 | A student busily digging! | N |
728 | Archaeological expert | 15 | An expert on archaeology! | N |
729 | civillian | 18 | He looks aggitated! | Y |
730 | civillian | 0 | She looks aggitated! | N |
731 | civillian | 0 | She looks aggitated! | N |
732 | civillian | 15 | He looks aggitated! | N |
733 | Murphy | 15 | The man in charge of the fishing trawler | N |
734 | Murphy | 15 | The man in charge of the fishing trawler | N |
735 | Sir Radimus Erkle | 10 | A huge muscular man in charge of the Legends Guild | N |
736 | Legends Guild Guard | 50 | This guard is protecting the entrance to the Legends Guild. | N |
737 | Escaping Mining Slave | 16 | An emancipated slave with cool Desert Clothes. | N |
738 | Workman | 9 | This person is working in the mine | N |
739 | Murphy | 15 | The man in charge of the fishing trawler | N |
740 | Echned Zekin | 50 | An evil spirit of the underworld. | N |
741 | Donovan the Handyman | 9 | It's the family odd jobs man | N |
742 | Pierre the Dog Handler | 9 | It's the guy who looks after the family guard dog | N |
743 | Hobbes the Butler | 9 | It's the family butler | N |
744 | Louisa The Cook | 0 | It's the family cook | N |
745 | Mary The Maid | 25 | The family maid | N |
746 | Stanford The Gardener | 8 | It's the family Gardener | N |
747 | Guard | 28 | He looks like he's in over his head here | N |
748 | Guard Dog | 46 | He doesn't seem pleased to see me | N |
749 | Guard | 8 | EMPTY PLEASE USE OR REPLACE | N |
750 | Man | 9 | A thirsty looking man | N |
751 | Anna Sinclair | 9 | The first child of the late Lord Sinclair | N |
752 | Bob Sinclair | 9 | The second child of the late Lord Sinclair | N |
753 | Carol Sinclair | 9 | The third child of the late Lord Sinclair | N |
754 | David Sinclair | 9 | The fourth child of the late Lord Sinclair | N |
755 | Elizabeth Sinclair | 9 | The fifth child of the late Lord Sinclair | N |
756 | Frank Sinclair | 9 | The sixth child of the late Lord Sinclair | N |
757 | kolodion | 65 | He's a shape shifter | Y |
758 | kolodion | 68 | He's a shape shifter | Y |
759 | kolodion | 46 | He's a shape shifter | Y |
760 | kolodion | 98 | He's a shape shifter | Y |
761 | Irvig Senay | 125 | The animated spirit of Irvig Senay | Y |
762 | Ranalph Devere | 130 | The animated spirit of Ranalph Devere | Y |
763 | Poison Salesman | 7 | Peter Potter - Poison Purveyor | N |
764 | Gujuo | 60 | A tall charismatic looking jungle native - he approaches with confidence | N |
765 | Jungle Forester | 15 | A woodsman who specialises in large and exotic timber | N |
766 | Ungadulu | 75 | An ancient looking Shaman | Y |
767 | Ungadulu | 75 | An ancient looking Shaman - he looks very strange with glowing red eyes... | Y |
768 | Death Wing | 80 | A supernatural creature of the underworld | Y |
769 | Nezikchened | 172 | An ancient powerful Demon of the Underworld... | Y |
770 | Dwarf Cannon engineer | 18 | He's the head of black guard weapon development | N |
771 | Dwarf commander | 18 | He guards the mines | N |
772 | Viyeldi | 80 | The spirit of a dead sorcerer | Y |
773 | Nurmof | 18 | He sells pickaxes | N |
774 | Fatigue expert | 10 | He looks wide awake | N |
775 | Karamja Wolf | 61 | A hungry | Y |
776 | Jungle Savage | 87 | A savage and fearless Jungle warrior | Y |
777 | Oomlie Bird | 32 | A variety of flightless jungle fowl - it has a sharp beak and a bad temper. | Y |
778 | Sidney Smith | 30 | Sidney Smith - Certification clerk | N |
779 | Siegfried Erkle | 25 | An eccentric shop keeper - related to the Grand Vizier of the Legends Guild | N |
780 | Tea seller | 9 | He has delicious tea to buy | N |
781 | Wilough | 0 | A young son of gertrudes | N |
782 | Philop | 0 | Gertrudes youngest | N |
783 | Kanel | 0 | Gertrudes youngest's twin brother | N |
784 | chamber guardian | 15 | He hasn't seen much sun latley | N |
785 | Sir Radimus Erkle | 10 | A huge muscular man in charge of the Legends Guild | N |
786 | Pit Scorpion | 35 | Very vicious little scorpions | Y |
787 | Shadow Warrior | 64 | A sinsistar shadowy figure | Y |
788 | Fionella | 25 | She runs the legend's general store | N |
789 | Battle mage | 52 | He kills in the name of guthix | Y |
790 | Battle mage | 52 | He kills in the name of zamarok | Y |
791 | Battle mage | 52 | He kills in the name of Saradomin | Y |
792 | Gundai | 15 | He must get lonely out here | N |
793 | Lundail | 15 | He sells rune stones | N |
Objects
ID | Name | Description |
---|---|---|
0 | Tree | A pointy tree |
1 | Tree | A leafy tree |
2 | Well | The bucket is missing |
3 | Table | A mighty fine table |
4 | Treestump | Someone has chopped this tree down! |
5 | Ladder | it's a ladder leading upwards |
6 | Ladder | it's a ladder leading downwards |
7 | Chair | A sturdy looking chair |
8 | logs | A pile of logs |
9 | Longtable | It has nice candles |
10 | Throne | It looks fancy and expensive |
11 | Range | A hot well stoked range |
12 | Gravestone | R I P |
13 | Gravestone | Its covered in moss |
14 | Bed | Ooh nice blankets |
15 | Bed | Its a bed - wow |
16 | bar | Mmm beer |
17 | Chest | Perhaps I should search it |
18 | Chest | I wonder what is inside... |
19 | Altar | Its an Altar |
20 | Post | What am I examining posts for |
21 | Support | A wooden pole |
22 | barrel | Its empty |
23 | Bench | It doesn't look very comfy |
24 | Portrait | A painting of our beloved king |
25 | candles | Candles on a fancy candlestick |
26 | fountain | The water looks fairly clean |
27 | landscape | An oil painting |
28 | Millstones | You can use these to make flour |
29 | Counter | It's the shop counter |
30 | Stall | A market stall |
31 | Target | Coming soon archery practice |
32 | PalmTree | A nice palm tree |
33 | PalmTree | A shady palm tree |
34 | Fern | A leafy plant |
35 | Cactus | It looks very spikey |
36 | Bullrushes | I wonder why it's called a bullrush |
37 | Flower | Ooh thats pretty |
38 | Mushroom | I think it's a poisonous one |
39 | Coffin | This coffin is closed |
40 | Coffin | This coffin is open |
41 | stairs | These lead upstairs |
42 | stairs | These lead downstairs |
43 | stairs | These lead upstairs |
44 | stairs | These lead downstairs |
45 | railing | nice safety measure |
46 | pillar | An ornate pillar |
47 | Bookcase | A large collection of books |
48 | Sink | Its fairly dirty |
49 | Dummy | I can practice my fighting here |
50 | anvil | heavy metal |
51 | Torch | It would be very dark without this |
52 | hopper | You put grain in here |
53 | chute | Flour comes out here |
54 | cart | A farm cart |
55 | sacks | Yep they're sacks |
56 | cupboard | The cupboard is shut |
57 | Gate | The gate is closed |
58 | gate | The gate is open |
59 | gate | The gate is open |
60 | gate | The gate is closed |
61 | signpost | To Varrock |
62 | signpost | To the tower of wizards |
63 | doors | The doors are open |
64 | doors | The doors are shut |
65 | signpost | To player owned houses |
66 | signpost | To Lumbridge Castle |
67 | bookcase | It's a bookcase |
68 | henge | these look impressive |
69 | Dolmen | A sort of ancient altar thingy |
70 | Tree | This tree doesn't look too healthy |
71 | cupboard | Perhaps I should search it |
72 | Wheat | nice ripe looking wheat |
73 | sign | The blue moon inn |
74 | sails | The windmill's sails |
75 | sign | estate agent |
76 | sign | The Jolly boar inn |
77 | Drain | This drainpipe runs from the kitchen to the sewers |
78 | manhole | A manhole cover |
79 | manhole | How dangerous - this manhole has been left open |
80 | pipe | a dirty sewer pipe |
81 | Chest | Perhaps I should search it |
82 | Chest | I wonder what is inside... |
83 | barrel | It seems to be full of newt's eyes |
84 | cupboard | The cupboard is shut |
85 | cupboard | Perhaps I should search it |
86 | fountain | I think I see something in the fountain |
87 | signpost | To Draynor Manor |
88 | Tree | This tree doesn't look too healthy |
89 | sign | General Store |
90 | sign | Lowe's Archery store |
91 | sign | The Clothes Shop |
92 | sign | Varrock Swords |
93 | gate | You can pass through this on the members server |
94 | gate | You can pass through this on the members server |
95 | sign | Bob's axes |
96 | sign | The staff shop |
97 | fire | A strongly burning fire |
98 | Rock | A rocky outcrop |
99 | Rock | A rocky outcrop |
100 | Rock | A rocky outcrop |
101 | Rock | A rocky outcrop |
102 | Rock | A rocky outcrop |
103 | Rock | A rocky outcrop |
104 | Rock | A rocky outcrop |
105 | Rock | A rocky outcrop |
106 | Rock | A rocky outcrop |
107 | Rock | A rocky outcrop |
108 | Rock | A rocky outcrop |
109 | Rock | A rocky outcrop |
110 | Rock | A rocky outcrop |
111 | Rock | A rocky outcrop |
112 | Rock | A rocky outcrop |
113 | Rock | A rocky outcrop |
114 | Rock | A rocky outcrop |
115 | Rock | A rocky outcrop |
116 | web | A spider's web |
117 | web | A spider's web |
118 | furnace | A red hot furnace |
119 | Cook's Range | A hot well stoked range |
120 | Machine | I wonder what it's supposed to do |
121 | Spinning wheel | I can spin wool on this |
122 | Lever | The lever is up |
123 | Lever | The lever is down |
124 | LeverA | It's a lever |
125 | LeverB | It's a lever |
126 | LeverC | It's a lever |
127 | LeverD | It's a lever |
128 | LeverE | It's a lever |
129 | LeverF | It's a lever |
130 | Ladder | it's a ladder leading upwards |
131 | signpost | To the forge |
132 | signpost | To the Barbarian's Village |
133 | signpost | To Al Kharid |
134 | Compost Heap | A smelly pile of compost |
135 | Coffin | This coffin is closed |
136 | Coffin | This coffin is open |
137 | gate | You can pass through this on the members server |
138 | gate | You can pass through this on the members server |
139 | sign | The Bank of runescape |
140 | cupboard | The cupboard is shut |
141 | cupboard | Perhaps I should search it |
142 | doors | The doors are shut |
143 | torch | A scary torch |
144 | Altar | An altar to the evil God Zamorak |
145 | Shield | A display shield |
146 | Grill | some sort of ventilation |
147 | Cauldron | A very large pot |
148 | Grill | some sort of ventilation |
149 | Mine Cart | It's empty |
150 | Buffers | Stop the carts falling off the end |
151 | Track | Train track |
152 | Track | Train track |
153 | Track | Train track |
154 | Hole | I can see a witches cauldron directly below it |
155 | ship | A ship to Karamja |
156 | ship | A ship to Karamja |
157 | ship | A ship to Karamja |
158 | Emergency escape ladder | it's a ladder leading downwards |
159 | sign | Wydin's grocery |
160 | sign | The Rusty Anchor |
161 | ship | A ship to Port Sarim |
162 | ship | A ship to Port Sarim |
163 | ship | A ship to Port Sarim |
164 | Rocks | A rocky outcrop |
165 | Rocks | A rocky outcrop |
166 | Rocks | A rocky outcrop |
167 | Rocks | A rocky outcrop |
168 | Rocks | A rocky outcrop |
169 | Rocks | A rocky outcrop |
170 | Rocks | A rocky outcrop |
171 | Rocks | A rocky outcrop |
172 | Rocks | A rocky outcrop |
173 | hopper | You put grain in here |
174 | cupboard | The cupboard is shut |
175 | cupboard | Perhaps I should search it |
176 | Rocks | A rocky outcrop |
177 | Doric's anvil | Property of Doric the dwarf |
178 | pottery oven | I can fire clay pots in this |
179 | potter's wheel | I can make clay pots using this |
180 | gate | A gate from Lumbridge to Al Kharid |
181 | gate | This gate is open |
182 | crate | A crate used for storing bananas |
183 | Banana tree | A tree with nice ripe bananas growing on it |
184 | Banana tree | There are no bananas left on the tree |
185 | crate | A crate used for storing bananas |
186 | Chest | A battered old chest |
187 | Chest | I wonder what is inside... |
188 | Flower | Ooh thats pretty |
189 | sign | Fishing Supplies |
190 | sign | Jewellers |
191 | Potato | A potato plant |
192 | fish | I can see fish swimming in the water |
193 | fish | I can see fish swimming in the water |
194 | fish | I can see fish swimming in the water |
195 | Rock | A rocky outcrop |
196 | Rock | A rocky outcrop |
197 | Rocks | A rocky outcrop |
198 | Ladder | it's a ladder leading upwards |
199 | Ladder | it's a ladder leading downwards |
200 | Monks Altar | Its an Altar |
201 | Ladder | it's a ladder leading downwards |
202 | Coffin | This coffin is closed |
203 | Coffin | This coffin is open |
204 | Smashed table | This table has seen better days |
205 | Fungus | A creepy looking fungus |
206 | Smashed chair | This chair is broken |
207 | Broken pillar | The remains of a pillar |
208 | Fallen tree | A fallen tree |
209 | Danger Sign | Danger! |
210 | Rock | A rocky outcrop |
211 | Rock | A rocky outcrop |
212 | Rocks | A rocky outcrop |
213 | Gravestone | A big impressive gravestone |
214 | bone | Eep! |
215 | bone | This would feed a dog for a month |
216 | carcass | I think it's dead |
217 | animalskull | I wouldn't like to meet a live one |
218 | Vine | A creepy creeper |
219 | Vine | A creepy creeper |
220 | Vine | A creepy creeper |
221 | Chest | Perhaps I should search it |
222 | Chest | I wonder what is inside... |
223 | Ladder | it's a ladder leading downwards |
224 | ship | The Lumbridge Lady |
225 | ship | The Lumbridge Lady |
226 | hole | This ship isn't much use with that there |
227 | Ladder | it's a ladder leading upwards |
228 | Chest | Perhaps I should search it |
229 | Chest | I wonder what is inside... |
230 | Chest | Perhaps I should search it |
231 | Chest | I wonder what is inside... |
232 | hole | This ship isn't much use with that there |
233 | ship | The Lumbridge Lady |
234 | ship | The Lumbridge Lady |
235 | Altar of Guthix | A sort of ancient altar thingy |
236 | The Cauldron of Thunder | A very large pot |
237 | Tree | A leafy tree |
238 | ship | A ship to Entrana |
239 | ship | A ship to Entrana |
240 | ship | A ship to Entrana |
241 | ship | A ship to Port Sarim |
242 | ship | A ship to Port Sarim |
243 | ship | A ship to Port Sarim |
244 | Ladder | it's a ladder leading downwards |
245 | Dramen Tree | This tree doesn't look too healthy |
246 | hopper | You put grain in here |
247 | Chest | Perhaps I should search it |
248 | Chest | I wonder what is inside... |
249 | Ladder | it's a ladder leading upwards |
250 | sign | 2-handed swords sold here |
251 | sign | ye olde herbalist |
252 | gate | You can pass through this on the members server |
253 | gate | You can pass through this on the members server |
254 | gate | You can pass through this on the members server |
255 | Door mat | If I ever get my boots muddy I know where to come |
256 | gate | The gate is closed |
257 | Cauldron | A very large pot |
258 | cupboard | The cupboard is shut |
259 | cupboard | Perhaps I should search it |
260 | gate | The bank vault gate |
261 | fish | I can see fish swimming in the water |
262 | sign | Harry's fishing shack |
263 | cupboard | The cupboard is shut |
264 | cupboard | Perhaps I should search it |
265 | Chest | Perhaps I should search it |
266 | Chest | I wonder what is inside... |
267 | sign | The shrimp and parrot |
268 | signpost | Palm Street |
269 | Rockslide | A pile of rocks blocks your path |
270 | Ladder | it's a ladder leading upwards |
271 | fish | I can see fish swimming in the lava! |
272 | barrel | Its got ale in it |
273 | table | It's a sturdy table |
274 | Fireplace | It would be very cold without this |
275 | Egg | Thats one big egg! |
276 | Eggs | They'd make an impressive omlette |
277 | Stalagmites | Hmm pointy |
278 | Stool | A simple three legged stool |
279 | Bench | It doesn't look to comfortable |
280 | table | A round table ideal for knights |
281 | table | A handy little table |
282 | fountain of heros | Use a dragonstone gem here to increase it's abilties |
283 | bush | A leafy bush |
284 | hedge | A carefully trimmed hedge |
285 | flower | A nice colourful flower |
286 | plant | Hmm leafy |
287 | Giant crystal | How unusual a crystal with a wizard trapped in it |
288 | sign | The dead man's chest |
289 | sign | The rising sun |
290 | crate | A large wooden storage box |
291 | crate | A large wooden storage box |
292 | ship | A merchant ship |
293 | ship | A merchant ship |
294 | beehive | It's guarded by angry looking bees |
295 | Ladder | it's a ladder leading upwards |
296 | Altar | An altar to the evil God Zamorak |
297 | sign | Hickton's Archery store |
298 | signpost | To Camelot |
299 | Archway | A decorative marble arch |
300 | Obelisk of water | It doesn't look very wet |
301 | Obelisk of fire | It doesn't look very hot |
302 | sand pit | I can use a bucket to get sand from here |
303 | Obelisk of air | A tall stone pointy thing |
304 | Obelisk of earth | A tall stone pointy thing |
305 | gate | You can pass through this on the members server |
306 | Oak Tree | A grand old oak tree |
307 | Willow Tree | A weeping willow |
308 | Maple Tree | It's got nice shaped leaves |
309 | Yew Tree | A tough looking yew tree |
310 | Tree | A magical tree |
311 | gate | A gate guarded by a fierce barbarian |
312 | sign | The forester's arms |
313 | flax | A flax plant |
314 | Large treestump | Someone has chopped this tree down! |
315 | Rocks | A rocky outcrop |
316 | Lever | It's a lever |
317 | Lever | It's a lever |
318 | Lever | It's a lever |
319 | gate | You can pass through this on the members server |
320 | ship | A ship bound for Ardougne |
321 | ship | A ship bound for Ardougne |
322 | Bakers Stall | A market stall |
323 | Silk Stall | A market stall |
324 | Fur Stall | A market stall |
325 | Silver Stall | A market stall |
326 | Spices Stall | A market stall |
327 | gems Stall | A market stall |
328 | crate | A large heavy sealed crate |
329 | crate | A large heavy sealed crate |
330 | sign | RPDT depot |
331 | stairs | These lead upstairs |
332 | Chest | Perhaps I should search it |
333 | Chest | I wonder what is inside... |
334 | Chest | I wonder what is inside... |
335 | Chest | I wonder what is inside... |
336 | Chest | I wonder what is inside... |
337 | Chest | I wonder what is inside... |
338 | Chest | I wonder what is inside... |
339 | Chest | someone is stealing something from it |
340 | Chest | I wonder what is inside... |
341 | empty stall | A market stall |
342 | stairs | These lead upstairs |
343 | hopper | You put grain in here |
344 | signpost | Ardougne city zoo |
345 | sign | The flying horse |
346 | gate | You can pass through this on the members server |
347 | gate | You can pass through this on the members server |
348 | Lever | The lever is up |
349 | Lever | The lever is up |
350 | pipe | a dirty sewer pipe |
351 | fish | I can see fish swimming in the water |
352 | fish | I can see fish swimming in the water |
353 | fish | I can see fish swimming in the water |
354 | fish | I can see fish swimming in the water |
355 | Vine | A creepy creeper |
356 | gate | The main entrance to McGrubor's wood |
357 | gate | The gate is open |
358 | gate | The gate is closed |
359 | stairs | These lead downstairs |
360 | broken cart | A farm cart |
361 | Lever | It's a lever |
362 | clock pole blue | A pole - a pole to put cog's on |
363 | clock pole red | A pole - a pole to put cog's on |
364 | clock pole purple | A pole - a pole to put cog's on |
365 | clock pole black | A pole - a pole to put cog's on |
366 | wallclockface | It's a large clock face |
367 | Lever Bracket | Theres something missing here |
368 | Lever | It's a lever |
369 | stairs | These lead upstairs |
370 | stairs | These lead downstairs |
371 | gate | The gate is closed |
372 | gate | The gate is open |
373 | Lever | The lever is up |
374 | Lever | The lever is up |
375 | Foodtrough | It's for feeding the rat's |
376 | fish | I can see fish swimming in the water |
377 | spearwall | It's a defensive battlement |
378 | hornedskull | A horned dragon skull |
379 | Chest | I wonder what is inside... |
380 | Chest | I wonder what is inside... |
381 | guardscupboard | The cupboard is shut |
382 | guardscupboard | Perhaps I should search it |
383 | Coal truck | I can use this to transport coal |
384 | ship | A ship to Port Birmhaven |
385 | ship | A ship to Port Birmhaven |
386 | ship | A ship to Port Birmhaven |
387 | Tree | It's a tree house |
388 | Ballista | It's a war machine |
389 | largespear | |
390 | spirit tree | A grand old spirit tree |
391 | young spirit Tree | Ancestor of the spirit tree |
392 | gate | The gate is closed |
393 | wall | A damaged wall |
394 | tree | An exotic looking tree |
395 | tree | An exotic looking tree |
396 | Fern | An exotic leafy plant |
397 | Fern | An exotic leafy plant |
398 | Fern | An exotic leafy plant |
399 | Fern | An exotic leafy plant |
400 | fly trap | A small carnivourous plant |
401 | Fern | An exotic leafy plant |
402 | Fern | An exotic spikey plant |
403 | plant | What an unusual plant |
404 | plant | An odd looking plant |
405 | plant | some nice jungle foliage |
406 | stone head | It looks like it's been here some time |
407 | dead Tree | A rotting tree |
408 | sacks | Yep they're sacks |
409 | khazard open Chest | Perhaps I should search it |
410 | khazard shut Chest | I wonder what is inside... |
411 | doorframe | It's a stone doorframe |
412 | Sewer valve | It changes the water flow of the sewer's |
413 | Sewer valve 2 | It changes the water flow of the sewer's |
414 | Sewer valve 3 | It changes the water flow of the sewer's |
415 | Sewer valve 4 | It changes the water flow of the sewer's |
416 | Sewer valve 5 | It changes the water flow of the sewer's |
417 | Cave entrance | I wonder what is inside... |
418 | Log bridge | A tree gnome construction |
419 | Log bridge | A tree gnome construction |
420 | tree platform | A tree gnome construction |
421 | tree platform | A tree gnome construction |
422 | gate | The gate is open |
423 | tree platform | A tree gnome construction |
424 | tree platform | A tree gnome construction |
425 | Log bridge | A tree gnome construction |
426 | Log bridge | A tree gnome construction |
427 | tree platform | A tree gnome construction |
428 | tree platform | A tree gnome construction |
429 | Tribal brew | A very large pot |
430 | Pineapple tree | A tree with nice ripe pineapples growing on it |
431 | Pineapple tree | There are no pineapples left on the tree |
432 | log raft | A mighty fine raft |
433 | log raft | A mighty fine raft |
434 | Tomb of hazeel | A clay shrine to lord hazeel |
435 | range | A pot of soup slowly cooking |
436 | Bookcase | A large collection of books |
437 | Carnillean Chest | Perhaps I should search it |
438 | Carnillean Chest | I wonder what is inside... |
439 | crate | A crate used for storing food |
440 | Butlers cupboard | The cupboard is shut |
441 | Butlers cupboard | The cupboard is open |
442 | gate | The gate is open |
443 | gate | The gate is closed |
444 | Cattle furnace | A red hot furnace |
445 | Ardounge wall | A huge wall seperating east and west ardounge |
446 | Ardounge wall corner | A huge wall seperating east and west ardounge |
447 | Dug up soil | A freshly dug pile of mud |
448 | Pile of mud | Mud caved in from above |
449 | large Sewer pipe | a dirty sewer pipe |
450 | Ardounge wall gateway | A huge set of heavy wooden doors |
451 | cupboard | The cupboard is shut |
452 | cupboard | The cupboard is open |
453 | Fishing crane | For hauling in large catches of fish |
454 | Rowboat | A reasonably sea worthy two man boat |
455 | Damaged Rowboat | A not so sea worthy two man boat |
456 | barrel | I wonder what's inside |
457 | gate | The gate is closed |
458 | Ladder | it's a ladder leading upwards |
459 | Fishing crane | For hauling in large catches of fish |
460 | Fishing crane | For hauling in large catches of fish |
461 | Waterfall | it's a waterfall |
462 | leaflessTree | A pointy tree |
463 | leaflessTree | A pointy tree |
464 | log raft | A mighty fine raft |
465 | doors | The doors are shut |
466 | Well | An oddly placed well |
467 | Tomb of glarial | A stone tomb surrounded by flowers |
468 | Waterfall | it's a fast flowing waterfall |
469 | Waterfall | it's a fast flowing waterfall |
470 | Bookcase | A large collection of books |
471 | doors | The doors are shut |
472 | doors | The doors are shut |
473 | Stone stand | On top is an indent the size of a rune stone |
474 | Stone stand | On top is an indent the size of a rune stone |
475 | Stone stand | On top is an indent the size of a rune stone |
476 | Stone stand | On top is an indent the size of a rune stone |
477 | Stone stand | On top is an indent the size of a rune stone |
478 | Stone stand | On top is an indent the size of a rune stone |
479 | Glarial's Gravestone | There is an indent the size of a pebble in the stone's center |
480 | gate | The gate is closed |
481 | crate | It's a crate |
482 | leaflessTree | A pointy tree |
483 | Statue of glarial | A statue of queen glarial - something's missing |
484 | Chalice of eternity | A magically elevated chalice full of treasure |
485 | Chalice of eternity | A magically elevated chalice full of treasure |
486 | doors | The doors are shut |
487 | Lever | The lever is up |
488 | Lever | The lever is up |
489 | log raft remains | oops! |
490 | Tree | A pointy tree |
491 | Range | A hot well stoked range |
492 | crate | It's an old crate |
493 | fish | I can see fish swimming in the water |
494 | Watch tower | They're always watching |
495 | signpost | Tourist infomation |
496 | Rocks | A rocky outcrop |
497 | doors | The doors are open |
498 | Rope ladder | A hand made ladder |
499 | cupboard | The cupboard is shut |
500 | cupboard | Perhaps I should search it |
501 | Rope ladder | A hand made ladder |
502 | Cooking pot | the mourners are busy enjoying this stew |
503 | Gallow | Best not hang about! |
504 | gate | The gate is closed |
505 | crate | A crate used for storing confiscated goods |
506 | cupboard | The cupboard is shut |
507 | cupboard | Perhaps I should search it |
508 | gate | You can pass through this on the members server |
509 | cupboard | The cupboard is shut |
510 | cupboard | Perhaps I should search it |
511 | sign | Tailors fancy dress |
512 | grand tree | the grand tree |
513 | gate | The gate is closed |
514 | gate | The gate is open |
515 | Rocks | A rocky outcrop |
516 | Rocks | A rocky outcrop |
517 | Rocks | A rocky outcrop |
518 | Rocks | A rocky outcrop |
519 | Rocks | A rocky outcrop |
520 | Rocks | A rocky outcrop |
521 | Rocks | A rocky outcrop |
522 | Rocks | A rocky outcrop |
523 | Rocks | A rocky outcrop |
524 | Log bridge | A tree gnome construction |
525 | Watch tower | A tree gnome construction |
526 | Log bridge | A tree gnome construction |
527 | climbing rocks | I wonder if I can climb up these |
528 | Ledge | It looks rather thin |
529 | Ledge | It looks rather thin |
530 | log | It looks slippery |
531 | log | It looks slippery |
532 | Rocks | A rocky outcrop |
533 | Rocks | A rocky outcrop |
534 | Rocks | A rocky outcrop |
535 | Rocks | A rocky outcrop |
536 | Rocks | A rocky outcrop |
537 | Rocks | A rocky outcrop |
538 | Rocks | A rocky outcrop |
539 | Rocks | A rocky outcrop |
540 | Rocks | A rocky outcrop |
541 | Rocks | A rocky outcrop |
542 | Rocks | A rocky outcrop |
543 | Rocks | A rocky outcrop |
544 | Rocks | A rocky outcrop |
545 | Rocks | A rocky outcrop |
546 | Rocks | A rocky outcrop |
547 | Rocks | A rocky outcrop |
548 | Rocks | A rocky outcrop |
549 | Rocks | A rocky outcrop |
550 | Rocks | A rocky outcrop |
551 | Rocks | A rocky outcrop |
552 | Rocks | A rocky outcrop |
553 | PalmTree | A shady palm tree |
554 | Scorched Earth | An area of burnt soil |
555 | Rocks | A moss covered rock |
556 | sign | The dancing donkey inn |
557 | fish | I can see fish swimming in the water |
558 | Rocky Walkway | A precarious rocky walkway |
559 | Rocky Walkway | A precarious rocky walkway |
560 | Rocky Walkway | A precarious rocky walkway |
561 | Rocky Walkway | A precarious rocky walkway |
562 | fight Dummy | I can practice my fighting here |
563 | gate | The gate is closed |
564 | Jungle Vine | A deep jungle Vine |
565 | statue | hand carved |
566 | sign | Ye Olde Dragon Inn |
567 | grand tree | the grand tree |
568 | grand tree | the grand tree |
569 | grand tree | the grand tree |
570 | grand tree | the grand tree |
571 | grand tree | the grand tree |
572 | Hillside Entrance | Large doors that seem to lead into the hillside |
573 | tree | A large exotic looking tree |
574 | Log bridge | A tree gnome construction |
575 | Tree platform | A tree gnome construction |
576 | Tree platform | A tree gnome construction |
577 | Metalic Dungeon Gate | It seems to be closed |
578 | Log bridge | A tree gnome construction |
579 | Log bridge | A tree gnome construction |
580 | Watch tower | A tree gnome construction |
581 | Watch tower | A tree gnome construction |
582 | Shallow water | A small opening in the ground with some spots of water |
583 | Doors | Perhaps you should give them a push |
584 | grand tree | the grand tree |
585 | Tree Ladder | it's a ladder leading upwards |
586 | Tree Ladder | it's a ladder leading downwards |
587 | blurberrys cocktail bar | the gnome social hot spot |
588 | Gem Rocks | A rocky outcrop with a vein of semi precious stones |
589 | Giannes place | Eat green eat gnome cruisine |
590 | ropeswing | A good place to train agility |
591 | net | A good place to train agility |
592 | Frame | A good place to train agility |
593 | Tree | It has a branch ideal for tying ropes to |
594 | Tree | I wonder who put that rope there |
595 | Tree | they look fun to swing on |
596 | cart | A farm cart |
597 | fence | it doesn't look too strong |
598 | beam | A plank of wood |
599 | Sign | read me |
600 | Sign | Blurberry's cocktail bar |
601 | Sign | Giannes tree gnome cuisine |
602 | Sign | Heckel funch's grocery store |
603 | Sign | Hudo glenfad's grocery store |
604 | Sign | Rometti's fashion outlet |
605 | Sign | Tree gnome bank and rometti's fashion outlet |
606 | Sign | Tree gnome local swamp |
607 | Sign | Agility training course |
608 | Sign | To the grand tree |
609 | Root | To the grand tree |
610 | Root | To the grand tree |
611 | Metal Gate | The gate is closed |
612 | Metal Gate | The gate is open |
613 | A farm cart | It is blocking the entrance to the village |
614 | Ledge | It looks rather thin |
615 | Ledge | It looks rather thin |
616 | Ladder | it's a ladder leading upwards |
617 | cage | i don't like the look of that |
618 | glider | i wonder if it flys |
619 | cupboard | The cupboard is shut |
620 | cupboard | Perhaps I should search it |
621 | stairs | These lead upstairs |
622 | glider | i wonder if it flys |
623 | gate | The gate is open |
624 | gate | The gate is closed |
625 | chaos altar | An altar to the evil God Zamorak |
626 | Gnome stronghold gate | The gate is closed |
627 | ropeswing | A good place to train agility |
628 | ropeswing | A good place to train agility |
629 | stairs | These lead upstairs |
630 | stairs | These lead downstairs |
631 | Chest | Perhaps I should search it |
632 | Chest | I wonder what is inside... |
633 | Pile of rubble | What a mess |
634 | Stone stand | On top our four indents from left to right |
635 | Watch tower | A tree gnome construction |
636 | Pile of rubble | What a mess |
637 | Root | To the grand tree |
638 | Root | To the grand tree |
639 | Root | To the grand tree |
640 | Sign | Home to the Head tree guardian |
641 | Hammock | They've got to sleep somewhere |
642 | Goal | You're supposed to throw the ball here |
643 | stone tile | It looks as if it might move |
644 | Chest | You get a sense of dread from the chest |
645 | Chest | You get a sense of dread from the chest |
646 | Watch tower | A tree gnome construction |
647 | net | A good place to train agility |
648 | Watch tower | A tree gnome construction |
649 | Watch tower | A tree gnome construction |
650 | ropeswing | A good place to train agility |
651 | Bumpy Dirt | Some disturbed earth |
652 | pipe | a dirty sewer pipe |
653 | net | A good place to train agility |
654 | pipe | a dirty sewer pipe |
655 | log | It looks slippery |
656 | pipe | a dirty sewer pipe |
657 | pipe | a dirty sewer pipe |
658 | Handholds | I wonder if I can climb up these |
659 | Ladder | it's a ladder leading upwards |
660 | gate | The gate is closed |
661 | stronghold spirit Tree | Ancestor of the spirit tree |
662 | Tree | It has a branch ideal for tying ropes to |
663 | Tree | I wonder who put that rope there |
664 | Tree | I wonder who put that rope there |
665 | Spiked pit | I don't want to go down there |
666 | Spiked pit | I don't want to go down there |
667 | Cave | I wonder what is inside... |
668 | stone pebble | Looks like a stone |
669 | Pile of rubble | Rocks that have caved in |
670 | Pile of rubble | Rocks that have caved in |
671 | pipe | I might be able to fit through this |
672 | pipe | 2 |
673 | Stone | Looks like a stone |
674 | Stone | Looks like a stone |
675 | ropeswing | A good place to train agility |
676 | log | It looks slippery |
677 | net | A good place to train agility |
678 | Ledge | It looks rather thin |
679 | Handholds | I wonder if I can climb up these |
680 | log | It looks slippery |
681 | log | It looks slippery |
682 | Rotten Gallows | A human corpse hangs from the noose |
683 | Pile of rubble | Rocks that have caved in |
684 | ropeswing | I wonder what's over here |
685 | ropeswing | I wonder what's over here |
686 | ocks | A moss covered rock |
687 | Tree | This tree doesn't look too healthy |
688 | Well stacked rocks | Rocks that have been stacked at regular intervals |
689 | Tomb Dolmen | An ancient construct for displaying the bones of the deceased |
690 | Handholds | I wonder if I can climb up these |
691 | Bridge Blockade | A crudely constructed fence to stop you going further |
692 | Log Bridge | A slippery log that is a make-do bridge |
693 | Handholds | I wonder if I can climb up these |
694 | Tree | they look fun to swing on |
695 | Tree | they look fun to swing on |
696 | Wet rocks | A rocky outcrop |
697 | Smashed table | This table has seen better days |
698 | Crude Raft | A crudely constructed raft |
699 | Daconia rock | Piles of daconia rock |
700 | statue | A statue to mark Taie Bwo Wannai sacred grounds |
701 | Stepping stones | A rocky outcrop |
702 | gate | The gate is closed |
703 | gate | Enter to balance into an agility area |
704 | gate | Enter to balance into an agility area |
705 | pipe | It looks a tight squeeze |
706 | ropeswing | A good place to train agility |
707 | Stone | Looks like a stone |
708 | Ledge | It doesn't look stable |
709 | Vine | A creepy creeper |
710 | Rocks | A rocky outcrop |
711 | Wooden Gate | The gate is open |
712 | Wooden Gate | The gate is closed |
713 | Stone bridge | An ancient stone construction |
714 | Stone bridge | An ancient stone construction |
715 | Stone bridge | An ancient stone construction |
716 | Stone bridge | An ancient stone construction |
717 | Stone platform | An ancient stone construction |
718 | fence | it doesn't look too strong |
719 | Rocks | A rocky outcrop |
720 | Stone bridge | The bridge has partly collapsed |
721 | Stone bridge | The bridge has partly collapsed |
722 | Gate of Iban | It doesn't look very inviting |
723 | Wooden Door | It doesn't look very inviting |
724 | Tomb Dolmen | An ancient construct for displaying the bones of the deceased |
725 | Cave entrance | It doesn't look very inviting |
726 | Old bridge | That's been there a while |
727 | Old bridge | That's been there a while |
728 | Crumbled rock | climb up to above ground |
729 | stalagmite | Formed over thousands of years |
730 | stalagmite | Formed over thousands of years |
731 | Rocks | A small rocky outcrop |
732 | Ledge | I might be able to climb that |
733 | Lever | Seems to be some sort of winch |
734 | stalactite | Formed over thousands of years |
735 | stalactite | Formed over thousands of years |
736 | stalactite | Formed over thousands of years |
737 | Rocks | A small rocky outcrop |
738 | Rocks | A small rocky outcrop |
739 | Rocks | A small rocky outcrop |
740 | Rocks | A small rocky outcrop |
741 | Rocks | A small rocky outcrop |
742 | Rocks | A small rocky outcrop |
743 | Rocks | A small rocky outcrop |
744 | Rocks | A small rocky outcrop |
745 | Rocks | A small rocky outcrop |
746 | Rocks | A small rocky outcrop |
747 | Rocks | A small rocky outcrop |
748 | Rocks | A small rocky outcrop |
749 | Rocks | A small rocky outcrop |
750 | Ledge | I might be able to climb that |
751 | Ledge | I might be able to climb that |
752 | Ledge | I might be able to climb that |
753 | Ledge | I might be able to climb that |
754 | Swamp | That smells horrid |
755 | Swamp | That smells horrid |
756 | Rocks | A small rocky outcrop |
757 | Rocks | A small rocky outcrop |
758 | Rocks | A small rocky outcrop |
759 | Rocks | A small rocky outcrop |
760 | Rocks | A small rocky outcrop |
761 | Rocks | A small rocky outcrop |
762 | Rocks | A small rocky outcrop |
763 | Rocks | A small rocky outcrop |
764 | Rocks | A small rocky outcrop |
765 | Rocks | A small rocky outcrop |
766 | Rocks | A small rocky outcrop |
767 | Pile of mud | Mud caved in from above |
768 | Travel Cart | A sturdy cart for travelling in |
769 | Travel Cart | A sturdy cart for travelling in |
770 | Rocks | A small rocky outcrop |
771 | stalactite | Formed over thousands of years |
772 | Rocks | You should be able to move these |
773 | Rocks | You should be able to move these |
774 | Rocks | You should be able to move these |
775 | sign | The Paramaya Hostel |
776 | Ladder | A ladder that leads to the dormitory - a ticket is needed |
777 | Grill | They looks suspicious |
778 | Spiked pit | They looks suspicious |
779 | signpost | To the Furnace |
780 | Ship | A sea faring ship called 'Lady Of The Waves' |
781 | Ship | A sea faring ship called 'Lady Of The Waves' |
782 | Grill | They looks suspicious |
783 | sacks | Yep they're sacks |
784 | Zamorakian Temple | Scary! |
785 | Grill | They looks suspicious |
786 | Grill | They looks suspicious |
787 | Grill | They looks suspicious |
788 | Grill | They looks suspicious |
789 | Grill | They looks suspicious |
790 | Grill | They looks suspicious |
791 | Grill | They looks suspicious |
792 | Rocks | A small rocky outcrop |
793 | Rocks | A small rocky outcrop |
794 | Tomb Doors | Ornately carved wooden doors depicting skeletal warriors |
795 | Swamp | That smells horrid |
796 | Rocks | You should be able to move these |
797 | Rocks | You should be able to move these |
798 | stalactite | Formed over thousands of years |
799 | stalactite | Formed over thousands of years |
800 | Spiked pit | They looks suspicious |
801 | Lever | Seems to be some sort of winch |
802 | Cage | Seems to be mechanical |
803 | Cage | Seems to be mechanical |
804 | Rocks | More rocks! |
805 | Spear trap | Ouch! |
806 | Rocks | More rocks! |
807 | Rocks | More rocks! |
808 | Rocks | More rocks! |
809 | Rocks | More rocks! |
810 | Rocks | More rocks! |
811 | Rocks | More rocks! |
812 | Ledge | I might be able to climb that |
813 | Furnace | Charred bones are slowly burning inside |
814 | Well | The remains of a warrior slump over the strange construction |
815 | Passage | A strange metal grill covers the passage |
816 | Passage | The passage way has swung down to a vertical position |
817 | Passage | The passage way has swung down to a vertical position |
818 | stalagmite | Formed over thousands of years |
819 | Rocks | You should be able to move these |
820 | Rocks | You should be able to move these |
821 | Rocks | You should be able to move these |
822 | Rocks | You should be able to move these |
823 | Rocks | You should be able to move these |
824 | Rocks | You should be able to move these |
825 | Passage | Looks suspicous! |
826 | snap trap | aaaarghh |
827 | Wooden planks | You can walk across these |
828 | Passage | Looks suspicous! |
829 | Passage | Looks suspicous! |
830 | Flames of zamorak | Careful |
831 | Platform | An ancient construction |
832 | Rock | Scripture has been carved into the rock |
833 | Rock | Scripture has been carved into the rock |
834 | Rock | Scripture has been carved into the rock |
835 | Rock | Scripture has been carved into the rock |
836 | wall grill | It seems to filter the rotten air through the caverns |
837 | Ledge | I might be able to make to the other side |
838 | wall grill | It seems to filter the rotten air through the caverns |
839 | Dug up soil | A freshly dug pile of mud |
840 | Dug up soil | A freshly dug pile of mud |
841 | Pile of mud | Mud caved in from above |
842 | stalagmite | Formed over thousands of years |
843 | Pile of mud | Mud and rocks piled up |
844 | Pile of mud | Mud and rocks piled up |
845 | Pile of mud | Mud and rocks piled up |
846 | Pile of mud | Mud and rocks piled up |
847 | Pile of mud | Mud and rocks piled up |
848 | Spiked pit | I don't want to go down there |
849 | Rocks | A small rocky outcrop |
850 | Rocks | A small rocky outcrop |
851 | Rocks | A small rocky outcrop |
852 | Rocks | A small rocky outcrop |
853 | Rocks | A small rocky outcrop |
854 | Rocks | A small rocky outcrop |
855 | Rocks | A small rocky outcrop |
856 | Rocks | A small rocky outcrop |
857 | Rocks | A small rocky outcrop |
858 | Rocks | A small rocky outcrop |
859 | Rocks | A small rocky outcrop |
860 | Rocks | A small rocky outcrop |
861 | Ledge | I might be able to climb that |
862 | Ledge | I might be able to climb that |
863 | Ledge | I might be able to climb that |
864 | Ledge | I might be able to climb that |
865 | Ledge | I might be able to climb that |
866 | Ledge | I might be able to climb that |
867 | Boulder | Could be dangerous! |
868 | crate | Someone or something has been here before us |
869 | Door | Spooky! |
870 | Platform | An ancient construction |
871 | Cage remains | Poor unicorn! |
872 | Ledge | I might be able to climb that |
873 | Passage | Looks suspicous! |
874 | Passage | Looks suspicous! |
875 | Gate of Zamorak | It doesn't look very inviting |
876 | Rocks | A small rocky outcrop |
877 | Bridge support | An ancient construction |
878 | Tomb of Iban | A clay shrine to lord iban |
879 | Claws of Iban | claws of iban |
880 | barrel | Its stinks of alcohol |
881 | Rock | Scripture has been carved into the rock |
882 | Rocks | More rocks |
883 | Rocks | More rocks |
884 | Swamp | That smells horrid |
885 | Chest | Perhaps I should search it |
886 | Stone bridge | An ancient stone construction |
887 | cage | That's no way to live |
888 | cage | That's no way to live |
889 | Stone steps | They lead into the darkness |
890 | Pile of mud | Mud and rocks piled up |
891 | Stone bridge | The bridge has partly collapsed |
892 | Stone bridge | The bridge has partly collapsed |
893 | Stone bridge | The bridge has partly collapsed |
894 | Stone bridge | The bridge has partly collapsed |
895 | Stone bridge | The bridge has partly collapsed |
896 | Stone bridge | The bridge has partly collapsed |
897 | Stone bridge | The bridge has partly collapsed |
898 | Stone bridge | The bridge has partly collapsed |
899 | Stone bridge | The bridge has partly collapsed |
900 | Stone bridge | The bridge has partly collapsed |
901 | Stone bridge | The bridge has partly collapsed |
902 | Stone bridge | The bridge has partly collapsed |
903 | Stone bridge | The bridge has partly collapsed |
904 | Stone bridge | The bridge has partly collapsed |
905 | Stone bridge | The bridge has partly collapsed |
906 | Stone bridge | The bridge has partly collapsed |
907 | Stone bridge | The bridge has partly collapsed |
908 | Stone bridge | The bridge has partly collapsed |
909 | Stone bridge | The bridge has partly collapsed |
910 | Stone bridge | The bridge has partly collapsed |
911 | Chest | Perhaps I should search it |
912 | Chest | I wonder what is inside... |
913 | Pit of the Damned | The son of zamoracks alter... |
914 | Open Door | Spooky! |
915 | signpost | Observatory reception |
916 | Stone Gate | A mystical looking object |
917 | Chest | Perhaps there is something inside |
918 | Zodiac | A map of the twelve signs of the zodiac |
919 | Chest | Perhaps I should search it |
920 | Ladder | it's a ladder leading upwards |
921 | Stone steps | They lead into the darkness |
922 | Rock | Scripture has been carved into the rock |
923 | Rock | Scripture has been carved into the rock |
924 | Rock | Scripture has been carved into the rock |
925 | Telescope | A device for viewing the heavens |
926 | Gate | The entrance to the dungeon jail |
927 | sacks | These sacks feels lumpy! |
928 | Ladder | the ladder goes down into a dark area |
929 | Chest | All these chests look the same! |
930 | Chest | All these chests look the same! |
931 | Bookcase | A very roughly constructed bookcase. |
932 | Iron Gate | A well wrought iron gate - it's locked. |
933 | Ladder | the ladder down to the cavern |
934 | Chest | Perhaps there is something inside |
935 | Chest | All these chests look the same! |
936 | Chest | Perhaps there is something inside |
937 | Chest | All these chests look the same! |
938 | Rockslide | A pile of rocks blocks your path |
939 | Altar | An altar to the evil God Zamorak |
940 | column | Formed over thousands of years |
941 | Grave of Scorpius | Here lies Scorpius: dread follower of zamorak |
942 | Bank Chest | Allows you to access your bank. |
943 | dwarf multicannon | fires metal balls |
944 | Disturbed sand | Footprints in the sand show signs of a struggle |
945 | Disturbed sand | Footprints in the sand show signs of a struggle |
946 | dwarf multicannon base | bang |
947 | dwarf multicannon stand | bang |
948 | dwarf multicannon barrels | bang |
949 | Cave | I wonder what's inside! |
950 | Cave | I wonder what's inside! |
951 | fence | These bridges seem hastily put up |
952 | signpost | a signpost |
953 | Rocks | I wonder if I can climb up these |
954 | Rocks | I wonder if I can climb up these |
955 | Cave entrance | A noxious smell emanates from the cave... |
956 | Chest | Perhaps I should search it |
957 | Chest | I wouldn't like to think where the owner is now |
958 | Wooden Doors | Large oak doors constantly watched by guards |
959 | Pedestal | something fits on here |
960 | bush | A leafy bush |
961 | bush | A leafy bush |
962 | Standard | A standard with a human skull on it |
963 | Mining Cave | A gaping hole that leads to another section of the mine |
964 | Mining Cave | A gaping hole that leads to another section of the mine |
965 | Rocks | A small rocky outcrop |
966 | Lift | To brings mined rocks to the surface |
967 | Mining Barrel | For loading up mined stone from below ground |
968 | Hole | I wonder where this leads... |
969 | Hole | I wonder where this leads... |
970 | Cave | I wonder what's inside! |
971 | Cave | I wonder what's inside! |
972 | Cave | I wonder what's inside! |
973 | Counter | An ogre is selling items here |
974 | Track | Train track |
975 | Cave | I wonder what's inside! |
976 | Mine Cart | A heavily constructed and often used mining cart. |
977 | Lift Platform | A wooden lift that is operated from the surface. |
978 | Chest | I wonder what is inside... |
979 | Chest | I wonder what is inside... |
980 | Watch tower | Constructed by the dwarven black guard |
981 | Ladder | it's a ladder leading upwards |
982 | Cave entrance | I wonder what is inside... |
983 | Pile of mud | Mud caved in from above |
984 | Cave | I wonder what's inside! |
985 | Ladder | it's a ladder leading downwards |
986 | crate | A crate |
987 | crate | A crate |
988 | Gate | This gate barrs your way into gu'tanoth |
989 | Gate | This gate barrs your way into gu'tanoth |
990 | bush | A leafy bush |
991 | bush | A leafy bush |
992 | bush | A leafy bush |
993 | bush | A leafy bush |
994 | multicannon | fires metal balls |
995 | Rocks | Some rocks are close to the egde |
996 | Rocks | Some rocks are close to the edge |
997 | Ladder | it's a ladder leading downwards |
998 | Cave entrance | I wonder what is inside... |
999 | Counter | An ogre is selling cakes here |
1000 | Chest | Perhaps I should search it |
1001 | Chest | I wonder what is inside... |
1002 | Chest | Perhaps I should search it |
1003 | Chest | I wonder what is inside... |
1004 | Bookcase | A large collection of books |
1005 | Captains Chest | I wonder what is inside... |
1006 | Experimental Anvil | An experimental anvil - for developing new techniques in forging |
1007 | Rocks | A small pile of stones |
1008 | Rocks | A small rocky outcrop |
1009 | Column | Created by ancient mages |
1010 | Wall | Created by ancient mages |
1011 | Wall | Created by ancient mages |
1012 | Wall | Created by ancient mages |
1013 | Wall | Created by ancient mages |
1014 | Lever | The lever is up |
1015 | Lever | The lever is down |
1016 | Wall | Created by ancient mages |
1017 | Ladder | it's a ladder leading downwards |
1018 | Wall | Created by ancient mages |
1019 | Gate | The gate is closed |
1020 | Gate | The gate is closed |
1021 | Ladder | it's a ladder leading upwards |
1022 | shock | cosmic energy |
1023 | Desk | A very strong looking table with some locked drawers. |
1024 | Cave | I wonder what's inside! |
1025 | Mining Cart | A sturdy well built mining cart with barrels full of rock on the back. |
1026 | Rock of Dalgroth | A mysterious boulder of the ogres |
1027 | entrance | Created by ancient mages |
1028 | Dried Cactus | It looks very spikey |
1029 | climbing rocks | I wonder if I can climb up these |
1030 | Rocks | Strange rocks - who knows why they're wanted? |
1031 | lightning | blimey! |
1032 | Crude Desk | A very roughly constructed desk |
1033 | Heavy Metal Gate | This is an immense and very heavy looking gate made out of thick wrought |
metal | ||
1034 | Counter | An ogre is selling cakes here |
1035 | Crude bed | A flea infested sleeping experience |
1036 | flames | looks hot! |
1037 | Carved Rock | An ornately carved rock with a pointed recepticle |
1038 | USE | FREE SLOT PLEASE USE |
1039 | crate | A crate used for storing materials |
1040 | crate | A crate used for storing materials |
1041 | barrel | Its shut |
1042 | Brick | A stone brick |
1043 | Brick | A stone brick |
1044 | Brick | A stone brick |
1045 | Brick | A stone brick |
1046 | Brick | A stone brick |
1047 | Brick | A stone brick |
1048 | Barrier | this section is roped off |
1049 | buried skeleton | I hope I don't meet any of these |
1050 | Brick | A stone brick |
1051 | Brick | A stone brick |
1052 | Specimen tray | A pile of sifted earth |
1053 | winch | This winches earth from the dig hole |
1054 | crate | A crate |
1055 | crate | A crate |
1056 | Urn | A large ornamental urn |
1057 | buried skeleton | I'm glad this isn't around now |
1058 | panning point | a shallow where I can pan for gold |
1059 | Rocks | A small rocky outcrop |
1060 | signpost | a signpost |
1061 | signpost | a signpost |
1062 | signpost | a signpost |
1063 | signpost | a signpost |
1064 | signpost | Digsite educational centre |
1065 | soil | soil |
1066 | soil | soil |
1067 | soil | soil |
1068 | Gate | The gate has closed |
1069 | ship | The ship is sinking |
1070 | barrel | The ship is sinking |
1071 | Leak | The ship is sinking |
1072 | bush | A leafy bush |
1073 | bush | A leafy bush |
1074 | cupboard | The cupboard is shut |
1075 | sacks | Yep they're sacks |
1076 | sacks | Yep they're sacks |
1077 | Leak | The ship is sinking |
1078 | cupboard | The cupboard is shut |
1079 | Wrought Mithril Gates | Magnificent wrought mithril gates giving access to the Legends Guild |
1080 | Legends Hall Doors | Solid Oak doors leading to the Hall of Legends |
1081 | Camp bed | Not comfortable but useful nonetheless |
1082 | barrel | It has a lid on it - I need something to lever it off |
1083 | barrel | I wonder what is inside... |
1084 | Chest | Perhaps I should search it |
1085 | Chest | I wonder what is inside... |
1086 | Dense Jungle Tree | Thick vegetation |
1087 | Jungle tree stump | A chopped down jungle tree |
1088 | signpost | To the digsite |
1089 | gate | You can pass through this on the members server |
1090 | Bookcase | A large collection of books |
1091 | Dense Jungle Tree | An exotic looking tree |
1092 | Dense Jungle Tree | An exotic looking tree |
1093 | Spray | There's a strong wind |
1094 | Spray | There's a strong wind |
1095 | winch | This winches earth from the dig hole |
1096 | Brick | It seems these were put here deliberately |
1097 | Rope | it's a rope leading upwards |
1098 | Rope | it's a rope leading upwards |
1099 | Dense Jungle Palm | A hardy palm tree with dense wood |
1100 | Dense Jungle Palm | A hardy palm tree with dense wood |
1101 | Trawler net | A huge net to catch little fish |
1102 | Trawler net | A huge net to catch little fish |
1103 | Brick | The bricks are covered in the strange compound |
1104 | Chest | I wonder what is inside ? |
1105 | Chest | Perhaps I should search it |
1106 | Trawler catch | Smells like fish! |
1107 | Yommi Tree | An adolescent rare and mystical looking tree in |
1108 | Grown Yommi Tree | A fully grown rare and mystical looking tree |
1109 | Chopped Yommi Tree | A mystical looking tree that has recently been felled |
1110 | Trimmed Yommi Tree | The trunk of the yommi tree. |
1111 | Totem Pole | A nicely crafted wooden totem pole. |
1112 | Baby Yommi Tree | A baby Yommi tree - with a mystical aura |
1113 | Fertile earth | A very fertile patch of earth |
1114 | Rock Hewn Stairs | steps cut out of the living rock |
1115 | Hanging rope | A rope hangs from the ceiling |
1116 | Rocks | A large boulder blocking the stream |
1117 | Boulder | A large boulder blocking the way |
1118 | dwarf multicannon | fires metal balls |
1119 | dwarf multicannon base | bang |
1120 | dwarf multicannon stand | bang |
1121 | dwarf multicannon barrels | bang |
1122 | rock | A rocky outcrop |
1123 | Rock Hewn Stairs | steps cut out of the living rock |
1124 | Rock Hewn Stairs | steps cut out of the living rock |
1125 | Rock Hewn Stairs | steps cut out of the living rock |
1126 | Compost Heap | The family gardeners' compost heap |
1127 | beehive | An old looking beehive |
1128 | Drain | This drainpipe runs from the kitchen to the sewers |
1129 | web | An old thick spider's web |
1130 | fountain | There seems to be a lot of insects here |
1131 | Sinclair Crest | The Sinclair family crest |
1132 | barrel | Annas stuff - There seems to be something shiny at the bottom |
1133 | barrel | Bobs things - There seems to be something shiny at the bottom |
1134 | barrel | Carols belongings - there seems to be something shiny at the bottom |
1135 | barrel | Davids equipment - there seems to be something shiny at the bottom |
1136 | barrel | Elizabeths clothes - theres something shiny at the bottom |
1137 | barrel | Franks barrel seems to have something shiny at the bottom |
1138 | Flour Barrel | Its full of flour |
1139 | sacks | Full of various gardening tools |
1140 | gate | A sturdy and secure wooden gate |
1141 | Dead Yommi Tree | A dead Yommi Tree - it looks like a tough axe will be needed to fell |
this | ||
1142 | clawspell | forces of guthix |
1143 | Rocks | The remains of a large rock |
1144 | crate | A crate of some kind |
1145 | Cavernous Opening | A dark and mysterious cavern |
1146 | Ancient Lava Furnace | A badly damaged furnace fueled by red hot Lava - it looks ancient |
1147 | Spellcharge | forces of guthix |
1148 | Rocks | A small rocky outcrop |
1149 | cupboard | The cupboard is shut |
1150 | sacks | Yep they're sacks |
1151 | Rock | A rocky outcrop |
1152 | Saradomin stone | A faith stone |
1153 | Guthix stone | A faith stone |
1154 | Zamorak stone | A faith stone |
1155 | Magical pool | A cosmic portal |
1156 | Wooden Beam | Some sort of support - perhaps used with ropes to lower people over the |
hole | ||
1157 | Rope down into darkness | A scarey downwards trip into possible doom. |
1158 | Cave entrance | A dark cave entrance leading to the surface. |
1159 | Cave entrance | A small tunnel that leads to a large room beyond. |
1160 | Ancient Wooden Doors | The doors are locked shut |
1161 | Table | An old rickety table |
1162 | Crude bed | Barely a bed at all |
1163 | Tall Reeds | A tall plant with a tube for a stem. |
1164 | Goblin foot prints | They seem to be heading south east |
1165 | Dark Metal Gate | A dark metalic gate which seems to be fused with the rock |
1166 | Magical pool | A cosmic portal |
1167 | Rope Up | A welcome rope back up and out of this dark place. |
1168 | Half buried remains | Some poor unfortunate soul |
1169 | Totem Pole | A carved and decorated totem pole |
1170 | Totem Pole | A carved and decorated totem pole |
1171 | Comfy bed | Its a bed - wow |
1172 | Rotten Yommi Tree | A decomposing fully grown Yommi Tree |
1173 | Rotten Yommi Tree | A decomposing felled Yommi Tree |
1174 | Rotten Yommi Tree | A decomposing Yommi Tree Trunk |
1175 | Rotten Totem Pole | A decomposing Totem Pole |
1176 | Leafy Palm Tree | A shady palm tree |
1177 | Grand Viziers Desk | A very elegant desk - you could knock it to get the Grand Viziers |
attention. | ||
1178 | Strange Barrel | It might have something inside of it. |
1179 | ship | A sturdy sailing ship |
1180 | ship | A sturdy sailing ship |
1181 | ship | A sturdy sailing ship |
1182 | digsite bed | Not comfortable but useful nonetheless |
1183 | Tea stall | A stall selling oriental infusions |
1184 | Boulder | A large boulder blocking the way |
1185 | Boulder | A large boulder blocking the way |
1186 | Damaged Earth | Disturbed earth - it will heal itself in time |
1187 | Ladder | it's a ladder leading upwards |
1188 | Ladder | it's a ladder leading downwards |
[[Category RS2]]
NOTE: This page will have many further updates, once I rename and document the #289 client more.
== '''Packet structure''' == When the client sends a packet to the server, the first byte encapsulates its [http://en.wikipedia.org/wiki/Opcode opcode]. This specific opcode is encrypted with a value generated by the [http://en.wikipedia.org/wiki/ISAAC ISAAC] [http://en.wikipedia.org/wiki/Pseudorandom_number_generator PRNG] seeded with a dynamically server generated key during the login block. The server decrypts it and associates the opcode to the packet's respective predefined size. If the packet does not contain a fixed size, the opcode will be followed by either a byte or a word - varying per packet - for its proper size. This is then followed by the [http://en.wikipedia.org/wiki/Payload_(software) payload].
== '''Login Protocol Overview''' == Every connection to the main 'gateway' server sends a single byte of data, mostly well known as the connection type. The connection type tells the main server which type of connection you wish to initiate. The old engine list consists of: * Login request - connection type 14 * Update - connection type 15 * New connection login - connection type 16 * Reconnecting login - connection type 18
The connection type we will cover in the following paragraphs is the login connection type, 14. After the login handshake initiating connection type, the client writes a small bit of data derived from the logging in player's username. This is believed to help select the appropriate login server. On successful handshake, the server sends back 8 ignored bytes.
long l = TextUtils.encodeAsBase37Integer(username); int i = (int) (l >> 16 & 31L); out.offset = 0; out.writeByte(14); // Initiate connection type out.writeByte(i); // "small bit of data derived from... player's username" in.queueBytes(2, out.payload); for (int j = 0; j < 8; j++) in.read();At this point, the client reads in one byte, called the status code. The status code 0 is expected to start the login protocol correctly. If the status code is 0, the client reads a long, dubbed by many as the server session key. This is used to help generate a unique seed for the client session's packet opcode masking. The client then stores two ints that are the upper and lower ints of the client session key, which has the same purpose as the server's key. The client then starts writing the login block, which is RSA encrypted.
The login block starts with the byte 10, which is considered a magic number. Following it is the client session key and server session key longs. After the session keys, the session's UID (unique identifier or user identifier) is written to the block. This is used to distinguish between multiple sessions. Trailing behind the UID comes the client's username and password written as modified C-strings that are rather terminated with a 10 byte than a NUL byte. This block is then RSA encrypted and stored for later use.
Now starts the login request packet. It starts off with a flag telling the server whether or not the client is reconnecting or connecting for the first time. The byte is 18 or 16, respectively. [NOW CLASSIFIED AS A CONNECTION TYPE] Following is the size of the rest of the login response packet, including the login block that trails at the end, to tip the server how much data it should expect. Later comes the magic number byte 255, and right behind it the client revision short. The packet is just about crafted completely. A flag byte that represents if the client is running in low memory or high memory modes is sent, and after the 9 CRC32 checksums of the file system 0 basic archives (this includes versionlist, media, config, etc.). To top it off, the RSA encrypted login block is appended to the end and the packet is sent to the server.
The ISAAC ciphers are seeded for packet opcode masking after adding 50 to each int of the session keys, and the status code is reread. This finishes the login protocol.
== '''Login Protocol Breakdown''' == The login is comprised of four
stages in which the client and server switch in regards to which one is
reading and which one is writing.
===Variables:=== The login
process has a lot of variable data, compiled here is a list of the
variables and their different values. ====Name Hash==== A hash of the
player name, thought to be used to select an appropriate login server.
This has no use in current private servers.
====Server Session Key==== The server-session-key is one of two ciphers
used to encrypt the game protocol, using the ISAAC algorithms.
===="Data File Version"==== The CRC checks for the cache
files.
====User ID==== The ID of the user.
====Username==== The username
of the player, used to identify their account.
====Password====
The password of the player account, used so only they can log into their
account.
====Client Session Key==== The client-session-key is one
of two ciphers used to encrypt the game protocol, using the ISAAC
algorithms.
====Connect Status==== The status of the connection.
{|border=2 ! Value ! Status |- | 16 | Signifies that the connection
is new. |- | 18 | Signifies that the session is reconnecting a
previously lost connection. |- |}
====Size==== The size of the unencrypted login packet, used to determine
how many bytes need to be read from the stream by the server.
====Client Version==== The memory-version of the game client.
{|border=2 ! Value ! Status |- | 0 | Signifies the client is a
low-memory client. |- | 1 | Signifies that the client is a
high-memory client. |- |}
====CRC Values==== 9 4-byte values, Each containing the CRC of their
respective cache files. Used by the server to verify client is up to
date.
====Player Status==== The in-game player status - player, player
moderator, or administrator.
{|border=2 ! Value ! Status |- | 0
| Signifies that this player is a normal player. |- | 1 | Signifies
that this player is a player moderator. |- | 2 | Signifies that this
player is an administrator. |- |}
====Flagged==== If set to 1, information about mouse movements etc. are
sent to the server. Suspected bot accounts are flagged.
====Response Codes==== At the beginning and end of the login procedure,
we send different values to the client to allow or deny a login. The
various values show different messages on the login box on the client or
do something internally.
{| border=2 ! Value ! Response |- | -1
| Waits for 2000ms and tries again while counting failures. |- | 0 |
Exchanges session keys, player name, password, etc. |- | 1 | Waits
for 2000ms and tries again. |- | 2 | Client made a successful login.
|- | 3 | "Invalid username or password." |- | 4 | "Your account
has been disabled. Please check your message-center for details." |- |
5 | "Your account is already logged in. Try again in 60 secs..." |- |
6 | "RuneScape has been updated! Please reload this page." |- | 7 |
"This world is full. Please use a different world." |- | 8 | "Unable
to connect. Login server offline." |- | 9 | "Login limit exceeded.
Too many connections from your address." |- | 10 | "Unable to
connect. Bad session id." |- | 11 | "Login server rejected session.
Please try again." |- | 12 | "You need a members account to login to
this world. Please subscribe, or use a different world." |- | 13 |
"Could not complete login. Please try using a different world." |- |
14 | "The server is being updated. Please wait 1 minute and try again."
|- | 15 | See the [[#Regarding response code 15|notes below]].
|- | 16 | "Login attempts exceeded. Please wait 1 minute and try
again." |- | 17 | "You are standing in a members-only area. To play
on this world move to a free area first." |- | 20 | "Invalid
loginserver requested. Please try using a different world." |- | 21 |
"You have only just left another world. Your profile will be transferred
in: (number) seconds." |- | None of the above | "Unexpected server
response. Please try using a different world." |- |}
==== Regarding response code 15 ==== On the server, players are not unregistered for quite some time. This can be best witnessed when the client forcefully closes the connection while in combat. If you're quick enough before the player dies or kills the NPC, login attempts during that time return that the account is already logged in. This probably explains why the message says "try again in 60 seconds", and they just reused the response when the player is truly logged in.
Going along with this "players aren't offline yet" idea, when the client experiences some lag and performs a reconnect, it sends byte 18 as it's [[#Connect Status|connection type]] to the server.
The server most likely saves this as a boolean (reconnect = var == 18;). When the login is entirely validated, meaning the password's are okay and the server isn't full, it can either send back the normal response, 2, or 15.
But why 15? If you look at the client code, you'll see that the chat messages aren't cleared. If you've ever had a poor connection you've noticed that your chat stays there upon a reconnect, and this is exactly why. When you implement response code 15 though, you do NOT need to send the "player status" or the "flagged" bytes.
===Login Process:=== ====Stage 1: Client -> Server==== {| border=2 |-
! Data Type ! Value |- | ubyte | 14 |- | ubyte | "name hash" |-
|}
====Stage 2: Server -> Client==== {| border=2 |- ! Data Type ! Value
|- | byte | 0 |- | byte | 0 |- | byte | 0 |- | byte | 0 |-
| byte | 0 |- | byte | 0 |- | byte | 0 |- | byte | 0 |- |
byte | "response code" |- | [[QWord|long]] | "server session
key" |- |}
====Stage 3: Client -> Server==== {| border=2 |- ! Data Type ! Value
|- | byte | "connect status" |- | byte | "size" |- | byte | 255
|- | [[Word|short]] | 289 |- | byte | "client version" |- |
[[DWord|int]] | "crc values"[0] |- | [[DWord|int]] |
"crc values"[1] |- | [[DWord|int]] | "crc values"[2] |- |
[[DWord|int]] | "crc values"[3] |- | [[DWord|int]] |
"crc values"[4] |- | [[DWord|int]] | "crc values"[5] |- |
[[DWord|int]] | "crc values"[6] |- | [[DWord|int]] |
"crc values"[7] |- | [[DWord|int]] | "crc values"[8] |- |
byte | 10 or "RSA header" |- | [[QWord|long]] | "client session
key" |- | [[QWord|long]] | "server session key" |- |
[[DWord|int]] | "user id" |- | [[RS String|RS String]] |
"username" |- | [[RS String|RS String]] | "password" |- |}
====Stage 4: Server -> Client==== {| border=2 |- ! Data Type ! Value
|- | byte | "response code" |- | byte | "player status" |- |
byte | "flagged" |- |}
== '''Player Updating''' ==
Yes, the player updating procedure IS different than 317.
The player updating process consists of 4 parts: * a) Our player movement updates * b) Other player movement updates * c) Player list updating * c.a) Apperance updating * c.b) Location updating * d) Player update block flag-based updates
'''Our player movement updates'''
The client begins by reading 1 bit. This bit tells the client whether or not it is currently updating 'our player', or the player the client is controlling. If it's not updating our player, it exits and goes onto step b. If it is, it then reads 2 bits. The value is called the movement update type. There are 4 recognized movement update types:
-
Type 0 basically tells the client there is nothing to update for our player, just add its index to the local updating list.
-
Type 1 tells the client you moved in one direction. The client reads 3 bits, which represents the direction you moved in, and then 1 bit, which states whether further update is required. If so, it adds it to the updating list. This is used in walking.
-
Type 2 functions in much of the same way as its previous, only this time it reads two 3 bit values. The first represents the player's last direction, and the second it's current direction. Trailing behind it is also the 1 bit 'update required' flag as type 1. This is used in running.
-
Type 3 on the other hand is different. It reads in 2 bits which represents our player's plane, or its level of height, in the game world. Only 0-3 inclusive are appropriate planes supported by the client. It then reads two 7 bit quantities, representing the new relative X and relative Y coordinates of our player to our current map region's origin. It then sets our players position to the plane, x, and y positions as told to. Directly after it reads 1 bit, which describes whether or not to clear the awaiting-waypoint queue, basically to stop client from further queued stepping, such as used in teleporting. Finally, it reads the 'update required' bit, and checks to see if further update is required.
'''Other player movement updates'''
The client begins by reading an 8 bit value telling the client how many players there are to update. It then enters a loop for each player there is to update.
Inside this loop, the client reads 1 bit. This is the movement update required flag. If the flag is 0, it sets the current updating player's last update cycle time to the current game logic loop cycle time, and adds the player to the local player list. If the flag is not 0, it then reads the movement update type, which is a 2 bit quantity. The following known types are:
-
0, the client updates the current player's last update cycle time, adds the current player to the local player list, and adds it to the updating list.
-
1, the client updates the current player's last update cycle time and adds the current player to the local player list as well, but also reads in 3 bit quantity. This represents the current player's direction it walked to. It then reads the a 1 bit value that specifies whether or not to add the player to the updating list.
-
2, the client does the exact same thing as the type 2 update, except it reads in two of the 3 bit quantities. The first represents the current player's last direction, and the second its current direction running.
-
3, it only adds the player to the needing-update list, or so believed. Type 3 is not well known.
'''Player list updating'''
The next step in the player updating procedure is the player list updating, or where the client recieves data on every player in its local list, such as appearance and location relative to ours. The client loops through a process for each player in the updating.
The client reads an 11 bit quantity from the buffer, which is the next player in the updated list to be informed about. The client then checks if it has a cached buffer for that player's updating, and if it does, it updates the player appearance.
'''Appearance updating'''
Appearance updating starts off by first reading an unsigned byte that represents the current player's gender. Then it reads another unsigned byte that represents the player's over-head icon id. This is used with prayer icons above heads. Next, a loop occurs 12 times to read equipment data.
In the loop, the client reads an unsigned byte that is the equipment slot's item id high byte. If it is 0, the player's equpment slot has no item. If it is not 0, another unsigned byte is read the merged with the previous to create the equipment's item id. If the id is 65535 (written as a -1 signed short), then the player's appearance is that of an NPC. The client reads in an unsigned short representing the NPC's id and sets the player's definition to that NPC's.
After the equipment loop, it loops 5 times, once for each type of coloured body part. In each loop, the client reads an unsigned short and assigns it as the color of the current loop idx (which represents the body part).
Finally, after the color loop, the client reads 7 unsigned shorts representing animation indices; the animations belong to: * Standing still * Turning while standing * Walking * Turning around (backwards) * Turning a quarter-way clockwise * Turning a quarter-way counter clockwise * Running
After these animation indices are read, a long representing the player's
name is read, an unsigned byte representing the combat level, and an
unsigned short representing the players skill level (for things where
players arent ranked by levels, such as where it states '
'''Location updating'''
After the appearance updating, the client starts to update that player's location relative to our player. The player is added to the local player list and it's last update cycle time. It then reads to 5 bit values that determine the players relative X and Y coordinates to our player. The local player area is 16x16, so if the delta of the two coordinates is > 15, 32 is subtracted from it to signify the player is on the other side of ours. It then reads a 1 bit quantity that defines whether or not the client has a chunk in the player update block list. If it does, it adds it to the updating list. At this point the client then sets the player's position. The next bit states whether or not to discard the awaiting-waypoint queue, such as when teleporting, ending the player list updating process.
'''Update block flag-based updating'''
The following is what most people think of when they say 'update mask' and 'update flag'. This process of the updating procedure is very important. It begins with looping through ALL players in the local player update list, reading an unsigned byte which from now on will be called the update flag. All further updates are seen to be 'included' by comparing a bitwise mask to this flag. If the flag has the bits for 0x40 all on, this signifies that the flag was too large for a simple unsigned byte and reads in another unsigned byte, which it uses as the upper unsigned byte, therefore the update flag is an unsigned little-endian short. The client then passes off the data to a helper method which processes all updates this flag signifies.
Inside this method, many different bitwise masks are compared to the player's flag, and if the mask is set, logic is performed. These masks are frequently called update masks. A list of player update masks are below:
-
'''0x200''' The 0x200 mask is used to update the player so they appear to be asynchronously animating and walking. This mask is often used for the [http://runescape.wikia.com/wiki/Agility Agility] skill. The data associated goes in order of: byte (type C) which is the first location's X coordinate value, byte (type S) which is the first location's Y coordinate value, byte (type S) which is the second location's X coordinate value, byte (type C) the second location's Y coordinate value. After the locations are written, there is a required movement speed which is written as a short which marks how fast to move from position 1 to position 2. Another short (type A) is written as the movement speed going from position 2 to position 1. Finally one byte is written to end the mask block, which marks the direction.
-
'''0x100''' The 0x100 mask is responsible for player graphics updating. The data associated is a little-endian unsigned short which represents the graphics id, and an int which is the graphics delay.
-
'''0x2''' Animations are handled by the 0x2 mask. The payload for this update is a little-endian unsigned short that is the animation id, and an unsigned inversed byte which states the animation's delay.
-
'''0x8''' The beloved 0x8 mask takes care of forced player text that is only displayed above the player's model. The only data associated with this is a jagex ASCII string with a terminator of 10.
-
'''0x40''' Unlike the previous, the 0x40 mask handles normal player chat text. The client will read a little-endian unsigned short which holds chat text attributes. It holds the text color and chat effects. Next, the client reads an unsigned byte which states the player's priveleges (normal player, player moderator, moderator, staff) to give the chatter's name a crown. Right behind it trails an unsigned inversed byte that gives chat text length in bytes. Trailing afterwards is dictionary-compressed chat text. All chat text characters become indexes into a valid character table and are written as nibbles (4 bit quantities).
-
'''0x4''' Updating the player's current interacting-entity is done via mask 0x4. The entity id is written as a little-endian unsigned short.
-
'''0x1''' The 0x1 mask updates appearance of the player in exact same way as in updating player list. Only difference is that appearance is updated from a set-sized buffer filled from the current buffer. An unsigned inversed byte is read first which describes appearance buffer size, and the buffer is filled.
-
'''0x20''' Facing coordinate updating is signified by the 0x20 mask. The player's facing-towards X and Y are set to read values; specifically, an unsigned lower-inverted short and little-endian unsigned short, respectively.
-
'''0x10''' Notifying client's of a player's health is done via the 0x10 mask. The hitpoint damage done to the player is sent as an unsigned byte, followed by the hit type as a positive inverted byte. The player's current and max health are read as an unsigned inverted byte and unsigned byte, respectively.
-
'''0x400''' The 0x400 mask acts in the same way as the 0x10 mask and is most likely associated with special attacks from weapons that have the ability to hit twice at the same time. Hitpoint damage is an unsigned byte, the hit type an unsigned inverted byte, and the current and maximum health being an unsigned byte and unsigned inverted byte, respectively.
After the client processes every single player in the update player list, it ends player updating.
==Game Protocol== The game protocol is the in-game communication of
player actions between the server and client.
===Server -> Client
Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 13 | FIXED | 3 | [[289 Chat settings|Chat settings]] | Sends the chat privacy settings. |- | 18 | FIXED | 6 | [[289 Interface item|Interface item]] | Displays an item model inside an interface. |- | 21 | VARIABLE_BYTE | N/A | [[289 Send player option|Send player option]] | Sends a player option (when a player is right clicked, i.e. "Follow"). |- | 23 | FIXED | 0 | [[289 Clear screen|Clear screen]] | Clears the screen of all open interfaces. |- | 30 | FIXED | 5 | [[289 Send player head|Send player head]] | Sends the players dialogue head on an interface. |- | 46 | FIXED | 2 | [[289 Weight|Weight]] | Sends the players weight. |- | 47 | VARIABLE_SHORT | N/A | [[289 Send add ignore|Send add ignore]] | Sends a ignored player to the ignore list. |- | 55 | FIXED | 4 | [[289 Inventory overlay|Inventory overlay]] | Displays an interface over the sidebar area. |- | 59 | VARIABLE_SHORT | N/A | [[289 Set interface text|Set interface text]] | Attaches text to an interface. |- | 63 | FIXED | 3 | [[289 Send sidebar interface|Send sidebar interface]] | Assigns an interface to one of the tabs in the game sidebar. |- | 76 | FIXED | 32 | [[289 Send update item|Send update item]] | Updates an item on an interface. |- | 79 | FIXED | 6 | [[289 Interface offset|Interface offset]] | Sets the offset for drawing of an interface. |- | 81 | FIXED | 2 | [[289 Chat interface|Chat interface]] | Shows an interface in the chat box. |- | 107 | FIXED | 2048 | [[289 Send update items|Send update items]] | Updates more than one item on an interface. |- | 119 | FIXED | 2 | [[289 Show interface|Show interface]] | Displays a normal interface. |- | 120 | FIXED | 3 | [[289 Initialize player|Initialize player]] | Sends their current index on the server's player list and the player's membership status. |- | 121 | FIXED | 0 | [[289 Logout|Logout]] | Disconnects the client from the server. |- | 133 | FIXED | 0 | [[289 Reset camera|Reset camera]] | Resets the camera position. |- | 154 | FIXED | N/A | [[317 Send Skill|Send Skill]] | Sends a specific skill. |- | 155 | FIXED | 3 | [[317 Send position|Send position]] | Sends the coordinates of the player. |- | 160 | FIXED | 4 | [[289 Interface color|Interface color]] | Changes the color of an interface. |- | 168 | FIXED | 9 | [[289 Send add friend|Send add friend]] | Sends a friend to the friend list. |- | 172 | FIXED | 0 | [[289 Reset button state|Reset button state]] | Resets the button state for all buttons. |- | 177 | FIXED | 6 | [[289 Send sound|Send sound]] | Instructs the client to play a sound. |- | 181 | FIXED | 1 | [[289 Flash sidebar|Flash sidebar]] | Causes a sidebar icon to start flashing. |- | 184 | FIXED | 4 | [[289 Scroll position|Scroll position]] | Sets the scrollbar position of an interface. |-| | 185 | FIXED | 5 | [[289 Send Player Head|Send Player Head]] | Sends the player's head on an interface. |- | 187 | FIXED | 3 | [[289 Play song|Play song]] | Instructs the client to play a song. |- | 188 | N/A | N/A | [[289 Protocol#Player Updating|Player updating]] | See player updating (above) for more information. |- | 195 | FIXED | 1 | [[289 Run energy|Run energy]] | Sends the players run energy level. |- | 196 | VARIABLE_BYTE | N/A | [[289 Send message|Send message]] | Sends a server message (e.g. 'Welcome to RuneScape') or trade/duel request. |- | 200 | FIXED | 4 | [[289 Interface animation|Interface animation]] | Sets an interface's model animation. |- | 201 | FIXED | 0 | [[289 Animation reset|Animation reset]] | Resets all animations in the immediate area. |- | 204 | FIXED | 2 | [[289 System update|System update]] | Sends how many seconds until a 'System Update.' |- | 208 | FIXED | 4 | [[289 Camera shake|Camera shake]] | Causes the camera to shake. |- | 219 | FIXED | 4 | [[289 Load map region|Load map region]] | Loads a new map region. |- | 221 | FIXED | 1 | [[317 Friends list status|Friends list status]] | Friends list load status. |- | 243 | VARIABLE_BYTE | N/A | [[289 Send private message|Send private message]] | Sends a private message to another player. |- | 241 | VARIABLE_SHORT | N/A | [[289 Construct Map Region|Construct Map Region]] | Constructs the map region. |- | 244 | FIXED | 5 | [[289 Send Npc Head|Send Npc Head]] | Sends the dialogue head of an npc on an interface. |- | 247 | FIXED | 1 | [[289 Minimap State|Minimap State]] | Sets the mini map's state. |- | 253 | FIXED | 10 | [[289 Open welcome screen|Open welcome screen]] | Displays the welcome screen. |- |}
===Client -> Server Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 235 | FIXED | 8 | [[289 Add friend|Add friend]] | Sent when a player adds a friend to their friend list. |- |}
{{packet|name=Construct Map Region|description=Constructs the map region|opcode=241|type=Variable Short|length=N/A|revision=317}} == Construct Map Region ==
=== Description ===
This packet constructs the map region.
=== Packet Structure === {|border=2 ! Data Type ! Description |- | [[Data Types#Standard data types|Additional Short]] | The players region y plus 6. |- | [[Data Types#Standard data types|Short]] | The players region x plus 6. |- |}
=== Other Information ===
After the region y is sent, you need to initialize the bit access. Then, loop through the z (which can only go up to 3). Still in the for-loop, you need to go through the x's (up to 12). Then, loop through the y's (up to 12).
All of this is in the all three for-loops!
Step 1: Then you'll get the tile of x, y, and z.
Step 2: Then you need to send the bits 1 and (if tile is null) 1 otherwise, 0.
Step 3: Check if the tile is not null. Within this if-statement, you put these bits...
{|border=2 ! Method |- | putBits(26, tile.getX() << 14 | tile.getY() << 3 | tile.getZ() << 24 | tile.getRotation() << 1) |- |}
Out of the for-loops!
Step 1: Finish the bit access and send the region x.
Done.
{{packet|name=Send Player Head|description=Sends player's head on an interface|opcode=185|type=Fixed|length=5|revision=317}} == Player Dialogue Head ==
=== Description ===
This packet sends the player head to an interface.
=== Packet Structure === {|border=2 ! Data Type ! Description |- | [[Data Types#Standard data types|Byte]] | The status of the friends list. |- |}
==== Values ==== The below are the different values for this packet. {| border=2 ! Value ! Response |- | 0 | Loading |- | 1 | Connecting |- | 2 | Loaded |- |}
{{packet|name=Send player head|description=Sends the player head on an interface|opcode=185|type=Fixed|length=5|revision=317}}
== Friends List Status ==
=== Description ===
This packet sends the first list load status.
=== Packet Structure === {|border=2 ! Data Type ! Description |- | [[Data Types#Standard data types|Little Endian Short-A]] | The interface Id. |- |}
{{packet|name=Send Sidebar Interface|description=Sends the sidebar interfaces|opcode=63|type=Fixed|length=3|revision=317}} == Send Sidebar Interface ==
=== Description ===
This packet sends the sidebar interfaces
=== Packet Structure === {|border=2 ! Data Type ! Description |- | [[Data Types#Standard data types|Short]] | The interface Id. |- | [[Data Types#Standard data types|Byte]] | The icon. |- |}
317 Protocol
Packet structure
When the client sends a packet to the server, the first byte encapsulates its opcode.
This specific opcode is encrypted with a value generated by the ISAAC PRNG, seeded with a dynamically server generated key during the login block.
The server decrypts it and associates the opcode to the packet's respective predefined size. If the packet does not contain a fixed size, the opcode will be followed by either a byte or a word - varying per packet - for its proper size. This is then followed by the payload.
Login Protocol Overview
Every connection to the main 'gateway' server sends a single byte of data, mostly well known as the connection type. The connection type tells the main server which type of connection you wish to initiate.
The old engine list consists of:
ID | Description |
---|---|
14 | Login request |
15 | Update |
16 | New connection login |
18 | Reconnecting login |
The connection type we will cover in the following paragraphs is the login connection type, 14. After the login handshake initiating connection type, the client writes hash derived from the logging in player's username. This is believed to help select the appropriate login server. On successful handshake, the server sends back 8 ignored bytes.
long encodedUsername = encode_base37(username);
int usernameHash = (int) (encodedUsername >> 16 & 31L);
out.offset = 0;
out.writeByte(14); // Connection type
out.writeByte(usernameHash);
in.queueBytes(2, out.payload);
for (int j = 0; j < 8; j++)
in.read();
At this point, the client reads in one byte, called the status code. The status code 0 is expected to start the login protocol correctly. If the status code is 0, the client reads a long, dubbed by many as the server session key. This is used to help generate a unique seed for the client session's packet opcode masking. The client then stores two ints that are the upper and lower ints of the client session key, which has the same purpose as the server's key. The client then starts writing the login block, which is RSA encrypted.
The login block starts with the byte 10, which is considered a magic number. Following it is the client session key and server session key longs. After the session keys, the session's UID (unique identifier or user identifier) is written to the block. This is used to distinguish between multiple sessions. Trailing behind the UID comes the client's username and password written as modified C-strings that are rather terminated with a 10 byte than a NULL byte. This block is then RSA encrypted and stored for later use.
Now starts the login request packet. It starts off with a flag telling the server whether or not the client is reconnecting or connecting for the first time. The byte is 18 or 16, respectively. [NOW CLASSIFIED AS A CONNECTION TYPE] Following is the size of the rest of the login response packet, including the login block that trails at the end, to tip the server how much data it should expect. Later comes the magic number byte 255, and right behind it the client revision short. The packet is just about crafted completely. A flag byte that represents if the client is running in low memory or high memory modes is sent, and after the 9 CRC32 checksums of the file system 0 basic archives (this includes versionlist, media, config, etc.). To top it off, the RSA encrypted login block is appended to the end and the packet is sent to the server.
The ISAAC ciphers are seeded for packet opcode masking after adding 50 to each int of the session keys, and the status code is reread. This finishes the login protocol.
Login Protocol Breakdown
The login is comprised of four stages in which the client and server switch in regards to which one is reading and which one is writing.
Variables
The login process has a lot of variable data, compiled here is a list of the variables and their different values.
Name Hash: A hash of the player name, thought to be used to select an appropriate login server. This has no use in current private servers.
Server Session Key: The server-session-key is one of two seeds used to encrypt the game protocol communications, using the ISAAC algorithm instances.
Data File Version: The CRC checks for the cache files.
User ID: A client-side randomly generated integer. This could be used in reassigning sessions to players that have lost connection. It is stored as a packed integer in a file named 'uid.dat' in the cache directory.
Username: The username of the player, used to identify their account.
Password: The password of the player account, used so only they can log into their account.
Client Session Key: The client-session-key is one of two seeds used to encrypt the game protocol communications, using the ISAAC algorithm instances.
Connect Status: The status of the connection (16 if new, 18 if reconnecting).
Size: The size of the unencrypted login packet, used to determine how many bytes need to be read from the stream by the server.
Client Version: The memory-version of the game client (0 if low-memory client, 1 if high-memory client).
CRC Values: Nine 4-byte values, Each containing the CRC of their respective cache files. Used by the server to verify client is up to date.
Player Status: The in-game player privilege status - regular (0), player moderator (1), or administrator (2).
Flagged: If set to 1, information about mouse movements etc. are sent to the server. Suspected bot accounts are flagged.
Response Codes:
At the beginning and end of the login procedure, we send different values to the client to allow or deny a login. The various values show different messages on the login box on the client or do something internally.
Value | Response |
---|---|
-1 | Waits for 2000ms and tries again while counting failures. |
0 | Exchanges session keys, player name, password, etc. |
1 | Waits for 2000ms and tries again. |
2 | Client made a successful login. |
3 | "Invalid username or password." |
4 | "Your account has been disabled. Please check your message-center for details." |
5 | "Your account is already logged in. Please try again in 60 secs..." |
6 | "RuneScape has been updated! Please reload this page." |
7 | "This world is full. Please use a different world." |
8 | "Unable to connect. Login server offline." |
9 | "Login limit exceeded. Too many connections from your address." |
10 | "Unable to connect. Bad session ID." |
11 | "Login server rejected session. Please try again." |
12 | "You need a members account to login to this world. Please subscribe, or use a different world." |
13 | "Could not complete login. Please try using a different world." |
14 | "The server is being updated. Please wait 1 minute and try again." |
15 | See the notes regarding login response code 15 below. |
16 | "Login attempts exceeded. Please wait 1 minute and try again." |
17 | "You are standing in a members-only area. To play on this world move to a free area first." |
20 | "Invalid loginserver requested. Please try using a different world." |
21 | "You have only just left another world. Your profile will be transferred in: (number) seconds." |
None of the above | "Unexpected server response. Please try using a different world." |
Regarding response code 15 On the server, players are not unregistered for quite some time. This can be best witnessed when the client forcefully closes the connection while in combat. If you're quick enough before the player dies or kills the NPC, login attempts during that time return that the account is already logged in. This probably explains why the message says "try again in 60 seconds", and they just reused the response when the player is truly logged in.
Going along with this "players aren't offline yet" idea, when the client experiences some lag and performs a reconnect, it sends byte 18 as it's Connect Status to the server.
The server most likely saves this as a boolean (reconnect = var == 18;). When the login is entirely validated, meaning the password's are okay and the server isn't full, it can either send back the normal response, 2, or 15.
But why 15? If you look at the client code, you'll see that the chat messages aren't cleared. If you've ever had a poor connection you've noticed that your chat stays there upon a reconnect, and this is exactly why. When you implement response code 15 though, you do NOT need to send the "player status" or the "flagged" bytes.
Login Process
Stage 1: Client -> Server
Data Type | Value |
---|---|
Unsigned Byte | 14 |
Unsigned Byte | "name hash" |
Stage 2: Server -> Client
Data Type | Value |
---|---|
Byte | 0 |
Byte | 0 |
Byte | 0 |
Byte | 0 |
Byte | 0 |
Byte | 0 |
Byte | 0 |
Byte | 0 |
Byte | "response code" |
Long | Server session key |
Stage 3: Client -> Server
Data Type | Value |
---|---|
Byte | Connect status |
Byte | Size |
Byte | 255 |
Short | 317 (Client version) |
Int | crc values [0] |
Int | crc values [1] |
Int | crc values [2] |
Int | crc values [3] |
Int | crc values [4] |
Int | crc values [5] |
Int | crc values [6] |
Int | crc values [7] |
Int | crc values [8] |
Byte | 10 |
Long | Client session key |
Long | Server session key |
Int | User id |
RS String | Username |
RS String | Password |
Stage 4: Server -> Client
Data Type | Value |
---|---|
Byte | Response code |
Byte | Player status |
Byte | Flagged |
Player Updating
The player updating process consists of 4 parts:
a. Our player movement updates
b. Other player movement updates
c. Player list updating
c.a. Apperance updating
c.b. Location updating
d. Player update block flag-based updates
Our player movement updates
The client begins by reading 1 bit. This bit tells the client whether or
not it is currently updating 'our player', or the player the client is
controlling.
If it's not updating our player, it exits and goes onto step b.
If it is, it then reads 2 bits. The value is called the movement update type.
There are 4 recognized movement update types:
- Type 0 basically tells the client there is nothing to update for our player, just add its index to the local updating list.
- Type 1 tells the client you moved in one direction. The client reads 3 bits, which represents the direction you moved in, and then 1 bit, which states whether further update is required. If so, it adds it to the updating list. This is used in walking.
- Type 2 functions in much of the same way as its previous, only this time it reads two 3 bit values. The first represents the player's last direction, and the second it's current direction. Trailing behind it is also the 1 bit 'update required' flag as type 1. This is used in running.
- Type 3 on the other hand is different. It reads in 2 bits which represents our player's plane, or its level of height, in the game world.
Only 0-3 inclusive are appropriate planes supported by the client. It then reads 1 bit, which describes whether or not to clear the awaiting-waypoint queue, basically to stop client from further queued stepping, such as used in teleporting. After this, it reads the 'update required' bit, and checks to see if further update is required. Directly after, it reads two 7 bit quantities, representing the new relative X and relative Y coordinates of our player to our current map region's origin. It then sets our players position to the plane, x, and y positions as told to.
Other player movement updates
The client begins by reading an 8 bit value telling the client how many players there are to update. It then enters a loop for each player there is to update.
Inside this loop, the client reads 1 bit. This is the movement update required flag. If the flag is 0, it sets the current updating player's last update cycle time to the current game logic loop cycle time, and adds the player to the local player list. If the flag is not 0, it then reads the movement update type, which is a 2 bit quantity.
The following known types are:
- 0, the client updates the current player's last update cycle time, adds the current player to the local player list, and adds it to the updating list.
- 1, the client updates the current player's last update cycle time and adds the current player to the local player list as well, but also reads in 3 bit quantity. This represents the current player's direction it walked to. It then reads the a 1 bit value that specifies whether or not to add the player to the updating list.
- 2, the client does the exact same thing as the type 2 update, except it reads in two of the 3 bit quantities. The first represents the current player's last direction, and the second its current direction running.
- 3, the client queues to remove the player from the list of players to be updated but it is possible such as in the instances for when players teleport to add them back to the list of players to be updated during the populate update.
Player list updating
The next step in the player updating procedure is the player list updating, or where the client recieves data on every player in its local list, such as appearance and location relative to ours. The client loops through a process for each player in the updating.
The client reads an 11 bit quantity from the buffer, which is the next player in the updated list to be informed about. The clietn then checks if it has a cached buffer for that player's updating, and if it does, it updates the player appearance.
Appearance updating
Appearance updating starts off by first reading an unsigned byte that represents the current player's gender. Then it reads another unsigned byte that represents the player's over-head icon id. This is used with prayer icons above heads. Next, a loop occurs 12 times to read equipment data.
In the loop, the client reads an unsigned byte that is the equipment slot's item id high byte. If it is 0, the player's equpment slot has no item. If it is not 0, another unsigned byte is read the merged with the previous to create the equipment's item id. If the id is 65535 (written as a -1 signed short), then the player's appearance is that of an NPC. The client reads in an unsigned short representing the NPC's id and sets the player's definition to that NPC's.
After the equipment loop, it loops 5 times, once for each type of coloured body part. In each loop, the client reads an unsigned short and assigns it as the color of the current loop idx (which represents the body part).
Finally, after the color loop, the client reads 7 unsigned shorts representing animation indices; the animations belong to:
- Standing still
- Turning while standing
- Walking
- Turning around (backwards)
- Turning a quarter-way clockwise
- Turning a quarter-way counter clockwise
- Running
After these animation indices are read, a long representing the player's
name is read, an unsigned byte representing the combat level, and an
unsigned short representing the players skill level (for things where
players arent ranked by levels, such as where it states
<player name> (skill <skill>)
as an action menu text).
Location updating
After the appearance updating, the client starts to update that player's location relative to our player. The player is added to the local player list and it's last update cycle time. It then reads a 1 bit quantity that defines whether or not the client has a chunk in the player update block list. If it does, it adds it to the updating list. The next bit states whether or not to discard the awaiting-waypoint queue, such as when teleporting. It then reads to 5 bit values that determine the players relative X and Y coordinates to our player. The local player area is 16x16, so if the delta of the two coordinates is > 15, 32 is subtracted from it to signify the player is on the other side of ours. The client then sets the player's position, ending the player list updating process.
Update block flag-based updating
The following is what most people think of when they say 'update mask' and 'update flag'. This process of the updating procedure is very important. It begins with looping through ALL players in the local player update list, reading an unsigned byte which from now on will be called the update flag. All further updates are seen to be 'included' by comparing a bitwise mask to this flag. If the flag has the bits for 0x40 all on, this signifies that the flag was too large for a simple unsigned byte and reads in another unsigned byte, which it uses as the upper unsigned byte, therefore the update flag is an unsigned little-endian short. The client then passes off the data to a helper method which processes all updates this flag signifies.
Inside this method, many different bitwise masks are compared to the player's flag, and if the mask is set, logic is performed. These masks are frequently called update masks. A list of player update masks are below:
-
0x400: The 0x400 mask is used to update the player so they appear to be asynchronously animating and walking. This mask is often used for the Agility skill. The data associated goes in order of: byte (type C) which is the first location's X coordinate value, byte (type S) which is the first location's Y coordinate value, byte (type S) which is the second location's X coordinate value, byte (type C) the second location's Y coordinate value. After the locations are written, there is a required movement speed which is written as a short which marks how fast to move from position 1 to position 2. Another short (type A) is written as the movement speed going from position 2 to position 1. Finally one byte is written to end the mask block, which marks the direction.
-
0x100: The 0x100 mask is responsible for player graphics updating. The data associated is a little-endian unsigned short which represents the graphics id, and an int which is the graphics delay.
-
0x8: Animations are handled by the 0x8 mask. The payload for this update is a little-endian unsigned short that is the animation id, and an unsigned inversed byte (Special C) which states the animation's delay.
-
0x4: The beloved 0x4 mask takes care of forced player text that is only displayed above the player's model. The only data associated with this is a jagex ASCII string with a terminator of 10.
-
0x80: Unlike the previous, the 0x80 mask handles normal player chat text. The client will read a little-endian unsigned short which holds chat text attributes. It holds the text color and chat effects. Next, the client reads an unsigned byte which states the player's priveleges (normal player, player moderator, moderator, staff) to give the chatter's name a crown. Right behind it trails an unsigned inversed byte that gives chat text length in bytes. Trailing afterwards is dictionary-compressed chat text. All chat text characters become indexes into a valid character table and are written as nibbles (4 bit quantities).
-
0x1: Updating the player's current interacting-entity is done via mask 0x1. The entity id is written as a little-endian unsigned short.
-
0x10: The 0x10 mask updates appearance of the player in exact same way as in updating player list. Only difference is that appearance is updated from a set-sized buffer filled from the current buffer. An unsigned inversed byte is read first which describes appearance buffer size, and the buffer is filled.
-
0x2: Facing coordinate updating is signified by the 0x2 mask. The player's facing-towards X and Y are set to read values; specifically, an unsigned lower-inverted short and little-endian unsigned short, respectively.
-
0x20: Notifying client's of a player's health is done via the 0x20 mask. The hitpoint damage done to the player is sent as an unsigned byte, followed by the hit type as a positive inverted byte. The player's current and max health are read as an unsigned inverted byte and unsigned byte, respectively.
-
0x200: The 0x200 mask acts in the same way as the 0x20 mask and is most likely associated with special attacks from weapons that have the ability to hit twice at the same time. Hitpoint damage is an unsigned byte, the hit type an unsigned inverted byte, and the current and maximum health being an unsigned byte and unsigned inverted byte, respectively.
After the client processes every single player in the update player list, it ends player updating.
Game Protocol
The game protocol is the in-game communication of player actions between the server and client.
Server -> Client Packets
Opcode | Type | Length (bytes) | Name | Description |
---|---|---|---|---|
1 | FIXED | 0 | Animation reset | Resets all animations in the immediate area. |
4 | FIXED | 6 | Draw graphic at position | Draw a graphic at a given x/y position after a delay. |
8 | FIXED | 4 | Set interface model | Draw a given model on a given interface. |
24 | FIXED | 1 | Flash sidebar | Causes a sidebar icon to start flashing. |
27 | FIXED | 0 | Input amount | Displays the "Input amount" interface. |
34 | VARIABLE_SHORT | N/A | Draw items on interface | Draw a collection of items on an interface. |
35 | FIXED | 4 | Camera shake | Causes the camera to shake. |
36 | FIXED | 3 | Force client setting | Forcefully changes a client's setting's value. Also changes the default value for that setting. |
44 | FIXED | 5 | Send ground item | Place an item stack on the ground. |
50 | FIXED | 9 | Send add friend | Sends a friend to the friend list. |
53 | VARIABLE_SHORT | N/A | Draw items on interface | Draw a collection of items on an interface. |
60 | VARIABLE_SHORT | N/A | Begin processing position related packets | Begin processing position related packets. |
61 | FIXED | 1 | Show multi-combat | Shows the player that they are in a multi-combat zone. |
64 | FIXED | 2 | Delete ground item | Delete ground item. |
65 | VARIABLE_SHORT | N/A | NPC updating | NPC updating |
68 | FIXED | 0 | Reset button state | Resets the button state for all buttons. |
70 | FIXED | 6 | Interface offset | Sets the offset for drawing of an interface. |
71 | FIXED | 3 | Send sidebar interface | Assigns an interface to one of the tabs in the game sidebar. |
72 | FIXED | 2 | Clear inventory | Clears an interface's inventory. |
73 | FIXED | 4 | Load map region | Loads a new map region. |
74 | FIXED | 4 | Play song | Starts playing a song. |
75 | FIXED | 4 | NPC head on interface | Place the head of an NPC on an interface |
78 | FIXED | 0 | Reset destination | Resets the players' destination. |
79 | FIXED | 4 | Scroll position | Sets the scrollbar position of an interface. |
81 | VARIABLE | N/A | Begin player updating | Begins the player update procedure |
84 | FIXED | 7 | Edit ground item amount | Edit ground item amount |
85 | FIXED | 2 | Set local player coordinates | Set local player coordinates |
87 | FIXED | 7 | Force client setting | Forcefully changes a client's setting's value. Also changes the default value for that setting. |
97 | FIXED | 2 | Show interface | Displays a normal interface. |
99 | FIXED | 1 | Minimap State | Sets the mini map's state. |
101 | FIXED | 3 | Object removal | Sends an object removal request to the client. |
104 | VARIABLE | N/A | Player Option | Adds a player option to the right click menu of player(s). |
105 | FIXED | 4 | Play sound in location | Play sound in location. |
106 | FIXED | 1 | Interface over tab | Draws an interface over the tab area. |
107 | FIXED | 0 | Reset camera | Resets the camera position. |
109 | FIXED | 0 | Logout | Disconnects the client from the server. |
110 | FIXED | 1 | Run energy | Sends the players run energy level. |
114 | FIXED | 2 | System update | Sends how many seconds until a 'System Update.' |
117 | N/A | N/A | Create Projectile | Creates a projectile. |
121 | FIXED | 4 | Song Queue | Queues a song to be played next. |
122 | FIXED | 4 | Interface color | Changes the color of an interface. |
126 | VARIABLE_SHORT | N/A | Set interface text | Attaches text to an interface. |
134 | FIXED | 6 | Skill level | Sends a skill level to the client. |
142 | FIXED | 2 | Show inventory interface | Show inventory interface |
147 | FIXED | 14 | Player to object transformation | Player to object transformation |
151 | FIXED | 5 | Object spawn | Sends an object spawn request to the client. |
156 | FIXED | 3 | Remove non-specified ground items??? | Remove non-specified ground items?????? |
160 | FIXED | 4 | Spawn an animated object??? | Shows an interface in the chat box?????? |
164 | FIXED | 2 | Chat interface | Shows an interface in the chat box. |
166 | FIXED | 6 | Spin camera | Spin camera |
171 | FIXED | 3 | Hidden Interface | Sets an interface to be hidden until hovered over. |
174 | FIXED | N/A | Audio | Sets what audio/sound is to play at a certain time. |
176 | FIXED | 10 | Open welcome screen | Displays the welcome screen. |
177 | FIXED | 6 | Set cutscene camera | Set cutscene camera |
185 | FIXED | 2 | Player head to interface | Sends the players head model to an interface |
187 | FIXED | 0 | Enter name | Displays the "Enter name" interface. |
196 | VARIABLE_BYTE | N/A | Send private message | Sends a private message to another player. |
200 | FIXED | 4 | Interface animation | Sets an interface's model animation. |
206 | FIXED | 3 | Chat settings | Sends the chat privacy settings. |
208 | FIXED | 2 | Walkable interface | Displays an interface in walkable mode. |
214 | VARIABLE_SHORT | N/A | Send add ignore | Sends a ignored player to the ignore list. |
215 | FIXED | 7 | Spawn ground item for all except specified player | Spawn ground item for all except specified player |
218 | FIXED | 2 | Open chatbox interface | Opens an interface over the chatbox. |
219 | FIXED | 0 | Clear screen | Clears the screen of all open interfaces. |
221 | FIXED | 1 | Friends list status | Friends list load status. |
230 | FIXED | 8 | Interface model rotation | Sets an interface's model rotation and zoom |
240 | FIXED | 2 | Weight | Sends the players weight amount. |
241 | VARIABLE_SHORT | N/A | Construct map region | Constructs a dynamic map region using a palette of 8*8 tiles. |
246 | FIXED | 6 | Interface item | Displays an item model inside an interface. |
248 | FIXED | 4 | Inventory overlay | Displays an interface over the sidebar area. |
249 | FIXED | 3 | Initialize player | Sends the player's membership status and their current index on the server's player list. |
253 | VARIABLE_BYTE | N/A | Send message | Sends a server message (e.g. 'Welcome to RuneScape') or trade/duel request. |
254 | VARIABLE_BYTE | N/A | Display hint icon | Displays a hint icon. |
Client -> Server Packets
Opcode | Type | Length (bytes) | Name | Description |
---|---|---|---|---|
0 | FIXED | 0 | Idle | Sent when there are no actions being performed by the player for this cycle. |
3 | FIXED | 1 | Focus change | Sent when the game client window goes out of focus. |
4 | VARIABLE BYTE | N/A | Chat | Sent when the player enters a chat message. |
14 | FIXED | 8 | Item on player | Sent when a player uses an item on another player. |
16 | FIXED | 1 | Alternate item option 2 | Sent when a player uses an item. This is an alternate item option. |
17 | FIXED | 2 | NPC action 2 | Sent when a player clicks the second option of an NPC. |
18 | FIXED | 2 | NPC action 4 | Sent when a player clicks the fourth option of an NPC. |
21 | FIXED | 2 | NPC action 3 | Sent when a player clicks the third option of an NPC. |
25 | FIXED | 10 | Item on floor | Sent when a player uses an item on another item thats on the floor. |
39 | FIXED | 2 | Trade answer | Sent when a player answers a trade request from another player. |
40 | FIXED | N/A | NpcDialogue | Sent when a player clicks the "Click here to continue" on any dialogue. |
41 | FIXED | 6 | Equip item | Sent when a player equips an item. |
43 | FIXED | 6 | Bank 10 items | Sent when a player banks 10 of a certain item. |
53 | FIXED | 4 | Item on item | Sent when a player uses an item with another item. |
70 | FIXED | 6 | Object action 3 | Sent when the player clicks the third action available for an object. |
72 | FIXED | 2 | Attack (NPC) | Sent when a player attacks an NPC. |
73 | FIXED | 2 | Trade request | Sent when a player requests a trade with another player. |
74 | FIXED | 8 | Remove ignore | Sent when a player removes a player from their ignore list. |
79 | FIXED | 6 | Light item | Sent when a player attempts to light logs on fire. |
86 | FIXED | 4 | Camera movement | Sent when the player moves the camera. |
87 | FIXED | 6 | Drop item | Sent when a player wants to drop an item onto the ground. |
95 | FIXED | 3 | Privacy options | Sent when a player changes their privacy options (i.e. public chat). |
98 | VARIABLE_BYTE | N/A | Walk on command | Sent when the player should walk somewhere according to a certain action performed, such as clicking an object. |
101 | FIXED | 13 | Design screen | Sent when a player is choosing their character design options. |
103 | VARIABLE_BYTE | N/A | Player command | Sent when the player enters a command in the chat box (e.g. "::command") |
117 | FIXED | 6 | Bank 5 items | Sent when a player banks 5 of a certain item. |
121 | FIXED | 0 | Loading finished | Sent when the client finishes loading a map region. |
122 | FIXED | 6 | Item action 1 | Sent when the player clicks the first option of an item, such as "Bury" for bones. |
126 | VARIABLE BYTE | N/A | Private message | Sent when a player sends a private message to another player. |
129 | FIXED | 6 | Bank all items | Sent when a player banks all of a certain item that they have in their inventory. |
130 | FIXED | 0 | Close window | Sent when a player presses the close, exit or cancel button on an interface. |
131 | FIXED | 4 | Mage NPC | Sent when a player uses magic attacks on an NPC. |
132 | FIXED | 6 | Object action 1 | Sent when the player clicks the first option of an object, such as "Cut" for trees. |
133 | FIXED | 8 | Add ignore | Sent when a player adds a player to their ignore list. |
135 | FIXED | 6 | Bank X items part-1 | Sent when a player requests to bank an X amount of items. |
139 | FIXED | 2 | Follow | Sent when a player clicks the follow option on another player. |
145 | FIXED | 6 | Unequip item | Sent when a player unequips an item. |
155 | FIXED | 2 | NPC action 1 | Sent when a player clicks first option of an NPC, such as "Talk." |
164 | VARIABLE_BYTE | N/A | Regular walk | Sent when the player walks regularly. |
185 | FIXED | 2 | Button click | Sent when a player clicks an in-game button. |
188 | FIXED | 8 | Add friend | Sent when a player adds a friend to their friend list. |
192 | FIXED | 12 | Item on object | Sent when a a player uses an item on an object. |
202 | FIXED | 0 | Idle logout | Sent when the player has become idle and should be logged out. |
208 | FIXED | 4 | Bank X items part-2 | Sent when a player enters an X amount of items they want to bank. |
210 | FIXED | 0 | Region change | Sent when a player enters a new map region. |
214 | FIXED | 7 | Move item | Sent when a player moves an item from one slot to another. |
215 | FIXED | 8 | Remove friend | Sent when a player removes a friend from their friend list. |
218 | FIXED | 8 | Report player | Sent when a player reports another player. |
236 | FIXED | 6 | Pickup ground item | Sent when the player picks up an item from the ground. |
237 | FIXED | 8 | Magic on items | Sent when a player casts magic on the items in their inventory. |
241 | FIXED | 4 | Mouse click | Sent when the player clicks somewhere on the game screen. |
248 | VARIABLE_BYTE | N/A | Map walk | Sent when the player walks using the map. Has 14 additional (assumed to be anticheat) bytes added to the end of it that are ignored. |
249 | FIXED | 4 | Magic on player | Sent when a player attempts to cast magic on another player. |
252 | FIXED | 6 | Object action 2 | Sent when the player clicks the second option available for an object. |
253 | FIXED | 6 | Ground Item Action | Sent when the player clicks the first option for a ground item (i.e. 'Light Logs') |
Add Friend
This packet is sent when a player adds a friend to their friends list.
Packet Details
Key | Value |
---|---|
Name | Add friend |
Description | Sent when a player adds a friend to their friends list. |
Opcode | 188 |
Type | Fixed |
Length | 8 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Long | The other players ID. |
Add Ignore
This packet is sent when a player adds another player to their ignore list.
Packet Details
Key | Value |
---|---|
Name | Add ignore |
Description | Sent when a player adds another player to their ignore list. |
Opcode | 133 |
Type | Fixed |
Length | 8 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Long | The other players ID. |
Alternate Item Option 2
This packet is sent when a player clicks the alternate second option of an item.
Packet Details
Key | Value |
---|---|
Name | Alternate Item Option 2 |
Description | Sent when the player clicks the alternate second option of an item. |
Opcode | 16 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short Special A | The ID of the item. |
Little Endian Short Special A | The slot the item is in. |
Little Endian Short Special A | The frame ID. |
Animation Reset
Resets all animations for players and npcs in the surrounding area.
Packet Details
Key | Value |
---|---|
Name | Animation reset |
Description | Resets all animations in the immediate area. |
Opcode | 1 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Description
This packet is sent when a player attacks an NPC.
Packet Details
Key | Value |
---|---|
Name | Attack (NPC) |
Description | Sent when a player attacks an NPC |
Opcode | 72 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Unsigned Short Special A | The NPC ID. |
Audio
Sets what audio/sound is to play at a certain moment.
Packet Details
Key | Value |
---|---|
Name | Audio |
Description | Sets what audio/sound is to play at a certain moment. |
Opcode | 147 |
Type | Fixed |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The sound id. |
Byte | The volume. |
Short | The delay. |
Bank 10 Items
This packet is sent when the player attempts to bank 10 of a certain item.
Note: This packet is also used for selling/buying 5 of an item from a shop.
Packet Details
Key | Value |
---|---|
Name | Bank 10 items |
Description | Sent when a player banks 10 of a certain item. |
Opcode | 43 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The frame ID. |
Short Special A | The item ID. |
Short Special A | The slot ID. |
Bank 5 Items
This packet is sent when a player attempts to bank 5 of a certain item.
Note: This packet is also used for buying/selling 1 of an item from a shop.
Packet Details
Key | Value |
---|---|
Name | Bank 5 items |
Description | Sent when a player attempts to bank 5 of a certain item. |
Opcode | 117 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | The frame ID. |
Little Endian Short Special A | The item ID. |
Little Endian Short | The slot ID. |
Bank 10 Items
This packet is sent when a player banks all of a certain item they have in their inventory.
Note: This packet is also used for selling/buying 10 items at a shop.
Packet Details
Key | Value |
---|---|
Name | Bank all items |
Description | Sent when a player banks all of a certain item they have in their inventory. |
Opcode | 129 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Unsigned Short Special A | The items slot ID. |
Unsigned Short | The interface ID. |
Unsigned Short Special A | The item ID. |
Bank X Items Part-1
This packet is sent when a player requests to bank an X amount of items.
Packet Details
Key | Value |
---|---|
Name | Bank x items part-1 |
Description | Sent when a player requests to bank an X amount of items. |
Opcode | 135 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The items slot. |
Unsigned Short Special A | The interface ID. |
Little Endian Short | The item ID. |
Bank X Items Part-2
This packet is sent when a player enters an X amount of items they want to bank.
Packet Details
Key | Value |
---|---|
Name | bank x items part-2 |
Description | Sent when a player enters an X amount of items they want to bank. |
Opcode | 208 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Int | The amount of the item you want to bank. |
Player Updating
This packet begins the player updating.
Button click
This is sent when a player clicks a button in-game, with the id of the button being clicked.
Packet Details
Key | Value |
---|---|
Name | Button click |
Description | Sent when a player clicks an in-game button. |
Opcode | 185 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The button id. |
Camera Movement
This packet is sent when a player moves their game camera.
Packet Details
Key | Value |
---|---|
Name | Camera movement |
Description | Sent when the player moves the camera. |
Opcode | 86 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The Y coordinate of the camera. |
Short Special A | The X coordinate of the camera. |
Camera oscillate
Begins camera oscillation, which is implemented using a configurable sinusoidal oscillator to offset a specific degree of freedom.
Packet Details
Key | Value |
---|---|
Name | Camera oscillate |
Description | Begin camera oscillation. |
Opcode | 35 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | Parameter (camera X, Z, Y, yaw, pitch) |
Byte | Jitter (for randomization) |
Byte | Amplitude |
Byte | Frequency (scaled by 100) |
Other Information
The oscillate event enables the client to oscillate one of 5 of it's position parameters. i.e. corresponding to the camera's degrees of freedom; parameters 0, 1, and 2 refer to the location of the camera, while 3 and 4 deal with the camera's orientation. Together, these enable complex effects involving manipulation of the camera position to give rise to simulated earth-quakes and camera shock.
Parameter | Description |
---|---|
0 | Camera location along world X axis (a horizontal axis, aligned with map grid X) |
1 | Camera location along world Z axis (vertical axis) |
2 | Camera location along world Y axis (a horizontal axis, aligned with map grid Y) |
3 | Camera orientation in world X plane w.r.t. world Z axis, i.e. yaw |
4 | Camera orientation in world Z plane w.r.t. world X axis, i.e. pitch |
Note there is no built-in way to manipulate camera roll, as this is not one of the camera's degrees of freedom.
What it's doing
Every time the world is rendered, each camera parameter that is enabled for oscillation is offset by a value computed as follows:
Calculation | Formula |
---|---|
Delta | (int) ((Math.random() * (double) (jitter * 2 + 1) - (double) jitter) + Math.sin((double) phase * ((double) frequency / 100D)) * (double) amplitude); |
Each parameter's phase accumulator (phase) is incremented by 1 each logic update.
Parameter
The offset itself is detailed as follows for each parameter:
Parameter | Action |
---|---|
0 | camera_x += delta |
1 | camera_z += delta |
2 | camera_y += delta |
3 | camera_yaw = camera_yaw + delta & 0x7ff; |
4 | camera_pitch += delta |
Note that the camera's yaw is corrected modulo 0x7ff, or 2048, which is equivalent to 2 \pi radians in Jagex's binary angle system. This is not done to the camera pitch, which is instead clamped (see below).
Note
For oscillating the camera pitch, clamping is done to ensure the angle not out of bounds:
if (camera_pitch < 128)
camera_pitch = 128
if (camera_pitch > 383)
camera_pitch = 383
This is due to Jagex restricting the possible range of orientations the camera may take.
Chat interface click
Received by the server when a button is pressed in a Chat interface.
Packet Details
Key | Value |
---|---|
Name | Chat interface click |
Description | Received when a button is pressed, in a chat interface. |
Opcode | 40 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | Frame ID. |
Chat Interface
This packet attaches an interface to the chat box.
Packet Details
Key | Value |
---|---|
Name | Chat interface |
Description | Shows an interface in the chat box. |
Opcode | 164 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The interface ID. |
Chat Settings
This packet sends the chat privacy settings.
Packet Details
Key | Value |
---|---|
Name | Chat settings |
Description | Sends the chat privacy settings |
Opcode | 206 |
Type | Fixed |
Length | 3 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | Public chat setting. |
Byte | Private chat setting. |
Byte | Trade setting. |
Clear inventory
Clears a given inventory, by setting all of its item ids to negative one and its item stacks to zero.
Packet Details
Key | Value |
---|---|
Name | Clear Inventory |
Description | Used to set all of the items and item stacks in an inventory to nothing. |
Opcode | 72 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The interface ID. |
Clear Screen
Removes all open interfaces from the players screen.
Packet Details
Key | Value |
---|---|
Name | Clear screen |
Description | Clears the screen of all open interfaces. |
Opcode | 219 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Close Window
This packet is sent when a player presses the close, exit or cancel button on an interface.
Packet Details
Key | Value |
---|---|
Name | Close window |
Description | Sent when a player presses the close, exit or cancel button on an interface. |
Opcode | 130 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Construct Map Region
The construct map region packet sends a dynamic map region that is constructed by using groups of 8x8 tiles. It is generally used for instanced areas, such as fight caves, and in later revisions, player owned houses.
Packet Details
Key | Value |
---|---|
Name | Construct map region |
Description | Constructs a new map region from a palette of 8x8 tiles. |
Opcode | 241 |
Type | Variable Short |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short Special A | The region Y coordinate (absolute Y coordinate / 8), plus 6. |
Bit block | See below. |
Short | The region X coordinate (absolute X coordinate / 8), plus 6. |
Bit block
The bit block contains the 'palette' of map regions to make up the new region.
A loop is used to construct it, as follows:
for (int z = 0; z < 4; z++) {
for(int x = 0; x < 13; x++) {
for(int y = 0; y < 13; y++) {
// data for this region
}
}
}
The individual format in each iteration of the loop is:
- 1 bit - set to 0 to indicate to display nothing, 1 to display a region
- 26 bits - if the flag above is set to 1:
region_x << 14 | region_y << 3
Create Projectile
Creates a projectile.
Packet Structure
Data Type | Description |
---|---|
Byte | Position offset |
Byte | Second X offset |
Byte | Second Y offset |
Short | Target |
Little Endian Short | Graphic ID |
Byte | Starting height |
Byte | Ending height |
Little Endian Short | Starting time |
Little Endian Short | Speed |
Byte | Initial slope |
Byte | Initial distance from source |
Design Screen
This packet is sent when a player is choosing their character design options.
Packet Details
Key | Value |
---|---|
Name | Design screen |
Description | Sent when a player is choosing their character design options. |
Opcode | 101 |
Type | Fixed |
Length | 13 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | The players gender. |
Byte | The players head model. |
Byte | The players beard model. |
Byte | The players torso model. |
Byte | The players arm model. |
Byte | The players hand model. |
Byte | The players leg model |
Byte | The players foot model. |
Byte | The players hair color. |
Byte | The players torso color. |
Byte | The players leg color. |
Byte | The players foot color. |
Byte | The players skin color. |
Display Hint Icon
Displays a hint icon.
Packet Details
Key | Value |
---|---|
Name | Display hint icon |
Description | Display a hint icon to the player. |
Opcode | 254 |
Type | Variable Byte |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | The Icon type |
Drop Item
This packet is sent when a player wants to drop an item onto the ground.
Packet Details
Key | Value |
---|---|
Name | Drop item |
Description | Sent when a player wants to drop an item onto the ground. |
Opcode | 87 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short Special A | The item ID. |
Short | The frame ID. |
Short Special A | The slot ID. |
Enter name
Sending the packet to the client will make the client open up the "Enter name" interface for things such as friend-adding.
Packet Details
Key | Value |
---|---|
Name | Enter name |
Description | Opens up the name entry interface. |
Opcode | 187 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Equip Item
This is sent when a player equips an item in-game.
Packet Details
Key | Value |
---|---|
Name | Equip item |
Description | Sent when a player equips an item. |
Opcode | 41 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Unsigned Short | The ID of the item. |
Unsigned Short Special A | The slot of the item. |
Unsigned Short Special A | The ID of the interface. |
Flash sidebar
This packet causes a sidebar icon to start flashing.
Packet Details
Key | Value |
---|---|
Name | Flash sidebar |
Description | Causes a sidebar icon to start flashing. |
Opcode | 24 |
Type | Fixed |
Length | 1 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte Special S | The sidebar ID. |
Values
Sidebar ID | Icon |
---|---|
0 | Attack type |
-1 | Stats |
-2 | Quests |
-3 | Inventory |
-4 | Wearing |
-5 | Prayer |
-6 | Magic |
-7 | EMPTY |
-8 | Friends list |
-9 | Ignore list |
-10 | Log out |
-11 | Settings |
-12 | Emotes |
-13 | Music |
Focus Change
This packet is sent when the game client window goes in and out of focus. The payload consists of one byte that is either 1 or 0; 1 if the client is in focus and 0 if not.
Packet Details
Key | Value |
---|---|
Name | Focus change |
Description | Sent when the game client window goes in and out of focus. |
Opcode | 3 |
Type | Fixed |
Length | 1 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | Whether or not the client is in focus. |
Follow
This packet is sent when a player clicks the follow option on another player.
Packet Details
Key | Value |
---|---|
Name | Follow |
Description | Sent when a player clicks the follow option on another player |
Opcode | 39 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Unsigned Little Endian Short | The other players ID. |
Force Client Setting
The client stores various user settings in an array, the default values are also stored in another array. This packet changes the default value for a setting and its current value to the one given.
Packet Details
Key | Value |
---|---|
Name | Force client setting |
Description | Forcefully alters a client setting value and default value to some supplied value. |
Opcode | 36 |
Type | Fixed |
Length | 3 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short Little Endian | Setting ID number. |
Byte | New value (and default value) for the setting. |
Other Information
Opcode 87 (length 6) is extremely similar in structure, but the new value is received as an Middle Endian Small Int. This suggests its for use with bigger setting values.
Friends List Status
This packet sends the first list load status.
Packet Details
Key | Value |
---|---|
Name | Friends list status |
Description | Sends the friends list load status |
Opcode | 221 |
Type | Fixed |
Length | 1 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | The status of the friends list. |
Ground Item Action
This packet is sent when a player clicks the first option on a ground item.
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The items X coordinate. |
Additional Little Endian Short | The items Y coordinate. |
Additional Short | The item ID. |
Sets an interface to be hidden until hovered over.
Packet Details
Key | Value |
---|---|
Name | Hidden interface |
Description | Sets an interface to be hidden until hovered over. |
Opcode | 171 |
Type | Fixed |
Length | 3 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | Hidden until hovered |
Short | Interface Id |
Idle logout
This is sent when the player becomes idle and should be logged out. This is sent after the player is idle for 60 seconds, after that it is sent every 10 seconds as long as the player is idle.
Packet Details
Key | Value |
---|---|
Name | Idle logout |
Description | Sent when the player has become idle and should be logged out. |
Opcode | 202 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Idle
Sent when the player is idle for the current cycle, and acts as a "ping" packet.
Packet Details
Key | Value |
---|---|
Name | Idle |
Description | Idle packet.. |
Opcode | 0 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Initialize Player
Sends the player membership flag and player list index.
Packet Details
Key | Value |
---|---|
Name | Initialize player |
Description | Sends the player's membership status and their current index on the server's player list. |
Opcode | 249 |
Type | Fixed |
Length | 3 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte Special A | Membership flag (1 = member, 0 = free). |
Little Endian Short Special A | Player list index. |
Input amount
Sending the packet to the client will make the client open up the "Input amount" interface over the chatbox for things such as Buy X and Bank X.
Packet Details
Key | Value |
---|---|
Name | Input amount |
Description | Opens up the amount input interface. |
Opcode | 27 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Interface animation
Sets an interface's model animation.
Packet Details
Key | Value |
---|---|
Name | Interface animation |
Description | Sets an interface's model animation |
Opcode | 200 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The interface ID |
Short | The animation ID |
Interface Color
This packet changes the color of an interface that is text.
Packet Details
Key | Value |
---|---|
Name | Interface color |
Description | This packet changes the color of an interface that is text. |
Opcode | 122 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | The interface ID. |
Little Endian Short Special A | The color. |
Information
You use this packet to change the color of text in an interface.
Color | Code |
---|---|
Green | 0x3366 |
Yellow | 0x33FF66 |
Red | 0x6000 |
Interface Item
Displays an item model inside an interface.
Packet Details
Key | Value |
---|---|
Name | Interface item |
Description | Displays an item model inside an interface. |
Opcode | 246 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | Interface ID. |
Short | The item's model zoom. |
Short | The item ID. |
Interface Color
Changes the zoom and rotation of the interface id's media given.
Packet Details
Key | Value |
---|---|
Name | Interface model rotation |
Description | Changes the zoom and rotation of the interface id's media given. |
Opcode | 230 |
Type | Fixed |
Length | 8 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short Special A | The zoom. |
Short | The interface id. |
Short | The rotation1. |
Little Endian Short Special A | The rotation2. |
Interface offset
Sets the offset for drawing of an interface.
Packet Details
Key | Value |
---|---|
Name | Interface offset |
Description | Sets the offset for drawing of an interface |
Opcode | 70 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The X offset |
Little Endian Short | The Y offset |
Little Endian Short | The interface ID |
Open Welcome Screen
This packet draws an interface over the tab area.
Packet Details
Key | Value |
---|---|
Name | Interface over tab |
Description | Draws an interface over the tab area. |
Opcode | 106 |
Type | Fixed |
Length | 1 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte Special C | Interface ID |
Child Frame
This packet overlays an interface in the inventory area. This is used in trading and staking.
Packet Details
Key | Value |
---|---|
Name | Inventory Overlay |
Description | Overlays an interface on the inventory |
Opcode | 248 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short Special A | The interface to open. |
Short | The interface to overlay the inventory area. |
Example
sendFrame248(3323, 3321);
That will set the open interface to interface 3323, which is the trade interface. With the inventory overlay interface as 3321, which is an inventory type interface with offer actions.
Item Action 1
This packet is sent when a player clicks the first option of an item, such as "Bury" for bones or "Eat" for food.
Packet Details
Key | Value |
---|---|
Name | Item action 1 |
Description | Sent when the player clicks the first option of an item. |
Opcode | 122 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | The frame ID. |
Short Special A | The slot the item is in. |
Little Endian Short | The ID of the item. |
Description
This packet is sent when a player uses an item on another item thats on the floor.
Packet Details
Key | Value |
---|---|
Name | Item on floor |
Description | Sent when a player uses an item on another item thats on the floor. |
Opcode | 25 |
Type | Fixed |
Length | 10 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The interface ID. |
Unsigned Short Special A | The item being used ID. |
Short | The floor items ID. |
Unsigned Short Special A | The Y coordinate of the item. |
Unsigned Little Endian Short Special A | The items slot ID. |
Short | The X coordinate of the item. |
Item on Item
This packet is sent when a player uses an item on another item.
Packet Details
Key | Value |
---|---|
Name | Item on item |
Description | Sent when a player uses an item on another item. |
Opcode | 53 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The item being used on's slot. |
Short Special A | The item being used's slot. |
Item on Object
This packet is sent when a player uses an item on object.
Packet Details
Key | Value |
---|---|
Name | Item on object |
Description | Sent when a player uses an item on an objet. |
Opcode | 192 |
Type | Fixed |
Length | 12 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short Special A | The frame ID. |
Little Endian Short | The object ID. |
Big Endian Short Special A | The objects Y coordinate. |
Big Endian Short | The items slot ID. |
Big Endian Short Special A | The objects X coordinate. |
Short | The item ID. |
Item on Player
This packet is sent when a player uses an item on another player.
Packet Details
Key | Value |
---|---|
Name | Item on player |
Description | Sent when a player uses an item on another player. |
Opcode | 14 |
Type | Fixed |
Length | 8 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short Special A | The frame ID. |
Short | The other players ID. |
Short | The item ID. |
Little Endian Short | The items slot ID. |
Light Item
This packet is sent when a player attempts to light logs on fire.
Packet Details
Key | Value |
---|---|
Name | Light item |
Description | Sent when a player attempts to light logs on fire. |
Opcode | 79 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The items Y coordinate. |
Unsigned Short | The item ID. |
Little Endian Short | The items X coordinate. |
Loading Finished
This packet is sent when a player is finished loading a new map region.
Packet Details
Key | Value |
---|---|
Name | Loading finished |
Description | Sent when the player is finished loading a map region |
Opcode | 121 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Load Map Region
Makes the client load the specified map region.
Packet Details
Key | Value |
---|---|
Name | Load map region |
Description | Makes the client load the specified map region. |
Opcode | 73 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short Special A | Region X coordinate (absolute X / 8) plus 6. |
Short | Region Y coordinate (absolute Y / 8) plus 6. |
Other Information
There are various loops/arrays within the map region loading functionality of the client which have been misunderstood by many.
Loop type | Description |
---|---|
104 x 104 | Maximum size of the client's load area |
8 x 8 | Load blocks to speed up loading NPCs, Items and Objects |
13 x 13 | Number of load blocks to load |
Logout
Forces the client to logout cleanly and return to the login screen, without attempting a reconnection.
Packet Details
Key | Value |
---|---|
Name | Logout |
Description | Forces the client to logout. |
Opcode | 109 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Mage NPC
Sent when a player attempts to use a magic attack on an NPC.
Packet Details
Key | Value |
---|---|
Name | Mage NPC |
Description | Sent when a player attempts to use a magic attack on an NPC. |
Opcode | 131 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | ? |
Little Endian Special A | ? |
Magic on Items
This packet is sent when a player casts magic (i.e. High Level Alchemy) on the items in their inventory.
Packet Details
Key | Value |
---|---|
Name | Magic on items |
Description | Sent when a player casts magic on the items in their inventory. |
Opcode | 237 |
Type | Fixed |
Length | 8 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The items slot ID. |
Short Special A | The item ID. |
Short | The frame ID. |
Short Special A | The spell ID. |
Magic on Player
This packet is sent when the player attempts to cast magic onto another.
Packet Details
Key | Value |
---|---|
Name | Magic on player |
Description | This packet is send when a player attempts to cast magic on another |
Opcode | 249 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short Special A | The player index. |
Short Little Endian | The spell ID. |
Minimap State
This packet sets the Minimaps state, possible values are shown below.
Packet Details
Key | Value |
---|---|
Name | Minimap State |
Description | Sets the state of the clients minimap. |
Opcode | 99 |
Type | Fixed |
Length | 1 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | The state. |
Values
State | Description |
---|---|
0 | Active: Clickable and viewable |
1 | Locked: viewable but not clickable |
2 | Blacked-out: Minimap is replaced with black background |
Mouse click
This packet is sent when a player clicks somewhere on the game screen.
Move Item
This packet is sent when a player moves an item from one slot to another.
Packet Details
Key | Value |
---|---|
Name | Move item |
Description | Sent when the player moves an item from one slot to another. |
Opcode | 214 |
Type | Fixed |
Length | 7 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | The frame ID. |
Byte | Insert mode. |
Little Endian Short Special A | Starting slot. |
Little Endian Short | New slot. |
Audio
Sets what audio to play at a certain moment.
Packet Details
Key | Value |
---|---|
Name | Audio |
Description | Sets the audio to play. |
Opcode | 174 |
Type | Fixed |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The sound id. |
Byte | The volume. |
Short | The delay. |
NPC Action 1
This packet is sent when a player clicks the first option of an NPC.
Packet Details
Key | Value |
---|---|
Name | NPC action 1 |
Description | Sent when a player clicks the first option of an NPC. |
Opcode | 155 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The NPC index. |
NPC Action 2
This packet is sent when a player clicks the second action of an NPC.
Packet Details
Key | Value |
---|---|
Name | NPC action 2 |
Description | Sent when a player clicks the second action of an NPC. |
Opcode | 17 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | The NPC index. |
NPC Action 3
This packet is sent when a player clicks the third option of an NPC.
Packet Details
Key | Value |
---|---|
Name | NPC action 3 |
Description | Sent when a player clicks the third option of an NPC. |
Opcode | 21 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Unsigned Little Endian Short Special A | The NPC index. |
NPC Dialogue
This packet is what handles when the player hits the "Click here to continue".
NPC head on interface
Places the head of an NPC on an interface
Packet Details
Key | Value |
---|---|
Name | NPC head on interface |
Description | Places the head of an NPC on an interface |
Opcode | 75 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | The NPC ID |
Little Endian Short Special A | The 'slot' ID for where you wish to place the head |
Object Action 1
This packet is sent when a player clicks the first option of an object, such as "Cut" for trees or "Mine" for rocks.
Packet Details
Key | Value |
---|---|
Name | Object action 1 |
Description | Sent when the player clicks the first option of an object. |
Opcode | 132 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | The objects X coordinate. |
Short | The objects ID. |
Short Special A | The objects Y coordinate. |
Object action 2
This packet is sent when a player clicks the second option available of an object, such as "Prospect" for rocks.
Packet Details
Key | Value |
---|---|
Name | Object action 2 |
Description | Sent when the player clicks the second option available for an an object. |
Opcode | 252 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | The objects ID. |
Little Endian Short | The objects Y coordinate. |
Short Special A | The objects X coordinate. |
Object Action 3
This packet is sent when a player clicks the third action available for an object.
Packet Details
Key | Value |
---|---|
Name | Object action 3 |
Description | Sent when a player clicks the third action available for an object. |
Opcode | 70 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The X coordinate of the object. |
Short | The Y coordinate of the object. |
Big Endian Short Special A | The object ID. |
Object removal
This packet requests the client to remove an object.
Packet Structure
Data Type | Description |
---|---|
Unsigned Byte | object_type << 2 + object_rotation & 3 |
Byte | 0 |
Object spawn
This packet requests the client to spawn an object.
Packet Structure
Data Type | Description |
---|---|
Subtrahend Byte | 0 |
Little Endian Byte | Object ID |
Subtrahend Byte | object_type << 2 + object_rotation & 3 |
Open chatbox interface
Sending this packet to the client will cause the client to open an interface over the chatbox.
Packet Details
Key | Value |
---|---|
Name | Open chatbox interface |
Description | Displays an interface over the chatbox. |
Opcode | 218 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | Interface ID. |
Open Welcome Screen
This packet displays the welcome screen.
Packet Details
Key | Value |
---|---|
Name | Open welcome screen |
Description | Displays the welcome screen. |
Opcode | 176 |
Type | Fixed |
Length | 10 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte Special C | Days since last recovery change (200 for not yet set, 201 for members server). |
Short Special A | Number of unread messages. |
Byte | Member warning (1 for member, 0 for non-member). |
Middle-Endian Big Integer | Last logged IP. |
Short | Last logged successful log-in. |
Pickup Ground Item
This packet is sent when a player clicks the "Pick Up" option on an item when its on the ground.
Packet Details
Key | Value |
---|---|
Name | Pickup ground item |
Description | Sent when the player picks up an item from the ground. |
Opcode | 236 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The Y coordinate of the item. |
Short | The item ID. |
Little Endian Short | The X coordinate of the item. |
Player Command
This packet is sent when a player types a message with the prefix '::', the message is then sent to the server and an appropriate action is taken (e.g. spawning an item).
Packet Details
Key | Value |
---|---|
Name | Player command |
Description | Sent when a player types a command in the chat box. |
Opcode | 103 |
Type | Variable Byte |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
RS String | The command name and parameters. |
Send player head model to an interface
This packet sends a players head to an interface
Packet Details
Key | Value |
---|---|
Name | Send head model to interface. |
Description | Sends the player head model to an interface. |
Opcode | 185 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | The interface ID. |
Player Option
Adds an option to a player's right click context menu.
Packet Details
Key | Value |
---|---|
Name | Player Option |
Description | Adds an option to a player's right click context menu. |
Opcode | 104 |
Type | Variable |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte Special C | The option position. |
Byte Special A | Flag |
String | Action text. |
Play song
Sending this packet to the client will cause the client to start playing a song.
Packet Details
Key | Value |
---|---|
Name | Play song |
Description | Starts playing a song. |
Opcode | 74 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The song ID. |
Privacy Options
This packet is sent when a player changes their privacy options (i.e. public chat).
Packet Details
Key | Value |
---|---|
Name | Privacy options |
Description | Sent when a player changes their privacy options. |
Opcode | 95 |
Type | Fixed |
Length | 3 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Unsigned Byte | The public chat options. |
Unsigned Byte | The private chat options. |
Unsigned Byte | The trade/compete options. |
Region Change
This packet is sent when a player enters a new map region.
Packet Details
Key | Value |
---|---|
Name | Region change |
Description | Sent when a player enters a new map region. |
Opcode | 210 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Remove Friend
This packet is sent when a player removes a friend from their friends list.
Packet Details
Key | Value |
---|---|
Name | Remove friend |
Description | Sent when a player removes a friend from their friend list. |
Opcode | 215 |
Type | Fixed |
Length | 8 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Long | The other players ID. |
Remove Ignore
This packet is sent when a player removes another player from their ignore list.
Packet Details
Key | Value |
---|---|
Name | Remove ignore |
Description | Sent when a player removes another player from their ignore list. |
Opcode | 74 |
Type | Fixed |
Length | 8 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Long | The other players ID. |
Report Player
This packet is sent when a player reports another player.
Packet Details
Key | Value |
---|---|
Name | Report player |
Description | Sent when a player reports another player. |
Opcode | 218 |
Type | Fixed |
Length | 8 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Long | The players name as a long. |
Byte | The rule that's being reported |
Byte | Mute for 48 hours - Sent as either 1 or 0 for a boolean client-side |
Reset setting states
This packet resets the states for all user settings (inc. buttons).
Packet Details
Key | Value |
---|---|
Name | Reset setting states |
Description | Resets the states for all settings. |
Opcode | 68 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Reset Camera
Resets the game's camera position to the client default.
Packet Details
Key | Value |
---|---|
Name | Reset camera |
Description | Resets the camera position. |
Opcode | 107 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Reset destination
Sending the packet to the client will make the client reset the player's destination and effectively stop them from walking.
Packet Details
Key | Value |
---|---|
Name | Reset destination |
Description | Resets the player's destination. |
Opcode | 78 |
Type | Fixed |
Length | 0 |
Revision | 317 |
Run Energy
Sends how much run energy the player currently has.
Packet Details
Key | Value |
---|---|
Name | Run energy |
Description | Sends the players run energy level. |
Opcode | 110 |
Type | Fixed |
Length | 1 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | The energy level. |
Scroll Position
This packet sets the scrollbar position of an interface.
Packet Details
Key | Value |
---|---|
Name | Scroll position |
Description | Sets the scrollbar position of an interface. |
Opcode | 79 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The interface ID. |
Short Special A | The position of the scrollbar. |
Send Add Friend
Sends friend data to the client
Attempts to update player node, if player isn't in the friends list and there is space, the player is added to the friend list.
Packet Structure
Data type | Description |
---|---|
Long | Player name |
Byte | The world (10 = "online" in world 1, 0 = logged out) |
Send ignored users
Sends the IDs of all the users that this player has in their ignore.
Note: By looking at the rest of the 317 protocol, there doesn't seem to be a way to change the list dynamically. It seems as though that whenever the player decides to add or remove a player from their list, it must send all the values again.
Packet Details
Key | Value |
---|---|
Name | Send ignored users |
Description | Sends a list of all the ignored player IDs |
Opcode | 214 |
Type | VARIABLE_SHORT |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Long block (see blow) | Player name |
Long block
This packet has a slightly different structure than the other packets.
int entries = packetSize / 8;
for (int i = 0; i < entries; i++) {
ignoreList[i] = stream.readLong();
}
Send Message
Sends a server side message (e.g. 'Welcome to RuneScape'), or a trade/duel/challenge request.
The format for sending such requests is: [player name][request type]
.
Where [request type]
is one of :duelreq:
, :chalreq:
, or :tradereq:
.
Example: Trading a player called 'mopar': mopar:tradereq:
.
Packet Details
Key | Value |
---|---|
Name | Send message |
Description | Sends a server message, trade or duel request to the client's chat panel. |
Opcode | 253 |
Type | Variable Byte |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
RS String | The message. |
Send Private Message
Sending a private message to another user on the server.
Packet Details
Key | Value |
---|---|
Name | Sending private message |
Description | Send Message Sends Message to another user. |
Opcode | 196 |
Type | VARIABLE_SHORT |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Long | Player name. |
Int | Global message counter. |
Byte | Player rights. |
Send Sidebar Interface
This packet assigns an interface to one of the tabs in the game sidebar.
Packet Details
Key | Value |
---|---|
Name | Send sidebar interface |
Description | Assigns an interface to on of the tabs in the game sidebar. |
Opcode | 71 |
Type | Fixed |
Length | 3 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The sidebar ID. |
Byte Special A | The interface ID. |
Values
The below are the different values for this packet.
Value | Icon | Norm. ID |
---|---|---|
0 | Attack type | 2433 |
1 | Stats | 3917 |
2 | Quests | 638 |
3 | Inventory | 3213 |
4 | Wearing | 1644 |
5 | Prayer | 5608 |
6 | Magic | 1151 |
7 | EMPTY | N/A |
8 | Friends list | 5065 |
9 | Ignore list | 5715 |
10 | Log out | 2449 |
11 | Settings | 4445 |
12 | Emotes | 147 |
13 | Music | 6299 |
Send Skill
This packet sends a specific skill.
Packet Details
Key | Value |
---|---|
Name | Send Skill |
Description | Sends a specific skill |
Opcode | 154 |
Type | Fixed |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | The skill you want to send. |
Int | The experience of that skill. |
Byte | The level of that skill. |
Set Interface Text
Sets the text for the specific interface.
Packet Details
Key | Value |
---|---|
Name | Set interface text |
Description | Sets the text for a specified interface |
Opcode | 126 |
Type | VARIABLE_SHORT |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
RS String | The new text for the interface |
Short Special A | The interface id |
Information
I do not recommend you use this to change the text color. I refer you to Interface Color packet for the proper way to do so.
Show Interface
Displays a normal non-walkable interface.
Packet Details
Key | Value |
---|---|
Name | Show interface |
Description | Displays a normal interface. |
Opcode | 97 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The interface id. |
Show multi-combat
Sending this packet to the client will make the client show the player if they are in a multi-combat zone.
States:
ID | Name |
---|---|
0 | Not in a multi-combat zone (i.e. no crossbones in bottom-right). |
1 | In a multi-combat zone (i.e. crossbones in bottom-right). |
Packet Details
Key | Value |
---|---|
Name | Show multi-combat |
Description | Shows the player if they are in a multi-combat zone. |
Opcode | 61 |
Type | Fixed |
Length | 1 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | The state. |
Show Tab
Shows the given tab id.
Packet Details
Key | Value |
---|---|
Name | Show Tab |
Description | Shows the given tab. |
Opcode | 106 |
Type | Fixed |
Length | 1 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
U Byte Special C | Tab ID. |
Skill Level
This packet changes the experience and level of a given skill id.
Packet Details
Key | Value |
---|---|
Name | Skill level |
Description | Changes the experience and level of a given skill id. |
Opcode | 134 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Byte | The skill ID. |
Middle-Endian Small Integer | The skill experience. |
Byte | The skill level. |
Song Queue
This packet queue's a song to be played next. The client then proceeds to request the queued song using the on-demand protocol.
Packet Details
Key | Value |
---|---|
Name | Song Queue |
Description | Queues a song to be played next. |
Opcode | 121 |
Type | Fixed |
Length | 4 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short Special A | Song ID |
Little Endian Special A | Previous Song ID |
System Update
A timer showing how many seconds until a 'System Update' will appear in the lower left hand corner of the game screen. After the timer reaches 0 all players are disconnected and are unable to log in again until server is restarted. Players connecting will receive a message stating, "The server is being updated. Please wait 1 minute and try again." (unless stated otherwise).
Packet Details
Key | Value |
---|---|
Name | System update |
Description | Sends how many seconds until a 'System Update.' |
Opcode | 114 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | Time until an update. |
Trade Answer
This packet is sent when a player answers a trade request from another player.
Packet Details
Key | Value |
---|---|
Name | Trade answer |
Description | Sent when a player answers a trade request from another player. |
Opcode | 139 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The player requesting the trade's ID. |
Trade Request
This packet is sent when a player requests a trade with another player.
Packet Details
Key | Value |
---|---|
Name | Trade request |
Description | Sent when a player requests a trade with another player. |
Opcode | 73 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | The other players ID. |
Unequip Item
This packet is sent when a player unequips an item.
Packet Details
Key | Value |
---|---|
Name | Unequip item |
Description | Sent when a player unequips an item. |
Opcode | 145 |
Type | Fixed |
Length | 6 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Unsigned Short Special A | The interface ID. |
Unsigned Short Special A | The items slot ID. |
Unsigned Short Special A | The item ID. |
Update item container
Updates the items in a given interface component.
Packet Details
Key | Value |
---|---|
Name | Update item container |
Description | Updates items in an interface component. |
Opcode | 53 |
Type | VARIABLE_SHORT |
Length | N/A |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Unsigned Short | Interface ID. |
Unsigned Short | Amount of items. |
The rest in pseudo-code:
for (i = 0; i < amt_of_items; i++) {
item_amount = read_u_byte(); // Item Amount: U Byte
if (item_amount == 255)
item_amount = read_int_me_b(); // Item Amount (if entered as 255 previously - to allow bigger amounts than 254): Middle-Endian Big Integer
item_id = read_u_short_le_a(); // Item ID: U Short Little Endian Special A
}
Walkable Interface
This packet displays an interface in walkable mode.
Packet Details
Key | Value |
---|---|
Name | Walkable interface |
Description | Displays an interface in walkable mode. |
Opcode | 208 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Little Endian Short | Interface ID. |
Weight
Sends how much weight of equipment the player is wearing (e.g. Rune plate-body is 9.04kg).
Packet Details
Key | Value |
---|---|
Name | Weight |
Description | Sends the players weight amount. |
Opcode | 240 |
Type | Fixed |
Length | 2 |
Revision | 317 |
Packet Structure
Data Type | Description |
---|---|
Short | The amount of weight. |
[[Category RS2]] == '''Login Protocol''' ==
The Login protocol is identical to the [[317 Protocol#Login Protocol Overview|317 Login protocol]].
== Game Protocol ==
=== Server -> Client Packets === {| border=2 |- ! Opcode ! Type ! Length (bytes) ! Name ! Description |- ! 31 ! VARIABLE_BYTE ! N/A ! [[357 Send Message|Send Message]] ! Sends a message to the client, such as 'Welcome to RuneScape'. |- ! 96 ! VARIBLE_BYTE ! N/A ! [[357 Send Inventory|Send Inventory]] ! Sends the players inventory to the client. |- ! 121 ! FIXED ! 4 ! [[357 Load Map Region|Load Map Region]] ! Tells the client to load a map region depending on the region's X and Y coordinates. |- ! 163 ! FIXED ! 3 ! [[357 Send Sidebar Interface|Send Sidebar Interface]] ! Assigns an interface to one of the tabs in the game sidebar. |-}
[[Category Packet]] [[Category Packet 377]] [[Category RS2]]
== '''Login Protocol''' ==
The Login protocol is identical to the [[317 Protocol#Login Protocol Overview|317 Login protocol]].
==Game Protocol== The game protocol is the in-game communication of
player actions between the server and client.
===Server -> Client Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- ! 2 ! FIXED ! 4 ! [[377 Interface Animation|Interface Animation]] ! Sets an interface's model animation. |- ! 3 ! FIXED ! 6 ! [[377 Move Camera|Camera Move]] ! Moves the camera. |- ! 5 ! FIXED ! 0 ! [[377 Logout|Logout]] ! Disconnects the client from the server. |- ! 10 ! FIXED ! 3 ! [[377 Send Sidebar Interface|Send Sidebar Interface]] ! Assigns an interface to one of the tabs in the game sidebar. |- ! 13 ! FIXED ! 0 ! [[377 Animation Reset|Animation Reset]] ! Resets all entity animations in the immediate area. |- ! 18 ! FIXED ! 6 ! [[377 Interface Model Rotation|Interface Model Rotation]] ! Sets the rotation speed of an item in an interface. |- ! 21 ! FIXED ! 6 ! [[377 Interface Item|Interface Item]] ! Displays an item model inside an interface. |- ! 26 ! FIXED ! 5 ! [[377 Send Sound|Send Sound]] ! Sends a sound to be played. |- ! 29 ! FIXED ! 0 ! [[377 Reset Open Interfaces|Reset Open Interfaces]] ! Resets all opened interfaces. |- ! 40 ! FIXED ! 2 ! [[377 Reset Ground Items and Objects|Reset Ground Items and Objects]] ! Resets all ground items and objects in a 8x8 region. |- |- ! 41 ! FIXED ! 4 ! [[377 Play Ambient Wave|Play Ambient Wave]] ! Plays an ambient wave. |- ! 49 ! FIXED ! 6 ! [[377 Skill Level|Skill Level]] ! Sends a skill level to the client. |- ! 50 ! FIXED ! 2 ! [[377 Walkable Interface|Walkable Interface]] ! Displays an interface in walkable mode. |- ! 53 ! VARIABLE_SHORT ! N/A ! [[377 Construct Map Region|Construct Map Region]] ! Constructs a map region given the region's x and y coordinate. |- ! 58 ! FIXED ! 0 ! [[377 Input Amount|Input Amount]] ! Displays the "Input amount" interface. |- ! 59 ! FIXED ! 6 ! [[377 Create Static Graphic|Create Static Graphic]] ! Creates a static graphic. |- ! 61 ! FIXED ! 0 ! [[377 Clear Waypoint|Clear Waypoint]] ! Resets the waypoint. |- ! 63 ! VARIABLE_BYTE ! N/A ! [[377 Send Message|Send Message]] ! Sends a server message (e.g. 'Welcome to RuneScape') or trade/duel request. |- ! 67 ! FIXED ! 4 ! [[377 Camera Shake|Camera Shake]] ! Causes the camera to shake. |- ! 71 ! VARIABLE_SHORT ! N/A ! [[377 Update Npcs|Update Npcs]] ! Updates NPCs. |- ! 75 ! FIXED ! 2 ! [[377 Send Position|Send Position]] ! Sends a position (used for packets such as Ground Items and Projectiles) |- ! 76 ! FIXED ! 23 ! [[377 Open Welcome Screen|Open Welcome Screen]] ! Displays the welcome screen. |- ! 78 ! FIXED ! 9 ! [[377 Send Add Friend|Send Add Friend]] ! Sends a friend to be added to the friend list. |- ! 82 ! FIXED ! 3 ! [[377 Set Widget Mouse Triggered|Set Widget Mouse Triggered]] ! Set widget mouse triggered. |- ! 88 ! FIXED ! 2 ! [[377 Create Object|Create Object]] ! Sends a friend to be added to the friend list. |- ! 90 ! VARIABLE_SHORT ! N/A ! [[377 Update Players|Update Players]] ! Updates players. |- ! 107 ! FIXED ! 5 ! [[377 Send Ground Item|Send Ground Item]] ! Adds a ground item to the server. |- ! 113 ! FIXED ! 0 ! [[377 Reset Button State|Reset Button State]] ! Resets the button state for all buttons. |- ! 125 ! FIXED ! 1 ! [[377 Run Energy|Run Energy]] ! Sends the players run energy level. |- ! 126 ! FIXED ! 3 ! [[377 Initialize Player|Initialize Player]] ! Sends the player's membership status and their current index on the server's player list. |- ! 128 ! FIXED ! 4 ! [[377 Inventory Overlay|Inventory Overlay]] ! Displays an interface over the sidebar area. |-}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Animation Reset|description=Resets all animations in the immediate area.|opcode=13|type=Fixed|length=0|revision=377}} == Animation Reset ==
=== Description ===
Resets all animations in the immediate area.
[[Category Packet]] [[Category Packet 377]] {{packet|name=Camera Shake|description=Set camera shake parameters.|opcode=67|type=Fixed|length=4|revision=377}} == Camera Shake ==
=== Description === Set camera shake parameters. It may be worth reading about Sine Waves [http://en.wikipedia.org/wiki/Sine_wave].
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Byte]] | The index of the shake parameter to modify. |- | [[Data Types#Standard data types|Byte]] | The range of the shake randomness. |- | [[Data Types#Standard data types|Byte]] | The amplitude (maximum displacement from 0) of the shake. |- | [[Data Types#Standard data types|Byte]] | The phase (where in its cycle the oscillation is at t = 0) of the shake. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Construct Map Region|description=Creates a map region.|opcode=53|type=Variable Short|length=N/A|revision=377}} == Interface Animation ==
=== Description === Sets the animation for a model on an interface.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Non Standard Data Types|Big Endian]] [[Data Types#Standard data types|Short]] [[Data Types#Non Standard Data Types|Special A]] | Map Region Y (absolute Y coordinate / 8 + 6) |- | [[Data Types#Standard data types|Bit Block]] | 1 bit (0 or 1) to decide if a tile exists. 26 bits for data about the tile (only if it exists) |- | [[Data Types#Non Standard Data Types|Big Endian]] [[Data Types#Standard data types|Short]] [[Data Types#Non Standard Data Types|Special A]] | Map Region X (absolute X coordinate / 8 + 6) |- |}
=== Information ===
If the tile exists then a 1 gets written to the output stream as a 1 otherwise a zero gets written to the stream.
If the tile does exist then you would follow that 1 bit with 26 bits of information about the tile.
int info = inStream.readBits(26); int heightLevel = info >> 24 & 3; int rotation = info >> 1 & 3; int regionX = info >> 14 & 0x3ff; int regionY = info >> 3 & 0x7ff;
=== Implementation ===
for(int z = 0; z < 4; z++) { for(int x = 0; x < 13; x++) { for(int y = 0; y < 13; y++) { outStream.writeBit(1, tileExists ? 1 : 0); if(tileExists) outStream.writeBits(26, TILE_INFORMATION); } } }
[[Category Packet]] [[Category Packet 377]] {{packet|name=Create Static Graphic|description=Creates a static graphic.|opcode=59|type=Fixed|length=6|revision=377}} == Create Static Graphic ==
=== Description === Creates a static graphic.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Byte]] | Position (xxxxyyyy) of the graphic. |- | [[Data Types#Standard data types|Short]] | Graphic ID. |- | [[Data Types#Standard data types|Byte]] | Height offset. |- | [[Data Types#Standard data types|Short]] | Placement delay. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Initialize Player|description=Sends the player's membership status and their current index on the server's player list.|opcode=249|type=Fixed|length=3|revision=377}} == Initialize Player ==
=== Description === Sends the player's membership status and their current index on the server's player list.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | Unsigned [[Data Types#Standard data types|Byte]] | Membership flag (1 = member, 0 = free). |- | Unsigned [[Data Types#Little Endian|Little Endian]] [[Data Types#Standard data types|Short]] | Player list index. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Input Amount|description=Forces the client to open the input amount interface.|opcode=58|type=Fixed|length=0|revision=377}} == Input Amount ==
=== Description ===
Forces the client to open the input amount interface.
[[Category Packet]] [[Category Packet 377]] {{packet|name=Interface Animation|description=Sets a model's animation on an interface.|opcode=2|type=Fixed|length=4|revision=377}} == Interface Animation ==
=== Description === Sets the animation for a model on an interface.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Byte Order|Little Endian]] [[Data Types#Standard data types|Short]] | Interface ID |- | [[Data Types#Standard data types|Short]] | Animation ID |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Interface Item|description=Sends an item to an interface.|opcode=21|type=Fixed|length=6|revision=377}} == Interface Item ==
=== Description === Sends an item to an interface.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Short]] | Zoom factor. |- | [[Data Types#Little Endian|Little Endian]] [[Data Types#Standard data types|Short]] | Item ID. |- | [[Data Types#Little Endian|Little Endian]] [[Data Types#Standard data types|Short]] [[Data Types#Non Standard Data Types|Special A]] | Interface ID. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Inventory Overlay|description=Displays the specified interface over the specified inventory.|opcode=128|type=Fixed|length=4|revision=377}} == Inventory Overlay ==
=== Description === Displays the specified interface over the specified inventory.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Short]] [[Data Types#Standard data types|Special A]] | Interface ID. |- | [[Data Types#Byte Order|Little Endian]] [[Data Types#Standard data types|Short]] [[Data Types#Non Standard Data Types|Special A]] | Inventory interface ID |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Logout|description=Forces the client to logout.|opcode=5|type=Fixed|length=0|revision=377}} == Logout ==
=== Description ===
Forces the client to logout cleanly and return to the login screen, without attempting a reconnection.
[[Category Packet]] [[Category Packet 377]] {{packet|name=Move Camera|description=Moves the camera.|opcode=3|type=Fixed|length=6|revision=377}} == Move Camera ==
=== Description === Moves the camera.
See: void client#updateCamera
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Byte]] | Tile X coordinate. |- | [[Data Types#Standard data types|Byte]] | Tile Y coordinate. |- | [[Data Types#Standard data types|Short]] | Height offset. |- | [[Data Types#Standard data types|Byte]] | Position offset. |- | [[Data Types#Standard data types|Byte]] | Move speed. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Open Welcome Screen|description=Displays the welcome screen.|opcode=21|type=Fixed|length=23|revision=377}} == Open Welcome Screen ==
=== Description === Displays the welcome screen.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Big Endian|Big Endian]] [[Data Types#Standard data types|Short]] | Last password change occurance |- | [[Data Types#Big Endian|Big Endian]] [[Data Types#Standard data types|Short]] [[Data Types#Non Standard Data Types|Special A]] | Unknown #1. |- | [[Data Types#Standard data types|Short]] | Unused #1. |- | [[Data Types#Standard data types|Short]] | Unknown #2. |- | [[Data Types#Big Endian|Big Endian]] [[Data Types#Standard data types|Short]] | Current server time. |- | [[Data Types#Standard data types|Short]] [[Data Types#Non Standard Data Types|Special A]] | Inbox message count. |- | [[Data Types#Standard data types|Short]] [[Data Types#Non Standard Data Types|Special A]] | Last log-in time. |- | [[Data Types#Standard data types|Short]] | Amount of members credit (days) remaining. |- | [[Data Types#Big Endian|Big Endian]] [[Data Types#Standard data types|Int]] | Last log-in IPV4 address. |- | [[Data Types#Big Endian|Big Endian]] [[Data Types#Standard data types|Short]] [[Data Types#Non Standard Data Types|Special A]] | Recovery question change status. |- | [[Data Types#Standard data types|Byte]] [[Data Types#Non Standard Data Types|Special A]] | Unused #2. |- |} * May be inaccurate.
[[Category Packet]] [[Category Packet 377]] {{packet|name=Play Ambient Wave|description=Plays an ambient wave.|opcode=41|type=Fixed|length=4|revision=377}} == Play Ambient Wave ==
=== Description === Plays an ambient wave.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Byte]] | Packed (xxxxyyyy) coordinates of sound. |- | [[Data Types#Standard data types|Short]] | Wave index (ID). |- | [[Data Types#Standard data types|Byte]] | Packed (rrrruuuu) sound settings, where r is the range of the sound. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Reset Button State|description=Resets the button state for all buttons.|opcode=113|type=Fixed|length=0|revision=377}} == Reset Button State ==
=== Description ===
Resets the button state for all buttons.
[[Category Packet]] [[Category Packet 377]] {{packet|name=Reset Ground Items and Objects|description=Resets ground items in potential viewing area.|opcode=40|type=Fixed|length=2|revision=377}} == Reset Ground Items and Objects ==
=== Description === Resets ground items in potential viewing area.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Byte]] [[Data Types#Non Standard Data Types|Special C]] | X coordinate in potential viewing area. |- | [[Data Types#Standard data types|Byte]] [[Data Types#Non Standard Data Types|Special S]] | Y coordinate in potential viewing area. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Run Energy|description=Sends the players run energy level.|opcode=125|type=Fixed|length=1|revision=377}} == Run Energy ==
=== Description === Sends the players run energy level.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | Unsigned [[Data Types#Standard data types|Byte]] | The amount of energy remaining. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Send Add Friend|description=Sends a friend to be added to the friend list.|opcode=78|type=Fixed|length=9|revision=377}} == Send Add Friend ==
=== Description === Sends a friend to be added to the friend list.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Long]] | Player name (as long). |- | Unsigned [[Data Types#Standard data types|Byte]] | World. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Send Ground Item|description=Adds a ground item to the server. |opcode=107|type=Fixed|length=5|revision=377}} == Send Ground Item ==
=== Description === Adds a ground item to the server.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Short]] | Item ID. |- | [[Data Types#Standard data types|Byte]] [[Data Types#Non Standard Data Types|Special S]] | Packed (xxxxyyyy) coordinates of the ground item. |- | [[Data Types#Standard data types|Short]] [[Data Types#Non Standard Data Types|Special A]] | Stack amount of the item. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Send Message|description=Sends a server message (e.g. 'Welcome to RuneScape') or trade/duel request.|opcode=63|type=Variable Byte|length=N/A|revision=377}} == Send Message ==
=== Description === Sends a server message (e.g. 'Welcome to RuneScape') or trade/duel request.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[RS String|RS String]] | Message. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Set Sidebar Interface|description=Sets the interface for the sidebar.|opcode=10|type=Fixed|length=3|revision=377}} == Interface Animation ==
=== Description === Sets the specified interface to the specified sidebar.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Byte]] [[Data Types#Standard data types|Special S]] | Sidebar Index |- | [[Data Types#Standard data types|Short]] [[Data Types#Non Standard Data Types|Special A]] | Interface ID |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Send Sound|description=Sends a sound to be played.|opcode=26|type=Fixed|length=5|revision=377}} == Send Sound ==
=== Description === Sends a sound to be played.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Short]] | Unknown #1 |- | [[Data Types#Standard data types|Byte]] | Unknown #2 |- | [[Data Types#Standard data types|Short]] | Unknown #2 |- |}
- Needs more work.
[[Category Packet]] [[Category Packet 377]] {{packet|name=Skill Level|description=Sends a skill level to the client.|opcode=49|type=Fixed|length=6|revision=377}} == Skill Level ==
=== Description === Sends a skill level to the client.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Byte]] [[Data Types#Non Standard Data Types|Special C]] | Skill ID. |- | [[Data Types#Standard data types|Byte]] | Skill level. |- | [[Data Types#Standard data types|Int]] | Skill experience. |- |}
[[Category Packet]] [[Category Packet 377]] {{packet|name=Walkable interface|description=Displays an interface in walkable mode.|opcode=50|type=Fixed|length=2|revision=377}} == Walkable Interface ==
=== Description ===
This packet displays an interface in walkable mode.
=== Packet Structure === {|border=2 ! Data Type ! Description |- | [[Data Types#Standard data types|Short]] | Interface ID. |- |}
[[Category RS2]]
==Client States==
Client states are used to switch between different graphic and logic procedures. The state of the client is global. There may be cases where two states will be handled the same graphically but different logically, vice versa.
{
! Opcode ! Name ! Description |- ! 0 ! Loading (initial) ! Client state where the client is initially loading itself to the login screen. |- ! 5 ! Loading ! Client state where the client is loading itself to the login screen. |- ! 10 ! Login Screen ! Client state where the client is on the login screen. |- ! 20 ! Login (initial) ! Client state where the client initially engages to log in to the server. |- ! 25 ! Map Rebuild ! Ingame client state where the client rebuilds the map. |- ! 30 ! Ingame ! Default ingame client state. |- ! 35 ! Ingame (screen overlay) ! Client state where the client screen is overlayed with a widget. |- ! 40 ! Login ! Client state where the client engages to log in to the server. |- ! 1000 ! Fatal Ondemand Error ! Client state where the client has encountered a fatal ondemand error and will no longer use the ondemand service. |}
==Client Actions==
===Social===
{
! Opcode ! Frame Name ! Variable 0 ! Variable 1 ! Variable 2 ! Description |- ! 31 ! [[443 Add Friend|Add Friend]] ! NA ! NA ! NA ! Action for when a friend is added. |- ! 2 ! [[443 Remove Friend|Remove Friend]] ! NA ! NA ! NA ! Action for when a friend is removed. |- ! 21 ! [[443 Add Ignore|Add Ignore]] ! NA ! NA ! NA ! Action for when an ignore is added. |- ! 50 ! [[443 Remove Ignore|Remove Ignore]] ! NA ! NA ! NA ! Action for when an ignore is removed. |}
===Entities===
{
! Opcode ! Frame Name ! Variable 0 ! Variable 1 ! Variable 2 ! Description |- ! 44 ! [[443 Player Option 0|Player Option 0]] ! id ! position x ! position y ! Action for the first option of a player. |- ! 22 ! [[443 Player Option 1|Player Option 1]] ! id ! position x ! position y ! Action for the second option of a player. |- ! 52 ! [[443 Player Option 2|Player Option 2]] ! id ! position x ! position y ! Action for the third option of a player. |- ! 56 ! [[443 Player Option 3|Player Option 3]] ! id ! position x ! position y ! Action for the fourth option of a player. |- ! 1 ! [[443 Player Option 4|Player Option 4]] ! id ! position x ! position y ! Action for the fifth option of a player. |- ! 41 ! [[443 Npc Option 0|Npc Option 0]] ! id ! position x ! position y ! Action for the first option of a NPC. |- ! 17 ! [[443 Npc Option 1|Npc Option 1]] ! id ! position x ! position y ! Action for the second option of a NPC. |- ! 13 ! [[443 Npc Option 2|Npc Option 2]] ! id ! position x ! position y ! Action for the third option of a NPC. |- ! 53 ! [[443 Npc Option 3|Npc Option 3]] ! id ! position x ! position y ! Action for the fourth option of a NPC. |- ! 46 ! [[443 Npc Option 4|Npc Option 4]] ! id ! position x ! position y ! Action for the fifth option of a NPC. |- ! 40 ! [[443 Ground Item Option 0|Ground Item Option 0]] ! item id ! position x ! position y ! Action for the first option of a ground item. |- ! 38 ! [[443 Ground Item Option 1|Ground Item Option 1]] ! item id ! position x ! position y ! Action for the second option of a ground item. |- ! 34 ! [[443 Ground Item Option 2|Ground Item Option 2]] ! item id ! position x ! position y ! Action for the third option of a ground item. |- ! 11 ! [[443 Ground Item Option 3|Ground Item Option 3]] ! item id ! position x ! position y ! Action for the fourth option of a ground item. |- ! 3 ! [[443 Ground Item Option 4|Ground Item Option 4]] ! item id ! position x ! position y ! Action for the fifth option of a ground item. |- ! 55 ! [[443 Object Option 0|Object Option 0]] ! info hash ! position x ! position y ! Action for the first option of an object. |- ! 57 ! [[443 Object Option 1|Object Option 1]] ! info hash ! position x ! position y ! Action for the second option of an object. |- ! 43 ! [[443 Object Option 2|Object Option 2]] ! info hash ! position x ! position y ! Action for the third option of an object. |- ! 6 ! [[443 Object Option 3|Object Option 3]] ! info hash ! position x ! position y ! Action for the fourth option of an object. |- ! 1005 ! [[443 Object Option 4|Object Option 4]] ! info hash ! position x ! position y ! Action for the fifth option of an object. |- |}
===Widget===
{
! Opcode ! Frame Name ! Variable 0 ! Variable 1 ! Variable 2 ! Description |- ! 28 ! [[443 Item On Widget Option 0|Item on Widget Option 0]] ! id ! slot ! widget id ! Action for the first option of an item on a widget. |- ! 16 ! [[443 Item On Widget Option 1|Item on Widget Option 1]] ! id ! slot ! widget id ! Action for the second option of an item on a widget. |- ! 54 ! [[443 Item On Widget Option 2|Item on Widget Option 2]] ! id ! slot ! widget id ! Action for the third option of an item on a widget. |- ! 32 ! [[443 Item On Widget Option 3|Item on Widget Option 3]] ! id ! slot ! widget id ! Action for the fourth option of an item on a widget. |- ! 19 ! [[443 Item On Widget Option 4|Item on Widget Option 4]] ! id ! slot ! widget id ! Action for the fifth option of an item on a widget. |- ! 35 ! [[443 Widget Item Option 0|Widget Item Option 0]] ! id ! slot ! widget id ! Action for the first option of an item on a widget. |- ! 30 ! [[443 Widget Item Option 1|Widget Item Option 1]] ! id ! slot ! widget id ! Action for the second option of an item on a widget. |- ! 26 ! [[443 Widget Item Option 2|Widget Item Option 2]] ! id ! slot ! widget id ! Action for the third option of an item on a widget. |- ! 25 ! [[443 Widget Item Option 3|Widget Item Option 3]] ! id ! slot ! widget id ! Action for the fourth option of an item on a widget. |- ! 49 ! [[443 Widget Item Option 4|Widget Item Option 4]] ! id ! slot ! widget id ! Action for the fifth option of an item on a widget. |}
===Examine===
{
! Opcode ! Frame Name ! Variable 0 ! Variable 1 ! Variable 2 ! Description |- ! 1006 ! [[443 Object Examine|Object Examine]] ! id ! position x ! position y ! Action for the examine option of an object. |- ! 1001 ! [[443 Npc Examine|Npc Examine]] ! id ! position x ! position y ! Action for the examine option of a Npc. |- ! 1003 ! [[443 Ground Item Examine|Ground Item Examine]] ! id ! position x ! position y ! Action for the examine option of a ground item. |- ! 1004 ! [[443 Item Examine|Item Examine]] ! id ! slot ! widget id ! Action for the examine option of an item. |}
===Other===
{
! Opcode ! Frame Name ! Variable 0 ! Variable 1 ! Variable 2 ! Description |- ! 29 ! [[443 Close Window|Close Window]] ! NA ! NA ! NA ! Action for when the currently open window is closed. |}
==Game Protocol==
===Server Frames===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- ! 29 ! VARIABLE SHORT ! NA ! [[443 Player Update|Player Update]] ! Updates the players within the client's view. |- ! 238 ! VARIABLE SHORT ! NA ! [[443 NPC Update|NPC Update]] ! Updates the npcs within the client's view. |- ! 121 ! VARIABLE SHORT ! NA ! [[443 Rebuild Scene Graph|Rebuild Scene Graph]] ! Rebuilds the players scene graph. |- ! 193 ! VARIABLE SHORT ! NA ! [[443 Rebuild Scene Graph|Rebuild Custom Scene Graph]] ! Builds a custom scene graph. |- ! 199 ! FIXED ! 3 ! [[443 Set Location|Set Location]] ! Sets the location on the map of where the player is. |- ! 111 ! FIXED ! 6 ! [[443 Move Camera To|Move Camera To]] ! Moves the camera to a location on the map. |- ! 157 ! VARIABLE BYTE ! NA ! [[443 Send Message|Send Message]] ! Sends a message to the client's chatbox. |- ! 58 ! FIXED ! 6 ! [[443 Update Skill|Update Skill]] ! Updates a skill by sending its experience and dynamic level. |- ! 226 ! FIXED ! 1 ! [[443 Update Run Energy|Update Run Energy]] ! Updates the amount of run energy the player has. |- ! 87 ! FIXED ! 1 ! [[443 Set Minimap State|Set Minimap State]] ! Sets the minimap state. |- ! 117 ! FIXED ! 1 ! [[443 System Update|System Update]] ! Informs the client that a system update will be happening. |- ! 192 ! VARIABLE SHORT ! NA ! [[443 Execute Client Script|Execute Client Script]] ! Executes a client script. |- ! 204 ! VARIABLE SHORT ! NA ! [[Class Check|Class Check Request]] ! Parses a request for a class check request. |- ! 89 ! FIXED ! 5 ! [[443 Player Sound Effect|Player Sound Effect]] ! Plays a sound effect. |- ! 74 ! FIXED ! 6 ! [[443 Set State Value|Set State Value (large)]] ! Sets the value of a client state variable. |- ! 62 ! FIXED ! 3 ! [[443 Set State Value|Set State Value (small)]] ! Sets the value of a client state variable. |- ! 163 ! FIXED ! 0 ! [[443 Reset States|Reset States]] ! Resets all the client state variables. |- ! 160 ! FIXED ! 4 ! [[443 Display Window|Display Window]] ! Displays a widget as a window. |- ! 221 ! FIXED ! 4 ! [[443 Display Screen Overlay|Display Screen Overlay]] ! Displays widgets over the entire screen of the client. |- ! 6 ! FIXED ! 2 ! [[443 Display Chatbox Interface|Display Chatbox Interface]] ! Displays the chatbox as a widget. |- ! 178 ! FIXED ! 0 ! [[443 Close Displayed Widgets|Close Displayed Widgets]] ! Closes all the displayed widgets except for the chatbox interface. |- ! 51 ! FIXED ! 0 ! [[443 Fetch Input|Fetch Input]] ! Fetches input from the chatbox. |- ! 3 ! FIXED ! 6 ! [[443 Change Inactive Color|Change Inactive Color]] ! Changes the widget's inactive color. |- ! 232 ! FIXED ! 10 ! [[443 Set Offset|Set Offset]] ! Sets the x and y offset of a widget. |- ! 31 ! FIXED ! 4 ! [[443 Display Player On Widget|Display Player on Widget]] ! Displays the local player on a widget. |- ! 137 ! FIXED ! 10 ! [[443 Display Item On Widget|Display Item on Widget]] ! Displays the model of an item on a widget. |- ! 147 ! FIXED ! 10 ! [[443 Set Model Rotation|Set Model Rotation]] ! Sets the x and y rotation of a model on a widget. |- ! 73 ! FIXED ! 8 ! [[443 Rotate Model|Rotate Model]] ! Sets the step amount to rotate the model continuously about the x axis. |- ! 228 ! VARIABLE SHORT ! NA ! [[443 Send Items|Send Items]] ! Sends the items in an item container. |- ! 213 ! VARIABLE SHORT ! NA ! [[443 Update Items|Update Items]] ! Updates the items in an item container from their slot id. |- ! 245 ! FIXED ! 0 ! [[443 Reset Items|Reset Items]] ! Resets all the items in an item container. |- ! 82 ! FIXED ! 2 ! [[443 Set Spawn Sector|Set Spawn Sector]] ! Sets the sector on the map where entities will be spawned. |- ! 244 ! VARIABLE SHORT ! NA ! [[443 Spawn Sector|Spawn Sector]] ! Parses the sector of the map to spawn entities, then the actual entity spawns. |- ! 207 ! FIXED ! 5 ! [[443 Spawn Ground Item|Spawn Ground Item]] ! Spawns a ground item. |- ! 94 ! FIXED ! 7 ! [[443 Spawn Ground Item|Spawn Ground Item]] ! Spawns a ground item that will ignore whoever it has already been spawned to. |- ! 79 ! FIXED ! 7 ! [[443 Update Ground Item|Update Ground Item]] ! Updates the item amount for a ground item. |- ! 84 ! FIXED ! 3 ! [[443 Remove Ground Item|Remove Ground Item]] ! Removes a ground item. |- ! 122 ! FIXED ! 4 ! [[443 Spawn Still Object|Spawn Still Object]] ! Spawns a still object. |- ! 170 ! FIXED ! 4 ! [[443 Animate Still Object|Animate Still Object]] ! Animates a still object. |- ! 69 ! FIXED ! 2 ! [[443 Remove Still Object|Remove Still Object]] ! Removes a still object. |- ! 115 ! FIXED ! 6 ! [[443 Spawn Still Graphic|Spawn Still Graphic]] ! Spawns a still graphic. |- ! 101 ! FIXED ! 15 ! [[443 Spawn Projectile|Spawn Projectile]] ! Spawns a projectile. |- ! 109 ! FIXED ! 5 ! [[443 Spawn Ambient Sound Effect|Spawn Ambient Sound Effect]] ! Spawns an ambient sound effect. |- ! 133 ! FIXED ! 2 ! [[443 Reset Sector|Reset Sector]] ! Resets all the ground items and still objects in a sector. |- ! 41 ! FIXED ! 0 ! [[443 Logout|Logout]] ! Logs the client out from the server. |}
===Client Frames===
==== Actions ====
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- ! 90 ! FIXED ! 8 ! [[443 Add Friend|Add Friend]] ! Called when a new name has been added to the friend list. |- ! 159 ! FIXED ! 8 ! [[443 Remove Friend|Remove Friend]] ! Called when a name has been removed from the friend list. |- ! 198 ! FIXED ! 8 ! [[443 Add Ignore|Add Ignore]] ! Called when a new name has been added to the ignore list. |- ! 250 ! FIXED ! 8 ! [[443 Remove Ignore|Remove Ignore]] ! Called when a name has been removed from the ignore list. |- ! 11 ! FIXED ! 2 ! [[443 Player Option 0|Player Option 0]] ! Called when the first option of a player is activated. |- ! 169 ! FIXED ! 2 ! [[443 Player Option 1|Player Option 1]] ! Called when the second option of a player is activated. |- ! 229 ! FIXED ! 2 ! [[443 Player Option 2|Player Option 2]] ! Called when the third option of a player is activated. |- ! 101 ! FIXED ! 2 ! [[443 Player Option 3|Player Option 3]] ! Called when the fourth option of a player is activated. |- ! 206 ! FIXED ! 2 ! [[443 Player Option 4|Player Option 4]] ! Called when the fifth option of a player is activated. |- ! ! ! ! [[443 Npc Option 0|Npc Option 0]] ! |- ! ! ! ! [[443 Npc Option 1|Npc Option 1]] ! |- ! ! ! ! [[443 Npc Option 2|Npc Option 2]] ! |- ! ! ! ! [[443 Npc Option 3|Npc Option 3]] ! |- ! ! ! ! [[443 Npc Option 4|Npc Option 4]] ! |- ! ! ! ! [[443 Ground Item Option 0|Ground Item Option 0]] ! |- ! ! ! ! [[443 Ground Item Option 1|Ground Item Option 1]] ! |- ! ! ! ! [[443 Ground Item Option 2|Ground Item Option 2]] ! |- ! ! ! ! [[443 Ground Item Option 3|Ground Item Option 3]] ! |- ! ! ! ! [[443 Ground Item Option 4|Ground Item Option 4]] ! |- ! ! ! ! [[443 Still Object Option 0|Still Object Option 0]] ! |- ! ! ! ! [[443 Still Object Option 1|Still Object Option 1]] ! |- ! ! ! ! [[443 Still Object Option 2|Still Object Option 2]] ! |- ! ! ! ! [[443 Still Object Option 3|Still Object Option 3]] ! |- ! ! ! ! [[443 Still Object Option 4|Still Object Option 4]] ! |- ! ! ! ! [[443 Item On Player|Item On Player]] ! |- ! ! ! ! [[443 Item On NPC|Item On NPC]] ! |- ! ! ! ! [[443 Item On Ground Item|Item On Ground Item]] ! |- ! ! ! ! [[443 Item On Still Object|Item On Still Object]] ! |- ! ! ! ! [[443 Item On Item|Item On Item]] ! |- ! ! ! ! [[443 Widget On Player|Widget On Player]] ! |- ! ! ! ! [[443 Widget On NPC|Widget On NPC]] ! |- ! ! ! ! [[443 Widget On Ground Item|Widget On Ground Item]] ! |- ! ! ! ! [[443 Widget On Still Object|Widget On Still Object]] ! |- ! ! ! ! [[443 Widget On Item|Widget On Item]] ! |- ! ! ! ! [[443 Widget On Widget|Widget On Widget]] ! |- ! ! ! ! [[443 Still Object Examine|Still Object Examine]] ! |- ! ! ! ! [[443 Npc Examine|Npc Examine]] ! |- ! ! ! ! [[443 Item Examine|Item Examine]] ! |- ! 54 ! FIXED ! 4 ! [[443 Widget Action|Widget Action]] ! Called when a widget action is activated. |- ! 70 ! FIXED ! 0 ! [[443 Closed Overlays|Closed Overlays]] ! Called when the currently opened overlays are closed. |}
==== Other ====
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- ! 194 ! VARIABLE BYTE ! NA ! [[Class Check|Class Check Response]] ! Response to a class check request sent from the server. |- ! 4 ! NA ! VARIABLE BYTE ! [[443 Chat|Chat]] ! Called when the client enters in a chat message. |- ! 21 ! 0 ! FIXED ! [[443 Map Rebuilt|Map Rebuilt]] ! Called when the map has been successfully rebuilt. |- ! 174 ! NA ! VARIABLE BYTE ! [[443 Command|Command]] ! Called when the client inputs a command. |}
=== Update Flags ===
All flags are listed in order in which they are parsed.
==== Player ====
==== NPC ====
{| border=3px ! Opcode ! Name ! Description |- ! 0x2 ! Face Position ! Turns to face the NPC to a position on the map. |- ! 0x20 ! Animate ! Animates the NPC. |- ! 0x40 ! Display Hit One ! Displays a hit on the NPC. |- ! 0x4 ! Display Still Graphic ! Displays a still graphic on the NPC. |- ! 0x10 ! Turn to mobile entity ! Turns to face the NPC to a mobile entity on the map. |- ! 0x80 ! Display Hit Two ! Displays a hit on the npc. |- ! 0x1 ! Turn into NPC ! Changes the id of the NPC and its animations. |- ! 0x8 ! Display chat text ! Displays chat text above the head of the NPC. |}
[[Category RS2]]
Currently under development.
== '''Packet structure''' == When the client sends a packet to the server, the first byte encapsulates its opcode. This specific opcode is encrypted with a value generated by the ISAAC PRNG seeded with a dynamically server generated key during the login block. The server decrypts it and associates the opcode to the packet's respective predefined size. If the packet does not contain a fixed size, the opcode will be followed by either a byte or a word - varying per packet - for its proper size. This is then followed by the payload.
== '''Login''' == Blank at the moment.
=='''Game Protocol'''==
===Server -> Client Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 163 | Fixed | 1 | [[317 Run Energy|Run Energy]] | Sends the players run energy percentage. |- |}
===Client -> Server Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 49 | VARIABLE BYTE | 13 | [[464 Character Design|Character Design]] | Sent when accepting the player's appearance on the design screen. |- | 115 | VARIABLE BYTE | N/A | [[464 Chat|Chat]] | Sent when the player enters a chat message. |- |}
[[Category RS2]]
Currently under development.
== '''Packet structure''' == When the client sends a packet to the server, the first byte encapsulates its opcode. This specific opcode is encrypted with a value generated by the ISAAC PRNG seeded with a dynamically server generated key during the login block. The server decrypts it and associates the opcode to the packet's respective predefined size. If the packet does not contain a fixed size, the opcode will be followed by either a byte or a word - varying per packet - for its proper size. This is then followed by the payload.
== '''Login''' == Blank at the moment.
=='''Game Protocol'''==
===Server -> Client Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 147 | DataType.SHORT, DataOrder.LITTLE, | 1 | [[317 Run Energy|Run Energy]] | Sends the Mapregion |- |}
===Client -> Server Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 49 | VARIABLE BYTE | 13 | [[464 Character Design|Character Design]] | Sent when accepting the player's appearance on the design screen. |- | 115 | VARIABLE BYTE | N/A | [[464 Chat|Chat]] | Sent when the player enters a chat message. |- |}
[[Category Packet]] [[Category Packet 474]] [[Category RS2]]
Not much progress has been made with this revision, don't worry about it too much.
== '''Packet structure''' == When the client sends a packet to the server, the first byte encapsulates its opcode. This specific opcode is encrypted with a value generated by the ISAAC PRNG seeded with a dynamically server generated key during the login block. The server decrypts it and associates the opcode to the packet's respective predefined size. If the packet does not contain a fixed size, the opcode will be followed by either a byte or a word - varying per packet - for its proper size. This is then followed by the payload.
== '''Login''' == ?
== '''Game Protocol''' ==
===Server -> Client Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 209 | VARIABLE_BYTE | N/A | [[474 Send message|Send message]] | Sends a server message (e.g. 'Welcome to RuneScape') or trade/duel request. |- | 231 | VARIABLE_SHORT | N/A | [[474 Send string|Send string]] | Replaces a string of text. (e.g. Replace: 'Click here to Play' with 'Play Now!') |- |}
===Client -> Server Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 1 | FIXED
| 8 | [[474 Remove ignore|Remove ignore]] | Sent when a player
removes a player from their ignore list. |- | 3 | FIXED | 6 |
[[474 Fourth Interface Option|Fourth Interface Option]] | This is
triggered when a fourth interface option has been clicked. |- | 4 |
FIXED | N/A | [[474 Fourth Object Option|Fourth Object Option]]
| This is triggered when a fourth object option has been clicked. |-
| 11 | FIXED | N/A | [[474 Minimap Walk|Minimap Walk]] | Sends
walking data to the server. |- | 13 | FIXED | 12 | [[474 Item on
NPC|Item on NPC]] | Sent when a player uses an item on an NPC. |-
| 21 | FIXED | 2 | [[474 Npc action 2|Npc action 2]] | Sent
when a player clicks the second option of an NPC. |- | 22 | FIXED |
N/A | [[474 Kick Clanchat Participant|Kick Clanchat Participant]]
| Indicates a friend of the clanChat owner attempts to kick a fellow
clanChatParticipant (non-owner). |- | 29 | FIXED | N/A | [[474
Sixth Interface Option|Sixth Interface Option]] | Tells the server a
sixth interface option has been clicked. |- | 31 | FIXED | 6 |
[[474 Object action 1|Object action 1]] | Sent when the player
clicks the first option of an object, such as "Cut" for trees. |- | 34
| FIXED | N/A | [[474 Client Focus|Client Focus]] | Tells the
server the clients focus has changed. |- | 35 | FIXED | N/A |
[[474 Use Magic On Player|Use Magic On Player]] | Indicates the
player wants to use a spell on another player. |- | 37 | FIXED | N/A
| [[474 Third interface option|Third interface option]] | This is
triggered when one a third interface option has been clicked. |- | 203
| FIXED | 6 | [[474 Object action 2|Object action 2]] | Sent
when the player clicks the second option of an object, such as
"Use-quickly" for Bank Booths. |- | 34 | FIXED | 1 | [[474 Focus
change|Focus change]] | Sent when the game client window goes out of
focus. |- | 35 | FIXED | 8 | [[474 Magic on player|Magic on
player]] | Sent when the player casts magic on another player.
|- | 226 | FIXED | 2 | [[474 Examine object|Examine object]]
| Sent when you examine an object.
|- |}
[[Category Packet]] [[Category Packet 474]] {{packet|name=Fourth Interface Option|description=Triggered when a fourth interface option has been clicked.|opcode=3|type=Fixed|length=6|revision=474}} == Fourth Interface Option ==
=== Description ===
This is triggered when a fourth interface option has been clicked.
=== Packet Structure === {|border=2 ! Data Type ! Description |- | [[Data Types#Standard data types|Int]] | The button ID. |- | [[Data Types#Standard data types|Short]] | The item container slot. |- |}
[[Category Packet]] [[Category Packet 474]] {{packet|name=Remove ignore|description=Sent when a player removes a player from their ignore list.|opcode=1|type=Fixed|length=8|revision=474}} == Remove ignore ==
=== Description ===
Signals the player wants to remove an ignore.
=== Packet Structure === {|border=2 ! Data Type ! Description |- | [[Data Types#Standard data types|Long]] | The player that is going to be removed from the ignore's name. |- |}
[[Category RS2]]
== '''Packet structure''' == When the client sends a packet to the server, the first byte encapsulates its opcode. This specific opcode is encrypted with a value generated by the ISAAC PRNG seeded with a dynamically server generated key during the login block. The server decrypts it and associates the opcode to the packet's respective predefined size. If the packet does not contain a fixed size, the opcode will be followed by either a byte or a word - varying per packet - for its proper size. This is then followed by the payload.
== '''Login''' == Every connection to the main 'gateway' server sends a single byte of data, mostly well known as the connection type. The connection type tells the main server which type of connection you wish to initiate. The old engine list consists of:
- Login initiation - connection type 14
- Update - connection type 15
- Fresh login - connection type 16
- JAGGRAB - connection type 17
- Reconnecting login - connection type 18
- Worldlist - varies, connection type 255 in #508
- Potentially more...
The connection type we will cover in the following paragraphs is the login connection type, 14. After the login handshake initiating connection type, the client writes a small bit of data derived from the logging in player's username. This is believed to help select the appropriate login server. On successful handshake, the server sends back 8 ignored by
At this point, the client reads in one byte, called the status code. The status code 0 is expected to start the login protocol correctly. If the status code is 0, the client reads a long, dubbed by many as the server session key. This is used to help generate a unique seed for the client session's packet opcode masking. The client then stores two ints that are the upper and lower ints of the client session key, which has the same purpose as the server's key. The client then starts writing the login block, which is RSA encrypted.
The login block starts with the byte 10, which is considered a magic number. Following it is the client session key and server session key longs. Trailing behind the session keys comes the client's username packed to a 64-bit long and password written as a C-string (NUL-terminated ASCII). This block is then RSA encrypted and stored for later use.
Now starts the login request packet. It starts off with a flag telling the server whether or not the client is reconnecting or connecting for the first time [NOW CLASSIFIED AS CONNECTION TYPE]. The byte is 18 or 16, respectively. Following is the size of the rest of the login response packet, including the login block that trails at the end, to tip the server how much data it should expect. Later comes the client revision int. After the client revision, an unknown byte is written that seems to always be zero (possibly the memory usage game-type flag [low mem/high mem]), followed by constantly zero byte and yet another zero byte. Next the packet writes the game applet width and height in pixels as shorts, followed quickly after by the UID (unique identifier or user identifier). Next comes the C-string settings string passed as a param to the applet, and after it the int affiliate identifier (probably identifies the game affiliate it was run on) with another int right after it. This int that trails behind is an unknown int that only has 22 bits used, all of which represent various flags within the client. Any clues as to what they are would be nice. The packet is just about crafted completely. [In 525, a strange short is written here]. To finish off the main chunk, the client writes all cache's reference table index-based CRC32 checksums as ints (29 in 539, 27 in 508, etc). To top it off, the RSA encrypted login block is appended to the end and the packet is sent to the server.
The ISAAC ciphers are seeded for packet opcode masking after adding 50 to each int of the session keys, and the status code is reread. This finishes the login protocol.
== '''Game Protocol''' == Game packet header:
ubyte - opcode ubyte - packet size only if packet size is sent as -1 (length: VAR_BYTE) ushort - packet size only if packet size is sent as -2 (length: VAR_SHORT)After the header is read by the server, the packet specific data is then read and decoded by the server.
===Server -> Client Packets=== {| border=2 |- ! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 8 | FIXED | 2 | [[508 System update|System update]] | Displays the system update counter on the player's client. |- | 93 | FIXED | 7 | [[508 Send interface|Send interface]] | |- | 99 | FIXED | 1 | [[508 Run energy|Run energy]] | Sets the players run energy. |- | 104 | FIXED | 0 | [[508 Logout|Logout]] | Logs the player out. |- | 217 | FIXED | 6 | [[508 Send skill levels|Send skill levels]] | Sends the player's skill levels to the client to be drawn on the skill tab. |- | 218 | VARIABLE BYTE | N/A | [[508 Send message|Send message]] | Writes a string to the client's chat box. |- | 239 | FIXED | 3 | [[508 Set window pane|Set window pane]] | |- | 252 | VARIABLE BYTE | N/A | [[508 Send player option|Send player option]] | |}
===Client -> Server Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 63 | FIXED | 6 | [[508 Dialogue Options|Dialogue Options.]] | Sent when a player clicks an dialogue button. The data sent is InterfaceId, buttonId, and something yet not discovered. |- |}
[[Category RS2]]
== '''Packet structure''' == When the client sends a packet to the server, the first byte encapsulates its opcode. This specific opcode is encrypted with a value generated by the ISAAC PRNG seeded with a dynamically server generated key during the login block. The server decrypts it and associates the opcode to the packet's respective predefined size. If the packet does not contain a fixed size, the opcode will be followed by either a byte or a word - varying per packet - for its proper size. This is then followed by the payload.
An addition to modern emulation protocols was the addition to allow packets with an opcode of a word to be deciphered from the buffer. This is done by taking the first two ISAAC PRNG seeds; each byte from the buffer at the current offset is deciphered sequentially. If the first byte deciphered is less than the maximum of a signed byte then the packet is assumed to be byte length, otherwise it's considered to be word length.
== '''Login''' == Every connection to the main 'gateway' server sends a single byte of data, mostly well known as the connection type. The connection type tells the main server which type of connection you wish to initiate. The old engine list consists of:
Needs documentation on how to login
[[Category RS2]] This page is an attempt to document the protocol and other relevant information for client build 666.
== '''Handshakes''' == This section documents the handshake packets sent from the client to the server.
{
! Name ! Opcode ! Length ! Fields ! Description |- ! Init Game Connection | 14 | 0 | None | Indicates that the connection is for logging the client into the lobby or game. |- ! Init Update Connection | 15 | 4 | style="text-align: left" | * client_build: int32 | Indicates that the connection is for streaming the game's resources to the client. |- ! Game Login | 16 | Variable (short) | style="text-align: left" | * client_build: int32 * reconnecting: int8 * rsa_block_len: int16 * RSA block ** block_header: int8 ** xtea_key: int32[4] ** unknown: int64 ** password: cstring ** server_session_key: int64 ** client_session_key: int64 * XTEA block ** username: cstring ** unknown: int8 ** screen_type: int8 ** screen_width: int16 ** screen_height: int16 ** multisampling_level: int8 ** uid: int8[24] ** settings: cstring ** affiliate_id: int32 ** preferences_length: int8 ** preferences_data: int8[preferences_length] ** System info *** sysinfo_version: int8 *** os_type: int8 *** is_64bit: int8 *** os_version: int8 *** java_vendor: int8 *** java_release: int8 *** java_version: int8 *** java_update: int8 *** unsigned: int8 *** heap_size: int16 *** processor_count: int8 *** total_memory: int24 *** unknown: int16 *** unknown: int8 *** unknown: int8 *** unknown: int8 *** unknown: jstring *** unknown: jstring *** unknown: jstring *** unknown: jstring *** unknown: int8 *** unknown: int16 ** unknown: int32 ** user_flow: int64 ** has_additional_info: int8 *** additional_info: cstring ** has_jagtheora: int8 ** using_javascript: int8 ** archive_checksums: int32[36] | Attempts to login to the game server. |- ! Handshake 17 | 17 | 0 | None | Not used but present in the client. |- ! Lobby Login | 19 | Variable (short) | style="text-align: left" | * client_build: int32 * rsa_block_len: int16 * RSA block ** block_header: int8 ** xtea_key: int32[4] ** unknown: int64 ** password: cstring ** server_session_key: int64 ** client_session_key: int64 * XTEA block ** username: cstring ** game_id: int8 ** language: int8 ** uid: int8[24] ** settings: cstring ** affiliate_id: int32 ** archive_checksums: int32[36] | Attempts to login to the lobby server. |- ! Create Account | 22 | Variable (short) | style="text-align: left" | * client_build: int32 * rsa_block_len: int16 * RSA block ** block_header: int8 ** xtea_key: int32[4] ** padding: int32[10] ** unknown: int16 * XTEA block ** email: cstring ** affiliate_id: int16 ** password: cstring ** user_flow: int64 ** language: int8 ** game_id: int8 ** uid: int8[24] ** has_additional_info: int8 *** additional_info: cstring ** age: int8 ** email_updates: int8 ** padding: int8[7] | Attempts to create an account with the given information. |- ! Handshake 23 | 23 | 4 | None | Not used but present in the client. |- ! Handshake 24 | 24 | Variable (byte) | None | Not used but present in the client. |- ! Finished Advertisement | 26 | 0 | None | Notifies the server that the client has finished viewing the advertisement. |- ! Handshake 27 | 27 | 0 | None | Not used but present in the client. |- ! Check Email | 28 | Variable (short) | style="text-align: left" | * client_build: int32 * rsa_block_len: int16 * RSA block ** block_header: int8 ** xtea_key: int32[4] ** padding: int32[10] ** unknown: int16 * XTEA block ** email: cstring ** language: int8 ** padding: int8[7] | Asks the server to verify whether the given email can be used to create an account. |- ! Init Social Network Connection | 29 | Variable (short) | style="text-align: left" | * client_build: int32 * reconnecting: int8 (if game server connection) * rsa_block_len: int16 * RSA block ** block_header: int8 ** xtea_key: int32[4] ** social_network_id: int8 ** unknown: int16 ** language: int8 ** affiliate_id: int32 ** padding: int32[6] ** client_session_key: int64 ** game_id: int8 ** unknown: int8 | Initializes a connection using a social network. |- ! Social Network Login | 30 | Variable (short) | style="text-align: left" | * Game login ** XTEA block *** unknown: int8 *** screen_type: int8 *** screen_width: int16 *** screen_height: int16 *** multisampling_level: int8 *** uid: int8[24] *** settings: cstring *** affiliate_id: int32 *** preferences_length: int8 *** preferences_data: int8[preferences_length] *** System info **** sysinfo_version: int8 **** os_type: int8 **** is_64bit: int8 **** os_version: int8 **** java_vendor: int8 **** java_release: int8 **** java_version: int8 **** java_update: int8 **** unsigned: int8 **** heap_size: int16 **** processor_count: int8 **** total_memory: int24 **** unknown: int16 **** unknown: int8 **** unknown: int8 **** unknown: int8 **** unknown: jstring **** unknown: jstring **** unknown: jstring **** unknown: jstring **** unknown: int8 **** unknown: int16 *** unknown: int32 *** user_flow: int64 *** has_additional_info: int8 **** additional_info: cstring *** has_jagtheora: int8 *** using_javascript: int8 *** archive_checksums: int32[36] * Lobby login ** XTEA block *** game_id: int8 *** language: int8 *** uid: int8[24] *** settings: cstring *** affiliate_id: int32 *** archive_checksums: int32[36] | Attempts to login to either the game or lobby server using a social network. |- |}
== '''Game Protocol''' ==
=== '''Packets''' === This section documents the packets sent between the client and server during normal gameplay.
==== '''Client-to-Server''' ==== {| class="wikitable" style="text-align: center" |- ! Name ! Opcode ! Length ! Fields ! Description |- ! Map Build Complete | 0 | 0 | None | Indicates that the client has just finished rebuilding its map. |- ! Location Option 1 | 1 | 7 | style="text-align: left" | * pos_y: int16a * pos_x: le_int16a * location_id: le_int16 * ctrl_pressed: int8 | Sent when the first option for a location is selected. |- ! Remove Ignore | 2 | Variable (byte) | style="text-align: left" | * name: cstring | Sent when the client wants to stop ignoring a player. |- ! Packet 3 | 3 | 8 | | |- ! Player Option 8 | 4 | 3 | style="text-align: left" | * player_index: int16 * ctrl_pressed: int8 | Sent when the eighth option for a player is selected. |- ! Packet 5 | 5 | Variable (byte) | | |- ! Packet 6 | 6 | 15 | | |- ! Packet 7 | 7 | 8 | | |- ! Packet 8 | 8 | 6 | | |- ! Packet 9 | 9 | Variable (byte) | | |- ! Npc Option 3 | 10 | 3 | style="text-align: left" | * npc_index: le_int16a * ctrl_pressed: int8c | Sent when the third option for an npc is selected. |- ! Packet 11 | 11 | 8 | | |- ! Packet 12 | 12 | Variable (byte) | | |- ! Packet 13 | 13 | Variable (byte) | | |- ! Player Option 10 | 14 | 3 | style="text-align: left" | * player_index: int16 * ctrl_pressed: int8 | Sent when the tenth option for a player is selected. |- ! Packet 15 | 15 | 4 | | |- ! Ground Object Option 5 | 16 | 7 | style="text-align: left" | * pos_y: int16 * object_id: int16 * pos_x: int16 * ctrl_pressed: int8 | Sent when the fifth option for a ground object is selected. |- ! Packet 17 | 17 | 8 | | |- ! Packet 18 | 18 | 1 | | |- ! Packet 19 | 19 | Variable (byte) | | |- ! Packet 20 | 20 | 4 | | |- ! Packet 21 | 21 | 2 | | |- ! Packet 22 | 22 | Variable (byte) | | |- ! Ground Object Option 2 | 23 | 7 | style="text-align: left" | * pos_y: int16 * object_id: int16 * pos_x: int16 * ctrl_pressed: int8 | Sent when the second option for a ground object is selected. |- ! Ground Object Option 3 | 24 | 7 | style="text-align: left" | * pos_y: int16 * object_id: int16 * pos_x: int16 * ctrl_pressed: int8 | Sent when the third option for a ground object is selected. |- ! Packet 25 | 25 | 8 | | |- ! Packet 26 | 26 | 16 | | |- ! Npc Option 6 | 27 | 3 | style="text-align: left" | * npc_index: le_int16a * ctrl_pressed: int8c | Sent when the sixth option for an npc is selected. |- ! Ground Object Option 6 | 28 | 7 | style="text-align: left" | * pos_y: int16 * object_id: int16 * pos_x: int16 * ctrl_pressed: int8 | Sent when the sixth option for a ground object is selected. |- ! Npc Option 1 | 29 | 3 | style="text-align: left" | * npc_index: le_int16a * ctrl_pressed: int8c | Sent when the first option for an npc is selected. |- ! Packet 30 | 30 | Variable (byte) | | |- ! Add Friend | 31 | Variable (byte) | style="text-align: left" | * name: cstring | Sent when the client wants to be friends with a player. |- ! Detect Modified Client | 32 | 4 | style="text-align: left" | * value: int32 | Sent on each map rebuild if the client detects that it is not running as an applet. The ''value'' field will always have value 0x3f008edd. |- ! No Timeout | 33 | 0 | None | Sent if the client has not sent the server any data for 50 ticks. |- ! Packet 34 | 34 | 6 | | |- ! Remove Friend | 35 | Variable (byte) | style="text-align: left" | * name: cstring | Sent when the client wants to stop being friends with a player. |- ! Packet 36 | 36 | 6 | | |- ! Packet 37 | 37 | 4 | | |- ! Location Option 5 | 38 | 7 | style="text-align: left" | * pos_y: int16a * pos_x: le_int16a * location_id: le_int16 * ctrl_pressed: int8 | Sent when the fifth option for a location is selected. |- ! Location Option 2 | 39 | 7 | style="text-align: left" | * pos_y: int16a * pos_x: le_int16a * location_id: le_int16 * ctrl_pressed: int8 | Sent when the second option for a location is selected. |- ! Packet 40 | 40 | 8 | | |- ! Packet 41 | 41 | 12 | | |- ! Packet 42 | 42 | 15 | | |- ! Player Option 1 | 43 | 3 | style="text-align: left" | * player_index: int16 * ctrl_pressed: int8 | Sent when the first option for a player is selected. |- ! Player Option 2 | 44 | 3 | style="text-align: left" | * player_index: int16 * ctrl_pressed: int8 | Sent when the second option for a player is selected. |- ! Ground Object Option 1 | 45 | 7 | style="text-align: left" | * pos_y: int16 * object_id: int16 * pos_x: int16 * ctrl_pressed: int8 | Sent when the first option for a ground object is selected. |- ! Packet 46 | 46 | Variable (byte) | | |- ! Player Option 5 | 47 | 3 | style="text-align: left" | * player_index: int16 * ctrl_pressed: int8 | Sent when the fifth option for a player is selected. |- ! Packet 48 | 48 | 8 | | |- ! Ground Object Option 4 | 49 | 7 | style="text-align: left" | * pos_y: int16 * object_id: int16 * pos_x: int16 * ctrl_pressed: int8 | Sent when the fourth option for a ground object is selected. |- ! Packet 50 | 50 | Variable (byte) | | |- ! Player Option 9 | 51 | 3 | style="text-align: left" | * player_index: int16 * ctrl_pressed: int8 | Sent when the ninth option for a player is selected. |- ! Packet 52 | 52 | 4 | | |- ! Minimap Walk | 53 | 18 | style="text-align: left" | * dest_y: le_int16 * ctrl_pressed: int8c * dest_x: le_int16a * dummy1: int8 * dummy2: int8 * camera_yaw: int16 * dummy3: int8 * yaw_random: int8 * scale_random: int8 * dummy4: int8 * world_x: int16 * world_y: int16 * dummy5: int8 | Sent when a position on the minimap is clicked. Fields ''dummy1'' and ''dummy2'' should have value -1. ''dummy3'' should have value 57. ''dummy4'' should have value 89. ''dummy5'' should have value 63.
The ''yaw_random'' and ''scale_random'' contain the current random offsets added to the client's camera yaw and minimap scale values.
The ''world_x'' and ''world_y'' fields contain the client's current position in world coordinates. |- ! Packet 54 | 54 | 8 | | |- ! Packet 55 | 55 | Variable (byte) | | |- ! Game View Walk | 56 | 5 | style="text-align: left" | * dest_y: le_int16 * ctrl_pressed: int8c * dest_x: le_int16a | Sent when a position in the 3d game world is clicked. |- ! Packet 57 | 57 | 11 | | |- ! Location Option 4 | 58 | 7 | style="text-align: left" | * pos_y: int16a * pos_x: le_int16a * location_id: le_int16 * ctrl_pressed: int8 | Sent when the fourth option for a location is selected. |- ! Packet 59 | 59 | Variable (byte) | | |- ! Packet 60 | 60 | 1 | | |- ! Npc Option 5 | 61 | 3 | style="text-align: left" | * npc_index: le_int16a * ctrl_pressed: int8c | Sent when the fifth option for an npc is selected. |- ! Packet 62 | 62 | Variable (byte) | | |- ! Packet 63 | 63 | 4 | | |- ! Packet 64 | 64 | 0 | | |- ! Packet 65 | 65 | 11 | | |- ! Packet 66 | 66 | 8 | | |- ! Packet 67 | 67 | 2 | | |- ! Add Ignore | 68 | Variable (byte) | style="text-align: left" | * name: cstring * temporary: int8 | Sent when the client wants to ignore a player. |- ! Npc Option 4 | 69 | 3 | style="text-align: left" | * npc_index: le_int16a * ctrl_pressed: int8c | Sent when the fourth option for an npc is selected. |- ! Npc Option 2 | 70 | 3 | style="text-align: left" | * npc_index: le_int16a * ctrl_pressed: int8c | Sent when the second option for an npc is selected. |- ! Packet 71 | 71 | 16 | | |- ! Player Option 7 | 72 | 3 | style="text-align: left" | * player_index: int16 * ctrl_pressed: int8 | Sent when the seventh option for a player is selected. |- ! Packet 73 | 73 | 2 | | |- ! Packet 74 | 74 | Variable (byte) | | |- ! Location Option 6 | 75 | 7 | style="text-align: left" | * pos_y: int16a * pos_x: le_int16a * location_id: le_int16 * ctrl_pressed: int8 | Sent when the sixth option for a location is selected. |- ! Packet 76 | 76 | 4 | | |- ! Packet 77 | 77 | 2 | | |- ! Packet 78 | 78 | 3 | | |- ! Packet 79 | 79 | Variable (byte) | | |- ! Packet 80 | 80 | Variable (byte) | | |- ! Packet 81 | 81 | Variable (byte) | | |- ! Packet 82 | 82 | Variable (byte) | | |- ! Player Option 4 | 83 | 3 | style="text-align: left" | * player_index: int16 * ctrl_pressed: int8 | Sent when the fourth option for a player is selected. |- ! Packet 84 | 84 | 8 | | |- ! Packet 85 | 85 | 8 | | |- ! Location Option 3 | 86 | 7 | style="text-align: left" | * pos_y: int16a * pos_x: le_int16a * location_id: le_int16 * ctrl_pressed: int8 | Sent when the third option for a location is selected. |- ! Packet 87 | 87 | 0 | | |- ! Packet 88 | 88 | Variable (byte) | | |- ! Packet 89 | 89 | Variable (byte) | | |- ! Player Option 3 | 90 | 3 | style="text-align: left" | * player_index: int16 * ctrl_pressed: int8 | Sent when the third option for a player is selected. |- ! Player Option 6 | 91 | 3 | style="text-align: left" | * player_index: int16 * ctrl_pressed: int8 | Sent when the sixth option for a player is selected. |- ! Packet 92 | 92 | 4 | | |- ! Packet 93 | 93 | Variable (byte) | | |- |}
==== '''Server-to-Client''' ==== {| class="wikitable" style="text-align: center" |- ! Name ! Opcode ! Length ! Fields ! Description |- ! Packet 0 | 0 | 2 | | |- ! Packet 1 | 1 | 0 | | |- ! Packet 2 | 2 | Variable (byte) | | |- ! Packet 3 | 3 | Variable (byte) | | |- ! Packet 4 | 4 | 0 | | |- ! Packet 5 | 5 | Variable (short) | | |- ! Packet 6 | 6 | Variable (short) | | |- ! Packet 7 | 7 | 20 | | |- ! Packet 8 | 8 | 6 | | |- ! Packet 9 | 9 | 10 | | |- ! Packet 10 | 10 | 2 | | |- ! Packet 11 | 11 | Variable (short) | | |- ! Packet 12 | 12 | 7 | | |- ! Packet 13 | 13 | Variable (short) | | |- ! Packet 14 | 14 | 6 | | |- ! Packet 15 | 15 | Variable (byte) | | |- ! Packet 16 | 16 | 2 | | |- ! Packet 17 | 17 | Variable (byte) | | |- ! Packet 18 | 18 | 1 | | |- ! Packet 19 | 19 | Variable (short) | | |- ! Packet 20 | 20 | 4 | | |- ! Packet 21 | 21 | 3 | | |- ! Packet 22 | 22 | 6 | | |- ! Packet 23 | 23 | Variable (short) | | |- ! Packet 24 | 24 | 5 | | |- ! Packet 25 | 25 | 17 | | |- ! Packet 26 | 26 | 6 | | |- ! Packet 27 | 27 | 16 | | |- ! Packet 28 | 28 | 0 | | |- ! Packet 29 | 29 | 4 | | |- ! Packet 30 | 30 | 3 | | |- ! Packet 31 | 31 | 10 | | |- ! Packet 32 | 32 | Variable (short) | | |- ! Packet 33 | 33 | 6 | | |- ! Packet 34 | 34 | 6 | | |- ! Packet 35 | 35 | 7 | | |- ! Packet 36 | 36 | Variable (byte) | | |- ! Packet 37 | 37 | 6 | | |- ! Packet 38 | 38 | Variable (short) | | |- ! Packet 39 | 39 | 6 | | |- ! Packet 40 | 40 | 9 | | |- ! Packet 41 | 41 | Variable (short) | | |- ! Packet 42 | 42 | 12 | | |- ! Packet 43 | 43 | 2 | | |- ! Packet 44 | 44 | 1 | | |- ! Packet 45 | 45 | Variable (byte) | | |- ! Packet 46 | 46 | 3 | | |- ! Packet 47 | 47 | 8 | | |- ! Packet 48 | 48 | 4 | | |- ! Packet 49 | 49 | 3 | | |- ! Packet 50 | 50 | Variable (byte) | | |- ! Packet 51 | 51 | 4 | | |- ! Packet 52 | 52 | Variable (byte) | | |- ! Packet 53 | 53 | 0 | | |- ! Packet 54 | 54 | Variable (byte) | | |- ! Packet 55 | 55 | 3 | | |- ! Packet 56 | 56 | Variable (short) | | |- ! Packet 57 | 57 | 8 | | |- ! Packet 58 | 58 | 2 | | |- ! Packet 59 | 59 | 0 | | |- ! Packet 60 | 60 | 4 | | |- ! Packet 61 | 61 | 6 | | |- ! Packet 62 | 62 | Variable (byte) | | |- ! Packet 63 | 63 | Variable (byte) | | |- ! Packet 64 | 64 | 10 | | |- ! Packet 65 | 65 | 3 | | |- ! Packet 66 | 66 | 4 | | |- ! Packet 67 | 67 | 4 | | |- ! Packet 68 | 68 | 0 | | |- ! Packet 69 | 69 | Variable (short) | | |- ! Packet 70 | 70 | Variable (short) | | |- ! Packet 71 | 71 | Variable (byte) | | |- ! Packet 72 | 72 | 8 | | |- ! Packet 73 | 73 | 3 | | |- ! Packet 74 | 74 | 6 | | |- ! Packet 75 | 75 | 4 | | |- ! Packet 76 | 76 | 7 | | |- ! Packet 77 | 77 | 3 | | |- ! Packet 78 | 78 | 4 | | |- ! Packet 79 | 79 | 1 | | |- ! Packet 80 | 80 | 6 | | |- ! Packet 81 | 81 | 10 | | |- ! Packet 82 | 82 | Variable (short) | | |- ! Packet 83 | 83 | 1 | | |- ! Packet 84 | 84 | Variable (short) | | |- ! Packet 85 | 85 | 0 | | |- ! Packet 86 | 86 | Variable (short) | | |- ! Packet 87 | 87 | 8 | | |- ! Packet 88 | 88 | Variable (byte) | | |- ! Packet 89 | 89 | 8 | | |- ! Packet 90 | 90 | Variable (byte) | | |- ! Packet 91 | 91 | 10 | | |- ! Packet 92 | 92 | 28 | | |- ! Packet 93 | 93 | 12 | | |- ! Packet 94 | 94 | 0 | | |- ! Packet 95 | 95 | Variable (short) | | |- ! Packet 96 | 96 | Variable (byte) | | |- ! Packet 97 | 97 | 8 | | |- ! Packet 98 | 98 | Variable (byte) | | |- ! Packet 99 | 99 | Variable (short) | | |- ! Packet 100 | 100 | 3 | | |- ! Packet 101 | 101 | 4 | | |- ! Packet 102 | 102 | 5 | | |- ! Packet 103 | 103 | 0 | | |- ! Packet 104 | 104 | 1 | | |- ! Packet 105 | 105 | 6 | | |- ! Packet 106 | 106 | Variable (byte) | | |- ! Packet 107 | 107 | 5 | | |- ! Packet 108 | 108 | 9 | | |- ! Packet 109 | 109 | 6 | | |- ! Packet 110 | 110 | 2 | | |- ! Packet 111 | 111 | 3 | | |- ! Packet 112 | 112 | Variable (short) | | |- ! Packet 113 | 113 | 1 | | |- ! Packet 114 | 114 | Variable (byte) | | |- ! Packet 115 | 115 | 6 | | |- ! Packet 116 | 116 | 12 | | |- ! Packet 117 | 117 | Variable (byte) | | |- ! Packet 118 | 118 | Variable (byte) | | |- ! Packet 119 | 119 | 11 | | |- ! Packet 120 | 120 | 6 | | |- ! Packet 121 | 121 | 4 | | |- ! Packet 122 | 122 | Variable (short) | | |- ! Packet 123 | 123 | 3 | | |- ! Packet 124 | 124 | 7 | | |- ! Packet 125 | 125 | 0 | | |- ! Packet 126 | 126 | 0 | | |- ! Packet 127 | 127 | Variable (byte) | | |- ! Packet 128 | 128 | 0 | | |- ! Packet 129 | 129 | 2 | | |- ! Packet 130 | 130 | Variable (byte) | | |- ! Packet 131 | 131 | 6 | | |- ! Packet 132 | 132 | 5 | | |- ! Packet 133 | 133 | 6 | | |- ! Packet 134 | 134 | Variable (short) | | |- ! Packet 135 | 135 | 6 | | |- ! Packet 136 | 136 | 6 | | |- ! Packet 137 | 137 | 2 | | |- ! Packet 138 | 138 | Variable (short) | | |- ! Packet 139 | 139 | 7 | | |- ! Packet 140 | 140 | 1 | | |- ! Packet 141 | 141 | Variable (short) | | |- ! Packet 142 | 142 | 10 | | |- ! Packet 143 | 143 | 6 | | |- ! Packet 144 | 144 | Variable (byte) | | |- |}
== '''Update Protocol''' ==
This section documents the communication between the client and server over the connection used to stream resources.
=== '''Handshake Response''' ===
After receiving a handshake for the update protocol, the server responds with one of the following packets:
{
! Name ! Id ! Fields ! Description |- ! OK | 0 | style="text-align: left" | * required_resource_sizes: int32[27] | Indicates a successful connection. |- ! OUT_OF_DATE | 6 | None | Indicates that the client is outdated. |- ! SERVER_FULL | 7 | None | Indicates that the server is full at the moment. |- ! IP_LIMIT | 9 | None | Indicates that the client is being rate limited. |- |}
=== '''Packets''' === This section documents the packets sent between the client and server over the update connection.
==== '''Client-to-Server''' ==== All packets sent by the client are 4 bytes long. Each packet includes a 1-byte opcode and a 3-byte payload.
{
! Name ! Opcode ! Fields ! Description |- ! Prefetch Request | 0 | style="text-align: left" | * index: int8 * file: int16 | A passive request for a resource. |- ! Urgent Request | 1 | style="text-align: left" | * index: int8 * file: int16 | An urgent request for a resource. |- ! Client Logged In | 2 | style="text-align: left" | * padding: int24 | Indicates that the client has logged in. May be useful for adjusting response rate. |- ! Client Logged Out | 3 | style="text-align: left" | * padding: int24 | Indicates that the client has logged out. May be useful for adjusting response rate. |- ! Update XOR Code | 4 | style="text-align: left" | * xor_code: int8 * padding: int16 | Proposes a code to be used to encrypt all traffic. May be used to bypass firewalls or related software. |- ! Connection Information | 6 | style="text-align: left" | * version: int24 | Sent after a connection is established. The ''version'' field always has the value 3. |- ! Drop Request Queue | 7 | style="text-align: left" | * padding: int24 | Asks for currently pending requests to be dropped by the server. This packet is restricted to administrators by the client. |- |}
==== '''Server-to-Client''' ==== The server responds to the client's requests for particular resources by sending back the (possibly compressed) files. The data is in the following format:
{
! Field ! Description |- | index: int8 | The resource's index. |- | file: int16 | The resource's file number. |- | compression_type: int8 | The compression type of the file. Can be 0 (uncompressed), 1 (compressed using BZIP2), or 2 (compressed using GZIP). |- | file_size: int32 | The (possibly compressed) size of the file. |- | uncompressed_size: int32 | The uncompressed size of the file. This is only present if the file is compressed (i.e. the ''compression_type'' field is set to 1 or 2). |- | data: int8[file_size] | The (possibly compressed) file data. |- |}
Of particular note is that the response is grouped into 512-byte blocks. For every block after the first, the first byte of the block '''must''' be 0xff (decimal 255).
In addition, if the client has updated its XOR code to be nonzero, the server must XOR each byte of the response with the chosen code before it sends it to the client.
[[Category RS2]]
== '''Packet structure''' == When the client sends a packet to the server, the first byte encapsulates its opcode. This specific opcode is encrypted with a value generated by the ISAAC PRNG seeded with a dynamically server generated key during the login block. The server decrypts it and associates the opcode to the packet's respective predefined size. If the packet does not contain a fixed size, the opcode will be followed by either a byte or a word - varying per packet - for its proper size. This is then followed by the payload.
== '''Login''' == Every connection to the main 'gateway' server sends a single byte of data, mostly well known as the connection type. The connection type tells the main server which type of connection you wish to initiate. The old engine list consists of:
- Login initiation - connection type 14
- JAGGRAB - connection type 15
- Create account - connection type 28
- Facebook login - connection type 29
- Potentially more...
Needs documentation on how to login===Server -\> Client Packets=== {\| border=2 \|- ! Opcode ! Type ! Length (bytes) ! Name ! Description \|- \| 69 \| VARIABLE\_SHORT \| - \| \[\[668 System update\|System update\]\] \| Displays the system update counter on the player's client. \|- \|}
===Client -> Server Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 63 | FIXED | 6 | [[508 Dialogue Options|Dialogue Options.]] | Sent when a player clicks an dialogue button. The data sent is InterfaceId, buttonId, and something yet not discovered. |- |}
[[Category Packet]] [[Category Packet 718]] [[Category RS2]]
== '''Packet structure''' == ?
== '''Login''' == ?
== '''Game Protocol''' ==
===Server -> Client Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 2 | VARIABLE_SHORT | -2 | [[718 Friends packet|Friends packet]] | Sends a friend to the friend list. |- | 5 | FIXED | 4 | [[718 Close window|Close window]] | Closes an interface. |- | 6 | FIXED | 1 | [[718 Player under NPC priority|Player under NPC priority]] | N/A |- | 9 | FIXED | 6 | [[718 Music effect|Music effect]] | Plays a music effect. |- | 10 | VARIABLE_BYTE | -1 | [[718 Set mouse|Set mouse]] | N/A |- | 11 | FIXED | -2 | [[718 World list|World list]] | Sends the world list. |- | 14 | FIXED | 23 | [[718 Interface|Interface]] | Opens an interface. |- | 17 | VARIABLE_SHORT | -2 | [[718 Open URL|Open URL]] | Opens a hyperlink. |- | 20 | FIXED | 16 | [[718 Projectile|Projectile]] | Plays a projectile. |- | 23 | FIXED | 4 | [[718 Player on IComponent|Music effect]] | N/A |- | 25 | FIXED | 1 | [[718 Run energy|Run energy]] | Sends the run energy. |- | 30 | VARIABLE_BYTE | -1 | [[718 Send friend quick chat|Send friend quick chat]] | Sends a friend a quick chat message. |- | 31 | FIXED | 8 | [[718 Model on IComponent|Model on IComponent]] | Sends a model to an IComponent (child interface). |- | 32 | FIXED | -1 | [[718 Receive friend quick chat|Receive friend quick chat]] | Displays a received quick chat message to a friend. |- | 33 | VARIABLE_BYTE | -1 | [[718 Receive personal message|Receive personal message]] | Received a private message (PM) and displays it. |- | 39 | FIXED | 19 | [[718 Game pane|Game pane]] | Sends the game pane. |- | 40 | FIXED | 12 | [[718 IComponent Settings|IComponent Settings]] | N/A |- | 42 | VARIABLE_SHORT | -2 | [[718 Load map scene|Load map scene]] | Loads a map. |- | 44 | FIXED | 6 | [[718 Shake camera|Shake camera]] | Shakes the camera of the character. |- | 45 | FIXED | 2 | [[718 Destroy object|Destroy object]] | Removes an object from the screen. |- | 55 | VARIABLE_SHORT | -2 | [[718 Ignores|Ignores]] | Sends a player to a player's ignore list. |- |}
===Client -> Server Packets===
{
! Opcode ! Type ! Length (bytes) ! Name ! Description |- | 3 | FIXED | 16 | [[718 Item on item|Item on item]] | Send an item on item request. |- | 4 | VARIABLE_BYTE | -1 | [[718 Add ignore|Add ignore]] | Sends a request to add a person to a person's ignore list. |- | 8 | VARIABLE_BYTE | -1 | [[718 Walk|Walk]] | Sends a request to walk to specific coordinates. |- | 9 | FIXED | 3 | [[718 NPC Examine|NPC Examine]] | Sends a request to examine an NPC. |- |}
[[Category Packet]] [[Category Packet 718]] {{packet|name=Close window|description=Closes a window/interface.|opcode=5|type=Fixed|length=4|revision=718}} == Close window ==
=== Description ===
Closes an interface that is displayed (NOT CHATBOX INTERFACES!).
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Little Endian|Little Endian]] [[Data Types#Standard data types|Int]] || Window ID. |}
[[Category Packet]] [[Category Packet 718]] {{packet|name=Friends packet|description=Sends friend data to the client|opcode=2|type=VARIABLE_SHORT|length=-2|revision=718}} == Friends packet ==
=== Description ===
Sends friend data to the client
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | [[Data Types#Standard data types|Short]] || If it is a warning message. |- | [[Data Types#Standard data types|String]] || Display name |- | [[Data Types#Standard data types|String]] || If the display name does not equal the player's username, then this sends the username |- | [[Data Types#Standard data types|Short]] || The World ID |- | [[Data Types#Standard data types|Byte]] || The player's rank |}
[[Category Packet]] [[Category Packet 718]] {{packet|name=Send Interface|description=Sends an interface to be opened.|opcode=14|type=Fixed|length=23|revision=718}} == Send Interface ==
=== Description ===
Opens an interface (NOT CHATBOX INTERFACES!).
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | Short || The interface ID. |- | Int || ? |- | Int V2 || ? |- | Int V1 || Window ID. |- | Byte || If it is a walkable interface (1) or not (0). |- | Int V1 || ? |- | Int V2 || ? |}
[[Category Packet]] [[Category Packet 718]] {{packet|name=Music effect|description=Plays a music effect.|opcode=9|type=Fixed|length=6|revision=718}} == Music effect ==
=== Description ===
Plays a sound effect (like the birds chirping).
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | 128 Byte || The volume (0 - 255). |- | 24 Bit Integer V2 || ? |- | Short || Music effect ID. |}
[[Category Packet]] [[Category Packet 718]] {{packet|name=Open URL|description=Opens a hyperlink.|opcode=17|type=VARIABLE_SHORT|length=-2|revision=718}} == Close window ==
=== Description ===
Opens a hyperlink sent (doesn't write to the chatbox, just opens).
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | Byte || ? |- | String || The URL. |}
[[Category Packet]] [[Category Packet 718]] {{packet|name=Player under NPC priority|description=Prioritizes the player under the NPC.|opcode=6|type=Fixed|length=1|revision=718}} == Player under NPC priority ==
=== Description ===
Prioritizes the player under the NPC.
=== Packet Structure ===
{| border=2 ! Data type ! Description |- | Byte C || If is to prioritize (1) or not (0). |}
[[Category RS2]]
===Server -> Client Packets=== {| border=2 |- ! Opcode ! Type ! Size ! Name ! Description |- | 47 | Unknown | 23 | [[742 Interface Packet|Interface Packet]] | Produces an interface for the player to see. |- | 116 | Unknown | -1 | [[742 Commands Packet|Commands Packet]] | The packet to utilize commands. |- | 156 | Unknown | -3 | [[742 A Config Packet|A Config Packet]] | A packet to send one of the four/five types of configs. |- | 89 | Unknown | -2 | [[742 Maps Packet|Maps Packet]] | A packet that sends the loading of maps. |- | 90 | Unknown | -2 | [[742 Player Update Packet|Player Update Packet]] | A packet to update the player's appearance etcetera. |- | 72 | Unknown | -2 | [[742 NPC Update Packet|NPC Update Packet]] | A packet to update a NPC's appearance etcetera. |- | 29 | Unkown | -2 | [[742 RunScripts Packet|RunScripts Packet]] | A packet to send Runscripts. |- | 67 | Unkown | -2 | [[742 Items Packet|Items Packet]] | A packet to load items in a way? |- | 120 | Unkown | -1 | [[742 Friends Chat Receive Message Packet|Friends Chat Receive Message Packet]] | A packet that sends the FC message. |- | 147 | Unkown | 2 | [[742 System Update Packet|System Update Packet]] | A packet for the system update timer. |- | 6 | Unkown | 3 | [[742 World Tile Packet|World Tile Packet]] | A packet to send the World Tile. |- | 29 | Unkown | -2 | [[742 RunScripts Packet|RunScripts Packet]] | A packet to send Runscripts. |- | 40 | Unkown | 1 | [[742 Send Skills Packet|Send Skills Packet]] | A packet to send the skills of a player. |- |}