[WIP] Turn Based Strategy Game with Dogs

Hello ladies, gentlemen and all other configurations of being! Welcome to the development log/diary for Abandoned! I aim to post daily updates to this thread of the game’s progress in the hopes of getting timely feedback as I inevitably do something horribly wrong and to hopefully keep me motivated to get this project done!

What is Abandoned?
Abandoned is a turn based strategy game in which you assume control of a pack of dogs stranded on an alien planet after their owners were murdered by an extremist group. You will need to find food and shelter along with fending off the hostile flora and fauna.

To make matters worse, the “Death Season” is fast approaching. If you don’t find a safe haven that is able to survive the “Death Season” then survival will become impossible. The main structure your owners occupied before their murders should provide safety, but beware the combat robots the extremists left behind to ensure the site cannot be claimed back easily.

Will you be able to secure safety for your pack?

About Me
I am a university student who has had a passion for game development since I was 9 years old. The initial spark was thanks to Fire Emblem: Blazing Sword on the Gameboy Advance, and since then I’ve used a number of tools and programs to develop simple personal game projects over the last 15 years.

As I am currently a university student I unfortunately can’t dedicate entire days to developing my game, I do aim to dedicate about 1-2 hours each day towards development depending on how much work I need to do for university.

I’m looking forward to going on this journey and hope that everyone who reads this dev log will enjoy their stay!

1 Like

Day 1: Development Time; 114 minutes
Started working on the game by doing the least gamy thing possible. Menus! I’ve implemented functioning title screen, main menu and new game menu with working navigation between the other menus. I’m prioritising function over form so everything is very basic, lots of Arial font of differing sizes with no pretty graphics.

One thing I would like to get an opinion on is how many scenes would you consider a “good” amount? At this stage I plan to have 2 scenes, 1 scene for the main menu and another scene for the game itself. My thought process for 2 scenes is that I see the menus and the game itself as 2 separate programs. The menus let the player get to the game, but aren’t a part of the game itself. Would only having a single scene be better avoiding the cost of loading a new scene entirely? I’m at an early enough stage where changing the number of scenes wouldn’t set me back months of work.

There is only so much excitement one can find when discussing menus, tomorrow I’m going to start working on generating one of the 2 key parts of the game’s world called the “Strategy Layer”. If you have played an XCOM game that term should sound familiar.

The “Strategy Layer” is going to be the world map where you move your pack and sub-packs around finding food and other creatures. Combat will take place on a separate “Tactical Layer” and will be implemented at a later date. The strategy layer is going to be procedurally generated so that each play through has some differences adding to the replayability, it won’t be 100% procedural but I will go into further detail after I’ve begun work on it.

Day 2: Development Time; 95 minutes
Started off with getting the main menu to change to a second scene which will be used for the game. I then started working on generating the “world map” and I originally wanted it to be represented with 3D hexagons, unfortunately my copy of 3DS Max started having issues and I haven’t been able to launch it as of yet. After hours of troubleshooting I’m going to try uninstalling and reinstalling to see if that fixes the error I’m getting, but I won’t need Max for a little while now.

I’ve decided to have the “world map” represented with 2D sprites and the battle sections represented with 3D models. This should help performance later on with the sprites requiring far less processing power than models would. I couldn’t find a hexagonal object either within Unity or on my computer so the “world map” is now going to be represented by square tiles. This isn’t a major change from what I wanted as the main reason for wanting hexagonal tiles is to have smoother edges than squares could give.

If I do get Max working with a quick reinstall I may swap the square tiles for hexagonal tiles.

Beyond getting the tiles to generate based on a specified width and depth the player can change before starting the game I’ve done the first pass for generating landmarks. At this stage it is completely random where they are positioned and how they interact with other landmarks.

Further passes will be made to this segment of map generation and I aim to get to a point where the generation is “believable”, where looking at the final generated map you would think that everything looks relatively “right” and where it should be. Right now a single tile of water can be surrounded by tiles of mountains, it could happen with mountaintop lakes, but it would be rather rare I would believe.

Tomorrow I’ll work further on the landmark generation and if I feel like bashing my head against problems again I’ll try and get Max working again.

Just a tiny thing, I think it would help a lot if you would put “Abandoned” with those little markers in your title or a comma behind it, because when I read the title, the first thing I thought this thread would be about, is abandoned game dev blogs XD

1 Like

@Farelle , thanks for pointing that out. Looking at it and actually thinking about how the thread title would be read its obvious how easy it would be to miss-read it. One of the short comings of posting late at night.

