Development Update

As part of my relentless match to a release quality playable demo, I’ve been working hard on some underlying tech issues and feedback that were considered good enough for whiteboxing but definitely not good enough for the public.

The Key parts of this I’ve been working on:

  • Audio
  • Fonts
  • Player Movement/Control
  • Navigation & Signaling

Audio

Something quite obviously missing from the Engine all this time has been any audio whatsoever. Audio in Alaska has taken a back seat to Graphics, AI and other features because it’s not going to be integral to the experience, good audio is extremely hard to get right as people notice even slight defects in the production process. Which is why it’s not a great idea to focus on it if you know you aren’t going to be able to do an excellent job. Doing an excellent job costs a lot of resource and expertise. Saying that, no audio whatsoever is jarring and people find it difficult to engage with a world without it. So I’ve implemented a basic sound system built on Open AL which currently only supports RAW audio. It suits my needs for the time being but I will likely extend it to be able to support a container format like ogg later.

Fonts

I’ve been using the inbuilt Direct3D font rendering tech to draw text up until now and it’s unsuitable for production for serveral reasons:

  • It has no shader pipeline support
  • It’s slow
  • It requires a draw a draw call to get metrics about a piece of text for formatting

For these reasons I’ve always had a mind to replace it with a better solution, Microsoft would prefer me to use Direct Write but as I’m switch from Direct 3D to Open GL later on I don’t want to couple myself to DirectX any more than I have to, so I’m building a solution with FreeType, which will enable me to use platform agnostic code to prevent me having to port the font code in future. This work is preliminary and I’ll likely be working on it over the next couple of weeks.

Player Movement/Control

For player movement I’ve been using bullets built in Kinematic Character Controller, which is not really considered release quality. I’ve had a couple of issues with it, mainly the player sliding down slopes and not being able to climb steps at low speeds. On the plus side it being open source means I can take it and make it work properly. I’m still working on the slope problem, but the step climbing problem was the more serious one. It meant I had to increase the player speed to levels that didn’t fit the pacing of the game and made it hard to position the player a comfortable distance from the screens in the game, as a result I got a lot of feedback about not being able to use the screens, the screens being too small or fiddly. When I came to make the screens bigger as part of the feedback I realised that actually the screens were a good size the problem was entirely sensetivity. I added a mouse sensetivity option and set the default to half what it was before but to give more sensitivity to the player position I had to slow him down to a sensable speed, losing the ability to climb stairs with the current controller. So I had to fix the stair climbing bug. It took a lot of digging through the bullet source code to find the issue but I tracked it down to the players step code sweep code not detecting collisions with short casts, probably because of floating point errors, so the solution was to change the step code to function with longer casts.

Navigation and Signaling

In my playtest feedback the tutorial, a very short low friction introduction to some of the basic mechanics, is holding players up a lot.

Some of the issues i’ve been seeing include:

  • Ignoring the tutorial text
  • Succeeding a tutorial without realising
  • Misreading the lights cutting out as a bug
  • Not reading the “notes” which are designed to provide hints about how to progress

I’m reluctant to force players to stop and read the tutorial text with a fullscreen popup, so currently I’ve simply increased the size of the tutorial window to make it more prominent, if later metrics show it’s still a problem I may force the text. I’m well aware of the weakness of using popups to train the player and I’ve worked hard to make a lot of the training implicit with the tutorial text as a fallback, my feedback seems to show that I’ve been successful at this as a lot of the basic controls were immediately obvious to the players.

As for succeeding a tutorial without realising it, I think this is an area where the tutorials are defined to broadly. The tutorials are currently satisfied if, for example, you pick up an object, but i’ve always intended them to provide a kind of breadcrumb structure. I wanted you to pick up a specific object but picking up any object satisfied the tutorial. It meant players veered off the course of the very linear tutorial (the rest of the game is very open but the tutorial is supposed to be linear to give you that elder scrolls moment when you finish it). So as a result I intend to reign the tutorial in even tighter, It really is something I want the player to glide through without any kind of friction in order to get to the world exploring as soon as possible.

