Sipho - spin


Grab a pen or just open up MS Paint, sketch your crazy idea for a creature part, and then share it with us. Best idea will be remade by our artist and put inside our game Sipho.

You don't have to be a professional artist to participate in this event. A basic doodle on a napkin is enough for us to make it into a proper game asset. Anyone can participate. Although if you haven't played Sipho before, be sure to check videos or screenshots to get familiar with its world and creatures.

Basic guidelines:
  • Must fit inside a circle, but doesn't have to fill it all up
  • Fitting to Sipho's world- organic elements that are influenced by real world.
  • Shooting, moving, or mind control- write down what it does. Even better if you can draw it
  • Halloween themed- spikes, fangs, exposed internal parts. Make it creepy
  • Post it on Sipho's Artwork section. If you can't post it there, leave a comment with a link here or post it on our Discord
  • Have fun!

Our team will pick the best one right after the end of this event.
Top three artists will also receive a Sipho Steam key!

The contest has ended.
Check out the winner here!

Sipho - Dominas
Greetings Siphonophore overlords!

While working on controller support we have fixed several issues and made some improvements to the game - both performance and visual. Each fix is listed in the changedlog of Version 0.5.2 below!

As development goes on, we want to bring an additional Sipho version - a special Controller-support enhanced build which includes more drastic changes to allow full utilisation of controllers. We are not ready to publish these changes to everyone who has not deliberately opted-in so we decided to publish that in a beta branch in steam. You can opt-in for controller-support build in Sipho properties in your Steam library:

Currently ungrowing and repositioning zooids is not possible using controller. We will be fixing that and improving usability in future updates. Let us know what you think about playing the game with a controller!

Version 0.5.2
  • Fix extra zooid selection throwing errors when navigated with input keys while there are no extra zooids
  • Report when poolable is destroyed because due to not having an original
  • Fix Spike Zooid background not being pooled properly
  • Fix nutrition icon in Aquarium enemy spawn menu
  • Add flashes to powerup pickup effects and fix their colors
  • Properly re-select UI elements. Fixes Aquarium elements not being highlit when re-entering Aquarium mode
  • Fix Aquarium sounds being paused in Aquarium
  • Add sanity check for Greaser Renderer Cloner erroring out
  • Handle loading more defined inputs than we know about
  • Cache postprocessing values which otherwise allocate GC memory
  • Improve performance in Aquarium - prevent UI from rebuilding itself each frame
  • Do not recreate all Zooid buttons on every structure change
  • Unparent zooid connectors when zooids are about to be destroyed. This prevents connectors from being destroyed
  • Set icon of enemy size Aquarium option
  • Fix camera jumping around when switching between Growth and Aquarium modes
  • Do not update lost zooid ghosts while not in growth mode
  • Only create/remove changed zooid overlays instead of all and on every structure change
  • Only mutate enemy inventories if the queen has been defeated

