Ostensibly I've been working on getting a trailer ready for Miranda's early access launch. What I have actually been doing is avoiding recording anything, playing with the game, polishing features and working through a surprising amount of the feedback and bugs that showed up in last month's test weekends.
Probably the best thing about making the trailer is that more and more of the game is making me think that is so cool! This might actually work!!! Working on a game, focusing so much on what is broken all the time, you can go a really long time without that feeling.
[I love the glassed biome.]
I was surprised to discover what an exhausting job it is to select music to go with the trailer. I can't remember when I felt so tired as I did after spending an entire day listening to mostly-awful stock music. It's just so depressing. Out of several hundred tracks and several complete symphonies I listened to, I found three tracks I liked but they were still more or less unsuitable for what I have in mind. I briefly toyed with the idea of making my own music using loops because hey, I did all this other stuff myself! But I know nothing about music composition and that seems like a rabbit-hole. So I'm going to hire a composer to do the music for me. It seems to be the only way to get music that I'll be satisfied with. It also makes another clever, but previously unimaginable feature possible, so that is doubly intriguing.
Something I really did enjoy listening to this month is the Inception soundtrack in surround sound. It is a blu-ray extra, but after listening to it a dozen times, I think all soundtracks should be presented in surround sound. That also got me thinking about surround sound for Miranda. I was not entirely surprised to find that neither the Unity nor the Steam hardware survey sites have any information on how many computers support surround sound output. I've had a 4.1 system for years but I wonder how many gamers still only have mono?
I've switched to using the GeForce Experience for game recording. I tried a bunch of other programs (FRAPS, OBS, my own solution) but NVidia's gives better quality video with less performance penalty and is really easy to use. The only problem I had to work around is that GeForce Experience records the mouse cursor, which I don't want in my trailer, so I added a hidden feature that when turned on causes the mouse cursor to disappear if it hasn't moved for 2 seconds.
While I was testing a bunch of laser towers against a single ATV I noticed that often the ATV would explode without any awesome looking laser effects at all. A player had reported units blowing up unexpectedly during the test weekend, but I hadn't seen that myself. It turns out that when weapons made really short work of enemies, sometimes the message that a unit was dead would show up and cause an explosion before the attacker's weapon had a chance to play its weapon visual effect. Digging into it I discovered that there was up to half a second delay before weapons would turn on their visual effect after they were notified they were attacking someone. I eliminated that delay which has two interesting effects. First, laser tower fire is no longer synchronized, which looks cooler I think, and second, most of the time you see the weapons fire before the explosion. It is still possible that the notification of an attack for the attacker and the notification to the target that they are dead (and to explode) show up at exactly the same time resulting in no weapon effects, but since the elimination of the delay I haven't seen it. I have an idea to guarantee that weapon effects always get a chance to play, but I'm saving that change for later.
For another shot in the trailer I wanted lots and lots of tanks, so I proceeded to build them right up to the unit limit. Every time I ran low on money the construction queue would pause, then unpause like it is supposed to when a harvester came into the refinery. A player on the test weekend had a problem where their construction queue would get paused and then never unpause. It even persisted when you logged out and back in. There were only two things that paused the queue, and I realized that pausing the construction queue due to parts unavailability (which was what was happening) was not going to work. Now the game cancels construction on any units you don't have parts for and the queue only pauses if you run out of money. I still need to fix the problem that you can't cancel a unit once it is built, but at least when the queue pauses you aren't dead now.
[Large force of tanks on the move.]
Once I had my 140 tanks another problem showed up. The particular tank I chose has a lot of wheels, each wheel is a draw call, and with all those tanks on the screen at once, I was far over the draw call budget my graphics card could support and the game was cranking along at about 12FPS. I spent a day looking at that problem. First I ran a couple of profilers against the game to see if I was doing anything stupid, but no, that wasn't it. Previously I had considered combining all the non-moving meshes in models into a single uber-mesh when the models are imported into the game to reduce the number of draw calls at the expense of vertex memory, but after a couple hours of looking at that, I realized a much better solution would be to make the renderer support instancing (drawing many instances of a single model with a single draw call - like 2,000 tanks in one go.) That would drastically reduce the number of draw calls for all those tanks while keeping graphics memory usage lower. Sadly that's a big, complicated change so I decided to defer it also, and instead I'm just going to throw a much faster computer at that particular problem.
I logged out and logged in, and another problem that a player reported during the test (that I had looked at before with no luck figuring it out) occurred for me. With all those tanks, when I tried to tell them all to move, there were too many for a single network packet and the server crashed because it thought it knew about all of the tanks that were moving when it actually didn't. Oops. Fixed that.
Since I had several other bases to build and building all those tanks took most of an afternoon, I changed the build times on all the units to 50 milliseconds and changed the amount of money an administrator gets to start to be 50,000,000 - eliminating the need for all those harvesters I needed to build all those tanks. I have to say, that really speeds the game up. When I was looking at that I realized that regular players were getting exactly twice the starting money they were supposed to - oops, so I fixed that. While I was reducing the build times I realized that I had all sorts of partially complete units that weren't in the game. That was a lot of nice art just sitting idle waiting for me to finish each one's special abilities. So I turned all those components on temporarily so I can use them in the bases in the trailer.
With all the new art turned on, I realized that not all of the new components were showing up on the vendor pages like they are supposed to. Fixing that took another half day.
[That is the wrong location for that.]
Readying the game for another shot for the trailer, I noticed that the crashed spaceship was in the background of my shot (not where it was supposed to be.) My system for managing the location of items like the crashed spaceship is still very manual (ie I type in their coordinates and rotations by hand) and it takes about 7 minutes to rebuild the terrain each time I change the position to check it, so that seemingly simple fix ate an entire afternoon.
[Back where it belongs. Check out my bank balance!]
Next I was fine tuning the positioning of one of the buildings when I realized I couldn't place it where I wanted because the game thought it was already there. Logged out and back in, and it was floating 20m off the ground. Fixed and fixed.
It has been really nice that the server so rarely crashes since you all tested it. It makes development a little faster for me.
So while the trailer hasn't progressed like I would have liked, I've changed or fixed 90 items this month. I said a couple weeks ago that my TODO list is down to: trailer, test weekend, press, store, early access. Nothing has changed.