Day 3: Development Time; 43 minutes
Thinking with a migraine isn’t easy, so unfortunately I wasn’t able to get a whole lot done today. I did give generating mountains a second pass and changed how they were generated. When first implemented yesterday a random tile would be picked and then the tiles around it would be set to be mountains for a specified distance resulting in perfectly round mountains.

Most mountains that I have seen do follow the cone like shape, but they are frequently part of a chain of mountains so the circular shape is often a lot less circular. So I changed mountain generated to a 2 stage process, the first stage is generating “fault lines”.

A random tile would be selected and given a random length, it would then pick an adjacent tile, turn it into a “fault line” tile and tell it to pick another adjacent tile until the length of the “fault line” was reached. The direction chosen is random but after the first tile the next tile is weighted more in favor of keeping the “fault lines” straight with twice the chance on continuing in a straight line than turning.

Once the “fault lines” have been generated they are told to change to a mountain tile, they then tell their adjacent tiles to also change to mountain tiles if they pass a “chance” check which is about 65% at the moment. This generates more natural looking mountain arrangements which I’m happy with for the meantime.

Come tomorrow I’ll move on to generating lakes which are the other large landmark which will pose some problems in terms of their generation, they can be any size and shape so I want to strike a balance where they are random enough to be different each time but also believably a lake as well.

Once lakes are done I’ll move onto forests which I believe will be fairly easy as I have a method for their implementation in mind, if I somehow have some spare time after all of that the next landmark I’ll work on is rivers. They are going to be a bit of a challenge.

1 Like

Day 4: Development Time; 50 minutes
Anime is very time consuming, especially when you binge watch an entire season in one sitting! If migraines have any positives is that they allow me to have more “restful” days as I can’t travel with a headache without getting sick. Its not as bad as yesterday but it was still lingering around enough to cause issues.

I did manage to get lake and forest generation implemented, how lakes were generated gave me some issues in the sense that I didn’t know how lakes are supposed to be shape wise. After searching the internet all I found was there was no pattern with shapes, so I just left it to random chance to decide. Crude and not very pretty but for a first pass at their generation it gets the job done. Once again I’m aiming for function over form initially and a little further down the line I’ll revisit landmark generation and pretty the system up a bit.

As for forests they were more of an issue than lakes were mostly due to a glitch where they would only generate in a single direction even though they have the same code as the lake did. Deleting the function and re-writing it fixed the issue but I then ran into another issue with how I wanted to generate the forests.

I wanted to have a diminishing chance of generating another forest tile the further they got from their origin point, but quickly found out that at higher percentages they would quickly overload my cpu and bring Unity to a complete stop. I did try lower chances but would often get 1 or 2 single patches of forest tiles which wasn’t what I was aiming for.

So I reverted back to a single static chance of generating another forest tile and that works. Once again crude and I will revisit their generation a little later to make them better and the entire generation process more efficient. At this stage there is a lot of waiting involved since I want the previous set of landmarks to generate before the next set begins.

Landmark size is another thing I’m constantly fiddling with, I’m currently using a 50x50 grid of tiles and generating landmarks between 6-12 tiles in size. This size works ok for a 50x50 sized map, but smaller maps will be cluttered with landmarks and there will be no flat ground to run around on.

That is definitely going to be an aspect that gets looked at once I revisit landmark generation in the future. Unfortunately it is getting late and although I have implemented lakes and forests I’ve run out of time to get onto rivers. Those are going to be a bit of a pain due to how I want them implemented but I’ll fill you all in once I’ve had a shot at it tomorrow.

The moral of today’s story is that Anime is a time sink! No more for me for a while. XD

I actually would advise to go much further and name the thread something like “[WIP] turn based strategy game with dogs”, because it’s actually a really cool premise, and “Abandoned” not only sounds like the project may or may not be abandoned, it also sounds like the 1000th first person survival horror assetflip. I would strongly recommend to think of a different title further down the road because I think you are wasting tons of marketing potential here. Right now the name of the game doesn’t matter at all, what matters is the title of the thread getting the right people to click on it, those who would be interested in the project, and could provide you with good feedback.

2 Likes

@Martin_H , I can see the logic behind that, I was approaching the thread title with the thought that I had to have a working title instead of coming from a marketing angle. Your suggestion definitely removes any obvious confusion about the game’s status so thank you!

Day 5: Development Time; 62 minutes
Oh today has been painful, I started working on the implementation of rivers for the map generation. At first everything was going smoothly, I separated all mountain and lake tiles into their own lists and then separated those lists further with tiles that were at the edge of a mountain or lake.