0.5.2 + Controller Support
  • Forgot to add outline sprite
  • Add selection outline to skill UI
  • Reset navigation state when popping ZooidInfoAndUngrow
  • Change and add new keys for doing growth things. You can now edit skills with keyboard/gamepad
  • Fix extra zooid selection throwing errors when navigated with input keys while there are no extra zooids
  • Report when poolable is destroyed because it didn't have an original
  • Fix Spike Zooid background not being pooled properly
  • Fix nutrition icon in Aquarium enemy spawn menu
  • Add flashes to powerup pickup effects and fix their colors
  • Properly re-select UI elements. Fixes Aquarium elements not being highlit when re-entering Aquarium mode
  • Make gamepad twinstick less twitchy
  • If you're using a gamepad, you will get gamepad bindings for skills
  • There is no longer a dedicated button for switching movement on the gamepad. Use the settings menu instead
  • InputManager GetAxis now takes into account the deadzone
  • Legit twinstick support for gamepads
  • Aquarium spawning with controller
  • Do not constantly select deselected object
  • Fix Layout browser not showing entries
  • Stop trying to grow when you run out of nutrition for the selected zooid
  • Update growth points if the target zooid changes
  • This fixes the bug where the ghost would stay in the corner until you moved the mouse
  • GrowZooid more directly controls when to override the mouse position for drawing ghosts
  • Make Aquarium Spawn logic use UIModule stack
  • Aquarium toggled with north button, menus navigated with shoulder buttons
  • UIModule driven Aquarium activation
  • Assert that we don't unpause game more times than we pause
  • Close Layout Browser when pressing cancel button
  • Tooltips follow their targets instead of attaching to a static position
  • Don't use the singleton if we can help it
  • Add IAddRemoveHandler interface and use if to indicate when a UI module is being pushed or popped instead of doing a weird bool
  • Show player aquarium menu only when base growth module is active
  • Deactivate module after popping
  • Quit Growth module immidiately after growth is toggled - otherwise other modules get pushed to stack
  • Make layout browser work with UI stack
  • [Experimental] restore selected UI element after mouse click
  • Fix null ref exception when exiting play mode with growth mode open
  • Fix mouse tooltips also being toggled by the tooltip toggle key
  • Fix menu opening after leaving growth mode with Esc
  • Reuse Aquarium UI module for layout browser
  • Add name property to generic Aquarium UI module
  • Make tooltip appearance abstract and automatic on selection
  • Hacky way to exit growth mode after popping the selectZooidToGrow module
  • UI Module stack deals with Cancel key input instead of all the modules
  • Growth no longer super aborted if you press escape
  • Remove/replace a few old inputs with the new input manager
  • Add tooltips for SelectZooidToGrow (or maybe we could just do it in the UIModuleStack ?)
  • Fix tooltips not toggling correctly
  • ZooidInfoAndUngrow now correctly handles UIButton changes after a zooid is ungrown
  • Fix an issue where left-clicking a zooid would ungrow it
  • UIModuleStack remembers and restores the previously selected UI element when pushing/popping modules
  • Added comments about when each UIModule method gets called
  • Don't toggle tooltips in non-growth mode
  • Keyboard/gamepad overriden tooltips can be toggled on/off with a special key
  • Show tooltips of the selected zooid
  • Push the required new GameKey, whoops!
  • You can now enter zooid info and ungrowth mode while in the growth menu by pressing 't' or the north dpad button (subject to change)
  • Abort zooid info and ungrow module if the mouse moved
  • Rename UngrowZooid to a more broad ZooidInfoAndUngrow
  • Slightly rework tooltip instance to have better API
  • Zooid ungrowing emulates PointerEnter/Exit events on ZooidButtonUI
  • Use polymorphism in BuildUIManager because we can
  • Simplify Aquarium Menu UI module
  • Add Debug Menu entry for UI module stack
  • Fix null reference exception in GrowZooid
  • Do not open aquarium menu when player controls are disabled (for example game menu is open)
  • Aquarium UI module WIP
  • Added a very barebones ability to ungrow zooids with the controller
  • Re-activate the older module after the popping the newer module
  • GrowZooid ui module pops itself if there is no active ui element or if the cancel button is pressed
  • BuildUIManager pops zooid selection module when leaving growth mode
  • SelectZooidToGrow module now uses GrowZooid module if a zooid becomes selected
  • BuildUIManager uses SelectZooidToGrow when enabled
  • Use InputManager for determining when to use the mouse or keyboard/gamepad for growing
  • GrowZooid now uses the zooid ghost for previewing build locations
  • Add a UIModuleStack to gameplayUI
  • You can now grow zooids by using the keyboard/gamepad
  • Use the GrowthUtility CircleColliderRadius where needed in GrowZooid
  • Make FindNeighbors a GrowthUtils function instead of being a part of BuildElementUI
  • Growth points can now be iterated via the automatic UI navigation
  • GrowZooid updates growthPointUI elements as the structure changes
  • GrowthPointUI is now poolable
  • Growth points are stored in a list once again + angle bugfix

Sipho - Dominas
Greetings!

The dust has settled after 0.5.0 release and we are so far happy with reception of it. We had players stream their progress in our Discord server, chat about their Zooid hunting experience. This was a heartwarming experience. Let us know what you think of the new zooids!

As our Zooid roster grows more luck is required to get a part drop you wish. We are thinking of ways fixing that and for now, we implemented one simple thing that was suggested by a community member. It is that Frakir will now prioritise dropping parts that you have not yet discovered. This will work as an encouragement to beat the game for more experienced players and will not affect the flow of the rest of the game as it is the end boss. This will guarantee that after beating game finite number of times you will discover all available parts.

We have an opportunity to participate in local gaming conference for which we need to do some preparations. To get a good playtesting feedback from attendees we need to have a solid new-player-experience, otherwise new player will be stuck on issues we already know and won't be able to provide deeper insight of the game. That means we will be reworking tutorial level and finishing full controller support. These goals align well with our development plans as both tutorial and controller support are needed for a full game. We will share more details about participating in the conference once we really know we have been accepted to showcase Sipho.

