ES-DE/CONTRIBUTING.md

144 lines
9.4 KiB
Markdown
Raw Normal View History

# EmulationStation Desktop Edition (ES-DE) - Contributing
2020-12-30 22:23:30 +00:00
### Help needed
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.
2022-04-10 18:36:07 +00:00
In addition to the information below about work on ES-DE itself, the project is currently looking for a developer to create a configuration utility for customizing systems (i.e. to avoid having to manually edit XML configuration files). For various reasons this should be a standalone application, and it needs to be cross-platform with support for Windows, macOS and Linux. Get in touch if you would be interested in working on this!
2022-04-16 10:00:27 +00:00
Apart from the above there are basically three areas where help is needed:
2022-01-15 15:24:20 +00:00
* Programming: If you are experienced with developing cross-platform client applications in C++ then ES-DE could be an interesting project! Although the application does not have a huge codebase, it is still fairly complex as it covers many different areas like OpenGL rendering, audio playback, video playback, controller input, network access, XML and JSON parsing etc. To work on the project you need to be able to test your code on Linux, macOS and Windows, but apart from that it should hopefully be fairly straightforward.
2022-04-10 18:36:07 +00:00
* Emulator configuration and testing: As one of the main goals of ES-DE is easy setup, the application needs to ship with all game systems preconfigured. This means that the es_systems.xml files have to be populated with both default and alternative emulators for all supported operating systems. There could also be a need to add additional platforms that ES-DE does not support today. Please refer to [USERGUIDE-DEV.md](USERGUIDE-DEV.md#supported-game-systems) for the current game systems status. You can also review the es_systems.xml files directly: [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).
* Theme creation. With ES-DE v2.0 a new theme engine will be introduced with improved capabilities compared to the current engine. Existing themes would need to be ported over to the new engine, potentially also from other frontends than RetroPie EmulationStation. Completely new themes would also be nice to showcase the new engine.
2022-01-15 15:24:20 +00:00
Another specific area where help is needed is to research and potentially develop a usable web version of ES-DE. A proof of concept compilation to WebAssembly (using Emscripten) has been done and the application actually runs somehow correctly in a browser. But it needs to be investigated whether games/emulators can actually be launched when running in this environment and there are many improvements to be completed before the WebAssembly build is usable.
2022-06-09 18:03:59 +00:00
Merge requests are only accepted from project members so if you would like to contribute to the project then please get in contact and we can discuss what you would like to work on and such.
You can contact me (Leon) via email, either at info@es-de.org or alternatively using the address I use for my code commits. You can also join our [Discord server](https://discord.gg/EVVX4DqWAP) where I go under the username LeonSe.
The ES-DE development is tracked using a Kanban board which is publicly visible at the GitLab project site:
[https://gitlab.com/es-de/emulationstation-de/-/boards](https://gitlab.com/es-de/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-12-12 14:00:36 +00:00
### Release roadmap
The roadmap 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. The plans for previous releases are shown in italics.
#### _v1.0_
* _New gamelist sorting and media handling logic_
* _Overhaul of the menu system_
2021-12-14 17:26:55 +00:00
* _Scraping of additional image types as well as videos_
2021-12-12 14:00:36 +00:00
* _OpenGL shader support for blurred backgrounds, scanline rendering etc._
* _Navigation sound support_
* _A comprehensive theme set bundled with the application_
* _Ports for Windows, macOS and BSD Unix_
2021-12-14 17:26:55 +00:00
* _Preconfigured systems configuration files for all supported operating systems_
2021-12-12 14:00:36 +00:00
* _A detailed user guide_
#### _v1.1_
* _Mix image generation based on screenshots, 3D boxes and marquee files (as in Skyscraper)_
2021-12-14 17:26:55 +00:00
* _Ability to display game media in full screen from the gamelist view_
2021-12-12 14:00:36 +00:00
* _Proper game launching screen_
* _New FFmpeg-based video player_
* _Better method to find installed emulators and cores_
* _Move to the SDL2 GameController API_
2021-12-14 17:26:55 +00:00
* _Different button graphics and names applied depending on controller type (Xbox, PlayStation or SNES style)_
2021-12-12 14:00:36 +00:00
#### _v1.2_
2021-12-27 15:52:21 +00:00
* _Support for pre-defined alternative emulators and cores (configured in es_systems.xml)_
* _Badges highlighting things like favorite games, completed games etc. (will require theme support)_
* _Virtual (on-screen) keyboard_
* _Support for the Raspberry Pi 4 (Raspberry Pi OS)_
* _Improve fullscreen support and make game launching more seamless, remove the temporary fullscreen hacks_
* _Add GLM library dependency for matrix and vector operations, decommission the built-in functions_
* _AppImage and AUR releases on Linux_
2020-12-14 16:20:09 +00:00
2022-02-20 19:01:49 +00:00
#### v2.0 (in progress)
2020-12-14 16:20:09 +00:00
2021-09-17 21:42:43 +00:00
* New theme engine with generalized views (only System and Gamelist) and theme variants support
2022-10-16 11:54:19 +00:00
* Multiple new components (carousel support for the Gamelist view, grid component etc.)
2022-02-20 19:01:49 +00:00
* Lottie animation (vector graphics) and GIF animation support
2022-03-15 18:00:02 +00:00
* OpenGL ES 3.0 renderer for use on the Raspberry Pi
2022-10-16 11:54:19 +00:00
* Replace the OpenGL fixed function pipeline renderer with a shader-based renderer
2022-10-06 21:02:58 +00:00
* Replace NanoSVG with a more capable SVG rendering library
2022-10-10 19:37:39 +00:00
* Improve text and font functions, e.g. dynamic texture allocation and faster and cleaner text wrapping
2022-03-15 18:00:02 +00:00
* Improve the performance of the GLSL shader post-processing
2020-12-14 16:20:09 +00:00
2022-02-20 19:01:49 +00:00
#### v2.1
2020-12-14 16:20:09 +00:00
2022-12-17 18:51:57 +00:00
* Theme engine composite element support for enabling advanced and finely controlled layouts
* Theme engine element animation support (storyboards)
* New texture/cache manager with improved memory management and performance
* Better and more accurate RAM and VRAM usage statistics
* Scraping of game manuals and maps plus a viewer for these (with PDF and raster image support)
* Support for additional scraper services
* RetroAchievements.org integration
2020-12-14 16:20:09 +00:00
2022-02-20 19:01:49 +00:00
#### v2.2
2020-12-14 16:20:09 +00:00
2022-10-02 15:11:18 +00:00
* Theme downloader
2022-06-08 16:01:17 +00:00
* Background music
2022-04-24 20:46:40 +00:00
* Proper audio mixer
2022-12-17 18:51:57 +00:00
* Reorganize the menus, possibly adding basic/advanced modes
* Reduced amount of gamelist reloading to retain cached textures and improve overall performance
* Add "time played" counter per game, similar to how it works in Steam
2022-02-20 19:01:49 +00:00
* Checksum support for the scraper for exact searches and for determining when to overwrite files
2021-07-18 19:26:35 +00:00
* Support for portrait orientation, e.g. for Tate Mode arcade cabinets
2022-10-10 19:37:39 +00:00
* Replace the built-in Unicode functions and lookup tables with those of the ICU library
* Add text kerning support using the HarfBuzz library
2022-02-20 19:01:49 +00:00
#### v2.3
* Vulkan renderer for all supported operating systems
2022-12-17 18:51:57 +00:00
* Use of MoltenVK to get Metal support on macOS
2022-04-24 20:46:40 +00:00
* Localization/multi-language support
2022-01-15 15:24:20 +00:00
* Bulk metadata editor
2022-12-17 18:51:57 +00:00
* Scrollbar component for the gamelist view which can be used by themes
* Simple file browsing component
* Web proxy support for the scraper
2022-01-09 19:40:36 +00:00
* Improve multi-threading
2020-12-14 16:20:09 +00:00
2022-02-20 19:01:49 +00:00
#### v2.4
2020-12-14 16:20:09 +00:00
2022-12-20 19:27:33 +00:00
* Touch screen support
2022-10-02 15:11:18 +00:00
* Animated menu elements like switches and tick boxes
* Migration tools for importing game metadata and media from other frontend applications
2022-01-15 15:24:20 +00:00
* Audit tools to clean up orphaned gamelist entries, media files etc.
* Auto-import tools for Steam, Lutris etc.
2022-10-06 21:02:58 +00:00
* Replace the abandoned FreeImage library
To see which features have been implemented in previous versions, please refer to [CHANGELOG.md](CHANGELOG.md).
2020-12-30 22:23:30 +00:00
### Coding style
2021-07-07 19:02:11 +00:00
The visual appearance aspect of the coding style is automatically applied using clang-format, so to understand the exact formatting rules, refer to the .clang-format file in the root of the repository.
Due to this approach, all code changes must be auto-formatted before they are committed. You can read in [INSTALL.md](INSTALL.md#using-clang-format-for-automatic-code-formatting) how clang-format is installed and used.
2021-07-07 19:02:11 +00:00
But as clang-format won't change the actual code content or fix all code style choices, here are some additional key points:
2021-07-04 19:01:14 +00:00
* Always write comments in C++ style, i.e. `//` instead of `/* */`
* Comments should be proper sentences, starting with a capital letter and ending with a dot
2021-07-04 19:01:14 +00:00
* As a general rule, use C++ syntax instead of C syntax, for example `static_cast<int>(someFloatVariable)` instead of `(int)someFloatVariable`
* Always declare one variable per line, never combine multiple declarations of the same type
2021-07-04 19:01:14 +00:00
* Name member variables starting with an `m` such as `mMyMemberVariable` and name static variables starting with an `s` such as `sMyStaticVariable`
2022-01-16 17:36:59 +00:00
* Use braced initializations when possible, e.g. `float myFloat {1.5f}` as this is generally the safest way to do it (except when using the auto keyword)
2021-07-07 19:02:11 +00:00
* Short function definitions can be placed in either the .h or .cpp file depending on the situation
* Try to be coherent with the existing codebase regarding names, structure etc., it should not be obvious what person wrote which parts
* For the rest, check the code and have fun :)
2020-12-30 22:23:30 +00:00
### Building and configuring
2022-01-15 15:24:20 +00:00
Please refer to [INSTALL.md](INSTALL.md) and [INSTALL-DEV.md](INSTALL-DEV.md) for details on everything related to building ES-DE.