Wednesday 9 November 2016

Star Pilot X and Star Battle Conquest - 2 New Games

In the past fortnight I have created two new games using the assets from Star Dancer as a base to work with.

The first of these is Star Pilot X.

Star Pilot X is a space combat sim which is more like an on the rails shooter. The player can select which enemy ship to target and the game will fly after that target automatically and you can shoot at it.

It is a nice fun diversion for a minute or two.

The second of these is Star Battle Conquest.  Currently I'm having difficulty with getting google to release it so it is released on itch.io for the moment.

Star Battle Conquest is a multiplayer space combat game where you are ranked against hundreds of other players.

Some screenshots from each of these games are below:



Saturday 4 June 2016

The weird and wonderful world of game art

Madness and Art



My game contains professional art by a great artist Brandie Davies.  The artwork she provided is most spectacular and I am very thankful. It was worth every penny.

However, some of the artwork was originally different - notably the planet graphics.  The story behind how this artwork came to be used is quite unique.

In March of 2015 I posted a request on polycount's art forums for some paid work to do the art for my game. I'd already found suitable graphics on other sites that I was able to purchase but I needed a handful of useful graphics that I would commission.

After going through many portfolios I settled on one particular artist.  I'd noted his artwork was very good - of a very high standard.  However something did unsettle me slightly as I was sure I'd seen some of his artwork before somewhere.  Needless to say it was very good and I felt I'd made a good choice.

Not long into the task - we didn't even reach the first milestone it became evident that his quality was nowhere near his portfolio quality.  I paid a small amount and then sought artwork elsewhere before settling on my current artist, Brandie.

In the middle of July, when my health was failing and I was struggling to sleep Brandie had commented to me that the planets I'd used looked very interesting and wondered where I'd got them. I told her I'd obtained them with permission from a man on the internet.  I didn't think much of it. However, late on one of my sleepless nights I picked one of my many artbooks from my bookshelf and began reading hoping it would help me sleep.

I flicked through the pages and what do you know but I came across one of the very similar artworks to that which I'd seen on my earlier artist's portfolio. Except it was by a different person. I'd known I'd seen it before.

So I fired up my PC at 2am and checked out his portfolio again. Aha - the picture was gone. He no longer had it on his portfolio. However, being the resourceful fellow that I am I decided to check the wayback machine.  There it was, removed from his site sometime earlier.  He'd taken credit for artwork that was not his and was in fact quite dodgy.

My thoughts went back to the words Brandie had said about the planets in my game. I wondered about the legality of them especially since there was so much dodginess on the internet. Brandie had warned me about the risk of using online artists or supposed artists.  

I typed in the name of the artist who had supplied me with the planets into google. Bizarrely enough a link to my earlier artist came up - along with a picture of William Shatner! Totally spooked by this I decided to remove the planets from my game and replace them with some that Brandie had supplied.  

I had to extract the planets from some animations that Brandie had supplied and it just so happened that the only frame that was clean and clear of obstructions was one where  Australia was showing.

What good luck!

In my paranoid state at the time I almost thought it was by design.


Thursday 28 April 2016

Income

Income

Since release of the full version of Star Dancer I have made a tiny amount of money from it being available to the public.

So far about $40 or $50 has been received as income. It is not a great deal but on the other hand at least it is something - better than nothing at all.

Since I re-released it at the end of March 2016 as a paid app it has had about 10 paid downloads which has brought in a little amount of cash.

I fully realise it will never bring in the thousands I had originally dreamed it would - but instead I might make one or two hundred dollars over the course of 2016 at the very most, if I'm lucky.

Still - that's a hundred dollars I wouldn't otherwise have so it is not terrible.


Saturday 9 April 2016

Time to Recharge

Time to Recharge


Last year I went to hospital for close to 3 months after working on the game and doing a full time job solidly for the previous 6 months before being hospitalised.

Something I want to share is that I make games for fun, as a hobby, outside of my regular day job. It is a creative task and as such requires slightly different mental effort than my day job. I enjoy being creative, as you can see from my writing and the game obviously. I have written other games in the past but none as ambitious as this one. And it has taken a toll on me mentally.

I have noticed a pattern when I write a game as I have done many times over the years.

Typically I write either small crappy games or I invest a lot of myself into creating something more ambitious which I finish.

The small crappy games don't really take any toll on me mentally. They are easy to churn out and are the product of a mind that is creative but not all that focused.

The more ambitious projects do take a toll on me mentally and always have. They are more difficult to produce, require creativity, persistence and intense focus. After I have created one of these depending on the size of the project I am then often out of action in terms of creative tasks for some time.  

For example - after some of my previous games as well as Star Dancer after I have finished the game I will have further ideas for other games but even the action of opening up my code editor or designing an interface on paper will often seem too much for me.  What typically happens is that I open the code editor, have a brief day-nightmare of how much work lies ahead of any project I wish to start-and then close the editor. Or I write down ideas for the games I'd like to work on, I may put together dozens of pen and paper design docs for games - some of which are really good ideas some of which are just cheap rubbish.  

Either way I am unable to produce another game until the recharging process is complete.

Something I have never learned is just what acts as a catalyst to improving the efficiency of the recharging process. I do not know what activities improve the rate at which I recharge.  

But I do know for a fact that the way my mind works I am unable to produce anything of quality, even a small game, until my mind has recharged to a certain extent.

It is a bit like a battery except my battery won't work until it is recharged to say past 80%.

Star Dancer is the most ambitious game I have ever produced. It truly drained my battery.  I would say I'm barely at 30% if that and recharging very slowly.  I don't expect I will make another game of any sort for the next 6 to 9 months if that.

In the meantime however it means I often get bored. Because my enjoyment is in writing code and making games by being unable to do it means that I often find myself unable to find anything else more interesting to do on Sundays or Saturdays.  I can find activities I enjoy quite often but usually on a Sunday I'm completely flat on my back on the couch bored out of my brain because typically Sunday would be my coding day when I'm writing code for something.

But coding is not possible for fun when I'm in the early stages of recharging. And after such a big project the recharging phase is lengthy. More lengthy than I've ever experienced.

This all relates to my mental health as well.  Part of the reason I am taking a while to recover from my hospital stays is that my mind is in a recharging phase.  This is normal for me.  I've spent all my energy on this task (Star Dancer) and the creative, fun, side of my intellect is sitting on empty in its fuel tank.  

Some people who write games will know what this is like. Many hobbyists won't because their mind works differently. Some of them can churn out game after game because they are not all or nothing people like me. When I give of myself to anything it is done so completely.  

