Version 12 (modified by Itms, 5 years ago) ( diff )

Changes from internal discussions

Idea List for Google Summer of Code 2019

Future students, welcome! On this page, you will find the project ideas we propose for the 2019 edition.

Mentors for 2019

Name Role Contact
Itms Project leader, Developer Itms on IRC, forums, Phabricator
elexis Developer forums, Phabricator
FeXoR Developer FeXoR on IRC, forums, Phabricator
Vlad Graphics Developer vladislavbelov on IRC, forums, Phabricator

Project Ideas for 2019

These projects have been specially prepared for you and should bring you the best experience, so we strongly recommend you to take a look at them.

Feature Relevant link(s) Difficulty Mentors Fallback Mentor
Continuous Integration Detail Easy Itms elexis
Map Generation and Scripting Detail Easy elexis and FeXoR Itms

Extra Ideas

The following ideas are taken from previous years and are possible to take, but they are not fully tailored for this edition. For those ideas, we have one possible mentor, but usually no second mentor nor fallback mentor. The scope of the project would have to be refined with the student to avoid any issue down the line.

Feature Relevant link(s) Difficulty Mentor
Short / Vertex Pathfinder Rewrite Detail #1942 Hard Itms
Improved Threading Detail #4324 Medium Itms
Terrain texture blending Detail #45 #4219 Easy vladislavbelov

If you want to propose your own projects, feel free to browse the GameplayFeatureStatus, GraphicsFeatureStatus and GamePerformance pages to find ideas.

Projects

Continuous Integration Improvements

Description

Continuous Integration aims at detecting bugs before they are committed. Even if some flaws can only be detected through a review performed by an experienced developer, a lot of issues such as crashes can be detected automatically. Additionally, platform-dependent issues cost a lot of time to be tested manually, and we would benefit from testing all patches on all supported platforms.

Patches on Phabricator are built and tested through our Jenkins instance. However, we could do a lot more with this system. It would be necessary to test patches on Windows and with clang. Other possible improvements include:

  • adding macOS testing with Travis/CircleCI
  • adding continuous integration on our translations
  • running automated profiling on the game using the AI
  • extending the linter so that small typos can be automatically fixed
  • and much more. See the tentative list linked below for extra ideas about things that could be automatically tested.

The student would propose modifications to the build system scripts and to the Jenkins configuration. Those modifications will be reviewed by the mentor and immediately applied to the build system, in order to test them against actual patches from contributors.

The student will be encouraged to install a Jenkins instance locally for all tests, but the mentor can provide a test instance if needed.

Expected Result

Robust continuous integration which allows the development team to be confident when committing patches. At least: consistent testing with MSVC, gcc and clang. We can discuss a bigger main task to complete depending on the student's tastes and skills.

Possible extra tasks

If the student meets all expectations early and has interest in DevOps infrastructure, they could propose improvements to the virtual machines which act as build slaves for Jenkins.

Required Prerequisites

Knowledge in the CI/CD and DevOps areas, familiarity with C++ build systems. Experience with Jenkins would be greatly appreciated.

Mentors

Itms

This old tentative list
Our Jenkins instance

Map Generation and Scripting

Description

  • Maps play a key role in providing an intriguing 0 A.D. experience to the player.
  • Their topography, distinct biomes and peculiarities challenge the player to discover the environment and take it into account when planning the strategies for the match.
  • Since tens of thousands of players are downloading and playing 0 A.D. in the multiplayer lobby, there is a never ending demand for good and unique 0 A.D. map experiences and you can help to satisfy that.
  • New developments and new map design precedents can help to shape how 0 A.D. campaigns will be implemented.