The lights cutting out have been misread as a bug by several people and the reason is because it looks random and isn’t grounded in the world very well at all. One of the main reasons for this is the lights flicker in intensity randomly and there are no audio cues. I’ve already added an ‘shockwave’ push to the swing door, to both signal there was an explosion and that the swing door is a swing door unlike the other doors the player has encountered. I’m in the process of changing the lighting from going nuts and cutting out to slowly powering off and then the red dim emergency lights cutting in as well as adding a sound to the event.

The players haven’t been reading the notes in the diary when they are prompted I need to push them harder to look at them as it functions like a hint system for when you are stuck I intend to do this by rendering the last received note on the HUD until the player looks at the notes and adding this as a toggle in the options menu. I’m not a fan of HUDs and I’ve been trying to get by with zero HUD but as time has went by I’ve added a few things to it, like signalling when the player has a phone call or wifi access because I’ve had no sound so far, I couldn’t use audio cues nor do I want to rely on audio cues because I want it to be accessible to hearing impaired players, I will likely add a toggle for audio and visual hud cues to the menu also.

 

As well as continuing to work on these issues I’ll be adding sounds to the engine next and adding radios to the world that play music, I’m hoping to make the radios play a stream from a real radio station but I need to make sure the licensing allows for it and so far I haven’t found anything suitable.

Development Update

There are 4 areas I’ve been working on this week:

  • The flow diagram of the second act
  • Dialog with Asher that links the first and second act
  • Bug fixing and code cleanup
  • finishing the encyclopedia functionality and updating more UI elements to the final UI

 

Story

The way I’ve been working on the plot for Alaska is firstly I had a general outline of what I wanted to happen, mainly based very heavily on games, films, tv shows and books I like. Those influences are primarily Blade Runner, Pathologic, Twin Peaks and Philip K Dicks books with Faustian themes, like Galactic Pot Healer and The Three Stigmatas of Palmer Eldritch.

I then broke the game into 3 acts, despite my belief that the 3 act structure is wholly unsuitable for interactive narrative, it’s actually really difficult to break down a story any other way when you are a complete amateur, so I’m trying not to bite off more than I can chew with the writing.

Flow Diagram of the Tutorial, Act 1 & 2, Blurred to avoid spoilers.

So dealing with each act 1 at a time I will draw a flow diagram of all the Key/Gate verbs in the Act and then go about implementing each one and marking it off on the chart as I go, as part of the flow diagram I will often write a chunk of supporting narrative that may or may not end up exposed in the game but is justification for peoples actions and when I come to writing dialogue in any of the steps on the flow diagram I will usually do the same and write backgrounds for the characters and justifications for what they say and try and give them more than just one dimension, again even if it’s never exposed to the player.

So I’ve been doing that this week and it always makes me feel hugely out of my depth because unlike with the Art, which was more lack of interest than ability, I’ve never had an aptitude for writing and I don’t think I ever could. So after working on story stuff it’s always good to go back to the easy, comfort zone stuff. That being coding and UI grunt work.

 

Bug fixes

The code isn’t very clean at all, one of the reasons it’s not open source right now is I need to go over it and clean it up before I’m willing to let people see it. One of the most important rules I have that I just can’t get myself to adhere to is no code in the header file. No matter how important I feel it is I just have a bad habit of not creating the cpp file when I make the class, so all the code goes in the header and compile times plummet. So with a mind to speeding up compile times after reading and implementing the recommendations in this blog post by Bruce Dawson, I decided to set about moving all the code that shouldn’t be in the headers into cpp files and it makes me feel a lot better about the code cleanliness.