The idea being that I wanted a river to start on a mountain and finish in a lake. If no mountain was present on the map the river would start at the map border and if no lake was present the river would travel to a random tile on the border. Sounds simple right? Well that is where everything kinda derailed for me.

I managed to get Unity to throw a BEX64 error, this error relates to a data flow exception if I understand it correctly. It occurs when I’m checking adjacent tiles to continue generating the river. So I figured I just needed to optimise that function a bit and all should be good. I rewrote the function but I still got the error.

I tried adding Unity and Mono Develop to the exceptions list in Avast, which worked previously when I got this same error trying to launch Call of Duty: Black Ops 3 just over a week ago. But this didn’t solve the issue. After wracking my brain for a good couple of hours as to the possible cause I’ve still not made any further headway than when I first got the error.

I will try a boot time virus scan with Avast to see if there is any malicious program running in the background as I find it a little too coincidental that Unity would throw a BEX64 error about a week after I first encountered it. Might be my paranoia kicking in but you can never be too certain.

1 Like

I have no idea what’s causing your error, but here is a shot in the dark: when checking adjacent cells, are you making sure you are not trying to access something outside of the bounds of the grid?

Did maybe something autoupdate or did you update any drivers like gpu drivers?

A friend recently switched from antivir to eset because of some false positives and I believe other problems as well.

@Martin_H , thanks for your suggestions but I managed to fix the error at least for now!

