Download PDF 1.25 MB
Steamfarer* Creator Uses Do-it-Yourself Focus for Multiple Awards
By Garret Romaine
Introduction
Creating a great game doesn’t have to involve a big team if you have the right skills and supreme focus. Igor Rashkuev definitely has the right stuff—his university studies have ranged from applied mathematics and information science to fine arts. He’s like a one-man band: he plans, he executes, and he tests with equal enthusiasm, because every job is his alone.
Fortunately, his varied background gives him the ability to not only design intriguing flying ships, but to send them soaring through a mesmerizing world in his exciting new role-playing game (RPG) called Steamfarer*. So far, he’s doing things right—among other awards, Steamfarer won the 2015 Intel® Level-Up Game Dev Contest for Best 3D Graphics.
Figure 1. Igor Rashkuev is a one-man army when it comes to game creation—he single-handedly managed the design, coding, artwork, project management, and more for his new title SteamFarer*.
Rashkuev, who lives in St. Petersburg, Russia, controlled all the design decisions, chose all the tools, worked out the project timeline, and hit all the milestones. His do-it-yourself attitude is a true inspiration for indie developers who have a great idea but are running into difficulties getting started. Rashkuev’s decisions about tools, engines, artwork, and testing will give such developers a feel for what they need to know to get started creating their own titles—even if they are a one-person dev team.
An Army of One
Steamfarer puts players in the role of captain of a flying vessel, adding crew members, weapons, and tactical abilities to survive challenging and demanding bosses and combat scenarios. The twist is that Rashkuev populated the world with classic Steampunk designs. Steampunk encompasses an intriguing part of the science fiction and fantasy genre that celebrates the beginning of the Industrial Revolution—especially steam power. Imagine plenty of shiny brass, lots of rivets, and clouds of steam, with turning gears and belts—but no circuit boards or computer power. Steampunk, and hence Steamfarer, is thus old-school in the classic sense.
Figure 2. Steamfarer uses a Steampunk motif, with flying vessels featuring lots of shiny metal.
The decision to use a Steampunk motif allowed Rashkuev to envision and create fantastic artwork. And Rashkuev designed everything—each character, each weapon, and each level. “I had drawn Steampunk artwork before and I liked it a lot,” he said of his inspiration. “So I decided to go with it, because I knew very few games with this kind of environment.”
As for the type of game to create, it wasn’t hard for Rashkuev to pick a style, either. “I always liked Blizzard role-playing games,” he explained. “When I was a kid, I played a lot of Warcraft*. That was definitely a big inspiration for me in the design and the style of my own game.”
With those decisions out of the way, his game started to grow. He went with a 3D world because “3D is just simpler for me,” he said. “I guess my spatial thinking is better for it, so working in 3D is easier for me. I also have work experience with 3D. I didn't use any fancy technology to make my game. Everything is pretty simple and without complex shading and the like.”
Because Rashkuev is an army of one, he quickly moved into prototyping, skipping many of the steps familiar to software project managers, including the writing of a formal design document and a list of deliverables. “When an idea pops into my head, I just write it down,” he said. “It’s just me. That’s the upside of working alone,” he laughed. “I don't spend time and effort on communicating my ideas to anyone else.”
Figure 3. Steamfarer uses 3D effects and plenty of lighting for a pleasing background.
Before starting Steamfarer in earnest, Rashkuev had been playing around with weapon design using his favorite art tool, Autodesk 3ds Max* 3D. A popular program for 3D modeling, animation, and rendering, Rashkuev saw its potential in bringing his idea to life.
He quickly created a series of Steampunk-themed flying ships, which intrigued him. “I made some very interesting designs, and I thought that it was fun, so I started working with it even more. I liked it, and so the game went on evolving and becoming bigger and better. Soon it grew from this little prototype into what it is now.”
Early Design Earns Positive Feedback
While some designers use a contest deadline as a spur to create something great, for Steamfarer, the journey was reversed. Rashkuev already had a good demo, and late one night he was checking his Twitter* feed when he saw someone mention the 2015 Intel Level Up Game Dev Contest. “I checked the rules for entering the contest and found I was eligible,” he said. “I thought, ’Well, why not?’ It was just a few hours before the deadline, but I made it.”
Meanwhile, Steamfarer started showing up at local conferences and open house exhibitions, and positive feedback soon poured in. “Conferences were a great source of feedback, where I could experience regular people playing the game,” Rashkuev said. “You just watch them play and you evaluate how everything goes. You can see if they are comfortable with the user experience, if they seem to know what to do, and you get an idea of what to fix next.” For a human Swiss Army Knife such as Rashkuev, who inevitably grew so close to his project that he worried about losing perspective, such user testing from outside sources was invaluable. “Watching them interact with the game is the best kind of feedback,” he said.
Figure 4. Steamfarer's battle scenes are dynamic and colorful, blending with the game's overall theme.
Over the past year, Rashkuev also attended several professional conferences geared for game developers, and those proved even more rewarding. At these events he could watch professional game developers play his game, and that gave him a different perspective entirely. “For example, I participated in the 2015 Games Jam Kanobu, where I won for game design. After the contest, the juries wrote up their impressions; this was very useful and included a lot of great tips and ideas about improving the game.”
From there, Steamfarer began to feel more like work. Rashkuev has a day job to pay the bills, and he is also a student, working toward a degree in fine arts. He squeezes in time on the game mostly at nights and on weekends, so the amount of effort he puts in varies greatly week by week. That’s the downside of being a sole proprietor—when he’s not working on it, the game isn’t getting better.
Looking Back—Key Decisions
Rashkuev learned more as Steamfarer matured, and while he’s an inspiration to those who have been stuck at the starting gate, he’s too modest to think of himself as an expert with advice to give. “It's always hard for me to call myself a real software engineer, because I have very little education and I don't approach my project like I think an engineer should,” he said. “I haven’t really encountered any kind of very complex problem with my work, because I tried to simplify things from the very beginning. Truthfully, I can't possibly solve too many complex problems.”
Like many starting game developers, Rashkuev chose to use the Unity* engine as the foundation for his game. “There are a lot of upsides and downsides to any engine, any technology,” he said. “I chose Unity because it’s easy to figure out how it will work best for me, and because I won a copy of it at a game event with an early game I wrote in a single week. Using it saved me money. The Unity engine let me prototype the game quickly, and I was able to rapidly implement all the assets I needed. The many pre-made pieces in the asset libraries helped me, too. I just found it very comfortable to use.”
Figure 5. Rashkuev used his artistic side to augment existing scripts in the Unity* engine to create his rich backgrounds.
One part that stopped him for quite a few cycles was getting the game-saving system to work properly. He wanted the system to save the game right where the user stopped, but it didn’t cooperate at first. “I spent the most time working on that simple piece,” he said.
Rashkuev also worked closely with properties, which he said can be incredibly useful. The following code samples are in C# and are written for the Unity engine, but similar logic can be used in other engines.
Example 1. Here Rashkuev is using the property Health, in which he can check if an object's health is within a valid range, and is calling the Death() function, if the health drops to zero. This way he can use Health as a variable in any kind of expression without having to worry about its value being out of bounds or having to constantly check to determine if the object is alive.
public int MaxHealth; int health; public int Health { get { return health; } set { health += value; if(health > MaxHealth) health = MaxHealth; if(health < 0) health = 0; if(health == 0) Death(); } }
Example 2: Another possible case for using properties is for caching components. The GetComponent function is relatively slow and creates redundancy when called multiple times for the same component; therefore caching a component is a good idea if you access it more than once. You can do it in Awake() or Start() functions, but in some cases you can use properties instead. This way GetComponent will be called only when necessary, and you don't have to worry about the order in which Start and Awake are called on different GameObjects.
MeshRenderer mrenderer; MeshRenderer MRenderer { get { if(mrenderer == null) mrenderer = GetComponent<MeshRenderer>(); return mrenderer; } }
Example 3: If your code includes objects that perform some actions in the Update function, but only have to be active while the player sees the object, then to enhance performance you can disable the object when it is invisible as follows:
void OnBecameVisible() { enabled = true; } void OnBecameInvisible() { enabled = false; }
Example 4: Sometimes you need to hide an object and all its children, but without deleting it. You can just deactivate the object, but this is not always the best way. So you can use the following to hide the object recursively:
public static void HideRecursively(GameObject gobj) { MeshRenderer rend = gobj.GetComponent<MeshRenderer>(); if (rend != null) rend.enabled = false; Collider collider = gobj.GetComponent<Collider>(); if (collider != null) collider.enabled = false; foreach (Transform child in gobj.transform) HideRecursively(child.gameObject); }
Example 5: If you have some props like rocks, trees, or debris, you probably want them to have different rotation and scale so they look more natural. You can do this by adding the following script to your props prefabs. The script randomizes rotation and scale of the objects after they are added to the scene and then deletes itself.
using UnityEngine; using System.Collections; [ExecuteInEditMode] public class RandomizeProp : MonoBehaviour { public float MinScale; public float MaxScale; public float MinRotation; public float MaxRotation; void Start () { transform.Rotate(Vector3.up, Random.Range(MinRotation, MaxRotation)); float RandScale = Random.Range(MinScale, MaxScale); transform.localScale = new Vector3(RandScale, RandScale, RandScale); DestroyImmediate(this); } }
Recap and Next Steps
As the sole proprietor and chief visionary for Steamfarer, Rashkuev learned to temper his enthusiasm for feedback and advice. “I try to keep an open mind to any kind of feedback, but I also try not to be too influenced by it,” he said. That’s because he has a vision for his game, and if he started to water it down with advice from others, the game wouldn’t stay true to what he wants to accomplish. “I won some contests, and it's always great because it validates what you’re doing. But I tried to take advice in moderation. I wanted my game to be fresh and new.”
Still, he has advice for those starting out based on what he learned. The following list recaps his four key insights:
- Stay focused on your vision
- Set realistic milestones
- Keep it simple
- Accept feedback, but see #3
What he thought worked best was his single-minded devotion. “The best thing I did was I tried to keep focus. I think it's very important, especially when you work alone. I also tried to keep things simple so I could focus on one thing at a time. If I work on any other projects in the future, I will try to also keep focused.”
When a lone developer is working on a project non-stop, there is little time for reflection. But once the schedule nears that final milestone, it’s inevitable to consider all the things that could have been done differently. “I guess one thing I would have done differently is I would have planned the project better and set myself more precise milestones,” he recalled. “There were some hectic periods for me.”
Figure 6. Steamfarer's energetic battle scenes rock with explosions.
Right now Rashkuev is working only on getting his game ready for desktop PCs, but because Unity is a multi-platform engine, he envisions porting the game to both Mac* and Linux* versions. For now, he is focused on creating a great PC game, but after the first version is ready and released, he will also prepare the game for mobile devices. “I don't know how it will work out, because mobile devices can be tricky,” he said. “There can be different performance issues, so I will see how it will work. Maybe I will try to port the game for consoles, but there are a lot of difficulties with it and I don't know if it's possible. But I might try.”
At that point, Rashkuev envisions working more closely with Intel tools, such as the Intel® Graphics Performance Analyzers (Intel® GPA) for optimizing and fine-tuning his game. “Honestly, I haven't used the Intel® GPA tool yet because I didn't have time before the contest deadline. So I wasn’t able to check it out. When I start working on the game to run on additional platforms, I will check the tools and we'll see about them. That part excites me.”
That’s the kind of thinking that has made Steamfarer an interesting project so far—single-minded focus on the next task, while staying true to the vision he set for himself. It’s a great lesson for anyone else just getting started—keep it simple, stick to the plan, and take one step at a time. It worked for Rashkuev, and it can work for you.
Resources
Check out the Steamfarer announcement video at: http://steamfarer.com/media.html
Learn more about Steamfarer at: http://steamfarer.com/index.html
Download the Unity* Engine here: https://unity3d.com/get-unity
Learn about the 2015 Intel® Level Up Contest at: https://software.intel.com/sites/campaigns/levelup2015/