Kodi Community Forum

Full Version: GSOC 2020 - Draft Proposal For Discussion - Ioannis Prokopiou
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
4.10 Player Manager for RetroPlayer
  • Name: [font=Times New Roman,serif]Ioannis Prokopiou[/font]
  • Forum/e-mail: [font=Times New Roman,serif][email protected][/font]
  • Summary:[font=Times New Roman,serif] Currently, player assignment and controller selection is hard-coded. This project would allow the user to configure which controllers are connected to the virtual console, enabling multiplayer in games that are currently hard-coded to single player.  Basically everything can emulate everything. We need a player/port manager that can handle this mess with a simple remote-friendly dialog. Not just emulators, IMO player profiles are a must have including avatars. Player profiles should be independent from Kodi users though. All the stats etc. can be in a separate database. Assigned ,maybe changeable, randomly-assigned avatars 8-bit, pixelated, animated little characters ([/font] https://github.com/kodi-game/OpenGameArt.org [font=Times New Roman,serif]). Feature: to have multiple controllers on a port. Buttons allows you to configure/reconfigure the (downloadable) controller buttons. User must be able to map controller to up to more than one devices at once, dialog must support multiple physical controllers per each virtual controller, up to , maybe, 16 players , dialog must respect both physical and logical topological restraints (https://xd.adobe.com/view/07368653-8b14-...aebd5c487/)[/font]
  • How will I achieve this:[font=Times New Roman,serif] This is my first time applying for google summer of code and I am planning to follow all the discussion and the issue progress found here: https://github.com/garbear/xbmc/issues/87 . I want to change all the hard-coded parts and ultimately change virtual input devices and choose which player number they are. Since there is work that has been done it the future it will be much easier for a beginner like me to get a grasp really quickly. I intent to work with C++ using Visual Studio + Windows environment(with ReSharper C++). I have already built Kodi for UWP and normal x64 and seen all the “good first issue” issues on github giving me a grasp of the code in general. Starting from the retro parts and having seen clearly all the previous tasks that had or hadn’t been done and I plan to start with steps towards completing the non completed player manager requirements with the feedback of the discussion. Of course I am more than happy to learn whatever I possible can and will get me forward.[/font]
  • What will the project focus on:[font=Times New Roman,serif] The main focus is for the players to be able to change virtual input devices and choose which player number they are while all the main points of the summary are the small goals/tasks.[/font]
  • Benefits:[font=Times New Roman,serif] The main benefits or for us the developers, team Kodi and players themselves. First, me, as a developer, will gain great knowledge and get my hands in practical topics that are not only professional but fun. Secondly, I think it will be very important for team Kodi to develop a very well player manager for retro player as it will be a very nice feature of the application. Lastly, the players will get to have more fun being able to manage and configure all the emulators, controllers in a player friendly environment making their “stay” at Kodi’s a fun one.[/font]
  • Goals:[font=Times New Roman,serif] As I mentioned above, some work is done already so I intend to follow the issue and the discussion and contribute with my ideas. Sub goals (following the discussion): [/font]
  1. [font=Times New Roman,serif]User must be able to map controller to up to more than one devices at once[/font]
  2. [font=Times New Roman,serif]Dialog must support multiple physical controllers per each virtual controller,[/font]
  3. [font=Times New Roman,serif]Up to , maybe, 16 players [/font]
  4. [font=Times New Roman,serif]Dialog must respect both physical and logical topological restraints[/font]
  5. [font=Times New Roman,serif]Avatar resource add-ons[/font]
  6. [font=Times New Roman,serif]Relative pointers emulation[/font]
  7. [font=Times New Roman,serif]Touchscreen [/font]
  8. [font=Times New Roman,serif]Hub support[/font]
  9. [font=Times New Roman,serif]Multitap subclass[/font]
  10. [font=Times New Roman,serif]Direction buttons to analog stick mapping[/font]
  11. [font=Times New Roman,serif]Additional hardware buttons etc. (all the open tasks from https://github.com/garbear/xbmc/issues/87 )[/font]
  • What does it touch in Kodi:[font=Times New Roman,serif] All the retro parts should be looked up as well as anything that has to do with players, controllers, emulations. We need to make the UI for the users so they have a seamless experience. I understand it may touch a lot of areas of the code but the fact that this project is fun and the fact that there is a well defined previous concept to rely on will make it easier. For sure, it touches:[/font]
  1. [font=Times New Roman,serif]PlayersSelectionRule [/font]
  2. [font=Times New Roman,serif]GameClientController [/font]
  3. [font=Times New Roman,serif]GameClientInput [/font]
  4. [font=Times New Roman,serif]GameClientDevice [/font]
  5. [font=Times New Roman,serif]GameClientTopology [/font]
  6. [font=Times New Roman,serif]ControllerGrid ( and specifically ::AddController )[/font]
  7. [font=Times New Roman,serif]ControllerTree [/font]
  8. [font=Times New Roman,serif]ControllerManager [/font]
[font=Times New Roman,serif]which contain hard-coded parts or useful information about them.[/font]
  • Requirements: 
  1. [font=Times New Roman,serif]Environment (VS  + Windows)[/font]
  2. [font=Times New Roman,serif]C++[/font]
  3. [font=Times New Roman,serif]understanding of general programming and will to make things work, which I have[/font]
  4. [font=Times New Roman,serif]understanding of Github[/font]
  5. [font=Times New Roman,serif]ability to quickly understand existing code - adaptability[/font]
  6. [font=Times New Roman,serif]good communication[/font]
  • Possible mentors:[font=Times New Roman,serif] Place to add possible mentors (Team-Kodi will add this).[/font]
Summer division by tasks:
[font=Times New Roman,serif]All the tasks are divided in 2 general topics which are the player assignment and the controller selection. The topologies are also a topic which applies to both of them.

At the start the topics regarding the topology should be made clear and resolved (let’s say the first month since both basic topics have references). Secondly, for the second month the controller selection and everything around controllers should be resolved (second month). The third month will be focused on player assignment and if times allows it the menus should be perfected as well as the dialogs.

The months of the controllers and the players could go reverse, meaning player assignment first and then controller selection.

As the time may not allow us to do everything, the most important features to be scheduled first are:
Topologies: buttons to analog mapping - hardware buttons - DFA - map device
Controller: controller topology (ending of topologies) - Context menu when selecting controller - Controller settings
Player: choose device - assign controller- player numbers ------> finally constructing player manager

Regarding controller selection:

Controller feature support:

  1. [font=Times New Roman,serif]-relative pointes emulation[/font]
  2. [font=Times New Roman,serif]-mouse game API (retro)[/font]
  3. [font=Times New Roman,serif]-touch screen[/font]
  4. [font=Times New Roman,serif]-hub support (retro-topology)[/font]
Topology support:
  1. [font=Times New Roman,serif]-multitap (liberto - topology)[/font]
  2. [font=Times New Roman,serif]-buttons to analog mapping (liberto - topology)[/font]
  3. [font=Times New Roman,serif]-hardware buttons(liberto wired topology)[/font]
  4. [font=Times New Roman,serif]-DFA (topology)[/font]
Controller panel:
  1. [font=Times New Roman,serif]-controller topology[/font]
Controller menu:
  1. [font=Times New Roman,serif]-map device(topology)[/font]
  1. [font=Times New Roman,serif]-Context menu when selecting controller[/font]
Avatar menu:
  1. [font=Times New Roman,serif]-Controller settings[/font]
[font=Times New Roman,serif]Regarding player assignment:

Controller panel:[/font]

  1. [font=Times New Roman,serif]-player manager[/font]
Controller menu:
  1. [font=Times New Roman,serif]-choose device[/font]
New dialogs:
  1. [font=Times New Roman,serif]-player profile selection dialog[/font]
  2. [font=Times New Roman,serif]-assign controller dialog[/font]
  3. [font=Times New Roman,serif]-Peripherals dialog with player's peripherals[/font]
  4. [font=Times New Roman,serif]-Controller profile selection dialog[/font]
Avatar panel:
  1. [font=Times New Roman,serif]-player numbers[/font]
  1. [font=Times New Roman,serif]-Context menu when selecting avatar[/font]
Avatar menu:
  1. [font=Times New Roman,serif]-Change player (fades focus texture, avatar follows focus as it moves across players)[/font]
  2. [font=Times New Roman,serif]-view profile[/font]
  3. [font=Times New Roman,serif]-Choose profile[/font]
  4. [font=Times New Roman,serif]-Assign controller[/font]
UI Mock up:
[font=Times New Roman,serif]The goal is for the players to be able to change virtual input devices and choose which player number they are. So, following the discussions I edited dome of the photos to better explain my ideas.
There will be a menu before the start of the game but the players will be able to make configurations during the game through game menu. The players will be able to move their avatar to their preferable number to change or exchange position with a player in a certain number. Below will be displayed the icon of the controller/profile and below that will be a button to open controller configuration.
There will be various controllers depending the game that they are playing in which they can make their personal profiles configurating the buttons. The buttons can be rearranged which is a way of displaying all the options and making quick changes while it is easier to code.
The second picture is just for the display of the virtual ports menu in which I have no argument.

Link to mock up in Google Drive[/font]