Day 6: Development Time; 0 minutes >:(
Spent a large portion of today troubleshooting Unity, after updating windows and graphics drivers, running in safe mode and clean boot modes and a whole slue of other troubleshooting methods I ended up downloading the latest version of Unity and that appears to have solved the BEX64 error problem. I now only get a stack overflow exception within Unity’s logger which will be much simpler to fix.

All the troubleshooting I had performed did at least point to the cause of the problem being Unity itself, so somehow the version I had, 5.5.0f3, had become corrupted in some way and would have issues with the Data Exception Prevention feature of Windows.

But now that hopefully this BEX64 error has been solved I can get back to actually having fun tomorrow and get these rivers working! They are currently half implemented spawning where I want them to and going where I want them to, I just need to tidy it up a bit.

Day 7: Development Time; 32 minutes
Didn’t get a whole lot done today but I did manage to finish implementing rivers into the world generation, they start in mountains and finish in lakes as intended. They do sometimes not generate at all but I think I’ve tracked the issue down to them trying to start in the middle of a mountain, and in the code they can’t override a tile that is already a mountain, lake or river so they just don’t generate.

With rivers generating that pretty much does it for a first pass on “world” map generation. Tomorrow I’ll move onto setting up player unit management and if I have time I’ll start working on navigation and movement.

Day 8: Development Time; 53 minutes
With map generation at a stage where it is serviceable I decided to move onto some more back end tasks in relation to unit tracking and management. I’ve implemented a unit tracker which will track individual stats for units and a team tracker which will track all units tied to a specific team.

Each tile also has its own movement and sight costs associated with it depending on the type of tile it is, fog of war has also started to be implemented with tiles being coloured black when they haven’t been seen, grey if they have been seen but aren’t currently in line of sight and white if they are in line of sight.

I’m now reaching the stage where the quick and easy stuff has been done and what ever I choose next is going to be a bit of a slog. I plan to move onto getting player units working tomorrow and depending how quickly that goes I may get them moving around the map as well.

Day 9: Development Time; 46 minutes
Spent most of the day being sick and doing tests for uni, all I got done was instantiating a unit tracker for the player and assigning it to a variable in the script that instantiated it so that I can then send messages to it.

Not a lot to say beyond that apart from hoping tomorrow is better.

Day 10: Sleep deprivation, tests and troubleshooting. Oh boy!
Was up all night redecorating the walls, floor and ceiling with what I had for dinner yesterday. Had 5 uni tests due today so that took most of the day. By the end of it I was semi-conscious and didn’t feel up to furthering development, so I decided that I would try and get 3DS Max working on my machine instead.

After a while I found out that version 4.7 of the .Net Framework has serious compatibility issues with a significant number of programs, so uninstalling version 4.7 and installing version 4.6.2 fixed the problem I was having with Max thankfully.

I will be out all day tomorrow so I highly doubt I will get any development done tomorrow as well, I guess I’ll see today and tomorrow as a sort of weekend from development, with Friday hopefully being better for development than today was.

Sorry for the sudden unexplained absence, going out all day as I mentioned in my previous post was a really bad idea. I felt ok on the day, but towards the evening I started feeling ill and by the following morning I had a pretty nasty chest infection, most likely from the bug I had the previous day.

As a result I’ve pretty much been bed-ridden for the past week being miserable, I’m starting to feel better but I’m definitely not completely recovered. Still have a coughing fit multiple times a day and feel really sore, but it is at the point where I am able to sit in a chair and a computer screen doesn’t cause my head to explode.

Day 11: Development Time; 61 minutes
Had to familiarise myself with what I had gotten up to as I hadn’t worked on this project for a week, so that took a couple of minutes. Once I remembered I went about setting up the sub-pack unit which the player will use to navigate around the “world map”.

The sub-pack unit is able to be clicked by the player when the game recognises that it is their turn and if they still have movement points left they will tell the tile they are standing on to perform a movement check on adjacent tiles. At this stage I plan to have these units only able to move 1 tile at a time but this system can easily be expanded to include the unit’s entire movement range if I want to.

My logic behind the single tile movement at least on the “world map” portion of the game is that I want to limit the number of active colliders at a single time. This is in relation to fog of war as in the past on some simple test projects I was only able to get tiles to constantly check if they have been hit by a collider to determine if they are visible or not when having units move long distances.

Instead of that I want to have the sub-pack unit send a message to their occupied tile to check vision range instead, this way I won’t have 2000+ tiles constantly checking if they have been hit by a collider or not. It also cleans the board up a bit so that I don’t have to worry about any unwanted objects stealing my raycasts.

During battle I’ll probably use the collider system as there will be significantly fewer tiles that will need to be checked unless I figure out a way to quickly check for vision using a more efficient method than either of the two above methods I’ve mentioned.

Still having a few ups and downs with my health over the past few days, when I get sick I really get sick especially in Winter. I find it quite difficult to shake something once I get it, I tend to go into a sort of loop where I feel good for a few days but revert back to being sick for another few. Hopefully I can shake it this time around!

Day 12: Development Time; 50 minutes
After thinking about how movement will work on the world map I decided to scrap the 1 tile plan and allow the player to move each unit its maximum move range in a single move. Thinking about how the 1 tile plan would play out I figured that it would be a bit too tedious for what I was trying to achieve.

The main reason as stated in my previous post relates to how fog of war works, mainly how the player’s units would interact with fog of war on the world map. By restricting the player to moving only 1 tile I figured that it would be easier to check the new sight range of the unit, but upon thinking about it I figured that I could just add that to a system in which the player could move more than 1 tile.

The units would move 1 tile at a time, sliding from their current tile to the next, once reaching the next tile they will call a sight range function which checks their sight and makes all visible tiles visible. Tiles that were visible to units previously won’t be shrouded in fog until the end of the player’s turn, the logic behind that is that nothing will move into those tiles during your turn outside of your own units so having vision on those tiles won’t give you an unfair advantage.

Once the sight check has been completed the unit will move to the next tile on its path towards its destination and repeat the process until it has reached its destination. The only time a unit will stop before reaching its destination is if it discovers an enemy unit, at which the unit will immediately stop moving towards its destination and the player will have what remains of its movement pool to either move towards or away from the enemy unit.

The discovery of enemy units was the key factor that I was a bit concerned about as I want fighting an enemy to be a serious decision. Using the system I described above however will allow units to move their entire move distance and also stop them when they discover an enemy, so hopefully that will help streamline the strategy layer a little bit.

But enough of me rambling about what I think, here is what I did today. After deciding to allow full movement ranges for units I changed the function that tiles use to check if they are valid movement tiles, this worked as intended with the appropriate tiles being highlighted.

With moveable tiles highlighted I started the path finding aspect of navigating the world map. This started with the selection of the destination tile, right clicking on a tile that is moveable would set it as the destination tile. That tile would then get a local copy of the selected unit and pick the adjacent tile that is closest to the selected unit and is also a moveable tile.

Once the closest tile is found it tells that tile to check if the unit has enough move cost to move onto it, if it does it is added to a list of tiles that are a viable path and then repeats the above process of finding the closest adjacent tile. If the tile’s movement cost is too high however it is set so that isn’t moveable and the previous tile is told to find another tile.

The above processes repeat until the current tile being checked is the tile the selected unit is standing on, the reason for checking the move cost is so that a unit doesn’t take a path that has a higher move cost than the unit itself has. This won’t necessarily find the path with the least movement cost, just the first path that is valid. If the player wants to take the least costly path they will need to micro-manage their movement a little, but for quickly moving units around the map it does the trick.

That’s enough rambling for one night, I’m at the stage where I need to add the valid path tiles to a list the selected unit can then use to navigate to the destination tile. Once that is done then I just need to implement the functionality for stopping upon seeing an enemy unit and the strategy layer will be in a functional state to the extent of moving units around the board.