2021-01-03 10:36:35 +00:00
# EmulationStation Desktop Edition (ES-DE) - Contributing
2020-07-11 15:54:30 +00:00
2020-12-30 22:23:30 +00:00
### Help needed
2020-07-11 15:54:30 +00:00
2021-04-03 14:57:16 +00:00
Contributions are very much appreciated as there are many things that need to be implemented and improved.
2020-07-11 15:54:30 +00:00
2021-04-03 14:57:16 +00:00
Code commits is only one part of it, as work is also needed on the rbsimple-DE theme set as well as thorough application testing. It's impossible for me to test every game system as ES-DE has support for well over a 100 different platforms.
2020-07-11 15:54:30 +00:00
2021-06-16 18:01:07 +00:00
And a thorough review of [unix/es_systems.xml ](resources/systems/unix/es_systems.xml ), [macos/es_systems.xml ](resources/systems/macos/es_systems.xml ) and [windows/es_systems.xml ](resources/systems/windows/es_systems.xml ) would be great as these templates are not fully populated yet. For some of the game systems there are only placeholder entries, mostly for platforms that RetroArch does not support and where discrete emulators are required.
2020-07-11 15:54:30 +00:00
2021-02-10 19:16:23 +00:00
As for rbsimple-DE there are quite some missing graphic files and other customizations for a number of game systems. Check out [MISSING.md ](themes/rbsimple-DE/MISSING.md ) for more details on what needs to be added or updated. Note that although rbsimple-DE is based on Recalbox Multi, it's only possible to use assets from this theme set created before its change to a more restrictive license, which happened in 2018. As such it's unfortunately necessary to recreate all the system graphics from scratch that have since been released by the Recalbox community.
2020-08-23 09:35:02 +00:00
2021-04-07 17:48:52 +00:00
Another area where help is really needed is for creation of installation instruction videos and similar. There are some rudimentary videos available at the ES-DE [YouTube channel ](https://www.youtube.com/channel/UCosLuC9yIMQPKFBJXgDpvVQ ), but proper videos with voice-over and similar are needed to help especially new ES-DE users. However the videos don't need to be located at this YouTube channel. I have zero interest in creating videos or maintaining a channel of my own, there's simply a need to have video instructions available somewhere. So if you can create good videos and prefer to use your own YouTube channel, I will link to them from this repository and from https://es-de.org.
2021-01-05 10:35:47 +00:00
The ES-DE development is tracked using a Kanban board which is publicly visible at the GitLab project site:
[https://gitlab.com/leonstyhre/emulationstation-de/-/boards ](https://gitlab.com/leonstyhre/emulationstation-de/-/boards )
2021-05-02 12:19:29 +00:00
Development takes place in the `master` branch, and bug fixes/point releases are handled in the `stable` branch.
Only the latest stable version is maintained.
2021-04-07 17:48:52 +00:00
You can contact me (Leon) via email, either at info@es-de.org or alternatively using the address I use for my code commits.
2020-11-18 20:06:55 +00:00
### High level release plan
2020-07-11 15:54:30 +00:00
2020-11-18 20:06:55 +00:00
This plan is under constant review so expect it to change from time to time. Still it should give some feeling for which direction to move and what to work on first. These are only the larger topics, there are of course many smaller changes and improvements in addition to these.
2020-11-19 16:16:23 +00:00
#### v1.1
2020-11-18 20:06:55 +00:00
* Mix image generation based on screenshots, 3D boxes and marquee files (as in Skyscraper)
* Ability to show game media in full screen from the gamelist view
2021-06-08 19:36:06 +00:00
* Proper game launching screen
2021-03-02 16:28:35 +00:00
* Replace libVLC with FFmpeg
2020-12-14 16:20:09 +00:00
* Move to the SDL2 GameController API
2021-06-08 19:36:06 +00:00
* Different button graphics and names applied depending on controller type (Xbox, PlayStation and SNES style)
2021-04-03 14:57:16 +00:00
* Add to Linux repositories, BSD ports collections etc.
2020-11-18 20:06:55 +00:00
2020-11-19 16:16:23 +00:00
#### v1.2
2020-11-18 20:06:55 +00:00
2021-06-08 19:36:06 +00:00
* Support for Raspberry Pi 4 with OpenGL 2.1 (Ubuntu and Raspberry Pi OS)
* Improve full-screen support, remove the temporary full screen hacks
2020-12-26 15:22:33 +00:00
* Badges highlighting things like favorite games, completed games etc. (will require theme support)
2020-12-14 16:20:09 +00:00
* On-screen keyboard
* Web proxy support for the scraper
* Add GLM library dependency for matrix and vector operations, decommissioning the built-in functions
#### v1.3
2021-06-08 19:36:06 +00:00
* Localization/multi-language support
* Checksum support for the scraper to verify each file before accepting/saving it
2020-11-18 20:06:55 +00:00
* Complete overhaul of the grid view style
* A nice and useful grid view implementation in rbsimple-DE
2020-12-30 22:23:30 +00:00
* Improved text and font functions, e.g. faster and cleaner line wrapping
2020-12-14 16:20:09 +00:00
* Flatpak and Snap support on Linux
#### v1.4
2020-11-18 20:06:55 +00:00
* Authoring tools to clean up orphaned gamelist entries, media files etc.
2021-06-16 18:01:07 +00:00
* Support for pre-defined alternative emulators and cores (configured in es_systems.xml)
2020-12-14 16:20:09 +00:00
* Simple file browsing component
2020-11-18 20:06:55 +00:00
* Add 'time played' counter per game, similar to how it works in Steam
2020-12-14 16:20:09 +00:00
* Preload all built-in resources and never clear them from the cache
* Improved multi-threading
#### v1.5
2021-03-02 16:28:35 +00:00
* Bulk metadata editor
2020-12-14 16:20:09 +00:00
* Overhaul of the GUI element scaling and placement logic to make ES-DE look more consistent across different resolutions
2020-11-18 20:06:55 +00:00
* Scrollbars for menus and gamelists
2021-06-08 19:36:06 +00:00
* Improve the performance of the GLSL shader code
2020-12-14 16:20:09 +00:00
* Animated menu elements like switches, tick boxes, smooth scrolling etc.
* Support for additional scraper services (if feasible?)
2020-11-18 20:06:55 +00:00
2020-11-19 16:16:23 +00:00
#### v2.0
2020-11-18 20:06:55 +00:00
* Vulkan renderer for all supported operating systems
* Dependency on MoltenVK to get Metal support on macOS
2020-12-14 16:20:09 +00:00
* Decommission of the OpenGL 2.1 and OpenGL ES renderers (or keep as legacy mode/legacy build?)
2020-11-18 20:06:55 +00:00
* Better and more accurate GPU and memory usage statistics overlay
2020-12-14 16:20:09 +00:00
#### v2.1
2020-11-18 20:06:55 +00:00
* Migration tools for importing game metadata and media from other front-end applications
* Auto-import tools for Steam, Lutris etc.
2021-01-03 10:56:15 +00:00
To see which features have been implemented in previous versions, please refer to [CHANGELOG.md ](CHANGELOG.md ).
2020-07-11 15:54:30 +00:00
2020-12-30 22:23:30 +00:00
### Coding style
2020-07-11 15:54:30 +00:00
2020-12-26 15:22:33 +00:00
The coding style for ES-DE is mostly a combination of the Linux kernel style (although that's C it's close enough to C++ as far as I'm concerned) and Google's C++ guidelines.
2020-07-11 15:54:30 +00:00
Please refer to these documents here:
2020-06-14 10:55:31 +00:00
2020-06-15 15:45:53 +00:00
https://www.kernel.org/doc/html/v4.10/process/coding-style.html \
2020-07-11 15:54:30 +00:00
https://google.github.io/styleguide/cppguide.html
2020-06-14 10:55:31 +00:00
2020-07-11 15:54:30 +00:00
**Some key points:**
2020-06-14 10:55:31 +00:00
* Column width (line length) is 100 characters
2020-08-23 09:35:02 +00:00
* Indentation is 4 spaces, don't use tabs as they can be interpreted differently
2020-06-15 15:45:53 +00:00
* Line break is Unix-style (line feed only, no carriage return)
2020-06-15 20:14:41 +00:00
* Do not leave trailing whitespaces at the end of the lines (a good source code editor should have a setting to automatically trim these for you)
2020-06-21 12:25:28 +00:00
* When breaking up long lines into multiple lines, consider what could be useful data to grep for so you don't break in the middle of such a string
2020-12-26 15:22:33 +00:00
* Comments always in C++ style, i.e. `//` instead of `/* */`
2020-06-14 10:55:31 +00:00
* Comments should be proper sentences, starting with a capital letter and ending with a dot
2020-12-26 15:22:33 +00:00
* Use K& R placements of braces, read the Linux kernel coding style document for clarifications
2020-06-15 15:45:53 +00:00
* Always use spaces between keywords and opening brackets, i.e. `if ()` , `for ()` , `while ()` etc.
2020-07-14 17:16:21 +00:00
* Indentation of switch/case statements is optional, but it's usually easier to read the code with indentations in place
2020-08-30 20:25:38 +00:00
* Use `std::string` or `std::vector<char>` instead of `char *` or `char []` unless there is a specific reason requiring the latter
2020-08-23 09:35:02 +00:00
* Actually, try to use C++ syntax in general instead of C syntax, another example would be `static_cast<int>(someFloatVariable)` instead of `(int)someFloatVariable`
2020-06-15 15:45:53 +00:00
* If the arguments (and initializer list) for a function or class exceeds 4 items, arrange them vertically to make the code easier to read
* Always declare one variable per line, never combine multiple declarations of the same type
2020-12-26 15:22:33 +00:00
* Name local variables with the first word in small letters and the proceeding words starting with capital letters, e.g. `myExampleVariable`
* Name member variables starting with an `m` such as `mMyMemberVariable` and name static variables with an `s` such as `sMyStaticVariable`
* Use the same naming convention for functions as for local variables, e.g. `someFunction()`
2021-03-22 17:27:59 +00:00
* Single-line function definitions are fine to put in the header files, but if it's more than one line, place it in the corresponding .cpp file
2020-06-23 18:07:00 +00:00
* Inline functions makes perfect sense to use, but don't overdo it by using them for functions that won't be called very frequently
2020-12-26 15:22:33 +00:00
* Don't put more than one statement on a single line (there are some exceptions though like lambda expressions and possibly switch statements)
2020-06-15 15:45:53 +00:00
* Avoid overoptimizations, especially if it sacrifices readability, makes the code hard to expand on or is error prone
* For the rest, check the code and have fun! :)
2013-11-12 23:28:15 +00:00
2020-12-30 22:23:30 +00:00
### Building and configuring
2013-11-12 23:28:15 +00:00
2020-12-26 15:22:33 +00:00
Please refer to [INSTALL.md ](INSTALL.md ) for details on everything related to building ES-DE.