Jerrith's UO Packets Guide
Note: This is still an early version of this document, which I am currently planning to revise significantly.  I'm letting people have this version now due to popular demand.  Items that I have not touched from the original can be noted by their further back modification date, and the fact that the modification date contains a time, which I have dropped.
This guide is based on the UOPackets.doc document "UOX Protocol" prepared by Damian.  The information contained within come from the UOX source code, the FUSE source code, various message board postings, various programs I've written, and other sources.
For simplicity, bytes are used, throughout this document.  If the size of a piece of data is larger than a byte, the size will be written afterwards, enclosed in []'s.  In the case of variable length data, attempts will be made to supply formulas to determine the width of pieces of data.
Also, seeing as how the number of "hack" programs available for UO has grown as of late, notes have been attached regarding checks to perform regarding the data, to insure it is unaltered.
Finally, before the specifications, just under this, you'll find a list of some common variables, and what they represent.

Layers:
0x01 - One handed weapon
0x02 - Two handed weapon, shield, or misc.
0x03 - Shoes
0x04 - Pants
0x05 - Shirt
0x06 - Helm/Hat
0x07 - Gloves
0x08 - Ring
0x09 - Unused
0x0A - Neck
0x0B - Hair
0x0C - Waist (half apron)
0x0D - Torso (inner) (chest armor)
0x0E - Bracelet
0x0F - Unused (backpack, but backpacks go to 0x15)
0x10 - Facial Hair
0x11 - Torso (middle) (sircoat, tunic, full apron, sash)
0x12 - Earrings
0x13 - Arms
0x14 - Back (cloak)
0x15 - Backpack
0x16 - Torso (outer) (robe)
0x17 - Legs (outer) (skirt/kilt)
0x18 - Legs (inner) (leg armor)
0x19 - Mount (horse, ostard, etc)
0x1A - NPC Buy Restock container
0x1B - NPC Buy no restock container
0x1C - NPC Sell container
0x1D - Bank Box

Direction:
0x00 - North
0x01 - Northeast
0x02 - East
0x03 - Southeast
0x04 - South
0x05 - Southwest
0x06 - West
0x07 - Northwest
If running, dir = dir|0x80  (so dirs become 0x80, 0x81, etc...) 

