I just wanted to slip in a quick update before the end of the year and also apologise for the lack of an update last month. November is a really busy month for me normally as I have my birthday that month as well as a bunch of other things happening which means I never get much work done and I didn't really have much to update with. For this reason it seemed better to do a combined November/December update instead.

December is another month where normally not much gets done due to running around buying and wrapping presents, going out for drinks and celebrating getting in the way of any progress... however this time it's been different! I had a bunch of holiday time that I needed to take off so I actually managed to get some substantial work done, hoorah!

A.I.

In the last update I mentioned that there was a bunch of small touches and additions that needed going into the enemy logic before I moved onto giving them line of sight, I've now tackled those and have now restricted the amount of distance the enemy can walk when walking towards the players last seen position. Before this fix they were set to walk to that position no matter if it was too far away to walk on their turn so would catch up with you way too quick and was really unfair. All this also meant I could then move onto line of sight which brings me to the next subject...

Line Of Sight

Line of sight was something that I was not looking forward to implementing as it's quite a complex subject to get to grips with when maths isn't your strong point. But, thanks to having a good length of time off to attack it and managing to find some really decent articles to help with my understanding, I've managed to get it nailed!

I now have 3 different types of line of sight tests implemented as well as a clean up procedure to remove certain problems with all 3 tests. All 3 tests trace a line from one square to another and evaluate if the target square can be seen or not but each one does this trace differently and so end up with different results as well as different strengths and weaknesses. I outline each one below as well as the clean up procedure then follow up with a visual example of them in action.

Bresenham's Line AlgorithmThe first test is actually an algorithm designed to draw pixel lines on screen but with a few tweaks can be used as a line of sight test on grids. This method is the most forgiving of the three allowing more "peeking" around corners and generally giving more vision than you might expect in some areas such as when being close up to a wall. One of the issues it does have however is that it allows vision through diagonal gaps (this can be seen in the bresenham image below, look to the left).

Ray TracedThis test seems more accurate than the bresenham test when the player is really close up to a wall or blockage however when further away from a wall it sometimes doesn't allow seeing cells which you might expect to see. It does not allow sight through diagonal gaps which is good.

Ray Traced FractionalThis test is fairly terrible when close up to walls allowing next to no vision however when away from a wall it offers a pretty good idea of what can be seen, kind of an in-between of the other 2 methods. Again it does not allow sight through diagonal gaps which is good.

Problems & Clean UpThe main issue that all 3 methods have are "islands". Islands are what happen when a square can be seen but there is a gap between that square and the main vision area, this can mainly be seen in the bottom of the images below as the vision tries to navigate through the doorway especially in the two ray traced examples. Luckily this is easily solvable with a "flood fill operation" which is what is used to do the paint bucket fill in most paint programs, it starts from the vision start tile then expands out finding connecting tiles then removes any that aren't connected. The nice thing about this operation is that it actually fixes the sight through diagonal gaps which happens with the bresenham algorithm.

ExamplesThe following image shows the 3 methods in action showing what the player can see from where he is stood. The final image has the flood fill operation activated to fix errors. The red squares represent squares that can't be seen through, the blue squares represent what can be seen.

As you can see each one gives a different result and the flood fill operation cleans the result up nicely. For now I'm going to use the bresenham method but it's good to have all 3 methods at my disposal if I think enemies can see too much as I can switch to one of the others. In fact I could use all 3 methods to draw up a vision test which allows for partial sight as well as can see and can't see options.

Other Uses

The other nice thing about having these tests is that they can be used for other applications, it could be used as displayed with player sight to show only enemies the player can see, it could be used to give a "fog of war" type effect, it could also be used for simple lighting especially lighting from the player and it could be used when determining what squares are affected by explosions so it's really good to have this implemented.

Up NextNow I've implemented the line of sight tests and checked they all work I now need to put them into action with the enemies because at the moment they have only been implemented as a test to display what the player can see, I also need to clean up the code so the next task is to do that. This will shortly be followed by giving the player the ability to crouch and factoring in cover obstacles into the vision code when the player is crouched so the player can sneak past enemies. After all that it's pretty much all easy game-play code so I should be able to get a lot more done.

Anyhoo that's all for this update, I hope you all have a lovely time in the run up to the new year and a massive thanks for following. I'm looking forward to getting down and dirty with some game-play logic in the new year now all these big tasks have been tackled.

Hey folks, it's that time of the month again for a quick update on progress. It's been a pretty good month for development this month because I had to use up some holiday from work and that meant I could spend a solid block of time working on the game.

Vision

The first thing I did this month was to revisit the vision code I had made and check the arc tests which were working perfectly, I then decided to push the line of sight code to one side for now so that I could get onto the stealth side of things as that felt more important to get working.

Stealth

This part of the project has been going well, I spent a bit of time refactoring all the combat code first so that it was more malleable and suitable for including stealth aspects, this ended up with me removing the idea of a “combat” mode and changing it into a generic turn based mode which would be used for all turn based scenarios.

I then gave the player the ability to switch to this new turn based mode at the press of a button as well as having it switch on when enemies were alerted of your presence via their vision logic. This in turn lead to me starting on the artificial intelligence for the enemies so that their behaviour would help direct the flow of turn based mode towards stealth being an option.