Second on the agenda was fixing some of the known bugs. There was a boring issue where there are 2 ways to pick up an object, one is by holding it in front of you and moving it around and the other is by putting it in your inventory and I had to make sure both these methods were supported for using objects on other objects. My favourite bug so far was where you could put NPC’s in your pocket, carry them around and then drop them off elsewhere which was a trivial fix. and there was a fairly harmless buffer overflow when reading files from an ifstream that meant some of the text in the game ended in garbage strings in release mode. Buffer overflows are fairly common in code and are usually harmless, especially in a game. They can cause things like the heartbleed exploit everyone’s banging on about these days but for my purposes it’s good to get rid of it because it can mangle the heap if you’re unlucky.

Finally keeping visual studio in check requires a lot more work than it used to, I link statically to the c runtime which means I need to build all the libraries to link statically to it too which means they need to be static libraries because dynamic libraries don’t always link well to the static runtime, also since switching to visual studio 2012, I’ve had issues with conflicting versions of direct x in this new windows sdk it’s started getting bundled with which effectively stopped gpu debugging tools from working so I’ve had to fix that by being very specific about the order they get included and linked and where they get included and linked from. Lastly Visual Leak Detector has been reporting false positives since I upgraded to 2012 and it’s made keeping on top of leaks difficult, updating to the new version of vld rectified that though which means I can be certain there are no leaks again. All of this is very boring, very time consuming stuff, thanks Microsoft.

 

Encyclopaedia

most of the work on the encyclopaedia, as with all the menus is in lua, but there was one thing missing from the menu system that I hadn’t gotten round to implementing – scrollable button lists. There is already scrollable text boxes and it was quite simple code it affects the inventory too which, before, had a maximum size. The other side to the Encyclopaedia is building the UI elements needed.

 

So that’s everything for this week, No screenshots again this week because as you can see everything I’ve been working on has been pretty bland, I’m  certain there will be new screenshots over the next couple of weeks though, as I work on new stuff. I will finish up by linking to all my coverage I’ve had so far though because I’ve been meaning to get them all in one place for a while now.

http://indiestatik.com/2013/10/25/igf-entries/

http://indiegames.com/2014/02/_waldirs_inferno_by_jeni.html

http://www.indiegamemag.com/screenshot-weekly-alaska-iubes-the-last-federation/

Thanks to all those guys for the coverage, it’s hugely appreciated.

 

 

Development Update

I’ve not had a chance to post development updates the last couple of weeks because i’ve been busy, I have a small list of things to work through before I put out a Demo, Trailer and Greenlight campaign.

Primarily I have been working on getting the UI up to date with the new style and removing all the programmer art, it’s an ongoing process and there’s still lots to do. Part of that is connecting up the functionality for the Mass Effect style encyclopaedia that reveals background details about the setting as the player explores and the Contact screen which holds all the details you know about the NPC’s you meet as you find out about them.

I’ve also been writing and implementing dialogue for some of the NPC’s, I hate writing the dialogue because I know how important it is and I don’t have a clue what I’m doing. I had initially planned to have a relatively small selection of dialogue options and present them all to the player all the time, rather than having them tunnel through a tree, but this approach means you need to be quite careful about constraining the conversation too much and not getting to flesh out the characters enough. I’m still going to persevere with this approach as I don’t think ‘exploring’ a dialogue tree is very fun, but if it turns out later that I need a lot more dialogue than can comfortably exist in one menu, I might switch.

The other thing I’ve been working on is Google Analytics implementation in C++ using Microsofts Open Source Cross Platform C++ REST API. I’ve already uploaded the Google Analytics code to GitHub because I think it might be valuable and it’s small and clean. I intend to flesh it out further as time goes by, currently it only supports Events. Analytics is something in mobile we take for granted and is invaluable for measuring all sorts of aspects of where our game is failing the players. Most big studios have their own Analytics solution for their games but Google Analytics is fine for my needs and will help me learn more about how people play my game in the absence of any kind of testers.

The downside to Unity

I’ve been hearing a lot of people talking about Unity lately and I know a LOT of developers who’ve moved over to Unity to develop their games and this is a good thing, for now…

What is compelling about Unity

