{"action":"created","issue":{"url":"https://api.github.com/repos/citra-emu/citra/issues/3073","repository_url":"https://api.github.com/repos/citra-emu/citra","labels_url":"https://api.github.com/repos/citra-emu/citra/issues/3073/labels{/name}","comments_url":"https://api.github.com/repos/citra-emu/citra/issues/3073/comments","events_url":"https://api.github.com/repos/citra-emu/citra/issues/3073/events","html_url":"https://github.com/citra-emu/citra/pull/3073","id":271219403,"number":3073,"title":"Citra-qt: Add multiplayer ui","user":{"login":"jroweboy","id":952515,"avatar_url":"https://avatars1.githubusercontent.com/u/952515?v=4","gravatar_id":"","url":"https://api.github.com/users/jroweboy","html_url":"https://github.com/jroweboy","followers_url":"https://api.github.com/users/jroweboy/followers","following_url":"https://api.github.com/users/jroweboy/following{/other_user}","gists_url":"https://api.github.com/users/jroweboy/gists{/gist_id}","starred_url":"https://api.github.com/users/jroweboy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jroweboy/subscriptions","organizations_url":"https://api.github.com/users/jroweboy/orgs","repos_url":"https://api.github.com/users/jroweboy/repos","events_url":"https://api.github.com/users/jroweboy/events{/privacy}","received_events_url":"https://api.github.com/users/jroweboy/received_events","type":"User","site_admin":false},"labels":[{"id":811880815,"url":"https://api.github.com/repos/citra-emu/citra/labels/canary-merge","name":"canary-merge","color":"11916f","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":19,"created_at":"2017-11-04T19:54:38Z","updated_at":"2018-03-16T03:39:53Z","closed_at":null,"author_association":"MEMBER","pull_request":{"url":"https://api.github.com/repos/citra-emu/citra/pulls/3073","html_url":"https://github.com/citra-emu/citra/pull/3073","diff_url":"https://github.com/citra-emu/citra/pull/3073.diff","patch_url":"https://github.com/citra-emu/citra/pull/3073.patch"},"body":"## Design Goals\r\n\r\nMultiplayer works by emulating local wireless connections and serving the packets to others across the internet. Since most games aren't designed to support large groups of people in the same location, the goal of this design is to focus on smaller rooms of people that are playing a single game instead of larger rooms where people play whatever game they feel like. The design is meant to encourage the idea of \"I want to play X game with others\" and to help guide them to others that also want to play that game.\r\n\r\nWith this in mind, the room is limited to 16 people in order to encourage many smaller rooms instead of a few larger rooms. The lobby also allows users to filter by games that I own, hide full rooms from the lobby, and other filtering options. Inside the room, there is a chat system which is only meant to be simple enough to provide bare bones communication between players (useful for things like helping users determine game mode to play and other coordination tasks)\r\n\r\nDue to limitations on time, I decided that it would be best to focus on the use case listed above, of random people playing together. Its easier to get a few dedicated rooms set up that people can join, rather than having people host their own rooms and having them deal with port forwarding and so on. There wasn't enough time to add support for NAT traversal for the first release, so prioritizing players using dedicated rooms through the lobby was the plan.\r\n\r\nIn summary, the primary goal of the first release of the UI is meant to help someone find a group to play a specific game with. From there, secondary goals are to let people host their own rooms, direct connect, and so on.\r\n\r\n## Screenshots\r\n\r\nLobby: \r\n![lobby](https://user-images.githubusercontent.com/952515/32458960-6356951e-c2eb-11e7-9b3b-33342f7ef756.png)\r\n\r\nFeatures of lobby:\r\n * Easy to change the nickname you want to connect the room with.\r\n * Filter rooms by search (searches on room name, preferred game and host name), games I own (by game id so it doesn't handle region differences currently), and Hide full games (max players)\r\n * Sortable columns\r\n * Doesn't hammer citra services by automatically refreshing (intended)\r\n\r\nRooms:\r\n![connected as client](https://user-images.githubusercontent.com/952515/32459824-1e636d08-c2ee-11e7-96d4-0ba053a258b8.png)\r\n\r\nFeatures of Room:\r\n  * Simple. Has only player listing and chat.\r\n  * Disconnect is different from close window.\r\n\r\nCreate Room:\r\n![create room](https://user-images.githubusercontent.com/952515/32460061-b9ed6940-c2ee-11e7-9c32-eb8c9a152678.png)\r\n\r\nFeatures of create room:\r\n * Simple. Designed to put the \"Player list and Chat\" below it once the room is created, but that had to be scrapped from this release due to technical issues with updating options after the room hosting is started.\r\n * Fields like nickname and room name are stored in uisettings.\r\n\r\nDirect Connect:\r\n![direct connect](https://user-images.githubusercontent.com/952515/32460228-58ce05b0-c2ef-11e7-87eb-51f3551bd29d.png)\r\n\r\nFeatures of direct connect:\r\n * Ready to support NAT traversal (TODO: remove text about traversal server)\r\n * Fields are stored in uisettings.\r\n\r\n## Code Design\r\n\r\n**TODO** (sorry ran outta time writing this again!)\r\n\r\n## TODO\r\n\r\n- [ ] Remove text about traversal server in direct connect (since that didn't make the first release)\r\n- [ ] Add \"Connected\" text to the status bar next to the connected icon (along with a tool tip telling people that they can double click it to open the room)\r\n- [ ] Fix `QObject::connect: signal not found in Lobby` error\r\n- [ ] Make the multiplayer windows not parented so you can minimize them independently\r\n\r\n## Follow up changes\r\n\r\n- [ ] NAT traversal support to make self hosting more useful\r\n- [ ] Integrated NAT feedback to help people diagnose if they can host\r\n- [ ] ~~make citra faster~~\r\n\r\nAlso major apologies for the single commit. I will split it up if reviewing file by file is proving to be too much\r\n\r\n<!-- Reviewable:start -->\r\n---\r\nThis change is [<img src=\"https://reviewable.io/review_button.svg\" height=\"34\" align=\"absmiddle\" alt=\"Reviewable\"/>](https://reviewable.io/reviews/citra-emu/citra/3073)\r\n<!-- Reviewable:end -->\r\n"},"comment":{"url":"https://api.github.com/repos/citra-emu/citra/issues/comments/373594266","html_url":"https://github.com/citra-emu/citra/pull/3073#issuecomment-373594266","issue_url":"https://api.github.com/repos/citra-emu/citra/issues/3073","id":373594266,"user":{"login":"Schplee","id":24275329,"avatar_url":"https://avatars2.githubusercontent.com/u/24275329?v=4","gravatar_id":"","url":"https://api.github.com/users/Schplee","html_url":"https://github.com/Schplee","followers_url":"https://api.github.com/users/Schplee/followers","following_url":"https://api.github.com/users/Schplee/following{/other_user}","gists_url":"https://api.github.com/users/Schplee/gists{/gist_id}","starred_url":"https://api.github.com/users/Schplee/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Schplee/subscriptions","organizations_url":"https://api.github.com/users/Schplee/orgs","repos_url":"https://api.github.com/users/Schplee/repos","events_url":"https://api.github.com/users/Schplee/events{/privacy}","received_events_url":"https://api.github.com/users/Schplee/received_events","type":"User","site_admin":false},"created_at":"2018-03-16T03:39:53Z","updated_at":"2018-03-16T03:39:53Z","author_association":"MEMBER","body":"*Recommended by Flame Sage to post here*\r\n\r\n* Perhaps the lobby should default sort by player count, so that users can have an easier time seeing which lobbies are populated. With how many lobbies exist now, it can become a hassle to sort without pressing a button.\r\n\r\n* I'm not sure if it's already planned, but currently the tabs' size can't be changed: https://i.imgur.com/m1Raj4p.png"}}
{"actor":{"display_login":"Schplee"}}