Packet 0x60/0x6C/0xC9/0xCB

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 III sometimes uses packets 0xC9 and 0xCB in games, which also behave exactly like 0x60. Sending an 0xC9 or 0xCB to a non-Episode III client would cause that client to disconnect.

Main Packet Format

Dreamcast/Gamecube/Episode III

BytesMeaning
0x00Packet Type (0x60, 0x6C, 0xC9, or 0xCB)
0x01Flags
0x02-0x03Packet Size (Variable)
0x04Subcommand Type
0x05Subcommand Size (in 32-bit increments, not including the main packet header, but including everything Subcommand type and later)
0x06Client ID of initiating client (usually, but not always)
0x07Unused (usually, but not always)
0x08...Subcommand Data

PC

BytesMeaning
0x00-0x01Packet Size (Variable)
0x02Packet Type (0x60 or 0x6C)
0x03Flags
0x04Subcommand Type
0x05Subcommand Size (in 32-bit increments, not including the main packet header, but including everything Subcommand type and later)
0x06Client ID of initiating client (usually, but not always)
0x07Unused (usually, but not always)
0x08...Subcommand Data

Blue Burst

BytesMeaning
0x00-0x01Packet Size (Variable)
0x02-0x03Packet Type (0x60 or 0x6C)
0x04-0x07Flags
0x08Subcommand Type
0x09Subcommand Size (in 32-bit increments, not including the main packet header, but including everything Subcommand type and later)
0x0AClient ID of initiating client (usually, but not always)
0x0BUnused (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...

BytesMeaning
0x00-0x03All 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).

BytesMeaning
0x00Client ID of initiator?
0x01-0x03Unused? (zeros in my testing)
0x04-0x3FSymbol 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).

BytesMeaning
0x00Same as byte in Client ID of header
0x01Unused? (0)
0x02-0x03Amount of damage done
0x04-0x07Unknown

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

BytesMeaning
0x00Always 1?
0x01-0x03Always 0?
0x04The same as the Client ID byte in the header?
0x05-0x07Always 0?

Subcommand 0x0D

Subcommand 0x0D (size 0x03) I've only seen in passing, and don't have a clue what it does.

BytesMeaning
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).

BytesMeaning
0x00-0x03X Position
0x04-0x07Y Position
0x08-0x0BZ Position
0x0C-0x0FMaybe 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...

BytesMeaning
0x00Area warped to
0x01-0x03Unused? (all zeroes)

Subcommand 0x20

Subcommand 0x20 (size 0x06) I've only seen in logs and have no idea what it does.

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

BytesMeaning
0x00Area warped to
0x01-0x03Unused? (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).

BytesMeaning
0x00-0x03???
0x04-0x07???
0x08-0x0B???
0x0C-0x0F???

Subcommand 0x25

Subcommand 0x25 (size 0x03) is used tell clients that an item has been equipped.