Right now I have very little left in me to give of myself because I have spent it all. Not financially, but energy wise.

My batteries are on low. And this is perfectly normal for the way I operate and always have.  It will simply take time for me to recharge. It is different to the way other people operate but then we are not all the same.

Thanks for reading.  I'm now going to return to my notes and work out some activities I can do that may help speed up the recovery process. Sometimes simply being bored is an essential but unpleasant part of the process, but I have not worked this out yet. Maybe there is a workaround solution. Maybe there is not.

from Matt

Sunday 3 April 2016

EarthHope Fiction - Max's imprisonment

EarthHope Fiction Part 6

The feel of solid Earth beneath his feet felt good to Max - even if it was a fiction.  He vaguely remembered something about being captured by the enemy and taken to a Hushami prison camp but it was a lost memory, something that could only be sensed at the edge of his memory.  

Max stood in a garden.  It was lush, full of vegetation, trees covered in good fruit and the wild life seemed to offer no threat here.  He was alone here but it was at least peaceful.  The sunshine was warm and the air calm.  

And yet he felt wrong. He felt as if he ought to be fighting a war somewhere, struggling against an enemy.  This just felt completely out of place to him.  Something about the fruit from the trees seemed to decrease his memory after each meal.  

Max's training had prepared him for most situations but this was different. And yet, he couldn't remember his training. Why would he have been trained? For what purpose.

It was a little confusing in this garden.  He felt in two minds.  Was he the gardener or was he a soldier fighting a war?  

There was a woman here as well. He didn't know her name but he caught glimpses of her from time to time moving about the garden.  They had not talked yet. They did not share the same language.  Max was curious where she came from but without the ability to communicate with her it was going to be hard. She was a little hard to catch at times as well.  She seemed to almost fade in and out of the garden's environment - drifting in and out at unusual times. This was certainly not a garden like what he remembered? Or was it?

Max wondered how he got here, there was no sign of technology, no ships, no buildings - just a garden. And where did he sleep? All he knew was that he was, it appeared, in a permanent state of early morning being.  It was as if the day was permanently hovering around mid morning.  

Just as he was becoming lost in thought the woman appeared again.  Both of them were in basic civilian clothing.  It looked like she had gathered the courage to approach Max.  Something was in her hand.  Max invited her towards himself.  The woman held out her hand and in it was a rose.  

Max felt confused, he knew it was a rose yet there were no rose bushes anywhere to be found.  He reached out and accepted the rose from her hands.  Immediately she darted back off deep into the garden.  Max felt even more confused.  He looked at the rose.  It was red. It had a nice fragrance.  There was a drop of blood issuing from his thumb where he had pricked his finger on one of the thorns.  

Something was amiss here, and Max could not place it yet.


Wednesday 9 March 2016

Earth Hope: Max's Capture

EarthHope Fiction Part 5

Chatter was wild over the EarthHope communications systems.  Lasers and rockets blasted across the dark sky illuminating massive Hushami Corp vessels against the blackness of space.  An emerald coloured beam screamed across the void from one of them and vapourised an EarthHope cruiser.

Max felt desperate.  His sensors refused to pick up the signals of the Hushami Tiger fighters.  They're cloaking devices made it next to impossible to detect with the standard sensors and instead actual human visual identification was needed to positively identify them.  His ship's targeting systems were due for an upgrade but he wasn't sure it would help - the Hushami technological levels were positively far in advance of anything EarthHope possessed.

A series of warning lights flickered on his console - enemy bombers were detected launching rockets against the EarthHope capital. Or were they? The Hushami Corps used decoys often and would try and lead the enemy on a series of false trails.  It made things very difficult to actually pin down just where and when the next strike would come from.

A flash of light filled Max's windscreen - some kind of beam had him in its sights and he seemed incapable of performing any operations with his ship - it seemed to be being pulled towards one of the Hushami vessels but he couldn't see a thing with the light shining through.

A shudder went through his vessel as something heavy clamped down around it. Max tried his best not to panic but the prisoner of war policy of the Hushami Corps was something feared by all.  They were a powerful and intimidating foe and Max did not know what was going to happen next.

A solid thud reverberated through the ship and Max felt his stomach sink.  He'd been captured pure and simple and what lay in store for him he did not know.

...to be continued...

Monday 7 March 2016

Earth Hope Part 4 Fictional Story

Part 4

6 days Max had been on patrol.  He'd slept erratically in the moments he was able and while physically rested the stress of fighting it out with the AioSenti fleets was taking a toll on his mental agility.  He was noticing that he was making uncharacteristic errors.  Forgetting things. Making errors of judgement.

In a battle these things could prove fatal for him or his comrades.  A really bad mistake from a lapse in concentration could result in the deaths of dozens of men.   As such EarthHope had a procedure in place to remove pilots from duty temporarily when it looked as if they were becoming close to the edge.

It was a dangerous game but then the stakes were high.  AioSenti had fought back most of the colonies and was pushing hard against EarthHope's fleets across the systems.  Max knew that if the civilians back home knew just how badly EarthHope was doing in their fight they'd panic and be terrified.  It was a difficult responsibility and one that hung heavily over all the EarthHope pilots - more so with each strategic loss.

Would AioSenti show pity or remorse? Would AioSenti be merciful?

It was difficult to know what they would do if they reached Earth itself.  Their way of thinking was utterly alien to a human mind.  Max had fought enough of them in battle to know that they were slippery fish - they could think fast and were improving every time they engaged.  Techniques that worked a week ago were no longer able to be employed. It was only a matter of time before high command ran out of options.  When that happened - God save the colonies.

Friday 4 March 2016

EarthHope Fiction Part 3:The Simulation Tank

Part 3

Max watched as one of the latest recruits emerged,visibly shaking, from the simulation device.  He knew it would take the lucky lad a little while to recover before being immersed in the simulator again.  No one emerged from the simulator unaffected by it but typically it made the recruit stronger having mastered their fears.

The simulator was as close to real warfare as was humanly possible.  It worked as a kind of flotation tank in which the recruit was immersed fully and a number of electrodes were attached to neural pathways to stimulate sensations of pain, loss, joy, confusion, boredom and a host of other positive and negative emotions that fluctuated in a semi random pattern.

Typically this was one of the later stages of development of the recruits.  Basic training included firing weapons, handling the ships and other essential formation drills.  But this stage was where most recruits either passed or failed.  After each successful completion they were debriefed and given time to recover.  Failure sometimes occurred in which case a lengthier time was given for them to prepare anew unless they decided to quit.

