TeraSpotlight: GSOC 2021 Projects

Posted by Skaldarnar, Niruandaleth on June 01, 2021

We are proud to present this year’s student projects for the Google Summer of Code. We are happy to announce that we are supported by five students over the summer. The students will contribute to different areas of our wide ecosystem, ranging from modernizing our web presence over world generation both, in space and on earth, to improvements in various gameplays.

The Terasology Foundation Ecosystem

To give you a better overview where the projects are located in the broad ecosystem of the The Terasology Foundation we’ve prepared this little diagram. You can click on the components to navigate to their respective Github repository. Both of our games, Terasology and Destination: Sol (get it on Steam), albeit being quite different in their setting and aesthetics, share a common technical foundation. You may have heard about our in-house libraries gestalt (module and asset management, entity component system) and TeraNUI (UI framework) from previous TeraSaturday posts. 😉

image/svg+xml cfa true false 25.599999999999998,0 384,502 #CCCCCCFF #000000FF 2| Destination: Sol (the game) #000000FF Sans|900|normal|18px|none|0 1,0 Destination: Sol (the game) cfa true false 27.466666666666665,0 412,500 #CCCCCCFF #000000FF 2| Terasology (the game) #000000FF Sans|900|normal|18px|none|0 1,0 Terasology (the game) cfa true false 20.4,0 306,274 #CCCCCCFF #000000FF 2| Web Presence #000000FF Sans|900|normal|18px|none|0 1,0 Web Presence MovingBlocks/Terasology 224.9199999999999,83.66400000000006 true false true false 112.45999999999995,41.832000000000036 1.5 happy #FFFFFFFF #000000FF 2| engine #000000FF sans-serif|normal|normal|13px|none|0 1,1 engine MovingBlocks/<library> 225,60 true false true false 112.5,30 1.5 happy #FFFFFFFF #000000FF 2| tera-nui #000000FF sans-serif|normal|normal|13px|none|0 1,1 tera-nui 225,60 true false true false 112.5,30 1.5 happy #FFFFFFFF #000000FF 2| gestalt #000000FF sans-serif|normal|normal|13px|none|0 1,1 gestalt Terasology/<module> 227,94.6 true true true false 113.5,47.3 1.5 happy #FFFFFFFF #000000FF 2| module #000000FF sans-serif|normal|normal|13px|none|0 1,1 module 225,60 true false true false 112.5,30 1.5 happy #FFFFFFFF #000000FF 2| joml-ext #000000FF sans-serif|normal|normal|13px|none|0 1,1 joml-ext false false false false false full none center 262.5239648437499,131.7760009765625 263.67596435546875,57.576013183593744 0,87 #000000FF 1| 40,25 #000000FF sans-serif|normal|normal|13px|none|0 0,1 false false false false false full none center 522,140 523,116 0,125 #000000FF 1| 40,25 #000000FF sans-serif|normal|normal|13px|none|0 0,1 false false false false false full none center 965,137 964,115 0,125 #000000FF 1| 40,25 #000000FF sans-serif|normal|normal|13px|none|0 0,1 MovingBlocks/DestSol 224.9199999999999,84.66400000000006 true false true false 112.45999999999995,42.332000000000036 1.5 happy #FFFFFFFF #000000FF 2| engine #000000FF sans-serif|normal|normal|13px|none|0 1,1 engine 227,94.6 true true true false 113.5,47.3 1.5 happy #FFFFFFFF #000000FF 2| module #000000FF sans-serif|normal|normal|13px|none|0 1,1 module false false false false false full none center 870.523995361328,112.7760009765625 876.6759338378906,39.576013183593744 0,87 #000000FF 1| 40,25 #000000FF sans-serif|normal|normal|13px|none|0 0,1 224.9199999999999,96.66400000000006 true false true false 112.45999999999995,48.332000000000036 1.5 happy #FFFFFFFF #000000FF 2| Terasology Launcher #000000FF sans-serif|normal|normal|13px|none|0 1,1 Terasology Launcher 224.9199999999999,60.66400000000006 true false true false 112.45999999999995,30.332000000000036 1.5 happy #FFFFFFFF #000000FF 2| Website ( #000000FF sans-serif|normal|normal|13px|none|0 1,1 Website( 224.9199999999999,60.66400000000006 true false true false 112.45999999999995,30.332000000000036 1.5 happy #FFFFFFFF #000000FF 2| Module Site #000000FF sans-serif|normal|normal|13px|none|0 1,1 Module Site 224.9199999999999,60.66400000000006 true false true false 112.45999999999995,30.332000000000036 1.5 happy #FFFFFFFF #000000FF 2| Adventure Site #000000FF sans-serif|normal|normal|13px|none|0 1,1 Adventure Site Yash Lorxu Meet Alluri Isaiah
The Terasology Foundation ecosystem and areas of contribution for the GSOC projects.