The reasons for developing with Unity are plenty and well documented. It’s Rapid Prototyping capabilities are legendary and I’ve used it in this capacity several times. It has a comprehensive built-in library of tools and content, it has fast edit and continue capabilities, is seamlessly multi platform and by using it you will be tapping into the largest development community available and will be safe in the herd mentality sense.

With a list of positives like that there is a strong case for using Unity especially if you don’t have the skills to produce one or all of it’s many features, which is likely. Either you’re no artist or you’re no programmer with Unity neither of those are reasons not to make a game. This fantastic from my point of view both as a player and as a developer looking for a wider pool of developers and games to cross-polinate with.

 

The downsides to Unity

I’ve used Unity to develop prototypes but I’ve never used it to take a game to completion, I’ve spoken to many devs who have though and all cite the same problem, a problem I’m very familiar with from the bad old days of j2me development, Memory Fragmentation and Garbage Collection. There are ways to deal with this problem that were standard practice in the bad old days first among those was banning memory allocation at runtime, instead assigning objects from a pool of preallocated objects, Static Allocators and Memory blobs are easy to use in a native manual memory managed environment and it’s easy to see Unity maybe making the Garbage Collector optional at some point and so when I talk about the downside of Unity, I’m not talking about Memory Management.

When I talk about the downside to Unity I’m referring to the fact that it is proprietary and fundamental to the operation of the game. In the history of game development Unity has most in common with flash and XNA, both of which were ultimately unsuccessful because of the actions of the technologies owners, Adobe tried to heavily monetise flash and Microsoft forgot XNA existed much like it does with everything it makes. Right now Unity seems to be built by people with the community’s best interests at heart and I hope it continues. But if the technology was ever brought into a greedy organisation like Adobe or an organisation like Microsoft who’s attention is divided to say the least there is no telling where that might leave your game. It concerns me that we seem to have not learned from the mistakes of depending on flash or XNA and that Dan Marshall might be left out to dry again or Robert Briscoe might have to port Dear Esther again!

 

Please don’t shout at me, I’m not saying Unity is bad!

So in summary I personally wouldn’t and don’t rule out Unity development but the many arguments in it’s favour must always be weighed up against the risk of losing the right to change or build your game, target new platforms or even update it to support the progression of existing platforms.

Development Update

To solve the murder, you will have to find out what this machine is.

I plan on posting more regular development updates from now on detailing what i’m working on and where i’m going with it to coincide with my screenshot saturday posts.

This week I’ve mostly been working on a system where if an NPC is sleeping you can still talk to them by going to their room and pressing the call button, they’ll answer the door and let you talk through your dialogue tree with them. I’m also adding a system where you can sleep to fast forward time, the UI for setting how long to fast forward to is an alarm clock on your phone. Finally I’ve been ‘writing’ the dialogue for the ending of the first act.

Things i’ve still to do before the next build are:
-Polish Pass on Act 1
-Make the Encyclopdia work, any datapads with historical background go here, like Mass Effect.
-When you meet a character their profile is added to the Contacts App in the Phone, and stores all the information you have on that person.
-Add Google Analytics
-New More Polished Trailer

Then I am going to begin work on a Greenlight Campaign.

What I’ve learned so far about getting coverage (nothing)

So I’ve not posted in a while for 2 reasons: my new son Alex taking up all my time and I’ve been working hard putting a build together in order to entice the press into writing about Alaska.

Development Update

The game is progressing nicely, it’s a 2 or 3 act game and the first acts core content is finished but in a rough state and I’ve split my time between polishing and developing it. There’s still a long way to go before I’m happy with it but there is enough game there to know I’m going to be happy with the final product. Coming up now, I need to write the second act dialogue and puzzles and QA the first act and make sure it’s paced well, I’m not, nor have I ever been, interested in making a difficult game and so sanding off any sticking points is important.

Public Relations

