Progress Update #74

Progress Update #74

Hello World! Welcome to the seventy fourth Dev with Dave Game Progress Update.

It’s the last update of the year, so I have tried to make this a good one. Although you know how life has been here the last few months. No doubt more obstacles will be thrown in the path of progress before the week is out.

Still, lets just put our best foot forward and try to make it to the end of the year!

Let me tell you about what I managed to do this update.,

Jobs for this update

We started the week with two cards left over on the Trello. I dragged the last three cards over from the Things to do list. This left us with the following tasks to do this update.

  • Increase difficulty and rewards for the daily missions
  • Level difficulty
  • Add timers to rewarded ads
  • More scratch card skins
  • Balance trophies

I doubt I will get all these done. But I will do my best to work through them all though, as it’s the last update of the year.

I also aim to get a new build uploaded and pushed out to the store. This is so the Beta team can spend the festive period playing Flappy-vaders and hunting for bugs. As well as looking into the social media groups I joined the other day.

Increasing difficulty and reward of daily missions

The first thing I looked at this update was where I had left off with the coding last. The Daily missions.

I had been working on a system which increases the difficulty and rewards of a daily mission. Once that mission has been completed a set number of times.

However, as I said in the last update (which you can read >here<), it didn’t work too well. There was a bug which caused the reward to only show the correct value when the app is first run for the day. Every subsequent run would see the reward value drop to the base score.

It took rather longer than I had hoped to fix this issue. All the code seemed to be correct, but I did eventually find the mistake.

It checks to see if the missions have expired during the startup when they are loaded, . If the missions needed to be refreshed, everything was ok. But if the missions hadn’t expired, I found that the code to calculate the reward values was being called BEFORE the mission progress data was loaded in! So all missions were appearing to be at progress level 0!

Once I knew what the issue was it was simple to just move that line of code to later in the function.

New bugs 😢

Adding the code to increase the difficulty and rewards of the daily missions has introduced a new bug. It increases the number of days which the player needs to collect a daily prize, but it doesn’t show this change. The mission simply reads “Collect a daily prize” regardless of how many the player is required to collect.

I have added it as a new card to the Known bugs/issues list. I will attempt to fix it at some point in the future.

Add timers to rewarded ads

There are two places in the game where rewarded ads are used. There is the button in the Daily Prizes screen which rewards you with a new scratch card. Also there is a button in the Coins screen, which rewards you with n coins when a video is watched.

Both these need some kind of timer to be displayed to show the player when an advert is next available.

What I would like, is once the button is pressed, that a period of time must elapse before the player can press it again. So instead of the text reading “Get 10 coins with a video”, once it’s pressed, it will say “Next video available in 00:05:00”.

Once the count down is finished, then the text returns to the previous string.

I am unsure if I will create a new script for handling the rewarded ads and their timers. It might be easier to simply add the code to the existing scripts which handle the daily prizes and coin purchasing.

//	This type is to store the data for the rewarded video timers (might consider moving this to the player script if its problematic to implement)
Type tRewardedAdsData
	
	coinsAdvertTimer as integer
	prizesAdvertTimer as integer
	
EndType

I added the new variables to the UI script in the end. Their functionality is largely tied in to the User Interface, so it makes sense. (At least currently, lol. I left a note in the code about moving it to the player script if I had too much trouble implementing it)

I defined the variables as integers as previous count downs have been using Unix Time. Although this one will only be for 5 or 10 minutes, so I may switch it over to use the Timer() function which returns a float.

I decided to functionise the code which provided the time in UnixTime. This made it easier to call from serveral places rather than duplicating the code.

I also realised that the two rewarded advert systems must have been written on completely different days because they are not remotely similar. One creates its own self contained loop which handles playing the advert, then checking and awarding the reward. The other is more integrated into the main loop.

Sadly, I ran out of time before completing this card. It’s an hour to go until this blog post and accompanying social media posts are due. So I had probably best call it a day.

Pressing both buttons now stores the delay timer value in the appropriate variable. The text on the button is also changed. The next thing I need to do is to get the text to count down, which should be straight forward.

As you can see from the image above, I also need to work on the actual text for this button. It works fine in the daily prize page however.

New build released for testers

The latest build went live earlier this week. If you would like to be involved in play testing the game then its not too late. Simply drop me a message on social media and I’ll sign you up.

This also led to me doing some of the basic setup for the store page while I was on the site and had a few minutes spare.

Website