We have already started on controller support improvements in a separate branch, which means that some of the work won't be visible in the changelog until it gets to the main development branch:
Version 0.5.1
  • Award undiscovered zooid after killing Frakir
  • Fix Frakir becoming invincible again after growing back a zooid
  • Fix game not being unmuted when going back to main menu
  • Make scrolling textures blend options use unity enums instead of hardcoded values
  • Update material assets to include used shader keywords
  • Add debug option to teleport things to center of the screen
  • Make claws appear below zooids so they look better when oversized
  • Update preloaded shader variants to include zooid dissolve shader keyword
  • If the longterm progress can't be parsed from json, assume that it's corrupted and start over
  • If game save can't parse the file from json, assume there is no game save instead of throwing out an exception
  • Make game save, progression and game file reading and parsing a bit more robust.
  • Update the swarmer shake sound to loop better

Sipho - Dominas
Greetings!

The long awaited 4 new zooids are here:
  • The slimy thought-provoking Greaser which buffs neighbouring zooids with range and movement power. It creates an interesting choice between having one, but powerful zooid or many of the same zooid.
  • The shaky concept-bending Swarmer which spawns little critters that attack their foes and damage everything in their way. It challenges the regular approach to combat by allowing to keep a long distance from enemies but at less direct control of damage.
  • The swingy motion-dependent Flail which damages everything it touches with its spiky ball loosely connected to the colony. Flail use highly depends on your movement skills as it needs to be flung around at great speeds. It also acts as a good shield.
  • The hasty projectile-emitting Sprayer which spews out little projectiles and can hurt by touch as well. Sprayer requires high energy efficiency of the colony and good aim.
We are happy to bring these crazy ideas as breedless zooids. You will be able to adapt them from bosses the same way as Ancient ones (Grappler, Sniper, Muck and Energy Leech). We are looking into ways of making that less random. This wasn't a problem when we had less zooids, but now that we have more, we will look into making obtaining zooids more of a choice rather than a lottery.

And the final changes that brought us here are listed below:
Version 0.5.0
  • Fix Steam loading in built player
  • Increase Swarmer max critter count to 3 and nutrition cost to 6
  • Make swarmer icon power-of-two size to not be stretched in UI
  • Tweak greaser effect
  • Add angular drag to the tip of Flail to limit it's spinning after getting into twister
  • Clean up Zooid shader Properties and make Dissolve optional
  • Move the 4 new zooids out of development and into the game!
  • Swarmer is now a combat zooid
  • Tweak greaser effect to resemble a coat of blue jelly
  • Expose edge detection power parameter and Zooid shader blend parameters
  • Add environment spikes to Frakir boss arena
  • Add environment spikes to Cra'than boss arena
  • Make checkboxes have a checkmark when checked
  • Make swarmer minions spread out when skill is activated without a target
  • Kill swarmer minions if they are 2x further than range
  • Expose Zooid Graphics Transform and make connectors follow it
  • Shake Swarmer on skill use
  • Add some maracas for the swarmer
  • Update the descriptions of the new zooids and skills and change some of their placement sounds
  • Fix Steam related things
  • Add a very rough GrowZooid UI module (still needs a lot of work, pooling, caching and all the good stuff)
  • Add a placeholder GrowthPointUI
  • Cleaned up some UI GameParameters. Added a possibleGrowthLocationMarkerUI GameParam
  • GrowthPoint positions are offset according to the target radius (no longer on the edge of the zooid)
  • Blueprint no longer exposes key/value dictionary for possible growth points. Instead use GetPossibleGrowthPoints(Zooid targetZooid)
  • Don't destroy on load Steam Loader
  • Swarmer tweaks
  • Swarmer spawn effect
  • Flail tweaks and smaller slot graphics
  • Different swarmer spawn effect
  • Use Flail base sprite
  • Change color of swarmer top instead of scaling it
  • New sprite metas
  • Flail base and hive alpha sprites
Sep 13, 2019
Sipho - Dominas
Greetings!

Another Sipho update is upon you! We are inches away from having new zooids ready for 0.5.0 update. One of the new zooids is Swarmer, with never-seen-before mechanics:

It spawns small critters which circle the Swarmer and spread out to attack common enemies on-command. These critters can be defended against with other weapons and take little time to respawn. We can't wait to see what combinations you are going to put them in!

As per request of one of our Discord server members we have implemented "multi-growth" mode in growth menu. By holding multi-spawn key, which default is left shift, growth will not end after placing single zooid, which helps quickly place multiple zooids with a single mouse click.

Some of changes below mention "growth points". We are preparing to have better UX in Growth mode which is displaying potential points at which zooids can be grown. Currently, we find those potential points by constantly "asking world" if there are any positions nearby mouse cursor for growing a new zooid. Changes we made allow us to find all positions ahead of time which we will be able to display when selecting to grow a certain zooid. That should be especially convenient when playing with controller - all you will have to do is jump through positions you wish to grow at instead of potentially having a "fake mouse pointer".