Here they were tested in a safe environment to see whether they could survive the rigours of battle - both the conflict stages and the downtime.  Both aspects were dangerous to a pilot.  The obvious dangers of physical harm during engagement were complemented by the more subtle dangers of mental breakdown during downtime.

During downtime a recruit's mind could wander, could focus on the what-if scenarios and ruminate on endless scenarios that might never occur.  The simulator had a good understanding of human behaviour and knew how to trigger different emotions at different times, as well as triggering different lines of thought.

Max knew that with enough training in the simulator the recruits would be ready for anything. EarthHope Second Division fleet had one of the toughest simulators and was known for producing quality pilots above all else.


Thursday 3 March 2016

Earth Hope Pilot:Max Part 2

Part 2

Not a moment too soon the final AioSenti cruiser disintegrated under the concentrated fire of the remaining EarthHope fighters.

Max looked around.  In space there is no horizon, only endless void - but you can still pick up the shape of other vessels carefully if you know what to look for and where to look - and also what not to look for and what to avoid. The glare of the twin suns in this system is blinding and gazing at them could distract you from less easily visible dangers in the void.

He'd learned a lot since his time in the cadets.  Basic training prepared him but it wasn't until his first real engagement that he realised which parts were useful and which were not.  His flight instructor sergeant had drilled him well. She'd known precisely what to say, and what to do to get the most out of him.  She'd been a tough officer to serve under but she knew her stuff and had given him the skills to face real combat.  He was very thankful for such officers. Some of the officers weren't as good and most people learned quickly to avoid those ones - the old adage about those who teach can sometimes be true but thankfully in this case it wasn't.

With the most recent skirmish over Max lay back in his cockpit and dreamed of what he'd do when he got back to the carrier.  Most likely he'd get a call from one of his juniors to help with something.  And the flight commander may not be entirely happy with how he performed today - he'd made a couple of wrong turns and ended up almost having a collision.  But what he looked forward to was the carrier library.  They had some actual books there. Real books.  Books hadn't existed for centuries but this carrier had some. The flight commander was a bit eccentric like that.  He also kept meticulous hand written notes - a habit that had gone out of fashion long ago.  Something about better way of committing it to memory or something.

Yes. Max would go through some of the art books when he returned to base. There were some pictures of meadows and fields that he liked to see - such a long way from home out here.

Fiction:Max, the EarthHope fighter pilot - part 1

Part 1

Max had been a pilot with EarthHope 2nd division fleet for two months and 28 days now.  In a couple of days he was due to get some well needed R&R.  The last 3 weeks had seen him fight in only half a dozen sorties but he'd seen some of his best mates get injured and killed.  He himself had had a few close shaves.  Those he fought with came and went. Newbies, greens - the inexperienced.  Most of them didn't make it past the first sortie.  If they survived - they might survive a couple more and hopefully learn some valuable techniques for getting through.  But they still needed a lot of luck.
If high command gets it wrong and sends the wrong signals, or if the enemy just happens to be better on the day there's not a lot you can do.  Max had heard of entire squadrons lost because some fool in command thought they'd try something new and innovative without having tested the idea in the simulator first.  Dozens of lives lost simply because someone wanted to experiment.

Max needed the R&R.  In one sense it would be welcome relief.  But on another level he dreaded it. Partially because he knew it was only temporary. The respite and relief he would receive from the fighting would only serve to heighten the sense of dread and anticipation as those last few days of rest evaporated.  But there was worse than the dreaded anticipation.

Most of his friends and families had only experienced civilian life.  They'd not had to worry about whether some small enemy vessel would get past their defences and tear a rent in the hull causing the precious oxygen to leak out catastrophically. Or whether he would make it back alive or in one piece each night - or even whether the carrier he was stationed on would still be there on his return.

Max didn't talk about the goings on at the front lines with his family.  It was too hard.  His mother could sense the tension in Max and it caused her pain.  Max didn't like causing her pain.  The difference in the two worlds - the front line and civilian life was too great to be comprehensible to those who hadn't experienced it.  Sometimes in the name of survival you just had to do what needed doing.  In a spaceship, a precarious little bubble in the void you were effectively alone once you engaged.  Unlike ground combat - in a 3d environment with no cover, perfect visibility - it was a killing area.  This made it hard to make friends on the front line - not like in traditional combat as you couldn't help each other out.  There was no communication between the fighters but they knew that their success depended on each of them doing their job.  There was no one to blame should someone fuck up because if one failed - none of you would be returning home.

In two days Max would be eating dinner with family, most likely a roast - his father cooked a great roast.  Sometimes it felt he had to be emotionally stronger at these events - with those who loved him and he loved - than on the front lines. He knew he would be changed by the experience.  The last great war against the cybernetic AioSenti had seen innumerable men and women return changed people by the horrors they had experienced.  Ancient terms were used to describe it. Shell shock. Thousand yard stare.  Look '44'.

Max closed his eyes and hoped dinner would be lamb this time.

Sunday 21 February 2016

Run its course

Run Its Course

At this stage the game of Star Dancer has run its course.  

It has been available for download in its completed form since October 2015.  It has had almost 1,000 downloads for each version (free and full) in that time.  The majority of full version downloads took place in the month of January. 

As of February with the rankings reset for Google Play i've noticed that the game has ceased receiving attention.  

I know that were I to release an update regularly that would boost its position in the charts temporarily but the game's release period is effectively over.

I will continue playing it myself. During its time in the sun it had probably half a dozen people who really got into it. The majority discarded it almost immediately.  However I enjoy it.

As a permanently single bloke, never married, I once quipped to a close friend of mine that my efforts to market the game were about as successful as my efforts to find a female companion.  There's a lot of truth there it seems - at least going by the relative success in each of the two arenas.  

Anyway I enjoy the game, and I put a heap of work into it over the course of the year - it is valuable to me even if it doesn't receive any attention.  It would have been nice if more people had played and enjoyed it but there's always the next game that I build that may receive a bit more attention, though unlikely.

I won't advertise this post on twitter, facebook or email it to friends.  There's still a surprise in my game which will appear later in the year - just a short message to some people who play it - but I doubt it will be noticed as the game fades into complete obscurity.

It was quite disheartening back in December/January when every attempt I made to market the game fell flat. But that's how it goes. Kind of like life.

best regards,
Matt

Thursday 11 February 2016

Code Written for Star Dancer

Code Written for Star Dancer
(or how I made my fingers bleed)


When I put Star Dancer together there were a number of different disciplines and procedures that had to be completed, ranging from design to art to music and so on. The majority of the work that I produced involved coding.  I have already demonstrated the cost of development as being approximately $7000 for art assets and so on in another blog post.

