1. Sipho
  2. News

Sipho News

Your Layouts are now in Sipho 0.6.7!

We bring you a new update, featuring Layouts or NPCs designed by our community members. The restrictions for designs were that they can only contain single breed zooids and can not be more "expensive" 150 nutrition. Let's see how that went:

In total 74 Layouts were added. Here's a breakdown for each breed:
  • Advena 21
  • Buginis 17
  • Vagorian 14
  • Saenus Beefuorus 13
  • Cra'Than 9

Our team is sending a huge thank you to Aldwyn, Araylie, DastianZerg, Iztacmizton, LittleSmog, NovaStar987, Salreix Von Otsuu, TIC, TotalBlazing, skipydog, z0mbiesrock. These are our Discord members who have participared in this event and created the new layouts.

These layouts are now available to play with in game in Aquarium mode. In future, we will use them in Campaign levels where applicable. We are really happy how this turned out and are looking forward to hosting more events with different rules. Stay tuned!

Version 0.6.7
  • Pre-initialize procedural growth next growth type
  • Increase potential Leech target count to 16 from 4. Fixes sometims leeches not attaching to things properly
  • Add text-file based credits. Add Community Layout creator names
  • Pre-sort Layout Databse layouts by name
  • Show author in Layout info panel
  • Make the killer's name appear in red
  • Show killer name
  • Set prettier names to all built-in Layouts
  • Add name generator utilities and expand dictionary
  • Allow Sipho names contain apostrophe ' symbol
  • Update dirty serialized asset name
  • Update Layout tests to new Layout serialization layout
  • Add Event Layouts
  • Add mass Layout text file parser
  • Fix invalid Layout text being treated as valid
  • Add Author name and Description fields to Layouts


Sipho updated to 0.6.6! Design contest ends tomorrow!

While busy with new level progression development we have released several small updates over the course of previous weeks. Version 0.6.5 was a small patch-release to solidify improvements for Layout creation and contest. Version 0.6.6 is coming out just now with few bugfixes and an improvement to Layout browser.

By popular demand and something we wanted to do for a while, Layout browser now has three tabs to choose from:
  1. Manually saved - the classic view you're all used to. Layouts saved in Aquarium appear here
  2. Autosaved - we autosave your Campaign Sipho as Layout in this category so you can dig-out builds that were used to beat the game. Sipho is all about creating and we want to save every drop of your creativity. We use this category to spawn NPCs in Freeroam and Aquarium levels - you might have noticed that you're battling former-self!
  3. Built-in - all regular enemy layouts that can be found in the game are in this category. After the Layout creation event ends your entries will be added to this category as well!
Reminder that Layout Design Event ends tomorrow, 4th of May, at 18:30 UTC - read more about the contest here:

Version 0.6.6
  • Move Layout name generator to its own class
  • Add autosaved and built-in Layout category to Layout browser
  • Fix loading game incorrectly if new game has been started in same game session
  • Convert button click confirm sound to ogg
  • Add button click effect reference
  • Fix game end UI not being fully disabled after hiding it
  • Options UI has button sounds now
  • Added an onClick sound
  • Fix shells not disappearing after death


Version 0.6.5
Fix one of Advena built-in layouts containing Cra'than head
Separate Zooid addition logic from Layout Entry addition
Fix slight rotational Layout deformation for first zooid grown which occured when Sipho had angular velocity by always synchronizing Sipho position
Use proper way to instantiate progress consumable

Become an official Sipho designer!

Dear Whirlpool Surfers and Aquarium Caretakers,
Sipho team would like to invite you take an opportunity to design Sipho Layouts and have them immortalized in the game!

We have been expanding underwater world of Sipho and now the time has come to start populating it. The future non-linearly traversable areas are in need of habitant designs for all breeds. Larger Saenus Beefuorus, tiny Advenas and both big and small Buginis, Crat'han and Vagorians - all will be encounterable in future areas. We could and will design many enemy Layouts ourselves, but we would like to ask for your help first and have your creations floating in Sipho world. Forever.

