Trending
Opinion: How will Project 2025 impact game developers?
The Heritage Foundation's manifesto for the possible next administration could do great harm to many, including large portions of the game development community.
This is mainly a list of free tools and techniques that I’ve used in mobile endless runner Good Cat Gone Bad.
Target audience: beginner indie developers.
This is mainly a list of free tools and techniques that I’ve used in mobile endless runner Good Cat Gone Bad, which will be available in Google Play on 4th May 2016.
The game was developed as a pet project, using Unity 5 and took 4 months on a full-time basis.
After I came up with this crazy core game idea, I started to break it down into application components and describe them using short theses. For example:
Components:
game over menu
level
level area (highway, park, hood)
player
cop
score
health
Game over menu:
shown when player dies
has Restart item
has Resurrection item
has Exit item
Level:
can be completed
has completion score
the higher level, the higher completion score
procedurally generated
has a column layout
consists of an infinite list of areas
Player:
gigantic cat
always goes forward
can strafe left and right
destroys / kills everything that touches
has health
has score
Cop:
stays in place
shoots at the player
gives score when killed
I use Google Keep to store all these notes and other crap.
Basically, you saw the large part of the initial game design. This was enough to start development. Later I improved the design, by utilizing such things as Core Loop , Subversion , Bartle Test .
The project consists of modules. The module is a group of components and assets, related to some feature or part of infrastructure.
Assets/Src/Catzilla
├── AppModule
├── CommonModule
├── GameOverMenuModule
├── LevelAreaModule
├── LevelModule
├── LevelObjectModule
├── MainMenuModule
├── MarketingModule
├── PlayerModule
└── SkillModule
Components and assets in the module are structured by type.
Assets/Src/Catzilla/LevelObjectModule
├── Animation
├── Config
├── Controller
├── Materials
├── Mesh
├── Model
├── Prefab
├── Sound
├── Texture
└── View
Every module (except asset-only modules, like Marketing) has a component that is responsible for initialization of module (binding of services, configuration values, event handlers, etc.).
There is a special module (App) that acts as an entry point of application. This is the place where all other modules are registered and initialized.
Modules are based on Zenject library, which also provides flexible Dependency Injection.
The project’s architecture is based on the event-driven approach. In my case, this means that the key components don’t know about each other, and they emit events, which are handled by mediators, which are responsible for interaction between components.
During the level, each frame has < 5k vertices and < 20 draw calls.
All those hipster models I made in Blender. Each model has < 200 triangles. Most of them are made of separate meshes (e.g. legs, arms, body, head) so they could be destroyed.
Cop. Bunch of cubes.
Start of highway. Just a plane.
Some people don’t believe that this is Impala 64.
And some of them think that this is not Miami’s palm tree.
Texturing was made using Hyden’s technique and textures of all level objects were combined into a single big (256x256) texture, as an optimization.
Combined texture of all level objects.
For the level area (e.g. park, highway), I’ve used material with Mobile / Unlit (Supports Lightmap) shader, and for the level objects - Mobile / VertexLit (Only Directional Lights) shader.
There is only 1 directional light in the game and no shadows.
Reference Resolution of Canvas Scaler is 480x800, to cover more devices. By the way, how many of you are aware of this page?
The game’s color palette was generated using Paletton.
For the text, I’ve used Press Start 2P font, which can be found at Google Fonts.
For the floating text (e.g. score above object), I’ve used Text Mesh, instead of world space UI Text, as an optimization.
UI icons (e.g. health, skills) were taken from 64 Flat Game Icons package.
Animation was made in Unity’s Mecanim. Only 3 types of level objects are animated: player, civilian and bonus (e.g. that rotating shiny dollar thing).
Running civilian. 5 frames.
Sounds were generated in Sfxr, it seems to me that it produces better sounds, than Bfxr.
Audio sources use 2D mode (Spatial Blend = 0). Each level object has its own audio source, except player, which has 2, for more simultaneous sounds. But there is only 1 shared audio source for the whole UI.
Sounds are played through an audio manager component, which ensures that there are playing not too many sounds at the same time, and also merges (actually discards) identical sounds that are played within a very short interval, so there is no amplitude overflow in the output audio signal.
Icon. A true masterpiece. Was made as a separate Unity scene, by placing one of the level areas + player and by adjusting the camera.
You know what it is. The icon.
I’ve used Icon Slayer to put some stunning effects on it (rounded corners) and get the needed sizes.
Another piece of… oh, I mean masterpiece, is a feature graphic (banner, promo, whatever), which was made in the same way as an icon, as a separate scene.
Maybe I should shoot those blockbuster movies instead of doing all these?
The trailer was made in iMovie, using its Blockbuster tempate.
Steven Spielberg would like it, for sure.
The website’s frontend was made using Boostrap 3 framework. There is no server-side logic at the backend, just a Nginx HTTP server. It’s hosted at DigitalOcean. For the deployment, I’ve used Vagrant.
The project is using Smart Localization package (you’ve already guessed for what).
For the version control, I’ve used Git. Source code is hosted at Bitbucket.
Read more about:
BlogsYou May Also Like