As expected I didn’t get nominated for the IGF and so 2 pieces of the distribution puzzle are still not in place: A steam deal and press coverage. I’ve been working on polishing a build a bit to try and get some preview coverage or at least an announcement trailer post. I put out the press releases this morning and as usual absolutely no one posted news on it. It’s tough because I know that there are hundreds of emails going into these inboxes and I am British so don’t believe in being too pushy and waiting your turn, tweeting them or sending follow up emails to me is pushy as well as contributing to the noise and making the journalist think you feel entitled to PR. On the other hand I know I my game was more gimmicky I’d have an easier time catching peoples attention but that’s really not the kind of game I want to make and I have to make those kinds of compromises in my day job far too much to let it spill into this.

So in summary I think the truth is, press releases as an unproven indie, don’t work. They only serve to waste your time and clog up journalists inboxes/make them feel under pressure. Something I’ve got no data on yet but I’m intrigued to find out about is how this would change if I had a kickstarter or greenlight. I don’t believe Alaska is a good fit for early access due to it’s narrative dependant gameplay, imagine you’d played a buggy half finished version of gone home with dodgy programmer art before it was released. However greenlight is an option and I’m probably going to start working towards one now, especially since I know I want a steam deal and it’s now the only avenue available to get there.

The doom and gloom about press releases aside, I have learned that there is a much more effective and easier way to getting noticed than spamming journalists email accounts & that things like screenshotsaturday.com and simply submitting the game to the igf, all the coverage I’ve had so far was from those 2 channels and I think going further down that route by posting on forums about it and most importantly of all turning up to industry events which I have been utterly abysmal at, on account of having a pregnant wife for virtually 2 straight years as well as the resulting family, i’m going to try and balance these better in the future by going to industry events, but taking it out of dev time, not family time. Hopefully it pays off and hopefully this will be helpful to other people starting out.

My IGF Predictions

IGF
The IGF nominations are just around the corner, I’m still hopeful about getting nominated but I doubt it, the competition is unbelievable. Here’s my predictions for who is going to get nominated/win.

Games that are already out & supposedly good:
Amnesia: A Machine for Pigs
Don’t Starve
Eldritch
Evoland
Hexcells
I Get This Call Every Day
Kairo
Kerbal Space Program
Nuclear Throne
Papers, Please
Risk of Rain
Rogue Legacy
rymdkapsel
Shelter
Space Engineers
Steamworld Dig
The Swapper

Games that have a buzz about them:
868-HACK
Against the Wall
Apotheon
Broforce
Depression Quest
Device 6
Octodad: Dadliest Catch
Secrets of Raetikon
Sir, You Are Being Hunted

Games that seem interesting to me but i’ve never heard of:
Beyond Perception
Burden
Exist
Lens
Monochroma

Games that are going to win:
Banished
The Novelist
Fract OSC
Jazzpunk
Quadrilateral Cowboy
The Stanley Parable

Given that most if not all of these are getting nominated as well as others I’ve not listed, it seems unlikely Alaska will make the cut. There are something like 30-50 slots depending on how unique each category’s nominations are and there are 36 games in this list. Fingers crossed!

Game Narration is an Oxymoron

I have thoughts on this article here:
http://hitboxteam.com/designing-game-narrative

Here they are:
Firstly I just want to say what an excellent read it is, it chimes with my thoughts almost exactly and is roughly the direction I’m trying to take things with Alaska.
Saying that there are a few things I disagree with.
1.)Game Narrative is an Oxymoron.
From my perspective at least the art of storytelling is about creating a world and the story is a way to explore that world. If you look at things from that point of view when creating a game, you can see that building a narrative inside the world you’ve created is redundant, it’s the world people want to take part in and while in other mediums a story is the only way to explore that world effectively, in a game you can simply let the player loose in the world and discover it for themselves. The thrust of this argument is broadly similar to the thrust of the ‘interactivity is an extra dimension theory’ except that looking at games from a narrative perspective and trying to resolve that with the interactive component is impossible, something can’t both be a story or even less so a narrative and include the variability of meaningful interaction. If you’ve succeeded in building a compelling world in traditional media, the player will be able to explore the world with their imagination, with games it should be explicit. Saying all that, the conversation about what is too linear a game and what is too directionless is no where near exhausted and I look forward to finding out, there is certainly a compelling argument that says the wider the spectrum the better, I though will be fighting against cutscenes and quicktime events aggressively, I consider them and almost every computer game trope as a crutch for lazy or incompetent developers.