However the actual amount of coding work that I did was substantial to say the least.

Every few months I would run a program that gave me some estimate of the amount of code written as part of the runtime but also as part of the development process. Since some of the game's assets were generated in external code files not included in the game itself I included much but not all of these.

The coding took place after business hours (I worked a day job) and usually averaged out to be about 20 hours per week for a 6 month period with an additional couple of months at a far reduced hourly amount per week (about 2 hrs) in the post release phase when the occasional enhancement and bug fix was released.

The total hours of coding equated to approximately 500-600 hours of code over the course of 2015 for Star Dancer.

Because I don't charge myself for coding this saved me a lot of money by doing it myself!  Had I hired myself out to a client for the same amount of time I would have expected no less than $100 per hour to work in my own time (ie in addition to my full time job for the inconvenience) and would have cost a client approximately $50k-$60k.

While lines of code is not necessarily a useful metric for measuring productivity it does tell you a little bit about just how much actual code was required to be built since the project was begun from scratch.

So here are some figures for those that enjoy numbers.

Java (Android app) - approximately 25,000 lines of code including approximately 600,000 characters typed.  (comments included)

XML (Android app) - approximately 4,000 lines of XML for approximately 100,000 characters typed.

GLSL (Android app - shader) - approximately 240 lines of GLSL with approximately 8000 characters.

PHP & SQL (Web Backend) - approximately 15,000 lines of code with approximately 350,000 characters typed.

BlitzPlus/Blitz3D (tools/image processing, prototyping ideas, tests) - approximately 25,000 lines of code written including approximately 500,000 characters typed.

The vast majority (over 95%) of this was written between early February and late June 2015.  It was a considerable amount of effort and had I been charging a client only $100 AUD per hour then I'd say they would have been getting an amazing deal in terms of output per hour.

So had I lacked programming skills my game would have been totally impossible for me to develop as a hobby as that would have been easily the greatest cost in development for a project like this.


Wednesday 10 February 2016

The human cost of space warfare

The human cost of space warfare
or put simply
"why I wouldn't want to be a star fighter pilot ever"


"The average life span of an EarthHope Fighter pilot is 1 minute 35 seconds" - as I have said elsewhere.

From the moment the two fleets drop out of hyperspace and engage in combat there is barely a couple of minutes survival time for one of the fleets' entire crew.

In space there is nowhere to hide, nowhere to run.  Once one of the fleets gets on top of the other  there is little hope of survival for the losing team.

The first few moments of battle are tense as the two fleets approach, at this stage there is no sign or indicator as to which side is going to come off second best. And second best means death in a space battle.

As the opposing line of fighters approach one another the EarthHope pilots expression changes to one of horror as they realise the AioSenti craft have been set to ram.  With no time to change their course one by one a series of bright flares illuminate the night sky as each pair collides.

A handful of EarthHope pilots escape this fate only to find themselves all alone in a sea of combat. Their directives are to attack the larger capital and cruiser vessels.  Flying directly at the nearest cruiser one of the fighters is torn to shreds by a burst of rockets launched from the forward weapon mount on the enemy cruiser.

The remaining fighter pilot glances around the battle space - his capital ship is ablaze and taking heavy damage from AioSenti bombers, the cruisers can offer no support against the enemy light craft but they too are damaged heavily.  Outnumbered and outgunned by what remains of the enemy fleet the EarthHope fighter dodges and weaves knowing it is only a matter of time before he too will become one with the vacuum of space.

The radio chatter has gone silent, all signs of human life in this sector of space vanquished.  The vacuum reigns supreme over the battlefield.


Tuesday 9 February 2016

Coding Features - How the Lighting is Setup In Space

Coding Features - How the Lighting is Setup in Space

Star Dancer is set in Space. It uses a fake phong shader for the lighting with fake bump mapping.

The fake phong shader uses diffuse and specular components for lighting the space ship (per pixel) using the standard lighting equations for diffuse and specular components. However I ignore the ambient term.  Bump mapping is faked by taking the color map and extracting an average brightness value of the texel for two points - the current actual texel and a slightly offset texel and then using the difference in these to calculate a heightmap that alters the diffuse and specular components as a minor perturbation to the normal for the bumpmap..it is a crude but effective method when applied lightly (the bump mapping is very light - mostly not noticeable).

Given that this is a game not reality I had a bit of creative leeway with the positions of the lights.  In the game I use two light sources to represent a key and a fill light.  I would have liked to have had a back light as well as in a traditional 3 point lighting set up but getting the faint glow around the edges of the ships was going to prove a little difficult in a real time setup for me.  

The key and fill lights are oriented almost 180 degrees apart - slightly off from that, with the fill light being of lesser intensity. Both are white lights.  Because I have only two lights and because they are both static directional lights I include their position directly within the shader itself.  

Typically with game engines lights are expressed as parameters to a shader but because I am not making an engine but am making a game with a specific lighting setup that is unchanging I had no worries about simply expressing these lights as constant light source values in the game that could be built directly into the shader.  Not recommended for a more general purpose lighting solution but for a space environment it works.


Coding Features - How the AI Opponent Learns From You

Coding Features - How the AI Opponent Learns From You

In the game the AI opponent learns from the player in a variety of ways. The first is related to the online campaign, the second is related to the offline mode. I will detail both here.

Because the decisions taken by players in the game are all about setting the weightings for their ships' flight behaviours before a battle this makes it very easy for the AI to be able to make decisions.

The game is mostly about tweaking these settings to achieve victory and as such the method used for the AI player online is as follows.

Basic algorithm:

Every 10 minutes of  realtime the server goes through all the human players who have fought battles in the last month. 

Rank each player in terms of their win loss ratio but also weight more heavily in the favour of human players who have fought more battles than others (to a certain extent).

Take the top player, find their weighted flight settings and apply that to each of the AI players in the game.  Every few minutes make slight random adjustments to the AI players flight settings as a slight departure from the actual flight settings of the best human player.

This is the basis for the AI opponent online.

Offline:

Pick a random set of AI settings the first time through.  If the AI wins the battle change 10% of them randomly only slightly before the next battle.  If the AI loses the battle change 40% of them randomly more heavily before the next battle.

This is the basis of the AI opponent offline and it results in a computer opponent who is unpredictable but over time presents a balanced challenge to the player approximately at the level of the player.

The online AI is the tougher of the two and results in (at the moment) an AI with a win loss ratio of over 75% in most cases.  


Coding - Camera Positions and Motion in the Game