The enemy A.I. now has various states used when playing their turn, they can be idle meaning they just stand there waiting to see and on seeing you change to another state, in pursuit meaning that they can currently see you and are actively heading towards your current direction and finally the tracking state. Tracking is a little more complex than the others as what happens during this state is that the enemy remembers where they last saw the player and moves towards that position while simultaneously trying to find the player again, on reaching the destination and loosing the player they will return to their idle state but when seeing the player they will then change to pursuit.

The A.I. is very basic for now but it's already giving the impression of being able to avoid enemies gaze and being able to lose them once they are alerted to your presence. It also means you can sneak through a room or access objects without them seeing you which totally changes the dynamic of the game.

Up Next

Ok, so up next I'm basically going to be continuing with the turn based mode, enemy A.I. and vision. There’s lots of small touches and additions that need going into the enemy logic before I move onto giving them line of sight, once that's done I need to start looking into giving the player cover and the ability to hide and move behind that cover in order to hide from enemies and evade them.

Hello all! I'm back with another update, sorry this one took a while longer than the regular monthly time slot as planned, unfortunately my landlord decided to sell the flat shortly after the last update meaning I had to look for a new place to live, pack up and move along with everything else that goes with moving a flat. As you can imagine that has been quite a hectic and stressful process leaving very little of my spare time left to do anything else meanwhile, in fact I'm still sorting stuff even now.

The new place has some handy advantages over where I was living previously though, I'm getting the train in rather than walking so I generally get a bit of extra spare time back which I can use for development and also it has a much bigger area to locate my desk so I don’t have to move my computer around any more. I'm starting to settle into the new place now so all being well I should be able to get back on track with development this next month thankfully.

Vision

The last thing I was working on for the game was vision and line of sight so that I can start developing the stealth mechanics. This had all been going well up until the move, I first set up a test to see if the player is within a set square area around the enemy, followed by a test to see if the player is within a vision triangle or arc for the enemy based on which way they are facing. It’s been really handy developing portions of this in work during lunch breaks as some of my programmer colleagues have helped speed up the maths for this with some rather neat tips and tricks. The next step is to double check the arc test is working exactly how I want it to before moving onto doing some more advanced line of sight tests so obstacles and walls will occlude the enemies view.

That’s it for this update, all being well this next month I can get it working in a visual manner to create a video of it in action.

It's been far too long since my last update, just over a year in fact so apologies for not posting for a while as I know some of you are following the project with interest.

The Bug

So the first thing I wanted to tackle is my absence from posting any updates. Progress had been going quite smoothly last time I updated and I was close to posting another update along with a video when unfortunately I hit a particularly horrid bug in the project, one which was intermittent with no easy way of determining what was happening. I spent a lot of time trying to diagnose it but as I couldn't spend any full days working on it I really struggled to get close to fixing it. This bug really put a spanner in the works and eventually lead to me dropping off from working on the project for a while, I kept meaning to get back into it but the horrid bug just kept putting me off.

The Fix

Last week I got speaking to VidGgeek(rus) and he helped me realise just how long it had been since I did any work on the project so I got the latest code base during my dinner break in work and started looking into the bug which had prevented me from doing anything in a long while. Sure enough as before I struggled in diagnosing the issue but early Sunday morning I managed to catch a break. I managed to get the game running with the bug constantly on, this in turn helped me get to the bottom of what was happening and I finally fixed it which made me extremely happy and excited. It was actually something that was rather simple and now I know what was going wrong makes what was happening make sense but boy oh boy was that bug a nightmare! I'm super glad I managed to get it sorted.

What’s Next

Now I know what the issue is I'm first going to make a proper fix for the code rather than the quick one I made at the weekend, I'm also going to clean up and improve some of the code which I had started sorting out before the bug ruined my plans. Once that’s done I’m going to start looking into the stealth part of the combat system so when encountering enemies they don’t react straight away to your presence allowing you to sneak past them as well as giving the enemies line of sight and vision cones.

I'm going to try and stick to a monthly update post from now on to keep you updated as it was far too long between this and the last and I'm determined to make some actual progress to show you all too.

Cheers to everyone who's stayed interested in the project, it means a lot.

Hi all! I just wanted to do a quick check in and update you on progress seeing as it's been well over a month since the last time I did this. Everything has been progressing at a steady pace all be it a little slower than normal due to working on several freelance projects.

General Improvements

A portion of what I have been up to is a few improvements that were much needed in the game. Spine files are now loaded in a different way meaning that the game's loading times have been drastically reduced, the loading previously was taking far too long and was getting in the way of healthy development. I've also adapted the way in which Spine files are drawn amongst the rest of the world tiles which makes the system much more robust and easier to adapt in the future.

Revised Path Finding

I've had an overhaul of the path finding system since creating a path finding algorithm for the movement grids. This has now fixed a whole bunch of issues that existed with the previous system where by the characters sometimes didn't stop and would also cut corners. The only thing left to do now is have them walk as close to an obstructed position as possible rather than flat out refuse to as they currently do.

Combat

The main area I have been working on since the last update is the combat mechanics of the game and getting the basics down and working.

Enemies now have a turn themselves and can walk to a random area within a certain range, this will later be altered to a proper A.I. system but for now I simply just wanted to give an illusion of them doing something.

I've also implemented the shooting action for the player now along with a new version of the combat grid for aiming so that the player can shoot at nearby enemies and a health bar system for you to see both yours and the enemies health. Once hit the enemies health goes down until they eventually die then once all the enemies are dead the combat will end.

What's Next

There are a lot of different things to tackle next so today I'm having a planning day to see where I should be headed. I'll also try and get a video diary up soon of the progress.