Speech Types:
0x00 - Regular 
0x02 - Emote (adds *'s as part of text) 
0x06 - System 
0x08 - Whisper
0x09 - Yell

Speech Fonts:
0x0000 - Bold Text 
0x0001 - Text with shadow 
0x0002 - Bold+Shadow 
0x0003 - Normal 
0x0004 - Gothic 
0x0005 - Italic Script 
0x0006 - Small Dark Letters 
0x0007 - Colorful Font (Buggy?) 
0x0008 - Rune font (Only use capital letters with this!) 
0x0009 - Small Light Letters 

Flag Byte:
0x04 - Poisoned
0x20 - Movable if normally not
0x40 - War mode
0x80 - Hidden

Skill List: 
(1 indexed version.  Some messages use it 0 indexed)
1 - Alchemy
2 - Anatomy
3 - Animal Lore
4 - Item ID (Appraise)
5 - Arms Lore
6 - Parrying (Battle Defense)
7 - Begging 
8 - Blacksmithing
9 - Bowcraft
10 - Peacemaking (Calming)
11 - Camping
12 - Carpentry
13 - Cartography
14 - Cooking
15 - Detect Hidden
16 - Enticement
17 - Evaluate Intelligence
18 - Healing
19 - Fishing 
20 - Forensic Evaluation
21 - Herding
22 - Hiding
23 - Provocation
24 - Inscription
25 - Lockpicking
26 - Magery
27 - Magic Resistance
28 - Tactics
29 - Snooping
30 - Musicianship
31 - Poisoning
32 - Archery
33 - Spirit Speak
34 - Stealing
35 - Tailoring
36 - Animal Taming (Taming)
37 - Taste Identification
38 - Tinkering
39 - Tracking
40 - Veterinary
41 - Swordsmanship
42 - Mace Fighting
43 - Fencing
44 - Wrestling
45 - Lumberjacking
46 - Mining
47 - Meditation
48 - Stealth
49 - Remove Trap
50 - Necromancy

 
Packet Specifications
0x00 Packet
Last modified on Friday, 20-Nov-1998
Create Character (100 bytes) 
* BYTE cmd 
* BYTE[4] pattern1 (0xedededed) 
* BYTE[4] pattern2 (0xffffffff) 
* BYTE pattern3 (0x00) 
* BYTE[30] char name 
* BYTE[30] char password 
* BYTE sex (0=male, 1=female)
* BYTE str 
* BYTE dex 
* BYTE int 
* BYTE skill1 
* BYTE skill1value 
* BYTE skill2 
* BYTE skill2value 
* BYTE skill3 
* BYTE skill3value 
* BYTE[2] skinColor 
* BYTE[2] hairStyle 
* BYTE[2] hairColor 
* BYTE[2] facial hair 
* BYTE[2] facial hair color 
* BYTE[2] location # from starting list 
* BYTE[2] unknown1 
* BYTE[2] slot
* BYTE[4] clientIP 

Notes:
Str, dex and int should always sum to 65.
Str, dex and int should always be between 10 and 45, inclusive.
Skill1, skill2, and skill3 should never be the same value.  
Skill1, skill2, and skill3 should always be between 0 and 45, inclusive.
Skill1value, skill2value, and skill3value should always sum to 100.
Skill1value, skill2value, and skill3value should always be between 0 and 50, inclusive.
SkinColor should always be between 0x3EA and 0x422, exclusive.
HairColor and facialHairColor should always be between 0x44E and 0x4AD, exclusive.
HairStyle should be between 0x203B and 0x204A, exclusive, and it should also exclude 0x203D to 0x2044, exclusive.
FacialHairStyle should be between 0x203E and 0x204D

0x01 Packet
Last Modified on Saturday, 24-Oct-1998  
Disconnect Notification (5 bytes) 
* BYTE cmd 
* BYTE[4] pattern (0xFFFFFFFF)

Note:  Sent when the user chooses to return to the main menu from the character select menu. 

0x02 Packet
Last Modified on Friday, 20-Nov-1998 
Move Request (3 bytes) 
* BYTE cmd 
* BYTE direction 
* BYTE sequence number 
Note: sequence number starts at 0, after a reset.  However, if 255 is reached, the next seq # is 1, not 0.

0x03 Packet
Last Modified on Friday, 20-Nov-1998 
Talk Request (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE SpeechType 
* BYTE[2] Color 
* BYTE[2] SpeechFont 
* BYTE[?] msg - Null Terminated (blockSize - 8) 

0x05 Packet
Last Modified on Thursday, 16-Apr-1998 19:51:56 EDT 
Attack Request (5 bytes) 
* BYTE cmd 
* BYTE[4] CharID to be attacked 

0x06 Packet
Last Modified on Monday, 13-Apr-1998 17:05:50 EDT 
Double click (5 bytes) 
* BYTE cmd 
* BYTE[4] item/char id 

0x07 Packet
Last Modified on Tuesday, 14-Apr-1998 20:53:26 EDT 
Pick Up Item(s) (7 bytes) 
* BYTE cmd 
* BYTE[4] item id 
* BYTE[2] # of items in stack 

0x08 Packet
Last Modified on Friday, 13-Nov-1998 20:53:27 EDT 
Drop Item(s) (14 bytes) 
* BYTE cmd 
* BYTE[4] item id 
* BYTE[2] xLoc 
* BYTE[2] yLoc 
* BYTE zLoc 
* BYTE[4] Move Into (FF FF FF FF if normal world) 


0x09 Packet
Last Modified on Monday, 13-Apr-1998 17:05:52 EDT 
Single click (5 bytes) 
* BYTE cmd 
* BYTE[4] item/char id 


0x11 Packet
Last Modified on Tuesday, 20-Apr-1999 
Stat window info (66 bytes) 
* BYTE cmd 
* BYTE[2] packet length (0x0042) 
* BYTE[4] player id 
* BYTE[30] playerName 
* BYTE[2] currentHitpoints 
* BYTE[2] maxHitpoints 
* BYTE[1] name change flag (0xFF = allowed, 0 = not allowed)
* BYTE[1] flag (0x00 - Stats after this flag are invalid.  0x01 - Stats after this flag are valid)
* BYTE sex (0=male, 1=female) 
* BYTE[2] str 
* BYTE[2] dex 
* BYTE[2] int 
* BYTE[2] currentStamina 
* BYTE[2] maxStamina 
* BYTE[2] currentMana 
* BYTE[2] maxMana 
* BYTE[4] gold 
* BYTE[2] armor class 
* BYTE[2] weight 

0x12 Packet
Last Modified on Sunday, 17-May-1998 15:27:53 EDT 
Request Skill/Action/Magic Usage (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE type 
* 0x24 ($) - skill 
* BYTE[blockSize-4] skill (null terminated strings) 
* "1 0" - anatomy 
* "2 0" - animal lore 
* "3 0" - item identification 
* "4 0" - arms lore 
* "6 0" - begging 
* "9 0" - peacemaking 
* "12 0" - cartography 
* "14 0" - detect hidden 
* "15 0" - entice 
* "16 0" - evaluate intelligence 
* "19 0" - forensic evaluation 
* "21 0" - hiding 
* "22 0" - provocation 
* "23 0" - inscription 
* "30 0" - poisoning 
* "32 0" - spirit speak 
* "33 0" - stealing 
* "35 0" - taming 
* "36 0" - taste identification 
* "38 0" - tracking 
* 0x56 (V) - Macro'd Spell 
* BYTE[blockSize-4] Spell (null terminated strings) 
* "2" - Create Food 
* "3" - Feeblemind 
* "4" - Heal 
* "5" - Magic Arrow 
* "6" - Night Sight 
* "7" - Reactive Armor 
* "8" - Weaken 
* "9" - Agility 
* "10" - Cunning 
* "11" - Cure 
* "12" - Harm 
* "13" - Magic Trap 
* "14" - Magic Untrap 
* "15" - Protection 
* "16" - Strength 
* "17" - Bless 
* "18" - Fireball 
* "19" - Magic Lock 
* "20" - Poison 
* "21" - Telekenisis 
* "22" - Teleport 
* "23" - Unlock 
* "24" - Wall of Stone 
* "25" - Arch Cure 
* "26" - Arch Protection 
* "27" - Curse 
* "28" - Fire Field 
* "29" - Greater Heal 
* "30" - Lightning 
* "31" - Mana Drain 
* "32" - Recall 
* "33" - Blade Spirit 
* "34" - Dispel Field 
* "35" - Incognito 
* "36" - Reflection 
* "37" - Mind Blast 
* "38" - Paralyze 
* "39" - Poison Field 
* "40" - Summon Creature 
* "41" - Dispel 
* "42" - Energy Bolt 
* "43" - Explosion 
* "44" - Invisibility 
* "45" - Mark 
* "46" - Mass Curse 
* "47" - Paralyze Field 
* "48" - Reveal 
* "49" - Chain Lightning 
* "50" - Energy Field 
* "51" - Flame Strike 
* "52" - Gate 
* "53" - Mana Vampire 
* "54" - Mass Dispel 
* "55" - Meteor Shower 
* "56" - Polymorph 
* "57" - Earthquake 
* "58" - Energy Vortex 
* "59" - Ressurection 
* "60" - Summon Air Elemental 
* "61" - Summon Daemon 
* "62" - Summon Earth Elemental 
* "63" - Summon Fire Elemental 
* "64" - Summon Water Elemental 
* 0x58 (X) - Open Door 
* BYTE null termination (0x00) 
* 0xc7 - action 
* BYTE[blockSize-4] Action (null terminated strings) 
* "bow" 
* "salute" 

0x13 Packet
Last Modified on Thursday, 19-Nov-1998 
Drop->Wear Item (10 bytes) 
* BYTE cmd 
* BYTE[4] itemid 
* BYTE layer (see layer list at top) 
* BYTE[4] playerID 
Note: The layer byte should not be trusted.  

0x1A Packet
Last Modified on Saturday, 13-Apr-1999 
Object Information (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE[4] itemID 
* BYTE[2] model # 
* if (itemID & 0x80000000) 
* BYTE[2] item count (or model # for corpses) 
* if (model & 0x8000) 
* BYTE Incr Counter (increment model by this #) 
* BYTE[2] xLoc (only use lowest significant 15 bits) 
* BYTE[2] yLoc 
* if (xLoc & 0x8000) 
* BYTE direction 
* BYTE zLoc 
* if (yLoc & 0x8000) 
* BYTE[2] dye 
* if (yLoc & 0x4000) 
* BYTE flag byte (See top)
 

0x1B Packet
Last Modified on Friday, 20-Nov-1998
Char Location and body type (37 bytes) 
* BYTE cmd 
* BYTE[4] player id 
* BYTE[4] unknown1 
* BYTE[2] bodyType 
* BYTE[2] xLoc 
* BYTE[2] yLoc 
* BYTE[2] zLoc 
* BYTE direction 
* BYTE[2] unknown2 
* BYTE[4] unknown3 (usually has FF somewhere in it) 
* BYTE[4] unknown4 
* BYTE flag byte 
* BYTE unknown4 (*not* notoriety) 
* BYTE[7] unknown5 


0x1C Packet
Last Modified on Friday, 20-Apr-1998 
Send Speech (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE[4] itemID (FF FF FF FF = system) 
* BYTE[2] model (item hex # - FF FF = system) 
* BYTE Type 
* BYTE[2] Text Color 
* BYTE[2] Font 
* BYTE[30] Name 
* BYTE[?] Null-Terminated Message (? = blockSize - 44) 


0x1D Packet
Last Modified on Monday, 13-Apr-1998 17:06:02 EDT 
Delete object (5 bytes) 
* BYTE cmd 
* BYTE[4] item/char id 


0x20 Packet
Last Modified on Thursday, 19-Nov-1998 
Draw Game Player (19 bytes) 
* BYTE cmd 
* BYTE[4] creature id 
* BYTE[2] bodyType 
* BYTE unknown1 (0x00) 
* BYTE[2] skin color / hue 
* BYTE flag byte 
* BYTE[2] xLoc 
* BYTE[2] yLoc 
* BYTE[2] unknown2 (0)
* BYTE direction 
* BYTE zLoc 

Note: Only used with the character being played by the client.

0x21 Packet
Last Modified on Wednesday, 06-May-1998 23:30:37 EDT 
Character Move Reject (8 bytes) 
* BYTE cmd 
* BYTE sequence # 
* BYTE[2] xLoc 
* BYTE[2] yLoc 
* BYTE direction 
* BYTE zLoc 


0x22 Packet
Last Modified on Wednesday, 11-Nov-1998 
Character Move ACK/ Resync Request(3 bytes) 
* BYTE cmd 
* BYTE sequence (matches sent sequence) 
* BYTE (0x00) 



0x23 Packet
Last Modified on Sunday, 17-May-1998 13:33:54 EDT 
Dragging of Items (26 bytes) 
* BYTE cmd 
* BYTE[2] model # 
* BYTE[3] unknown1 
* BYTE[2] stack count 
* BYTE[4] Source ID 
* BYTE[2] Source xLoc 
* BYTE[2] Source yLoc 
* BYTE Source zLoc 
* BYTE[4] Target id 
* BYTE[2] Target xLoc 
* BYTE[2] Target yLoc 
* BYTE Target zLoc 

0x24 Packet
Last Modified on Tuesday, 14-Apr-1998 20:53:33 EDT 
Draw Container (7 bytes) 
* BYTE cmd 
* BYTE[4] item id 
* BYTE[2] model-Gump 
* 0x003c = backpack 



0x25 Packet
Last Modified on Saturday, 02-May-1998 16:05:35 EDT 
Add Item to Container (20 bytes) 
* BYTE cmd 
* BYTE[4] item id to add 
* BYTE[2] model 
* BYTE unknown1 (0)
* BYTE[2] # of items 
* BYTE[2] xLoc in container 
* BYTE[2] yLoc in container 
* BYTE[4] itemID of container 
* BYTE[2] color 


0x26 Packet
Last Modified on Saturday, 23-May-1998 17:08:06 EDT 
Kick Player (5 bytes) 
* BYTE cmd 
* BYTE[4] ID of GM who issued kick? 


0x27 Packet
Last Modified on Sunday, 17-May-1998 13:33:55 EDT 
Reject Request to Move Items (2 bytes) 
* BYTE cmd 
* BYTE unknown1 (0x00) 


0x28 Packet
Last Modified on Tuesday, 21-Apr-1998 20:45:16 EDT 
Clear Square (5 bytes) 
* BYTE cmd 
* BYTE[2] xLoc 
* BYTE[2] yLoc 

0x29 Packet
Last Modified on Monday, 19-Apr-1999 
OK To Remove Worn Item(1 bytes) 
* BYTE cmd 
Note: Information from Fallo & FUSE source, and later Uziel and Rhad from NWO.
0x2C Packet
Last Modified on Tuesday, 21-Apr-1998 20:45:18 EDT 
Shift Body Type (2 bytes) 
* BYTE cmd 
* BYTE amount to subtract from current body type 

0x2E Packet
Last Modified on Thursday, 19-Nov-1998 
Worn Item (15 bytes) 
* BYTE cmd 
* BYTE[4] itemid (always starts 0x40 in my data) 
* BYTE[2] model (item hex #) 
* BYTE (0x00) 
* BYTE layer
* BYTE[4] playerID 
* BYTE[2] color/hue 


0x2F Packet
Last Modified on Saturday, 1-May-1999
Fight Occurring (10 bytes) 
* BYTE cmd 
* BYTE unknown1 (0)
* BYTE[4] ID of attacker 
* BYTE[4] ID of attacked 
This packet is sent when there is a fight going on somewhere on screen.


0x33 Packet
Last Modified on Thursday, 19-Nov-1998 
Pause/Resume Client (2 bytes)
* BYTE cmd 
* BYTE pause/resume (0=pause, 1=resume)

0x34 Packet
Last modified on Thursday, 19-Nov-1998 
Get Player Status (10 bytes) 
* BYTE cmd 
* BYTE[4] pattern (0xedededed) 
* BYTE getType 
* 0x04 - Basic Stats (Packet 0x11 Response) 
* 0x05 = Request Skills (Packet 0x3A Response) 
* BYTE[4] playerID 


0x3A Packet
Last modified on Monday, 3-May-1999 
Send Skills (Variable/190 bytes) 
* BYTE cmd 
* BYTE[2] blockSize (currently 0x00BE for full list) 
* BYTE Type (0x00= full list, 0xFF = single skill update) 
* Repeat next until done - 46 skills 
* BYTE[2] id # of skill (0x01 - 0x2e) 
* BYTE[2] skill Value * 10 
* BYTE[2] null (00 00)  (ONLY IF TYPE == 0x00) 

Note: Can also send just one skill, to update that skill.

0x3B Packet
Last Modified on Wednesday, 06-May-1998 23:30:41 EDT 
Buy Item(s) (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE[4] vendorID 
* BYTE flag 
* 0x00 - no items following 
* 0x02 - items following 
* For each item 
* BYTE (0x1A) 
* BYTE[4] itemID (from 3C packet) 
* BYTE[2] # bought 


0x3C Packet
Last Modified on Saturday, 02-May-1998 16:05:37 EDT 
Items in Container (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE[2] # of Item segments 
* Item Segments: 
* BYTE[4] itemID 
* BYTE[2] model 
* BYTE unknown1 (0x00) 
* BYTE[2] # of items in stack 
* BYTE[2] xLoc 
* BYTE[2] yLoc 
* BYTE[4] Container ItemID 
* BYTE[2] color 


0x4E Packet
Last Modified on Sunday, 17-May-1998 13:33:55 EDT 
Personal Light Level (6 bytes) 
* BYTE cmd 
* BYTE[4] creature id 
* BYTE level 


0x4F Packet
Last Modified on Saturday, 14-Nov-1998 
Overall Light Level (2 bytes) 
* BYTE cmd 
* BYTE level 
* 0x00 - day 
* 0x09 - OSI night
* 0x1F - Black 
* Max normal val = 0x1F 

0x53 Packet
Last Modified on Sunday, 15-Nov-1998 
Idle Warning(2 bytes) 
* BYTE cmd 
* BYTE value (0x07 - idle, 0x05 - another character is online)

0x54 Packet
Last Modified on Sunday, 17-May-1998 13:33:59 EDT 
Play Sound Effect (12 bytes) 
* BYTE cmd 
* BYTE mode (0x00=quiet, infinite repeat, 0x01=single normally played sound effect) 
* BYTE[2] SoundModel 
* BYTE[2] unknown3 (speed/volume modifier? Line of sight stuff?) 
* BYTE[2] xLoc 
* BYTE[2] yLoc 
* BYTE[2] zLoc 

0x55 Packet
Last Modified on Monday, 26-Oct-1998 
Login Complete, Start Game (1 byte) 
* BYTE cmd 

0x56 Packet
Last Modified on Sunday, 2-May-1999 
Map Related(11 bytes) 
* BYTE cmd 
* BYTE[4] id
* BYTE command (1 = add map point, 5 = display map, 7 = set plotting state)
* BYTE plotting state (1=on, 0=off, valid only if command 7)
* BYTE[2] x location (relative to upper left corner of the map, in pixels, for points)
* BYTE[2] y location (relative to upper left corner of the map, in pixels, for points)

0x5B Packet
Last Modified on Saturday, 18-Apr-1998 17:49:28 EDT 
Time (4 bytes) 
* BYTE cmd 
* BYTE hour 
* BYTE minute 
* BYTE second 


0x5D Packet
Last Modified on Monday, 13-Apr-1998 17:06:26 EDT 
Login Character (73 bytes) 
* BYTE cmd 
* BYTE[4] pattern1 (0xedededed) 
* BYTE[30] char name 
* BYTE[30] char password 
* BYTE[4] slot choosen (0-based) 
* BYTE[4] clientIP 


0x65 Packet
Last Modified on Friday, 20-Nov-1998 
Set Weather (4 bytes) 
* BYTE cmd 
* BYTE type (0x00 - dry, 0x01 - rain, 0x02 - snow) 
* BYTE[2] amount/density 


0x66 Packet
Last Modified on Wednesday, 06-May-1998 23:44:04 EDT 
Books - Page (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE[4] bookID 
* BYTE[2] # of pages in this packet (when requesting always requests 1) 
* For each page: 
* BYTE[2] page # 
* BYTE[2] # of lines on page 
* Server -> (-1 = no lines) 
* Client -> (-1 = request page) 
* Client -> (> 0 = write page) 
* Repeated for each line: 
* BYTE[var] null terminated line 
NOTE: # of lines on page is always -1 for page requests


0x69 Packet
Last Modified on Thursday, 23-Apr-1998 19:26:05 EDT 
Change Text/Emote Color (5 bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE[2] unknown1 
The client sends two of these independent of the color chosen. It sends two of them in quick succession as part of the "same" packet. The unkonwn1 is 0x00 0x01 in the first and 0x00 0x02 in the second.

Note, this message has been removed.  It is no longer used.


0x6C Packet
Last Modified on Thursday, 19-Nov-1998 
Clicking Commands (19 bytes) 
* BYTE cmd 
* BYTE type 
* 0x00 = server set cursor to pointer 
* 0x01 = client return pointer position 
* BYTE[4] charID 
* BYTE Cursor Type 
* 0x00 - Select Object 
* 0x01 - Choose x, y, z 
* The following are always sent but are only valid if sent by client 
* BYTE[4] Clicked On ID 
* BYTE[2] click xLoc 
* BYTE[2] click yLoc 
* BYTE unknown2 (0x00) 
* BYTE click zLoc 
* BYTE[2] model # (if a static tile, 0 if a map/landscape tile)

Note: the model # and charID should NEVER be trusted.

0x6D Packet
Last Modified on Sunday, 17-May-1998 13:33:59 EDT 
Play Midi Music (3 bytes) 
* BYTE cmd 
* BYTE[2] musicID 

0x6E Packet
Last Modified on Monday, 19-Apr-1999 
Character Animation (14 bytes) 
* BYTE cmd 
* BYTE[4] item/char ID 
* BYTE[2] movement model 
* 0x00 = walk 
* 0x01 = walk faster 
* 0x02 = run 
* 0x03 = run (faster?) 
* 0x04 = nothing 
* 0x05 = shift shoulders 
* 0x06 = hands on hips 
* 0x07 = attack stance (short) 
* 0x08 = attack stance (longer) 
* 0x09 = swing (attack with knife) 
* 0x0a = stab (underhanded) 
* 0x0b = swing (attack overhand with sword) 
* 0x0c = swing (attack with sword over and side) 
* 0x0d = swing (attack with sword side) 
* 0x0e = stab with point of sword 
* 0x0f = ready stance 
* 0x10 = magic (butter churn!) 
* 0x11 = hands over head (balerina) 
* 0x12 = bow shot 
* 0x13 = crossbow 
* 0x14 = get hit 
* 0x15 = fall down and die (backwards) 
* 0x16 = fall down and die (forwards) 
* 0x17 = ride horse (long) 
* 0x18 = ride horse (medium) 
* 0x19 = ride horse (short) 
* 0x1a = swing sword from horse 
* 0x1b = normal bow shot on horse 
* 0x1c = crossbow shot 
* 0x1d = block #2 on horse with shield 
* 0x1e = block on ground with shield 
* 0x1f = swing, and get hit in middle 
* 0x20 = bow (deep) 
* 0x21 = salute 
* 0x22 = scratch head 
* 0x23 = 1 foot forward for 2 secs 
* 0x24 = same 
* BYTE unknown1 (0x00) 
* BYTE direction 
* BYTE[2] repeat (1 = once / 2 = twice / 0 = repeat forever) 
* BYTE forward/backwards(0x00=forward, 0x01=backwards) 
* BYTE repeat Flag (0 - Don't repeat / 1 repeat) 
* BYTE frame Delay (0x00 - fastest / 0xFF - Too slow to watch) 

0x6F Packet
Last Modified on Friday, 20-Nov-1998 
Secure Trading (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE action
* BYTE[4] id1
* BYTE[4] id2
* BYTE[4] id3
* BYTE nameFollowing (0 or 1)
If (nameFollowing = 1) 
* BYTE[?] charName

0x70 Packet
Last Modified on Friday, 20-Nov-1998 
Graphical Effect (28 bytes) 
* BYTE cmd 
* BYTE direction type 
* 00 = go from source to dest 
* 01 = lightning strike at source 
* 02 = stay at current x,y,z 
* 03 = stay with current source character id 
* BYTE[4] character id 
* BYTE[4] target id
* BYTE[2] model of the first frame of the effect
* BYTE[2] xLoc 
* BYTE[2] yLoc 
* BYTE zLoc 
* BYTE[2] xLoc of target 
* BYTE[2] yLoc of target 
* BYTE zLoc of target 
* BYTE speed of the animation
* BYTE duration (0=really long, 1= shortest)
* BYTE[2] unknown2 (0 works)
* BYTE adjust direction during animation (1=no)
* BYTE explode on impact 

  0x71 Packet
Open up the bulletin board and all it's messages
* BYTE cmd 
* BYTE  Length
* 0x26 - ??
* BYTE flag
* 0x00 - Board Name
* 0x01 - Message header
* 0x02 - Message Body
* 0x03 - Full Message Body
* 0x04 - Associate Message
* BYTE[4] Item/Char ID



0x72 Packet
Last Modified on Saturday, 14-Nov-1998 
Request Mode Change/Send War Mode status (5 bytes) 
* BYTE cmd 
* BYTE flag 
* 0x00 - Normal 
* 0x01 - Fighting 
* BYTE[3] unknown1 (always 00 32 00 in testing) 
Server replies with 0x77 packet

0x73 Packet
Last Modified on Friday, 20-Nov-1998 
Ping message (2 bytes) 
* BYTE cmd 
* BYTE seq 
0x74 Packet
Last Modified on Sunday, 03-May-1998 22:52:07 EDT 
Open Buy Window (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE[4] (vendorID | 0x40000000) 
* BYTE # of items 
* # of items worth of item segments 
* BYTE[4] price 
* BYTE length of text description 
* BYTE[text length] item description 
NOTE: This packet is always preceded by a describe contents packet (0x3c) with the container id as the (vendorID | 0x40000000) and then an open container packet (0x24?) with the vendorID only and a model number of 0x0030 (probably the model # for the buy screen)


0x75 Packet
Last Modified on Saturday, 23-May-1998 17:08:06 EDT 
Rename NPC (35 bytes) 
* BYTE cmd 
* BYTE[4] npcID 
* BYTE[30] new name 

0x76 Packet
Last Modified on Sunday, 2-May-1999 
New Subserver (16 bytes) 
* BYTE cmd 
* BYTE[2] xLoc 
* BYTE[2] yLoc 
* BYTE[2] zLoc 
* BYTE[9] unknown 

0x77 Packet
Last Modified on Friday, 20-Nov-1998 
Update Player (17 bytes) 
* BYTE cmd 
* BYTE[4] player id 
* BYTE[2] model
* BYTE[2] xLoc 
* BYTE[2] yLoc 
* BYTE zLoc 
* BYTE direction 
* BYTE[2] hue/skin color 
* BYTE flag (bit field) 
* BYTE notoriety (signed 2's compliment) 


0x78 Packet
Last Modified on Tuesday, 13-April-1999 
Draw object (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE[4] itemID/playerID 
* BYTE[2] model (item hex #) 
* if (itemID & 0x80000000) 
* BYTE[2] amount/Corpse Model Num 
* BYTE[2] xLoc (only 15 lsb) 
* BYTE[2] yLoc 
* if (xLoc & 0x8000) 
* BYTE direction 
* BYTE zLoc 
* BYTE direction 
* BYTE[2] dye/skin color 
* BYTE flag 
* BYTE notoriety (2's complement signed) 
* if (BYTE[4] == 0x00 0x00 0x00 0x00) 
* DONE 
* else loop this until above if statement is satisified
* BYTE[4] itemID 
* BYTE[2] model (item hex # - only 15 lsb) 
* BYTE layer 
* if (model & 0x8000) 
* BYTE[2] hue 


0x7C Packet
Last Modified on Thursday, 06-May-1999 
Open Dialog Box (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE[4] dialogID (echo'd back to the server in 7d) 
* BYTE[2] menuid (echo'd back to server in 7d) 
* BYTE length of question 
* BYTE[length of question] question text 
* BYTE # of responses 
* Then for each response: 
* BYTE[2] model id # of shown item (if grey menu -- then always 0x00 as msb) 
* BYTE[2] unknown2 (00 00 check or not?) 
* BYTE response text length 
* BYTE[response text length] response text 


0x7D Packet
Last Modified on Thursday, 06-May-1999 
Client Response To Dialog (13 bytes) 
* BYTE cmd 
* BYTE[4] dialogID (echoed back from 7C packet) 
* BYTE[2] menuid (echoed back from 7C packet) 
* BYTE[2] 1-based index of choice 
* BYTE[2] model # of choice 
* BYTE[2] unknown1 (00 00) 


0x80 Packet
Last Modified on Monday, 13-Apr-1998 17:06:30 EDT 
Login Request (62 bytes) 
* BYTE cmd 
* BYTE[30] sid 
* BYTE[30] password 
* BYTE unknown1 (not 0x00 - so not NULL) 


0x82 Packet
Last Modified on Monday, 13-Apr-1998 17:06:32 EDT 
Login Denied (2 bytes) 
* BYTE cmd 
* BYTE why 
* 0x00 = unknown user 
* 0x01 = account already in use 
* 0x02 = account disabled 
* 0x03 = password bad 
* 0x04 and higher = communications failed 


0x83 Packet
Last Modified on Wednesday, 06-May-1998 23:30:42 EDT 
Delete Character (39 bytes) 
* BYTE cmd 
* BYTE[30] password 
* BYTE[4] charIndex 
* BYTE[4] clientIP 


0x86 Packet
Last Modified on Saturday, 18-Apr-1998 17:49:37 EDT 
Resend Characters After Delete (304 bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE # of characters 
* Following repeated 5 times 
* BYTE[30] character name 
* BYTE[30] character password 


0x88 Packet
Last Modified on Saturday, 18-Apr-1998 17:49:39 EDT 
Open Paperdoll (66 bytes) 
* BYTE cmd 
* BYTE[4] charid 
* BYTE[60] text 
* BYTE flag byte


0x89 Packet
Last Modified on Saturday, 14-Nov-1998 
Corpse Clothing (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize
* BYTE[4] corpseID
* BYTE itemLayer 
* BYTE[4] itemID
* BYTE terminator (0x00)
Followed by a 0x3C message with the contents.

0x8C Packet
Last Modified on Monday, 13-Apr-1998 17:06:42 EDT 
Connect to Game Server (11 bytes) 
* BYTE cmd 
* BYTE[4] gameServer IP 
* BYTE[2] gameServer port 
* BYTE[4] new key 

0x90 Packet
Last Modified on Sunday, 2-May-1999 
Map message(19 bytes) 
* BYTE cmd 
* BYTE[4] key used 
* BYTE[2] gump art id (0x139D)
* BYTE[2] upper left x location
* BYTE[2] upper left y location
* BYTE[2] lower right x location
* BYTE[2] lower right y location
* BYTE[2] gump width in pixels
* BYTE[2] gump height in pixels 

0x91 Packet
Last Modified on Monday, 13-Apr-1998 17:06:45 EDT 
Game Server Login (65 bytes) 
* BYTE cmd 
* BYTE[4] key used 
* BYTE[30] sid 
* BYTE[30] password 


0x93 Packet
Last Modified on Saturday, 8-May-1999 
Books - Title Page (98 bytes) 
* BYTE cmd 
* BYTE[4] bookID 
* BYTE write flag 
* 0x00 - non-writable 
* 0x01 - writable 
* BYTE[2] # of pages 
* BYTE[60] title 
* BYTE[30] author 

Client sends a 0x93 message on book close... Look into this. :)


0x95 Packet
Last Modified on Thursday, 30-Apr-1998 18:34:08 EDT 
Dye Window (9 bytes) 
* BYTE cmd 
* BYTE[4] itemID of dye target
* BYTE[2] ignored on send, model on return
* BYTE[2] model on send, color on return  (default on server send is 0x0FAB) 
NOTE: This packet is sent by both the server and client


0x99 Packet
Last Modified on Friday, 20-Nov-1998 
Bring Up House/Boat Placement View (26 bytes) 
* BYTE cmd 
* BYTE request (0x01 from server, 0x00 from client) 
* BYTE[4] ID of deed 
* BYTE[12] unknown (all 0)
* BYTE[2] multi model (item model - 0x4000)
* BYTE[6] unknown (all 0)

0x9A Packet
Last Modified on Sunday, 15-Nov-1998 
Console Entry Prompt(16 bytes) 
* BYTE cmd 
* BYTE[2] blockSize
* BYTE[4] objectID
* BYTE[4] prompt#
* BYTE[4] 0=request/esc, 1=reply
* BYTE[?] textstring (optional)
* BYTE terminator (0x00)

0x9B Packet
Last Modified on Wednesday, 06-May-1998 23:30:45 EDT 
Request Help (258 bytes) 
* BYTE cmd 
* BYTE[257] (0x00) 

0x9E Packet
Last Modified on Sunday, 15-May-1998
Sell List (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize
* BYTE[4] shopkeeperID
* BYTE[2] numItems
For each item, a structure containing:
* BYTE[4] itemID
* BYTE[2] itemModel
* BYTE[2] itemHue/Color
* BYTE[2] itemAmount
* BYTE[2] value
* BYTE[2] nameLength
* BYTE[?] name

0x9F Packet
Last Modified on Friday, 28-May-1999 
Sell Reply (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize
* BYTE[4] shopkeeperID
* BYTE[2] itemCount
For each item, a structure containing:
* BYTE[4] itemID
* BYTE[2] quantity


0xA0 Packet
Last Modified on Monday, 13-Apr-1998 17:06:46 EDT 
Select Server (3 bytes) 
* BYTE cmd 
* BYTE[2] server # chosen 


0xA1 Packet
Last Modified on Tuesday, 20-Apr-1999 
Update Current Health (9 bytes) 
* BYTE cmd 
* BYTE[4] playerID 
* BYTE[2] maxHealth 
* BYTE[2] currentHealth


0xA2 Packet
Last Modified on Tuesday, 21-Apr-1998 20:45:30 EDT 
Update Current Mana (9 bytes) 
* BYTE cmd 
* BYTE[4] playerID 
* BYTE[2] maxMana 
* BYTE[2] currentMana 



0xA3 Packet
Last Modified on Tuesday, 21-Apr-1998 20:45:32 EDT 
Update Current Stamina (9 bytes) 
* BYTE cmd 
* BYTE[4] playerID 
* BYTE[2] maxStamina 
* BYTE[2] currentStamina 


0xA5 Packet
Last Modified on Wednesday, 06-May-1998 23:30:48 EDT 
Open Web Browser (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE[blockSize-3] null terminated full web address 


0xA6 Packet
Last Modified on Wednesday, 06-May-1998 23:30:49 EDT 
Tips/Notice window (Variable # of bytes) 
0* BYTE cmd 
1-2* BYTE[2] blockSize 
3* BYTE flag 
* 0x00 - tips window 
* 0x01 - notice window 
4-5* BYTE[2] unknown1 
6-7* BYTE[2] tip # 
8-9* BYTE[2] msgSize 
10-?* BYTE[?] message (? = blockSize - 10) 

0xA7 Packet
Last Modified on Wednesday, 06-May-1998 23:30:53 EDT 
Request Tips/Notice (4 bytes) 
* BYTE cmd 
* BYTE[2] last tip # 
* BYTE flag 
* 0x00 - tips window 
* 0x01 - notice window 


0xA8 Packet
Last Modified on Monday, 13-Apr-1998 17:06:50 EDT 
Game Server List (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE System Info Flag 
* 0xCC - Don't send 
* 0x64 - Send Video card 
* ?? - 
* BYTE[2] # of servers 
* Then each server -- 
* BYTE[2] serverIndex (0-based) 
* BYTE[32] serverName 
* BYTE percentFull 
* BYTE timezone 
* BYTE[4] pingIP 


0xA9 Packet
Last Modified on Monday, 13-Apr-1998 17:07:00 EDT 
Characters / Starting Locations (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize 
* BYTE # of characters 
* Following repeated 5 times 
* BYTE[30] character name 
* BYTE[30] character password 
* BYTE number of starting locations 
* Following for as many locations as you have 
* BYTE locationIndex (0-based) 
* BYTE[31] town (general name) 
* BYTE[31] exact name 


0xAA Packet
Last Modified on Thursday, 16-Apr-1998 19:52:14 EDT 
OK / Not OK To Attack (5 bytes) 
* BYTE cmd 
* BYTE[4] CharID being attacked 
ID is set to 00 00 00 00 when attack is refused.

0xAB Packet
Last Modified on Friday, 20-Nov-1998 
Gump Text Entry Dialog (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize
* BYTE[4] id
* BYTE parentID
* BYTE buttonID
* BYTE textlen
* BYTE[?] text
* BYTE cancel (0=disable, 1=enable)
* BYTE style (0=disable, 1=normal, 2=numerical)
* BYTE[4] format (if style 1, max text len, if style2, max numeric value)
* BYTE text2len
* BYTE[?] text2 

0xAD Packet
Last Modified on Friday, 20-Nov-1998 
Unicode speech request (Variable # of bytes)
* BYTE cmd 
* BYTE[2] blockSize
* BYTE Type 
* BYTE[2] Color 
* BYTE[2] Font 
* BYTE[4] Language (Null Terminated)
* "enu " - United States English 
* BYTE[?][2] Msg - Null Terminated (blockSize - 12) 

0xAE Packet
Last Modified on Wednesday, 11-Nov-1998 
Unicode Speech message(Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize
* BYTE[4] ID
* BYTE[2] Model
* BYTE Type
* BYTE[2] Color
* BYTE[2] Font
* BYTE[4] Language
* BYTE[30] Name
* BYTE[?][2] Msg - Null Terminated (blockSize - 48)

0xAF Packet
Last Modified on Tuesday, 20-Apr-1999 
Display Death Action (13 bytes) 
* BYTE cmd 
* BYTE[4] player id
* BYTE[4] corpse id
* BYTE[4] unknown (all 0)

0xB0 Packet
Last Modified on Tuesday, 20-Apr-1999 
Send Gump Menu Dialog (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize
* BYTE[4] id
* BYTE[4] gumpid
* BYTE[4] x
* BYTE[4] y
* BYTE[2] command section length
* BYTE[?] commands (zero terminated)
* BYTE[2] numTextLines
* BYTE[2] text length (in unicode (2 byte) characters.)
* BYTE[?] text (in unicode)


0xB2 Packet
Last Modified on Friday, 10-Oct-1998 18:42:09 EDT 
Chat Message (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize
* BYTE[2] messageType
If message type==0x03EB (Display Enter Username window)
* BYTE[8] unknown (all 0's)
If message type==0x03ED (Username accepted, display window)
* BYTE[4] unknown (all 0's)
* BYTE[?][2] unicode username
* BYTE[4] unknown (all 0's)
If message type==0x03E8
* BYTE[4] unknown (all 0's)
* BYTE[?][2] unicode channel name
* BYTE[2] unknown (0x0000)
* BYTE[2] unknown (0x0030)
* BYTE[2] unknown (0x0000)


0xB5 Packet
Last Modified on Friday, 10-Oct-1998 18:42:09 EDT 
Open Chat window (64 bytes) 
* BYTE cmd 
* BYTE[63] chatname, if known by client (all 00 if unknown) (name in unicode)
This message is very incomplete.  From the server, just know that it is 0xB5 len len, and pass the data through as is appropriate.
0xB6 Packet
Last Modified on Thursday, 12-Nov-1998 
Send Help/Tip Request (9 bytes) 
* BYTE cmd 
* BYTE[4] id
* BYTE[1] language # (1 for enu)
* BYTE[3] language name (enu for ENglish - United states)

0xB7 Packet
Last Modified on Thursday, 19-Nov-1998 
Help/Tip Data (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize
* BYTE[4] id
* BYTE[?][2] message, in unicode
* BYTE[2] null terminator (0x0000)
* BYTE[2] message terminator (0x3300)

0xB8 Packet
Last Modified on Monday, 19-Apr-1999
Request Char Profile (Variable # of bytes) 
* BYTE cmd 
* BYTE[2] blockSize
* BYTE mode (CLIENT ONLY! Does not exist in server message.)
* BYTE[4] id
If request, ends here.
If Update request
* BYTE[2] cmdType (0x0001 - Update)
* BYTE[2] msglen (# of unicode characters)
* BYTE[msglen][2] new profile, in unicode, not null terminated.
Else If from server
* BYTE[?] character name (not unicode, null terminated.)
* BYTE[2] (0x0000) (a non-unicode title string?)
* BYTE[?][2] profile (in unicode, ? can be 0)
* BYTE[2] (0x0000)
* BYTE[2] terminator (0x3300)


0xB9 Packet
Last Modified on Monday, 26-Oct-1998  
Enable Chat Button (3 bytes) 
* BYTE cmd 
* BYTE unknown (0x00) 
* BYTE unknown2 (0x01)