BytesMeaning
0x00-0x03The Item ID (in the user's inventory) of the item being equipped
0x04The type of item being equipped? (1 for mag, 2 for frame, 3 for barrier, 6 for weapon)
0x05-0x07Padding?

Subcommand 0x26

Subcommand 0x26 (size 0x03) is used to tell clients that an item has been unequipped.

BytesMeaning
0x00-0x03The Item ID (in the user's inventory) of the item being unequipped
0x04-0x07Padding?

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.

BytesMeaning
0x00-0x03The 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...

BytesMeaning
0x00-0x03The Item ID of the Mag being fed
0x04-0x07The 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.

BytesMeaning
0x00-0x030xFFFFFFFF for dropped meseta, Item ID for removing items
0x04-0x07Amount 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.

BytesMeaning
0x00-0x01Always seems to be 0x0001
0x02-0x03Area where the item was dropped
0x04-0x07The Item ID (from the user's inventory) of the item being dropped
0x08-0x0BX Position?
0x0C-0x0FY Position?
0x10-0x13Z 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).

BytesMeaning
0x00-0x03Item Data dword 1
0x04-0x07Item Data dword 2
0x08-0x0BItem Data dword 3
0x0C-0x0FItem ID of place in inventory where the item will go
0x10-0x13Item Data 2 dword
0x14-0x17Unknown (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...

BytesMeaning
0x00-0x01??? (Always seems to be 0xFFFF for NPC talk, 0x0384 for dropping items)
0x02-0x03??? (Always seems to be 0)
0x04-0x07Location ? (Matches up with stuff from packets nearby)
0x08-0x0BLocation ? (Once again, matches up nicely)
0x0C-0x0FPadding? (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.

BytesMeaning
0x00-0x01ATP
0x02-0x03MST
0x04-0x05EVP
0x06-0x07HP
0x08-0x09DFP
0x0A-0x0BATA
0x0C-0x0FLevel - 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.

BytesMeaning
0x00Amount of PB used (should always be 0x64 = 100)?
0x01-0x03Always 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.

BytesMeaning
0x00-0x01??? (Always seems to be 0)
0x02-0x03???
0x04-0x07Something to do with the position, maybe?
0x08-0x0BX Position
0x0C-0x0FY Position
0x10-0x13Z 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.

BytesMeaning
0x00-0x01Always seems to be 0?
0x02-0x03??? (when near a subcommand 0x55, matches with bytes 0x00-0x01 in that?)
0x04-0x07Something to do with the position, maybe?
0x08-0x0BX Position
0x0C-0x0FY Position
0x10-0x13Z Position

Subcommand 0x40

Subcommand 0x40 (size 0x04) is used to tell other clients that someone has started moving (or is moving slowly?).

BytesMeaning
0x00-0x03X Position
0x04-0x07Z Position
0x08-0x0BPadding? (Always seems to be 0)

Subcommand 0x42

Subcommand 0x42 (size 0x03) is used to tell other clients that someone is moving (quickly?).

BytesMeaning
0x00-0x03X Position
0x04-0x07Z Position

Subcommand 0x43

Subcommand 0x43 (size 0x02) is used when the first step of a normal attack is in progress.

BytesMeaning
0x00-0x01Direction? (Matches bytes 0x02-0x03 in a nearby Subcommand 0x3E)
0x020 for normal attack, 1 for heavy attack
0x03Padding?

Subcommand 0x44

Subcommand 0x44 (size 0x02) is used when the second step of a normal attack is in progress.

BytesMeaning
0x00-0x01Direction? (Matches bytes 0x02-0x03 in a nearby Subcommand 0x3E)
0x020 for normal attack, 1 for heavy attack
0x03Padding?

Subcommand 0x45

Subcommand 0x45 (size 0x02) is used when the third step of a normal attack is in progress.

BytesMeaning
0x00-0x01Direction? (Matches bytes 0x02-0x03 in a nearby Subcommand 0x3E)
0x020 for normal attack, 1 for heavy attack
0x03Padding?

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

BytesMeaning
0x00Technique cast
0x01Always zero?
0x02Level of the spell, minus 1
0x031 if at least one thing was hit
0x04-0x05ID of first item hit?
0x06-0x07All zeroes?

Subcommand 0x48

Subcommand 0x48 (size 0x02) is used after a technique has been cast.

BytesMeaning
0x00Technique cast
0x01Always zero?
0x02Level of the spell, minus 1
0x03Always zero?

Subcommand 0x49

Subcommand 0x49 (size 0x03) is sent after a photon blast has been used to subtract from the PB gauge.

BytesMeaning
0x00Photon blast used
0x01-0x03Always zero?
0x04Amount of PB spent (should always be 0x64 = 100)?
0x05-0x07Always 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.

BytesMeaning
0x00-0x01Same as 0x3F after the fact (bytes 0x02-0x03)
0x02-0x03Amount of HP remaining after hit
0x04-0x0B???

Subcommand 0x4C

Subcommand 0x4C (size 0x04) seems to be related to enemies landing a hit.

BytesMeaning
0x00-0x01Same as 0x3F after the fact (bytes 0x02-0x03)
0x02-0x03Amount of HP remaining after hit
0x04-0x0B???

Subcommand 0x4D

Subcommand 0x4D (size 0x02) is related to enemies killing a client.

BytesMeaning
0x00??? (When a scape doll was on hand, this was 0, otherwise 2 in my testing)
0x01-0x03Padding?

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

BytesMeaning
0x00-0x01??? (The same as bytes 0x02-0x03 in a nearby Subcommand 0x3E/0x3F)
0x02-0x03All 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.

BytesMeaning
0x00-0x03??? (Always seems to be 0x000000A0)
0x04-0x07Location? (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).

BytesMeaning
0x00-0x01??? (Matches with nearby subcommand 0x3F's bytes 0x02-0x03)
0x02-0x03Always seems to be 0?
0x04-0x07???
0x08-0x0B???
0x0C-0x0F???
0x10-0x13X Position
0x14-0x17Seems to be 0
0x18-0x1BZ Position

Subcommand 0x58

Subcommand 0x58 (size 0x02) is used to do a lobby action.

BytesMeaning
0x00-0x03Action to do (probably only the first byte)

Subcommand 0x59

Subcommand 0x59 (size 0x03) is used to pick up a dropped item.

BytesMeaning
0x00-0x03Client ID of inventory where item came from?
0x04-0x07Item 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).

BytesMeaning
0x00-0x01Area ID
0x02-0x03Unknown
0x04-0x07X Position
0x08-0x0BZ Position
0x0C-0x0FItem Data dword 1
0x10-0x13Item Data dword 2
0x14-0x17Item Data dword 3
0x18-0x1BNew Item ID for split stack
0x1C-0x1FItem Data 2
0x20-0x23Always 0x00000002?

Subcommand 0x5E

Subcommand 0x5E (size 0x06) is used when someone buys something from the shop.

BytesMeaning
0x00-0x03Item Data dword 1
0x04-0x07Item Data dword 2
0x08-0x0BItem Data dword 3
0x0C-0x0FItem ID of new slot in inventory
0x10-0x13Amount of meseta spent

Subcommand 0x5F

Subcommand 0x5F (size 0x0B) is used to tell clients what item dropped from an opened box.

BytesMeaning
0x00Area of the Drop
0x01What kind of thing are we asking about?
0x02-0x03Request ID (might only be one byte)
0x04-0x07X Coordinate
0x08-0x0BY Coordinate
0x0C-0x0FUnknown (0x00000010 works)
0x10-0x1BItem Code (first 3 32-bit values)
0x1C-0x1FItem ID -- (request_id | 0x06010100) seems to work for forging it
0x20-0x23Item Code (last 32-bit value)
0x24-0x27Unknown (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.

BytesMeaning
0x00-0x03Item ID of equipped Mag?
0x040x02 on level up, 0x08 on invincible?
0x05-0x07Always 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)

BytesMeaning
0x00-0x03Item ID to remove from the map
0x04-0x07Unused? (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.

BytesMeaning
0x00-0x0B???

Subcommand 0x69

Subcommand 0x69 (size 0x03) is used to spawn NPC characters.

BytesMeaning
0x00The Client ID to follow around?
0x010?
0x02The Client ID the NPC should take on
0x03-0x05All 0?
0x06The type of NPC to spawn
0x070?

Subcommand 0x74

Subcommand 0x74 (size 0x08) is used for Word Select.

BytesMeaning
0x00-0x1BWord 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...

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

BytesMeaning
0x00-0x03???

Subcommand 0x79

Subcommand 0x79 (size 0x06) deals with Go Go Ball.

BytesMeaning
0x00-0x13Position 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.

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

BytesMeaning
0x00-0x03Always 0?

Subcommand 0x9A

Subcommand 0x9A (size 0x02) modifies a user's statistics.

BytesMeaning
0x00-0x01Always 0
0x02The stat/direction to modify (0 = HP down, 1 = TP down, 2 = Meseta down, 3 = HP up, 4 = TP up)
0x03The amount to modify the statistic

Subcommand 0xAB

Subcommand 0xAB (size 0x02) signifies that the user has sat down in their chair (in the lobby).

BytesMeaning
0x00-0x03Always 0?

Subcommand 0xAF

Subcommand 0xAF (size 0x02) signifies that the user has changed direction in their chair (in the lobby).

BytesMeaning
0x00-0x03Heading?

Subcommand 0xB0

Subcommand 0xB0 (size 0x02) signifies that the user has moved in their chair (in the lobby).

BytesMeaning
0x00-0x03Position 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).

BytesMeaning
0x00Song to be played
0x01-0x03Padding