2.)Cinematography is not Second Person Narrative.
This is a small point but I feel it’s an important one because a whole section of the article is founded on the idea that in books the consumer is in third person, in film he is in second person and in games he is in first person. This, of course, is completely absurd. Firstly lets explain what these terms actually mean:
The first person is actor
The second person is the acted upon
The third person is everyone/thing else
There are certainly books which feature narration and in this context the reader becomes a second person of the narration although that is the extent to which a reader can become something other than the third person. Narrative devices like the unreliable narrator help to accentuate a second person reader by providing an extra action the narrator has performed on the reader.
I also think the assertion that for something to be described as a game the player has to spend some of his time as the first person, although he may sometimes be acted upon and so become the second person.
But films are indistinct from books, you can be told a story, the story can’t really happen to you or come from you any more than it can in a book. it’s incorrect to describe it as second person narration.

3.)it Shouldn’t be “do, don’t show” it should be “encourage, don’t show”
My final point is simply that games should enable, not force, and making the player do something is the same as showing them it happen or telling them it happened, game development is about enabling the player and prodding them but ultimately letting them come up with their own behaviour. I expect the intent of “do, don’t show” is the same but I feel choice should be made explicit in the phrase.

Free Open Source Software and Liberatrianism

Last night John Carmack claimed on twitter that free open source software and a minimum wage are mutually exclusive concepts, implying that free open source software is a libertarian concept and not a socialist one. This argument has been made many times before and I thought I’d write a quick post about why I think Free Open Source Software can be socialist or libertarian but almost all, if not all, take on a communist structure.

If you are not aware of libertarianism it’s roots date back a long way but in my opinion the modern interpretation is an American rebranding of anarchy. If you were to accept that arguement though, you’d see how preposterous it is to imply writing software could ever be anarchic. Having said that the phrase Free Open Source Software evokes many different political ideas, the word free is about conforming to liberal, libertarian or anarchic ideas and the word open is about apealing to Socialist or Communist ideas.

Firstly my response was to point out that being paid for work and being paid for a product are separate economic concepts that even someone who knows nothing about economics can recognise which is where his argument starts and stops but the idea that Free Open Source Software is libertarian is a separate issue.

You might still be thinking that libertarianism precludes socialism which would be incorrect. it precludes totalitarianism and the totalitarian version of socialism is communism, it’s entirely possible to be a socialist liberal, in fact it’s quite common because both are generally identified as compassionate political positions.

So I’ve established the specific example touted by John Carmack isn’t hypocritical and liberal socialism in general isn’t hypocritical how can I reconcile the word free with the fact open source software project are run using the communist model? The answer is of course is in the emphasis placed on the word free. Almost all, if not all open source projects interpret the word to mean the source code produced by the labour is free (in the social sense, not the economic one). They absolutely never believe that the process of creating the source should be free, this includes John Carmack – devout libertarian, in this sense the word free is removed from Free Open Source Software and you’re left with Totalitarian Socialist Software, i.e. Communist.

Back from my break

I’ve taken a break over the summer from Alaska in order to come back at it from a fresh perspective, I’m going to be working hard over the next 2 months to get a build ready for the IGF submission deadline. As with previous years, if the game isn’t ready for submission I wont submit it but it’s good to have these external deadline as they are the most effective thing I’ve found to motivate progress towards a polished, presentable build. As a result I wont be working on assets or code, just the scripts that control the core gameplay experience, producing a healthy horizontal slice as opposed to the vertical slice I was working up to before the summer. A vertical slice is good for screenshots and trailers because it has final art and makes the game look a lot more polished than it is, a horizontal slice, especially with a simulation game is much more representative of how the end result will play, so getting in place the majority of the core gameplay is the priority for the next 2 months and if I can get enough content in the game, I’ll submit it to the IGF!