The rest of changes, balancing of new zooids are below:

Version 0.4.9
  • Use multi spawn key for growing zooids as well
  • Fix one of built-in Layouts which had first zooid as non-head and add validation check for future layouts
  • Add a null check and early exit if we encounter a weird zooid id when generating growth points
  • Growth points are now stored in a dictionary according to their sizes
  • Use the sizes of all growable zooids when determining growth points
  • Make growth point generation completely lazy
  • Fix outline scaling error when ungrowing greaser
  • Fix deformable using incorrect rotation when spawning from rotated Sipho. This fixes Cra'than boss and possibly other things spawning at incorrect angle
  • Fix a bug where growth points were discarded due to the radius and the distance being equal
  • Fix errors when trying to check if a blueprint is valid when it has invalid zooids (caused by growth point regeneration)
  • Add basic melee damage to Sprayer
  • Fix incorrect growth spot blocking calculation
  • Regenerate growth points when growing, ungrowing or updating the blueprint. Allow external access of the growth points
  • Increase swarmer range from 7 to 12 (originally was 15)
  • Resave animation and controller
  • Add a swarmer minion animation
  • Swarmer uses range stat
  • Slow down swarmMinions when they are resupplied, not attacking and near the swarmer zooid
  • Use new sprites for Swarmer and use better names for scripts
  • Make growth background arrow not overlap outlines
  • Use thinner sprite for Flail connection to have better looking bends
  • Use new graphics for Sprayer
  • Add code for generating a list of possible growth points
  • BlueprintEntry can now cache and return the Zooid value based on the id
  • Use new Flail graphics
  • Zooid Outline setup dirties prefabs properly
  • Make Flail head not collide with connections
  • Use new Greaser graphics
  • Forgot to check-in IgnoreListenerPause script
  • New sprite import settings
  • Parasite sprites
  • Add a UIModule for handling skill rebinding
  • Pause in-world audio sources and allow playing UI audio when game is paused
  • Fix Vagorian Mover and Structure zooid connector offsets
Sipho - Dominas
Greetings!

While playtesting new zooids I came up with a nice combo utilising upcoming Flail and Greaser zooids:

As it is with Flail, Greaser's graphics are still being made. We borrowed very old sprite that was used in very early versions of Sipho as a placeholder. Greaser is a passive Utility zooid which "greases up" nearby zooids and increases their range and movement power. In this case it means that buffed Grabber will have an increased distance. Same would be with any zooid that has concept of range - Spike, Claw, Flak, Leech and others. We think that this zooid should give more strategic choices in choosing between more of the same or less, but more potent. A total of four new zooids are coming in the next major 0.5.0 update.

Progressing in Sipho world means that the world changes together with you. Discovering new zooids will mean that future enemies might have them discovered too. Existing layouts for enemies now have a chance to mutate and grow discovered zooids instead of base breed ones. We think that make encounters more interesting and add slight flavour of variety.

More changes have been done in preparation for upcoming zooids. Check out full list below:
Version 0.4.8
  • Fix Sipho not being stiffened when entering growth mode with only head zooid
  • Stub implementation for confirming a zooid to grow for SelectZooidToGrow
  • Add a SelectZooidToGrow UI module which is responsible for enabling UI navigation for zooid UI elements
  • Add UIModules which should be used for handling various UI-related tasks, one at a time
  • Disable automatic UI navigation for sipho name field
  • Make Cra'than boss spawn minion immidiatelly after being damaged
  • Make environment spike lighter, but have more drag
  • Don't undeform Sipho when it's being grown/modified
  • Remove buffs from zooid when it's dying to prevent destroying nested effects
  • Remove stats from poison debuff so they don't show up in tooltips
  • Make Greaser have no energy upkeep
  • Add and use Flail material
  • Optimize growth mode UI layout
  • Stiffen player Sipho when entering growth mode
  • Do not lerp fixed delta time when pausing game
  • Update growth transition time in Fixed Update as well as in Update
  • Only mutate enemy inventories with adapted zooids, so the player would have a better idea of what to expect from them
  • Ignore flail chain link collisions with flail zooid collider which helps links not getting stuck on launch
  • Make flail chain link distance approximate to range as close as possible
  • Add poolable joint link object to use for Flail joint chain
  • Ping all breed unlock achievements when initializing the campaign achievements, in case some were unlocked without steam
  • Enemies have a 20% chance to mutate one of their zooids in their inventory to some different zooid
  • Don't try to mutate zooids that shouldn't be mutated
  • If vagorian spawners lack layouts, just use random
  • Attempt to fix zooid prefabs becoming dirty in project
  • Disable connecting joints when flail is retracting and use another joint to retract it. Use LineRenderer to render connections
  • Increase physics iteration count to make joints more stable
  • Set up flail connection as a chain of joints