I also purchased a domain for the website, and made an attempt to set up a landing page (it’s still a work in progress, but feel free to have a look and see www.flappy-vaders.co.uk)

The key elements are there however, the trailer video, call to action, email capture etc.,

I still need to connect the email form to MailChimp or whichever service I am using for it.

That’s all for now

There is still a week of social media and working on things left to go before I take a break for Christmas, but the next Dev with Dave progress update will be available on the 19th of January, next year.

If I don’t speak to you before, have a happy Christmas and a Brilliant New Years.

Game Progress Update #73

Game Progress Update #73

Hello world, and welcome to the seventy third Dev with Dave game progress update!

It’s been a busy couple of weeks, fortunately, not in the catastrophic disaster filled way that the previous month or two seemed to have been. Although both the oven and my kettle broke, which are pretty disaster like from where I sit. I was boiling water in a saucepan to make tea with for more days than I care to think.

However, I have a new kettle now and hopefully, we will be getting a new oven in the next few days 🤞.

This week I have spent my time at the keyboard working on the In progress list on the Trello board. And the time AFK I used to work on the pre-launch marketing drive.

What’s on the cards today?

There are two cards still waiting to be done in the list on the Trello, these are..

  • Increase difficulty & rewards of daily missions
  • Level difficulty

Increase difficulty & rewards of daily missions

Carrying on from last weeks update >here<, I have been playing and checking the game most days and have made the following discoveries.

At first glance, everything seems to be working correctly. But a little more digging soon revealed that the first time the game is run in a day, it works fine. But every subsequent time it’s run, for some reason the reward isn’t being calculated correctly and displays as 10 when it should say 20.

The target calculation seems to be working properly. I had shortened the number of times a player had to complete a mission type in order to speed up testing. I managed to get 3 of the mission types levelled up to at least the second level.

When I was getting ready to mark it off as done, I noticed it wasn’t working properly (Typical). It took a few days to even verify that it was happening, as the issue only occurs on the first run of each day.

Unfortunately it proved to be a somewhat troublesome bug to locate. I ran out of time before I managed to resolve it. But I will resume again next week.

Pre-launch marketing plan

The other thing I spend most of my away from my desk time doing, was working on the pre-launch marketing plan. I will of course be following my own advice from the blogs I posted on promotion earlier. You can read the first one >here<.

The plan is to start building hype for the game as soon as possible. I will be using organic social media and paid adverts to try and grow an audience. Although as the launch grows closer, I am concerned about what kind of budget I will end up having for that.

I have found a few target-demographic type groups to join on Facebook. These will be investigated once they have accepted my requests, and if they are suitable for my needs, then I will see about posting regularly and becoming part of the community.

I have also decided on a few suitable hashtags to use for other social media. Although I haven’t yet decided exactly what platforms I will be using for promotion as yet.

Quite a large part of the planning, will be deciding what media assets I will need for the various posts and ads over the duration of the prelaunch.

I also am planning on using a landing page with a form to capture email addresses.

I will share more details on this in the next update, but I am aware that the time is getting on and I am already late publishing this post.

That’s all for now

I think that’s all I have time for this update. I will as always be back in two weeks, on the 8th of December. But then I will be taking some time off from sitting behind the computer to spend some time with the family over Christmas.

Normal service will resume in the New Year, and the first Update of 2024 will be on the 5th January.

So until then, I will see you all in a fortnight.

Bad Game Dev Habits

Man using a laptop to code with the text "Bad game dev habits & how to beat them" overlaid.

Bad Game Dev Habits & how to beat them

I was talking with some friends the other day about bad game dev habits when it comes to making games. Since I seem to have more than my fair share of them, I decided to write a blog about them and how I am working to prevent them.

For those of you who don’t know, I have been coding for at least 35 years.  I learned my craft back in the days of 8 bit computers and BASIC.  I am also entirely self-taught, so I have no doubt picked up a few bad habits along the way.

Let me tell you about some of the worst habits I have with regards to game development. As well as what steps I am taking to avoid repeating them in the future.

Not commenting clearly

This is a big one for me, as I am a champion for clear and concise commenting in projects.  I’ve even written about it previously >here< on the blog.

Comments which make sense six months down the line can save hours of reading through the code when you return to the project.  Especially if you have been working on other, completely different things in the meantime.

I try and leave single line comments which describe what a variable is or does, above the line where the variable is defined.

//	Sets the players initial velocity
player.yVelocity#=0.0