Coding - Camera Positions and Motion in the Game

In the preprocessing step of the battle the camera positions are chosen for the space battle to hopefully provide a more exciting and dynamic battle than if the user were to try and watch the action themselves by positioning the camera.

This is done as a post stage of the preprocessing step of the battle.

Once all frames of the battle (maximum is 8000) are completed the frames are then analysed by the game to generate a series of camera positions, motions and orientations that hopefully look good.

Originally the game used a static set of choices for the camera but as of an update back in October the camera is chosen from a random set of options that are generated - this means that the same battle may be shown from a variety of camera methods which means very few battles - even with the exact same parameters - will appear exactly the same.

However the method used to choose the camera angles is as follows.

Every 'n' frames of the battle the next 'm' frames of the battle (plus the preceding 'm') are analysed. A number of possible camera options are run through and then selected.  First the system decides whether it wishes to watch a small ship or a big ship.  It also examines whether any beams are firing (these are considered high priority for watching), whether any ships are taking lots of damage or are destroyed in the time period (these are given a high priority).

Once these calculations are performed the camera is placed at a number of different positions.  After watching many viewings of different movie space battles I worked out that there are range of common shots.  Some of these involve moving cameras, some of these involve static cameras, some of these involve wide shots (include as many ships as possible in the field of view), some of these involve close chase shots (include the 'target' ship and aim in a direction that includes the most amount of 'action' such as explosions and so on).

The general pseudo code for this process is as follows.

for frame = 1 to max frames step n (n = 300?)
{
   pick a new camera focus for this section from the following options
   {wide shot, chase fighter/bomber, chase capital/cruiser, and a few others}
   analyse the play field to see which direction viewed will show the most action
   decide on whether the camera is {static or dynamic}
   if {dynamic camera}
  {
      pick a start and end position for the camera, move the camera through these positions and aim in the direction that gives the most action shots related to the type chosen (fighters,wide, capital etc)

  }

}

Coding - How the Research Settings Work On the Server

Coding - How the Research Settings Work on the Server


Research in the game is performed only in campaign mode. Research is performed on the server.  The end user sees a system whereby the percentage in each focus area of the game (speed, economy, firepower, defense) is increased gradually over time from 0 to a maximum value the more time is spent researching a technology.

The algorithm used for calculating research is very, very simple.

When a research setting is changed we detect the time on the server that the setting was set.  At any point that the game requests information about the player's ships (such as before a battle, or when viewing ship details, or when viewing fleet information) the server reports an updated value of the appropriate value (hitpoints, firepower etc).

The mathematical technique used is to use an atan curve (inverse tangent).

The inverse tangent curve us a curve that goes from -Pi/2 to +Pi/2 for values from -infinity to +infinity.

For the purpose of the game we specify our research modifier (as an additional multiplier) to the base score as equivalent to this:

Modifier = Constant *  Atan(Time Researched * Fudge Factor) / (Pi/2 plus a little bit)

This means that as time goes to infinity the Modifier approaches its maximum value. At time is zero the Modifier begins at zero.  The curve is not linear and instead is similar to an 'S' curve with a low rate of increase at the beginning, a higher rate of increase in the mid section and a slow rate of increase asymptoting to the maximum value at higher values of time.

This is the basis for which research progress is calculated on the server.

Coding - How the space battle flight behaviours work

Coding Development - How the Game Works Part 1


I thought that given the game is complete now, and that given the game is available for free and all marketing has now been completed I would share some insights throughout the next set of blog posts about how the game hangs together - particularly the more unusual or innovative types of things the game does.

The first of these is the core gameplay feature of 'weighted behavioural AI' as I describe it for the flight behaviours of the ships in the game.

Space Battles in the game are precalculated, although the process I'm about to describe would work in both real time and preprocessing in any other game.

I'm not going to go into the basic mechanics of game programming - it will be expected that certain basic concepts such as a main game loop and the core principles of obtaining user/entity input, update world, draw world are understood generally speaking.

During the space battle each frame the various space ships have a counter decremented.  Once that counter reaches zero it is reset to a particular value and the count down is restarted again.  Should that space ship's currently targeted enemy spaceship be eliminated before this point the count down timer is automatically reset to zero.

Upon the countdown counter reaching zero a series of conditional statements are evaluated.

Within a short loop each enemy vessel is evaluated against a set of parameters such as their distance away, the vector position relative to the current vessel, their hitpoints, their damage, their speed and so on.  The AI flight settings set by the player beforehand results in a score being assigned to each of these parameters.  The individual scores based for each if statement (if true then add the value of the AI setting) are then totalled and compared with each other.  The enemy vessel with the greatest score is then set as the 'target enemy' for that ship.  

Once a target enemy for a ship is chosen the current ship will continually adjust its velocity to aim towards the enemy vessel.  Should it come too close then it will be given a nudge in a direction perpendicular to the direction to the enemy target vessel which will result in the current ship turning away from the target.  

That is the basis of how the ships acquire their targets throughout the space battle.


The pseudo code for the process would look something like this.

if 'aicounter' is zero then 
{
     reset ai counter to starting value (eg 200)
     set targetingscore to a highly negative value
     set targetedenemyvessel to -1
     loop through all enemy vessels
     {
         if 'some condition' is true then 
                add relevant ai weighting score to the currenttarget's score
         endif
         repeat if statement and add score for other conditions
         if current target's score is the highest then set the targetedenemyvessel to this one
     }
}
if 'currentship has a targetedenemyvessel' (which it always will unless the enemy fleet is destroyed)
{
     adjust velocity of ship to aim towards enemy vessel and fly towards it
}
loop through all enemy vessels
{
     if a collision is likely with the current vessel and an enemy vessel then 
     {
           change the trajectory of the current vessel to be away from the vessel it will collide with    
     }
}


Sunday 24 January 2016

Completion

With Star Dancer full version completely free there is no reason not to give it a try - especially if you just want to enjoy watching space battles on your tablet or phone.

Simple install, create a quick battle, adjust some settings and watch the beautiful space battles.  I've been playing this game continuously for the past 12 months. It is not everyone's cup of I fully realise that but if you like good looking space battles on your android device there's not many better than this.

Oh...some points:

You can change the pilot chatter by placing your own numbered files in the relevant folders in your music folder (yes this game has mod capability - even for a mobile game).
Also you can adjust the music by placing your own music in the relevant folders as well.

Furthermore - the campaign is tough, very tough - the AI has a 75% chance of beating the player based on its current intelligence - most players struggle to defeat the AI but it can be beat if you are smart.

