Protocol:Packet 0x60

From Sylverant
Jump to navigationJump to search

Contents

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