Nihal Singh

I like to know things

GSoC Wrap Up

Finally it is time for wrapping up my GSoC project and along with it a highly eventful summer. It has been an amazing experience. I’ve learned a lot over the summer, spending countless days and nights in a row to add new things to this game. The community has been more than helpful. I couldn’t have asked for more.

This wrap up post links to all the work done over the summer. There have been a total of 72 PRs and quite a few independent commits in the new modules I’ve created. With over 19,000 lines of code, this summer has boosted my Github stats to a whole new level.


Final Product

The final product out of my GSoC is a whole new gameplay setting in the world of Terasology. It is a single player gameplay mode called Lost. You take up the role of a player that ends up stranded on a planet with no way left to get back home. Set on an expedition to find signs of life in neighbouring galaxies, you come across several intriguing things that confirm the existence of intelligent life outside your planet. Are you truly lost? Will you ever return home?


To test it out simply follow the below instructions-

Instructions to run Lost:

  1. Download this Omega.
  2. Extract the Omega.
  3. Move the save folder called “Lost” inside omega796/saves to the save directory-
    • in Windows, C:/Users/name/Saved Games/Terasology/
    • in Linux, /home/name/.local/share/terasology/saves/
      Alternatively, you can run the game with the -homedir flag.
    • in Windows, run the game from cmd using a command like: Terasology.x64.exe -homedir or add the -homedir flag to the target field of the shortcut to the exe file.
    • in Linux, modify the script so that it has a -homedir flag at the end, like so: java -Xms128m -Xmx1536m -jar libs/Terasology.jar -homedir
  4. Launch the game using the script or the .exe file.
  5. Select Singleplayer -> Lost and load the saved game.

List of new modules created-


List of repositories contributed to-



List of Pull Requests-

Here is a list of pull requests from the start of GSoC up until now.

+ Click here to view all PRs?
MovingBlocks/Terasology Added setSpawnLocation command
Terasology/AdventureAssets Added MCQ Button Door
MovingBlocks/Terasology Added removeAllWidgets method API UI
MovingBlocks/Terasology Dead players alive-d on join
Terasology/StructureTemplates Consumes AttackEvent for BlockRegions
MovingBlocks/Terasology PlayerDeath event should be sent to character entity
Terasology/Hunger Fix for Hunger related Alive/Death handling
Terasology/Thirst Fix for Thirst related Alive/Death handling
Terasology/AdventureAssets Added NoInteraction component
MovingBlocks/Terasology Checking isHeadless from DisplayDevice
MovingBlocks/Terasology Change ActivationPredicted to consumable event
Terasology/StructureTemplates Consuming ActivationPredicted event
Terasology/Scenario Added Protected Regions and Resizing functionality
Terasology/Projectile MaxDistance check during displacement calculation
Terasology/AdventureAssets Structure Template Integration fixes
Terasology/Books Multiplayer + newline fix
Terasology/AdventureAssets Swinging Blade is multiplayer ready
Terasology/AdventureAssets WipeOut is multiplayer ready
Terasology/AdventureAssets Fixed Fireball Launcher for multiplayer
Terasology/AdventureAssets Door works in multiplayer
Terasology/AdventureAssets Password Door is now multiplayer ready
MovingBlocks/Terasology Added door related events
MovingBlocks/Terasology FloatingTextRenderer accepts multiple \n separated lines
MovingBlocks/Terasology Multiline UIText, enter produces newline
MovingBlocks/Terasology Store DoorRegion prefab as component parameter
Terasology/AdventureAssets Added a UI Screen Password locked Door
MovingBlocks/Terasology Separated spawnLocation calculation from respawnPlayer method
Terasology/AdventureAssets Add the Revival Stone
Terasology/AdventureAssets Moved duplicate methods to utility class
Terasology/AdventureAssets Remember rotation after mining of trap blocks
Terasology/Projectile Revert to old constructor
Terasology/AdventureAssets Added more parameters for Fireball with Structure Template integration
Terasology/Projectile Changed CollisionGroup filter to ALL
Terasology/Projectile Added new event constructor for configurable maxDistance
Terasology/DamagingBlocks Reverted the AliveCharacter check
Terasology/AdventureAssets Added Fireball Launcher
MovingBlocks/Terasology Prevents player entity from being destroyed after death onDamage
Terasology/DamagingBlocks Added Alive Character check
Terasology/AdventureAssets Added Wipeout
Terasology/AdventureAssets Changed trap placement approach to root block
Terasology/AdventureAssets Changed trapPlaceholder block shape and fixed readme
Terasology/StructureTemplates Moved rotation logic
MovingBlocks/Terasology Fixes dumpEntities console command
Terasology/AdventureAssets Added SwingingBlade
Terasology/StructureTemplates Added rotation logic for spawning entities
Terasology/AdventureAssets Add module.txt and gitignore
Terasology/AdvancedBehaviors Added alive character check
Terasology/Pathfinding Added alive character check
Terasology/WildAnimals Added alive character component
Terasology/GooeysQuests Added alive character component
Terasology/Journal Added Recipe and Image paragraph
Terasology/WoodCrafting Moved generators to NeoTTA
Terasology/NeoTTA Moved generators from WoodCrafting
MovingBlocks/Terasology Fixed eye height movement debug command
Terasology/PhysicalStats Fixes missing save component bugs
MovingBlocks/Terasology Do not destroy player entity completely on death
Terasology/Journal Adds different colored entries for Unread Journal entries
Terasology/Pathfinding Fixed intelligent flee
Terasology/AdvancedBehaviors Added intelligent flee
Terasology/Pathfinding Added intelligent flee
Terasology/AdvancedBehaviors Refactor
Terasology/AdvancedBehaviors Added the fleeInProximity package
Terasology/WildAnimals Added a scaredDeer
Terasology/AdvancedBehaviors Added followInProximity package
Terasology/WildAnimals Added a friendlyDeer
Terasology/WildAnimals Moved packages to AdvancedBehaviors** module
Terasology/AdvancedBehaviors Moved packages from WildAnimals** module
Terasology/WildAnimals AttackInProximity- adds hostile-stray behavior switching
Terasology/FunnyBlocks Portals work in multiplayer
Terasology/WildAnimals Added aggressiveDeer
Terasology/WorldlyTooltip Configured with WorldlyTooltipAPI module
MovingBlocks/Terasology Fixes the blocker #2913
Terasology/WorldlyTooltip Added character entity support
MovingBlocks/Terasology BehaviorSystem- use cachedInterpreters
MovingBlocks/Terasology Worldly tooltip addition for character entities
Terasology/WildAnimals Worldly tooltip Integration