Layouts are data structures we use in Sipho to define what Zooids have been grown where. When you grow a new Spike or a Claw, your Layout is modified to resemble what you have grown. Something like a recipe to grow your Sipho. We can save and use Layouts to define enemies that you encounter in different areas or restore your Sipho when loading the game. Manual Layout management is possible through Aquarium game mode and that's where we will ask you to create your event entries.
How to enter:
  • Using latest version of Sipho and Aquarium mode take a screenshot of Layout you would like to submit. Feel free to modify the environment keeping Layout clearly distinguishable
  • Upload the screenshot to our Discord server's #event-entries channel with following formatting:
    **Name:** Name of the layout
    **Author:** Optional author name. Leave it out if you want to remain anonymous
    **Value:** Layout value - shown at the top of Growth mode
    **Description:** Optional Layout description
    **Layout data:** || layout data ||
  • In Aquarium, export the Layout text data as shown in picture below and paste it on layout data. Please keep data between double || marks so it remains spoilered. If Layout data is too long, submit the entry without it and upload layout data as a text file in following message.

Congratulations, you have submitted your Layout! We are looking for as many Layout designs as possible, however we keep our rights to reject some by our judgement or incompatible requirements:
[h2]Layout requirements:[/h2]
  • Layout should not mix breeds or contain breedless Zooids. For example: Advena layout can contain Spikes and Zenoplates, but not Claws (mixing breeds) or Swarmers (breedless zooid). For this event we want only pure-breeds to fill basic environments.
  • Layout value should be under 150 nutrition. You can see current Layout nutrition value at the top of Growth screen, under the Sipho name.
  • Layout should be created using Growth mode of latest available version and should contain valid positions and rotations
  • Layout should be created by you or the author rights have been passed to you by the original author
  • Layout should not be already in game or already be a valid submission prior to yours

Once the event ends we will go through all submissions. Submissions that pass the requirement criteria will be added to the game. And we will also credit you, the author, in the game!

Version 0.6.4 and Layout improvements!

Hi all!
In this update we took a big step towards stability and validity of what we call Layouts. They are data structures that hold information of what Zooids and where they are grown. You might have seen us call them Blueprints too - coders in our team love playing Factorio and that's where from the term initially came. Once we added Aquarium and Layout sharing we wanted to go towards something a bit less technical and we came up with the term "Layout".

When we first coded layouts we wanted to have an easy way to store Sipho templates which could be later used for defining enemies. We would take a snapshot of current player Sipho Zooid positions and save them to a file. If we did that carefully, no position deformations would be stored. We could also later retouch those layouts by hand if we wanted to have Zooids in unusual positions or fix slight offsets that were captured. This wasn't ideal, but it worked for that time being.

Later on, we had to add saving system and save your being-played Layout to not lose it. This was important because one of the cornerstone aspects of this game is player creativity and our task to foster it. It feels very punishing to spend several minutes in Growth mode and then later find part of your Sipho cut-off and destroyed never to recover. That's why we implemented automatic Zooid regrowing.

Then Aquarium came and we allowed manually saving your Layouts. Even though Layout sharing is possible right now through text strings, we didn't pay much attention to validity of saved Layouts as they would mainly be used "for your own purposes" and if they were clean enough for you, we were happy too. Layouts could still be deformed due to physics and saved Zooid neighbours didn't matter much as we re-collected them when growing back from Layout. We did, however, try to fully undeform Sipho when entering Growth mode to preserve somewhat correct Zooid positions when re-capturing Layout. Potentially we might not even need to undeform in the future if we fully transition to Layout-based Growth.

With introduction of Buffer Zooids like Greaser and others importance of connectivity to neighbours was highly escalated. Wanting to buff certain Zooids with Buffer Zooids and seeing them regrow differently was not what we wanted to have as experience - growth should be deterministic and have the same results every time. That didn't come without fun little exploits where it would be possible to attach up to 6 Buffers to the same Zooid and cause some real ruckus.

