From a590a80190284c6615f19d16b9ca480724fc2959 Mon Sep 17 00:00:00 2001 From: Graham Date: Mon, 18 Jul 2022 19:14:59 +0100 Subject: [PATCH] Add list of all game packets For most packets we know (or have a very good guess at) the official Jagex name, based on the NXT/TFU leaks. The document will be fleshed out with the payloads and a more detailed description of every packet in the future. Signed-off-by: Graham --- share/doc/protocol/game.md | 210 +++++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 share/doc/protocol/game.md diff --git a/share/doc/protocol/game.md b/share/doc/protocol/game.md new file mode 100644 index 0000000000..fb2427b335 --- /dev/null +++ b/share/doc/protocol/game.md @@ -0,0 +1,210 @@ +# Game protocol + +## Upstream + +| Opcode | Length | Jagex name | Description | +|-------:|--------------:|-------------------------------|--------------------------------------------------------------| +| 0 | 12 | `IF_BUTTOND` | Drag component | +| 3 | 7 | `OPOBJ5` | ObjStack operation 5 | +| 4 | 3 | `OPPLAYER8` | Player operation 8 | +| 6 | 9 | `OPHELDD` | Drag obj | +| 7 | 6 | `IF_BUTTON6` | Component operation 6 | +| 8 | 7 | `OPOBJ3` | ObjStack operation 3 | +| 10 | 6 | `IF_BUTTON10` | Component operation 10 | +| 12 | 3 | `OPNPC2` | NPC operation 2 | +| 26 | 8 | `FRIENDLIST_ADD` | Add friend | +| 28 | 13 | `OPOBJT` | Use component on ObjStack | +| 30 | 6 | `IF_BUTTON3` | Component operation 3 | +| 33 | 3 | `OPNPC4` | NPC operation 4 | +| 37 | 3 | `OPNPC3` | NPC operation 3 | +| 40 | 12 | `IF_BUTTONT` | Use component on component | +| 42 | Variable byte | `MESSAGE_QUICKCHAT_PRIVATE` | Send private quickchat message | +| 48 | 7 | `OPLOC2` | Loc operation 2 | +| 52 | 3 | `OPPLAYER7` | Player operation 7 | +| 53 | 3 | `OPNPC5` | NPC operation 5 | +| 54 | 7 | `OPOBJ1` | ObjStack operation 1 | +| 58 | 16 | `OPHELDU` | Use obj on obj | +| 60 | 7 | `OPLOC5` | Operation 5 for loc | +| 61 | 6 | `IF_BUTTON4` | Component operation 4 | +| 65 | 2 | Unknown | NPC examine | +| 66 | 6 | `IF_BUTTON5` | Component operation 5 | +| 72 | 2 | Unknown | Obj examine | +| 75 | 8 | `CLAN_KICKUSER` | Kick user from clan chat | +| 77 | 3 | `OPPLAYER6` | Player operation 6 | +| 78 | Variable byte | `REFLECTION_CHECK_REPLY` | Send reflection check results | +| 81 | 8 | `OPHELD1` | Obj operation 1 | +| 85 | 4 | `FACE_SQUARE` | Face tile | +| 86 | 6 | `WINDOW_STATUS` | Send display mode, width, height and anti-aliasing mode | +| 88 | 8 | `OPHELD10` | Obj operation 10 | +| 89 | 13 | `OPLOCT` | Use component on loc | +| 90 | 10 | `SEND_SNAPSHOT` | Send abuse report | +| 91 | 0 | Unknown | Idle logout | +| 92 | 7 | `OPLOC1` | Loc operation 1 | +| 94 | 6 | `IF_BUTTON1` | Component operation 1 | +| 95 | 8 | `OPHELD8` | Obj operation 8 | +| 96 | 3 | `OPPLAYER5` | Player operation 5 | +| 97 | 6 | `IF_BUTTON9` | Component operation 9 | +| 102 | 8 | `OPHELD9` | Obj operation 9 | +| 103 | 8 | `OPHELD7` | Obj operation 7 | +| 105 | 3 | `OPPLAYER4` | Player operation 4 | +| 108 | 6 | `IF_BUTTON7` | Component operation 7 | +| 113 | 0 | `MAP_BUILD_COMPLETE` | Sent after map build complete | +| 116 | 15 | `OPLOCU` | Use obj on loc | +| 119 | 15 | `OPOBJU` | Use obj on ObjStack | +| 120 | 4 | `CLIENT_DETAILOPTIONS_STATUS` | Send graphics and audio options | +| 123 | 11 | `OPPLAYERU` | Use obj on player | +| 124 | 8 | `OPHELD2` | Obj operation 2 | +| 134 | 7 | `OPLOC4` | Loc operation 4 | +| 137 | 0 | `NO_TIMEOUT` | Sent periodically to ensure TCP connection does not time out | +| 140 | 4 | `EVENT_CAMERA_POSITION` | Sent periodically when camera rotates | +| 142 | 8 | `IGNORELIST_DEL` | Delete ignore | +| 145 | 8 | `OPHELD5` | Obj operation 5 | +| 148 | 3 | `OPPLAYER2` | Player operation 2 | +| 149 | 8 | `RESUME_P_NAMEDIALOG` | Enter player name in dialog box | +| 155 | 9 | `OPNPCT` | Use component on NPC | +| 156 | 2 | `TRANSMITVAR_VERIFYID` | Sent after verify ID variable changes | +| 157 | Variable byte | `MESSAGE_PRIVATE` | Send private message | +| 158 | 4 | Unknown | Click on If1 component | +| 159 | 7 | `OPLOC3` | Loc operation 3 | +| 160 | 11 | `OPNPCU` | Use obj on NPC | +| 164 | Variable byte | `RESUME_P_STRINGDIALOG` | Enter string in dialog box | +| 172 | 8 | `FRIENDLIST_DEL` | Delete friend | +| 176 | 2 | Unknown | Loc examine | +| 177 | 14 | `OPHELDT` | Use component on obj | +| 178 | 6 | `RESUME_PAUSEBUTTON` | Click/hit spacebar to continue past dialog box | +| 186 | Variable byte | `MESSAGE_PUBLIC` | Send public message | +| 189 | 0 | `CLOSE_MODAL` | Sent after modal dialog closed | +| 197 | 8 | `IGNORELIST_ADD` | Add ignore | +| 199 | Variable byte | `EVENT_MOUSE_MOVE` | Sent periodically when mouse is moved or clicked | +| 200 | 6 | `EVENT_MOUSE_CLICK` | Sent when mouse is clicked | +| 201 | 6 | `IF_BUTTON2` | Component operation 2 | +| 204 | 10 | `APCOORDT` | Use component on tile | +| 205 | 8 | `OPHELD4` | Obj operation 4 | +| 207 | 20 | `MOVE_MINIMAPCLICK` | Walk/run to coordinate picked using the minimap | +| 212 | 3 | `OPPLAYER1` | Player operation 1 | +| 214 | 8 | `OPHELD6` | Obj operation 6 | +| 215 | 9 | `FRIEND_SETRANK` | Set clan member rank | +| 216 | Variable byte | `CLIENT_CHEAT` | Run :: command | +| 218 | 8 | `CLAN_JOINCHAT_LEAVECHAT` | Join or leave clan chat | +| 219 | 4 | `RESUME_P_COUNTDIALOG` | Enter number in dialog box | +| 222 | Variable byte | `MESSAGE_QUICKCHAT_PUBLIC` | Send public quickchat message | +| 223 | 3 | `OPPLAYER3` | Player operation 3 | +| 224 | 9 | `OPPLAYERT` | Use component on player | +| 227 | 7 | `OPOBJ2` | ObjStack operation 2 | +| 230 | 6 | `MOVE_GAMECLICK` | Walk/run to coordinate picked using the 3D viewport | +| 231 | 2 | `RESUME_P_OBJDIALOG` | Enter obj in dialog box | +| 232 | 7 | `OPOBJ4` | ObjStack operation 4 | +| 234 | 3 | `SET_CHATFILTERSETTINGS` | Set public chat, private chat and trade filter settings | +| 236 | 4 | `DETECT_MODIFIED_CLIENT` | Sent if the client is running in a window | +| 242 | 8 | `OPHELD3` | Obj operation 3 | +| 243 | Variable byte | `URL_REQUEST` | Request server construct and open URL from hostname and path | +| 245 | 3 | `OPNPC1` | NPC operation 1 | +| 248 | 1 | `EVENT_APPLET_FOCUS` | Sent after window/applet focus changes | +| 250 | 4 | `SOUND_SONGEND` | Sent after song ends | +| 251 | 4 | `CLICKWORLDMAP` | Click on world map | +| 255 | 6 | `IF_BUTTON8` | Component operation 8 | + +## Downstream + +| Opcode | Length | Jagex name | Description | +|-------:|---------------:|----------------------------------------|-----------------------------------------------------------------------| +| 1 | Variable short | `IF_SETTEXT` | Set component text | +| 2 | Variable short | `UPDATE_FRIENDCHAT_CHANNEL_FULL` | Update full list of clan members | +| 4 | 1 | `FRIENDLIST_LOADED` | Set friendserver connection status | +| 8 | 1 | `UPDATE_RUNENERGY` | Update player's run energy | +| 10 | 6 | `VARP_LARGE` | Set player variable (32-bit) | +| 11 | 8 | `IF_SETCOLOUR` | Set component colour | +| 17 | 15 | `MAP_PROJANIM_HALFSQ` | Start a ProjAnim using half-tile coordinates | +| 18 | 8 | `IF_SETNPCHEAD` | Show NPC head on component | +| 19 | 20 | `UPDATE_STOCKMARKET_SLOT` | Update Grand Exchange slot | +| 23 | 3 | `CHAT_FILTER_SETTINGS` | Set public chat, private chat and trade filter settings | +| 25 | Variable short | `PLAYER_INFO` | Player update | +| 26 | 4 | Unknown | Clear objs shown on a component | +| 30 | Variable byte | `URL_OPEN` | Open URL in player's web browser | +| 31 | 12 | `IF_SETTARGETPARAM` | Set target param of created componets | +| 33 | 3 | `SET_MAP_FLAG` | Set minimap flag coordinates | +| 34 | Variable short | `UPDATE_INV_PARTIAL` | Update partial inventory | +| 35 | 9 | `IF_OPENSUB` | Open sub-interface | +| 38 | 3 | `VARP_SMALL` | Set player variable (8-bit) | +| 40 | 7 | `IF_SETHIDE` | Set component hidden flag | +| 42 | 6 | `CAM_FORCEANGLE` | Rotate camera | +| 43 | Variable short | `UPDATE_IGNORELIST` | Update ignore list | +| 44 | Variable byte | `MESSAGE_PRIVATE` | Received private message | +| 46 | 8 | `CAM_SHAKE` | Shake camera | +| 47 | 7 | `OBJ_REVEAL` | Reveal ObjStack belonging to another player to this player | +| 49 | Variable short | `REBUILD_NORMAL` | Rebuild map build area | +| 52 | 2 | `CAM_RESET` | Reset camera immediately | +| 53 | Variable short | `UPDATE_ZONE_PARTIAL_ENCLOSED` | Set current zone and enclose multiple zone update packets | +| 54 | Variable byte | `SET_MOVEACTION` | Change 'Walk here' text | +| 55 | 1 | `MINIMAP_TOGGLE` | Set minimap state (rotation lock, compass blackout and map blackout) | +| 59 | Variable byte | `MESSAGE_GAME` | Game message | +| 60 | 5 | `OBJ_ADD` | Add ObjStack | +| 63 | 7 | `LOC_ANIM_SPECIFIC` | Animate loc for this player only | +| 65 | 10 | `IF_SETPOSITION` | Set position of component | +| 72 | 2 | `UPDATE_REBOOT_TIMER` | Show 'System update in' countdown | +| 75 | Variable byte | `CLIENT_SETVARCSTR_SMALL` | Set client string variable (<= 250 bytes) | +| 78 | 0 | `RESET_CLIENT_VARCACHE` | Reset all player variables to zero | +| 86 | Variable byte | `UPDATE_SITESETTINGS` | Update website settings cookie | +| 87 | 8 | `IF_SETMODEL` | Show model on a component | +| 89 | 10 | `IF_MOVESUB` | Move sub-interface to another component | +| 90 | 12 | `IF_SETANGLE` | Rotate model shown on a component | +| 93 | 8 | `CAM_LOOKAT` | Rotate camera to look at coordinates | +| 95 | 2 | `UPDATE_RUNWEIGHT` | Update weight of player's inventory | +| 96 | 0 | `TRIGGER_ONDIALOGABORT` | Close the currently open dialog interface | +| 97 | 2 | `UPDATE_ZONE_PARTIAL_FOLLOWS` | Set current zone | +| 99 | Variable byte | `MESSAGE_QUICKCHAT_FRIENDCHANNEL` | Clan chat quickchat message | +| 100 | 3 | `MIDI_SONG` | Play song | +| 103 | 4 | `LAST_LOGIN_INFO` | Set IP address of last login | +| 104 | Variable byte | `MESSAGE_PRIVATE_ECHO` | Sent private message | +| 105 | 15 | `MAP_PROJANIM` | Start a ProjAnim | +| 111 | 17 | Unknown | Start a ProjAnim, adjusting the coordinates based on the source's BAS | +| 113 | 12 | `IF_SET_PLAYERHEAD_IGNOREWORN` | Show player head (excluding equipment) on component | +| 114 | 7 | `OBJ_COUNT` | Update ObjStack count | +| 115 | 3 | `LOC_PREFETCH` | Prefetch a loc and its models from the JS5 server | +| 116 | Variable short | `CLIENT_SETVARCSTR_LARGE` | Set client string variable (<= 65,530 bytes) | +| 120 | 3 | `OBJ_DEL` | Delete ObjStack | +| 126 | Variable byte | `SET_PLAYER_OP` | Change player op text, cursor and priority | +| 130 | 3 | Unknown | Teleport player | +| 131 | 4 | `LOC_ADD_CHANGE` | Adds or changes a loc | +| 133 | 14 | Unknown | Attach loc to PathingEntity | +| 135 | 6 | `IF_CLOSESUB` | Close sub-interface | +| 136 | Variable short | `NPC_INFO` | NPC update | +| 137 | 3 | `VARBIT_SMALL` | Set player bit variable (up to 8 bits) | +| 138 | 6 | `VARBIT_LARGE` | Set player bit variable (up to 32 bits) | +| 144 | 6 | `SOUND_AREA` | Play sound at specified coordinate with radius | +| 147 | 2 | `UPDATE_ZONE_FULL_FOLLOWS` | Set current zone and clear it to prepare for full update | +| 148 | 8 | `CLIENT_SETVARC_LARGE` | Set client variable (32-bit) | +| 150 | 5 | `NPC_ANIM_SPECIFIC` | Animate NPC for this player only | +| 151 | 8 | `CAM_MOVETO` | Move camera | +| 152 | 10 | `IF_SPINMODEL` | Set rotation speed of model shown on a component | +| 153 | 6 | `SYNTH_SOUND` | Play sound | +| 155 | Variable short | `REBUILD_REGION` | Rebuild map build area (instanced) | +| 156 | 2 | `CAM_SMOOTHRESET` | Reset camera smoothly | +| 158 | 6 | `MAP_ANIM` | Start a SpotAnim | +| 162 | 14 | `IF_SETCLICKMASK` | Set click masks of created components | +| 163 | 0 | Unknown | Reset client predictions of all player variables | +| 164 | 6 | `UPDATE_STAT` | Update player's level and experience in a skill | +| 166 | 28 | `UPDATE_UID192` | Update the computer/user's unique ID and write to random.dat | +| 168 | 2 | `UPDATE_INV_STOP_TRANSMIT` | Delete local copy of inventory used by CS2 scripts | +| 172 | 8 | `IF_SETANIM` | Animate model shown on a component | +| 173 | Variable short | `REFLECTION_CHECKER` | Perform reflection check | +| 174 | Variable byte | `UPDATE_FRIENDCHAT_CHANNEL_SINGLEUSER` | Update single clan member | +| 176 | 5 | `CLIENT_SETVARC_SMALL` | Set client variable (8-bit) | +| 177 | 11 | `HINT_ARROW` | Add, change or delete a hint arrow | +| 179 | 4 | `LOC_ANIM` | Animate loc | +| 182 | Variable byte | `UPDATE_FRIENDLIST` | Update single friend | +| 183 | 12 | `IF_SETOBJ` | Show obj on component | +| 192 | 0 | `LOGOUT` | Logout | +| 194 | Variable short | `UPDATE_INV_FULL` | Update full inventory | +| 199 | 6 | `IF_SETPLAYERHEAD` | Show player head (including equipment) on component | +| 206 | 6 | `MIDI_JINGLE` | Play jingle | +| 221 | Variable byte | `MESSAGE_QUICKCHAT_PRIVATE_ECHO` | Sent private quickchat message | +| 222 | Variable byte | `MESSAGE_QUICKCHAT_PRIVATE` | Received private quickchat message | +| 225 | 5 | `IF_SETTOP` | Set top-level interface | +| 229 | 0 | `RESET_ANIMS` | Stop all player/NPC animations | +| 232 | 2 | `LOC_DEL` | Delete loc | +| 237 | 10 | `SPOTANIM_SPECIFIC` | Start a SpotAnim for this player only | +| 242 | 3 | `SETDRAWORDER` | Set player/NPC render priority | +| 243 | 8 | `IF_SETSCROLLPOS` | Set component scroll position | +| 246 | Variable byte | `MESSAGE_FRIENDCHANNEL` | Clan chat message | +| 253 | Variable byte | `RUNCLIENTSCRIPT` | Run CS2 script |