Also - you can move the camera around within the space battle environment when the game is paused - I'll let you figure out how to do that but the camera moves similar to a PC based RTS (fingers around the edge....and hold the centre to move forwards).

The game was originally designed with multiplayer in mind but very few people seem to play it multiplayer based on my game usage metrics but I'd really recommend that you at least try it once multiplayer with a bunch of friends - a five player campaign can be quite chaotic.

The current version is 1.30 and there have been numerous updates since release in October (there were a few pre release versions available prior to October when I was in hospital) but the game is now at a very stable release point and it is unlikely that there will be many further updates.

Note - the game though free has no advertising, no in app purchases - it is free in the most true sense of the word.

There is a link to my blog within the game on the tips and hints screen and here you can find out a lot more information about how the game was built, what its inspiration was, and other features I don't have room to detail here.

I am proud to say that this game is one of the best I've ever created (and I've been making games privately for myself and friends for the past 20 years or so on various platforms).

I was a little sad that the cost of a cup of coffee put the majority of potential users off playing the game - when it was paid it received about 1 download per 10 days, since going free it has received about 20 downloads per day.  As a developer who has poured his heart and soul into a game (and blood, sweat and tears!) it was mildly disappointing that the release didn't garner that much attention but I'm pleased that the people who do play it enjoy it.

If you haven't tried it then I recommend (of course I would - I'm the developer) that you give it a shot.  Note - I get nothing out of having you play the game beyond the satisfaction that people are enjoying it.

All the best, Matt.

Oh....if you want to play multiplayer and don't have anyone to try it out with I have included my email address in the game in the tips and hints section - I'm more than happy to discuss lining up a game multiplayer as long as I'm not flooded with requests (which I doubt I will be).

from Matt.

Space Battles are Fun

Love the Look



In the brief scene shown I am playing against the computer. I may have lost the battle but I got some really nice footage of the action.

One of the things about my game is that even when you lose it looks great.

My game is really more of a space battle simulator than a game and I like it that way.


Saturday 23 January 2016

Usage of My Game Again

Some usage metrics for my game (again)

My game has been available for free (fully free with no ads or anything) for a little over 3 weeks.

It is possible to identify some common usage patterns based on the players who've played the game since that time.

I will give mainly percentages since the actual raw numbers don't mean a great deal.

The main figure that keeps cropping up is a figure between 4% and 5%.

4%-5% is the proportion of users who are quite engaged with my game.

About 4% of users play the game beyond a few days.  The other 96% play it for one day only.

About 5% of users play a good number of battles.

Each day about 25-30% of users on that day give the game a decent play of about 10 minutes or more (which I consider a decent playthrough for a mobile game).

Each day about 15% of my total users ever are playing the game.  This equates to about 50 or 60 users every day playing the game with about 20 new users each day.

The typical users launches the game a number of times over the course of about 2 or 3 days.

Each day there are one or two users who launch the game over 15 times a day with the majority hovering around 5 launches per day.

My users are split fifty fifty between those who play a session more than 5 minutes and less than 5 minutes.

Most battles are watched for the full length of the battle although a handful are also watched for much longer - I had one person watch a battle almost 40 minutes once, and they watched most of the battles for a good 15 minutes - so they were massively engaged by the game.

Most users play at least 1 battle, sometimes 2.  I've had one user play 65 battles in the campaign and a number fight over 15 battles in the campaign.

The majority of users lose their battles against the AI.  I sometimes wonder if this puts them off because the game is quite hard.  The AI does not cheat but is extremely intelligent (now) and users do struggle to defeat the AI. In fact so do I.

From what I can tell from my usage metrics most users have a good idea how to play the game.  At first I was worried that they were not going to the AI behaviour screen but these days I can see that most users have no problem setting AI settings and so forth for their ships. The game seems to be used correctly by most users, they are just not very good at it and don't often try to improve their skills.

The Lite edition has suffered since making the Full version free.  Usage of the Lite game has dropped from over 2 days per person to 1.5 days per person. It is clear to me that the lite version is being uninstalled and then the full version installed in many cases.

I've had about 400 users of the full since it was released - so for 5% of them to be heavily engaged indicates about 20 users are heavily engaged at any time currently, this is about right.

My usage metrics are increasing. If we take the usage over the last 3 weeks - the number of launches of the game has almost doubled per day on average in that time and yet the actual number of installs per day has only increased by about 25% per day since that time. (Averaging 15 per day install increased to about 20 per day, but an increase in launches from 150 per day to about 300 per day approximately).  I am pleased with this as it suggests that the game is retaining users at a reasonable level.

Friday 22 January 2016

Star Wars - The Force Awakens - Impressions

Star Wars - The Force Awakens - Impressions

This afternoon I decided to go to the cinema and watch the latest Star Wars film.

As a child Star Wars was a huge influence on me - and still is today as I found while watching the new film.

My parents and family would be well aware of the number of times I had watched the original series as a child, to the point that I could retell the script to myself during long commutes to school and back each day.  I was a fan of sorts - with an almost perfect recall scene by scene, word by word of the original movie.

The prequels of the late 90s, early 2000s have been forgotten. I never watched the animated series either and can pass no judgment on them as neither good nor bad.  As one of the original fans, I had effectively gone into hiding when it came to modern Star Wars.

With Star Wars a relic of my past other films had taken on the mantle of the epic hero's journey motif - particularly the Matrix.

The new film shares a sense of welcome nostalgia of the old plus the introduction of the new to the series.

Before seeing the film I had heard many of the spoilers, I knew what happened in parts of it and I had heard many times how it was a rehashing of A New Hope.

I disagree that it is a rehashing of A New Hope.  What it shares in common with it it shares in common with all hero's journey stories - which A New Hope was also.

And it does it well.

I had heard it said that the space battles and light sabre fights were less spectacular than previous films.  I do not think it matters - they were incidental to the plot due to the nature of the new heroes.

For me, the thing that best captures a Star Wars film is that emotiveness of the hero's journey plot devices.  The original had it, the Matrix had it and the new Star Wars films has it.

This plot device is one that captures my imagination still. The idea that there is a destiny of discovery that the lead character must go through to become a figure of legend. The events and action that takes place such as space battles, laser fights, and so forth - these are secondary to the true nature of the Star Wars film.  The key to Star Wars is, and always has been, the narrative of growth from backwater nobody to mysterious figure of legend via facing one's own personal demons.

That is what makes a film 'Star Wars' in my opinion.  Tie Fighters and X-Wings are mere window dressing - though very delicious window dressing that still has appeal after all these years.