The games also share a similar internal structure, being split into the main engine and modules that can be used for ad-hoc extension. Terasology already makes heavy use of the module concept, and recent GSOC projects aimed to bring this flexibility also to Destination: Sol. By modularizing the world generation of Destination: Sol, Isaiah will be working somewhere between the engine and module space. In a similar position we find Lorxu’s project on world generation for Metal Renegades. While the goal is to improve the world generation of a gameplay template, many of the world generation concepts are still defined in the engine or at the very roots of the module dependency tree. We’ll see him jumping back and forth between these code locations over the summer.

Meet and Alluri have a clearer assignment to module space. Both students will focus on gameplay improvements, cleaning up modules, and establishing best-practice implementations for new features with the entity component system. The two focus areas here are the modules around Light & Shadow (our capture the flag game mode) and Josharias’ Survival (well, you guessed it - our survival game mode).

Beside the games we are developing, there are a couple of side projects worth mentioning. The launcher serves as the entry point to the world of Terasology for players, giving them a simple interface to download, update, and start their game. It is also built in Java, but otherwise shares little code with the main projects.

Finally, our web presence is distributed over a couple of repositories. This includes this website and the linked adventure site to explore contribution paths. While the good ol’ Jekyll-based page has served us well, the web technology whisperers have told us that the time has come for a modernization. We want to take this as an opportunity to make our vast module line-up more accessible to players. Yash will mostly focus on this new module site, but also has the task to migrate all the blog posts and other content from this website over to the new stack.

Read on to learn more about the individual projects!

Alluri Harshit Varma

Quality Improvements for Light & Shadow

Alluri (aka @ahv15) will target quality improvements for “Light & Shadow” in their GSoC project. As a first step, this includes overhauling the module in terms of package structure, code quality, bug fixes and documentation.

Second, they will bring together and extend on existing mechanisms for economy (Economy) and defensive mechanisms (GooeyDefense) to allow for a more immersive gameplay experience than the current race for the flag. This will also lay a basic foundation for future work on minion management in “Light & Shadow”.

Finally, Alluri will leverage the weapons and traps provided by CombatSystem to empower players to actively influence both their team and their opponents. Using similar effects like the GooeyDefense tower effectors, this hopefully turns the current plain race into an exciting fight for the flag.

The project will be mentored by @Niruandaleth and @Skaldarnar.

Weapons, Traps and Defensive Mechanisms for Light & Shadow

Meet Shah

Animal Interaction Improvements in Josharia’s Survival

Meet (aka @meetcshah19) is a second year student working again with Terasology. After overhauling our “Lost” game mode last year, this year they strive to improve animal interaction in “Josharias’ Survival”.

The first part will bring a more pacifist way of collecting wool to craft a nice warm vest: instead of having to kill sheep to get their wool, a new shearing mechanism will be added. The main focus for this is achieving a smooth transition between the two sheep models (unshorn and shorn) in the events of shearing and hair regrowth, providing an immersive user experience using audio and visual feedback as well as proper documentation and testing.