Sipho - Dominas
Hello everyone!

Another two weeks have passed in All Parts Connected Headquarters and we are happy with our progress on upcoming new zooids. One of them is physical Flail:

Graphics and name are prototypes and subject to change. This little bad zooid has a lot of weight in its not-the-smartest spikey end. It will require finesse to control and should be a fun zooid to play as offensively and defensively. If you would like to know more, come chat with us on Discord.

We have added two new achievements. One of them is for the hardcore players - beat the game without growing any weapon zooid. After implementing the achievement we noticed that we don't have many damaging utility zooids yet, only those which involve poison. Thus, The Grappler has been asked to change its department to Utility instead of Weapon. It already did little damage and was expected to be operated with accompanying zooid to make a greater combo. We buffed its skill usage and nerfed damage. Later changes will include beating bosses in more creative ways.

Other balance changes and notes about upcoming zooids can be found below, in the changenotes:
Version 0.4.7
  • Report if it's steam build in Options menu
  • Fix initializing Steam
  • Change time settings to proper values
  • Fix offset layout previews
  • Do not include Aquarium background in screenshots
  • Buff greaser buff to 50%
  • Store flail state as Sipho head buff. Tweak flail balance
  • Tweak greaser effect
  • Clamp edge detect shader output so it doesn't produce sparkles
  • Add following effect remove callback and use it for Greaser effect to fix not deparenting renderer clones on time
  • Fix dead zooids erroring out due to missing Sipho reference
  • Make layout previews renderable in growth mode
  • Fix screenshotter to not make flipped images
  • Implement fast kill achievement unlock
  • Buffs can now carry owner information and tell where the damage is coming from. This fixes the poison being counted as 'pacifist'
  • Add a fast kill achievement for killing a full health head in 5 seconds
  • Increase Burstopod damage by 1
  • Scale critter minion movement speed based on spawner movement speed
  • Critter minions scale from melee damage instead of ranged damage, as they do melee attacks
  • Made critterminion poolable
  • Make RendererClones always properly follow their targets
  • Tweak zooid descriptions to include valuable information
  • Make Flail extension toggleable
  • Add code that can mutate the enemy inventory by swapping its native zooid with a random unowned zooid of the same type
  • Tweak outlines of some zooids to fit better
  • Increase the volume for swarm attack signal
  • Add a sound effect for sprayer and slightly increase its projectile speed
  • Critter minions can deal damage even when they do not have an attack command issued (but still require a resupply afterwards)
  • Fix a bug where critter minion resupplying was calculated based on the sipho position and not the zooid position
  • Make muck cloud have more angular drag
  • Make Cra'than boss spawn minion skill more costly
  • Fix Cra'than boss spawner zooids not being red
  • Fix zooid graphics not taking different material and texture combo into account when assigning shared material
  • Make poison cloud have ten times less mass, but more drag
  • Make twister swirl initially appear larger and do not lose as much lifetime when pulling non-zooids.
  • Convert Grabber to Utility zooid: Damage reduced from 3 to 2, cooldown reduced from 1.1 to 1 second, energy cost from 35 to 25 and added +3 energy regeneration.
  • Enable utilitarian achievement
  • Added a very basic attack signal effect for the swarmer
  • Add a slight scale wobble when the swarmer is making a new minion
  • Added a tiny minion death
  • Reduce swarm attack energy drain a bit
  • Added a tiny stab effect for minion attacks
  • Critter minions are now part of the zooid effect layer as they should appear on top of other zooids
  • Use Async GPU readback to read rendertexture without stalling render pipeline
  • Move darken Sipho logic to Siphonophore script
  • Add screenshotter script which makes screenshots and sipho previews
  • Rename Math to SiphoMath
  • Expose deep camera in Camera Follow

Sipho - Dominas
Greetings!

This update generally contains polishing improvements. One of those things is making sure any size Siphos can be heard as we want them to be heard. That is why we have a system to limit concurrent sounds effects played at once which helps not playing unnecessarily large amount of Flak shots or poison applications. Otherwise we hit concurrently played sound limit which basically mutes some other distinct sounds. We had this system in place for a while now and try to apply these limits to mostly zooid effects which are usually played on skill activations at once.

All obstacles are now made out of hand-traced circles instead of polygon colliders. That gives physics system some "direction" in which to resolve deeply overlapping obstacle collisions with zooids or nutrition. This means that zooids and food should no longer get permanently stuck in rocks. This also brings a little performance optimization to obstacles which are more rounded and can be made out of smaller amount of circles. Several circles are faster to calculate physics with than polygon shapes with many points.

