Protocol:Packet 0x60
Clients send Packet 0x60 to the server to forward a "game command" to all clients in the lobby. This is used for various things in game, including telling clients what items are dropped when a box is opened (clients "ask" the party leader what should be dropped with a form of Packet 0x62 and the party leader replies with a Subcommand 0x5F).
PSO v3 (GameCube, Xbox, Blue Burst) sometimes uses packet 0x6C, which has exactly the same format and function as 0x60.
PSO Episode 3 sometimes uses packets 0xC9 and 0xCB in games, which also behave exactly like 0x60. Sending an 0xC9 or 0xCB to a non-Episode 3 client would cause that client to disconnect.
Main Packet Format
Dreamcast/Gamecube
Bytes | Meaning |
---|---|
0x00 | Packet Type (0x60 or 0x6C) |
0x01 | Flags |
0x02-0x03 | Packet Size (Variable) |
0x04 | Subcommand Type |
0x05 | Subcommand Size (in 32-bit increments, not including the main packet header, but including everything Subcommand type and later) |
0x06 | Client ID of initiating client (usually, but not always) |
0x07 | Unused (usually, but not always) |
0x08... | Subcommand Data |
PC
Bytes | Meaning |
---|---|
0x00-0x01 | Packet Size (Variable) |
0x02 | Packet Type (0x60 or 0x6C) |
0x03 | Flags |
0x04 | Subcommand Type |
0x05 | Subcommand Size (in 32-bit increments, not including the main packet header, but including everything Subcommand type and later) |
0x06 | Client ID of initiating client (usually, but not always) |
0x07 | Unused (usually, but not always) |
0x08... | Subcommand Data |
Blue Burst
Bytes | Meaning |
---|---|
0x00-0x01 | Packet Size (Variable) |
0x02-0x03 | Packet Type (0x60 or 0x6C) |
0x04-0x07 | Flags |
0x08 | Subcommand Type |
0x09 | Subcommand Size (in 32-bit increments, not including the main packet header, but including everything Subcommand type and later) |
0x0A | Client ID of initiating client (usually, but not always) |
0x0B | Unused (usually, but not always) |
0x0C... | Subcommand Data |
Subcommands
Various subcommands are sent with this packet, and this is not necessarily meant to be an exhaustive list of them (although, I'd love it if it were eventually). Note that many of these, I don't know exactly how they work or how to fill them in...
Subcommand 0x05
Subcommand 0x05 (size 0x03) seems to have something to do with when gates unlock (from switches anyway) or something... The client ID field has something strange in it, and the normally unused byte after it seems to be used for something...
Bytes | Meaning |
---|---|
0x00-0x03 | All zeroes? |
0x04-0x07 | ??? |
Subcommand 0x07
Subcommand 0x07 (size 0x11) is used for symbol chat. The client ID field in the header always seems to be zero, which means it must be carried somewhere in the data (I'm guessing its the first byte of the data).
Bytes | Meaning |
---|---|
0x00 | Client ID of initiator? |
0x01-0x03 | Unused? (zeros in my testing) |
0x04-0x3F | Symbol chat data (no idea of the specific format) |
Subcommand 0x0A
Subcommand 0x0A (size 0x03) seems to be used when a hit lands on an enemy. The client ID and normally unused fields in the header are actually used for something here (I think they're the ID of the enemy, maybe).
Bytes | Meaning |
---|---|
0x00 | Same as byte in Client ID of header |
0x01 | Unused? (0) |
0x02-0x03 | Amount of damage done |
0x04-0x07 | Unknown |
Subcommand 0x0B
Subcommand 0x0B (size 0x03) seems to be used to make a box explode. The Client ID and unused fields in the header are actually used here for something else... I think they may be the ID of the box that was hit (they match part of the 0x46 subcommand about the attack).
Bytes | Meaning |
---|---|
0x00 | Always 1? |
0x01-0x03 | Always 0? |
0x04 | The same as the Client ID byte in the header? |
0x05-0x07 | Always 0? |
Subcommand 0x0D
Subcommand 0x0D (size 0x03) I've only seen in passing, and don't have a clue what it does.
Bytes | Meaning |
---|---|
0x00 | ??? (I've only seen this set to 1) |
0x00-0x07 | ??? (I've only seen them as all 0s) |
Subcommand 0x17
Subcommand 0x17 (size 0x05) is used to move a player to another place on the same map they're on (potentially without their input).
Bytes | Meaning |
---|---|
0x00-0x03 | X Position |
0x04-0x07 | Y Position |
0x08-0x0B | Z Position |
0x0C-0x0F | Maybe unused? (I always set this to a value that was sent by a 0x3E/0x3F in bytes 4-7, which works) |
Subcommand 0x1F
Subcommand 0x1F (size 0x02) is used when someone moves to a different map. It matches Subcommand 0x21 exactly from what I've seen...
Bytes | Meaning |
---|---|
0x00 | Area warped to |
0x01-0x03 | Unused? (all zeroes) |
Subcommand 0x20
Subcommand 0x20 (size 0x06) I've only seen in logs and have no idea what it does.
Bytes | Meaning |
---|---|
0x00-0x13 | ??? |
Subcommand 0x21
Subcommand 0x21 (size 0x02) is used when someone moves to a different map. It is followed by a subcommand 0x22, as well as a 0x3F, 0x1F, and 0x23.
Bytes | Meaning |
---|---|
0x00 | Area warped to |
0x01-0x03 | Unused? (all zeroes) |
Subcommand 0x22
Subcommand 0x22 (size 0x01) seems to tell clients that someone has finished moving to another map (I think). It has no data beyond the normal header. This packet also shows up when a client leaves a game to go back to the lobby.
Subcommand 0x23
Subcommand 0x23 (size 0x01) matches Subcommand 0x22 in every way, and comes after an 0x1F. It has no data beyond the normal header.
Subcommand 0x24
Subcommand 0x24 (size 0x05) I have no idea about. The only thing I can guess is that its related to NPCs (as I've only ever noticed it during the Tinkerbell's Dog 2 quest).
Bytes | Meaning |
---|---|
0x00-0x03 | ??? |
0x04-0x07 | ??? |
0x08-0x0B | ??? |
0x0C-0x0F | ??? |
Subcommand 0x25
Subcommand 0x25 (size 0x03) is used tell clients that an item has been equipped.
Bytes | Meaning |
---|---|
0x00-0x03 | The Item ID (in the user's inventory) of the item being equipped |
0x04 | The type of item being equipped? (1 for mag, 2 for frame, 3 for barrier, 6 for weapon) |
0x05-0x07 | Padding? |
Subcommand 0x26
Subcommand 0x26 (size 0x03) is used to tell clients that an item has been unequipped.
Bytes | Meaning |
---|---|
0x00-0x03 | The Item ID (in the user's inventory) of the item being unequipped |
0x04-0x07 | Padding? |
Subcommand 0x27
Subcommand 0x27 (size 0x02) is used to tell clients that an item has been used. Note that this same command is also used for things like using a Heart of Chao, thus it may have effects that are somewhat important to pay attention to.
Bytes | Meaning |
---|---|
0x00-0x03 | The Item ID (in the user's inventory) of the item being used. |
Subcommand 0x28
Subcommand 0x28 (size 0x03) is used when feeding a mag. There are no special packets sent when mags level up or anything else of the like, so the server might have to keep track of a lot of rather boring information to do anything with these...
Bytes | Meaning |
---|---|
0x00-0x03 | The Item ID of the Mag being fed |
0x04-0x07 | The Item ID of the item being fed to the Mag |
Subcommand 0x29
Subcommand 0x29 (size 0x03) is used to tell clients that someone has dropped meseta. Also, it is used to remove an item from the client's inventory (for instance, when they place it in the bank or when they're dropping part of a stack of items). It is also used to sell an item.
Bytes | Meaning |
---|---|
0x00-0x03 | 0xFFFFFFFF for dropped meseta, Item ID for removing items |
0x04-0x07 | Amount of meseta dropped or amount of item removed |
Subcommand 0x2A
Subcommand 0x2A (size 0x06) is used to tell clients that an item has been dropped by a player from their inventory.
Bytes | Meaning |
---|---|
0x00-0x01 | Always seems to be 0x0001 |
0x02-0x03 | Area where the item was dropped |
0x04-0x07 | The Item ID (from the user's inventory) of the item being dropped |
0x08-0x0B | X Position? |
0x0C-0x0F | Y Position? |
0x10-0x13 | Z Position? |
Subcommand 0x2B
Subcommand 0x2B (size 0x07) is used to add an item to a client's inventory (for instance, when taking an item out of the bank).
Bytes | Meaning |
---|---|
0x00-0x03 | Item Data dword 1 |
0x04-0x07 | Item Data dword 2 |
0x08-0x0B | Item Data dword 3 |
0x0C-0x0F | Item ID of place in inventory where the item will go |
0x10-0x13 | Item Data 2 dword |
0x14-0x17 | Unknown (0x00000002) |
Subcommand 0x2C
Subcommand 0x2C (size 0x05) is used to tell other clients that someone is talking to an NPC. This command also seems to come up while dropping items...
Bytes | Meaning |
---|---|
0x00-0x01 | ??? (Always seems to be 0xFFFF for NPC talk, 0x0384 for dropping items) |
0x02-0x03 | ??? (Always seems to be 0) |
0x04-0x07 | Location ? (Matches up with stuff from packets nearby) |
0x08-0x0B | Location ? (Once again, matches up nicely) |
0x0C-0x0F | Padding? (Always seems to be 0) |
Subcommand 0x2D
Subcommand 0x2D (size 0x01) is used to tell other clients that someone has finished talking to an NPC. It contains no data of its own, beyond the normal header. This command also shows up while dropping items. This command also shows up when dying.
Subcommand 0x30
Subcommand 0x30 (size 0x05) is used to tell other clients that someone has leveled up. The values in the packet correspond to what's in the player structure, not necessarily the exact numerical values.
Bytes | Meaning |
---|---|
0x00-0x01 | ATP |
0x02-0x03 | MST |
0x04-0x05 | EVP |
0x06-0x07 | HP |
0x08-0x09 | DFP |
0x0A-0x0B | ATA |
0x0C-0x0F | Level - 1 |
Subcommand 0x31
Subcommand 0x31 (size 0x01) seems to be related to being resurrected (in my tests by a scape doll... haven't seen what happens when reverser is used yet). It contains no data beyond the normal header. It also shows up when being resurrected by the medical center.
Subcommand 0x32
Subcommand 0x32 (size 0x01) has something to do with being resurrected by the medical center, maybe? It contains no data of its own beyond the normal header.
Subcommand 0x36
Subcommand 0x36 (size 0x01) seems to be related to the end of a photon blast. It contains no data of its own beyond the normal header.
Subcommand 0x37
Subcommand 0x37 (size 0x02) is related in some way to the use of a photon blast.
Bytes | Meaning |
---|---|
0x00 | Amount of PB used (should always be 0x64 = 100)? |
0x01-0x03 | Always zero? |
Subcommand 0x39
Subcommand 0x39 (size 0x01) seems to be related to the photon blast gauge being filled up. It contains no data of its own beyond the normal header.
Subcommand 0x3A
Subcommand 0x3A (size 0x01) is related in some way to being killed by an enemy. It contains no data of its own beyond the normal header.
Subcommand 0x3B
Subcommand 0x3B (size 0x01) seems to have something to do with a client joining a game or loading into an area... No idea what its supposed to signify. No data is contained beyond the normal header.
Subcommand 0x3E
Subcommand 0x3E (size 0x06) is used to tell other clients that someone has stopped moving.
Bytes | Meaning |
---|---|
0x00-0x01 | ??? (Always seems to be 0) |
0x02-0x03 | ??? |
0x04-0x07 | Something to do with the position, maybe? |
0x08-0x0B | X Position |
0x0C-0x0F | Y Position |
0x10-0x13 | Z Position |
Subcommand 0x3F
Subcommand 0x3F (size 0x06) seems to be used to tell other clients that someone is not moving after warping, or something like that (triggered when going into the principal warp or after talking to the medical center, for instance). Seems to be used a lot of the time nearby a bunch of subcommand 0x55 packets.
Bytes | Meaning |
---|---|
0x00-0x01 | Always seems to be 0? |
0x02-0x03 | ??? (when near a subcommand 0x55, matches with bytes 0x00-0x01 in that?) |
0x04-0x07 | Something to do with the position, maybe? |
0x08-0x0B | X Position |
0x0C-0x0F | Y Position |
0x10-0x13 | Z Position |
Subcommand 0x40
Subcommand 0x40 (size 0x04) is used to tell other clients that someone has started moving (or is moving slowly?).
Bytes | Meaning |
---|---|
0x00-0x03 | X Position |
0x04-0x07 | Z Position |
0x08-0x0B | Padding? (Always seems to be 0) |
Subcommand 0x42
Subcommand 0x42 (size 0x03) is used to tell other clients that someone is moving (quickly?).
Bytes | Meaning |
---|---|
0x00-0x03 | X Position |
0x04-0x07 | Z Position |
Subcommand 0x43
Subcommand 0x43 (size 0x02) is used when the first step of a normal attack is in progress.
Bytes | Meaning |
---|---|
0x00-0x01 | Direction? (Matches bytes 0x02-0x03 in a nearby Subcommand 0x3E) |
0x02 | 0 for normal attack, 1 for heavy attack |
0x03 | Padding? |
Subcommand 0x44
Subcommand 0x44 (size 0x02) is used when the second step of a normal attack is in progress.
Bytes | Meaning |
---|---|
0x00-0x01 | Direction? (Matches bytes 0x02-0x03 in a nearby Subcommand 0x3E) |
0x02 | 0 for normal attack, 1 for heavy attack |
0x03 | Padding? |
Subcommand 0x45
Subcommand 0x45 (size 0x02) is used when the third step of a normal attack is in progress.
Bytes | Meaning |
---|---|
0x00-0x01 | Direction? (Matches bytes 0x02-0x03 in a nearby Subcommand 0x3E) |
0x02 | 0 for normal attack, 1 for heavy attack |
0x03 | Padding? |
Subcommand 0x46
Subcommand 0x46 (size 0x02 or 0x03) is used when a step of an attack is finished.
In its 0x02 sized form:
Bytes | Meaning |
---|---|
0x00-0x03 | Always zero? |
In its 0x03 sized form:
Bytes | Meaning |
---|---|
0x00 | Number of items hit? (I've only seen 1, but I've only hit one thing to see it) |
0x01-0x03 | All zeroes? |
0x04-0x05 | The item it hit? (same as the client ID and normally unused bytes in the header of Subcommand 0x0B) |
0x06-0x07 | All zeroes? |
Subcommand 0x47
Subcommand 0x47 (size 0x02 or 0x03) is used when casting a technique. Its possible that it could be other sizes if multiple things were hit (I haven't tested this theory). It is always followed by a Subcommand 0x48. With healing spells, somehow its not mentioned what it affected... Also, I don't know how to tell what was hit if multiple things were hit...
Bytes | Meaning |
---|---|
0x00 | Technique cast |
0x01 | Always zero? |
0x02 | Level of the spell, minus 1 |
0x03 | 1 if at least one thing was hit |
0x04-0x05 | ID of first item hit? |
0x06-0x07 | All zeroes? |
Subcommand 0x48
Subcommand 0x48 (size 0x02) is used after a technique has been cast.
Bytes | Meaning |
---|---|
0x00 | Technique cast |
0x01 | Always zero? |
0x02 | Level of the spell, minus 1 |
0x03 | Always zero? |
Subcommand 0x49
Subcommand 0x49 (size 0x03) is sent after a photon blast has been used to subtract from the PB gauge.
Bytes | Meaning |
---|---|
0x00 | Photon blast used |
0x01-0x03 | Always zero? |
0x04 | Amount of PB spent (should always be 0x64 = 100)? |
0x05-0x07 | Always zero? |
Subcommand 0x4A
Subcommand 0x4A (size 0x01) seems to be related to enemies attacking and the character evading. It carries no data beyond the normal header.
Subcommand 0x4B
Subcommand 0x4B (size 0x04) is one of a few packets relating to enemies landing a hit on a character. What determines which packet (this one or 0x4C) gets used, I don't know.
Bytes | Meaning |
---|---|
0x00-0x01 | Same as 0x3F after the fact (bytes 0x02-0x03) |
0x02-0x03 | Amount of HP remaining after hit |
0x04-0x0B | ??? |
Subcommand 0x4C
Subcommand 0x4C (size 0x04) seems to be related to enemies landing a hit.
Bytes | Meaning |
---|---|
0x00-0x01 | Same as 0x3F after the fact (bytes 0x02-0x03) |
0x02-0x03 | Amount of HP remaining after hit |
0x04-0x0B | ??? |
Subcommand 0x4D
Subcommand 0x4D (size 0x02) is related to enemies killing a client.
Bytes | Meaning |
---|---|
0x00 | ??? (When a scape doll was on hand, this was 0, otherwise 2 in my testing) |
0x01-0x03 | Padding? |
Subcommand 0x4E
Subcommand 0x4E (size 0x01) has something to do with dying (and not being immediately resurrected by a scape doll). It contains no data of its own beyond the normal header.
Subcommand 0x4F
Subcommand 0x4F (size 0x01) has something to do with dying (and being immediately resurrected by a scape doll). It contains no data of its own beyond the normal header.
Subcommand 0x50
Subcommand 0x50 (size 0x02) has something to do with switches (I think?)
Bytes | Meaning |
---|---|
0x00-0x01 | ??? (The same as bytes 0x02-0x03 in a nearby Subcommand 0x3E/0x3F) |
0x02-0x03 | All zeroes? |
Subcommand 0x52
Subcommand 0x52 (size 0x03) is used to tell other clients that someone is talking to a person at a desk of some sort or has just finished talking to the desk.
Bytes | Meaning |
---|---|
0x00-0x03 | ??? (Always seems to be 0x000000A0) |
0x04-0x07 | Location? (Matches fairly well with bytes from packets nearby) |
Subcommand 0x55
Subcommand 0x55 (size 0x08) is used to tell clients that someone has warped (maybe?). Several of these seem to be sent at a time (at least when going into and out of the principal's warp).
Bytes | Meaning |
---|---|
0x00-0x01 | ??? (Matches with nearby subcommand 0x3F's bytes 0x02-0x03) |
0x02-0x03 | Always seems to be 0? |
0x04-0x07 | ??? |
0x08-0x0B | ??? |
0x0C-0x0F | ??? |
0x10-0x13 | X Position |
0x14-0x17 | Seems to be 0 |
0x18-0x1B | Z Position |
Subcommand 0x58
Subcommand 0x58 (size 0x02) is used to do a lobby action.
Bytes | Meaning |
---|---|
0x00-0x03 | Action to do (probably only the first byte) |
Subcommand 0x59
Subcommand 0x59 (size 0x03) is used to pick up a dropped item.
Bytes | Meaning |
---|---|
0x00-0x03 | Client ID of inventory where item came from? |
0x04-0x07 | Item ID of item that was picked up |
Subcommand 0x5D
Subcommand 0x5D (size 0x0A) is used to tell clients that someone has split up a stack of items (for dropping one or more).
Bytes | Meaning |
---|---|
0x00-0x01 | Area ID |
0x02-0x03 | Unknown |
0x04-0x07 | X Position |
0x08-0x0B | Z Position |
0x0C-0x0F | Item Data dword 1 |
0x10-0x13 | Item Data dword 2 |
0x14-0x17 | Item Data dword 3 |
0x18-0x1B | New Item ID for split stack |
0x1C-0x1F | Item Data 2 |
0x20-0x23 | Always 0x00000002? |
Subcommand 0x5E
Subcommand 0x5E (size 0x06) is used when someone buys something from the shop.
Bytes | Meaning |
---|---|
0x00-0x03 | Item Data dword 1 |
0x04-0x07 | Item Data dword 2 |
0x08-0x0B | Item Data dword 3 |
0x0C-0x0F | Item ID of new slot in inventory |
0x10-0x13 | Amount of meseta spent |
Subcommand 0x5F
Subcommand 0x5F (size 0x0B) is used to tell clients what item dropped from an opened box.
Bytes | Meaning |
---|---|
0x00 | Area of the Drop |
0x01 | What kind of thing are we asking about? |
0x02-0x03 | Request ID (might only be one byte) |
0x04-0x07 | X Coordinate |
0x08-0x0B | Y Coordinate |
0x0C-0x0F | Unknown (0x00000010 works) |
0x10-0x1B | Item Code (first 3 32-bit values) |
0x1C-0x1F | Item ID -- (request_id | 0x06010100) seems to work for forging it |
0x20-0x23 | Item Code (last 32-bit value) |
0x24-0x27 | Unknown (0x00000002) |
Subcommand 0x61
Subcommand 0x61 (size 0x03) I don't really know what it does... All I know is that I saw it after a levelup (immediately after the Subcommand 0x30 packet). When I did see it, the client ID field was set to 0, which didn't correspond to any client IDs in the game at the time. I also saw it when my PB gauge filled and I became invincible for a short time.
Bytes | Meaning |
---|---|
0x00-0x03 | Item ID of equipped Mag? |
0x04 | 0x02 on level up, 0x08 on invincible? |
0x05-0x07 | Always zero? |
Subcommand 0x63
Subcommand 0x63 (size 0x03) is used to remove old items from the map to make room for new items. It seems that there's about a 50 item limit for things laying around with PSOv2. With this one, the normally unused byte in the header area is used for something, but what I don't know... When I was first testing this, I saw 0x8C there every time it came up (although, when sending it, setting it to 0 works fine)
Bytes | Meaning |
---|---|
0x00-0x03 | Item ID to remove from the map |
0x04-0x07 | Unused? (always 0 in my initial testing) |
Subcommand 0x67
Subcommand 0x67 (size 0x04), I have no idea about at all. The Client ID and unused fields after it in the header are odd here... I really don't have a clue what this packet is for.
Bytes | Meaning |
---|---|
0x00-0x0B | ??? |
Subcommand 0x69
Subcommand 0x69 (size 0x03) is used to spawn NPC characters.
Bytes | Meaning |
---|---|
0x00 | The Client ID to follow around? |
0x01 | 0? |
0x02 | The Client ID the NPC should take on |
0x03-0x05 | All 0? |
0x06 | The type of NPC to spawn |
0x07 | 0? |
Subcommand 0x74
Subcommand 0x74 (size 0x08) is used for Word Select.
Bytes | Meaning |
---|---|
0x00-0x1B | Word Select data |
Subcommand 0x75
Subcommand 0x75 (size 0x02) kinda baffles me a bit... The field used normally for the client ID that triggered the event isn't used that way here. I really have no idea how this packet is used, as I've seen it in a couple of different situations. The first situation I saw it in was NPCs that change their dialog. The second situation I saw it in was in warping down to Ragol...
Bytes | Meaning |
---|---|
0x00-0x03 | ??? |
Subcommand 0x76
Subcommand 0x76 (size 0x02) seems to be at least somewhat related to enemies dying via photon blast, or something like that. The Client ID/unused bytes in the header are used for the enemy's id, I think.
Bytes | Meaning |
---|---|
0x00-0x03 | ??? |
Subcommand 0x79
Subcommand 0x79 (size 0x06) deals with Go Go Ball.
Bytes | Meaning |
---|---|
0x00-0x13 | Position and such things... I don't really care to know what's going on here. |
Subcommand 0x89
Subcommand 0x89 (size 0x02) is related in some way to being killed.
Bytes | Meaning |
---|---|
0x00-0x03 | ??? (I saw the value 0x00000114 all 3 times I saw this in testing) |
Subcommand 0x8D
Subcommand 0x8D (size 0x02) seems to be related to starting to cast a technique.
Bytes | Meaning |
---|---|
0x00-0x03 | Always 0? |
Subcommand 0x9A
Subcommand 0x9A (size 0x02) modifies a user's statistics.
Bytes | Meaning |
---|---|
0x00-0x01 | Always 0 |
0x02 | The stat/direction to modify (0 = HP down, 1 = TP down, 2 = Meseta down, 3 = HP up, 4 = TP up) |
0x03 | The amount to modify the statistic |
Subcommand 0xAB
Subcommand 0xAB (size 0x02) signifies that the user has sat down in their chair (in the lobby).
Bytes | Meaning |
---|---|
0x00-0x03 | Always 0? |
Subcommand 0xAF
Subcommand 0xAF (size 0x02) signifies that the user has changed direction in their chair (in the lobby).
Bytes | Meaning |
---|---|
0x00-0x03 | Heading? |
Subcommand 0xB0
Subcommand 0xB0 (size 0x02) signifies that the user has moved in their chair (in the lobby).
Bytes | Meaning |
---|---|
0x00-0x03 | Position or heading? |
Subcommand 0xBF
Subcommand 0xBF (size 0x02) is used to change the song playing in a CARD lobby on Episode III (in response to a user using the jukebox).
Bytes | Meaning |
---|---|
0x00 | Song to be played |
0x01-0x03 | Padding |