Idea List for Google Summer of Code

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

Mentors for 2022

Name Role Contact
bb Developer bb on IRC, forums
Freagarach Developer Freagarach on IRC, forums

Project Ideas for 2022

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 Mentors
Atlas Rewrite Detail Hard bb ??
Map Generation and Scripting Detail Easy bb ??
BuildingAI improvements Detail Easy bb Freagarach
Expanding test suite Details Easy Freagarach bb
AI Improvements Details Easy / Medium / Hard Freagarach ??

Other projects are available but only upon request.

Projects 2022

Atlas Rewrite

Description

Atlas is the map editor for 0 A.D. Currently, it is part of the core engine and it is build upon a wxWidgets GUI environment. However we did like to change both:

  • Atlas being part of the core engine (and written in cpp), makes it impossible for mods (modifications) to change Atlas. Despite the fact some mods might want of need to do so. Preferably Atlas is designed in such a way that it is usable in combination with most mods.
  • Atlas is the only place in the 0 A.D. codebase using wxWidgets. If we can port Atlas to the GUI system used in the main game, this will allow us to drop the wxWidgets dependency completely.

You are tasked to design and code the Atlas editor in a way implementing the above. All current features should be ported. A project can start with fixing some simple issues in the 0 A.D. GUI (list will be provided by the mentor at the start of the project). This is to familiarize with the 0 A.D. code base and workflow. Secondly, a new design (both visual and code-wise) needs to be made, in close concordance with the mentor. Thirdly, you will create the new editor. Lastly, the documentation of the old editor needs to be updated.

If time permits, new features to the editor can be implemented.

You are strongly encouraged after the project to maintain and develop the editor further.

Required Prerequisites

  • Fluency in JavaScript and basic knowledge of cpp. Knowledge of wxWidgets is not required.
  • Experience in creating GUI's of any kind (webpages also count).

Expected Result

A new moddable map editor written in the custom 0 A.D. GUI which has the basic features of the current Atlas.

As we expect this to be a rather large project, a successful project could encompass just a design and setup of a new editor, with less features.

Advanced Result

Additional features implemented in the editor.

Possible Mentors

bb

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

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 a much more detailed example) 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.

A powerful tool of generating maps, is to load the terrain 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

  • Previous coding experience is not required. Some knowledge of JavaScript will help, but can be obtained during the project.
  • Some gaming experience, preferably in the RTS genre.
  • 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

As a part of the project you will start by looking at the existing maps to familiarize themself with the code base, compared how the maps appear and how they might impact the gameplay. Furthermore, we strongly encourage you to play the game itself and get in touch with experienced players. This will help to gauge how to make a fun map to play.

Depending on your ambitions, skill and availability, you will

  • Implement one or more random / procedural maps for 0 A.D. or a mod and is significantly distinct from existing maps.
  • 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.

The project can vary in size easily by varying the complexity and amount of maps.

Possible Mentors

bb

Helpful Links

BuildingAI improvement

Description

Currently UnitAI manages many of the orders given by players to entities which have motion, choosing what state to enter and what behaviour to execute. There is also BuildingAI, which currently only manages attacking. It would be nice if BuildingAI would also implement a FSM allowing buildings to be controlled more.

Expected Result

A player issuing e.g. an attack order to a building will have that command processed by BuildingAI.

Advanced Result

As noted on the ticket this approach might create a lot of duplicity, it therefore may or may not be desired to use one generic EntityAI processing all orders instead of two separate [Building|Unit]AIs. Due to the proneness of breaking UnitAI behavior this is deemed a more advanced goal.

Required Prerequisites

  • At least basic understanding of JavaScript.
  • The ability to devise a complex structure into smaller more manageable parts.

Possible Mentors

bb

Helpful Links

JS Test improvements

Description

There are currently a number of unit tests in place for the JS components (and globalscripts and helpers). Most of those mock other components at test time. It would be good to have, besides the unit tests, also a number of larger-scale component test, which mock less and thus test more interactions.

Expected Result

Extension of the amount of unit tests and, moreover, an extension of the scope of testing, by introducing (more) component tests.

Required Prerequisites

At least basic understanding of JavaScript. The ability to take a complex structure and divide it into manageable parts.

Possible Mentors

Freagarach (fallback bb)

Helpful Links

AI Improvements

Description

The current AI in Empires Ascendant, PetraAI, is deemed too hard for beginners and too easy for more experienced players. There is quite some room for improvements, both in behaviour and in code quality. Some behavioural improvements can come only after improvements in code quality.

Expected Result

Depending on the interests, one can choose one of the following, or come up with an idea themselves:

  • Extend the difficulties of PetraAI, to make her harder for good players and softer for less experienced ones.
  • Improve the genericity of the AI. Also for mods.

-- Work with goals instead of paths as much as possible. (E.g. "I want to increase my wood income." instead of "I want to train a unit that is a good wood-cutter.".)

Required Prerequisites

The ability to take a complex structure and divide it into manageable parts. Think generic as well as specific.

Possible Mentors

Freagarach

Helpful Links

Old projects

Below you find a list of previously proposed projects. These are not proposed this year. Usually because the project is not relevant anymore (it is already done), or no mentor is available this year. In the latter case, the project can still be done if a suitable mentor is found.

Intelligent Unit Control with Reinforcement Learning

Description

When units currently engage in combat, they follow a simple "death ball" strategy (i.e., they just all charge in and attack together). There is a huge opportunity here for more intelligent behavior such as learning to kite, flank, or use the terrain to your advantage. Given the recent phenomenal successes of reinforcement learning (e.g. AlphaStar), the recent RL interface in 0 A.D., and the availability of algorithm implementations (e.g. RLlib), it seems like a great fit to utilize for intelligent micromanagement!

Expected Result

Creation of a trained RL agent which can micromanage a small group of units. Stretch goals include integrating the RL agent into the existing AI and evaluating generalization across diverse terrain and squad compositions.

Required Prerequisites

Fluency in Python. Experience with machine learning and a background in mathematics is preferred though not required.

Possible Mentors

irishninja (fallback stan)

Helpful Links

Description

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,

  • Better garrison point finding.
  • 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.
  • Knowledge of historical naval warfare.
  • Experience with game (any, not only computer game) development is a plus.

Possible Mentors

bb

Helpful Links

#940 #305

Last modified 2 years ago Last modified on Dec 28, 2021, 8:37:09 AM
Note: See TracWiki for help on using the wiki.