Notifications
Article
Cryoshock
Updated a month ago
784
4
Survive at all cost and find the way out of the infested space vessel.
Created by: Dimitry Mitrofanov aka "Pixeye" ( Gamedesign/Programming) , Alexander Yazinin (Art/Animations) and Akmulin Artem ( Sound Design/Music )
Genre: Brawler/Action
Twitter: @dimmPixeye

Intro:

Greetings everyone and thanks for visiting Cryoshock page! We are a small indie team with a burning desire to produce the best quality games.
My personal story of using Unity goes from version 2.0 a decade ago, and I grew up from hobbyist programmer to indie developer with a released game (Dungelot ) thanks to Awesome Unity tools that simplify game developer life a lot.
About Cryoshock:
Cryoshock is a hand-drawn modern pixel art 2.5D brawler/action game about a guy that woke up after cryosleep on the gigantic infested spaceship. During the journey, he will find out what happened to the ship and the crew and maybe even manage to fight through this nightmare and escape on a lifeboat.
Gameplay:
  • Fast, intense action
  • Boss fights
  • Spaceship exploring
  • Local co-op
Early alpha version: Controls: arrows to move, Z - shoot, X - punch, Shift - roll, Space - jump Controller ( xbox ) : L2 - roll, X - shoot. A - jump, B - punch If you get killed just wait for a sec or two, the game will automatically restart. MacOS ( not tested ) PC Web

Media:

Development:

I write game logic with in-house ECS framework designed on the top of the Unity. It allows me to experiment with game mechanics a lot without fear of breaking core of the game.
The best thing about Unity is how quickly I can extend editor by custom self-written or 3rd party libraries. Our workflow wouldn't be so great without : Odin Inspector.
This tool is a must-have for organizing the inspector view. We never use more than one monobehavior on the game entity ( only as a wrapper between unity game object/components and our framework) - and Odin Inspector is very handy in grouping variables inside of those scripts.

PowerSprite Animator.
Let's face it :) Unity animator is an great tool for 3d games but it's a pain to work with 2d animations in unity — thanks to PowerHoof for providing excellent 2d animation tool.

TexturePacker.
TexturePacker from CodeWeb is a lifesaver when you need to deploy some sprite atlases.
Colorful FX. I don't know what would I do without post effects from Colorful FX. They are very easy to use and help a lot in making the game look from vignette to noise and analog tv effects. On the picture below I use screen coloring process for boss appearing.
Se Natural Bloom And Dirty Lens.
This library gives stunning bloom effect. In Cryoshock game I use a lot of HDR colors, and this library comes in hand to show those colors. I use it to express HP of the hero. The hdr color of the player's helmet shows current health. The green color of the helmet means that everything is OK : )
Unity Pixel Perfect Camera.
As we are creating hand-drawn pixel art, it's essential for us to show it as crisp as possible. The PP camera is something we were waiting for a long, long time : )
Rewired.
Rewired with no doubt the best solution for working with input and controllers. I can't imagine how much time I've saved on by using this awesome library.

Our tips on working with Unity.
Use scriptable objects whenever it's possible! They are not only great as data containers but also can have some logic inside. Let me provide a simple example of how useful SO can be.
Normally in a 2d game, you will often need a simple animation solution: s sprite sequencer. I wrote one myself and attached the sequence controller to desired objects.
Then, I make a special SO script. Let's call it "Template Animation." It will contain an array of sprites and step between frames.
using UnityEngine; namespace Homebrew { [CreateAssetMenu(fileName = "Template Animation", menuName = "Actors/Templates/Animation")] public class TemplateAnimation : ScriptableObject { public float step = 0.1f; public Sprite[] sprites; } }
Now you can easily add new "Animation Template" assets and attach them to the sequencer controller.Use extensions. Often a suitable method is preferable than a class object.
One of my favorite examples :
public static class Phys { public static readonly RaycastHit2D[] hits = new RaycastHit2D[20]; public static readonly Collider2D[] colliders = new Collider2D[20]; public static int CircleOverlap2D(Vector2 pos, float radius, int mask = 1 << 0, float min = float.NegativeInfinity, float max = float.PositiveInfinity ) { return Physics2D.OverlapCircleNonAlloc(pos, radius, colliders, mask, min, max); } }
By making a wrapper for Unity physics methods, we can save some time on actual coding by reducing routine of hits/colliders initialization.
int hits = Phys.CircleOverlap2D(position, 0.05f, 1 << 11, position.z + cAmmo.template.depthMin, position.z + cAmmo.template.depthMax); for (var i = 0; i < hits; i++) { var col = Phys.colliders[i]; }
I'll add more documentation about our process soon. Hope you enjoyed this article and found our game appealing. See you later!

Dimitry "Pixeye" Mitrofanov
T-Shaped - Owner
1
Contributors
Comments
PeCHe
a month ago
Game developer - Programmer
It looks really great! Congrats!! I want to know what do you use for lighting into the game. Thanks! :)
2
T-Shaped - Owner
FreddieLooks great! Amazing work ^_^
Thanks : ) We do our best!
1
F
Freddie
a month ago
Looks great! Amazing work ^_^
2
М
игра супер ! )
1