What more to look at?

There have been a whole lot of videos I’ve made over the summer. You can have a look at them at my channel.

I have also written a set of blog posts marking the progress I made through the summers. A list of all these can be found under the #GSoC tag here.

What’s next?

Although I have checked off most of my primary targets from the proposal. There are quite a few things that need work on-

  1. Some of the traps like the Swinging Blade work well only in Single Player. This is because the Movement Prediction works quite differently on the server side. The CharacterImpulseEvent triggers differently even with a little lag.
  2. Traps like the Wipe Out, require the player to move constantly along with the surfboard. There have also been instances when a collision is not detected between the player and the surfboard. Again something to deal with the Movement Prediction and Physics engine.
  3. On the Gameplay side, I’ve attempted to make interesting short riddles for the three treasure locations, however they get boring very fast. The player might feel it is too much effort to solve a text based riddle. It can be difficult to strike the right chord while making riddles and clues that are both short, engaging and require the player to think.
  4. The Portal upon construction does nothing yet. Well, it is supposed to take you back to your home planet. But I guess we could display a “Game Over” dialog or somehow bring up the Credits screen.

Some of these might be fixed by a long overdue movement refactoring. With Tyler Thompson’s Scenario module developed alongside in another GSoC project, the Lost module serves as an example of how a gameplay scenario can be made.
With the completion of this GSoC project making adventure assets like locked doors, traps, resurrection statues etc are now a lot more easier. Creation of more such things can probably serve as one of the tougher GCI tasks later.

Wrapping it up

Once again, I would like to thank all my mentors. My primary mentor, Skylar ‘skysom’ Sommers, for replying always within a splitsecond (save for the times when he forgets to hit the Send button :P). Florian ‘flo’ Köberle, who was my secondary but went out of his way and functioned effectively as my primary. I got to learn a lot from flo regarding various aspects about the game. It would have been impossible to complete my project without his aid. Xavier ‘xtariq’ Tariq, who was also my secondary mentor, helped me whenever I needed him. I’d like to specially thank Rasmus ‘cervator’ Praestholm here. Had he not been there that night in October, welcoming me on IRC and helping me set up my codebase, maybe I would have given up, moved on and never have done GSoC in the first place.

All in all, it has been a thrilling summer. By this time I am familiar with a good part of the game’s codebase. I would love to continue contributing, albeit in different capacities. Let’s hope real life doesn’t get in the way too much. Also, GCI is almost here and another storm’s coming!

Here’s a snap from one of the many exciting multiplayer play test sessions-