The film has flaws, no doubt about that.  But they are forgiveable in my view.  I wasn't the only audience member who audibly laughed at the temper tantrum thrown by one of the main antagonists in the film.  Some of the characters are quite weak - both in appearance and demeanour, some of the action scenes lack weight and force - but as mentioned these weren't what the film was focusing on and I can forgive it that. It captured the key I spoke of earlier quite well.

My thoughts about the films to come I will share.  There is a certain predictableness about this genre of film that is inescapable - it is their destiny after all.

I would imagine that episode 8 will focus on the training of Rey in the ways of the force.  There will be a massive failure on her part in facing her own demons - at least initially although this failure will in fact be what readies her as to face her final challenge in episode 9 (most likely dealing with the shadowy bad guys).

My other thought pertains to the philosophy of the films.  There is a sense in my mind that they will travel down a slightly Eastern path of indicating that there is always struggle between light and dark and that the quest to find balance involves recognition that the struggle is eternal.  There will be no final banishment of the dark side but most likely a recognition that it will always be there - just as there will always be champions of light to take the fight to them.  The sense will be that the force itself is a force of balance.  A balance of unstable equilibrium where at times the light has ascendancy and at times the dark.  Very similar to the struggle of order versus chaos in Moorcock's world.

My final comments are about some of the art inspiration and scenes from the new films.  My mental associations and linkages that I make with imagery and signage is still present to a limited extent.  There were two scenes in the film that to my mind were extremely reminiscient of a series of artworks in a CG Challenge Art Book from 2005 that I own. This is to be expected since science fiction has similar motifs throughout its history. But the similarity was quite stunning. I won't post the imagery here but if you have access to the following material the references are here:

"CG Challenge Grand Space Opera, Icons of Galactic Civilization and Conflict" by Ballistic publishing, first published 2005.  A piece of artwork by Hodong La called "Warfare and Harmony" reminds me very much of one of the scenes from the film (the Star Destroyer wreckage in the desert). Another piece of artwork by Fred Bastide called "Helix Rugens One" (namely the ship) reminded me very much of the speeder that Rey pilots early in the film.  This is to be expected though since science fiction works always inspire one another and share a lot in common.

A few other thoughts.

The sound and music that is often associated with hero's journey type films, whether it be the original Star Wars,the more recent Matrix films, or the latest Star Wars generates within me some of the strongest emotions in film.  There is something special about seeing a character experience growth and recognition about those age old questions 'Who are you?' and 'Where am I going?' It always tugs at my emotional core each and every time and despite its manipulativeness I cannot help but admire it.  The new film succeeded very well on this front.

Monday 18 January 2016

Tablet Screenshots

Tablet Screenshots

In July of 2015 I purchased (for testing purposes) a very cheap low specification tablet from my local K-Mart outlet (at 6am in the morning mind you).

It is a no name brand tablet with a very low speed processor (quad core) and low memory (512MB).  