Unshorn and shorn sheep

The rest of the project will focus on improving spawning animals such that in addition to spawning when chunks are loaded, both, deer and sheep, can also spawn over time in already loaded chunks. Furthermore, Meet will improve the Fences module to allow for properly flocking sheep and add behavior that will make sheep follow food, allowing players to lure them.

The project will be mentored by @Niruandaleth and @keturn, with additional support from @casals and last year’s student @ktksan.


Distinct Terrain Features for Metal Renegades

Metal Renegades is meant to feel like an immersive Old West-style world. Right now, it’s just a desert, with some mountains made out of sand. @Lorxu (aka @tolziplohu) proposed to expand that with more interesting terrain typical of the Old West: mesas where rock around a plateau has eroded away, canyons where rivers have cut deep into the rock, mountains made of rock instead of sand, and more. A “small proof of concept” in shadertoy looks already promising. The implementation in Terasology should look somewhat better, using actual multi-octave simplex noise 👨‍🏫.

Additionally, the project covers the creation of a realistic distribution of flora and fauna. On one hand, the terrain generation should be fairly realistic and follow principles of real-life geology. On the other hand, it needs to look nice and work well on the scale of actual gameplay (so features should generally be fairly small, so you can see them all) and be performant in an infinite world (so something like simulating erosion directly wouldn’t work).

The project will be mentored by @Skaldarnar and @keturn, with additional support from @Suhas (aka @agent-q1).

Yash Patel

Migrate Web Presence to new Module Site

Yash (aka @ryuk156) will be working on migrating our current web (splash) site to the module site originally started by @majordwarf two years ago. The first part of their project will target the pipeline for collecting module data for generating module documentation for the module site based on the previous work done by @majordwarf. In addition to that, the module site build and deployment pipeline needs to be revisited to update and properly integrate it into the development processes of Terasology and the module site. Documenting both pipelines for our fellow contributors shall make it easy for interested parties to join the effort in the future.

Exemplary module overview on the module site

The second part of Yash’s project will entail re-designing and improving the module site. Amongst others, improving blog and module search, user experience and overhauling the gallery will be items to work on. Furthermore, as a special goodie for current and future blog post authors, Yash will work on automated preview image generation especially for our recurring blog post series “TeraSaturday” and “TeraSpotlight”. The idea for this is to leverage in-game screenshots for the gallery, but also for blog post preview images, by adding a text overlay based on the blog post tag and number.

The final part of the migration project will be the actual migration of the current website’s contents into the module site. With everything in place, can be adjusted to show the module site instead of our current website.

The project will be mentored by @majordwarf and @Michael P, with additional support from @Niruandaleth and @Cervator.

Isaiah Blanks

Destination: Sol World-Gen Modularization

Isaiah (aka @IsaiahBlanks) aims to create a modular framework for world generation in Destination: Sol. The main motivation behind this project is to allow more flexibility in the way the world can be generated. Instead of the current system which has very few options for world generation, Isaiah’s work will lay the foundation for a system which can support many options.

The new world-gen system will consist of a WorldBuilder class which will be able to initialize various types of Generator classes. These Generator classes will represent the various different entities that make up the Destination: Sol world: solar systems, planets, and mazes.

The generators will be implementations of abstract classes, such as PlanetGenerator for planets or SolSystemGenerator for solar systems. In addition, there will be specific implementations of these classes, like DefaultSolSystemGenerator or DefaultPlanetGenerator.

This will serve as the foundation for more interesting generators, allowing for behaviors like DesertPlanetGenerator or WaterPlanetGenerator etc.

With this project, I hope to add a lot of flair to the way world generation is done in Destination: Sol.

Look forward to the ability to implement custom SolSystems, Planets, and Mazes!

The project will be mentored by @Michael P and @Cervator, with additional support from last year’s student @Nicholas Bates.

Planned world generation flow for Destination: Sol.