├── CONTRIBUTORS.md ├── LICENSE ├── README.md ├── as2 ├── README.md ├── client │ └── README.md └── server │ ├── README.md │ ├── buddies.md │ ├── clothing.md │ ├── errors.md │ ├── inventory.md │ ├── mail.md │ ├── moderation.md │ ├── newspapers.md │ ├── player.md │ ├── redemption.md │ └── system.md └── as3 └── README.md /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | # Contributors 2 | ##### A list of direct contributors to the CP Protocol project 3 | * widd 4 | * jadbalout ("Jad") 5 | 6 | 7 | And a thanks to everyone in the community who (from 2010 to now) wrote code, made posts, or facilitated discussion that assisted in mapping the protocol. -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2017 CP Protocol Contributors 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Club Penguin Protocol 2 | --- 3 | ### Info 4 | This is a project dedicated to reverse engineering the network protocol of the popular (but now defunct) online game __Club Penguin__. 5 | It attempts to document all of the relevant network messages in their entirety as well as the general control flow of the game server(s). 6 | 7 | This documentation is separated into __two__ distinct branches/versions: 8 | __AS2__ and __AS3__ - the names represent the original protocol and when the protocol underwent major changes between 2008 and 2012, respectively. 9 | 10 | ### Structure 11 | The Club Penguin network protocol revolves around a string-based packet format. The client sends extra precursory information with each packet while the server sends (generally) shorter messages in response. The login scheme also makes use of XML for a few initial checks, but the vast majority of network operations use this format (the __game server format__, or __SmartFoxServer format__). -------------------------------------------------------------------------------- /as2/README.md: -------------------------------------------------------------------------------- 1 | # AS2 Protocol 2 | --- 3 | These sections represent the pre-2009 protocol. 4 | 5 | ### Glossary 6 | TODO: write AS2 message/packet glossary -------------------------------------------------------------------------------- /as2/client/README.md: -------------------------------------------------------------------------------- 1 | # AS2 Client Messages 2 | ##### (Server-bound) 3 | --- 4 | These sections document AS2 messages from the client that are sent to the server. 5 | 6 | ### Glossary 7 | TODO: glossary of AS2 client messages/packets -------------------------------------------------------------------------------- /as2/server/README.md: -------------------------------------------------------------------------------- 1 | # AS2 Server Messages 2 | ##### (Client-bound) 3 | --- 4 | These sections document AS2 messages from the server that are sent to the client. 5 | 6 | ### Glossary 7 | TODO: glossary of AS2 server messages/packets -------------------------------------------------------------------------------- /as2/server/buddies.md: -------------------------------------------------------------------------------- 1 | # Buddies 2 | ##### Messages that pertain to users' buddy list functions. 3 | --- 4 | ### Get Buddies 5 | Sent to clients when they request their penguin's buddy list. 6 | 7 | `gb` 8 | 9 | |Argument|Type|Variadic?| 10 | |---|---|---| 11 | |buddies|Array of buddy information|Yes| 12 | 13 | ##### `buddies` Argument Table 14 | Format: `penguinID|username|onlineStatus` 15 | 16 | |Argument|Type| 17 | |---|---| 18 | |penguinID|Unsigned integer| 19 | |username|String| 20 | |onlineStatus|Boolean integer (0, 1)| 21 | 22 | ##### Example 23 | `%xt%gb%0%123|Nickname1|0%100|Online Penguin|1%` 24 | 25 | ### Buddy Request 26 | Sent to clients when they receive a buddy request from another user. 27 | 28 | `br` 29 | 30 | |Argument|Type|Variadic?| 31 | |---|---|---| 32 | |penguinID|Unsigned integer|No| 33 | |username|String|No| 34 | 35 | ##### Example 36 | `%xt%br%0%123%Nickname1%` 37 | 38 | ### Buddy Accepted 39 | Sent to clients when the server is notified the target user has accepted their buddy request. 40 | 41 | At this point the client will add the target user to the in-game buddy list. 42 | 43 | `ba` 44 | 45 | |Argument|Type|Variadic?| 46 | |---|---|---| 47 | |penguinID|Unsigned integer|No| 48 | |username|String|No| 49 | 50 | ##### Example 51 | `%xt%ba%0%123%Nickname1%` 52 | 53 | ### Buddy Removed 54 | Sent to clients when the server wishes to remove a player from their buddy list, generally when a user requests it. 55 | 56 | `rb` 57 | 58 | |Argument|Type|Variadic?| 59 | |---|---|---| 60 | |penguinID|Unsigned integer|No| 61 | |username|String|No| 62 | 63 | ##### Example 64 | `%xt%rb%0%123%Nickname1%` 65 | 66 | ### Buddy Found 67 | Sent to clients in response to a buddy find request message. 68 | 69 | The client ignores this unless a request has been sent - hence the lack of a user-identifying argument. 70 | 71 | `bf` 72 | 73 | |Argument|Type|Variadic?| 74 | |---|---|---| 75 | |roomID|Unsigned integer|No| 76 | 77 | ##### Example 78 | `%xt%bf%0%100%` 79 | 80 | ### Buddy Online 81 | Sent to clients when a buddy logs into the same game server as them. 82 | 83 | `bon` 84 | 85 | |Argument|Type|Variadic?| 86 | |---|---|---| 87 | |penguinID|Unsigned integer|No| 88 | 89 | ##### Example 90 | `%xt%bon%0%123%` 91 | 92 | ### Buddy Offline 93 | Sent to clients when a buddy that was previously on the same game server disconnects. 94 | 95 | `bof` 96 | 97 | |Argument|Type|Variadic?| 98 | |---|---|---| 99 | |penguinID|Unsigned integer|No| 100 | 101 | ##### Example 102 | `%xt%bof%0%123%` -------------------------------------------------------------------------------- /as2/server/clothing.md: -------------------------------------------------------------------------------- 1 | # Clothing 2 | ##### Messages that handle clothing updates of penguins in a room. 3 | --- 4 | ### Update Color 5 | Sent to all penguins in a room to show a penguin's new color when they change their current one. 6 | 7 | `upc` 8 | 9 | |Argument|Type|Variadic?| 10 | |---|---|---| 11 | |penguinID|Unsigned integer|No| 12 | |itemID|Unsigned integer|No| 13 | 14 | ##### Example 15 | `%xt%upc%0%123%1%` 16 | 17 | ### Update Head 18 | Sent to all penguins in a room to show a penguin's new head item when they change their current one. 19 | 20 | `uph` 21 | 22 | |Argument|Type|Variadic?| 23 | |---|---|---| 24 | |penguinID|Unsigned integer|No| 25 | |itemID|Unsigned integer|No| 26 | 27 | ##### Example 28 | `%xt%uph%0%123%1%` 29 | 30 | ### Update Face 31 | Sent to all penguins in a room to show a penguin's new face item when they change their current one. 32 | 33 | `upf` 34 | 35 | |Argument|Type|Variadic?| 36 | |---|---|---| 37 | |penguinID|Unsigned integer|No| 38 | |itemID|Unsigned integer|No| 39 | 40 | ##### Example 41 | `%xt%upf%0%123%1%` 42 | 43 | ### Update Neck 44 | Sent to all penguins in a room to show a penguin's new neck item when they change their current one. 45 | 46 | `upn` 47 | 48 | |Argument|Type|Variadic?| 49 | |---|---|---| 50 | |penguinID|Unsigned integer|No| 51 | |itemID|Unsigned integer|No| 52 | 53 | ##### Example 54 | `%xt%upn%0%123%1%` 55 | 56 | ### Update Body 57 | Sent to all penguins in a room to show a penguin's new body item when they change their current one. 58 | 59 | `upb` 60 | 61 | |Argument|Type|Variadic?| 62 | |---|---|---| 63 | |penguinID|Unsigned integer|No| 64 | |itemID|Unsigned integer|No| 65 | 66 | ##### Example 67 | `%xt%upb%0%123%1%` 68 | 69 | ### Update Hands 70 | Sent to all penguins in a room to show a penguin's new hand item when they change their current one. 71 | 72 | `upa` 73 | 74 | |Argument|Type|Variadic?| 75 | |---|---|---| 76 | |penguinID|Unsigned integer|No| 77 | |itemID|Unsigned integer|No| 78 | 79 | ##### Example 80 | `%xt%upa%0%123%1%` 81 | 82 | ### Update Feet 83 | Sent to all penguins in a room to show a penguin's new feet item when they change their current one. 84 | 85 | `upe` 86 | 87 | |Argument|Type|Variadic?| 88 | |---|---|---| 89 | |penguinID|Unsigned integer|No| 90 | |itemID|Unsigned integer|No| 91 | 92 | ##### Example 93 | `%xt%upe%0%123%1%` 94 | 95 | ### Update Photo 96 | Sent to all penguins in a room to show a penguin's new playercard photo/background when they change their current one. 97 | 98 | This has no visible changes on the client unless you have the penguin's playercard open at the time, but the client will keep track of it. 99 | 100 | `upp` 101 | 102 | |Argument|Type|Variadic?| 103 | |---|---|---| 104 | |penguinID|Unsigned integer|No| 105 | |itemID|Unsigned integer|No| 106 | 107 | ##### Example 108 | `%xt%upp%0%123%1%` 109 | 110 | ### Update Pin 111 | Sent to all penguins in a room to show a penguin's new playercard pin when they change their current one. 112 | 113 | This has no visible changes on the client unless you have the penguin's playercard open at the time, but the client will keep track of it. 114 | 115 | `upl` 116 | 117 | |Argument|Type|Variadic?| 118 | |---|---|---| 119 | |penguinID|Unsigned integer|No| 120 | |itemID|Unsigned integer|No| 121 | 122 | ##### Example 123 | `%xt%upl%0%123%1%` -------------------------------------------------------------------------------- /as2/server/errors.md: -------------------------------------------------------------------------------- 1 | # Errors 2 | ##### Messages pertaining to the error messages. 3 | --- 4 | ### Error 5 | Sent to a penguin to show a specific error. 6 | 7 | `e` 8 | 9 | |Argument|Type|Variadic?| 10 | |---|---|---| 11 | |errorID|Unsigned integer|No| 12 | 13 | ##### Example 14 | `%xt%e%0%100%` 15 | 16 | ##### Error IDs 17 | |ID|Description| 18 | |---|---| 19 | |1|Connection Lost| 20 | |2|Time Out| 21 | |3|Multiple Connections| 22 | |4|Disconnect| 23 | |5|Kick| 24 | |6|Connection Not Allowed| 25 | |100|Username Not Found| 26 | |101|Incorrect Password| 27 | |103|Server full| 28 | |130|Password Required| 29 | |140|Name Required| 30 | |150|Login Flooding| 31 | |200|Player In Room| 32 | |210|Room Full| 33 | |211|Game Full| 34 | |212|Room Capacity Rule| 35 | |213|Room Does Not Exist| 36 | |400|Already Owns Inventory Item| 37 | |401|Not Enough Coins| 38 | |402|Item Does Not Exist| 39 | |403|Max Furniture Items| 40 | |405|Not Enough Medals| 41 | |407|Max Puffle Hat Items| 42 | |408|Already Owns Superplay Item| 43 | |409|Max CJ Mats| 44 | |410|Item Not Available| 45 | |440|Puffle Limit| 46 | |441|Name Not Available| 47 | |442|Puffle Limit| 48 | |500|Already Owns Igloo| 49 | |501|Already Owns Floor| 50 | |601|Ban Duration| 51 | |602|Ban An Hour| 52 | |603|Ban Forever| 53 | |610|Autoban| 54 | |611|Hacking Autoban| 55 | |800|Game Cheat| 56 | |900|Account Not Activated| 57 | |901|Buddy Limit| 58 | |910|Play Time Up| 59 | |911|Out Play Time| 60 | |913|Grounded| 61 | |914|Play Time Ending| 62 | |915|Play Hours Ending| 63 | |916|Play Hours Up| 64 | |917|Play Hours Hasn't Started| 65 | |918|Play Hours Up| 66 | |990|System Reboot| 67 | |999|Not A Member| 68 | |1000|No Database Connection| 69 | |10001|No Socket Connection| 70 | |10004|Socket Lost Connection| 71 | |10006|Max Igloo Furniture Error| 72 | |10008|Connection Timeout| 73 | |10009|Max Stampbook Cover Items| 74 | |20001|Redemption Connection Lost| 75 | |20002|Redemption Already Have Item| 76 | |20103|Redemption Server Full| 77 | |20140|Name Required Redemption| 78 | |20130|Password Required Redemption| 79 | |20710|Redemption Book ID Not Exist| 80 | |20711|Redemption Book Already Redemeed| 81 | |20712|Redemption Book Wrong Answer| 82 | |20713|Redemption Book Too Many Attempts| 83 | |20720|Redemption Code Not Found| 84 | |20721|Redemption Code Already Redeemed| 85 | |20722|Redemption Too Many Attempts| 86 | |20723|Redemption Catalog Not Found| 87 | |20724|Redemption No Exclusive Redeems| 88 | |20725|Redemption Code Group Redeemed| 89 | |20726|Redemption Code Expired| 90 | |20730|Redemption Puffles Max| 91 | |21700|Redemption Invalid Puffle| 92 | |21701|Redemption Puffle Code Max| 93 | |21702|Redemption Code Too Short| 94 | |21703|Redemption Code Too Long| 95 | |21704|Golden Code Not Ready| 96 | |21705|Redemption Puffle Name Empty| 97 | -------------------------------------------------------------------------------- /as2/server/inventory.md: -------------------------------------------------------------------------------- 1 | # Inventory 2 | ##### Messages that pertain to users' items inventory functions. 3 | --- 4 | ### Query Player Awards 5 | Sent to clients when they request a penguin's awards. 6 | 7 | `qpa` 8 | 9 | |Argument|Type|Variadic?| 10 | |---|---|---| 11 | |awards|Array of awards information|Yes| 12 | 13 | ##### `awards` Argument Table 14 | Format: `awardID|creationDate|memberStatus` 15 | 16 | |Argument|Type| 17 | |---|---| 18 | |awardID|Unsigned integer| 19 | |creationDate|Timestamp| 20 | |memberStatus|Boolean integer (0, 1)| 21 | 22 | ##### Example 23 | `%xt%qpa%0%801|1151614800|0%802|1151614800|1%` 24 | 25 | ### Query Player Pins 26 | Sent to clients when they request a penguin's pins. 27 | 28 | `qpp` 29 | 30 | |Argument|Type|Variadic?| 31 | |---|---|---| 32 | |pins|Array of pins information|Yes| 33 | 34 | ##### `pins` Argument Table 35 | Format: `pinID|creationDate|memberStatus` 36 | 37 | |Argument|Type| 38 | |---|---| 39 | |pinID|Unsigned integer| 40 | |creationDate|Timestamp| 41 | |memberStatus|Boolean integer (0, 1)| 42 | 43 | ##### Example 44 | `%xt%qpp%0%550|1142553600|0%551|1143763200|1%` 45 | 46 | ### Get Inventory 47 | Sent to clients when they request their penguin's items. 48 | 49 | `gi` 50 | 51 | |Argument|Type|Variadic?| 52 | |---|---|---| 53 | |itemID|Unsigned integer|Yes| 54 | 55 | ##### Example 56 | `%xt%gi%0%413%414%567%` 57 | 58 | ### Add Item 59 | Sent to clients after an item gets added to their penguin's inventory. 60 | 61 | The new penguin's coin balance is sent for items that have a cost. 62 | 63 | `ai` 64 | 65 | |Argument|Type|Variadic?| 66 | |---|---|---| 67 | |itemID|Unsigned integer|No| 68 | |newCoins|Unsigned integer|No| 69 | 70 | ##### Example 71 | `%xt%ai%0%413%5000%` 72 | -------------------------------------------------------------------------------- /as2/server/mail.md: -------------------------------------------------------------------------------- 1 | # Mail 2 | ##### Messages that pertain to users' mail boxes. 3 | --- 4 | ### Delete Mail From Player 5 | Sent to clients when the postcards from a specific penguin have been deleted from their penguin's mail. This is only done at the user's request. Sending it arbitrarily will not work as it requires a client request, otherwise it will be ignored. 6 | 7 | `mdp` 8 | 9 | |Argument|Type|Variadic?| 10 | |---|---|---| 11 | |newMailCount|Unsigned integer|No| 12 | 13 | ##### Example 14 | `%xt%mdp%0%15%` 15 | 16 | ### Send Mail 17 | Sent to clients after a send postcard request with either a successful result or an error. The game server is responsible for managing the mail box of the user, so hitting the postcard limit, which is 100, will return an error. 18 | 19 | `ms` 20 | 21 | |Argument|Type|Variadic?| 22 | |---|---|---| 23 | |newCoinsAmount|Unsigned integer|No| 24 | |postCardStatus|Unsigned integer|No| 25 | 26 | ##### `postCardStatus` Values Table 27 | |Status ID|Definition| 28 | |---|---| 29 | |0|Max Mail Count Reached| 30 | |1|Mail Sent(Success)| 31 | |2|Not Enough Coins| 32 | 33 | ##### Example 34 | `%xt%ms%0%550%1%` 35 | 36 | ### Receive Mail 37 | Sent to client that receive a postcard. 38 | 39 | `mr` 40 | 41 | |Argument|Type|Variadic?| 42 | |---|---|---| 43 | |senderUsername|String|No| 44 | |senderID|Unsigned integer|No| 45 | |artID|Unsigned integer|No| 46 | |mailDetails|String|No| 47 | |mailCreatedAt|Timestamp|No| 48 | |messageID|Unsigned integer|No| 49 | 50 | ##### Example 51 | `%xt%mr%0%Jad%1%50%%1504711291%1%` 52 | 53 | 54 | ### Get Mail 55 | Sent to clients when they request their penguin's mail. 56 | 57 | `mg` 58 | 59 | |Argument|Type|Variadic?| 60 | |---|---|---| 61 | |postcards|Array of postcard information|Yes| 62 | 63 | ##### `postcards` Argument Table 64 | Format: `senderName|senderID|artID|mailDetails|mailCreatedAt|messageID` 65 | 66 | |Argument|Type| 67 | |---|---| 68 | |senderUsername|String| 69 | |senderID|Unsigned integer| 70 | |artID|Unsigned integer| 71 | |mailDetails|String| 72 | |mailCreatedAt|Timestamp| 73 | |messageID|Unsigned integer| 74 | 75 | ##### Example 76 | `%xt%mg%0%Nickname1|101|217||1454107091|4%Nickname2|101|37||1453826828|2%` 77 | 78 | ### Mail Start Engine 79 | Sent to client in order to start the mail engine. Also pertains to the notification system on the mail button. 80 | 81 | `mst` 82 | 83 | |Argument|Type|Variadic?| 84 | |---|---|---| 85 | |unreadCount|Unsigned integer|No| 86 | |totalCount|Unsigned integer|No| 87 | 88 | ##### Example 89 | `%xt%mst%0%5%7%` 90 | -------------------------------------------------------------------------------- /as2/server/moderation.md: -------------------------------------------------------------------------------- 1 | # Moderation 2 | ##### Messages that allow in-game moderators to perform privileged actions. 3 | --- 4 | ### Moderator Action 5 | Sent from the server in response to a client message for performing a privileged action. 6 | The requesting client must have the proper permissions to do so; implementation of this is up to the server. 7 | The _type_ argument represents the action type - either a kick, mute, or ban. 8 | 9 | `ma` 10 | 11 | |Argument|Type|Variadic?| 12 | |---|---|---| 13 | |type|Character|No| 14 | |penguinID|Unsigned integer|No| 15 | |username|String|No| 16 | 17 | ##### Example 18 | `%xt%ma%0%m%100%Nickname1%` 19 | 20 | ##### Action Types 21 | |ID|Description| 22 | |---|---| 23 | |m|Mute Player| 24 | |k|Kick Player| 25 | |b|Ban Player| -------------------------------------------------------------------------------- /as2/server/newspapers.md: -------------------------------------------------------------------------------- 1 | # Newspapers 2 | ##### Messages pertaining to the open/closed newspaper status shown on penguin avatars on the client. 3 | --- 4 | ### Open Newspaper 5 | Sent to all penguins in a room to show a penguin opening their newspaper. 6 | 7 | `at` 8 | 9 | |Argument|Type|Variadic?| 10 | |---|---|---| 11 | |penguinID|Unsigned integer|No| 12 | 13 | ##### Example 14 | `%xt%at%0%123%` 15 | 16 | ### Close Newspaper 17 | Sent to all penguins in a room to show a penguin closing their newspaper. 18 | 19 | `rt` 20 | 21 | |Argument|Type|Variadic?| 22 | |---|---|---| 23 | |penguinID|Unsigned integer|No| 24 | 25 | ##### Example 26 | `%xt%rt%0%123%` -------------------------------------------------------------------------------- /as2/server/player.md: -------------------------------------------------------------------------------- 1 | # Player 2 | ##### Messages pertaining to actions performed by penguin avatars. 3 | --- 4 | ### Send Frame 5 | Sent to all penguins in a room to update a player frame. 6 | 7 | `sf` 8 | 9 | |Argument|Type|Variadic?| 10 | |---|---|---| 11 | |penguinID|Unsigned integer|No| 12 | |frame|Unsigned integer|No| 13 | 14 | ##### Example 15 | `%xt%sf%0%123%5%` 16 | 17 | ### Send Move 18 | Sent to all penguins in a room to update a player location. 19 | The client will animate moving the penguin from positionX to positionY. 20 | 21 | `sp` 22 | 23 | |Argument|Type|Variadic?| 24 | |---|---|---| 25 | |penguinID|Unsigned integer|No| 26 | |positionX|Unsigned integer|No| 27 | |positionY|Unsigned integer|No| 28 | 29 | ##### Example 30 | `%xt%sp%0%123%0%0%` 31 | 32 | ### Send Throw Snowball 33 | Sent to all penguins in a room to show a snowball thrown by a penguin. 34 | 35 | The client will animate throwing a snowball from positionX to positionY. 36 | 37 | `sb` 38 | 39 | |Argument|Type|Variadic?| 40 | |---|---|---| 41 | |penguinID|Unsigned integer|No| 42 | |positionX|Unsigned integer|No| 43 | |positionY|Unsigned integer|No| 44 | 45 | ##### Example 46 | `%xt%sb%0%123%0%0%` 47 | 48 | 49 | ### Send Emote 50 | Sent to all penguins in a room to show an emote sent by a penguin. 51 | 52 | `se` 53 | 54 | |Argument|Type|Variadic?| 55 | |---|---|---| 56 | |penguinID|Unsigned integer|No| 57 | |emoteID|Unsigned integer|No| 58 | 59 | ##### Example 60 | `%xt%se%0%123%3%` 61 | 62 | ### Send Joke 63 | Sent to all penguins in a room to show a joke said by a penguin. 64 | 65 | `sj` 66 | 67 | |Argument|Type|Variadic?| 68 | |---|---|---| 69 | |penguinID|Unsigned integer|No| 70 | |jokeID|Unsigned integer|No| 71 | 72 | ##### Example 73 | `%xt%sj%0%123%3%` 74 | 75 | 76 | ### Send Message 77 | Sent to all penguins in a room to show a message said by a penguin. 78 | 79 | `sm` 80 | 81 | |Argument|Type|Variadic?| 82 | |---|---|---| 83 | |penguinID|Unsigned integer|No| 84 | |message|String|No| 85 | 86 | ##### Example 87 | `%xt%sm%0%123%Hello%` 88 | 89 | 90 | ### Send Safe Message 91 | Sent to all penguins in a room to show a safe message said by a penguin. 92 | 93 | `ss` 94 | 95 | |Argument|Type|Variadic?| 96 | |---|---|---| 97 | |penguinID|Unsigned integer|No| 98 | |safeMessageID|Unsigned integer|No| 99 | 100 | ##### Example 101 | `%xt%ss%0%123%5%` 102 | -------------------------------------------------------------------------------- /as2/server/redemption.md: -------------------------------------------------------------------------------- 1 | # Redemption 2 | ##### Messages pertaining to the redemption server. 3 | --- 4 | ### Join Server 5 | Sent to the penguin trying to log in to the redemption server to give needed player information. 6 | 7 | `rjs` 8 | 9 | |Argument|Type|Variadic? 10 | |---|---|---| 11 | |redemeedBooks|Unsigned integer array delimited by ","|Yes| 12 | |Unknown & Not Needed|Unsigned integer|No| 13 | |memberStatus|Boolean integer (0, 1)|No| 14 | 15 | ##### Example 16 | `%xt%rjs%0%5,7%0%1%` 17 | -------------------------------------------------------------------------------- /as2/server/system.md: -------------------------------------------------------------------------------- 1 | # System 2 | ##### Messages that take care of unseen background logic unknown to the user. 3 | --- 4 | ### Heartbeat 5 | Sent from the server in response to a client heartbeat/ping. 6 | This message has no arguments, but the __internal room ID__ is still required. 7 | 8 | `h` 9 | 10 | |Argument|Type|Variadic?| 11 | |---|---|---| 12 | |None|N/A|N/A| 13 | 14 | ##### Example 15 | `%xt%h%0%` -------------------------------------------------------------------------------- /as3/README.md: -------------------------------------------------------------------------------- 1 | # AS3 Protocol 2 | --- 3 | These sections represent the post-2009 through 2012 protocol. 4 | 5 | ### Glossary 6 | TODO: write AS3 message/packet glossary --------------------------------------------------------------------------------