One thing we have constantly seen new players do is to try ungrowing zooids in growth mode by dragging them away from their Sipho. This now is possible - we want to have as smooth first experience as possible. It works by checking distance to Sipho zooids and if it's further from closest zooid than X it enters "release to ungrow" mode. It also works by dragging zooids onto growth side-bar.

It is no secret that we are experimenting with new zooids. Some of you might have seen our Tweets or sneak-peek development images in our Discord server. For more hints, we have left-in changes to those zooid prototypes in the change-log. Check it out:

Version 0.4.6
  • Fix renderer clones not being cleaned up
  • Add RendererCloner effect utility and use it for Greaser zooid
  • Fix Buff Manager keeping reference of removed buff effect
  • Add onCreated event to FollowingEffect
  • SwarmSpawner critters no longer auto-attack, instead you have to command them with a skill.
  • Reduce sprayer shot frequency slightly
  • Update UI-Default shader to engine version 2018.4
  • Range stat increases projectile lifetime instead of speed
  • Move food consumption logic away from physics callbacks to custom fixed update to avoid GC allocs
  • Add Fixed Update event to Siphonophore
  • Avoid some NaNs in twister pull logic
  • Add greaser zooid prototype which increases range of neighboring zooids
  • Remove digits after percent comma and use bullet points to list buffs in Zooid Descriptions
  • Separate Consumable pull stat from Range stat
  • Add non-expiring flag to buffs. Improve buffed zooid tooltips with stats applied and buff duration
  • Do not clear all buffs when reapplying stat buffing zooid - fixes too low amount of stacks for early applied buffs
  • Allow using development zooids in built games if they are requested specifically by ID
  • Move flashbang zooid to development folder, marking it as development zooid
  • Remove collider-disabled rocks and leave only their lower rock parts in Underwater boss battle
  • Ungrow zooids when they are dragged far away from connecting zooids or are dragged on growth sidebar
  • Set zooid to not Alive when it's being ungrown
  • Limit Advena poison spray concurrent sounds to 2
  • Limit concurrent energy powerup audio players to 2
  • Limit concurrent movement powerup audio players to 2
  • Make shooting zooids play audio through AudioPlayer and limit their simultaenous count
  • Allow playing AudioPlayer manually
  • Move mine explosion audio player to mine explode effect and limit simultaneous count
  • Add circle colliders to plant obstacle
  • Disable new colliders for rocks in Underwater boss level
  • Do not save decorations, deep rocks and whirlpools in any level
  • Do not save decorations in underwater level and spawn more food
  • Make eggs always drop something useful
  • Don't save whirlpools spawned by level end whirlpool spawner
  • Add flag that allows not saving grid spawner spawned objects
  • Use multiple circle colliders instead of polygon colliders for all obstacles. Improves performance and overlapping collisions
  • Fix non player zooids not getting damaged highlights

Jul 16, 2019
Sipho - Dominas
Greetings!

This update brings rendering performance optimisations to Sipho!

These improvements were long overdue. Sipho was started in Global Game Jam 2017 which required various "quick to do" fixes for the game to run, no matter how, just to be done in time. We have re-written many parts of it since then, but we did not re-write rendering because we did not know how we are going to render all those zooids. Since then game has solidified and we have become more confident in our workflow, knowing how things are made-up in the engine and what can be sacrificed for performance.

To not get too technical on this post, I am going to be writing up a separate post about current rendering in Sipho. Quick explanation is that we used to render sprites and their outlines one after another. That made CPU talk with GPU for every object on the screen at least twice, each frame.
- Render Spike base outline here - says CPU
- Okay - replies GPU
- Now render Spike base here
- Yeah - GPU
- Now render Spike tip outline there
- ːsteamfacepalmː
[...]

And all this conversation for 20 of your spikes.

CPU is usually slow at talking to GPU and one would want to make the CPU bother GPU as little as possible. One of techniques is batching sprite meshes to a single large mesh and rendering that. But our shaders rely on local vertex positions and many additional parameters like health or animation speed. That makes batching sprites in Unity engine hard.

Worry not, there is other rendering technique is called instancing. It takes one mesh and tells GPU do render it multiple times in a single "sentence":
- Render these 20 Spike outlines, here is a list of positions and parameters for each one - confidently says CPU
- You got it - replies GPU


This has improved Sipho rendering performance on CPU by about two times. If GPU does not support instancing, it will fall back to old system of having consecutive calls for each image. Worst case scenario for this type of rendering is many different sprites being rendered at once. Imagine Frakir with about 500 unique zooids just to get back to where we were with performance. We would love to have that many unique zooids!