I also leave blocks of code at the top of a function definition.  These contain the usage parameters of the function, as well as a couple of lines of code with a usage example or any information which may be helpful.

//********************************************************************************
//	null = UpdateZones( speed# as float)
//********************************************************************************
//	This function updates the positions of the zone sprites and maintains the 
//	distance variable
//********************************************************************************

Lastly, I also leave the occasional comment on blocks of code to explain what it does where necessary.  Some code is so simple that it doesn’t need a comment.  Sometimes a single comment will suffice for four or five lines of code.

//	Creates the sprite and sets the properties
bgLayers[layerID].spriteID[0]=CreateSprite(imgID)
SetSpritePosition(bgLayers[layerID].spriteID[0] , 0 , 0)
SetSpriteSize(bgLayers[layerID].spriteID[0] , width# , height#)

Even with Flappy-vaders, I recently found myself trying to find out what a variable did because I had not commented it, or indeed given it a sensible name.  This leads us nicely onto the next section…

Poorly named variables

When I first learned to code on the ZX Spectrum, all some variables* had to have single character names.

Nowadays there are few limitations on variable naming outside of coding conventions.  The trick with variable naming is to use as few words as possible to accurately describe what the variable is or what it does.

So when I was working on Flappy-vaders the other day, and found a variable called missionTotals which itself is quite an ambiguous name, I was understandably miffed.  But to add insult to injury, I hadn’t left a comment explaining what the variable did either.

I eventually found comments in another function which explained what the variable was intended for, but again, that was time wasted looking through the code which could have been better used for writing it.

* I had mis-remembered this, It was only some variables, like strings or for/next loops which required a single character name.  For regular variables, you were much freer and could even use spaces (although the compiler ignored these)

Overwriting graphical projects with single layer images

It’s not just the programing side of things where bad habits can cause hours of extra work down the line.  Graphical assets are just as susceptible.

One of the most frustrating things I have found myself doing inside Paint .net (my favourite free paint tool) is removing the layers of a project file so I can copy/paste the image into another image, and then accidentally overwriting the original project file with the single layer one.

This could easily be avoided by copying the existing project file into the new project folder, leaving the original existing project file untouched.

Not saving the ttf file or even writing the font name down

Sometimes you need a specific font style to base a logo around or the like.  You know what it’s like.  Hunting around font sites looking for the perfect font.

It doesn’t usually take too long to find a few suitable candidates, and before you know it you have the logo created, and saved and forgotten about.

Until the next year, when you need to reproduce the logo in a higher resolution for some promotional material.  But you’re on a different PC now, this new one doesn’t seem to have the font you used installed.

Thanks to the time which has passed, and the fact that the project you worked on needed a dozen fonts, you have absolutely no idea what the font you used for the logo was.

I have lost count of the number of times I have done this.

These days when I am doing this, I not only write down the font name and URL, but also the sizes and whether or not I used Bold or Italics.  I also ensure the font .ttf file is stored in the project folder with its license file.

Leaving (often rude) debug stuff in production

As I said at the beginning of this post, I learned to code in the 80s on a ZX Spectrum, using BASIC.  There was no fancy IDE with auto code complete and intellisense.  And there definitely wasn’t any debuggers or tools like code stepping or break points.

I learned early on that if I needed visual confirmation of a section of code was being executed, I could simply drop a print statement into the code to display on screen that the code had been executed ok.

This is how I prefer to debug now.  It comes as second nature to me.

Now somewhere along the journey through the years, I started using random words to make it easier to track down debug statements.  I could simply use the search function to look for the specific word I had typed in the print statement.  The more unique and less likely to appear in other comments, the better.

Because I have the mind of a 14 year old boy at times (we never truly grow up), a lot of these unique debug phrases were erm, rude.  Often they were several words strung together, any one of which would have your granny clutching at her pearls.

Now, sometimes, these debug lines hide in the depths of the code, and only show themselves on very very rare occasions.

So occasionally that they have gone unnoticed when we are cleaning up a project ready for release to production.

On at least one occasion, they have made it onto the store!

These days I use a simple search of the entire project for every Print or Debug.Log command in the entire project and make sure that they are commented out.

Conclusion

That’s I think all I can think of for this post.  I’ll leave you with some general advice which will hopefully save you from wasting hours of your time in the future.

  • Make sure you save often, and back up your project.  Use a source repository like GIT, especially if you are working as a team.
  • Ensure you have a copy of every asset used in the creation of all the assets you make.  Put them all in a folder, and never use the original file to work with, always copy it and work with the copy.
  • Keep a written log of what you have done/changed and what you are planning to do next. I find OneNote is ideal for this.

I hope this post is of some help to you all. Feel free to get in touch with me to let me know about your bad game dev habits.

Game Progress Update #72

Game Progress Update #72

Hello world! And welcome to the seventy second Dev with Dave Game Progress Update! I feel like this last couple of weeks has been a little better than the last one.

There has still been plenty of unwanted drama keeping me away from the keyboard, but I have managed to get a bit done to the game. I’m starting to think I should give up my career as a developer to instead write for the soap operas.

I even had to contend with Trello going down while I was trying to finish this blog post! Which is most unusual. Anyway, lets have a look at what I did manage to get done this week..

Plan for this update

Carrying on from the last progress update, there are the following things to do in the In progress column of the Trello board this update.

  • Review phase 1 cards
  • Increase difficulty and rewards of daily missions
  • Level difficulty

There are only a handful of the review phase 1 cards left. These are ones which needed boosts to be unlocked and purchased first, which I didn’t have the coin for. This time round I will edit the game to award me several thousand coins. I couldn’t do this last update as I was away from the PC, playing the compiled version on my phone.

Review phase 1 cards

Once I had added the line which awarded the player 250,000 coins, it was straight forward to test the remaining phase 1 cards.

It only took an hour or so to play the game enough to have completed the last few cards. Well, to be honest, I probably could have done it in half the time, but the game is quite addictive, lol.

The cards were fairly straight forward to check. They were things like the head start not playing the shield sound effect, or purchasing or using boosts not changing the UI values accordingly.

I also made sure that I removed the line of code which award the extra coins for testing purposes, when I finished testing.

Increase difficulty and rewards of daily missions

Reading back over the code..

At first glance, it didn’t seem as though I had added much in the way of code to handle the progression of the daily missions.

There was a missionTotals[] variable, but there was nothing in the comments or the like describing what it’s purpose was. I had actually commented it’s definition, but nothing helpful about what I was intending to use it for.

A little digging later, and I found that in both the load and save daily mission data functions, I had referred to the variable in the comments as “the mission totals count”. It’s my belief that I had intended this array to store the number of times each daily mission had been completed.

No matter how many times I say about HOW VERY IMPORTANT commenting your code is, for exactly this reason; I still find myself causing extra work by not doing it.

Making some changes

Going from here, I added a second variable to the type which is to track the current level of each daily mission. The plan is that once the specific mission types Total has exceeded a set value, then the total is reset to zero and the level value is increased. The level value is used to determine the difficulty and reward of the mission.

added a line to the calculate the reward function for missions, which just times the level value by ten to get the reward value.

Changing the target value however, was a lot trickier. Each mission type has its own initial target value ranging from 1 to 50. Ideally, I need to write a function like the one which calculates the reward value. This would allow me to As I felt on a bit pressured for time, I am kludging it for now, by simply multiplying the initial value by the mission type level value. I can always revisit it in the future if the values need changing.

I need to get the test build uploaded so I can test this. In order to check the code works, I need to play the game for five days consecutively. (Unless I cheekily change the value, so I can check it later this evening once the roll-over has happened 🙂 )

I still need to verify that this all works, but that will take a few days unfortunately. So I won’t know the results until next week.

Level difficulty

I didn’t manage to get any coding related to this last card done this time round. I did however get some thinking done about how this will work.

The issue is that as the game speed increases, it makes some of the zones very tricky to get through. It can leave the game feeling as though the difficulty suddenly ramps up, disproportionately so at times. So the plan for this card is to devise something to lessen this effect.

I’m unsure if I want to implement any of the following methods to try and add a bit more playability to the game.,

  • create a system which adapts the levels by increasing the distance between obstacles slightly.
  • Create several new levels, and develop a system to separate slow and faster levels.
  • Tweak the existing levels so they work better with a wider range of speeds

Ideally I would like to create at least twice as many zones as there are already, to prevent the game from becoming too repetitive, too quickly.

GDD Update

As well as all of the above stuff, I took the opportunity of updating the GDD with all the changes which were marked in the completed cards I reviewed from phase 1.

There aren’t many changes. The biggest ones were relating to the daily prizes and missions. There are a few minor changes however as well.

Click the link below to download it.

Click here to view the GDD as a pdf

That’s all for now

Once again I’ll be back in another fortnight with more news about the game.

I’m aware that I need to be working on the marketing strategy, especially considering how near to completion the game is. Aside from one video trailer I made, I’ve not really done anything on this apart from a few pages of notes. I’m not sure if I should include this in the progress update, or perhaps write a separate blog post about it. (Or maybe both, lol, who knows)

Anyway, I hope you’ve enjoyed reading this post. I’ll see you again in two weeks.

Game Progress Update #71

Game Progress Update #71

Hello World! And welcome to the seventy first Dev with Dave Game progress Update.

I’m sad to say that it’s been another of those weeks where nothing has gone to plan. I’m already two days late starting this blog post.

Unfortunately, my girlfriend’s diabetes put her in hospital again this week, so my available time to work on Flappy-vaders has been dramatically reduced. It doesn’t help that my car is off the road as well. So, I have had to be finding other ways of getting around.

Taxis are the easiest and quickest, but most expensive. We also have those Lime electric scooters and bikes around here, which are cheaper than taxis but are slower. They are great fun though. Lastly there are busses. Busses are slow and uncomfortable and take an age to get anywhere. They are cheap though.

I’ve also spent more time than usual simply walking places. I like walking, it gives me chance to listen to books on Audible and enjoy the scenery.

Anyhoo, lol, In the little time I have had spare, I have managed to get a little bit of work done on Flappy-vaders. Let’s dive into what’s been done since the last update, without further ado.

Reviewing Phase 1 Trello Cards

In the last Game Progress Update, I finished with one remaining card on the Trello “In progress” column. That was to review all the cards which had been completed and moved to the “Under review” column for evaluation.

The one solitary benefit of my girlfriend being in hospital was that I got to spend a few hours sitting in a waiting room playing Flappy-vaders and working my way through the cards on the column.

I won’t list the individual cards here, as I think that would be a little dull tbh. But feel free to check out the Trello board >here< and see for yourself.

The only ones I couldn’t verify were the ones which involved unlocking and using the boosts. As I was away from the computer and playing the compiled version on my phone, I couldn’t simply add more coins to my total so I could play it.

Planning Phase 2

I have also managed to get some work done on the planning for the difficulty increases as the player proceeds with the game. I’m already thinking 1000 coins is too much for the boost unlocks.

I’m planning on increasing the difficulty and reward for the daily missions as the player progresses through them. For example, the player would need to complete “Travel 25 distance” mission maybe two or three times, before the distance increases to 50 and the reward gets doubled as well.

I’d also quite like to tweak some of the trophy values. They have all been tested now, and the harder ones need to be made a little tougher.

And lastly I would like to at least double the number of zones, with new patterns for the obstacles and enemies.

That’s all for this week

I’m happy to announce that my girlfriend was discharged from hospital after a couple of nights stay. She’s not a hundred percent better yet, but I’m glad she’s home.

Work on the game will proceed as normal next time round hopefully, as I feel I have had more than my fair share of bad luck and interruptions.

In the next update I will attempt to look more deeply into the promotional strategy I will be using for the game, as well as trying to get on with making the Phase two changes to the gameplay.

5 Free Alternatives to Unity!

5 Free Alternatives to Unity!

After the Unity pricing fiasco of last month, a lot of Devs are still angry at Unity and have swore to switch to alternative game engines to develop their games with. In this article I am going to look deeper into five alternatives to Unity, all of which are free to get started with.

Unreal Engine

Unreal Engine 5 logo

Unreal Engine (Or just UE) is a big name in game development circles, and is probably Unity’s biggest rival. It has been used to make games like Fortnite, Batman Arkham Knight, Hollow knight and Borderlands.

As you can imagine, for a software with the scope of UE, it has a bit of a learning curve. It uses C++ to write scripts, which is not the easiest of languages to learn. But it does also have a visual scripting system called Blueprints. This allows you to create games using a more visual node based system.

Feature wise, UE is a heavy weight contender. It is packed with features like volumetric effects, Dynamic lighting, Advanced nanite landscaping system, a skeleton animation editor, and dozens of other AAA features.

It has been said that Unreal Engine isn’t particularly good for 2D projects. Whether this ever was true or not, it is certainly something that has got better with the more recent builds of UE.

There is a very active community for Unreal Engine. There are also lots of tutorials available for free on YouTube. Or, there are courses for sale on Udemy and the like.

Unreal is free to use. However, they ask for a 5% share of any income your game makes over the first $1 million dollars.

https://www.unrealengine.com/

Godot

Godot Logo

Godot is a free cross platform open source game engine.

It was initially designed by Juan Linietsky and Ariel Manzur. It was released in 2014, and runs on a variety of platforms and can compile to even more.

Godot uses Open GL as a renderer. With the latest version of Godot using Vulkan. It allows you to create 2D and 3D games using a range of different languages. As well as Godot’s own GDScript language, it allows you to use C++ and C#, or others which can be added using GDExtension.

It also has a very strong GUI system. It allows the user to easily create scalable UIs for any game or application.

Version 4.0 is the latest version of Godot. It boasts a range of new features as well as the Vulkan renderer which I mentioned earlier. It also has a handy movie maker mode you can use to record gameplay or cutscenes.

Because it is open source and free under the MIT license, Godot is free to use and will never charge you a fee for games written with it. Although there is the option to donate money on their homepage.

Like Unreal Engine, Godot has a huge community. As well as the official websites FAQ and Support stuff, the GitHub page for bug reports, there is social media channels and a discord server. Not to mention a whole load of community created user groups & free tutorials.

https://godotengine.org/

GameMaker

GameMaker Logo

GameMaker is the first one of the engines in this list which is 2D only. Despite this it’s a fairly capable cross platform engine which has created games like Hotline Miami on the Playstation.

It offers you two methods to create your game out the box. Firstly, You can code it using GML Code, a simple enough scripting language to get the hang of; Or you can use the GML Visual editor, a visual scripting method which uses action blocks to construct the game logic in an intuitive way.

It has it’s own physics system integrated into GML, and has Spine support for skeletal animations. It also supports shaders for effects and post processing.

There are an abundance of tutorials available free from the website, and on YouTube, as well as paid for courses on places like Udemy. There is a large and helpful community of developers.

Although GameMaker is free to learn and use, the only place you can publish to on the free package is the GX.games website. You need to take out a subscription before you can publish to any other platform.

FreeCreatorIndieEnterprise
GX.Games ExportGX.Games ExportGX.Games ExportGX.Games Export
Desktop ExportsDesktop ExportsDesktop Exports
Web ExportsWeb Exports
Mobile ExportsMobile Exports
Console Exports
$0.00$4.99 pcm$9.99 pcm$79.99 pcm

The above table shows which platforms you can publish to with which subscription tier. It also shows the monthly price. The annual prices are 10x the monthly price, a saving of two months subscription.

https://gamemaker.io/

GDevelop

GDevelop logo

GDevelop is another free open source game engine. It doesn’t offer console export options, unlike the previous engines in this list. It does however give the option to make 2D and 3D games.

I wasn’t sure whether to include this or not when I was originally planning this list. GDevelop comes across as more aimed at beginners, but after some research I have discovered it’s quite a capable game engine.

The editor can run on a variety of platforms, including a specific iOS/Android app. It offers codeless game creation using events and behaviours. Although users can use Javascript to create code blocks which can be used in place of events. This also allows users to enhance their games by adding additional features to engine.

Out of the box it offers the expected array of features

  • Tilemaps.
  • Physics engine.
  • Pathfinding.
  • Platformer engine.
  • Dialogue editor (Yarn Classic)
  • Leaderboards.
  • Gamepad support.
  • Particle Emitter.

Although closer examination reveals that the physics engine is 2D only, as it is based on the Box2D physics engine.

One of the most novel features of this engine is that it offers cloud based Mac and iOS compilation. Meaning you can get your game published without owning Apple hardware. However, it’s not cheap and its only available using your own certificates on the most expensive business tier. I thought it was worth mentioning anyway.

https://gdevelop.io/

Defold

Defold logo

Defold is another open source cross platform game engine, and the last of the alternatives to Unity we will look at today.

It can develop both 2D and 3D games. Although it was developed as a 3D engine, it was created with tools to allow development of 2D as well. It uses a modular, component based system of game objects.

Defold uses Lua as a scripting language. For those who don’t know, Lua is powerful and lightweight scripting language which combines simple syntax with powerful data description constructs.

It has support for 2D physics based on Box2D like GDevelop, but also supports 3D physics using Bullet.

The Editor is quite flexible, allowing for the editing of animations, scenes, UI, etc. all in Visual environment. It also boasts about its compiled games having a much smaller file size compared to Unity or Unreal.

There seems to be a reasonable sized community, with a forum on the official website, and the usual tutorials and asset packs to start developers off.

It’s been used to create games like Family Island by Melsoft, which boasts an impressive 50 million downloads on the Google Play store.

Defold is another game engine which is totally free, regardless of how well your game performs in any market.

https://defold.com/

Conclusion

There we have it. Regardless of how you feel about Unity and their new usage fees, there are plenty of alternatives to Unity. I only included a small selection in this article, and obviously there are the paid for engines like App Game Kit Studio which I am building Flappy-vaders with.

For a more Unity like toolset, then UE is the one to use but does also charge a fee if your game exceeds certain thresholds. If you are after a simpler game engine, but one that doesn’t charge a fee then one of the open source options like Godot or Defold would probably suit better.

My suggestion would be to look at each website in turn and decide which engine would best suit the game you have in mind. As each engine on this list is free, there is nothing stopping you from downloading and trying them out first.

Game Progress Update #70

Game Progress Update #70

Hello world! And welcome to the seventieth Dev with Dave Game Progress Update!

It just occurred to me that when we reach the seventy eighth game progress update, that means I’ll have been working on Flappy-vaders for three years in real time. Since I’m only working on it part time, this equates to around a year, perhaps a year and a half of actual development time.

(I certainly wasn’t expecting this to take quite as long as it has when I began this journey! 😅)

We’re in the final stretch now, I really should be getting busy thinking about how I’m going to promote the game when it’s released (And before!), and designing, if not creating assets to use in the promotion.

I’ve not really thought much about promoting the game since Update 66. Which is when I last worked on the promotional video. (It’s >here< if you want to have a look)

This time round

I have moved three cards into the In Progress list on the Trello board.

  • Add a back button to the daily prize awarded screen
  • Make icons for the Daily Missions screen
  • Review phase 1 things in the Under Review list.

Add a back button to the Daily prize awarded screen

I was hoping this would be a simple case of adding a UI element to the existing UI page when I selected this task off the Things to do list on the Trello. But when I checked the UI pages I couldn’t see it.

I had a look again at the screen in action, and saw that it appeared to be a sprite overlay, rather than a UI page, as the scratcher UI page is visible underneath. This rules out my original fix, and means it’ll probably take a lot longer to sort out. 😞

After some investigation, I found where the code for the overlay sprite was being called from. It was a straight forward job to pass the function a reference to the UI and add a back button. This code could hide and show at the same time as the sprite overlay. All I’d need to do is ensure that the button’s draw depth is above the overlay panel.

With that in mind, I set off the the UI script to find a back button from an existing page to copy and paste onto the scratcher page.

Except.

There aren’t any? All the other UI pages just use the “Left facing triangle” icon in the top left corner of the screen.

I’m not sure why I thought the game needed a back button on this particular screen, but it seems to break continuity of the UI design to add one. Because of this, I have decided not to it after all.

Make icons for the Daily Missions screen

A bit of an oversight perhaps, but I noticed the Daily missions screen had only grey boxes instead of icons. Fixing this was added to the Phase 2, the polishing phase.

There are I think, five types of Daily Mission. Each one needs it’s own icon to represent it.

  • Score x amount of points
  • Travel x distance
  • Collect a daily prize
  • Play x number of games
  • Collect x coins

Initially I sat down at my desk with some paper and a pencil and started thinking. Some of the icons were obvious to me. I could simply reuse a coin icon from another menu, for example.

Even with the limited 22 x 22 pixel size, It didn’t take long to create the several of the icons.

Traveling distance however, was proving to be quite a challenge. I couldn’t think of a single concept or idea to represent traveling distance which would fill the tiny grey square.

I finally ended up using ChatGPT and Bind AI Image generator to help me come up with some ideas. You can read all about my experience using AI in this blog post.

The image above shows a few of the icons I created in place in the Daily Missions screen. The bottom one is the travel distance Icon which I had difficulties with. Until ultimately I sought the help of AI.

Review completed tasks from Phase 1

With the other two tasks out the way. It meant I had chance to review some of the cards in the Under Review list on Trello.

This meant I had to sit for a few hours with the Trello open, playing Flappy-vaders! It’s a tough job, lol, but someone has to do it.

I quickly got into a habit of reading the next card, and having a turn at the game. Fortunately the first few cards were easy enough to check in a single game.

Overall I think I managed to move 15 cards from under review to the completed list. At least before it was time to finish the blog post and do all the social media as well! lol

There are still loads of cards to verify, so I expect I’ll still be doing this next week. A lot of them mean editing the game so I have enough coins to buy unlocks and powerups so I can test some of the other cards.

That’s all for now

That’s all I have time for now I’m afraid.

Sorry the social media posting has been a bit sporadic the last few weeks. Other things have been getting in the way. Sadly real life things which I can’t just push to one side.

I will definitely be back in a fortnight, and I’ll try and do a better job with the social media stuff 😊

Until next time..

Using AI as a Game Developer

Introduction

There has been lots of talk about AI recently. From the tinfoil hat wearing doom mongers, to those who think it marks the next age of human civilisation, and everyone in between. In fact, it’s hard to go online these days without stumbling across posts relating to AI.

With that in mind, I thought I would tell this short tale about how I used AI to help me in my work as an Indie Developer.

Flappy-Vaders

As many of you know, I am writing a game called Flappy-vaders in my free time. I share progress updates every two weeks, here on the blog.

The other day I was sat working on the game during a spare hour or two. I was trying to create some icons to represent the different daily missions. Apart from a couple of pencil sketches, I really had no clue as to what they should look like.

It’s fair to say I am a programmer, not an artist. I was having a very frustrating time trying to convert the various concepts to images. Time was ticking on, so I thought I would try see if using AI would help any.

What is ChatGPT?

I’m sure you are all aware of OpenAI’s ChatGPT. It’s a large language processing AI model, which can understand and reply to queries using human language.

It can do things like write essays or blog posts, find formulae, write poems or other creative stories, research a topic and provide a summary of the information, and even write code!

Hello ChatGPT.

I’d used ChatGPT previously for another unrelated task, so I didn’t need to create an account. I could just log into my existing one.

The above picture is the conversation I had with ChatGPT, where I explained what I needed help with. Then I narrowed down the scope of the task by asking for a specific concept.

I asked it to help me with an icon to represent distance, for the distance travelled daily mission.

ChatGPT replies more or less in real time. You can watch the text appear on screen as though it is typing to you. It didn’t take long before it had given me a list of seven ideas which all seemed to fit the requirements.

I narrowed the selection down to just two ideas, and was about to reach for my pencil again when I wondered whether AI could help any further with the task.

Bing AI Image Generator

The next AI tool I tried was the Bing AI Image Generator, which is another free to use tool.

Unlike ChatGPT, which provides you with text as an output, the AI Image Generator outputs images. So I entered the two suggestions I was considering from ChatGPT.

Suggestion 1 – A road or pathway stretching off into the distance

The first one was a road or pathway stretching off into the distance. However, I didn’t specify the size of the icons with this first prompt.

I was suitably impressed with the first round of images. particuarly the bottom left image, although the background wouldn’t translate to pixel art very well.

I tried again, using the same prompt but using the term “small icon” rather than “icon”, and after a minute or got this second batch of images.

Again the designs were quite good. The general image of the road snaking off into the distance is strong in each of them.

I’m not sure however that the curves of the sweeping road would translate very well to the 22 x 22 pixel square image I need for the UI in the game.

I decided that didn’t need to refine this design further. So I moved on to the second one of the ideas I had shortlisted from the ChatGPT output.

Suggestion 2 – Two points or pins connected with a line

Next I tried the other option which I liked from the ChatGPT output. This was “Two points or pins connected with a line between them”.

It didn’t take a terribly long time for Bing to once again supply me with four images which it had generated from the prompt I had given it.

As soon as I saw the output, I knew that this was the one which I would use in the game.

The familiarity of the Google Maps style pin clearly conveys that the icon is representing travelling between the two point. This is exactly what I needed for the “Travel n Distance” daily mission.

I still however had to try and get the image to fit into a 22 x 22 pixel square.

I opened up Paint .Net and set to work on creating the icon.

The finished icon

The finished icon is shown in the screenshot below. I don’t think I did too bad of a job making the elements of the icon recognisable at the size it needed to be.

Overall, from the time I decided to open ChatGPT to the time I closed Paint .Net and added the icons to the media folder of the game, it took about 3 hours. Most of this time was me being overly fussy about tweaking the images in the art package.

Conclusion

I am in no doubt that there is no danger of humanity being replaced by AI anytime soon. It does however make for a very valuable tool for researching a topic, or for providing inspiration for graphical design.

I didn’t use it to generate any code however. I am aware that it can write code, but it’s best to view it as pseudo code as it is quite often error filled or generally incorrect.

I really do think that using AI for the simple task described above has saved me literally hours of time sketching and scratching my head. I am definitely going to look for more ways I can use AI to streamline my game development process.