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.

What information do we collect?

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

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):

Loading diagram

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
  1. | 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
== '''Outgoing Data''' == '''TODO:''' Document packet structures
// 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
== '''Outgoing Data''' == '''TODO:''' Document packet structures
// 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

IDNameDescriptionWieldableStackable
0Iron MaceA spiky maceYN
1Iron Short SwordA razor sharp swordYN
2Iron Kite ShieldA large metal shieldYN
3Iron Square ShieldA medium metal shieldYN
4Wooden ShieldA solid wooden shieldYN
5Medium Iron HelmetA medium sized helmetYN
6Large Iron HelmetA full face helmetYN
7Iron Chain Mail BodyA series of connected metal ringsYN
8Iron Plate Mail BodyProvides excellent protectionYN
9Iron Plate Mail LegsThese look pretty heavyYN
10CoinsLovely money!NY
11Bronze ArrowsArrows with bronze headsNY
12Iron AxeA woodcutters axeYN
13KnifeA dangerous looking knifeNN
14LogsA number of wooden logsNN
15Leather ArmourBetter than no armour!YN
16Leather GlovesThese will keep my hands warm!YN
17BootsComfortable leather bootsYN
18CabbageYuck I don't like cabbageNN
19EggA nice fresh eggNN
20BonesEw it's a pile of bonesNN
21BucketIt's a wooden bucketNN
22MilkIt's a bucket of milkNN
23FlourA little heap of flourNN
24Amulet of GhostSpeakIt lets me talk to ghostsYN
25Silverlight key 1A key given to me by Wizard TraibornNN
26Silverlight key 2A key given to me by Captain RovinNN
27skullA spooky looking skullNN
28Iron daggerShort but pointyYN
29grainSome wheat headsNN
30Book
NN
31Fire-RuneOne of the 4 basic elemental runesNY
32Water-RuneOne of the 4 basic elemental runesNY
33Air-RuneOne of the 4 basic elemental runesNY
34Earth-RuneOne of the 4 basic elemental runesNY
35Mind-RuneUsed for low level missile spellsNY
36Body-RuneUsed for curse spellsNY
37Life-RuneUsed for summon spellsNY
38Death-RuneUsed for high level missile spellsNY
39NeedleUsed with a thread to make clothesNY
40Nature-RuneUsed for alchemy spellsNY
41Chaos-RuneUsed for mid level missile spellsNY
42Law-RuneUsed for teleport spellsNY
43ThreadUsed with a needle to make clothesNY
44Holy Symbol of saradominThis needs a string putting on itNN
45Unblessed Holy SymbolThis needs blessingYN
46Cosmic-RuneUsed for enchant spellsNY
47keyThe key to get into the phoenix gangNN
48keyThe key to the phoenix gang's weapons storeNN
49scrollAn intelligence ReportNN
50WaterIt's a bucket of waterNN
51Silverlight key 3A key I found in a drainNN
52SilverlightA magic swordYN
53Broken shieldHalf of the shield of ArravNN
54Broken shieldHalf of the shield of ArravNN
55CadavaberriesPoisonous berriesNN
56messageA message from Juliet to RomeoNN
57CadavaI'm meant to give this to JulietNN
58potionthis is meant to be good for spotsNN
59Phoenix CrossbowFormer property of the phoenix gangYN
60CrossbowThis fires crossbow boltsYN
61CertificateI can use this to claim a reward from the kingNN
62bronze daggerShort but pointyYN
63Steel daggerShort but pointyYN
64Mithril daggerShort but pointyYN
65Adamantite daggerShort but pointyYN
66Bronze Short SwordA razor sharp swordYN
67Steel Short SwordA razor sharp swordYN
68Mithril Short SwordA razor sharp swordYN
69Adamantite Short SwordA razor sharp swordYN
70Bronze Long SwordA razor sharp swordYN
71Iron Long SwordA razor sharp swordYN
72Steel Long SwordA razor sharp swordYN
73Mithril Long SwordA razor sharp swordYN
74Adamantite Long SwordA razor sharp swordYN
75Rune long swordA razor sharp swordYN
76Bronze 2-handed SwordA very large swordYN
77Iron 2-handed SwordA very large swordYN
78Steel 2-handed SwordA very large swordYN
79Mithril 2-handed SwordA very large swordYN
80Adamantite 2-handed SwordA very large swordYN
81rune 2-handed SwordA very large swordYN
82Bronze ScimitarA vicious curved swordYN
83Iron ScimitarA vicious curved swordYN
84Steel ScimitarA vicious curved swordYN
85Mithril ScimitarA vicious curved swordYN
86Adamantite ScimitarA vicious curved swordYN
87bronze AxeA woodcutters axeYN
88Steel AxeA woodcutters axeYN
89Iron battle AxeA vicious looking axeYN
90Steel battle AxeA vicious looking axeYN
91Mithril battle AxeA vicious looking axeYN
92Adamantite battle AxeA vicious looking axeYN
93Rune battle AxeA vicious looking axeYN
94Bronze MaceA spiky maceYN
95Steel MaceA spiky maceYN
96Mithril MaceA spiky maceYN
97Adamantite MaceA spiky maceYN
98Rune MaceA spiky maceYN
99Brass keyI wonder what this is the key toNN
100staffIt's a slightly magical stickYN
101Staff of AirA Magical staffYN
102Staff of waterA Magical staffYN
103Staff of earthA Magical staffYN
104Medium Bronze HelmetA medium sized helmetYN
105Medium Steel HelmetA medium sized helmetYN
106Medium Mithril HelmetA medium sized helmetYN
107Medium Adamantite HelmetA medium sized helmetYN
108Large Bronze HelmetA full face helmetYN
109Large Steel HelmetA full face helmetYN
110Large Mithril HelmetA full face helmetYN
111Large Adamantite HelmetA full face helmetYN
112Large Rune HelmetA full face helmetYN
113Bronze Chain Mail BodyA series of connected metal ringsYN
114Steel Chain Mail BodyA series of connected metal ringsYN
115Mithril Chain Mail BodyA series of connected metal ringsYN
116Adamantite Chain Mail BodyA series of connected metal ringsYN
117Bronze Plate Mail BodyProvides excellent protectionYN
118Steel Plate Mail BodyProvides excellent protectionYN
119Mithril Plate Mail BodyProvides excellent protectionYN
120Adamantite Plate Mail BodyProvides excellent protectionYN
121Steel Plate Mail LegsThese look pretty heavyYN
122Mithril Plate Mail LegsThese look pretty heavyYN
123Adamantite Plate Mail LegsThese look pretty heavyYN
124Bronze Square ShieldA medium metal shieldYN
125Steel Square ShieldA medium metal shieldYN
126Mithril Square ShieldA medium metal shieldYN
127Adamantite Square ShieldA medium metal shieldYN
128Bronze Kite ShieldA large metal shieldYN
129Steel Kite ShieldA large metal shieldYN
130Mithril Kite ShieldA large metal shieldYN
131Adamantite Kite ShieldA large metal shieldYN
132cookedmeatMmm this looks tastyNN
133raw chickenI need to cook this firstNN
134burntmeatOh dearNN
135potThis pot is emptyNN
136flourThere is flour in this potNN
137bread doughSome uncooked doughNN
138breadNice crispy breadNN
139burntbreadThis bread is ruined!NN
140jugThis jug is emptyNN
141waterIt's full of waterNN
142wineIt's full of wineNN
143grapesGood grapes for wine makingNN
144shearsFor shearing sheepNN
145woolI think this came from a sheepNN
146furThis would make warm clothingNN
147cow hideI should take this to the tanneryNN
148leatherIt's a piece of leatherNN
149claySome hard dry clayNN
150copper orethis needs refiningNN
151iron orethis needs refiningNN
152goldthis needs refiningNN
153mithril orethis needs refiningNN
154adamantite orethis needs refiningNN
155coalhmm a non-renewable energy source!NN
156Bronze PickaxeUsed for miningNN
157uncut diamondthis would be worth more cutNN
158uncut rubythis would be worth more cutNN
159uncut emeraldthis would be worth more cutNN
160uncut sapphirethis would be worth more cutNN
161diamondthis looks valuableNN
162rubythis looks valuableNN
163emeraldthis looks valuableNN
164sapphirethis looks valuableNN
165HerbI need a closer look to identify thisNN
166tinderboxuseful for lighting a fireNN
167chiselgood for detailed craftingNN
168hammergood for hitting things!NN
169bronze barit's a bar of bronzeNN
170iron barit's a bar of ironNN
171steel barit's a bar of steelNN
172gold barthis looks valuableNN
173mithril barit's a bar of mithrilNN
174adamantite barit's a bar of adamantiteNN
175Pressure gaugeIt looks like part of a machineNN
176Fish FoodKeeps your pet fish strong and healthyNN
177PoisonThis stuff looks nastyNN
178Poisoned fish foodDoesn't seem very nice to the poor fishesNN
179spinach rollA home made spinach thingNN
180Bad wineOh dearNN
181AshesA heap of ashesNN
182ApronA mostly clean apronYN
183CapeA bright red capeYN
184Wizards robeI can do magic better in thisYN
185wizardshatA silly pointed hatYN
186Brass necklaceI'd prefer a gold oneYN
187skirtA ladies skirtYN
188LongbowA Nice sturdy bowYN
189ShortbowShort but effectiveYN
190Crossbow boltsGood if you have a crossbow!NY
191Apronthis will help keep my clothes cleanYN
192Chef's hatWhat a silly hatYN
193BeerA glass of frothy aleNN
194skirtA ladies skirtYN
195skirtA ladies skirtYN
196Black Plate Mail BodyProvides excellent protectionYN
197Staff of fireA Magical staffYN
198Magic StaffA Magical staffYN
199wizardshatA silly pointed hatYN
200silkIt's a sheet of silkNN
201flierGet your axes from Bob's axesNN
202tin orethis needs refiningNN
203Mithril AxeA powerful axeYN
204Adamantite AxeA powerful axeYN
205bronze battle AxeA vicious looking axeYN
206Bronze Plate Mail LegsThese look pretty heavyYN
207Ball of woolSpun from sheeps woolNN
208Oil canIts pretty fullNN
209CapeA warm black capeYN
210KebabA meaty KebabNN
211SpadeA fairly small spadeNN
212Closet KeyA slightly smelly keyNN
213rubber tubeIts slightly charredNN
214Bronze Plated SkirtDesigner leg protectionYN
215Iron Plated SkirtDesigner leg protectionYN
216Black robeI can do magic better in thisYN
217stakeA very pointy stickYN
218GarlicA clove of garlicNN
219Red spiders eggseewwwNN
220Limpwurt rootthe root of a limpwurt plantNN
221Strength Potion4 doses of strength potionNN
222Strength Potion3 doses of strength potionNN
223Strength Potion2 doses of strength potionNN
224Strength Potion1 dose of strength potionNN
225Steel Plated skirtdesigner leg protectionYN
226Mithril Plated skirtDesigner Leg protectionYN
227Adamantite Plated skirtDesigner leg protectionYN
228CabbageYuck I don't like cabbageNN
229CapeA thick blue capeYN
230Large Black HelmetA full face helmetYN
231Red BeadA small round red beadNN
232Yellow BeadA small round yellow beadNN
233Black BeadA small round black beadNN
234White BeadA small round white beadNN
235Amulet of accuracyIt increases my aimYN
236RedberriesVery bright red berriesNN
237RopeA Coil of ropeNN
238ReddyeA little bottle of dyeNN
239YellowdyeA little bottle of dyeNN
240PasteA bottle off skin coloured pasteNN
241OnionA strong smelling onionNN
242Bronze keyA heavy keyNN
243Soft ClayClay that's ready to be usedNN
244wigA blonde wigNN
245wigA wig made from woolNN
246Half full wine jugIt's half full of wineNN
247KeyprintAn imprint of a key in a lump of clayNN
248Black Plate Mail LegsThese look pretty heavyYN
249bananaMmm this looks tastyNN
250pastry doughSome uncooked doughNN
251Pie dishFor making pies inNN
252cooking appleI wonder what i can make with thisNN
253pie shellI need to find a filling for this pieNN
254Uncooked apple pieI need to cook this firstNN
255Uncooked meat pieI need to cook this firstNN
256Uncooked redberry pieI need to cook this firstNN
257apple pieMmm Apple pieNN
258Redberry pieLooks tastyNN
259meat pieMighty and meatyNN
260burntpieOopsNN
261Half a meat pieMighty and meatyNN
262Half a Redberry pieLooks tastyNN
263Half an apple pieMmm Apple pieNN
264PortraitIt's a picture of a knightNN
265Faladian Knight's swordA razor sharp swordYN
266blurite oreWhat Strange stuffNN
267Asgarnian AleA glass of frothy aleNN
268Wizard's Mind BombIt's got strange bubbles in itNN
269Dwarven StoutA Pint of thick dark beerNN
270Eye of newtIt seems to be looking at meNN
271Rat's tailA bit of ratNN
272BluedyeA little bottle of dyeNN
273Goblin ArmourArmour Designed to fit GoblinsNN
274Goblin ArmourArmour Designed to fit GoblinsNN
275Goblin ArmourArmour Designed to fit GoblinsNN
276unstrung LongbowI need to find a string for thisNN
277unstrung shortbowI need to find a string for thisNN
278Unfired Pie dishI need to put this in a pottery ovenNN
279unfired potI need to put this in a pottery ovenNN
280arrow shaftsI need to attach feathers to theseNY
281Woad Leafslightly bluish leavesNY
282OrangedyeA little bottle of dyeNN
283Gold ringA valuable ringNN
284Sapphire ringA valuable ringNN
285Emerald ringA valuable ringNN
286Ruby ringA valuable ringNN
287Diamond ringA valuable ringNN
288Gold necklaceI wonder if this is valuableYN
289Sapphire necklaceI wonder if this is valuableYN
290Emerald necklaceI wonder if this is valuableYN
291Ruby necklaceI wonder if this is valuableYN
292Diamond necklaceI wonder if this is valuableYN
293ring mouldUsed to make gold ringsNN
294Amulet mouldUsed to make gold amuletsNN
295Necklace mouldUsed to make gold necklacesNN
296Gold AmuletIt needs a string so I can wear itNN
297Sapphire AmuletIt needs a string so I can wear itNN
298Emerald AmuletIt needs a string so I can wear itNN
299Ruby AmuletIt needs a string so I can make wear itNN
300Diamond AmuletIt needs a string so I can wear itNN
301Gold AmuletI wonder if I can get this enchantedYN
302Sapphire AmuletI wonder if I can get this enchantedYN
303Emerald AmuletI wonder if I can get this enchantedYN
304Ruby AmuletI wonder if I can get this enchantedYN
305Diamond AmuletI wonder if I can get this enchantedYN
306superchiselI wonder if I can get this enchantedNN
307Mace of ZamorakThis mace gives me the creepsYN
308Bronze Plate Mail topArmour designed for femalesYN
309Steel Plate Mail topArmour designed for femalesYN
310Mithril Plate Mail topArmour designed for femalesYN
311Adamantite Plate Mail topArmour designed for femalesYN
312Iron Plate Mail topArmour designed for femalesYN
313Black Plate Mail topArmour designed for femalesYN
314Sapphire Amulet of magicIt improves my magicYN
315Emerald Amulet of protectionIt improves my defenseYN
316Ruby Amulet of strengthIt improves my damageYN
317Diamond Amulet of powerA powerful amuletYN
318Karamja RumA very strong spirit brewed in KaramjaNN
319CheeseIt's got holes in itNN
320TomatoThis would make good ketchupNN
321Pizza BaseI need to add some tomato nextNN
322Burnt PizzaOh dear!NN
323Incomplete PizzaI need to add some cheese nextNN
324Uncooked PizzaThis needs cookingNN
325Plain PizzaA cheese and tomato pizzaNN
326Meat PizzaA pizza with bits of meat on itNN
327Anchovie PizzaA Pizza with AnchoviesNN
328Half Meat PizzaHalf of this pizza has been eatenNN
329Half Anchovie PizzaHalf of this pizza has been eatenNN
330CakeA plain sponge cakeNN
331Burnt CakeArgh what a mess!NN
332Chocolate CakeThis looks very tasty!NN
333Partial CakeSomeone has eaten a big chunk of this cakeNN
334Partial Chocolate CakeSomeone has eaten a big chunk of this cakeNN
335Slice of CakeI'd rather have a whole cake!NN
336Chocolate SliceA slice of chocolate cakeNN
337Chocolate BarIt's a bar of chocolateNN
338Cake TinUseful for baking cakesNN
339Uncooked cakeNow all I need to do is cook itNN
340Unfired bowlI need to put this in a pottery ovenNN
341BowlUseful for mixing thingsNN
342Bowl of waterIt's a bowl of waterNN
343Incomplete stewI need to add some meat tooNN
344Incomplete stewI need to add some potato tooNN
345Uncooked stewI need to cook thisNN
346StewIt's a meat and potato stewNN
347Burnt StewEew it's horribly burntNN
348PotatoCan be used to make stewNN
349Raw ShrimpI should try cooking thisNN
350ShrimpSome nicely cooked fishNN
351Raw AnchoviesI should try cooking thisNN
352AnchoviesSome nicely cooked fishNN
353Burnt fishOops!NN
354Raw SardineI should try cooking thisNN
355SardineSome nicely cooked fishNN
356Raw SalmonI should try cooking thisNN
357SalmonSome nicely cooked fishNN
358Raw TroutI should try cooking thisNN
359TroutSome nicely cooked fishNN
360Burnt fishOops!NN
361Raw HerringI should try cooking thisNN
362HerringSome nicely cooked fishNN
363Raw PikeI should try cooking thisNN
364PikeSome nicely cooked fishNN
365Burnt fishOops!NN
366Raw TunaI should try cooking thisNN
367TunaWow this is a big fishNN
368Burnt fishOops!NN
369Raw SwordfishI should try cooking thisNN
370SwordfishI'd better be careful eating this!NN
371Burnt SwordfishOops!NN
372Raw LobsterI should try cooking thisNN
373LobsterThis looks tricky to eatNN
374Burnt LobsterOops!NN
375Lobster PotUseful for catching lobstersNN
376NetUseful for catching small fishNN
377Fishing RodUseful for catching sardine or herringNN
378Fly Fishing RodUseful for catching salmon or troutNN
379HarpoonUseful for catching really big fishNN
380Fishing BaitFor use with a fishing rodNY
381FeatherUsed for fly-fishingNY
382Chest keyA key to One eyed Hector's chestNN
383Silverthis needs refiningNN
384silver barthis looks valuableNN
385Holy Symbol of saradominThis improves my prayerYN
386Holy symbol mouldUsed to make Holy SymbolsNN
387Disk of ReturningUsed to get out of Thordur's blackholeNN
388Monks robeI feel closer to the God's when I am wearing thisYN
389Monks robeKeeps a monk's legs nice and warmYN
390Red keyA painted keyNN
391Orange KeyA painted keyNN
392yellow keyA painted keyNN
393Blue keyA painted keyNN
394Magenta keyA painted keyNN
395black keyA painted keyNN
396rune daggerShort but pointyYN
397Rune short swordA razor sharp swordYN
398rune ScimitarA vicious curved swordYN
399Medium Rune HelmetA medium sized helmetYN
400Rune Chain Mail BodyA series of connected metal ringsYN
401Rune Plate Mail BodyProvides excellent protectionYN
402Rune Plate Mail LegsThese look pretty heavyYN
403Rune Square ShieldA medium metal shieldYN
404Rune Kite ShieldA large metal shieldYN
405rune AxeA powerful axeYN
406Rune skirtDesigner leg protectionYN
407Rune Plate Mail topArmour designed for femalesYN
408Runite barit's a bar of runiteNN
409runite orethis needs refiningNN
410PlankThis doesn't look very usefulNN
411TileThis doesn't look very usefulNN
412skullA spooky looking skullNN
413Big BonesEw it's a pile of bonesNN
414Muddy keyIt looks like a key to a chestNN
415MapA map showing the way to the Isle of CrandorNN
416Map PieceI need some more of the map for this to be usefulNN
417Map PieceI need some more of the map for this to be usefulNN
418Map PieceI need some more of the map for this to be usefulNN
419NailsNails made from steelNY
420Anti dragon breath ShieldHelps prevent damage from dragonsYN
421Maze keyThe key to the entrance of Melzar's mazeNN
422PumpkinHappy halloweenNN
423Black daggerShort but pointyYN
424Black Short SwordA razor sharp swordYN
425Black Long SwordA razor sharp swordYN
426Black 2-handed SwordA very large swordYN
427Black ScimitarA vicious curved swordYN
428Black AxeA sinister looking axeYN
429Black battle AxeA vicious looking axeYN
430Black MaceA spikey maceYN
431Black Chain Mail BodyA series of connected metal ringsYN
432Black Square ShieldA medium metal shieldYN
433Black Kite ShieldA large metal shieldYN
434Black Plated skirtdesigner leg protectionYN
435HerbI need a closer look to identify thisNN
436HerbI need a closer look to identify thisNN
437HerbI need a closer look to identify thisNN
438HerbI need a closer look to identify thisNN
439HerbI need a closer look to identify thisNN
440HerbI need a closer look to identify thisNN
441HerbI need a closer look to identify thisNN
442HerbI need a closer look to identify thisNN
443HerbI need a closer look to identify thisNN
444Guam leafA herb used in attack potion makingNN
445MarrentillA herb used in poison curesNN
446TarrominA useful herbNN
447HarralanderA useful herbNN
448Ranarr WeedA useful herbNN
449Irit LeafA useful herbNN
450AvantoeA useful herbNN
451KwuarmA powerful herbNN
452CadantineA powerful herbNN
453Dwarf WeedA powerful herbNN
454Unfinished potionI need another ingredient to finish this Guam potionNN
455Unfinished potionI need another ingredient to finish this Marrentill potionNN
456Unfinished potionI need another ingredient to finish this Tarromin potionNN
457Unfinished potionI need another ingredient to finish this Harralander potionNN
458Unfinished potionI need another ingredient to finish this Ranarr potionNN
459Unfinished potionI need another ingredient to finish this Irit potionNN
460Unfinished potionI need another ingredient to finish this Avantoe potionNN
461Unfinished potionI need another ingredient to finish this Kwuarm potionNN
462Unfinished potionI need another ingredient to finish this Cadantine potionNN
463Unfinished potionI need another ingredient to finish this Dwarfweed potionNN
464VialIt's full of waterNN
465VialThis vial is emptyNN
466Unicorn hornPoor unicornNN
467Blue dragon scaleA large shiny scaleNN
468Pestle and mortarI can grind things for potions in thisNN
469Snape grassStrange spikey grassNN
470Medium black HelmetA medium sized helmetYN
471White berriesPoisonous berriesNN
472Ground blue dragon scaleThis stuff isn't good for youNN
473Ground unicorn hornA useful potion ingredientNN
474attack Potion3 doses of attack potionNN
475attack Potion2 doses of attack potionNN
476attack Potion1 dose of attack potionNN
477stat restoration Potion3 doses of stat restoration potionNN
478stat restoration Potion2 doses of stat restoration potionNN
479stat restoration Potion1 dose of stat restoration potionNN
480defense Potion3 doses of defense potionNN
481defense Potion2 doses of defense potionNN
482defense Potion1 dose of defense potionNN
483restore prayer Potion3 doses of restore prayer potionNN
484restore prayer Potion2 doses of restore prayer potionNN
485restore prayer Potion1 dose of restore prayer potionNN
486Super attack Potion3 doses of attack potionNN
487Super attack Potion2 doses of attack potionNN
488Super attack Potion1 dose of attack potionNN
489fishing Potion3 doses of fishing potionNN
490fishing Potion2 doses of fishing potionNN
491fishing Potion1 dose of fishing potionNN
492Super strength Potion3 doses of strength potionNN
493Super strength Potion2 doses of strength potionNN
494Super strength Potion1 dose of strength potionNN
495Super defense Potion3 doses of defense potionNN
496Super defense Potion2 doses of defense potionNN
497Super defense Potion1 dose of defense potionNN
498ranging Potion3 doses of ranging potionNN
499ranging Potion2 doses of ranging potionNN
500ranging Potion1 dose of ranging potionNN
501wine of ZamorakIt's full of wineNN
502raw bear meatI need to cook this firstNN
503raw rat meatI need to cook this firstNN
504raw beefI need to cook this firstNN
505enchanted bear meatI don't fancy eating this nowNN
506enchanted rat meatI don't fancy eating this nowNN
507enchanted beefI don't fancy eating this nowNN
508enchanted chicken meatI don't fancy eating this nowNN
509Dramen StaffA magical staff cut from the dramen treeYN
510Dramen BranchI need to make this into a staffNN
511CapeA thick Green capeYN
512CapeA thick yellow capeYN
513CapeA thick Orange capeYN
514CapeA thick purple capeYN
515GreendyeA little bottle of dyeNN
516PurpledyeA little bottle of dyeNN
517Iron ore certificateEach certificate exchangable at draynor market for 5 iron oreNY
518Coal certificateEach certificate exchangable at draynor market for 5 coalNY
519Mithril ore certificateEach certificate exchangable at draynor market for 5 mithril oreNY
520silver certificateEach certificate exchangable at draynor market for 5 silver nuggetsNY
521Gold certificateEach certificate exchangable at draynor market for 5 gold nuggetsNY
522Dragonstone AmuletA very powerful amuletYN
523DragonstoneThis looks very valuableNN
524Dragonstone AmuletIt needs a string so I can wear itNN
525Crystal keyA very shiny keyNN
526Half of a keyA very shiny keyNN
527Half of a keyA very shiny keyNN
528Iron bar certificateEach certificate exchangable at draynor market for 5 iron barsNY
529steel bar certificateEach certificate exchangable at draynor market for 5 steel barsNY
530Mithril bar certificateEach certificate exchangable at draynor market for 5 mithril barsNY
531silver bar certificateEach certificate exchangable at draynor market for 5 silver barsNY
532Gold bar certificateEach certificate exchangable at draynor market for 5 gold barsNY
533Lobster certificateEach certificate exchangable at draynor market for 5 lobstersNY
534Raw lobster certificateEach certificate exchangable at draynor market for 5 raw lobstersNY
535Swordfish certificateEach certificate exchangable at draynor market for 5 swordfishNY
536Raw swordfish certificateEach certificate exchangable at draynor market for 5 raw swordfishNY
537DiaryProperty of Nora.T.HagNN
538Front door keyA house keyNN
539BallA child's ballNN
540magnetA very attractive magnetNN
541Grey wolf furThis would make warm clothingNN
542uncut dragonstonethis would be worth more cutNN
543Dragonstone ringA valuable ringNN
544Dragonstone necklaceI wonder if this is valuableYN
545Raw SharkI should try cooking thisNN
546SharkI'd better be careful eating this!NN
547Burnt SharkOops!NN
548Big NetUseful for catching lots of fishNN
549CasketI hope there is treasure in itNN
550Raw codI should try cooking thisNN
551CodSome nicely cooked fishNN
552Raw MackerelI should try cooking thisNN
553MackerelSome nicely cooked fishNN
554Raw BassI should try cooking thisNN
555BassWow this is a big fishNN
556Ice GlovesThese will keep my hands cold!YN
557Firebird FeatherA red hot featherNN
558Firebird FeatherThis is cool enough to hold nowNN
559Poisoned Iron daggerShort but pointyYN
560Poisoned bronze daggerShort but pointyYN
561Poisoned Steel daggerShort but pointyYN
562Poisoned Mithril daggerShort but pointyYN
563Poisoned Rune daggerShort but pointyYN
564Poisoned Adamantite daggerShort but pointyYN
565Poisoned Black daggerShort but pointyYN
566Cure poison Potion3 doses of cure poison potionNN
567Cure poison Potion2 doses of cure poison potionNN
568Cure poison Potion1 dose of cure poison potionNN
569Poison antidote3 doses of anti poison potionNN
570Poison antidote2 doses of anti poison potionNN
571Poison antidote1 dose of anti poison potionNN
572weapon poisonFor use on daggers and arrowsNN
573ID PaperID of Hartigen the black knightNN
574Poison Bronze ArrowsVenomous looking arrowsNY
575Christmas crackerUse on another player to pull itNN
576Party HatParty!!!YN
577Party HatParty!!!YN
578Party HatParty!!!YN
579Party HatParty!!!YN
580Party HatParty!!!YN
581Party HatParty!!!YN
582Miscellaneous keyI wonder what this unlocksNN
583Bunch of keysSome keys on a keyringNN
584WhiskyA bottle of Draynor MaltNN
585CandlestickA valuable candlestickNN
586Master thief armbandThis denotes a great act of thieveryNN
587Blamish snail slimeYuckNN
588Blamish oilmade from the finest snail slimeNN
589Oily Fishing RodA rod covered in Blamish oilNN
590lava eelStrange it looks cooler now it's been cookedNN
591Raw lava eelA very strange eelNN
592Poison Crossbow boltsGood if you have a crossbow!NY
593Dragon swordA Razor sharp swordYN
594Dragon axeA vicious looking axeYN
595Jail keysKeys to the black knight jailNN
596Dusty KeyA key given to me by VelrakNN
597Charged Dragonstone AmuletA very powerful amuletYN
598GrogA murky glass of some sort of drinkNN
599CandleAn unlit candleNN
600black CandleA spooky but unlit candleNN
601CandleA small slowly burning candleNN
602black CandleA spooky candleNN
603insect repellantDrives away all known 6 legged creaturesNN
604Bat bonesEw it's a pile of bonesNN
605wax BucketIt's a wooden bucketNN
606ExcaliburThis used to belong to king ArthurYN
607Druids robeI feel closer to the Gods when I am wearing thisYN
608Druids robeKeeps a druids's knees nice and warmYN
609Eye patchIt makes me look very piraticalYN
610Unenchanted Dragonstone AmuletI wonder if I can get this enchantedYN
611Unpowered orbI'd prefer it if it was poweredNN
612Fire orbA magic glowing orbNN
613Water orbA magic glowing orbNN
614BattlestaffIt's a slightly magical stickYN
615Battlestaff of fireA Magical staffYN
616Battlestaff of waterA Magical staffYN
617Battlestaff of airA Magical staffYN
618Battlestaff of earthA Magical staffYN
619Blood-RuneUsed for high level missile spellsNY
620Beer glassI need to fill this with beerNN
621glassblowing pipeUse on molten glass to make thingsNN
622seaweedslightly damp seaweedNN
623molten glasshot glass ready to be blownNN
624soda ashone of the ingredients for making glassNN
625sandone of the ingredients for making glassNN
626air orbA magic glowing orbNN
627earth orbA magic glowing orbNN
628bass certificateEach certificate exchangable at Catherby for 5 bassNY
629Raw bass certificateEach certificate exchangable at Catherby for 5 raw bassNY
630shark certificateEach certificate exchangable at Catherby for 5 sharkNY
631Raw shark certificateEach certificate exchangable at Catherby for 5 raw sharkNY
632Oak LogsLogs cut from an oak treeNN
633Willow LogsLogs cut from a willow treeNN
634Maple LogsLogs cut from a maple treeNN
635Yew LogsLogs cut from a yew treeNN
636Magic LogsLogs made from magical woodNN
637Headless ArrowsI need to attach arrow heads to theseNY
638Iron ArrowsArrows with iron headsNY
639Poison Iron ArrowsVenomous looking arrowsNY
640Steel ArrowsArrows with steel headsNY
641Poison Steel ArrowsVenomous looking arrowsNY
642Mithril ArrowsArrows with mithril headsNY
643Poison Mithril ArrowsVenomous looking arrowsNY
644Adamantite ArrowsArrows with adamantite headsNY
645Poison Adamantite ArrowsVenomous looking arrowsNY
646Rune ArrowsArrows with rune headsNY
647Poison Rune ArrowsVenomous looking arrowsNY
648Oak LongbowA Nice sturdy bowYN
649Oak ShortbowShort but effectiveYN
650Willow LongbowA Nice sturdy bowYN
651Willow ShortbowShort but effectiveYN
652Maple LongbowA Nice sturdy bowYN
653Maple ShortbowShort but effectiveYN
654Yew LongbowA Nice sturdy bowYN
655Yew ShortbowShort but effectiveYN
656Magic LongbowA Nice sturdy bowYN
657Magic ShortbowShort but effectiveYN
658unstrung Oak LongbowI need to find a string for thisNN
659unstrung Oak ShortbowI need to find a string for thisNN
660unstrung Willow LongbowI need to find a string for thisNN
661unstrung Willow ShortbowI need to find a string for thisNN
662unstrung Maple LongbowI need to find a string for thisNN
663unstrung Maple ShortbowI need to find a string for thisNN
664unstrung Yew LongbowI need to find a string for thisNN
665unstrung Yew ShortbowI need to find a string for thisNN
666unstrung Magic LongbowI need to find a string for thisNN
667unstrung Magic ShortbowI need to find a string for thisNN
668barcrawl cardThe official Alfred Grimhand barcrawlNN
669bronze arrow headsNot much use without the rest of the arrow!NY
670iron arrow headsNot much use without the rest of the arrow!NY
671steel arrow headsNot much use without the rest of the arrow!NY
672mithril arrow headsNot much use without the rest of the arrow!NY
673adamantite arrow headsNot much use without the rest of the arrow!NY
674rune arrow headsNot much use without the rest of the arrow!NY
675flaxI should use this with a spinning wheelNN
676bow stringI need a bow handle to attach this tooNN
677Easter eggHappy EasterNN
678scorpion cageI need to catch some scorpions in thisNN
679scorpion cageIt has 1 scorpion in itNN
680scorpion cageIt has 2 scorpions in itNN
681scorpion cageIt has 3 scorpions in itNN
682Enchanted Battlestaff of fireA Magical staffYN
683Enchanted Battlestaff of waterA Magical staffYN
684Enchanted Battlestaff of airA Magical staffYN
685Enchanted Battlestaff of earthA Magical staffYN
686scorpion cageIt has 1 scorpion in itNN
687scorpion cageIt has 1 scorpion in itNN
688scorpion cageIt has 2 scorpions in itNN
689scorpion cageIt has 2 scorpions in itNN
690goldthis needs refiningNN
691gold barthis looks valuableNN
692Ruby ringA valuable ringNN
693Ruby necklaceI wonder if this is valuableYN
694Family crestThe crest of a varrocian noble familyNN
695Crest fragmentPart of the Fitzharmon family crestNN
696Crest fragmentPart of the Fitzharmon family crestNN
697Crest fragmentPart of the Fitzharmon family crestNN
698Steel gauntletsVery handy armourYN
699gauntlets of goldsmithingmetal gloves for gold makingYN
700gauntlets of cookingUsed for cooking fishYN
701gauntlets of chaosimproves bolt spellsYN
702robe of ZamorakA robe worn by worshippers of ZamorakYN
703robe of ZamorakA robe worn by worshippers of ZamorakYN
704Address LabelTo lord Handelmort- Handelmort mansionNN
705Tribal totemIt represents some sort of tribal godNN
706tourist guideYour definitive guide to ArdougneNN
707spicePut it in uncooked stew to make curryNN
708Uncooked curryI need to cook thisNN
709curryIt's a spicey hot curryNN
710Burnt curryEew it's horribly burntNN
711yew logs certificateEach certificate exchangable at Ardougne for 5 yew logsNY
712maple logs certificateEach certificate exchangable at Ardougne for 5 maple logsNY
713willow logs certificateEach certificate exchangable at Ardougne for 5 willow logsNY
714lockpickIt makes picking some locks easierNN
715Red vine wormsStrange little red wormsNY
716BlanketA child's blanketNN
717Raw giant carpI should try cooking thisNN
718giant CarpSome nicely cooked fishNN
719Fishing competition PassAdmits one to the Hemenster fishing competitionNN
720Hemenster fishing trophyHurrah you won a fishing competitionNN
721Pendant of LucienGets me through the chamber of fearYN
722Boots of lightfootednessWearing these makes me feel like I am floatingYN
723Ice ArrowsCan only be fired with yew or magic bowsNY
724LeverThis was once attached to somethingNN
725Staff of ArmadylA Magical staffYN
726Pendant of ArmadylAllows me to fight LucienYN
727Large cogA large old cogNN
728Large cogA large old cogNN
729Large cogA large old cogNN
730Large cogA large old cogNN
731Rat PoisonThis stuff looks nastyNN
732shiny KeyQuite a small keyNN
733khazard HelmetA medium sized helmetYN
734khazard chainmailA series of connected metal ringsYN
735khali brewA bottle of khazard's worst brewNN
736khazard cell keysKeys for General Khazard's cellsNN
737Poison chaliceA strange looking drinkNN
738magic whistleA small tin whistleNN
739Cup of teaA nice cup of teaNN
740orb of protectiona strange glowing green orbNN
741orbs of protectiontwo strange glowing green orbsNN
742Holy table napkina cloth given to me by sir GalahadNN
743bellI wonder what happens when i ring itNN
744Gnome Emerald Amulet of protectionIt improves my defenseYN
745magic golden featherIt will point the way for meNN
746Holy grailA holy and powerful artifactNN
747Script of HazeelAn old scroll with strange ancient textNN
748PineappleIt can be cut up with a knifeNN
749Pineapple ringExotic fruitNN
750Pineapple PizzaA tropicana pizzaNN
751Half pineapple PizzaHalf of this pizza has been eatenNN
752Magic scrollMaybe I should read itNN
753Mark of HazeelA large metal amuletNN
754bloody axe of zamorakA vicious looking axeYN
755carnillean armourthe carnillean family armourNN
756Carnillean KeyAn old rusty keyNN
757Cattle prodAn old cattle prodNN
758Plagued sheep remainsThese sheep remains are infectedNN
759Poisoned animal feedThis looks nastyNN
760Protective jacketA thick heavy leather topYN
761Protective trousersA thick pair of leather trousersYN
762Plagued sheep remainsThese sheep remains are infectedNN
763Plagued sheep remainsThese sheep remains are infectedNN
764Plagued sheep remainsThese sheep remains are infectedNN
765dwellberriessome rather pretty blue berriesNN
766GasmaskStops me breathing nasty stuffYN
767pictureA picture of a lady called ElenaNN
768BookTurnip growing for beginnersNN
769Seasluga rather nasty looking crustaceanNN
770chocolaty milkMilk with chocolate in itNN
771Hangover cureIt doesn't look very tastyNN
772Chocolate dustI prefer it in a bar shapeNN
773TorchA unlit home made torchNN
774TorchA lit home made torchNN
775warrantA search warrant for a house in ArdougneNN
776Damp sticksSome damp wooden sticksNN
777Dry sticksSome dry wooden sticksNN
778Broken glassGlass from a broken window paneNN
779oyster pearlsI could work wonders with these and a chiselNN
780little keyQuite a small keyNN
781Scruffy noteIt seems to say hongorer lureNN
782Glarial's amuletA bright green gem set in a necklaceYN
783Swamp tarA foul smelling thick tar like substanceNY
784Uncooked Swamp pasteA thick tar like substance mixed with flourNY
785Swamp pasteA tar like substance mixed with flour and warmedNY
786Oyster pearl boltsGreat if you have a crossbow!NY
787Glarials pebbleA small pebble with elven inscriptionNN
788book on baxtorianA book on elven history in north runescapeNN
789large keyI wonder what this is the key toNN
790Oyster pearl bolt tipsCan be used to improve crossbow boltsNY
791oysterIt's emptyNN
792oyster pearlsI could work wonders with these and a chiselNN
793oysterIt's a rare oysterNN
794SoilIt's a bucket of fine soilNN
795Dragon medium HelmetA medium sized helmetYN
796Mithril seedMagical seeds in a mithril caseNY
797An old keyA door keyNN
798pigeon cageIt's for holding pigeonsNN
799Messenger pigeonssome very plump birdsNN
800Bird feedA selection of mixed seedsNN
801Rotten applesYuck!NN
802Doctors gownI do feel clever wearing thisYN
803Bronze keyA heavy keyNN
804DistillatorIt's for seperating compoundsNN
805Glarial's urnAn urn containing glarials ashesNN
806Glarial's urnAn empty metal urnNN
807Priest robeI feel closer to saradomin in thisYN
808Priest gownI feel closer to saradomin in thisYN
809Liquid HoneyThis isn't worth muchNN
810EtheneaAn expensive colourless liquidNN
811Sulphuric Brolineit's highly poisonousNN
812Plague sampleAn air tight tin containerNN
813Touch paperFor scientific testingNN
814Dragon BonesEw it's a pile of bonesNN
815HerbI need a closer look to identify thisNN
816Snake WeedA very rare jungle herbNN
817HerbI need a closer look to identify thisNN
818ArdrigalAn interestingNN
819HerbI need a closer look to identify thisNN
820Sito FoilAn rare species of jungle herbNN
821HerbI need a closer look to identify thisNN
822Volencia MossA very rare species of jungle herbNN
823HerbI need a closer look to identify thisNN
824Rogues PurseA rare species of jungle herbNN
825Soul-RuneUsed for high level curse spellsNY
826king lathas AmuletThe amulet is redYN
827Bronze SpearA bronze tipped spearYN
828halloween maskaaaarrrghhh ... i'm a monsterYN
829Dragon bitterA glass of frothy aleNN
830Greenmans aleA glass of frothy aleNN
831halloween maskaaaarrrghhh ... i'm a monsterYN
832halloween maskaaaarrrghhh ... i'm a monsterYN
833cocktail glassFor sipping cocktailsNN
834cocktail shakerFor mixing cocktailsNN
835Bone KeyA key delicately carved key made from a single piece of boneNN
836gnome robeA high fashion robeYN
837gnome robeA high fashion robeYN
838gnome robeA high fashion robeYN
839gnome robeA high fashion robeYN
840gnome robeA high fashion robeYN
841gnomeshatA silly pointed hatYN
842gnomeshatA silly pointed hatYN
843gnomeshatA silly pointed hatYN
844gnomeshatA silly pointed hatYN
845gnomeshatA silly pointed hatYN
846gnome toprometti - the ultimate in gnome designYN
847gnome toprometti - the only name in gnome fashion!YN
848gnome toprometti - the only name in gnome fashion!YN
849gnome toprometti - the only name in gnome fashion!YN
850gnome toprometti - the only name in gnome fashion!YN
851gnome cocktail guideA book on tree gnome cocktailsNN
852Beads of the deadA curious looking neck ornamentYN
853cocktail glassFor sipping cocktailsNN
854cocktail glassFor sipping cocktailsNN
855lemonIt's very freshNN
856lemon slicesIt's very freshNN
857orangeIt's very freshNN
858orange slicesIt's very freshNN
859Diced orangeFresh chunks of orangeNN
860Diced lemonFresh chunks of lemonNN
861Fresh PineappleIt can be cut up with a knifeNN
862Pineapple chunksFresh chunks of pineappleNN
863limeIt's very freshNN
864lime chunksFresh chunks of limeNN
865lime slicesIt's very freshNN
866fruit blastA cool refreshing fruit mixNN
867odd looking cocktailA cool refreshing mixNN
868WhiskyA locally brewed MaltNN
869vodkaA strong spiritNN
870ginA strong spiritNN
871creamFresh creamNN
872Drunk dragonA warm creamy alcoholic beverageNN
873Equa leavesSmall sweet smelling leavesNN
874SGGA short green guy..looks goodNN
875Chocolate saturdayA warm creamy alcoholic beverageNN
876brandyA strong spiritNN
877blurberry specialLooks good..smells strongNN
878wizard blizzardLooks like a strange mixNN
879pineapple punchA fresh healthy fruit mixNN
880gnomebatta doughDough formed into a baseNN
881gianne doughIt's made from a secret recipeNN
882gnomebowl doughDough formed into a bowl shapeNN
883gnomecrunchie doughDough formed into cookie shapesNN
884gnomebattaA baked dough baseNN
885gnomebowlA baked dough bowlNN
886gnomebattaIt's burnt to a sinderNN
887gnomecrunchieThey're burnt to a sinderNN
888gnomebowlIt's burnt to a sinderNN
889Uncut Red TopazA semi precious stoneNN
890Uncut JadeA semi precious stoneNN
891Uncut OpalA semi precious stoneNN
892Red TopazA semi precious stoneNN
893JadeA semi precious stoneNN
894OpalA semi precious stoneNN
895Swamp ToadSlippery little blightersNN
896Toad legsGnome delicacy apparentlyNN
897King wormGnome delicacy apparentlyNN
898Gnome spiceAluft Giannes secret reciepeNN
899gianne cook bookAluft Giannes favorite dishesNN
900gnomecrunchieyum ... smells goodNN
901cheese and tomato battaSmells really goodNN
902toad battaactually smells quite goodNN
903gnome battasmells like pantsNN
904worm battaactually smells quite goodNN
905fruit battaactually smells quite goodNN
906Veg battawell..it looks healthyNN
907Chocolate bombLooks greatNN
908VegballLooks pretty healthyNN
909worm holeactually smells quite goodNN
910Tangled toads legsactually smells quite goodNN
911Choc crunchiesyum ... smells goodNN
912Worm crunchiesactually smells quite goodNN
913Toad crunchiesactually smells quite goodNN
914Spice crunchiesyum ... smells goodNN
915Crushed GemstoneA gemstone that has been smashedNN
916Blurberry badgean official cocktail makerNN
917Gianne badgean official gianne chefNN
918tree gnome translationTranslate the old gnome toungeNN
919Bark sampleA sample from the grand treeNN
920War shipA model of a karamja warshipNN
921gloughs journalGlough's private notesNN
922invoiceA note with foreman's timber orderNN
923Ugthanki KebabA strange smelling Kebab made from Ugthanki meat - it doesn't look too goodNN
924special curryIt's a spicy hot curryNN
925glough's keyGlough left this at anita'sNN
926glough's notesScribbled notes and diagramsNN
927PebbleThe pebble has an inscriptionNN
928PebbleThe pebble has an inscriptionNN
929PebbleThe pebble has an inscriptionNN
930PebbleThe pebble has an inscriptionNN
931Daconia rockA magicaly crafted stoneNN
932Sinister keyYou get a sense of dread from this keyNN
933HerbI need a closer look to identify thisNN
934TorstolA useful herbNN
935Unfinished potionI need Jangerberries to finish this Torstol potionNN
936JangerberriesThey don't look very ripeNN
937fruit blastA cool refreshing fruit mixNN
938blurberry specialLooks good..smells strongNN
939wizard blizzardLooks like a strange mixNN
940pineapple punchA fresh healthy fruit mixNN
941SGGA short green guy..looks goodNN
942Chocolate saturdayA warm creamy alcoholic beverageNN
943Drunk dragonA warm creamy alcoholic beverageNN
944cheese and tomato battaSmells really goodNN
945toad battaactually smells quite goodNN
946gnome battasmells like pantsNN
947worm battaactually smells quite goodNN
948fruit battaactually smells quite goodNN
949Veg battawell..it looks healthyNN
950Chocolate bombLooks greatNN
951VegballLooks pretty healthyNN
952worm holeactually smells quite goodNN
953Tangled toads legsactually smells quite goodNN
954Choc crunchiesyum ... smells goodNN
955Worm crunchiesactually smells quite goodNN
956Toad crunchiesactually smells quite goodNN
957Spice crunchiesyum ... smells goodNN
958Stone-PlaqueA stone plaque with carved letters in itNN
959Tattered ScrollAn ancient tattered scrollNN
960Crumpled ScrollAn ancient crumpled scrollNN
961Bervirius Tomb NotesNotes taken from the tomb of BerviriusNN
962Zadimus CorpseThe remains of ZadimusNN
963Potion of ZamorakIt looks scaryNN
964Potion of ZamorakIt looks scaryNN
965Potion of ZamorakIt looks scaryNN
966BootsThey're soft and silkyYN
967BootsThey're soft and silkyYN
968BootsThey're soft and silkyYN
969BootsThey're soft and silkyYN
970BootsThey're soft and silkyYN
971Santa's hatIt's a santa claus' hatYN
972Locating CrystalA magical crystal sphereNN
973Sword PommelAn ivory sword pommelNN
974Bone ShardA slender piece of boneNN
975Steel WireUseful for crafting itemsNN
976Bone BeadsBeads carved out of boneNN
977Rashiliya CorpseThe remains of the Zombie QueenNN
978ResetCrystalHelps reset things in gameNN
979Bronze WireUseful for crafting itemsNN
980PresentClick to use this on a friendNN
981Gnome BallLets playNN
982PapyrusUsed for making notesNN
983A lump of Charcoala lump of cooked coal good for making marks.NN
984Arrowlinen wrapped around an arrow headNN
985Lit ArrowA flamming arrowNY
986RocksA few Large rocksNN
987Paramaya Rest TicketAllows you to rest in the luxurius Paramaya InnNN
988Ship TicketAllows you passage on the 'Lady of the Waves' ship.NN
989Damp clothIt smells as if it's been doused in alcoholNN
990Desert BootsBoots made specially for the desertYN
991Orb of lightThe orb gives you a safe peaceful feelingNN
992Orb of lightThe orb gives you a safe peaceful feelingNN
993Orb of lightThe orb gives you a safe peaceful feelingNN
994Orb of lightThe orb gives you a safe peaceful feelingNN
995RailingA broken metal rodNN
996Randas's journalAn old journal with several pages missingNN
997Unicorn hornPoor unicorn went splat!NN
998Coat of ArmsA symbol of truth and all that is goodNN
999Coat of ArmsA symbol of truth and all that is goodNN
1000Staff of IbanIt's a slightly magical stickYN
1001Dwarf brewIt's a bucket of home made brewNN
1002Ibans AshesA heap of ashesNN
1003CatShe's sleeping..i think!NN
1004A Doll of IbanA strange doll made from sticks and clothNN
1005Old JournalI wonder who wrote this!NN
1006Klank's gauntletsHeavy hand protectionYN
1007Iban's shadowA dark mystical liquidNN
1008Iban's conscienceThe remains of a dove that died long agoNN
1009Amulet of OthainianA strange looking amuletYN
1010Amulet of DoomionA strange looking amuletYN
1011Amulet of HolthionA strange looking amuletYN
1012keep keyA small prison keyNN
1013Bronze Throwing DartA deadly throwing dart with a bronze tip.YX
1014Prototype Throwing DartA proto type of a deadly throwing dart.NY
1015Iron Throwing DartA deadly throwing dart with an iron tip.YX
1016Full Water SkinA skinful of waterNN
1017Lens mouldA peculiar mould in the shape of a discNN
1018LensA perfectly formed glass discNN
1019Desert RobeCool light robe to wear in the desertYN
1020Desert ShirtA light cool shirt to wear in the desertYN
1021Metal KeyA large metalic key.NN
1022Slaves Robe BottomA dirty desert skirtYN
1023Slaves Robe TopA dirty desert shirtYN
1024Steel Throwing DartA deadly throwing dart with a steel tip.YX
1025Astrology BookA book on Astrology in runescapeNN
1026Unholy Symbol moulduse this with silver in a furnaceNN
1027Unholy Symbol of Zamorakthis needs stringingNN
1028Unblessed Unholy Symbol of Zamorakthis needs blessingYN
1029Unholy Symbol of Zamoraka symbol indicating allegiance to ZamorakYN
1030Shantay Desert PassAllows you into the desert through the Shantay pass worth 5 gold.NY
1031Staff of IbanThe staff is damagedNN
1032Dwarf cannon basebangNN
1033Dwarf cannon standbangNN
1034Dwarf cannon barrelsbangNN
1035Dwarf cannon furnacebangNN
1036FingernailsUgh gross!NN
1037Powering crystal1An intricately cut gemstoneNN
1038Mining BarrelA roughly constructed barrel for carrying rock.NN
1039Ana in a BarrelA roughly constructed barrel with an Ana in it!NN
1040Stolen goldI wish I could spend itNN
1041multi cannon ballA heavy metal spiked ballNY
1042RailingA metal railing replacementNN
1043Ogre toothbig sharp and nastyNN
1044Ogre relicA grotesque symbol of the ogresNN
1045Skavid mapA map of cave locationsNN
1046dwarf remainsThe remains of a dwarf savaged by goblinsNN
1047KeyA key for a chestNN
1048Ogre relic partA piece of a statueNN
1049Ogre relic partA piece of a statueNN
1050Ogre relic partA piece of a statueNN
1051Ground bat bonesThe ground bones of a batNN
1052Unfinished potionI need another ingredient to finish the shaman potionNN
1053Ogre potionA strange liquidNN
1054Magic ogre potionA strange liquid that bubbles with powerNN
1055Tool kitThese could be handy!NN
1056Nulodion's notesConstruction notes for dwarf cannon ammoNN
1057cannon ammo mouldUsed to make cannon ammoNN
1058Tenti PineappleThe most delicious in the whole of KharidNN
1059Bedobin Copy KeyA copy of a key for the captains of the mining camps chestNN
1060Technical PlansVery technical looking plans for making a thrown weapon of some sortNN
1061Rock cakeYum... I think!NN
1062Bronze dart tipsDangerous looking dart tips - need feathers for flightNY
1063Iron dart tipsDangerous looking dart tips - need feathers for flightNY
1064Steel dart tipsDangerous looking dart tips - need feathers for flightNY
1065Mithril dart tipsDangerous looking dart tips - need feathers for flightNY
1066Adamantite dart tipsDangerous looking dart tips - need feathers for flightNY
1067Rune dart tipsDangerous looking dart tips - need feathers for flightNY
1068Mithril Throwing DartA deadly throwing dart with a mithril tip.YX
1069Adamantite Throwing DartA deadly throwing dart with an adamantite tip.YX
1070Rune Throwing DartA deadly throwing dart with a runite tip.YX
1071Prototype dart tipDangerous looking dart tip - needs feathers for flightNY
1072info documentread to access variable choicesNN
1073Instruction manualAn old note bookNN
1074Unfinished potionI need another ingredient to finish this potionNN
1075Iron throwing knifeA finely balanced knifeYN
1076Bronze throwing knifeA finely balanced knifeYN
1077Steel throwing knifeA finely balanced knifeYN
1078Mithril throwing knifeA finely balanced knifeYN
1079Adamantite throwing knifeA finely balanced knifeYN
1080Rune throwing knifeA finely balanced knifeYN
1081Black throwing knifeA finely balanced knifeYN
1082Water Skin mostly fullA half full skin of waterNN
1083Water Skin mostly emptyA half empty skin of waterNN
1084Water Skin mouthful leftA waterskin with a mouthful of water leftNN
1085Empty Water SkinA completely empty waterskinNN
1086nightshadeDeadly!NN
1087Shaman robeThis has been left by one of the dead ogre shamanNN
1088Iron SpearAn iron tipped spearYN
1089Steel SpearA steel tipped spearYN
1090Mithril SpearA mithril tipped spearYN
1091Adamantite SpearAn adamantite tipped spearYN
1092Rune SpearA rune tipped spearYN
1093Catit's fluffsNN
1094Seasoned SardineThey don't smell any betterNN
1095KittenspurrrNN
1096KittenpurrrNN
1097Wrought iron keyThis key clears unlocks a very sturdy gate of some sort.NN
1098Cell Door KeyA roughly hewn keyNN
1099A free Shantay DisclaimerVery important information.NN
1100Doogle leavesSmall sweet smelling leavesNN
1101Raw Ugthanki MeatI need to cook this firstNN
1102Tasty Ugthanki KebabA fresh Kebab made from Ugthanki meatNN
1103Cooked Ugthanki MeatFreshly cooked Ugthanki meatNN
1104Uncooked Pitta BreadI need to cook this.NN
1105Pitta BreadMmmm I need to add some other ingredients yet.NN
1106Tomato MixtureA mixture of tomatoes in a bowlNN
1107Onion MixtureA mixture of onions in a bowlNN
1108Onion and Tomato MixtureA mixture of onions and tomatoes in a bowlNN
1109Onion and Tomato and Ugthanki MixA mixture of onions and tomatoes and Ugthanki meat in a bowlNN
1110Burnt Pitta BreadUrgh - it's all burntNN
1111Panning trayused for panning goldNN
1112Panning traythis tray contains gold nuggetsNN
1113Panning traythis tray contains mudNN
1114Rock picka sharp pick for cracking rocksNN
1115Specimen brushstiff brush for cleaning specimensNN
1116Specimen jara jar for holding soil samplesNN
1117Rock SampleA rock sampleNN
1118gold NuggetsReal gold pieces!NY
1119catlooks like a healthy oneNN
1120Scrumpled piece of paperA piece of paper with barely legible writing - looks like a recipe!NN
1121Digsite infoIAN ONLYNN
1122Poisoned Bronze Throwing DartA venomous throwing dart with a bronze tip.YX
1123Poisoned Iron Throwing DartA venomous throwing dart with an iron tip.YX
1124Poisoned Steel Throwing DartA venomous throwing dart with a steel tip.YX
1125Poisoned Mithril Throwing DartA venomous throwing dart with a mithril tip.YX
1126Poisoned Adamantite Throwing DartA venomous throwing dart with an adamantite tip.YX
1127Poisoned Rune Throwing DartA deadly venomous dart with a runite tip.YX
1128Poisoned Bronze throwing knifeA finely balanced knife with a coating of venomYN
1129Poisoned Iron throwing knifeA finely balanced knife with a coating of venomYN
1130Poisoned Steel throwing knifeA finely balanced knife with a coating of venomYN
1131Poisoned Mithril throwing knifeA finely balanced knife with a coating of venomYN
1132Poisoned Black throwing knifeA finely balanced knife with a coating of venomYN
1133Poisoned Adamantite throwing knifeA finely balanced knife with a coating of venomYN
1134Poisoned Rune throwing knifeA finely balanced knife with a coating of venomYN
1135Poisoned Bronze SpearA bronze tipped spear with added venomYN
1136Poisoned Iron SpearAn iron tipped spear with added venomYN
1137Poisoned Steel SpearA steel tipped spear with added venomYN
1138Poisoned Mithril SpearA mithril tipped spear with added venomYN
1139Poisoned Adamantite SpearAn adamantite tipped spear with added venomYN
1140Poisoned Rune SpearA rune tipped spear with added venomYN
1141Book of experimental chemistryA book on experiments with volatile chemicalsNN
1142Level 1 CertificateA Certificate of educationNN
1143Level 2 CertificateA Certificate of educationNN
1144Level 3 CertificateA Certificate of educationNN
1145TrowelA small device for diggingNN
1146Stamped letter of recommendationA stamped scroll with a recommendation on itNN
1147Unstamped letter of recommendationI hereby recommend this student to undertake the Varrock City earth sciences examsNN
1148Rock SampleA rock sampleNN
1149Rock SampleA rock sampleNN
1150Cracked rock SampleIt's been cracked openNN
1151Belt bucklebeen here some timeNN
1152Powering crystal2An intricately cut gemstoneNN
1153Powering crystal3An intricately cut gemstoneNN
1154Powering crystal4An intricately cut gemstoneNN
1155Old bootthat's been here some timeNN
1156Bunny earsGet another from the clothes shop if you dieYN
1157Damaged armourthat's been here some timeNN
1158Damaged armourthat's been here some timeNN
1159Rusty swordthat's been here some timeNN
1160Ammonium NitrateAn acrid chemicalNN
1161NitroglycerinA strong acidic formulaNN
1162Old tootha large single toothNN
1163Radimus ScrollsScrolls that Radimus gave youNN
1164chest keyA small key for a chestNN
1165broken arrowthat's been here some timeNN
1166buttonsthey've been here some timeNN
1167broken staffthat's been here some timeNN
1168vaseAn old vaseNN
1169ceramic remainssome ancient potteryNN
1170Broken glasssmashed glassNN
1171Unidentified powderwho knows what this is for?NN
1172MachetteA purpose built tool for cutting through thick jungle.YN
1173ScrollA letter written by the expertNN
1174stone tabletsome ancient script is engraved on hereNN
1175Talisman of Zarosan ancient itemNN
1176Explosive compoundA dark mystical powderNN
1177Bull RoarerA sound producing instrument - it may attract attentionNN
1178Mixed chemicalsA pungent mix of 2 chemicalsNN
1179Ground charcoalPowdered charcoal!NN
1180Mixed chemicalsA pungent mix of 3 chemicalsNN
1181Spell scrollA magical scrollNN
1182Yommi tree seedA magical seed that grows into a Yommi tree - these need to be germinatedNY
1183Totem PoleA well crafted totem poleNN
1184Dwarf cannon basebangNN
1185Dwarf cannon standbangNN
1186Dwarf cannon barrelsbangNN
1187Dwarf cannon furnacebangNN
1188Golden BowlA specially made bowl constructed out of pure goldNN
1189Golden Bowl with pure waterA golden bowl filled with pure waterNN
1190Raw Manta rayA rare catch!NN
1191Manta rayA rare catch!NN
1192Raw Sea turtleA rare catch!NN
1193Sea turtleTasty!NN
1194Annas Silver NecklaceA necklace coated with silverYN
1195Bobs Silver TeacupA tea cup coated with silverNN
1196Carols Silver BottleA little bottle coated with silverNN
1197Davids Silver BookAn ornamental book coated with silverNN
1198Elizabeths Silver NeedleAn ornamental needle coated with silverNN
1199Franks Silver PotA small pot coated with silverNN
1200ThreadA piece of red thread discovered at the scene of the crimeNN
1201ThreadA piece of green thread discovered at the scene of the crimeNN
1202ThreadA piece of blue thread discovered at the scene of the crimeNN
1203FlypaperSticky paper for catching fliesNN
1204Murder Scene PotThe pot has a sickly smell of poison mixed with wineNN
1205A Silver DaggerDagger Found at crime sceneYN
1206Murderers fingerprintAn impression of the murderers fingerprintNN
1207Annas fingerprintAn impression of Annas fingerprintNN
1208Bobs fingerprintAn impression of Bobs fingerprintNN
1209Carols fingerprintAn impression of Carols fingerprintNN
1210Davids fingerprintAn impression of Davids fingerprintNN
1211Elizabeths fingerprintAn impression of Elizabeths fingerprintNN
1212Franks fingerprintAn impression of Franks fingerprintNN
1213Zamorak CapeA cape from the almighty zamorakYN
1214Saradomin CapeA cape from the almighty saradominYN
1215Guthix CapeA cape from the almighty guthixYN
1216Staff of zamorakIt's a stick of the godsYN
1217Staff of guthixIt's a stick of the godsYN
1218Staff of SaradominIt's a stick of the godsYN
1219A chunk of crystalA reddish crystal fragment - it looks like it formed a shape at one time.NN
1220A lump of crystalA reddish crystal fragment - it looks like it formed a shape at one time.NN
1221A hunk of crystalA reddish crystal fragment - it looks like it formed a shape at one time.NN
1222A red crystalA heart shaped red crystalNN
1223Unidentified fingerprintAn impression of the murderers fingerprintNN
1224Annas Silver NecklaceA silver necklace coated with flourYN
1225Bobs Silver TeacupA silver tea cup coated with flourNN
1226Carols Silver BottleA little silver bottle coated with flourNN
1227Davids Silver BookAn ornamental silver book coated with flourNN
1228Elizabeths Silver NeedleAn ornamental silver needle coated with flourNN
1229Franks Silver PotA small silver pot coated with flourNN
1230A Silver DaggerDagger Found at crime scene coated with flourYN
1231A glowing red crystalA glowing heart shaped red crystal - great magic must be present in this itemNN
1232Unidentified liquidA strong acidic formulaNN
1233Radimus ScrollsMission briefing and the completed map of Karamja - Sir Radimus will be pleased...NN
1234RobeA worn robeYN
1235ArmourAn unusually red armourNN
1236DaggerShort but pointyYN
1237eye patchIt makes me look very piraticalYN
1238Booking of BindingAn ancient tome on DemonologyNN
1239Holy Water VialA deadly potion against evil kinYN
1240Enchanted VialThis enchanted vial is empty - but is ready for magical liquids.NN
1241Scribbled notesIt looks like a page ripped from a bookNN
1242Scrawled notesIt looks like a page ripped from a bookNN
1243Scatched notesIt looks like a page ripped from a bookNN
1244Shamans TomeAn ancient tome on various subjects...NN
1245Edible seaweedslightly damp seaweedNN
1246Rough Sketch of a bowlA roughly sketched picture of a bowl made from metalNN
1247Burnt Manta rayoops!NN
1248Burnt Sea turtleoops!NN
1249Cut reed plantA narrow long tube - it might be useful for somethingNN
1250Magical Fire PassA pass which allows you to cross the flaming walls into the Flaming OctagonNN
1251Snakes Weed SolutionSnakes weed in water - part of a potionNN
1252Ardrigal SolutionArdrigal herb in water - part of a potionNN
1253Gujuo PotionA potion to help against fear of the supernaturalNN
1254Germinated Yommi tree seedA magical seed that grows into a Yommi tree - these have been germinated.NY
1255Dark DaggerAn unusual looking dagger made of dark shiny obsidianYN
1256Glowing Dark DaggerAn unusual looking dagger made of dark shiny obsidian - it has an unnatural glow .YN
1257Holy Force SpellA powerful incantation - it affects spirits of the underworldNN
1258Iron PickaxeUsed for miningNN
1259Steel PickaxeRequires level 6 mining to useNN
1260Mithril PickaxeRequires level 21 mining to useNN
1261Adamantite PickaxeRequires level 31 mining to useNN
1262Rune PickaxeRequires level 41 mining to useNN
1263Sleeping BagNot as comfy as a bed but better than nothingNN
1264A blue wizards hatAn ancient wizards hat.YN
1265Gilded Totem PoleA well crafted totem pole - given to you as a gift from GujuoNN
1266Blessed Golden BowlA specially made bowl constructed out of pure gold - it looks magical somehowNN
1267Blessed Golden Bowl with Pure WaterA golden bowl filled with pure water - it looks magical somehowNN
1268Raw Oomlie MeatRaw meat from the Oomlie birdNN
1269Cooked Oomlie meat ParcelDeliciously cooked Oomlie meat in a palm leaf pouch.NN
1270Dragon Bone CertificateEach certificate exchangable at Yanille for 5 Dragon BonesNY
1271Limpwurt Root CertificateEach certificate exchangable at Yanille for 5 Limpwort rootsNY
1272Prayer Potion CertificateEach certificate exchangable at Yanille for 5 prayer potionsNY
1273Super Attack Potion CertificateExchangable at Yanille for 5NY
1274Super Defense Potion CertificateExchangable at Yanille for 5NY
1275Super Strength Potion CertificateExchangable at Yanille for 5NY
1276Half Dragon Square ShieldThe Right Half of an ancient and powerful looking Dragon Square shield.NN
1277Half Dragon Square ShieldLeft Half of an ancient and powerful looking Dragon Square shield.NN
1278Dragon Square ShieldAn ancient and powerful looking Dragon Square shield.YN
1279Palm tree leafA thick green plam leaf - natives use this to cook meat inNN
1280Raw Oomlie Meat ParcelOomlie meat in a palm leaf pouch - just needs to be cooked.NN
1281Burnt Oomlie Meat parcelOomlie meat in a palm leaf pouch - it's burnt.NN
1282Bailing BucketIt's a water tight bucketNN
1283PlankDamaged remains of the shipNN
1284Arcenia rootthe root of an arcenia plantNN
1285display teaA nice cup of tea - for display onlyNN
1286Blessed Golden Bowl with plain waterA golden bowl filled with plain waterNN
1287Golden Bowl with plain waterA golden bowl filled with plain waterNN
1288Cape of legendsShows I am a member of the legends guildYN
1289ScytheGet another from the clothes shop if you dieYN

