Jump to content

  • Log In with Google      Sign In   
  • Create Account

slayemin's Journal

New Studio: Week 3 - Prototyping

Posted by , 27 June 2014 - - - - - - · 1,843 views
Indie, Business, Production and 1 more...
​Tuesday:
It's Tuesday night, I'm sipping a beer and barely feeling it. Let's do this!

My artist (Dan) and I started building the initial prototype for our game this week. The first thing we did is put together a user interface storyboard which explains how the magic casting system works in real time. I decided to build the prototype in C#/XNA because it would give me the most rapid development possible because it's a dev platform I've worked with extensively. And, rather than starting the prototype completely from scratch, why not use the existing game engine I had worked on for 10 months? It's got all of the libraries and utilities I could hope for to speed up my development immensely. Not only that, it's already got a bit of a skeleton class architecture. So, I just created a new DrawableGameComponent and slapped it on top of my existing game engine and started building the GUI for spell casting. By the end of Monday evening, I had almost completed the initial GUI. There were just a few small, teensy bugs that needed to be ironed out.

In a slightly interesting change of thought, I shifted the way I thought about how I was going to build a prototype. The whole time, I believed that I was pretty much writing throwaway code which would never see the light of day in a production release, so I could be as sloppy as I wanted and could hack stuff together as fast as I could type. There was only one thing that was important, more important than anything else, and that is getting a prototype working. Doesn't matter how rough it looks. Just build it. If something slows you down because you're sweating over non-essential details, skip it! If its essential, find an uglier alternative. For example, I had colored mana balls on a white background which needed to fill up over time. Rather than monkeying around with source rects and destination rect coordinates, I just created a white texture and overlayed it on top of the mana ball and gradually moved it upwards. Same effect, less work!

On Tuesday I finished up the spell casting GUI and showed it to Dan. I think after he saw the mana system it in action, it really made a lot more sense to him. And it was a bit exciting to get something rudimentary working, something to show for all our work and design efforts. The small accomplishment added a bit of fuel and extra motivation to work harder, to knock out another accomplishment as fast as possible. I decided to start building on the next logical step, the spell casting system which uses the mana system I built. But, before we can create spells, we need a spell book to store them in. And to get spells into a spell book, we need a spell library in the wizard tower. And we don't have a wizard tower. So, I started trying to design the wizard tower, trying to imagine all of the different rooms in the tower and their game functionality. It seemed like it out take a lot of work, so I asked Dan what he thought. We talked about it for a bit, and then he said that it wasn't really the core essense of the game play. While its valuable work, it's not a priority. Instead, I should work on getting unit formations onto the battlefield and getting them to fight. Critical questions to be discovered through prototyping:
1. How fast do the units move on the battlefield?
2. How fast can the wizard become overpowered?
3. How fast do units on the battlefield die when engaged?
4. How does the spell system ramp up while attrition ramps down unit formations?
5. How does adding a few spells to the mix change all of this?

Since I had been using my old home brew engine and had some idea on the class architecture, I was able to get really rough units rendered in formation on a white background by the end of the day on Tuesday. It's all just being done with sprites on a 2D surface, so no need to worry about the third dimension... though, I could swap to 3D in less than an hour. It's all super fast, go, go, go. Build it now, don't optimize, let the CPU sweat. Does the idea and game mechanic work? That's what's important right now.

As I was leaving the office, I met a guy who was leaving our office as well. He heard we were building a game and asked about it. I introduced it as "It's Total War meets Magic: the Gathering", and he was an avid TW player. He mentioned that he does 3D modelling as well and was very interested in what we're building. That's really awesome. It's like, every other day in Seattle, I'm bumping into new people who are in the game development industry. I got his email address and said that I might be able to throw some work his way.

Wednesday:
I was on a roll today! The goal was to get unit formations working correctly. I like the way the Total War series does their unit formations, so I copied some design ideas from them. I have a "Creature" class which "Peasant", "Wizard", "Archer", and "Swordsman" inherit from. I also have a "Unit" class (which would probably be better named as "Formation") which contains a list of all of the various creature types which compose the formation. So, I've got a "Hero" unit which contains the player wizard, a "Mob" which contains 100 peasants, 25 archers, and 40 swordsmen. You can draw selection boxes around any unit to select it and then right click and drag out a "ghost" unit formation. While you're dragging, you can select the width of the formation and the ghosts automatically rearrange themselves to fill the ranks. Once you let go of the right mouse button, the selected formation units all move to occupy the ghost unit positions and orientations. It's kind of cool to watch. I got it all up and running in a day too! My goal is to have a very rough prototype ready by Friday. Tomorrow, I'm hoping to put the various formations into factions, send the units to attack an enemy formation, and get a fireball spell working which costs mana to cast. I'm hoping I don't get stuck on any hang ups or bugs tomorrow.

Dan made a lot of good progress on creating the first human model. He's going through the production pipeline process to see what exactly is involved with getting a finished and animated model into UE4, from concept to finished product. He was also a bit surprised to see how fast my prototype is coming along. I think we're right on track.