Oh and we had a sneak update few weeks ago. It had hot-fixes for our input system changes. Check out our history of changes for these versions:

Version 0.4.5
  • Disable outlines for invisible rocks in Guardian boss lair
  • Make mine poison a bit more visible
  • Also fix energy leech and muck consumable pull
  • Limit leech tip position lerp velocity which might fix AABB errors
  • Fix eater food pull scaling - forgot to adjust some zooids and power to fit Range stat
  • Fix grappling hook line being invisible
  • Cleanup some UI
  • Don't use placeholder icons that are nowhere else used to prevent them from being included in builds
  • Fix claw top being rendered below blades
  • Circular fade-in to growth mode for decorations
  • Add ZWrite control to environment shader to fix bone ball lower pats hiding outlines
  • Flower petal lower sprite sorting layer
  • Fade-to-zooid-color zooid connectors in growth mode
  • Make zooid outline hashes consistent
  • Make deep objects render correctly
  • Force render sort order for all environment objects
  • Offset sprite animation according to world position
  • Aquarium spawn ghosts now use tight meshes to display atlassed ghost sprites
  • Make decorations work with instancing
  • Use tight sprite mesh in UI buttons that might draw atlased sprites
  • Support flipping in instanced zooid outline shader and fix Claw outline
  • Make all outlines render explicitly before their original sprites
  • Remove unusued trail material from pusher effect as it produced drawcalls
  • Make projectiles work with Zooid shader instancing
  • Remove unused _ColorBrightness from zooid shader and make mines compatible with instanced rendering
  • Remove unnecessary transform.position call in graphics connector
  • Set spike background connector sorting order to be unique so backgrounds get batched
  • Fix animated materials not animating through overrides
  • Use instancing for zooids and remove zooid sprites from atlases to preserve local UVs
  • Create copies of Zooid material to allow instancing
  • Use instancing for zooid shaders
  • Rename Zooid shaders to better reflect their purpose
  • Add an achievement prototype for beating the game without building a single weapon zooid
  • Rename Zooid Highlight material to Zooid and use it instead of Zooid Nohighlight
  • Don't error out if EnvironmentObject has no SpriteRenderer
  • Add Zwrite control to Zooid shader
  • Use non-legacy sprite atlases
  • Improve gameSave to allow saving arbitrary struct/classes inside a dictionary. We no longer have to add any game save fields for anything
  • Set packing tags for all zooid sprites
  • Add base outlines to all zooids
  • Inherit sorting order of zooids and improve outline
  • Collect outlines at the base of graphics rather than from parent
  • Use separate multiple outline objects to define outlines for zooids. Update some zooids to this system
  • Game save now saves a Dictionary<string,bool> for generic serialization purposes
  • Use non-legacy sprite packer settings
  • Revert tight sprite packing as it breaks UI ghost rendering
  • Set scale of obstacles in Start as well because OnEnable is too early for just spawned objects
  • Make all obstacles batchable - group into atlases, use separate EnvironmentOutline object to render growth mode outlines
  • Enable batching and remove outline passes from environment shaders
  • Add outline shader for environment outlines
  • Add Environment Alien Rocks and Outlines render sort layers
  • Setup outline renderers for Alien Rocks
  • Scale Rock outline object instead of setting property block of scale when available
  • Disable Sorting Group for spike
  • Put Alien rocks into atlas
  • Enable batching for No Highlight shader
  • Add renderer for Alien outlines
  • Separate Outline pass from main highlight shader.

Version 0.4.4
  • Recreate globalSettings file in case we fail reading json
  • Fix a bug where the in-game options menu would open and instantly close in the same frame when pressing Esc
  • Allow closing the game menus with the cancel button
  • Fix a bug where rebinding would instantly succeed with the key that initiated the rebinding process
  • Added M4 and M5 buttons to the string beautifier

Sipho - Dominas
Greetings!

This update comes with one little feature that we think will help navigating level ends - a new sense, a bio sonar!

It will be shown where hunting down each victim matters the most - at level ends, in boss fights and also in Aquarium. It will display enemies as red bars and nutrition as green ones. Sonar should help to feel and see beyond borders of the screen.

Internally we have introduced a Range stat which controls range of all zooid abilities. In future, we will be adding zooids and/or powerups, abilities that change stats and enables having more varied playstyle. In this version, range can be seen in zooid tooltips.

Our Input System backend has been completely changed. That means we are going further to support controllers and any kind of input devices. That is now noticeable in main menu and ingame menus as we have added full keyboard/controller support in those cases. The bad news is that existing control binds in options menu will be reset and will have to be re-bound.