NPCs

ID Name Level Description Attackable
0Unicorn21It's a unicornY
1Bob2An axe sellerN
2Sheep0A very wooly sheepN
3Chicken3Yep definitely a chickenY
4Goblin13An ugly green creatureY
5Hans3A castle servantY
6cow8It's a multi purpose cowY
7cook15The head cook of Lumbridge castleN
8Bear24Eek! A bear!Y
9Priest0A priest of SaradominN
10Urhney8He looks a little grumpyN
11Man9One of runescapes many citizensY
12Bartender0I could get a beer off himN
13Camel0Oh its a camelN
14Gypsy0An old gypsy ladyN
15Ghost12Ooh spookyN
16Sir Prysin40One of the king's knightsN
17Traiborn the wizard12An old wizardN
18Captain Rovin51The head of the palace guardN
19Rat8Overgrown verminY
20Reldo12I think he's the librarianN
21mugger10He jumps out and attacks peopleY
22Lesser Demon79Lesser but still pretty bigY
23Giant Spider8I think this spider has been genetically modifiedY
24Man30A shifty looking manN
25Jonny the beard10I can see why he's called the beardY
26Baraek30A fur traderN
27Katrine25She doesn't look to friendlyN
28Tramp7A scruffy looking chapN
29Rat2A small muddy ratY
30Romeo45He looks mildly confusedN
31Juliet2She looks a little stressedN
32Father Lawrence0A kindly looking priestN
33Apothecary6I wonder if he has any good potionsN
34spider2Incey winceyY
35Delrith30A freshly summoned demonY
36Veronica2She doesn't look too happyN
37Weaponsmaster25The phoenix gang quartermasterY
38Professor Oddenstein4A mad scientist if I ever saw oneN
39Curator2He looks like he's daydreamingN
40skeleton21It rattles as it walksY
41zombie24The living deadY
42king30King Roald the VIIIN
43Giant bat32An angry flying rodentY
44Bartender0A friendly barmanN
45skeleton31It rattles as it walksY
46skeleton25It rattles as it walksY
47Rat13overgrown verminY
48Horvik the Armourer16He looks strongN
49Bear0A bearN
50skeleton19It rattles when it walksY
51Shopkeeper0Maybe he'd like to buy some of my junkN
52zombie19The living deadY
53Ghost25Ooh spookyY
54Aubury0I think he might be a shop keeperN
55Shopkeeper0I wonder what he's got for saleN
56shopkeeper0I can buy swords off himN
57Darkwizard13He works evil magicY
58lowe0The owner of the archery storeN
59Thessalia0A young shop assistantN
60Darkwizard25He works evil magicY
61Giant37A very large foeY
62Goblin7An ugly green creatureY
63farmer15He grows the crops in this areaY
64Thief21He'll take anything that isn't nailed downY
65Guard28He tries to keep order around hereY
66Black Knight46A sinister looking knightY
67Hobgoblin32A large ugly green creatureY
68zombie32The living deadY
69Zaff0He trades in staffsN
70Scorpion21An extremely vicious scorpionY
71silk trader0He sells silkN
72Man9One of Runescapes many citizensY
73Guide1He gives hints to new adventurersN
74Giant Spider31I think this spider has been genetically modifiedY
75Peksa9A helmet salesmanN
76Barbarian16Not civilised lookingY
77Fred the farmer9An old farmerN
78Gunthor the Brave37The barbarians fearless leaderY
79Witch25She's got wartsY
80Ghost25Ooh spookyY
81Wizard16An old wizardY
82Shop Assistant0Maybe he'd like to buy some of my junkN
83Shop Assistant0Maybe he'd like to buy some of my junkN
84Zeke0He sells ScimitarsN
85Louie Legs0He might want to sell somethingN
86Warrior18A member of Al Kharid's militaryY
87Shopkeeper0I wonder what he's got for saleN
88Shop Assistant0Maybe she'd like to buy some of my junkN
89Highwayman13He holds up passers byY
90Kebab Seller0A seller of strange foodN
91Chicken3Yep definitely a chickenN
92Ernest3A former chickenN
93Monk13A Peaceful monkY
94Dwarf18A short angry guyY
95Banker9He can look after my moneyN
96Count Draynor43A vicious vampireY
97Morgan9A frigtened villagerN
98Dr Harlow9His nose is very redN
99Deadly Red spider36I think this spider has been genetically modifiedY
100Guard28He's here to guard this fortressY
101Cassie25She sells shieldsN
102White Knight56A chivalrous knightY
103Ranael25A shopkeeper of some sortN
104Moss Giant62his beard seems to have a life of its ownY
105Shopkeeper0I wonder what he's got for saleN
106Shop Assistant0Maybe he'd like to buy some of my junkN
107Witch25She's got wartsN
108Black Knight46A sinister looking knightY
109Greldo7A small green warty creatureY
110Sir Amik Varze56The leader of the white knightsN
111Guildmaster40He's in charge of this placeN
112Valaine25She runs the champion's storeN
113Drogo18He runs a mining storeN
114Imp5A cheeky little impY
115Flynn16The mace salesmanN
116Wyson the gardener8An old gardenerN
117Wizard Mizgog12An old wizardN
118Prince Ali20A young princeN
119Hassan20the Chancellor to the emirN
120Osman20He looks a little shiftyN
121Joe40Lady Keli's head guardN
122Leela20She comes from Al KharidN
123Lady Keli20An Infamous banditN
124Ned20An old sailorN
125Aggie25A witchN
126Prince Ali10That is an effective disguiseN
127Jailguard34I wonder what he's guardingY
128Redbeard Frank25A pirateN
129Wydin0A grocerN
130shop assistant0I can buy swords off himN
131Brian0An axe sellerN
132squire0A young squireN
133Head chef15He looks after the chef's guildN
134Thurgo18A short angry guyN
135Ice Giant68He's got icicles in his beardY
136King Scorpion36Wow scorpions shouldn't grow that bigY
137Pirate27A vicious pirateY
138Sir Vyvin56One of the white knights of FaladorN
139Monk of Zamorak29An evil clericY
140Monk of Zamorak19An evil clericY
141Wayne16An armourerN
142Barmaid25a pretty barmaidN
143Dwarven shopkeeper18I wonder if he wants to buy any of my junkN
144Doric18A dwarven smithN
145Shopkeeper0I wonder what he's got for saleN
146Shop Assistant0Maybe he'd like to buy some of my junkN
147Guide1She gives hints to new adventurersN
148Hetty25A witchN
149Betty25A witchN
150Bartender0I could get a beer off himN
151General wartface13An ugly green creatureN
152General Bentnoze13An ugly green creatureN
153Goblin13An ugly green creatureY
154Goblin13An ugly green creatureY
155Herquin0A gem merchantN
156Rommik0The owner of the crafting shopN
157Grum0Grum the goldsmithN
158Ice warrior57A strange inhuman warriorY
159Warrior27A skilled fighterY
160Thrander16A smith of some sortN
161Border Guard18a guard from Al KharidN
162Border Guard18a guard from Al KharidN
163Customs Officer16She is here to stop smugglersN
164Luthas16The owner of the banana plantationN
165Zambo16He will sell me exotic rumN
166Captain Tobias20An old sailorN
167Gerrant0I wonder what he's got for saleN
168Shopkeeper0I wonder what he's got for saleN
169Shop Assistant0Maybe he'd like to buy some of my junkN
170Seaman Lorris20A young sailorN
171Seaman Thresnor20A young sailorN
172Tanner45He makes leatherN
173Dommik0The owner of the crafting shopN
174Abbot Langley13A Peaceful monkN
175Thordur18He runs a a tourist attractionN
176Brother Jered13humanN
177Rat13Overgrown verminY
178Ghost25Ooh spookyY
179skeleton31it rattles when it walksY
180zombie32the living deadY
181Lesser Demon79Lesser but still very bigY
182Melzar the mad45He looks totally insaneY
183Scavvo10He has lopsided eyesN
184Greater Demon87big red and incredibly evilY
185Shopkeeper0I wonder what he's got for saleN
186Shop Assistant0Maybe he'd like to buy some of my junkN
187Oziach0A strange little manN
188Bear26Eek! A bear!Y
189Black Knight46An armoured follower of ZamorakY
190chaos Dwarf59a dwarf gone badY
191dwarf18A dwarf who looks after the mining guildN
192Wormbrain7Dumb even by goblin standardsY
193Klarense20A young sailorN
194Ned20An old sailorN
195skeleton54A Taller than normal skeletonY
196Dragon110A powerful and ancient dragonY
197Oracle57A mystic of unknown raceN
198Duke of Lumbridge30Duke Horacio of LumbridgeN
199Dark Warrior21A warrior touched by chaosY
200Druid29A worshipper of GuthixY
201Red Dragon140A big powerful dragonY
202Blue Dragon105A mother dragonY
203Baby Blue Dragon50Young but still dangerousY
204Kaqemeex29A wise druidN
205Sanfew29An old druidN
206Suit of armour29A dusty old suit of armourN
207Adventurer13A clericN
208Adventurer12A wizardN
209Adventurer56A WarriorN
210Adventurer25An archerN
211Leprechaun18A funny little man who lives in a treeN
212Monk of entrana13A Peaceful monkN
213Monk of entrana13A Peaceful monkN
214zombie32The living deadY
215Monk of entrana13A Peaceful monkN
216tree spirit95Ooh spookyY
217cow8It's a dairy cowN
218Irksol2Is he invisible or just a set of floating clothes?N
219Fairy Lunderwin2A fairy merchantN
220Jakut2An unusual looking merchantN
221Doorman56He guards the entrance to the faerie marketN
222Fairy Shopkeeper0I wonder what he's got for saleN
223Fairy Shop Assistant0Maybe he'd like to buy some of my junkN
224Fairy banker9He can look after my moneyN
225Giles30He runs an ore exchange storeN
226Miles30He runs a bar exchange storeN
227Niles30He runs a fish exchange storeN
228Gaius16he sells very big swordsN
229Fairy Ladder attendant0A worker in the faerie marketN
230Jatix29A hard working druidN
231Master Crafter0The man in charge of the crafter's guildN
232Bandit29He's ready for a fightY
233Noterazzo29A bandit shopkeeperN
234Bandit29A wilderness outlawY
235Fat Tony15A Gourmet Pizza chefN
236Donny the lad39A bandit leaderY
237Black Heather39A bandit leaderY
238Speedy Keith39A bandit leaderY
239White wolf sentry31A vicious mountain wolfY
240Boy39He doesn't seem very happyN
241Rat2He seems to live hereN
242Nora T Hag25She's got wartsN
243Grey wolf64A sinister looking wolfY
244shapeshifter24I've not seen anyone like this beforeY
245shapeshifter34I think this spider has been genetically modifiedN
246shapeshifter44Eek! A bear!N
247shapeshifter54A sinister looking wolfN
248White wolf41A vicious mountain wolfY
249Pack leader71A vicious mountain wolfY
250Harry0I wonder what he's got for saleN
251Thug18He likes hitting thingsY
252Firebird6Probably not a chickenY
253Achetties46One of Asgarnia's greatest herosN
254Ice queen103The leader of the ice warriorsY
255Grubor15A rough looking thiefN
256Trobert13A well dressed thiefN
257Garv28A diligent guardN
258guard27A vicious pirateN
259Grip46Scar face petes head guardY
260Alfonse the waiter9He should get a clean apronN
261Charlie the cook15Head cook of the Shrimp and parrotN
262Guard Dog46He doesn't seem pleased to see meY
263Ice spider64I think this spider has been genetically modifiedY
264Pirate30A vicious pirateY
265Jailer51Guards prisoners for the black knightsY
266Lord Darquarius76A black knight commanderY
267Seth30He runs a fish exchange storeN
268Banker9He can look after my moneyN
269Helemos46A retired heroN
270Chaos Druid19A crazy evil druidY
271Poison Scorpion26It has a very vicious looking tailY
272Velrak the explorer3he looks cold and hungryN
273Sir Lancelot56A knight of the round tableN
274Sir Gawain56A knight of the round tableN
275King Arthur56A wise old kingN
276Sir Mordred58An evil knightY
277Renegade knight51He isn't very friendlyY
278Davon27An amulet traderN
279Bartender0I could get some grog off himN
280Arhein0A merchantN
281Morgan le faye25An evil sorceressN
282Candlemaker16He makes and sells candlesN
283lady0She has a hint of magic about herN
284lady0She has a hint of magic about herN
285lady0She has a hint of magic about herN
286Beggar7A scruffy looking chapN
287Merlin12An old wizardN
288Thrantax90A freshly summoned demonN
289Hickton0The owner of the archery storeN
290Black Demon156A big scary jet black demonY
291Black Dragon200A fierce dragon with black scales!Y
292Poison Spider63I think this spider has been genetically modifiedY
293Monk of Zamorak47An evil clericY
294Hellhound114Hello nice doggyY
295Animated axe46a magic axe with a mind of it's ownY
296Black Unicorn31It's a sort of unicornY
297Frincos13A Peaceful monkN
298Otherworldly being66Is he invisible or just a set of floating clothes?Y
299Owen30He runs a fish exchange storeN
300Thormac the sorceror25A powerful sorcerrerN
301Seer16An old wizardN
302Kharid Scorpion21a smaller less dangerous scorpionN
303Kharid Scorpion21a smaller less dangerous scorpionN
304Kharid Scorpion21a smaller less dangerous scorpionN
305Barbarian guard16Not very civilisedN
306Bartender0I could get a beer off himN
307man9A well dressed noblemanN
308gem trader0He sells gemsN
309Dimintheis9A well dressed noblemanN
310chef15A busy looking chefN
311Hobgoblin48An ugly green creatureY
312Ogre58A large dim looking humanoidY
313Boot the Dwarf18A short angry guyN
314Wizard16A young wizardN
315Chronozon121Chronozon the blood demonY
316Captain Barnaby20An old sailorN
317Customs Official16She's here to stop smugglersN
318Man9One of Runescape's citizensY
319farmer15An humble peasantY
320Warrior27A skilled fighterY
321Guard28He tries to keep the law and order around hereY
322Knight56A knight of ArdougneY
323Paladin71A paladin of ArdougneY
324Hero83A Hero of ArdougneY
325Baker15He sells hot baked breadN
326silk merchant0He buys silkN
327Fur trader0A buyer and seller of animal fursN
328silver merchant0He deals in silverN
329spice merchant15He sells exotic spicesN
330gem merchant0He sells gemsN
331Zenesha25A shopkeeper of some sortN
332Kangai Mau0A tribesmanN
333Wizard Cromperty12An old wizardN
334RPDT employee12A delivery manN
335Horacio8An old gardenerN
336Aemad16He helps run the adventurers storeN
337Kortan16He helps run the adventurers storeN
338zoo keeper20He looks after Ardougne city zooY
339Make over mage0He can change how I lookN
340Bartender0I could get a beer off himN
341chuck0A wood merchantN
342Rogue21He needs a shaveY
343Shadow spider53Is it a spider or is it a shadowY
344Fire Giant109A big guy with red glowing skinY
345Grandpa Jack20A wistful old manN
346Sinister stranger43not your average fishermanN
347Bonzo30Fishing competition organiserN
348Forester21He looks after McGrubor's woodY
349Morris30Fishing competition organiserN
350Brother Omad13A Peaceful monkN
351Thief21A dastardly blanket thiefY
352Head Thief34A dastardly blanket thiefY
353Big Dave15A well built fishermanN
354Joshua15A grumpy fishermanN
355Mountain Dwarf18A short angry guyN
356Mountain Dwarf28A short angry guyY
357Brother Cedric13A Peaceful monkN
358Necromancer34A crazy evil necromancerY
359zombie24The living deadY
360Lucien21He walks with a slight limpN
361The Fire warrior of lesarkus63A strange red humanoidY
362guardian of Armadyl54A worshipper of ArmadylN
363guardian of Armadyl54A worshipper of ArmadylN
364Lucien21He walks with a limpY
365winelda25A witchN
366Brother Kojo13A Peaceful monkN
367Dungeon Rat16Overgrown verminY
368Master fisher15The man in charge of the fishing guildN
369Orven30He runs a fish exchange storeN
370Padik30He runs a fish exchange storeN
371Shopkeeper0He smells of fishN
372Lady servil2She look's wealthyN
373Guard28It's one of General Khazard's guard'sN
374Guard28It's one of General Khazard's guard'sN
375Guard28It's one of General Khazard's guard'sN
376Guard28It's one of General Khazard's guard'sN
377Jeremy Servil0A young squireN
378Justin Servil0Jeremy servil's fatherN
379fightslave joe0He look's mistreated and weakN
380fightslave kelvin0He look's mistreated and weakN
381local7A scruffy looking chapN
382Khazard Bartender0A tough looking barmanN
383General Khazard100He look's real nastyY
384Khazard Ogre58Khazard's strongest ogre warriorY
385Guard28It's one of General Khazard's guard'sN
386Khazard Scorpion46A large angry scorpionY
387hengrad0He look's mistreated and weakN
388Bouncer122Hello nice doggyY
389Stankers0A cheerful looking fellowN
390Docky20An old sailorN
391Shopkeeper0Maybe he'd like to buy some of my junkN
392Fairy queen2A very little queenN
393Merlin12An old wizardN
394Crone25A strange old ladyN
395High priest of entrana13A Peaceful monkN
396elkoy3It's a tree gnomeN
397remsai3It's a tree gnomeN
398bolkoy3It's a tree gnomeN
399local gnome3It's a young tree gnomeY
400bolren3It's a gnome he look's importantN
401Black Knight titan146He is blocking the wayY
402kalron3he look's lostY
403brother Galahad13A Peaceful monkN
404tracker 13It's a tree gnomeN
405tracker 23It's a tree gnomeN
406tracker 33It's a tree gnomeN
407Khazard troop28It's one of General Khazard's warrior'sY
408commander montai3It's a tree gnomeN
409gnome troop3It's a tree gnome trooperY
410khazard warlord100He look's real nastyY
411Sir Percival56He's covered in pieces of strawN
412Fisher king30an old kingN
413maiden2She has a far away look in her eyesN
414Fisherman30an old fishermanN
415King Percival56The new fisher kingN
416unhappy peasant25He looks tired and hungryY
417happy peasant25He looks well fed and full of energyY
418ceril9It's Sir ceril carnillean a local noblemenN
419butler9It's the carnillean family butlerN
420carnillean guard28It's a carnillean family guardY
421Tribesman39A primative warriorY
422henryeta2It's a wealthy looking womanN
423philipe0It's a young well dressed boyN
424clivet20A strange looking man in blackN
425cult member20An suspicous looking man in blackY
426Lord hazeel100He could do with some sunY
427alomone42A musculer looking man in blackN
428Khazard commander41It's one of General Khazard's commander'sY
429claus15the carnillean family cookN
4301st plague sheep0The sheep has the plagueN
4312nd plague sheep0The sheep has the plagueN
4323rd plague sheep0The sheep has the plagueN
4334th plague sheep0The sheep has the plagueN
434Farmer brumty15He looks after livestock in this areaN
435Doctor orbon15A local doctorN
436Councillor Halgrive20A town councellerN
437Edmond20A local civilianN
438Citizen11He look's tiredY
439Citizen10He look's frightenedY
440Citizen12She look's frustratedY
441Citizen20He look's angryY
442Citizen15He look's disillusionedY
443Jethick15A cynical old manN
444Mourner2A mourner or plague healerN
445Mourner2A mourner or plague healerN
446Ted Rehnison9The head of the Rehnison familyN
447Martha Rehnison12A fairly poor looking womanN
448Billy Rehnison45The Rehnisons eldest sonN
449Milli Rehnison39She doesn't seem very happyN
450Alrena2She look's concernedN
451Mourner2A mourner or plague healerN
452Clerk2A bueracratic administratorN
453Carla2She look's upsetN
454Bravek30The city warder of West ArdougneN
455Caroline2A well dressed middle aged ladyN
456Holgart20An old sailorN
457Holgart20An old sailorN
458Holgart20An old sailorN
459kent45caroline's husbandN
460bailey15the fishing platform cookN
461kennith0A young scared looking boyN
462Platform Fisherman30an emotionless fishermanY
463Platform Fisherman30an emotionless fishermanY
464Platform Fisherman30an emotionless fishermanY
465Elena2She doesn't look too happyN
466jinno30He doesn't seem to mind his lack of legsN
467Watto30He doesn't seem to mind his lack of legsN
468Recruiter51A member of the Ardougne royal armyN
469Head mourner2In charge of people with silly outfitsN
470Almera2A woman of the wildernessN
471hudon0A young boisterous looking ladN
472hadley30A happy looking fellowN
473Rat7Overgrown verminY
474Combat instructor51He will tell me how to fightN
475golrie3It's a tree gnomeN
476Guide1She gives hints to new adventurersN
477King Black Dragon245The biggest meanest dragon aroundY
478cooking instructor15Talk to him to learn about runescape foodN
479fishing instructor15He smells of fishN
480financial advisor0He knows about moneyN
481gerald15An old fishermanN
482mining instructor18A short angry guyN
483Elena2She looks concernedN
484Omart30A nervous looking fellowN
485Bank assistant9She can look after my stuffN
486Jerico15He looks friendly enoughN
487Kilron15He looks shiftyN
488Guidor's wife2She looks rather concernedN
489Quest advisor51I wonder what advise he has to impartN
490chemist4humanN
491Mourner2A mourner or plague healerN
492Mourner2A mourner or plague healerN
493Wilderness guide29He's ready for a fightN
494Magic Instructor12An old wizardN
495Mourner22A mourner or plague healerY
496Community instructor2This is the last advisor - honestN
497boatman20An old sailorN
498skeleton mage21It rattles as it walksY
499controls guide29He's ready for a fightN
500nurse sarah2She's quite a lookerN
501Tailor29He's ready for a partyN
502Mourner25A mourner or plague healerY
503Guard28He tries to keep order around hereN
504Chemist29He looks clever enoughN
505Chancy29He's ready for a betN
506Hops29He's drunkN
507DeVinci29He has a colourful personalityN
508Guidor29He's not that illN
509Chancy29He's ready for a betN
510Hops29He's drunkN
511DeVinci29He has a colourful personalityN
512king Lathas30King Lanthas of east ardoungeN
513Head wizard12He runs the wizards guildN
514Magic store owner12An old wizardN
515Wizard Frumscone12A confused looking wizardN
516target practice zombie24The living deadY
517Trufitus6A wise old witch doctorN
518Colonel Radick51A soldier of the town of YanilleY
519Soldier28A soldier of the town of YanilleY
520Bartender0I could get a beer off himN
521Jungle Spider47A venomous deadly spiderY
522Jiminua0She looks very interested in selling some of her wares.N
523Jogre58An aggressive humanoidY
524Guard28He tries to keep order around hereN
525Ogre58Useful for ranged trainingY
526Guard28He tries to keep order around hereN
527Guard28He tries to keep order around hereN
528shop keeper0he sells weaponsN
529Bartender0I could get a beer off himN
530Frenita0runs a cookery shopN
531Ogre chieftan78A slightly bigger uglier ogreY
532rometti3It's a well dressed tree gnomeN
533Rashiliyia80A willowy ethereal being who floats above the groundN
534Blurberry3It's a red faced tree gnomeN
535Heckel funch3It's another jolly tree gnomeN
536Aluft Gianne3It's a tree gnome chefN
537Hudo glenfad3It's another jolly tree gnomeN
538Irena0humanN
539Mosol0A jungle warriorN
540Gnome banker3It's tree gnome bankerN
541King Narnode Shareen3It's a gnome he look's importantN
542UndeadOne62One of Rashaliyas MinionsY
543Drucas20engraverN
544tourist29humanN
545King Narnode Shareen3It's a gnome he look's importantN
546Hazelmere3An ancient looking gnomeN
547Glough3An rough looking gnomeN
548Shar0Concerned about the economyN
549Shantay0humanN
550charlie0Poor guy?Y
551Gnome guard31A tree gnome guardY
552Gnome pilot3He can fly the gliderN
553Mehman29localN
554Ana16This lady doesn't look as if she belongs here.N
555Chaos Druid warrior44A crazy evil druidY
556Gnome pilot3He can fly the gliderN
557Shipyard worker44He look's busyY
558Shipyard worker44He look's busyY
559Shipyard worker44He look's busyY
560Shipyard foreman62He look's busyN
561Shipyard foreman62He look's busyN
562Gnome guard23A tree gnome guardY
563Femi3It's a little tree gnomeN
564Femi3It's a little tree gnomeN
565Anita3It's a little tree gnomeN
566Glough3An rough looking gnomeN
567Salarin the twisted69A crazy evil druidY
568Black Demon175A big scary jet black demonY
569Gnome pilot3He can fly the gliderN
570Gnome pilot3He can fly the gliderN
571Gnome pilot3He can fly the gliderN
572Gnome pilot3He can fly the gliderN
573Sigbert the Adventurer56A WarriorN
574Yanille Watchman33He watches out for invading ogresY
575Tower guard33He stops people going up the towerN
576Gnome Trainer11He can advise on trainingN
577Gnome Trainer11He can advise on trainingN
578Gnome Trainer11He can advise on trainingN
579Gnome Trainer11He can advise on trainingN
580Blurberry barman3He serves cocktailsN
581Gnome waiter3He can serve you gnome foodN
582Gnome guard27A tree gnome guardY
583Gnome child3that's a little gnomeY
584Earth warrior52A strange inhuman warriorY
585Gnome child3He's a little fellowY
586Gnome child3hello little gnomeY
587Gulluck10He sells weaponsN
588Gunnjorn16Not civilised lookingN
589Zadimus0Ghostly Visage of the dead ZadimusN
590Brimstail3An ancient looking gnomeN
591Gnome child3He's a little fellowN
592Gnome local9A tree gnome villagerY
593Gnome local3A tree gnome villagerY
594Moss Giant62his beard seems to have a life of its ownY
595Gnome Baller70A tree gnome ball playerY
596Goalie70A gnome ball goal catcherN
597Gnome Baller70A tree gnome ball playerY
598Gnome Baller70A tree gnome ball playerY
599Gnome Baller70A tree gnome ball playerY
600Gnome Baller70A tree gnome ball playerY
601Referee3He controls the gameN
602Gnome Baller70A tree gnome ball playerY
603Gnome Baller70A tree gnome ball playerY
604Gnome Baller70A tree gnome ball playerY
605Gnome Baller70A tree gnome ball playerY
606Gnome Baller70A tree gnome ball playerY
607Gnome Baller70A tree gnome ball playerY
608Gnome Baller70A tree gnome ball playerY
609Gnome Baller70He's on your teamN
610Gnome Baller70He's on your teamN
611Cheerleader3It's a little tree gnomeN
612Cheerleader3It's a little tree gnomeN
613Nazastarool Zombie83One of Rashaliyas MinionsY
614Nazastarool Skeleton83One of Rashaliyas MinionsY
615Nazastarool Ghost83One of Rashaliyas MinionsY
616Fernahei6An enthusiastic fishing shop ownerN
617Jungle Banker9He can look after my moneyN
618Cart Driver15He drives the cartN
619Cart Driver15He drives the cartN
620Obli0An intelligent looking shop ownerN
621Kaleb0This is Kaleb Paramaya - a warm and friendly inn ownerN
622Yohnus0This is Yohnus - he runs the local blacksmithsN
623Serevel0This is Serevel - he sells tickets for the 'Lady of the Waves'N
624Yanni0Yanni Salika - He buys and sells antiques.N
625Official3He helps the refereeN
626Koftik16The kings top trackerN
627Koftik16The kings top trackerN
628Koftik16The kings top trackerN
629Koftik16The kings top trackerN
630Blessed Vermen14A undead servent of ibanY
631Blessed Spider35One of iban's eight legged friendsY
632Paladin71A paladin of ArdougneY
633Paladin71A paladin of ArdougneY
634slave16He seems possessedY
635slave16He seems possessedY
636slave16He seems to have been here a whileY
637slave16He seems possessedY
638slave16He seems to have been here a whileY
639slave16He seems possessedY
640slave16He seems to have been here a whileY
641Kalrag78I think this is one of Ibans petsY
642Niloof18A short angry guyN
643Kardia the Witch25She's got wartsN
644Souless16He seems an empty shellY
645Othainian78big red and incredibly evilY
646Doomion98A big scary jet black demonY
647Holthion78big red and incredibly evilY
648Klank18A short angry guyN
649Iban21You feel terror just looking at himN
650Koftik16The kings top trackerN
651Goblin guard48An imposing green creatureY
652Observatory Professor4He works in the observatoryN
653Ugthanki45A dangerous type of spitting camel that can temporarily blind an
opponent.Y
654Observatory assistant4The Professor's assistantN
655Souless24A servent to zamorakY
656Dungeon spider22A nasty poisonous arachnidY
657Kamen18A short angry guyN
658Iban disciple19An evil follower of IbanY
659Koftik16The kings top trackerN
660Goblin19These goblins have grown strongY
661Chadwell16A sturdy looking gentN
662Professor4The owner of the observatoryN
663San Tojalon120The animated spirit of San TojalonY
664Ghost29A doomed victim of zamorakY
665Spirit of Scorpius100The undead spirit of the follower of ZamorakN
666Scorpion21There are nasty scorpions around this graveN
667Dark Mage0He works in the ways of dark magicN
668Mercenary50He seems to be guarding an areaY
669Mercenary Captain64He's in control of the local guards.Y
670Mercenary39He seems to be guarding an areaY
671Mining Slave16A chained slave forced to mine rocks.Y
672Watchtower wizard12A learned manN
673Ogre Shaman100An intelligent form of ogreN
674Skavid3Servant race to the ogresN
675Ogre guard78These ogres protect the cityN
676Ogre guard78These ogres protect the cityN
677Ogre guard78These ogres protect the cityN
678Skavid3Servant race to the ogresN
679Skavid3Servant race to the ogresN
680Og78The chieftan of this ogre tribeN
681Grew78The chieftan of this ogre tribeN
682Toban78The chieftan of this ogre tribeN
683Gorad78A high ranking ogre officialY
684Ogre guard96this creature looks very toughY
685Yanille Watchman33A captured guard of YanilleN
686Ogre merchant58He sells ogre-inspired itemsN
687Ogre trader58He trades in metalsN
688Ogre trader58He trades in foodN
689Ogre trader58He trades in foodN
690Mercenary39He seems to be guarding an areaY
691City Guard78high ranking ogre guardsN
692Mercenary39He seems to be guarding this areaY
693Lawgof18He guards the minesN
694Dwarf18A short angry guyY
695lollk18He looks scaredN
696Skavid3Servant race to the ogresN
697Ogre guard78These ogres protect the cityY
698Nulodion18He's the head of black guard weapon developmentN
699Dwarf18A short angry guyY
700Al Shabim0The leader of a nomadic Bedabin desert people - sometimes referred to as the 'Tenti's'N
701Bedabin Nomad0A Bedabin nomad - they live in the harshest extremes in the desertN
702Captain Siad48He's in control of the whole mining camp.Y
703Bedabin Nomad Guard70A Bedabin nomad guard - he's protecting something importantY
704Ogre citizen58A denizen of Gu'TanothY
705Rock of ages150A huge boulderY
706Ogre58A large dim looking humanoidY
707Skavid3Servant race to the ogresN
708Skavid3Servant race to the ogresN
709Skavid3Servant race to the ogresN
710Draft Mercenary Guard50He's quickly drafted in to deal with trouble makersY
711Mining Cart Driver15He drives the mining cartN
712kolodion12He runs the mage arenaN
713kolodion12He runs the mage arenaY
714Gertrude20A busy housewifeN
715Shilop0A young boisterous looking ladN
716Rowdy Guard50He looks as if he's spoiling for troubleY
717Shantay Pass Guard32He seems to be guarding the Shantay PassY
718Rowdy Slave16A slave who's looking for trouble.Y
719Shantay Pass Guard32He seems to be guarding the Shantay PassN
720Assistant0He is an assistant to Shantay and helps him to run the pass.N
721Desert Wolf31A vicious Desert wolfY
722Workman9This person is working on the siteN
723Examiner2As you examine the examiner you examine that she is indeed an examiner!!N
724Student0A student busily digging!N
725Student20A student busily digging!N
726Guide12This person specialises in panning for goldN
727Student18A student busily digging!N
728Archaeological expert15An expert on archaeology!N
729civillian18He looks aggitated!Y
730civillian0She looks aggitated!N
731civillian0She looks aggitated!N
732civillian15He looks aggitated!N
733Murphy15The man in charge of the fishing trawlerN
734Murphy15The man in charge of the fishing trawlerN
735Sir Radimus Erkle10A huge muscular man in charge of the Legends GuildN
736Legends Guild Guard50This guard is protecting the entrance to the Legends Guild.N
737Escaping Mining Slave16An emancipated slave with cool Desert Clothes.N
738Workman9This person is working in the mineN
739Murphy15The man in charge of the fishing trawlerN
740Echned Zekin50An evil spirit of the underworld.N
741Donovan the Handyman9It's the family odd jobs manN
742Pierre the Dog Handler9It's the guy who looks after the family guard dogN
743Hobbes the Butler9It's the family butlerN
744Louisa The Cook0It's the family cookN
745Mary The Maid25The family maidN
746Stanford The Gardener8It's the family GardenerN
747Guard28He looks like he's in over his head hereN
748Guard Dog46He doesn't seem pleased to see meN
749Guard8EMPTY PLEASE USE OR REPLACEN
750Man9A thirsty looking manN
751Anna Sinclair9The first child of the late Lord SinclairN
752Bob Sinclair9The second child of the late Lord SinclairN
753Carol Sinclair9The third child of the late Lord SinclairN
754David Sinclair9The fourth child of the late Lord SinclairN
755Elizabeth Sinclair9The fifth child of the late Lord SinclairN
756Frank Sinclair9The sixth child of the late Lord SinclairN
757kolodion65He's a shape shifterY
758kolodion68He's a shape shifterY
759kolodion46He's a shape shifterY
760kolodion98He's a shape shifterY
761Irvig Senay125The animated spirit of Irvig SenayY
762Ranalph Devere130The animated spirit of Ranalph DevereY
763Poison Salesman7Peter Potter - Poison PurveyorN
764Gujuo60A tall charismatic looking jungle native - he approaches with confidenceN
765Jungle Forester15A woodsman who specialises in large and exotic timberN
766Ungadulu75An ancient looking ShamanY
767Ungadulu75An ancient looking Shaman - he looks very strange with glowing red eyes...Y
768Death Wing80A supernatural creature of the underworldY
769Nezikchened172An ancient powerful Demon of the Underworld...Y
770Dwarf Cannon engineer18He's the head of black guard weapon developmentN
771Dwarf commander18He guards the minesN
772Viyeldi80The spirit of a dead sorcererY
773Nurmof18He sells pickaxesN
774Fatigue expert10He looks wide awakeN
775Karamja Wolf61A hungryY
776Jungle Savage87A savage and fearless Jungle warriorY
777Oomlie Bird32A variety of flightless jungle fowl - it has a sharp beak and a bad temper.Y
778Sidney Smith30Sidney Smith - Certification clerkN
779Siegfried Erkle25An eccentric shop keeper - related to the Grand Vizier of the Legends GuildN
780Tea seller9He has delicious tea to buyN
781Wilough0A young son of gertrudesN
782Philop0Gertrudes youngestN
783Kanel0Gertrudes youngest's twin brotherN
784chamber guardian15He hasn't seen much sun latleyN
785Sir Radimus Erkle10A huge muscular man in charge of the Legends GuildN
786Pit Scorpion35Very vicious little scorpionsY
787Shadow Warrior64A sinsistar shadowy figureY
788Fionella25She runs the legend's general storeN
789Battle mage52He kills in the name of guthixY
790Battle mage52He kills in the name of zamarokY
791Battle mage52He kills in the name of SaradominY
792Gundai15He must get lonely out hereN
793Lundail15He sells rune stonesN