This update finally addresses major inconsistencies in Layout creation:
  • Zooid removal by ungrowing does not re-capture all existing Zooid positions, but rather removes ungrown Zooids directly from Layout
  • Growing a new Zooid while there are dead Zooid ghosts no longer re-captures whole Layout - dead Zooid ghosts are removed in the same way as ungrown Zooids
  • Repositioning Zooids no longer re-captures whole Layout - repositioned Zooids are removed and re-added cleanly. However we don't re-use "clean" repositioned Zooid data after they are re-added - we re-capture moved Zooid positions. We will fix that in later updates if it deems necessary.
  • Grown Zooids have their neighbour Zooids set according to what has been store in Layout - neighbours are no longer re-generated when re-growing and are always kept the same. Previously we would just discard neighbour data saved in Layouts.
  • Head Zooids are no longer slightly larger than structure Zooids - we had to have slight margins for growing Zooids initially when Growth code wasn't as mature as it is now

All of your existing Layouts will be upgraded to re-gather neighbours according to saved Zooid position and rotation. Invalid Zooids will remain in Layouts but will be ungrowable - they will appear as Zooid ghosts and will help to fix invalid Layouts.
Now that Layouts are almost independent of your Sipho deformations and can be fully trusted to be valid we will be hosting Layout creation contests to populate upcoming depths.


This huge undertaking was made easier with making use of testing discipline. I have personally noticed that some things require quite a lot of mental power to get started worked on each day - math heavy code, complex code hierarchies, data manipulation. After spending several evenings just to get started on modifying Layout code I decided to write some basic tests to have confidence in different parts of code. With that confidence it was then easier to work on other parts which seemed to be incorrect or harder to test. Now each time I notice that something will require some time to work out how it works or if I catch myself wiring debug messages just to test I consider writing a test instead. That is why you might notice terms "test" in future changelogs. We had tests before, but just now I encountered their real usefulness for existing code. Check'em:
Version 0.6.4
  • Add ThreatsLayerMask which is used to determine threats that can be pushed away
  • Kill Windows 64 bit standalone when quitting to work around freeze on quit
  • Unpause game when selecting Play Again after beating last boss
  • Increase epsilon of layout growth point generation
  • Adapt all breed zooids when unlocking a breed
  • Track kill point deficit and consume food if there is deficit
  • Fix deadlock when diving while spawners have chunks to update
  • Stop spawners from spawning new chunks after level transition has been initiated
  • Reset rotation bias of Zooid button so it's not inherited by other zooids
  • Do not recalculate zooid positions when growing from Layout
  • Mark Layout statistics dirty when removing zooids
  • Make Sipho head size match structure size
  • Upgrade layouts that have become invalid after Layout upgrade
  • Upgrade built-in layouts
  • Only add lower neighbor indexes to layout of grown zooids to avoid duplication
  • Add several built-in layouts
  • Tests for Layout importer
  • Use layout importer to load layouts for Layout Database
  • Move Layout version definition to Layout class
  • Remove ReadOnly flag from Layouts
  • Handle non-existing zooids when upgrading Layouts
  • Find upgraded layout zooid neighbors anew
  • Save Layouts in pretty format
  • Add GetAllBlueprints to growth utils and write tests for it
  • Add some upgrader tests
  • Add version to Layouts and upgrade accordingly
  • Upgrade Layout when importing from string
  • Add Layout upgrader tests
  • Ensure saved layout zooids are not referencing themselves as their neighbours
  • Fix head growth position on layout change
  • When copying layout, copy entry neighbors too - fixes layouts not being fully copied and causing corruption of unrelated layouts
  • Clear Sipho when setting layout and other fixes
  • Refactor Growth layout setting to require calling explicit method
  • Various debug things
  • Do not recreate Sipho layout when ungrowing or moving zooids
  • Add more layout tests
  • Start working on selecting a random environment for the next levels
  • Do a complete spin180 on the level loading logic and keep most of it inside GameSceneManager and use the Initialize methods to properly setup the area selectors
  • Remove the no longer used initial area from IAreaSelector
  • Tweak the loading order of campaign scenes - campaign logic promts the loading of the first area
  • Add Empty Layout Editor tests
  • CampaignLinearAreaSelector now checks with CampaignLogic on whether we're running the tutorial and chooses the next level according to that
  • Move Level logic to CampaignLogic from GameStateManager and tweak how the next level is chosen with the linear area selector


