From a8eba0f58ef35f81a44698e77cf21657b5139ca7 Mon Sep 17 00:00:00 2001 From: Charles Lohr Date: Wed, 1 Sep 2004 17:20:48 +0000 Subject: [PATCH] Current SMLAN Protocol. It's better to have it in CVS than passing it around through other means. --- stepmania/Docs/SMLanProtocol.txt | 275 +++++++++++++++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 stepmania/Docs/SMLanProtocol.txt diff --git a/stepmania/Docs/SMLanProtocol.txt b/stepmania/Docs/SMLanProtocol.txt new file mode 100644 index 0000000000..0ce5a7de81 --- /dev/null +++ b/stepmania/Docs/SMLanProtocol.txt @@ -0,0 +1,275 @@ + +PRELIMINARY - - - - - - - - 09/01/2004 +Protocol version not yet 1. + But 0x01 will be its version for inter-prtocol purposes. + +This protocol is only intended to replace current protocol. Because current protocol +not expanable + +SMLAN PROTCOL TCP/8765 + +Protcol is entirelly packaged in EzSockets Data Packets (use send and receive packet) + +This will prevent any out-of-sync errors with future or past versions. + +The protocol is impervious to fragmented, or bonded TCP packets. + +Basic Representation: + +Octet 0123 4 5 + +----+-+---//--+ + |ssss|C|Payload| + +----+-+---//--+ + +ssss - size of packet, stripped and created by ezsockets +C - Command. +Payload - variable size based on command + +The payload may contain more data than expected, i.e. new protocol version. + +If the size is "NT" then that means it's a null-terminating string. + "MSN" most significant 4 bits + "LSN" least significant 4 bits + + +Note: Primary player is 0x0, secondary player is 0x1 + +CLIENT to SERVER protocol: + +000: No Operation + Desc: This command will cause server to respond with a no op responce. + Payload: None + Responce: Server 001 + +001: No Operation Responce + Desc: This command is used to respond to a no operation. + Payload: None + Responce: None + +002: Hello + Desc: This is the first packet from a client to server, stating below + information (NOTE: Names are no longer sent in this packet) + Payload: + Size Description: + 1 Client protocol version + NT Name of build of StepMania + Responce: Server 002 + + + +003: Game Start Request + Desc: This command is called once after most loading is done, and + again immediately before the sound starts. + Payload: + Size Description + MSN Primary player difficulty (feet) (0 for no player) + LSN Secondary player difficulty (feet) (0 for no player) + MSN Primary player difficulty (0=Beginner, 1=easy, etc.) + LSN Second player difficulty (0=Beginner, 1=easy, etc.) + MSN Start Position (0 is pre-sync, 1 is for sync) + LSN Reserved + NT Song Title + NT Song Subtitle + NT Song Artist + NT Course Title (If none exists; make it just a null) + NT Song Options (in string-format) + NT Primary Player's options + NT Secondary Player's Options (Null if non-existant) + + Responce: Server 003 + + +004: Game Over Notice + Desc: This command is sent when end of game is encounterd + Payload: None. + Responce: None. + +005: Game Status update + Desc: Updates game info for each step + Payload: + Size Description + MSN Player # + LSN StepID + 0: Miss + 1: Boo + 2: Good + 3: Great + 4: Perfect + 5: Marvelous + 6: OK \ + 7: NG \These may be swapped + MSN Projected Grade (StepMania enum int) + LSN Reserved + 4 Net-order long containing score. + 2 Net-order int containing combo. + 2 Net-order int containing health. + 2 Net-order # containing offset + 32767 would be DEAD on the note + If the user is hitting late, the # will be higher + It if the user is exactly 0.25 seconds off, the + number will be different by 500, if 0.5, it will be + different by 1000. + Responce: None. + +006: Style Update (PLEASE NOTE THIS HAS NOTHING TO DO WITH SERVER COMMAND 6) + Desc: This is sent when a style is chosen. + Size: + 1 # of enabled players (1 means 1, 2 means 2) + 1 Player # (0 means 1st, 1 means 2nd) + NT Player Name for # + (Additional player's and #'s) (enabled players ONLY) + + Responce: None + +007: Chat message + Desc: The user typed a message for general chat. + Size: + NT Message + +008: Request Start Game and Tell server existance/non existance of song. + Desc: The user selected a song on a Net-enabled selection + Size: + 1 Usage of message + 0: (in responce to server 8) User has specified song + 1: (in responce to server 8) User does NOT have specified song + 2: User requested a start game on given song + NT Song Title (As gotten by GetTranslitMainTitle) + NT Song Artist (As Gotten by GetTranslitArtist) + NT Song Subtitle (As gotten by GetTranslitSubTitle) + + +SERVER to CLIENT protocol: (begins at 128) + +NOTE: Server responces always add 128, thus a server responce for no operation + is 128, not 000 + +000: No Operation + Desc: This command will cause server to respond with a no op responce. + Payload: None + Responce: Server 001 + +001: No Operation Responce + Desc: This command is used to respond to a no operation. + Payload: None + Responce: None + +002: Server Hello Responce + Desc: This introduces the server. + Payload: + Size Description + 1 Server protocol version + NT Server Name + +003: Allow Start + Desc: This will cause the client to start the game. + Payload: None + Responce: None + +004: Game over stats + Desc: this packet is send in responce to the game over packet + it contains information regarding how well each player did. + Payload: + 1 # of players sent in this packet (active players) + The way this works is to send every player's info for a given + field. Like every player's score will be sent first, then every + player's grade. + 4 Score //m_textScore[p] + + 1 Grade //m_Grades[p] + + 1 Difficulty (0=beginner, 1=light, etc.) + + 2 miss + (ETC) + 2 boo //m_textJudgeNumbers[l][p] (in inverse) + 2 good + 2 great + 2 perfect + 2 marvelous (REFER TO LINE 640 of ScreenEvaluation) + 2 ok + 2 max_combo + + +005: Scoreboard update + Desc: This will update the client's scoreboard. + Payload: + Size + 1 Which section + 0: Names + 1: Combos + 2: Projected Grades + 1 # of players to display + + If Names, then: + 1 Player in first place's ID + 1 Player in second place's ID + ... + 1 Last player's ID + If Combos, then: + 2 First player's combo + 2 Second Player's combo + ... + 2 Last player's combo + If Project grades + 1 Player 1's grade (in the same format used when reporting projected grades) + 1 Player 2's grade + ... + 1 Last player's projected grade + + +006: System Message (PLEASE NOTE THIS HAS NOTHING TO DO WITH CLIENT COMMAND 6) + Desc: Send system message to user + Payload: + Size Description + NT Message + +007: Chat Message + Desc: Add a chat message to the chat window on some StepMania screens. + Payload: + Size Description + NT Message + +008: Tell client to start song/ask if client has song + Desc: The user selected a song on a Net-enabled selection + Size: + 1 Usage of message + 0: See if client has song + 1: See if client has song, if so, scroll to song + 2: See if client has song, if so, scroll to song, and play that song + NT Song Title (As gotten by GetTranslitMainTitle) + NT Song Artist (As Gotten by GetTranslitArtist) + NT Song Subtitle (As gotten by GetTranslitSubTitle) + +009: Update user list + Desc: This sends all the users currently connected + Size: + 1 Max # of players + 1 # of players in this packet + 1 Player 0's status + NT Player 0's name (if there is no player here... make it a null ("")) + 1 Player 1's status + NT Player 1's name + ... + 1 Last player's status + NT Last player's name + Status: + 0 Inative (no info on this user yet) + 1 Active (you know who it is) + + + +///Potential for SMOnline/SMLAN +010: SMonline Packet. (Adam) + Bytemap(Game Packet - SMO/TCP[C=010] Data) + +----+---//---+-+---//---+-+---+------+-----+ + |iiii|GameName|0|SongName|0|pmd|Length|Steps| + +----+-//-----+-+-//-----+-+---+------+-----+ + Byte[4] iiii IPAddress of Host/Creator(WAN) + char* GameName Name of the Game + char* SongName Title of the Song + Byte p Current number of Players + Byte m Maximum allowed Players(Set by creator; values 1-14 valid) + Enum Byte d Average Player Difficulty(values 0-4 valid) + Long Length Length of .sm file for Song in Bytes(For validation) + Long Steps Total number of steps in all stepcharts for this song(For validation) +