Objects

ID Name Description
0TreeA pointy tree
1TreeA leafy tree
2WellThe bucket is missing
3TableA mighty fine table
4TreestumpSomeone has chopped this tree down!
5Ladderit's a ladder leading upwards
6Ladderit's a ladder leading downwards
7ChairA sturdy looking chair
8logsA pile of logs
9LongtableIt has nice candles
10ThroneIt looks fancy and expensive
11RangeA hot well stoked range
12GravestoneR I P
13GravestoneIts covered in moss
14BedOoh nice blankets
15BedIts a bed - wow
16barMmm beer
17ChestPerhaps I should search it
18ChestI wonder what is inside...
19AltarIts an Altar
20PostWhat am I examining posts for
21SupportA wooden pole
22barrelIts empty
23BenchIt doesn't look very comfy
24PortraitA painting of our beloved king
25candlesCandles on a fancy candlestick
26fountainThe water looks fairly clean
27landscapeAn oil painting
28MillstonesYou can use these to make flour
29CounterIt's the shop counter
30StallA market stall
31TargetComing soon archery practice
32PalmTreeA nice palm tree
33PalmTreeA shady palm tree
34FernA leafy plant
35CactusIt looks very spikey
36BullrushesI wonder why it's called a bullrush
37FlowerOoh thats pretty
38MushroomI think it's a poisonous one
39CoffinThis coffin is closed
40CoffinThis coffin is open
41stairsThese lead upstairs
42stairsThese lead downstairs
43stairsThese lead upstairs
44stairsThese lead downstairs
45railingnice safety measure
46pillarAn ornate pillar
47BookcaseA large collection of books
48SinkIts fairly dirty
49DummyI can practice my fighting here
50anvilheavy metal
51TorchIt would be very dark without this
52hopperYou put grain in here
53chuteFlour comes out here
54cartA farm cart
55sacksYep they're sacks
56cupboardThe cupboard is shut
57GateThe gate is closed
58gateThe gate is open
59gateThe gate is open
60gateThe gate is closed
61signpostTo Varrock
62signpostTo the tower of wizards
63doorsThe doors are open
64doorsThe doors are shut
65signpostTo player owned houses
66signpostTo Lumbridge Castle
67bookcaseIt's a bookcase
68hengethese look impressive
69DolmenA sort of ancient altar thingy
70TreeThis tree doesn't look too healthy
71cupboardPerhaps I should search it
72Wheatnice ripe looking wheat
73signThe blue moon inn
74sailsThe windmill's sails
75signestate agent
76signThe Jolly boar inn
77DrainThis drainpipe runs from the kitchen to the sewers
78manholeA manhole cover
79manholeHow dangerous - this manhole has been left open
80pipea dirty sewer pipe
81ChestPerhaps I should search it
82ChestI wonder what is inside...
83barrelIt seems to be full of newt's eyes
84cupboardThe cupboard is shut
85cupboardPerhaps I should search it
86fountainI think I see something in the fountain
87signpostTo Draynor Manor
88TreeThis tree doesn't look too healthy
89signGeneral Store
90signLowe's Archery store
91signThe Clothes Shop
92signVarrock Swords
93gateYou can pass through this on the members server
94gateYou can pass through this on the members server
95signBob's axes
96signThe staff shop
97fireA strongly burning fire
98RockA rocky outcrop
99RockA rocky outcrop
100RockA rocky outcrop
101RockA rocky outcrop
102RockA rocky outcrop
103RockA rocky outcrop
104RockA rocky outcrop
105RockA rocky outcrop
106RockA rocky outcrop
107RockA rocky outcrop
108RockA rocky outcrop
109RockA rocky outcrop
110RockA rocky outcrop
111RockA rocky outcrop
112RockA rocky outcrop
113RockA rocky outcrop
114RockA rocky outcrop
115RockA rocky outcrop
116webA spider's web
117webA spider's web
118furnaceA red hot furnace
119Cook's RangeA hot well stoked range
120MachineI wonder what it's supposed to do
121Spinning wheelI can spin wool on this
122LeverThe lever is up
123LeverThe lever is down
124LeverAIt's a lever
125LeverBIt's a lever
126LeverCIt's a lever
127LeverDIt's a lever
128LeverEIt's a lever
129LeverFIt's a lever
130Ladderit's a ladder leading upwards
131signpostTo the forge
132signpostTo the Barbarian's Village
133signpostTo Al Kharid
134Compost HeapA smelly pile of compost
135CoffinThis coffin is closed
136CoffinThis coffin is open
137gateYou can pass through this on the members server
138gateYou can pass through this on the members server
139signThe Bank of runescape
140cupboardThe cupboard is shut
141cupboardPerhaps I should search it
142doorsThe doors are shut
143torchA scary torch
144AltarAn altar to the evil God Zamorak
145ShieldA display shield
146Grillsome sort of ventilation
147CauldronA very large pot
148Grillsome sort of ventilation
149Mine CartIt's empty
150BuffersStop the carts falling off the end
151TrackTrain track
152TrackTrain track
153TrackTrain track
154HoleI can see a witches cauldron directly below it
155shipA ship to Karamja
156shipA ship to Karamja
157shipA ship to Karamja
158Emergency escape ladderit's a ladder leading downwards
159signWydin's grocery
160signThe Rusty Anchor
161shipA ship to Port Sarim
162shipA ship to Port Sarim
163shipA ship to Port Sarim
164RocksA rocky outcrop
165RocksA rocky outcrop
166RocksA rocky outcrop
167RocksA rocky outcrop
168RocksA rocky outcrop
169RocksA rocky outcrop
170RocksA rocky outcrop
171RocksA rocky outcrop
172RocksA rocky outcrop
173hopperYou put grain in here
174cupboardThe cupboard is shut
175cupboardPerhaps I should search it
176RocksA rocky outcrop
177Doric's anvilProperty of Doric the dwarf
178pottery ovenI can fire clay pots in this
179potter's wheelI can make clay pots using this
180gateA gate from Lumbridge to Al Kharid
181gateThis gate is open
182crateA crate used for storing bananas
183Banana treeA tree with nice ripe bananas growing on it
184Banana treeThere are no bananas left on the tree
185crateA crate used for storing bananas
186ChestA battered old chest
187ChestI wonder what is inside...
188FlowerOoh thats pretty
189signFishing Supplies
190signJewellers
191PotatoA potato plant
192fishI can see fish swimming in the water
193fishI can see fish swimming in the water
194fishI can see fish swimming in the water
195RockA rocky outcrop
196RockA rocky outcrop
197RocksA rocky outcrop
198Ladderit's a ladder leading upwards
199Ladderit's a ladder leading downwards
200Monks AltarIts an Altar
201Ladderit's a ladder leading downwards
202CoffinThis coffin is closed
203CoffinThis coffin is open
204Smashed tableThis table has seen better days
205FungusA creepy looking fungus
206Smashed chairThis chair is broken
207Broken pillarThe remains of a pillar
208Fallen treeA fallen tree
209Danger SignDanger!
210RockA rocky outcrop
211RockA rocky outcrop
212RocksA rocky outcrop
213GravestoneA big impressive gravestone
214boneEep!
215boneThis would feed a dog for a month
216carcassI think it's dead
217animalskullI wouldn't like to meet a live one
218VineA creepy creeper
219VineA creepy creeper
220VineA creepy creeper
221ChestPerhaps I should search it
222ChestI wonder what is inside...
223Ladderit's a ladder leading downwards
224shipThe Lumbridge Lady
225shipThe Lumbridge Lady
226holeThis ship isn't much use with that there
227Ladderit's a ladder leading upwards
228ChestPerhaps I should search it
229ChestI wonder what is inside...
230ChestPerhaps I should search it
231ChestI wonder what is inside...
232holeThis ship isn't much use with that there
233shipThe Lumbridge Lady
234shipThe Lumbridge Lady
235Altar of GuthixA sort of ancient altar thingy
236The Cauldron of ThunderA very large pot
237TreeA leafy tree
238shipA ship to Entrana
239shipA ship to Entrana
240shipA ship to Entrana
241shipA ship to Port Sarim
242shipA ship to Port Sarim
243shipA ship to Port Sarim
244Ladderit's a ladder leading downwards
245Dramen TreeThis tree doesn't look too healthy
246hopperYou put grain in here
247ChestPerhaps I should search it
248ChestI wonder what is inside...
249Ladderit's a ladder leading upwards
250sign2-handed swords sold here
251signye olde herbalist
252gateYou can pass through this on the members server
253gateYou can pass through this on the members server
254gateYou can pass through this on the members server
255Door matIf I ever get my boots muddy I know where to come
256gateThe gate is closed
257CauldronA very large pot
258cupboardThe cupboard is shut
259cupboardPerhaps I should search it
260gateThe bank vault gate
261fishI can see fish swimming in the water
262signHarry's fishing shack
263cupboardThe cupboard is shut
264cupboardPerhaps I should search it
265ChestPerhaps I should search it
266ChestI wonder what is inside...
267signThe shrimp and parrot
268signpostPalm Street
269RockslideA pile of rocks blocks your path
270Ladderit's a ladder leading upwards
271fishI can see fish swimming in the lava!
272barrelIts got ale in it
273tableIt's a sturdy table
274FireplaceIt would be very cold without this
275EggThats one big egg!
276EggsThey'd make an impressive omlette
277StalagmitesHmm pointy
278StoolA simple three legged stool
279BenchIt doesn't look to comfortable
280tableA round table ideal for knights
281tableA handy little table
282fountain of herosUse a dragonstone gem here to increase it's abilties
283bushA leafy bush
284hedgeA carefully trimmed hedge
285flowerA nice colourful flower
286plantHmm leafy
287Giant crystalHow unusual a crystal with a wizard trapped in it
288signThe dead man's chest
289signThe rising sun
290crateA large wooden storage box
291crateA large wooden storage box
292shipA merchant ship
293shipA merchant ship
294beehiveIt's guarded by angry looking bees
295Ladderit's a ladder leading upwards
296AltarAn altar to the evil God Zamorak
297signHickton's Archery store
298signpostTo Camelot
299ArchwayA decorative marble arch
300Obelisk of waterIt doesn't look very wet
301Obelisk of fireIt doesn't look very hot
302sand pitI can use a bucket to get sand from here
303Obelisk of airA tall stone pointy thing
304Obelisk of earthA tall stone pointy thing
305gateYou can pass through this on the members server
306Oak TreeA grand old oak tree
307Willow TreeA weeping willow
308Maple TreeIt's got nice shaped leaves
309Yew TreeA tough looking yew tree
310TreeA magical tree
311gateA gate guarded by a fierce barbarian
312signThe forester's arms
313flaxA flax plant
314Large treestumpSomeone has chopped this tree down!
315RocksA rocky outcrop
316LeverIt's a lever
317LeverIt's a lever
318LeverIt's a lever
319gateYou can pass through this on the members server
320shipA ship bound for Ardougne
321shipA ship bound for Ardougne
322Bakers StallA market stall
323Silk StallA market stall
324Fur StallA market stall
325Silver StallA market stall
326Spices StallA market stall
327gems StallA market stall
328crateA large heavy sealed crate
329crateA large heavy sealed crate
330signRPDT depot
331stairsThese lead upstairs
332ChestPerhaps I should search it
333ChestI wonder what is inside...
334ChestI wonder what is inside...
335ChestI wonder what is inside...
336ChestI wonder what is inside...
337ChestI wonder what is inside...
338ChestI wonder what is inside...
339Chestsomeone is stealing something from it
340ChestI wonder what is inside...
341empty stallA market stall
342stairsThese lead upstairs
343hopperYou put grain in here
344signpostArdougne city zoo
345signThe flying horse
346gateYou can pass through this on the members server
347gateYou can pass through this on the members server
348LeverThe lever is up
349LeverThe lever is up
350pipea dirty sewer pipe
351fishI can see fish swimming in the water
352fishI can see fish swimming in the water
353fishI can see fish swimming in the water
354fishI can see fish swimming in the water
355VineA creepy creeper
356gateThe main entrance to McGrubor's wood
357gateThe gate is open
358gateThe gate is closed
359stairsThese lead downstairs
360broken cartA farm cart
361LeverIt's a lever
362clock pole blueA pole - a pole to put cog's on
363clock pole redA pole - a pole to put cog's on
364clock pole purpleA pole - a pole to put cog's on
365clock pole blackA pole - a pole to put cog's on
366wallclockfaceIt's a large clock face
367Lever BracketTheres something missing here
368LeverIt's a lever
369stairsThese lead upstairs
370stairsThese lead downstairs
371gateThe gate is closed
372gateThe gate is open
373LeverThe lever is up
374LeverThe lever is up
375FoodtroughIt's for feeding the rat's
376fishI can see fish swimming in the water
377spearwallIt's a defensive battlement
378hornedskullA horned dragon skull
379ChestI wonder what is inside...
380ChestI wonder what is inside...
381guardscupboardThe cupboard is shut
382guardscupboardPerhaps I should search it
383Coal truckI can use this to transport coal
384shipA ship to Port Birmhaven
385shipA ship to Port Birmhaven
386shipA ship to Port Birmhaven
387TreeIt's a tree house
388BallistaIt's a war machine
389largespear
390spirit treeA grand old spirit tree
391young spirit TreeAncestor of the spirit tree
392gateThe gate is closed
393wallA damaged wall
394treeAn exotic looking tree
395treeAn exotic looking tree
396FernAn exotic leafy plant
397FernAn exotic leafy plant
398FernAn exotic leafy plant
399FernAn exotic leafy plant
400fly trapA small carnivourous plant
401FernAn exotic leafy plant
402FernAn exotic spikey plant
403plantWhat an unusual plant
404plantAn odd looking plant
405plantsome nice jungle foliage
406stone headIt looks like it's been here some time
407dead TreeA rotting tree
408sacksYep they're sacks
409khazard open ChestPerhaps I should search it
410khazard shut ChestI wonder what is inside...
411doorframeIt's a stone doorframe
412Sewer valveIt changes the water flow of the sewer's
413Sewer valve 2It changes the water flow of the sewer's
414Sewer valve 3It changes the water flow of the sewer's
415Sewer valve 4It changes the water flow of the sewer's
416Sewer valve 5It changes the water flow of the sewer's
417Cave entranceI wonder what is inside...
418Log bridgeA tree gnome construction
419Log bridgeA tree gnome construction
420tree platformA tree gnome construction
421tree platformA tree gnome construction
422gateThe gate is open
423tree platformA tree gnome construction
424tree platformA tree gnome construction
425Log bridgeA tree gnome construction
426Log bridgeA tree gnome construction
427tree platformA tree gnome construction
428tree platformA tree gnome construction
429Tribal brewA very large pot
430Pineapple treeA tree with nice ripe pineapples growing on it
431Pineapple treeThere are no pineapples left on the tree
432log raftA mighty fine raft
433log raftA mighty fine raft
434Tomb of hazeelA clay shrine to lord hazeel
435rangeA pot of soup slowly cooking
436BookcaseA large collection of books
437Carnillean ChestPerhaps I should search it
438Carnillean ChestI wonder what is inside...
439crateA crate used for storing food
440Butlers cupboardThe cupboard is shut
441Butlers cupboardThe cupboard is open
442gateThe gate is open
443gateThe gate is closed
444Cattle furnaceA red hot furnace
445Ardounge wallA huge wall seperating east and west ardounge
446Ardounge wall cornerA huge wall seperating east and west ardounge
447Dug up soilA freshly dug pile of mud
448Pile of mudMud caved in from above
449large Sewer pipea dirty sewer pipe
450Ardounge wall gatewayA huge set of heavy wooden doors
451cupboardThe cupboard is shut
452cupboardThe cupboard is open
453Fishing craneFor hauling in large catches of fish
454RowboatA reasonably sea worthy two man boat
455Damaged RowboatA not so sea worthy two man boat
456barrelI wonder what's inside
457gateThe gate is closed
458Ladderit's a ladder leading upwards
459Fishing craneFor hauling in large catches of fish
460Fishing craneFor hauling in large catches of fish
461Waterfallit's a waterfall
462leaflessTreeA pointy tree
463leaflessTreeA pointy tree
464log raftA mighty fine raft
465doorsThe doors are shut
466WellAn oddly placed well
467Tomb of glarialA stone tomb surrounded by flowers
468Waterfallit's a fast flowing waterfall
469Waterfallit's a fast flowing waterfall
470BookcaseA large collection of books
471doorsThe doors are shut
472doorsThe doors are shut
473Stone standOn top is an indent the size of a rune stone
474Stone standOn top is an indent the size of a rune stone
475Stone standOn top is an indent the size of a rune stone
476Stone standOn top is an indent the size of a rune stone
477Stone standOn top is an indent the size of a rune stone
478Stone standOn top is an indent the size of a rune stone
479Glarial's GravestoneThere is an indent the size of a pebble in the stone's center
480gateThe gate is closed
481crateIt's a crate
482leaflessTreeA pointy tree
483Statue of glarialA statue of queen glarial - something's missing
484Chalice of eternityA magically elevated chalice full of treasure
485Chalice of eternityA magically elevated chalice full of treasure
486doorsThe doors are shut
487LeverThe lever is up
488LeverThe lever is up
489log raft remainsoops!
490TreeA pointy tree
491RangeA hot well stoked range
492crateIt's an old crate
493fishI can see fish swimming in the water
494Watch towerThey're always watching
495signpostTourist infomation
496RocksA rocky outcrop
497doorsThe doors are open
498Rope ladderA hand made ladder
499cupboardThe cupboard is shut
500cupboardPerhaps I should search it
501Rope ladderA hand made ladder
502Cooking potthe mourners are busy enjoying this stew
503GallowBest not hang about!
504gateThe gate is closed
505crateA crate used for storing confiscated goods
506cupboardThe cupboard is shut
507cupboardPerhaps I should search it
508gateYou can pass through this on the members server
509cupboardThe cupboard is shut
510cupboardPerhaps I should search it
511signTailors fancy dress
512grand treethe grand tree
513gateThe gate is closed
514gateThe gate is open
515RocksA rocky outcrop
516RocksA rocky outcrop
517RocksA rocky outcrop
518RocksA rocky outcrop
519RocksA rocky outcrop
520RocksA rocky outcrop
521RocksA rocky outcrop
522RocksA rocky outcrop
523RocksA rocky outcrop
524Log bridgeA tree gnome construction
525Watch towerA tree gnome construction
526Log bridgeA tree gnome construction
527climbing rocksI wonder if I can climb up these
528LedgeIt looks rather thin
529LedgeIt looks rather thin
530logIt looks slippery
531logIt looks slippery
532RocksA rocky outcrop
533RocksA rocky outcrop
534RocksA rocky outcrop
535RocksA rocky outcrop
536RocksA rocky outcrop
537RocksA rocky outcrop
538RocksA rocky outcrop
539RocksA rocky outcrop
540RocksA rocky outcrop
541RocksA rocky outcrop
542RocksA rocky outcrop
543RocksA rocky outcrop
544RocksA rocky outcrop
545RocksA rocky outcrop
546RocksA rocky outcrop
547RocksA rocky outcrop
548RocksA rocky outcrop
549RocksA rocky outcrop
550RocksA rocky outcrop
551RocksA rocky outcrop
552RocksA rocky outcrop
553PalmTreeA shady palm tree
554Scorched EarthAn area of burnt soil
555RocksA moss covered rock
556signThe dancing donkey inn
557fishI can see fish swimming in the water
558Rocky WalkwayA precarious rocky walkway
559Rocky WalkwayA precarious rocky walkway
560Rocky WalkwayA precarious rocky walkway
561Rocky WalkwayA precarious rocky walkway
562fight DummyI can practice my fighting here
563gateThe gate is closed
564Jungle VineA deep jungle Vine
565statuehand carved
566signYe Olde Dragon Inn
567grand treethe grand tree
568grand treethe grand tree
569grand treethe grand tree
570grand treethe grand tree
571grand treethe grand tree
572Hillside EntranceLarge doors that seem to lead into the hillside
573treeA large exotic looking tree
574Log bridgeA tree gnome construction
575Tree platformA tree gnome construction
576Tree platformA tree gnome construction
577Metalic Dungeon GateIt seems to be closed
578Log bridgeA tree gnome construction
579Log bridgeA tree gnome construction
580Watch towerA tree gnome construction
581Watch towerA tree gnome construction
582Shallow waterA small opening in the ground with some spots of water
583DoorsPerhaps you should give them a push
584grand treethe grand tree
585Tree Ladderit's a ladder leading upwards
586Tree Ladderit's a ladder leading downwards
587blurberrys cocktail barthe gnome social hot spot
588Gem RocksA rocky outcrop with a vein of semi precious stones
589Giannes placeEat green eat gnome cruisine
590ropeswingA good place to train agility
591netA good place to train agility
592FrameA good place to train agility
593TreeIt has a branch ideal for tying ropes to
594TreeI wonder who put that rope there
595Treethey look fun to swing on
596cartA farm cart
597fenceit doesn't look too strong
598beamA plank of wood
599Signread me
600SignBlurberry's cocktail bar
601SignGiannes tree gnome cuisine
602SignHeckel funch's grocery store
603SignHudo glenfad's grocery store
604SignRometti's fashion outlet
605SignTree gnome bank and rometti's fashion outlet
606SignTree gnome local swamp
607SignAgility training course
608SignTo the grand tree
609RootTo the grand tree
610RootTo the grand tree
611Metal GateThe gate is closed
612Metal GateThe gate is open
613A farm cartIt is blocking the entrance to the village
614LedgeIt looks rather thin
615LedgeIt looks rather thin
616Ladderit's a ladder leading upwards
617cagei don't like the look of that
618glideri wonder if it flys
619cupboardThe cupboard is shut
620cupboardPerhaps I should search it
621stairsThese lead upstairs
622glideri wonder if it flys
623gateThe gate is open
624gateThe gate is closed
625chaos altarAn altar to the evil God Zamorak
626Gnome stronghold gateThe gate is closed
627ropeswingA good place to train agility
628ropeswingA good place to train agility
629stairsThese lead upstairs
630stairsThese lead downstairs
631ChestPerhaps I should search it
632ChestI wonder what is inside...
633Pile of rubbleWhat a mess
634Stone standOn top our four indents from left to right
635Watch towerA tree gnome construction
636Pile of rubbleWhat a mess
637RootTo the grand tree
638RootTo the grand tree
639RootTo the grand tree
640SignHome to the Head tree guardian
641HammockThey've got to sleep somewhere
642GoalYou're supposed to throw the ball here
643stone tileIt looks as if it might move
644ChestYou get a sense of dread from the chest
645ChestYou get a sense of dread from the chest
646Watch towerA tree gnome construction
647netA good place to train agility
648Watch towerA tree gnome construction
649Watch towerA tree gnome construction
650ropeswingA good place to train agility
651Bumpy DirtSome disturbed earth
652pipea dirty sewer pipe
653netA good place to train agility
654pipea dirty sewer pipe
655logIt looks slippery
656pipea dirty sewer pipe
657pipea dirty sewer pipe
658HandholdsI wonder if I can climb up these
659Ladderit's a ladder leading upwards
660gateThe gate is closed
661stronghold spirit TreeAncestor of the spirit tree
662TreeIt has a branch ideal for tying ropes to
663TreeI wonder who put that rope there
664TreeI wonder who put that rope there
665Spiked pitI don't want to go down there
666Spiked pitI don't want to go down there
667CaveI wonder what is inside...
668stone pebbleLooks like a stone
669Pile of rubbleRocks that have caved in
670Pile of rubbleRocks that have caved in
671pipeI might be able to fit through this
672pipe2
673StoneLooks like a stone
674StoneLooks like a stone
675ropeswingA good place to train agility
676logIt looks slippery
677netA good place to train agility
678LedgeIt looks rather thin
679HandholdsI wonder if I can climb up these
680logIt looks slippery
681logIt looks slippery
682Rotten GallowsA human corpse hangs from the noose
683Pile of rubbleRocks that have caved in
684ropeswingI wonder what's over here
685ropeswingI wonder what's over here
686ocksA moss covered rock
687TreeThis tree doesn't look too healthy
688Well stacked rocksRocks that have been stacked at regular intervals
689Tomb DolmenAn ancient construct for displaying the bones of the deceased
690HandholdsI wonder if I can climb up these
691Bridge BlockadeA crudely constructed fence to stop you going further
692Log BridgeA slippery log that is a make-do bridge
693HandholdsI wonder if I can climb up these
694Treethey look fun to swing on
695Treethey look fun to swing on
696Wet rocksA rocky outcrop
697Smashed tableThis table has seen better days
698Crude RaftA crudely constructed raft
699Daconia rockPiles of daconia rock
700statueA statue to mark Taie Bwo Wannai sacred grounds
701Stepping stonesA rocky outcrop
702gateThe gate is closed
703gateEnter to balance into an agility area
704gateEnter to balance into an agility area
705pipeIt looks a tight squeeze
706ropeswingA good place to train agility
707StoneLooks like a stone
708LedgeIt doesn't look stable
709VineA creepy creeper
710RocksA rocky outcrop
711Wooden GateThe gate is open
712Wooden GateThe gate is closed
713Stone bridgeAn ancient stone construction
714Stone bridgeAn ancient stone construction
715Stone bridgeAn ancient stone construction
716Stone bridgeAn ancient stone construction
717Stone platformAn ancient stone construction
718fenceit doesn't look too strong
719RocksA rocky outcrop
720Stone bridgeThe bridge has partly collapsed
721Stone bridgeThe bridge has partly collapsed
722Gate of IbanIt doesn't look very inviting
723Wooden DoorIt doesn't look very inviting
724Tomb DolmenAn ancient construct for displaying the bones of the deceased
725Cave entranceIt doesn't look very inviting
726Old bridgeThat's been there a while
727Old bridgeThat's been there a while
728Crumbled rockclimb up to above ground
729stalagmiteFormed over thousands of years
730stalagmiteFormed over thousands of years
731RocksA small rocky outcrop
732LedgeI might be able to climb that
733LeverSeems to be some sort of winch
734stalactiteFormed over thousands of years
735stalactiteFormed over thousands of years
736stalactiteFormed over thousands of years
737RocksA small rocky outcrop
738RocksA small rocky outcrop
739RocksA small rocky outcrop
740RocksA small rocky outcrop
741RocksA small rocky outcrop
742RocksA small rocky outcrop
743RocksA small rocky outcrop
744RocksA small rocky outcrop
745RocksA small rocky outcrop
746RocksA small rocky outcrop
747RocksA small rocky outcrop
748RocksA small rocky outcrop
749RocksA small rocky outcrop
750LedgeI might be able to climb that
751LedgeI might be able to climb that
752LedgeI might be able to climb that
753LedgeI might be able to climb that
754SwampThat smells horrid
755SwampThat smells horrid
756RocksA small rocky outcrop
757RocksA small rocky outcrop
758RocksA small rocky outcrop
759RocksA small rocky outcrop
760RocksA small rocky outcrop
761RocksA small rocky outcrop
762RocksA small rocky outcrop
763RocksA small rocky outcrop
764RocksA small rocky outcrop
765RocksA small rocky outcrop
766RocksA small rocky outcrop
767Pile of mudMud caved in from above
768Travel CartA sturdy cart for travelling in
769Travel CartA sturdy cart for travelling in
770RocksA small rocky outcrop
771stalactiteFormed over thousands of years
772RocksYou should be able to move these
773RocksYou should be able to move these
774RocksYou should be able to move these
775signThe Paramaya Hostel
776LadderA ladder that leads to the dormitory - a ticket is needed
777GrillThey looks suspicious
778Spiked pitThey looks suspicious
779signpostTo the Furnace
780ShipA sea faring ship called 'Lady Of The Waves'
781ShipA sea faring ship called 'Lady Of The Waves'
782GrillThey looks suspicious
783sacksYep they're sacks
784Zamorakian TempleScary!
785GrillThey looks suspicious
786GrillThey looks suspicious
787GrillThey looks suspicious
788GrillThey looks suspicious
789GrillThey looks suspicious
790GrillThey looks suspicious
791GrillThey looks suspicious
792RocksA small rocky outcrop
793RocksA small rocky outcrop
794Tomb DoorsOrnately carved wooden doors depicting skeletal warriors
795SwampThat smells horrid
796RocksYou should be able to move these
797RocksYou should be able to move these
798stalactiteFormed over thousands of years
799stalactiteFormed over thousands of years
800Spiked pitThey looks suspicious
801LeverSeems to be some sort of winch
802CageSeems to be mechanical
803CageSeems to be mechanical
804RocksMore rocks!
805Spear trapOuch!
806RocksMore rocks!
807RocksMore rocks!
808RocksMore rocks!
809RocksMore rocks!
810RocksMore rocks!
811RocksMore rocks!
812LedgeI might be able to climb that
813FurnaceCharred bones are slowly burning inside
814WellThe remains of a warrior slump over the strange construction
815PassageA strange metal grill covers the passage
816PassageThe passage way has swung down to a vertical position
817PassageThe passage way has swung down to a vertical position
818stalagmiteFormed over thousands of years
819RocksYou should be able to move these
820RocksYou should be able to move these
821RocksYou should be able to move these
822RocksYou should be able to move these
823RocksYou should be able to move these
824RocksYou should be able to move these
825PassageLooks suspicous!
826snap trapaaaarghh
827Wooden planksYou can walk across these
828PassageLooks suspicous!
829PassageLooks suspicous!
830Flames of zamorakCareful
831PlatformAn ancient construction
832RockScripture has been carved into the rock
833RockScripture has been carved into the rock
834RockScripture has been carved into the rock
835RockScripture has been carved into the rock
836wall grillIt seems to filter the rotten air through the caverns
837LedgeI might be able to make to the other side
838wall grillIt seems to filter the rotten air through the caverns
839Dug up soilA freshly dug pile of mud
840Dug up soilA freshly dug pile of mud
841Pile of mudMud caved in from above
842stalagmiteFormed over thousands of years
843Pile of mudMud and rocks piled up
844Pile of mudMud and rocks piled up
845Pile of mudMud and rocks piled up
846Pile of mudMud and rocks piled up
847Pile of mudMud and rocks piled up
848Spiked pitI don't want to go down there
849RocksA small rocky outcrop
850RocksA small rocky outcrop
851RocksA small rocky outcrop
852RocksA small rocky outcrop
853RocksA small rocky outcrop
854RocksA small rocky outcrop
855RocksA small rocky outcrop
856RocksA small rocky outcrop
857RocksA small rocky outcrop
858RocksA small rocky outcrop
859RocksA small rocky outcrop
860RocksA small rocky outcrop
861LedgeI might be able to climb that
862LedgeI might be able to climb that
863LedgeI might be able to climb that
864LedgeI might be able to climb that
865LedgeI might be able to climb that
866LedgeI might be able to climb that
867BoulderCould be dangerous!
868crateSomeone or something has been here before us
869DoorSpooky!
870PlatformAn ancient construction
871Cage remainsPoor unicorn!
872LedgeI might be able to climb that
873PassageLooks suspicous!
874PassageLooks suspicous!
875Gate of ZamorakIt doesn't look very inviting
876RocksA small rocky outcrop
877Bridge supportAn ancient construction
878Tomb of IbanA clay shrine to lord iban
879Claws of Ibanclaws of iban
880barrelIts stinks of alcohol
881RockScripture has been carved into the rock
882RocksMore rocks
883RocksMore rocks
884SwampThat smells horrid
885ChestPerhaps I should search it
886Stone bridgeAn ancient stone construction
887cageThat's no way to live
888cageThat's no way to live
889Stone stepsThey lead into the darkness
890Pile of mudMud and rocks piled up
891Stone bridgeThe bridge has partly collapsed
892Stone bridgeThe bridge has partly collapsed
893Stone bridgeThe bridge has partly collapsed
894Stone bridgeThe bridge has partly collapsed
895Stone bridgeThe bridge has partly collapsed
896Stone bridgeThe bridge has partly collapsed
897Stone bridgeThe bridge has partly collapsed
898Stone bridgeThe bridge has partly collapsed
899Stone bridgeThe bridge has partly collapsed
900Stone bridgeThe bridge has partly collapsed
901Stone bridgeThe bridge has partly collapsed
902Stone bridgeThe bridge has partly collapsed
903Stone bridgeThe bridge has partly collapsed
904Stone bridgeThe bridge has partly collapsed
905Stone bridgeThe bridge has partly collapsed
906Stone bridgeThe bridge has partly collapsed
907Stone bridgeThe bridge has partly collapsed
908Stone bridgeThe bridge has partly collapsed
909Stone bridgeThe bridge has partly collapsed
910Stone bridgeThe bridge has partly collapsed
911ChestPerhaps I should search it
912ChestI wonder what is inside...
913Pit of the DamnedThe son of zamoracks alter...
914Open DoorSpooky!
915signpostObservatory reception
916Stone GateA mystical looking object
917ChestPerhaps there is something inside
918ZodiacA map of the twelve signs of the zodiac
919ChestPerhaps I should search it
920Ladderit's a ladder leading upwards
921Stone stepsThey lead into the darkness
922RockScripture has been carved into the rock
923RockScripture has been carved into the rock
924RockScripture has been carved into the rock
925TelescopeA device for viewing the heavens
926GateThe entrance to the dungeon jail
927sacksThese sacks feels lumpy!
928Ladderthe ladder goes down into a dark area
929ChestAll these chests look the same!
930ChestAll these chests look the same!
931BookcaseA very roughly constructed bookcase.
932Iron GateA well wrought iron gate - it's locked.
933Ladderthe ladder down to the cavern
934ChestPerhaps there is something inside
935ChestAll these chests look the same!
936ChestPerhaps there is something inside
937ChestAll these chests look the same!
938RockslideA pile of rocks blocks your path
939AltarAn altar to the evil God Zamorak
940columnFormed over thousands of years
941Grave of ScorpiusHere lies Scorpius: dread follower of zamorak
942Bank ChestAllows you to access your bank.
943dwarf multicannonfires metal balls
944Disturbed sandFootprints in the sand show signs of a struggle
945Disturbed sandFootprints in the sand show signs of a struggle
946dwarf multicannon basebang
947dwarf multicannon standbang
948dwarf multicannon barrelsbang
949CaveI wonder what's inside!
950CaveI wonder what's inside!
951fenceThese bridges seem hastily put up
952signposta signpost
953RocksI wonder if I can climb up these
954RocksI wonder if I can climb up these
955Cave entranceA noxious smell emanates from the cave...
956ChestPerhaps I should search it
957ChestI wouldn't like to think where the owner is now
958Wooden DoorsLarge oak doors constantly watched by guards
959Pedestalsomething fits on here
960bushA leafy bush
961bushA leafy bush
962StandardA standard with a human skull on it
963Mining CaveA gaping hole that leads to another section of the mine
964Mining CaveA gaping hole that leads to another section of the mine
965RocksA small rocky outcrop
966LiftTo brings mined rocks to the surface
967Mining BarrelFor loading up mined stone from below ground
968HoleI wonder where this leads...
969HoleI wonder where this leads...
970CaveI wonder what's inside!
971CaveI wonder what's inside!
972CaveI wonder what's inside!
973CounterAn ogre is selling items here
974TrackTrain track
975CaveI wonder what's inside!
976Mine CartA heavily constructed and often used mining cart.
977Lift PlatformA wooden lift that is operated from the surface.
978ChestI wonder what is inside...
979ChestI wonder what is inside...
980Watch towerConstructed by the dwarven black guard
981Ladderit's a ladder leading upwards
982Cave entranceI wonder what is inside...
983Pile of mudMud caved in from above
984CaveI wonder what's inside!
985Ladderit's a ladder leading downwards
986crateA crate
987crateA crate
988GateThis gate barrs your way into gu'tanoth
989GateThis gate barrs your way into gu'tanoth
990bushA leafy bush
991bushA leafy bush
992bushA leafy bush
993bushA leafy bush
994multicannonfires metal balls
995RocksSome rocks are close to the egde
996RocksSome rocks are close to the edge
997Ladderit's a ladder leading downwards
998Cave entranceI wonder what is inside...
999CounterAn ogre is selling cakes here
1000ChestPerhaps I should search it
1001ChestI wonder what is inside...
1002ChestPerhaps I should search it
1003ChestI wonder what is inside...
1004BookcaseA large collection of books
1005Captains ChestI wonder what is inside...
1006Experimental AnvilAn experimental anvil - for developing new techniques in forging
1007RocksA small pile of stones
1008RocksA small rocky outcrop
1009ColumnCreated by ancient mages
1010WallCreated by ancient mages
1011WallCreated by ancient mages
1012WallCreated by ancient mages
1013WallCreated by ancient mages
1014LeverThe lever is up
1015LeverThe lever is down
1016WallCreated by ancient mages
1017Ladderit's a ladder leading downwards
1018WallCreated by ancient mages
1019GateThe gate is closed
1020GateThe gate is closed
1021Ladderit's a ladder leading upwards
1022shockcosmic energy
1023DeskA very strong looking table with some locked drawers.
1024CaveI wonder what's inside!
1025Mining CartA sturdy well built mining cart with barrels full of rock on the back.
1026Rock of DalgrothA mysterious boulder of the ogres
1027entranceCreated by ancient mages
1028Dried CactusIt looks very spikey
1029climbing rocksI wonder if I can climb up these
1030RocksStrange rocks - who knows why they're wanted?
1031lightningblimey!
1032Crude DeskA very roughly constructed desk
1033Heavy Metal GateThis is an immense and very heavy looking gate made out of thick wrought
metal
1034CounterAn ogre is selling cakes here
1035Crude bedA flea infested sleeping experience
1036flameslooks hot!
1037Carved RockAn ornately carved rock with a pointed recepticle
1038USEFREE SLOT PLEASE USE
1039crateA crate used for storing materials
1040crateA crate used for storing materials
1041barrelIts shut
1042BrickA stone brick
1043BrickA stone brick
1044BrickA stone brick
1045BrickA stone brick
1046BrickA stone brick
1047BrickA stone brick
1048Barrierthis section is roped off
1049buried skeletonI hope I don't meet any of these
1050BrickA stone brick
1051BrickA stone brick
1052Specimen trayA pile of sifted earth
1053winchThis winches earth from the dig hole
1054crateA crate
1055crateA crate
1056UrnA large ornamental urn
1057buried skeletonI'm glad this isn't around now
1058panning pointa shallow where I can pan for gold
1059RocksA small rocky outcrop
1060signposta signpost
1061signposta signpost
1062signposta signpost
1063signposta signpost
1064signpostDigsite educational centre
1065soilsoil
1066soilsoil
1067soilsoil
1068GateThe gate has closed
1069shipThe ship is sinking
1070barrelThe ship is sinking
1071LeakThe ship is sinking
1072bushA leafy bush
1073bushA leafy bush
1074cupboardThe cupboard is shut
1075sacksYep they're sacks
1076sacksYep they're sacks
1077LeakThe ship is sinking
1078cupboardThe cupboard is shut
1079Wrought Mithril GatesMagnificent wrought mithril gates giving access to the Legends Guild
1080Legends Hall DoorsSolid Oak doors leading to the Hall of Legends
1081Camp bedNot comfortable but useful nonetheless
1082barrelIt has a lid on it - I need something to lever it off
1083barrelI wonder what is inside...
1084ChestPerhaps I should search it
1085ChestI wonder what is inside...
1086Dense Jungle TreeThick vegetation
1087Jungle tree stumpA chopped down jungle tree
1088signpostTo the digsite
1089gateYou can pass through this on the members server
1090BookcaseA large collection of books
1091Dense Jungle TreeAn exotic looking tree
1092Dense Jungle TreeAn exotic looking tree
1093SprayThere's a strong wind
1094SprayThere's a strong wind
1095winchThis winches earth from the dig hole
1096BrickIt seems these were put here deliberately
1097Ropeit's a rope leading upwards
1098Ropeit's a rope leading upwards
1099Dense Jungle PalmA hardy palm tree with dense wood
1100Dense Jungle PalmA hardy palm tree with dense wood
1101Trawler netA huge net to catch little fish
1102Trawler netA huge net to catch little fish
1103BrickThe bricks are covered in the strange compound
1104ChestI wonder what is inside ?
1105ChestPerhaps I should search it
1106Trawler catchSmells like fish!
1107Yommi TreeAn adolescent rare and mystical looking tree in
1108Grown Yommi TreeA fully grown rare and mystical looking tree
1109Chopped Yommi TreeA mystical looking tree that has recently been felled
1110Trimmed Yommi TreeThe trunk of the yommi tree.
1111Totem PoleA nicely crafted wooden totem pole.
1112Baby Yommi TreeA baby Yommi tree - with a mystical aura
1113Fertile earthA very fertile patch of earth
1114Rock Hewn Stairssteps cut out of the living rock
1115Hanging ropeA rope hangs from the ceiling
1116RocksA large boulder blocking the stream
1117BoulderA large boulder blocking the way
1118dwarf multicannonfires metal balls
1119dwarf multicannon basebang
1120dwarf multicannon standbang
1121dwarf multicannon barrelsbang
1122rockA rocky outcrop
1123Rock Hewn Stairssteps cut out of the living rock
1124Rock Hewn Stairssteps cut out of the living rock
1125Rock Hewn Stairssteps cut out of the living rock
1126Compost HeapThe family gardeners' compost heap
1127beehiveAn old looking beehive
1128DrainThis drainpipe runs from the kitchen to the sewers
1129webAn old thick spider's web
1130fountainThere seems to be a lot of insects here
1131Sinclair CrestThe Sinclair family crest
1132barrelAnnas stuff - There seems to be something shiny at the bottom
1133barrelBobs things - There seems to be something shiny at the bottom
1134barrelCarols belongings - there seems to be something shiny at the bottom
1135barrelDavids equipment - there seems to be something shiny at the bottom
1136barrelElizabeths clothes - theres something shiny at the bottom
1137barrelFranks barrel seems to have something shiny at the bottom
1138Flour BarrelIts full of flour
1139sacksFull of various gardening tools
1140gateA sturdy and secure wooden gate
1141Dead Yommi TreeA dead Yommi Tree - it looks like a tough axe will be needed to fell
this
1142clawspellforces of guthix
1143RocksThe remains of a large rock
1144crateA crate of some kind
1145Cavernous OpeningA dark and mysterious cavern
1146Ancient Lava FurnaceA badly damaged furnace fueled by red hot Lava - it looks ancient
1147Spellchargeforces of guthix
1148RocksA small rocky outcrop
1149cupboardThe cupboard is shut
1150sacksYep they're sacks
1151RockA rocky outcrop
1152Saradomin stoneA faith stone
1153Guthix stoneA faith stone
1154Zamorak stoneA faith stone
1155Magical poolA cosmic portal
1156Wooden BeamSome sort of support - perhaps used with ropes to lower people over the
hole
1157Rope down into darknessA scarey downwards trip into possible doom.
1158Cave entranceA dark cave entrance leading to the surface.
1159Cave entranceA small tunnel that leads to a large room beyond.
1160Ancient Wooden DoorsThe doors are locked shut
1161TableAn old rickety table
1162Crude bedBarely a bed at all
1163Tall ReedsA tall plant with a tube for a stem.
1164Goblin foot printsThey seem to be heading south east
1165Dark Metal GateA dark metalic gate which seems to be fused with the rock
1166Magical poolA cosmic portal
1167Rope UpA welcome rope back up and out of this dark place.
1168Half buried remainsSome poor unfortunate soul
1169Totem PoleA carved and decorated totem pole
1170Totem PoleA carved and decorated totem pole
1171Comfy bedIts a bed - wow
1172Rotten Yommi TreeA decomposing fully grown Yommi Tree
1173Rotten Yommi TreeA decomposing felled Yommi Tree
1174Rotten Yommi TreeA decomposing Yommi Tree Trunk
1175Rotten Totem PoleA decomposing Totem Pole
1176Leafy Palm TreeA shady palm tree
1177Grand Viziers DeskA very elegant desk - you could knock it to get the Grand Viziers
attention.
1178Strange BarrelIt might have something inside of it.
1179shipA sturdy sailing ship
1180shipA sturdy sailing ship
1181shipA sturdy sailing ship
1182digsite bedNot comfortable but useful nonetheless
1183Tea stallA stall selling oriental infusions
1184BoulderA large boulder blocking the way
1185BoulderA large boulder blocking the way
1186Damaged EarthDisturbed earth - it will heal itself in time
1187Ladderit's a ladder leading upwards
1188Ladderit'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 ' (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 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.

Hidden Interface

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. |- |}