Sipho Update 0.6.3 comes in!

We are back to regular two-week update cycle with this 0.6.3 update. Together with tweaks and improvements we are releasing some changes for non-linear level gameplay.

Even though these level loading changes are invisible and should not affect how you play the game they are important for us to release for several reasons:
  • We want to be confident that code in the future will work as it does now by getting it out as soon as possible. In case any bugs have slipped through we will be able to catch them earlier. While we don't expect any bugs, this is a good precaution of not having to deal with them at once which might make the game unplayable for some. Imagine having two entrances to your home and locks of both break at the same time - you would be left out of your house. Otherwise if only one lock breaks, you can still use another entrance while broken one is being fixed.
  • We want to have as little parallel development as possible. In previous updates we have mentioned we are using Source Control which allows having branches and working on features separately from main code. While that is good for big changes as non-linear level loading is, it also creates additional work of maintaining separate branches. And further those branches separate, more maintenance is needed. So in the new system we have replicated old behaviour and merged it into default branch, converging everything back to one point.

With that said, in the changelog you might notice fixes to issues that have not risen in previous version. Those are fixes due to additional changes being merged in. Enjoy!

Version 0.6.3
  • Fix extra zooids being lost as adapted zooid after starting a new game
  • Fix head selection siphos not growing zooids they have been saved with
  • Set swarmer critter layer to projectiles and damage everything they touch
  • Show zooid name above zooid pickup
  • Projectiles no longer block growth
  • Round zooid tooltip values and display zooid cost breakdown in tooltip
  • Provide layout on Aquarium start
  • Add a UI button selection sound
  • Add current layout information at the top in growth mode
  • Update sipho data before clearing layout statistics
  • Always update UI slider text
  • Refactor how Aquarium enemy settings are saved and store all Aquarium Enemy settings
  • Fix UI orb fill being larger than orb itself
  • Instead of reading/writing to gameSave.Level directly, read/write to GameStateManager instead
  • Report how long it took to load layout database
  • Revert accidentally changed poison mine duration to 10
  • Save which zooids are alive and regrow only them on load
  • Change "Quit" to "Save & Quit" so players know the game will be saved
  • Fix skill issues when switching between siphos
  • Upgrade old saved level numbers to new format
  • Set starting nutrition to 15 when not starting Tutorial and set to 5 when starting.
  • Use GameSave.level to track player progress through levels. Always have instance of GameSave even if game has just started
  • Replicate old scene loading functionality through IAreaSelector
  • Add level value to GameSave and don't overwrite it when saving
  • Add IAreaSelector interface
  • More indice cleanup
  • Add Campaign Scene Loader class
  • Remove scene index based area loading. Save environment type so head selection knows what environment to use for preview
  • Rename Aquarium Inventory to Aquarium Logic
  • Move Aquarium logic script to its own folder
  • Make sure Main is the first scene to be loaded
  • Initialize game when Campaign scene is loaded.
  • Move campaign related calls out of scene loading to CampaignLogic script
  • Remove GameSetup and disperse its responsibilities to other classes
  • One reference less to GameSceneManager in HeadSelection
  • Revert GameScenes to original order
  • No need to serialize PlayerSetup in GameSetup
  • Increase max enemy layout wealth selected for all layouts
  • Add cheap bone layouts to builtin layouts
  • Make level 1 bone boss easier to defeat
  • Dynamically select layouts from built-in layouts collection by level value in enemy spawners in all areas
  • Add level 1 bone boss
  • Rename Bone boss scene and assets to reflect level 3
  • Smarter lvl 3 sea boss AI
  • Add circular currents to Sea boss lvl 3 and make spikes float around
  • More accurate skill usages for Sea boss
  • Implement IAreaAffector with Pusher
  • Add distance to line functions to math class
  • Work in progress harder Sea boss AI
  • Add interface to query skill providers of what area they will affect. Implement interface with Claw weapon first
  • Add Sea boss level 3 prototype