Friday:
It's the end of Week 3. It barely feels like three weeks have already passed. However, that's because I've been incredibly busy and quite productive. It's a good time to pause and reflect. What's been working great for me is having a remote office to work from and having someone to work together with. I have had no problems staying focused, on task, and motivated. At 4:45am this morning, I actually woke up to look at the clock to see if it was time to go to work yet. I was eager to get up and get back to coding, but my practical side tells me that sufficient sleep is also incredibly important to being optimally productive. My daily routine has become a routine of mostly getting up, eating breakfast, walking 15 minutes to the train station, working all day, late lunch at 1:30pm, work until 6pm or later, train home, eat a sandwich for dinner, relax for 2-3 hours, go to sleep, repeat. I was shooting for 40 hours/week of work, but I think in truth I'm putting in about 60 hours/week. I just get immersed in my work and lose track of time, only to see in dismay that it's a few hours away from the end of the day. I am usually the first to arrive and last to leave. The lingering worry I have in my mind is "burnout".

In terms of the project, I've made really solid progress on a playable prototype. I learned a few important lessons while creating the prototype.
1. Just because you're prototyping doesn't mean you can get super sloppy with your code. It doesn't have to be perfect, but you should still pay close attention to class architecture. If you're hacking stuff together (as I was) and you complete the task, and then your next task is to expand the system you built, you'll find you save more time by doing it right the first time than having to go back and reorganize code. Don't sweat the potential need to refactor your hacked code though, write it so it works first, and if you need to do it in the future, go back and refactor it.
2. Testing is kinda important. I wrote some mathematical helper functions using trig and linear algebra to be used in my prototype. I just slapped the functions together quickly, did some rudimentary tests which appeared to perform as expected, only to find that when I ran the prototype, I'd get odd unexpected behavior. I could spend a lot of time trying to debug the prototype logic and write some hackish "fixer" code, but the underlying cause is the helper code. I need to have complete confidence that my underlying functions yield the correct results, so I've started writing more rigorous test cases. An example from earlier today would illustrate this better...
I have a creature with a facing direction represented by a radian angle. He needs to face an arbitrary direction chosen at random. To get to that arbitrary facing direction, he needs to turn either left or right by an unknown radian amount. I have to write a function which receives the facing direction and the desired direction, and returns the shorter turn angle. Keep in mind that if you're facing 45 degrees and need to face 315 degrees, its shorter to pass through 0 degrees.
So, the function signature would look like this:
public static float TurnDirection(float currentDirection, float desiredDirection);
I had a small bug in the implementation (used pi/4 instead of pi/2) which I didn't notice.
To correctly test this, you'd want to write a small function to test every angle against every other angle and see when and if the results get funky. Initially, I didn't do this. Instead, I chose to just test 45 degrees, 90 degrees, 135, etc. Which didn't show the bug. This is a better test:
for(int baseAngle = 0; baseAngle<360; baseAngle++)
{
   for(int testAngle = 0; testAngle<360; testAngle++)
   {
      Console.WriteLine(baseAngle + ":" + testAngle + " -> " TurnDirection(DegToRad(baseAngle), DegToRad(testAngle);
   }
}
The underlying bug became obvious quickly and fixing it fixed everything else.
3. Carefully monitor what you're working on and spending lots of time on. Are you trying to tweak little things that really don't matter in a prototype? Or are you building core functionality? Periodically, stop and pause and ask yourself this question and try to be honest with yourself. Skip the teeny tweaking which doesn't add anything (resist the urge for perfection!).

Looking ahead to next week, I've got a four day work week. Next Friday is going to be an american holiday, in which I will be taking a planned vacation for 2 weeks (Iceland, Finland, Estonia). I had been planning to do this several months back, so the vacation has precedence over work. It's going to put a big slowdown on the project progress on my end. Dan will continue working alone in the office for the two weeks I'm gone. I'm going to have to make sure that there aren't any missing details in the design document and he's got sufficient work to keep him busy during my absence. I can't verify that he's showing up to work, but I believe in him and have faith that he'll be honest and hard working. I'm choosing not to worry about it.

Here is a screenshot of the prototype I've built:
Attached Image

It's rough, but you can select unit formations, give them movement orders while setting the formation orientation and length, and send units to fight the opposing faction units. You can also open up mana links and then activate mana balls for spell casting, though there are no spells yet. There's still lots to do, so this is rough and incomplete.


New Studio: Week 2 review

Posted by , 21 June 2014 - - - - - - · 1,466 views
indie, game dev, production and 1 more...
These are my reflections on the second week of my new indie studio. I wrote them at the end of each day of the week while things were fresh on my mind. It's a bit unedited and long, so bear with me.

Links to previous weeks: [Week 0] [Week 1]

Monday:
I spent the early half of the day trying to figure out how to implement Perlin noise. The plan was to implement it first in C#/XNA to get the code right and tweak the values to get it how I wanted. Then, I'd take the perlin noise algorithm and my tweaked settings and use it to procedurally generate terrain in Unreal Engine 4. Unfortunately, the terrain system in UE4 doesn't seem to support loading a procedurally generated heightmap during game load... or I'm just really ignorant on how to do it (very likely, considering my lack of experience).
Since I can't get that to work, I'm now thinking that I may have to come up with some alternative solutions. Perhaps having a procedurally generated terrain map isn't such an important feature to the game play. Maybe I can just create a sufficiently large terrain and let things like city locations and factions be randomized. Maybe that would give enough randomness to provide sufficient replayability? Or perhaps, I can pre-generate 20 height maps and randomly select one during the game start? Combine that with randomized locations and factions, and it might be "good enough", and allow us to hand build each terrain map. Maybe even 10 maps would be sufficient? It would certainly cut down on our future testing. Or maybe, I forget about the whole effort to generate random terrain altogether and create a fixed land (similar to how "Mount and Blade" does it). The focus of the game play isn't so much on the terrain features and rolling for a good starting position, is it? I don't know yet. Whatever the case, the playable prototype doesn't require it.

Tuesday:
Designing a game is really, really hard! I think I have slightly underestimated the effort and work which needs to go into it. I had written a 15 page design document which was a bit specific in some important areas and vague in other areas. When writing it, I had sort of this lazy attitude of "Eh, I'll figure it out later when I get to it. This is good enough for now." But it's not good enough yet. My artist has read it carefully and is confused on what I'm envisioning. He then went in a wrong direction, and when he told me about it, I initially thought "Oh wow, that sounds really good! I like where this is going.". Except, it was wrong and didn't fit the vision and introduced some new game design aspects which I hadn't considered, and then we were both a bit confused about how it would all work together. This wrong direction suddenly starting turning into a really complicated beast and would take a lot of work, and wouldn't add anything of pertinent value to the player.

I spent the better half of the day drawing storyboards and user interface wireframes in adobe photoshop. After lunch, I needed to write up a detailed description of all of the races in the game, how their societies behaved, what their motivations were, what their strengths and weaknesses are, and a bunch of background lore. All of this should help my artist get a better visualization of the "theme" to use for creating the characters and architecture. I think, if I was going to compare designing to anything, it would be like trying to paint a dream as you're having it. You have a pretty good idea what the general picture looks like and how everything works together, but when you start scrutinizing a particular detail, it gets fuzzy really fast. The challenge is to coherently fill in those gaps so that the whole image still works.

To my frustration, I had spent an hour and a half writing up all of this lore and detail on each of the races in the game. I kept on saving my word document, but it wasn't actually being saved. I don't know where I was actually saving it to, or if it was even being saved at all, but as soon as I closed the word document, I lost all of my work. I spent a good 15 minutes looking for it, combing through my limited files for it on both computers. No luck. I could spend a lot more time searching for it and never find it, or I could rewrite it as fast as I can while all of the details are still fresh in my memory. It was an irritating setback. From now on, I'm not going to just press "Ctrl + S" and assume everything is saved properly. I'm going to have to save it as a new file, open it, and verify it saved correctly before closing the working copy. It could have been worse. I'm treating my lost work as a "First draft" so that I don't get too upset about it.

It's occurring to me that it's rather convenient to be both the designer and the producer at the same time. I don't have to have meetings with anyone to figure out which features I have to cut due to production constraints. That might come to bite me in the ass later on though in some unforeseen way. We'll see.
I'm also realizing that I'm not a particularly good manager... yet. I think I'm able to keep both of us productively busy throughout the day, but I'm a bit irrationally worried that we're already on week two and haven't started seriously producing a prototype. I'm mired down in all this design stuff, so I can't be spending my time learning the ins and outs of the engine we're using. Classic to me, I'm just going to say, "Eh, I'll worry about it later. What I'm doing is pretty important right now too."

Wednesday:
Somehow, I spent the majority of the day rewriting the detailed descriptions for each race I imagined would exist in my game world. I turned out to be ten pages of formatted text. It's still a bit rough, but the gist of the game is starting to take shape. I showed it to my partner and asked him for feedback. Was I being crazy for including so much detail?
I then went on to detail the unit system within the game. I guess I have a love for component based systems, because that was my first instinct. I create the base human character, who has a set of base attributes. By giving him a pitchfork and a torch, he becomes a peasant. By giving him a spear, shield and some leather armor, he becomes a lightly armored spearman. etc. It's crazy micro management and customizability. This same system follows for every variation of human units, all the way to gryphon riders. I had to get a sanity check to see if I was going overboard with this and if it would entail too much work. The consensus was that we should go wild with our design and imagination. If we can describe how everything works in vivid detail and have enough time and resources to build it all, then that's great. If we don't have enough time and money, then we can cut some features or scale them back. But, regardless, we know with great clarity what exactly we're trying to build, what it should look like, and how it all should work together.

So, I'm a bit excited about this game we're building and I'd like to describe it a bit. It's a 4X wizard game which draws heavy inspiration from the following:
Merlin (BBC show): I like the idea of magic being illegal and the drama that creates. I also like the sense of shrouded mystery.
Harry Potter: The idea that spells can be countered with a bit of ingenuity, and the sense of wonder and discovery
Total War series: No game does large scale combat formations and tactics better.
Magic: The gathering: Their magic system has the deepest and most intricate spell mechanics I've seen.
Mount & Blade: The character creation process is innovative
Stronghold: I love how you can design your own castles and place buildings and have an economy going
Gnomoria & Terraria: Both have a fantastic crafting system I'd like to borrow from
Dungeons & Dragons: They have the second best magic system and lots of lore surrounding the various creatures.
So, the gist of our game is that you are a young person who has come of age and discovered that you are a magician. This is good, except for the fact that magicians are hunted and burned at the stake. You are suspected of magic and barely escape the clutches of an angry mob of peasants armed with torches and pitchforks. You escape into a secluded land and decide to build a shack for shelter. You spend your days exploring your magical abilities, and soon discover how to cast a bolt of magical energy. As your latent magical skills increase, you are able to summon imps who will do menial tasks, such as gathering berries, chopping trees, and other chores unfit for a wizard. You improve your shack into a respectable abode, and soon enough, a few human settlers are attracted to settle nearby. You've started a meager kingdom! They get to work building a home and gathering food stuffs, and eventually, more and more people are attracted to your kingdom. Meanwhile, you spend your days managing your humble village and researching the depths of your magical knowledge. A novice wizard wants to join you, so you establish a formal mage guild. He spends his time training and assisting you with spell research. Do you want to improve some of the existing spells you've discovered, or try to discover new ones? The choice is yours! However, you cannot rest easily. A nearby graveyard has started becoming restless, with villagers reporting undead wandering among the gravestones. Soon enough, a few skeletons wander into town and start attacking your citizens. Its up to you to fend them off! Do you create a peasant militia? Or do you use some of those magical spells you discovered? Eventually, your meager villa ge grows into a town, and then a sprawling city, and a great metropolis. You may choose the path of good and raise an army of human soldiers to defend your kingdom, or you can choose the path of darkness and kill everyone in your city and raise them as undead, conquering your neighbors and growing your undead army with their corpses. Regardless, you also get to choose the appearance and functionality of every single building in your city. You design them from the available resources you have on hand. Need a house to be built quickly and on the cheap? Build it out of sticks and straw. Watch out for fires though! The function of a building depends entirely upon the furniture and equipment you place inside it. If you place a bellows and an anvil in the same house, you have a blacksmith. Maybe if you make the house a bit larger, you can also fit a smelter in there. Voilà, your smelter/blacksmith can now take raw iron or and create finished iron goods! Should your smith also sleep in the same house he works out of? Or should he sleep and eat in a separate dwelling? You are also a single wizard with limitations on what you can see and do. If you send an army into a neighboring kingdom to siege an enemy castle, you don't automatically see what the army sees. It goes into the fog of war. Your only communication with that army is by sending messages via messengers. How goes the siege? You send a message to enquire. Suppose an enemy agent captures your messenger while its enroute and they change the contents of your message. Rather than asking about the status of the siege, your message now urgently orders your army back home to defend the home capitol. They abandon the siege and rush home. Then, there's a lot of confusion on why they came back, until you find an enemy agent tampered with your messages. (one scenario of many possibilities).

Anyways, I feel that its easy to come up with these game mechanics but each one is going to be very complicated and difficult to implement correctly. Each one may add months of extra development time, depending on my proficiency with the tools. I think as far as project management goes, an iterative approach is the best approach. But hey, I'll worry about it when the time comes.

I met a buddy from highschool today for drinks and was telling him about my game. He asked me, "Who is the target audience for this game?" and without a second thought, I said "Myself!". I figure that if I build a game which I absolutely love playing, then I built it right. I assume that there are some people in the world who have the same tastes I do, and will immensely enjoy something like this as well. It might turn out to be popular, or unpopular, but regardless, let's not get ahead of ourselves... I have to build the game first.

Thursday:
Alright, the game design document is sitting at about 26 pages and is "good enough for now". I'm not going to spend much more time adding to it. This afternoon, we went to lunch with a nearby game designer who works two blocks away. After lunch, we showed him our game concept art, gave a quick overview of our game mechanics and design ideas, and got some good feedback. Most of the things he mentioned were things I had already considered, so it was good to get an affirmation that we were on track and doing things right. He did mention a few interesting things:
1. You don't want to have religious symbols in your game (especially Islamic stuff) because it will upset certain people and cultures. Make up your own religious symbology if you have to.
2. Be wary about having children in your game. Can the in-game children be killed? If not, how does that affect game play when you want to kill everyone in a village (see: Skyrim).
3. The game design document is mostly for pitching your game to publishers and investors. If you don't have to, don't spend a lot of time on it. Instead, spend that time building a prototype.
4. Don't underestimate the time it takes to balance an RTS game.
We also had a visitor drop by from upstairs. There's another indie game studio on floor 13 who are working on a web-based MMORPG using HTML5. They're a team of five who have been working on it for over a year, and they've finally gotten to the point where they can start building in-game content and creating a playable alpha. The guy running the place said that they have a big problem with the current build of their game: It's just not fun. Supposedly, their business operation involves paying workers in equity instead of a steady paycheck. I know I wouldn't like that if I was an employee there because you're taking a huge risk if the game doesn't sell well. I don't even know what their final business plan and marketing plans are and how they're going to make money, but that may just be because they didn't tell me. Regardless, I am very interested in learning everything I can about their project and progress in hopes of spotting traps and pitfalls they made so that I can avoid them in our game production cycle. I mentioned that we'd like to stop by some time, and maybe to do lunch next week. I'll have to make a note to stop by and pester them to see how they're doing.

Today I finally purchased Maya 2015 and Mudbox. The total price came out to about $4600. I was trying to pay by debit card but my purchase was being denied by my bank since I had a daily $2000 spending limit. I had to work with my bank to get that temporarily boosted. I went for a "download" option to get the software asap, but it seems that Autodesk takes up to 24 hours before you can download the software. Watch out for that if you're on a time crunch.

In UE4 news, I figured out how to create layered terrain (dirt, grass and snow). It's a bit more tedious than I expected since you have to use a paint brush to paint materials onto the terrain contours. So, I could foresee it taking a while to create some decent looking terrain.
I also figured out how to create a moveable player character and bind keys to different events. It was a bit ridiculous and unintuitive, but it only took me about 2 hours to figure out. Compare that to taking a week and a half to manually build my own robust input system, and that's a trade I'll take any day.

By the end of the day, I was shocked that it was already 6pm. The day went by so fast, I had no idea where the time went!

Friday:
I spent $4500 (tax included) on the Maya download and I still don't have it. The Autodesk site said it may take up to 24 hours, but I haven't heard a peep after they took my money. WTF? Not cool. If I don't hear anything by Monday, I'll have to contact their support.

Today I focused on trying to figure out how to start building my game using Unreal Engine Blueprints. I detailed out how my camera controls should work and tried to start implementing them. I couldn't do it. I was perpetually confused and overwhelmed by how everything worked together. The unreal tutorials, documentation and samples are good for showing you the basics of the engine, but they don't explain the architecture of how everything works together. When it comes down to it, I think I'm really going to have to just look at the samples and do trial and error. An alternative explanation is that all of the documentations and tutorials make perfect sense but I'm just too dumb to get it. Contemplating that possibility and its repercussions on my project worried me and got me a bit depressed. Suppose it's true. Suppose I'm an idiot and I'm too dumb to see it. Suppose someone smarter was in my position doing what I'm doing? They'd succeed. If I fail, it's because I'm dumb. Think about it. If I'm a shit developer, and the project depends on me to be the technical expert, then the project runs a high chance of failure. *sigh*

I don't know that I can really call myself a shit developer though. I mean, I've been programming as a hobbyist and professional for 16 years. I worked as a senior developer in afghanistan (though, titles really don't mean anything) and have been able to build lots of tools and applications. I worked on my own game engine for 10 months without significant problems. So, objectively, I can't call myself a shit developer because a shit developer couldn't do all that. So... what's the conclusion? Learning the ins and outs of a new engine is going to be a slow and painful process full of frustration and self-doubt. I wasn't expecting that. I was thinking that I'd just download the engine, do tutorials for a week or two, and then be adequately proficient to start building my game and run with it. Nope! Apparently it doesn't work that way.

I don't know if its the blueprints themselves and trying to wrap my mind around it, or if I'm more accustomed to writing code. By the end of the day, I was half tempted to just abandon blueprints and go with a C++ scripted project. That would have its own frustrations as well, so I'd probably just be jumping out of the frying pan and into the fire. It's better to just suffer through the frustration and try to figure it all out. Small baby steps, little victories, one at a time. I can make this work.


New Studio: Week 1 review

Posted by , 15 June 2014 - - - - - - · 1,619 views
Business, Production, Indie
The first week is over. The work days certainly feel a lot longer and much more busy. I thought I'd spend this journal entry detailing a few of the first week issues that I experienced and how I worked through them.

On Sunday afternoon, the day before the first day, I spent most of the day building a computer for my artist. It's got 8Gb of ram, 2tb of disk space, an Intel i7 processor, and an NVidia GTX 760 video card. It's a top of the line machine. I also installed Win7 Pro, downloaded all of the latest updates, installed Unreal Engine 4, Notepad++, and Chrome. It's pretty bare. I made sure to download and apply all of the latest windows updates and got the machine "work ready", so my artist could just jump in and be running as soon as possible.

On Monday morning, I had to drive a car to truck the equipment over to the office. I had to park a block away in some ridiculously overpriced parking garage ($27 for a day!). I got to the office and found a trolley cart I could use to haul my computer equipment on. I was a bit nervous about the whole thing. I had over $5k worth of computer equipment on a cart and I had to cart it through a block of heavy pedestrian traffic. All it would take to ruin the day is for someone to see something they like, grab it, and run off. I can't chase them down because then I'd be abandoning the rest of my gear, which would be free for the taking for everyone else. Fortunately, nothing happened. I got my equipment upstairs, got it setup with no issues in 45 minutes, and everything turned on and worked perfectly. Good start for the day.

I sat down with my partner and we talked about the visual style guide. Since we're only two people, we can't afford to spend as much time and effort making super high quality, realistic graphics. While we have the capability to produce high quality graphics, we don't have the time. So, we're aiming for a bit more of a cartoonish stylized look. This will let him get away with more things, which will speed up his production cycle, and get assets in game faster. I asked him for a list of all the software he would need in order to do his job:
-Maya 2014
-Adobe Photoshop CS 6
-3D studio max
-Crazy Bump

So, Maya costs $3,675, without a required "1 year service plan" (actual total: $4300).
3D studio max has the exact same licensing plan.
I looked into the latest version of Adobe Photoshop. They had this hare-brained idea to release the latest version of photoshop as a "Software as a Service" offering branded as "Creative Cloud" instead of a stand-alone license. If you get this, you can look forward to expensive monthly payments and creating a dependency on Adobe's servers which validate your software each time you launch it -- when the servers go down, which has happened, you don't get to run the software and you're dead in the water without any recourse or recompensation. I'm inclined to hate on the newest licensing scheme bundled with Photoshop, so I'd rather get CS6 than CC.

The total bill for all of my artist's software tools comes out to around $10,000. I balked at first due to sticker shock, thinking it was a ridiculous price. Let's face it, $10,000 is a lot of money to drop on software. If nobody is watching, why not just pirate it, right? It's really tempting. We had a short discussion on the software piracy option. We were both reluctant to go that route. It opens up a bunch of uncomfortable legal liabilities and ethical dilemmas. How can we rationalize stealing someone else's software for free and at the same time, expect people to pay for our software? It's not possible to rationalize the double standard. I decided that our best course of action is to download and install the 30 day free trial versions (which thankfully are a full feature set) for the interim while I move some money around to legally purchase all of the necessary software. Whew! No laws broken, no ethical dilemmas, no stoppage of work. It'll cost me a lot of money, but in retrospect, I'm okay with that. It's money I'm *investing* into my business, not money being flushed down a drain. Best of all, I can comfortably say in all honesty that we're 100% legally compliant.

I was also looking into the purchase of other software tools and premade assets. There are some really good tools out there which can create awesome landscapes, trees, etc. It's expensive, but if you look at it from the business stand point, you have to ask yourself: What's more expensive? Spending a fixed amount of money to acquire a lot of assets in a short amount of time, or spend an indeterminate amount of time and wages to create those assets in-house? What are the opportunity costs? What are you not doing while you're recreating available assets? It's actually cheaper and faster to put the money down on the third party tools and premade assets.

On Tuesday, I set our goal for the week to learn the Unreal Engine 4 as best we could for each of our respective areas of expertise. We each probably watched about 30+ youtube video tutorials and followed along. I also started trying to dive in and start building game content to get a feel for where my knowledge gaps would be. My ten months of attempting to write my own engine were not entirely wasted. I find that I know what I'm trying to do, I have the technical back end understanding on how to do it all, but now I just have to figure out how to translate the syntax of what I'm trying to do into UE4 and figure out how to close the gaps in implementation. I'm guessing it'll be a month long learning curve to get proficient with the engine.

I realized that the desktop machine I had been using for 2+ years was actually quite slow. I started digging into the UE4 Materials editor and every time I tried to make a few changes to a material, it would use a back-end process to compile 200+ shaders so that it could update the editor view in real time. This shader compilation process took about 3 minutes each time it ran. Sometimes, changing a single float value would trigger an automatic recompile, and there was no way to just compile them manually. I asked my artist if he was experiencing the same issue -- he had no idea what I was talking about because his computer was super fast. I had an intel CPU with 2 cores running at 3.5Ghz. That lets me run two seperate threads of execution simultaneously. My CPU was pretty much maxed out at 100% usage. I needed to upgrade my machine. That evening, I put in an order for a new CPU and motherboard on Amazon with prime shipping. I thought I'd be smart and have it shipped to an amazon locker a few blocks away. It would arrive in two days, so that puts me at Thursday.

On Thursday morning, I went to look for this Amazon locker place. It was really hard to find. It took me about 30 minutes to find it, but I got my parts. During the last hour of the day, I disassembled my workstation and installed my brand new motherboard and CPU. I turned the computer back on but Windows 7 Pro couldn't handle the hardware changes without continuously rebooting or throwing up a blue screen of death. Well, that's disappointing. I attempted to repair windows with no luck. That left me with one final option: Reinstall windows. I left that for Friday morning (which turns out to be a bad idea). During the evening after work, I realized that I really should back up all of my important files before doing anything else.

On Friday morning, I got in to the office and put my old hardware back in and booted up. Luckily, everything loaded with no issues and I could get to my old files to back them up onto an external USB hard drive. After I have my files backed up, I swapped my motherboards yet again and tried to install a fresh copy of windows on the existing hard drive. That wouldn't work. The windows installer couldn't install a fresh copy without reformatting the drive. It complained about the master boot record or something. I didn't want to reformat my 500gb drive since it had a LOT of stuff on there I didn't want to lose. So, I came to the realization that I needed a new hard drive. Its 10:30am and I realize that I need to make a trip out to the nearest electronics store (Fry's) which is quite far away. I had to take the train home, get in my car and drive to the store. All in all, it was a 2.5 hour trip (waste of time). I also picked up a new DVD rom drive since my old one used an IDE cable and the new motherboard only supported SATA. I get back to the office in the afternoon and am able to finally install the hardware and get things running. There was a slight hiccup though: The SATA hard drive did NOT include a SATA cable with it (Thanks, Western Digital!). I read the packaging and in fine print on the box, it mentioned that. Lesson learned: Always read the packaging contents. Don't assume the manufacturer will include everything you need.

I finally got my computer running late on Friday afternoon. I started up the Unreal Engine and was blown away by how fast it ran and how crisp everything felt. The background shader compilation no longer caused wait times, the UI was incredibly responsive, and I had no glitches caused by CPU delays. It was totally worth the money to upgrade. By the end of the day, I had built a decent landscape and populated it with a few foliage static meshes. I also had dynamic lighting, a sun with bloom and light beams, and nice shadows. It all ran very quickly and with nice crisp responsiveness. I had now just built a level which had more technically advanced features & capabilities than my own game engine and it only took me a few hours. This is 100% the way to go.

I'm also happy that I got the exact same hardware as my artists computer. Consistency is good. I predict that the duplicate hardware configurations will be something I'm thankful for later.

That wraps up my first week. My final costs for the week are the following:
$2000 - Artists computer
$550 - Monthly office rental
$950 - Wages
$50 - Incidental expenses
$600 - Computer upgrade
$20 - UE4
$10,000 - Software tools
It was a little more painful and expensive than I had predicted, but I rolled with the punches well enough and made things happen.

On a slightly separate note, I think it was a great business move on my part to work out of an office. When I was working from home, it was very easy to be tempted to distract myself with time sinks such as facebook, reddit, youtube videos, and video games. Sometimes I gave in and hours later, would realize how much time I had wasted. Working from an office space creates a bit more pressure to stay focused and on task. I have had zero temptation to distract myself, so I was able to put in a full days worth of work in every day. There's an additional financial pressure to stay focused as well: Every day, I am paying a lot of money to work and get things done. If I don't work, then I'm just throwing my money away. I didn't work hard to save it all up just to throw it away, so I need to get the most value out of every day to make sure it's worth the money being spent on it.


Starting my studio

Posted by , 05 June 2014 - - - - - - · 6,360 views

Well, I'm taking the dive and going full on into starting my own game dev studio as an indie developer. I'm paying entirely out of pocket and have zero business income. It's got me a bit nervous.

I hired my first 3D artist/animator last week. He was asking for $36k/year, I counter offered a much higher offer @ $50k/year. My reasoning is the following:
1. I can afford to pay someone well.
2. Paying someone well is much better than paying them the bare minimum. You get what you pay for.
3. It makes it harder for them to justify looking for a higher paying job elsewhere. I don't want to be an "in between gig" employer.
4, This gives them the means and power to live a more professional life rather than just scraping by.
5. I also think its more ethical to pay people what they're worth rather than making a race to the bottom. It's the fair, kind way to treat people.
6. I'm not just paying them to work with me, I'm also treating them as an investment. I believe that high quality talent is grown and nurtured over time. It would do me no good to train up high quality talent and then see it leave me for greener pastures. I need to be the green pastures talent flocks to.

I suppose some people could accuse me of being a poor businessman for paying more than I need to. Fair enough. I like to think that I'm getting into business to do two things:
1. Make a high quality commodity which everyone wants (a great, fun video game)
2. Create stable, well paying, sustainable, satisfying, desirable careers at a place people want to work at.

The best time to start doing this is from the very beginning. It's much harder to change course later.

I also made another major decision last week. Instead of focusing all of my attention and effort on building my own game and game engine in C#/XNA, I should use an existing game engine. This sounds like a no-brainer, and I knew I should do this from the beginning when I first started my project, but I was stubborn and a victim of the "Not invented here" syndrome. I spent ten months working on my own engine. It was coming along nicely, but I had this nagging thought in the back of my mind: I'm wasting my time. I could spend years building my own engine, as a team of one or two people, but... what's my end game plan with this? Am I going to sell it? How could I begin to compete with the popular engines out there (Unreal, Crysis, Unity, etc) who each have teams of 50+ engineers who are much smarter than I am? I can't. So, my rationalization was that I'd own my own engine entirely, be 100% familiar with it, and use it to build a game which I'd sell. The money would come from the sales of my game. So, looking at my timeline and pace, ten months of half-assed work and barely a semblance of a game to show for it because I've been focusing on engine design tech and features and getting deep into the weeds on that. Waste. Of. Time. At this point, the only reason I'd continue this pursuit is for my personal ego. I'm convinced I could do it, I'm smart enough that I could make it happen, etc. I've also gotten this far, do I really want to throw out ten months worth of effort? My logical, rational side said I was putting myself into an escalation of commitment situation. The sooner I realize that I'm not going to have reasonably good chances at making a successful game with my own engine, the less expensive it'll be (in terms of time and money). Not to mention, my engine would have to incorporate a production pipeline for team members and support a game editor. Fuck that. I don't want to build more tools. I want to design and build games. That's what I'm here for. So, the obvious decision to make is to choose an existing engine and use it as the platform to build my game on. I see that now and actually believe it.

What engine to choose? Initially, I had been playing around with the Unity3D engine. It's a sexy engine, with an amazing editor. I don't know why I didn't choose it ten months ago. The Crysis 3 engine was released on steam a few weeks ago. It also looked very sexy and offered some amazing capabilities which I could use. It looked attractive until I started reading reviews and digging into the online documentation and tutorials. Their game engine is tailored specifically for building FPS games and the documentation is sketchy at best. If I'm learning something new, I can't be wasting weeks playing the "learn by trial and error" game, nor expect anyone else to. The better alternative is to use the Unreal Engine 4. After looking at their feature set, it's just as good or better than CryEngine, and they have zounds of documentation and online video tutorials. Not to mention, lots of great multi-platform support. So, how does that compare to Unity3d? Aside from the pricing & licensing models, they both have different technical strengths. Unity3D supports C# scripts, which is very sexy and I like that a lot. I didn't like their IDE nearly as much as I like Visual Studio though, so they lost some usability points there. The Unreal Engine 4 has support for "Visual Scripting", or whatever they call it, where you don't even have to be a programmer to create scripted behaviors (great for designers). It also supports compiling C++ code as well for any heavy scripting needs. I'm sure I could have been equally happy with the Unity3D engine as the Unreal Engine 4, but I just picked the UE4 because it seemed more usable and well documented, and supported everything and more that the Unity3D engine supported (including asset market places). Anyways, ten months of work has been put aside in favor of using a game engine. I figure that in a month, I can make up all the progress I've made, learn a new engine, and be years ahead of myself if I had stayed the course with my home brew engine.

There was a third, major decision I made this week: I chose to rent out an office space in downtown Seattle.

For the past ten months, I've been working from an upstairs room in my rented home. It's worked out alright, but not great. While I can work from home, I'm finding it's not my optimal place to work from. There are a bunch of problems which come with that, such as not getting distracted, trying to get into the mood to work, trying to make a distinction between home life and work life, etc. I could continue to do it if I was alone and it would still be sub-optimal. But, since I hired an artist, things have to change. I initially considered having him commute to my home to work with me. My girlfriend isn't happy with that idea and its not a very viable situation. So, I can either continue working from my home office and have my artist work remotely with maybe a weekly meetup, or I can find an external space for us to work out of. Now, working remotely sucks. It's hard to build a team with an organizational culture, keep cohesiveness, communicate, and keep everyone on task (especially me) when everyone is working apart from each other. That means remote work isn't very viable for me and my business goals -- in other words, the benefits of working together in person outweigh the costs of an office space. So, I had to look for an office space as soon as possible. I only have a team of two people and I don't want to spend thousands of dollars per month to rent out a large office flat. It's overkill and way beyond my needs. I found a cool co-operative shared office space with a bunch of other creative types who do video editing, web development, and video production. It would work great for creative cross-discipline pollination. We fit in pretty well with the general vibe of the existing office culture. Not only that, but the office managers have a fully stocked bar with free alcohol, comfy couches, meeting rooms, white boards, candy, coffee, everything you could ask for. It's a very hip office space on the fifth floor. I agreed to rent out two desks for $750 per month. That's almost as much as my share of the rent O_O

This weekend, I'll be building a custom computer for my artist. It's a top of the line specs machine I put together online. On Monday morning, I'll be moving all this equipment into my new office space and beginning work from there. It's a lot of big changes. It's exciting and I'm nervous. I've calculated my new monthly expenses and they come out to about $6,000 per month for me, my employee, offices, etc. This game I'm building had better be great and sell well. I'm betting my life savings on it. There is so much that could go wrong and be totally outside of my control.

I guess the biggest threat to my success is myself though. I've got this bad habit of laziness which I need to kick, and a slight tendency towards making stupid mistakes when I really should know better. I need to work on those personal traits of weakness. A business/organization is a manifestation of the character of the person leading it, and I need to be the best version of myself I can be, for the sake of myself, my employee, and the people who are going to be depending on me. If I can't compel myself to excellence, I can't ever hope to lead others to it either. I've put my money where my mouth is, I've put the logistical works in place to make it happen -- now it's time for the hard part -- to buckle down and get a game built and on the market faster than my money evaporates. Everything is in my control now, so I can only blame myself if failure happens. Let's cross our fingers and hope that doesn't happen and try our best to succeed.





June 2014 »

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Recent Entries

Recent Comments