Recently I have played my game on it (quick battles only) in offline mode (I refuse to connect this tablet to the internet for the simple reason that the hardware itself has built into its OS an advertising scheme that means everytime a new screen opens advertising pops up even on applications that don't include advertising - such as my game).  

The tablet is not great but is pretty good for under $100 - it plays the game though the load times are quite long which is to be expected.  It has a few issues with sound - the volume seems too low, and behaves differently than the audio volume on my Samsung devices (phones).  But then audio seems to behave differently on the LG phone I own as well (different entirely again - volume settings seem to be linear on some and logarithmic on others).

Having a larger screen to play with however is beautiful.  On the low spec tablet my game downscales textures and reduces the quality of the background nebula so that the game will run fluidly on a low spec device however they still look pretty impressive.  I have attached below a series of screengrabs from my tablet. In each of them I have played around with the camera settings a little to position it in a nice spot.

Here are the screenshots. I really like this game.

You will note I have mainly focused on two of the factions in the game, I really love the ships on those two factions (which are the factions in the lite version as well).














Friday 15 January 2016

AI Flight Behaviours - A Learning Machine Part 2

Machine Learning Part 2

As of January 15 (today) I've had a look at the AI players' battle statistics to get an idea of how well they are performing.

In my opinion they are performing admirably well, more so now that one of my users won the campaign.

The AI players in my game, as discussed before, improve over time as human players play the game and the AI learns from the human players.

As such their percentage chance of victory in any battle hovers around 66%, about two thirds of the time the AI player will win the battle.  This is great - if a football team had a 66% chance of victory they'd be over the moon.

The reason for the high figures is because the AI in my game learns from other players.  When a human player does well the AI player copies the flight behaviours and settings of the quality human players and tweaks the settings slightly to add a bit of variety to the settings.

As a result, with one of my users playing the full campaign and winning easily, the AI has now improved and as I've seen in my back end stats - it is very difficult to win against now.

So the AI for my game learns - and it learns quickly.  It has rapidly become a tough cookie to beat.

Well done AI opponents, I am well pleased with your learning. A+




AI Faction | Battles Won | Battles Fought | Percentage Mars | 63 | 91 | 69 AioSenti | 58 | 85 | 68 EarthHope | 44 | 66 | 66 Hushami | 56 | 85 | 65 Outlanders | 51 | 82 | 62



Tuesday 12 January 2016

Some Metrics and Comments About Rankings

Some Metrics


Here are some basic figures about my game that have come to light since making the full game free of charge to users.


The Lite version of the game has seen a daily install rate of about 6 installs per day - this has been fairly consistent with a slight increase over the 3-4 month period the game has been available for.

The Full version, since being made free, has had an average of 14 installs per day - also a consistent figure.

This is during periods when there is no advertising. The value spikes considerably when advertising is active. 

Each user appears to use the game for an average of about 2 to 3 days before ceasing activating the game.  The average user visits the front page of the game about 12 times during the lifetime of the game. (4-5 per day).

On average about 55 users play the game each day. This is of a total install base of about 160 - so on average one third of my users currently are active each day.

Some notes about monetisation strategies for this game.

Monetisation strategies typically require high volumes of users.  Either a high volume of users or a high activity with a moderate volume of users is required. As such - my game has neither (in my opinion) to be worth monetising.  

Unless the daily average users increased by a factor of about 30x it is most likely not worth the effort to place advertising within the game.  

Monetisation strategies such as IAPs are not of benefit either since the game is typically played for a short duration (a few days) and my design does not really cater to IAPs since there is nothing that really is suitable as a saleable item in the game.

What I have noticed however is that no matter what method I use for promoting and advertising the game - the organic install rates for both free and paid has remained fairly constant and consistent.  

In terms of ranking in the app store charts the game sits at what I consider about 4th tier.

The tiers that I have identified in the app store rankings can be broken down into the following:

Tier 1 -

50,000 installs minimum, most apps are above the 100k mark with many in the millions.

Tier 2 -

10,000 installs minimum, with most apps hovering around the 50k mark.

Tier 3 -

5,000 installs minimum, with most apps hovering between 5 and 10k.

Tier 4 -

Everything below 5,000 installs.


This is a rough guide to how the app store ranks apps. Note there are exceptions and sometimes these exceptions are very weird - especially in the lower Tiers (apps with 1 install in the 3rd tier sometimes, and apps with 10,000,000 installs in Tier 4).  

My own app currently sits in Tier 4. I estimate that without advertising it will take approximately 2 years to reach  Tier 3 and may never reach Tier 2.


Product Virality

Product Virality

The term 'virality' with apps, youtube clips, songs and so on refers to the explosive exponential spread of a product that far exceeds the amount of effort and money spent on marketing.

It may be derived with the following mathematical model.

dU/dt = Total Rate of Accumulation of Users = Rate of Gain - Rate Of Loss

Rate of Loss we have already shown to be approximately equivalent to -aU where a is a measure of the quality of the app. This is a rough figure.

For the simplistic purposes of this model we shall express the Rate of Gain as equal to:

b + cU where b is approximately constant based on app store rankings and so on, while c is related to the likelihood of a person sharing the product with a friend or another person.

Therefore we get an equation for our rate that looks something like this:

dU/dt = b + cU - aU

          = b + (c-a)U

Now, this first order differential equation will result in either an exponential curve that asymptotes to a flat curve or which exponentially explodes with time.

It all depends on whether (c-a) is positive or negative.

The meaning of (c-a) is the difference between the likelihood of the app being shared with friends to the likelihood of the app being uninstalled at any given time by a user.

So the key to having a viral app would appear that it has to be a product that is sufficiently high quality to keep 'a' small and sufficiently remarkable to have a high likelihood of being shared with another person.

For most of us mere mortals c is extremely low and a is small but not anywhere near as small as c.

The value of b is ultimately irrelevant with respect to a viral app although the ratio of b to a is the approximation of the equilibrium install value of a non viral app and so in that sense b matters.

Causing 'a' to be a low value is not too difficult as long as you are capable of making a quality product.

The real interesting thing lies in making something that has a non negligible c value - that is the key.

The difference is either a flat curve at equilibrium or exponential increase.


Monday 11 January 2016

An Explanation of My User Retention Term

User Retention (part 2)

This will be a fairly short post but in it I hope to explain simply and clearly one of the terms in my function that describes rate of user acquisition (and loss).

In my function described earlier dU/dt = f(t) + g(m,e,t) - aU the term -aU may seem a little mysterious to some readers.

If we remove the first two terms that represent growth due to organic and advertising methods we shall look at the case where an app has been withdrawn from sale and no further promotion is taking place. In such a case the function becomes dU/dt = -aU

What this tells us is that the rate of loss of users is proportional to the number of users we have, by a coefficient of proportionality labelled 'a'.  

To understand it think of it much like radioactive decay which follows a similar mathematical model.

At a particular time there are 'U' total users with the app installed.  We do not know when each user will uninstall the app but we do know that it is a fairly random event - a user could uninstall the app at any time and the likelihood of them doing so at any given time is shown by the value of 'a'. Large values indicate a high likelihood, low values indicate a lesser chance of uninstall.

As such - the more users you have the more likely that at any given time 1 of them will uninstall the app.  If you double the number of users, by probability, you double the rate at which users uninstall the app.


This is what leads to the exponential decay curve those of you who are developers will see when you have finished a promotional period for a product as users gradually fall away and uninstall the app.


It is perfectly normal and mostly unavoidable. 


I hope that helps understand the model I use to describe app user retention and loss.


A Useful Metric

A Useful Metric

I was playing around with the numbers with my metrics and came across a meaningful calculation that I felt was quite revealing about the usage of games/apps (more so on mobile devices than PC but it would hold equally as well with these but the results would look different).

Typically things like DAU, MAU an stickability are thrown around along with D7 retention and so on.

This is a similar metric that is dead easy to calculate and gives away a fair amount of information on how your product is being used in the marketplace.

Take a particular period of time, eg 10 days.
Obtain the total number of unique users of your product in that time (separating by IP address while not a perfect fit will work)...eg 100 users.
For each day in that period count the number of unique users (use the same method, ie IP address - note any errors due to IPs being reassigned etc will even out in the wash)...eg

Day 1 10 users, Day 2 15 Users, Day 3 5 Users, Day 4 25 Users etc etc...sum them all up.

Divide the sum of your daily unique users (each day) by the total users for the period, call this figure D.

D is the average number of days, for the period, that users use your app for.

It will range between a minimum value of 1 and a maximum value of the period being looked at.

Something to note - this figure is amazingly stable. Unlike stickability which uses monthly active users - you can use figures from the entire life of your product to get an average value as most likely it won't change (once the product itself is stable).

The figure is similar in nature to the D7 retention and other figures like it and gives a rough idea of how engaged your users are with your product.

My own app has a value greater than 2 but less than 2.5. This means that most users use the app on the day of install, the following day and a handful use it the 3rd and subsequent days.

This is fairly normal - from what I've seen of various curves usage of games and apps is such that the fall off from install to inactive happens fairly quickly typically - especially on the mobile market, less so on desktop but it still occurs with a similar pattern on desktop.

So to summarise:

U = Total Users For Period
V = Sum of Daily Unique Users For Same Period (as U)
D = Avg Days Spent On App Per User = V / U

Simple characteristic to determine values - IP Address of User.

Results - Close to 1 = poor quality, Higher is better.

Saturday 9 January 2016

Stages of Development

Over the course of 2015 my game interface went through a number of developmental stages.

The first stage was my initial concept when I was putting the game flow together.  It was terribly ugly but was never intended to look pretty - it was merely the flow from screen to screen in the game.



The second stage was when I attempted on my own to make the game prettier. As a programmer I was pretty impressed with my programmer art.  It was still dog ugly though. See below.



In May a family member linked me up with a Melbourne based artist who took my concepts and reworked them into something a lot prettier. I am very thankful for the work Brandie did on my game. The financial cost was well worth it to get some professional looking graphics in my game.



I can very much recommend Brandie as a quality artist who is reliable and professional (and very supportive while I was in hospital too!)  Having professional artwork done makes all the difference to the quality of the final product.