In future patches we will be tackling Growth mode and Aquarium mode inputs as well as adapting movement controls to new inputs. Currently Auto Turn and Tank movement types are playable, however we have not tweaked them up to quality we prefer. Ironically, Twinstick movement types will still be following mouse, thus will not work with controller input well. Default skill binds are still designed to for mouse + keyboard controls which we will have to fix as well for controller-only players. Let us know how you expect to control your creature colony and which buttons you would like to use for skills in comments below!

And a little distraction from our request above - full version changelist! We left some of internal changes in for the curious:
Version 0.4.3
  • Add movement type report to Death and LevelEnd analytics
  • Allow selecting Zooid to keep with Up/Down input axes
  • Display negative stats in Zooid descriptions too
  • Fix buffs not applying when there is no zooid type filter
  • Generalise filtering buff targets by ZooidType in Buff Manager
  • Head selection keyboard/controller support. Growth button to toggle tutorial
  • Stats should be immutable structs
  • Remember last active UI elements and select them when opening menus. This allows keyboard/controller menu navigating
  • Fix input errors when the globalSettings file doesn't exist and fix issues with overwriting default bindings
  • Fix saveWasJustLoaded retaining an invalid state when restarting the game
  • Tweak Main Menu labels and make buttons properly select
  • Add helper script that draws distance lines
  • Use circle colliders on Bone ball obstacles instead of polygon colliders
  • Add support for multipler colliders on Environment Object
  • Disable occlusion check for Sonar
  • Fix some Zooid layers not being set to Zooid
  • Chill down whirlpools with their particle pulling
  • Make Object spawner skill zooids and poisonous zooids scale with Range
  • SkillUI uses pretty key strings
  • Fix errors when loading a game save with the old bindings
  • Fix errors when loading globalSettings with the old binding data
  • Make Leeches use Range stat
  • Undo the zooid selection UI work for a better merging experience
  • The new input system obviously needs to have physics, xr and vr. At least it's not in-app-purchasing.
  • Correct gamepad start button path
  • When rebinding, consume all input for one frame after succeeding/cancelling the rebinding (avoid accidental menu closing etc.)
  • Added a menu toggle button that is intended to remain static and not be changed by the user
  • Add an input locking mechanism that allows ignoring all GameKey inputs
  • Rearrange InputManager for better sanity
  • Add Zooid Range stat to description
  • Make Pusher work with Range stat
  • Volter uses Range
  • Make Sniper, Flak and development weapons use Ranged stat
  • Don't revert to defaults if you can't resolve a button, use the previous binding path and show it as best we can
  • Added a method to tell if a gamepad is used instead of the mouse
  • Halve claw range influence as Range is better understood as diameter rathern than radius of damage
  • Scale claw with Range stat
  • Make Grabber use Range stat
  • Make Spike weapon use Range stat
  • Rename Food Pull stat to Range
  • Fix food sonar indicators remaining visible
  • Add SonarController which controls when Sonar is visible - during end of Campaign levels, always in boss fights and Aquarium
  • Scale Muck animation with animator speed
  • Make Sipho sonar indicators fade in and out
  • Some form of input key beautification started
  • Fix incorrect defaults for selecting zooids to grow
  • Fix a bug where resetting to default controls did not persist between playthroughs
  • Skills now work with the new unity input system
  • Start work towards moving skill bindings over to the new system
  • Don't remove device name when serializing unless we can substitute it with something
  • Keep track of binding paths all the time, not just when serializing - needed when the controller gets unplugged
  • Load saved bindings
  • Make sure to invert the needed keys every time you resolve a binding
  • Invert left/right stick key down and left buttons, solve all the problems without editing any unity input stuff
  • Create an input settings asset and make buttons less sensitive
  • Hack in a fix for stick.down/left not working
  • Override the unity input system and push it to version control
  • Fix default binding arrays not being filled with stuff, whoops! Added functions to get default ButtonControl arrays
  • Gamedev, now with 50% less garbage, go green!
  • Serialize controls as generically as possible. Controller has default bindings and can sort of be used
  • Start using strings to resolve default controls in order to avoid serializing a bunch of null controls instead of their actual expected bindings
  • Work towards serializing bindings
  • Work towards selecting a zooid to grow with the keyboard
  • You can now cycle the zooid groups with menuNext/Prev buttons
  • Work towards selecting the zooid to grow via gamepad
  • Fix rebind UI exceptions because apparently Keyboard.current is null on the start of the game
  • Hide the dialog UI in gameplayUI because it hides everything else
  • Reworked input handling to not use the InputAction thingies, added default controller bindings, added some new bindings for menu navigation
...