Technical Details

  • Map types: Maps in 0 A.D. or the pyrogenesis engine are either made by hand in the Map Editor ("scenario maps" or "skirmish maps"), or they are created using a procedure written in JavaScript code ("random maps"). While the Map Editor allows easy creation of maps, procedurally generated maps adapt to the player(s) settings, including mapsize, the number of participating players and map specific parameters, such as biome; and thus allow the player to play this map thousands of times without encountering the same mapgeneration twice.
  • Procedural map generation is simple! You may take a look at the maps/random/ directory of the 0 A.D. source to get an impression of example maps (for example mainland.js for the most simple map and "jebel_barkal.js" for the most detailed) and the available library functions (for example the createArea and createObjectGroups approach)).
  • Apart from map generation, code can also be written to trigger events and interact with the simulation during the course of the game. There is a lot of room for creativity here, but it requires some involvement of the simulation system and possibly the GUI to integrate new mapscripts. For example on "Survival of the Fittest", "Danubius", "Jebel Barkal" and "Polar Sea", attackers will be spawned in repeated intervals. In the Tutorial, the player has to follow the orders displayed in a GUI panel.
  • Historic examples of new map generation technologies that are limited in scope but powerful tools are the load of a preset heightmap image or mapeditor terrain in a procedural map (for example "Hellas" which loads a random part of greece every map generation, or "Lower Nubia", "Jebel Barkal" that load a fixed ".png" image or Atlas terrain ".pmp" file).

Required Prerequisites

  • You have programmed before, know how to locate relevant pieces of code by (for example by doing plaintext searches).
  • You are familiar with JavaScript or able to learn and adapt to the language.
  • You have seen enough code duplication and chaotic or "spaghetti" code to know why and how to reverse instead of worsen related problems.
  • You have looked at a dozen of maps or more in the map editor or on screenshots, compared how they appear and how they might impact the gameplay.
  • You have played or observed some or many 0 A.D. matches and started or succeeded to understand the mechanisms of the game.
  • You want to push the boundaries of what map making can deliver to 0 A.D. fans and do something noone has done before for the game.

Expected Result

Depending on your ambitions, skill and avilability, you will

  • Implement one or more random / procedural maps for 0 A.D. or a mod and is significantly distinct from existing levels.
  • Provide map uniqueness by either working very creatively within the existing technical means, or by implementing one or more, new technical methods for map generation or scripting.

Mentors

elexis and FeXoR

Helpful Links

Short / Vertex Pathfinder Rewrite

Description

The current short-range pathfinder in 0 A.D. is one of our greatest bottlenecks and needs to be re-written to work with the new long range pathfinder and our formation system.
This potentially means finding novel ways of short-term pathfinding, such as crowd movements. Work is already ongoing in that direction, so this area is subject to a lot of cross-team talk.

Expected Result

New short-range pathfinder which fits with 0 A.D.'s gameplay and is at least 4 times faster.

Required Prerequisites

Fluency in C++, familiarity with pathfinding systems, and experience in C++ optimization.

Helpful Links

Ticket #1942

Better Threading

Description

Right now 0 A.D. has a number of minor threads, but all the major calculations are run in the main thread. We would like to see some of the more intensive loads split into their own threads so as to take better advantage of modern multicore processors. Potential processes to be split out would be the Range Manager, Renderer, or AI (it would be awesome if each AI could get its own thread).

Expected Result

At least one major computational load being isolated into its own thread.

Required Prerequisites

Fluency in C++ and experience using pthreads. (Familiarity with SpiderMonkey and JavaScript may also be required depending on the component)

Helpful Links

?

Details

As of now, naval battles in 0 A.D. are at best confusion because naval units generally try to behave exactly like land units. Some things which could help with this would be,

  • Smart/realistic boat movement (so that the boat obstruction sizes can be increased to actually match the model size without horrible movement behavior)
  • Better battle animation (like make the ram attack actually visible)

This area is open to suggestions, so any good idea goes.

Expected Result

Improved gameplay experience in naval combat.

Required Prerequisites

Fluency in JavaScript and at least basic C++ experience. Experience with game (any, not only computer game) development is a plus.

Helpful Links

#940 #305

Improve Terrain texture blending

Details

This is sort of a subset of the rendering improvement. The terrain texture blending in 0 A.D. is imperfect: it can only blend two textures together, using alpha maps, over one tile only; this leads to uglyness, notably in random maps. Rewriting this system could lay groundwork for other improvements and could significantly improve the look of the game.

Expected Result

Terrain blending should probably support an arbitrary number of textures (or at least several), and should look prettier and be more customizable (both for smoother or less smooth transitions).

Required Prerequisites

Experience with C++, OpenGL, and graphics programming in general would help.

Helpful Links

#4219 #45

Note: See TracWiki for help on using the wiki.