Cydonian Games https://cydonian.games Game Studio Tue, 22 Sep 2020 11:28:29 +0000 en-GB hourly 1 https://wordpress.org/?v=5.8.10 Voidspeed Marketing Stats and what I’ve done so far https://cydonian.games/development/voidspeed-marketing-stats-1/ https://cydonian.games/development/voidspeed-marketing-stats-1/#respond Tue, 22 Sep 2020 11:18:16 +0000 http://cydonian.games/?p=283 I always love when other devs share wishlist and other marketing stats. It helps me figure out what is going on with my own stuff much better, what to expect etc. Especially if it’s a[...]

The post Voidspeed Marketing Stats and what I’ve done so far appeared first on Cydonian Games.

]]>
I always love when other devs share wishlist and other marketing stats. It helps me figure out what is going on with my own stuff much better, what to expect etc. Especially if it’s a combo of things like not only showing wishlists but also where they came from directly. So I’m here to return the favor:

I posted my page for my pseudo-3D racing game Voidspeed Outlaw on steam as coming soon about 2 weeks ago.

https://store.steampowered.com/app/1252130/Voidspeed_Outlaw/

Stats so far:

Altogether 403 wishlists in 17 days.

Page visits wise it’s practically all from posts that I’ve personally made (and a few the artist did), or that a few journalists have posted. Traffic within steam is practically non-existent.

It’s a two-person team currently and neither of us are working on the game full time yet. Which means I’m doing the marketing right now but have extremely limited time resources for it. I’ve set a specific goal of reaching 2000 wishlists with my work by March-April 2021 and am tracking progress towards that. By then or sometime before that I will try to either up that trend to 5000 myself through paid marketing or find a publisher for that.

 

Breakdown of what I did and what result it had:

Feel free to skip to conclusions if you don’t want the step by step break-down.

5. September 

Posted the steam page.

Posted two tweets with flashy gifs and steam page links of the game as an announcement of the game. I messed up the first one in the excitement and forgot to add any hashtags. In any case I have an ok twitter following (4400 followers, https://twitter.com/GamesbyMiLu ) and the gifs I use have previously moved quite well. So so did these tweets. The first tweet has amassed so far 135 retweets and 354 likes and 23k impressions.


The surprising (to me) part here though is that even at such high visibility numbers and engagement through likes and retweets the number of actual steam page link clicks is still only 123.

The second tweet did a bit lower at 51 retweets, 121 likes, 8.7k impressions, 41 link clicks.

(these are stats right now, they were about 60% of that amount the end of the first day).

If I compare these to steam page visits then I can see about the same amount of visits again from people searching for the game directly on steam (I know the source is still these tweets since I literally only made these 2 tweets and told a couple of friends about the page posting).

Results: 106 new wishlists

6. September  

Posted an announcement gif and steam link on the facebook group “Indie Game Promo”. Did various smaller things like retweeted my announcements from the previous day etc. The facebook post got 180 likes and 4 shares.

Results: 41 new wishlists

7. September

Posted a small funny gif of editing the trailer on facebook group GameDev Show and Test. This was really more so since I thought it was fun, I wasn’t really expecting much or anything here. Posted the same on twitter. Posted another small tweet of “Hey look here’s my new game” (4k impressions). Much less direct marketing here.

https://twitter.com/GamesbyMiLu/status/1302943872520159232/photo/1

I believe some of the results on this day were from overflow/late comers from the previous 2 days work.

Results: 34 new wishlists

8. September

No marketing action. Didn’t even mention the game anywhere. Was too busy programming, but also kind of wanted to see how low it dips if I do nothing.

Results: 8 new wishlists

9. September

I took a bit of time to send out an actual proper press release about the game announcement to www.gamespress.com (check their site on how to do it). It took a bit of time to figure out the formatting and what is going on, but I’d rate this as a very good low bang for your buck action for specific major announcements. Surprisingly/Luckily there are journalists who open these and read them (even for unknown studios and games).

Gamasutra also automatically reblogs it:
https://www.gamasutra.com/view/pressreleases/369785/Retrofuturistic_pseudo3D_racer_Voidspeed_Outlaw_announced_and_trailer_released.php

I got a couple of small game news sites and places to mention the game directly from this press release already this day. I also sent out a tweet which did ok (6k impressions). Most of the wishlists are probably from the journalist mentions though.

Results: 25 new wishlists

10. September

Got an article from Gamespark japan though from the previous days press release which was great https://www.gamespark.jp/article/2020/09/10/102041.html . A few other smaller articles as well. Results wise I’d say it seems like most of the wishlists this day are from gamespark though. But I’m of course super grateful for every journalist who mentioned it!

Results: 21 new wishlists.

11. September

Actually took a few hours of time to do some marketing sleuthing. I was running out of places to post. Looked for forums for my genre(s), subreddits and facebook groups.

Reddit wise I found a couple good resources:

Good place for different genre subreddits: https://www.reddit.com/r/gaming/wiki/faq#wiki_genres

Good thread here: https://www.reddit.com/r/gamedev/comments/8zwmio/how_to_post_about_your_game_without_being_flamed/

I fail at the self promo rule for most subreddits though (I post 100s of comments, very few full posts), so my reach with this account is limited. I ended up finding 1 facebook group though “Retro Indie Pixel Game” and a good subreddit r/indiegaming. Posted in both.

The facebook post amassed 106 likes. Reddit post got 700 upvotes. Seemed like putting in the actual work time paid off. Seems like most probably a bigger chunk of the results were from the reddit post though.

Results: 63 new wishlists

12. – 20. September

Not much direct marketing work. Got super busy with code/other work, not willing to work on a weekend due to work-life balance sanity reasons, etc. I posted random in dev gifs on twitter while I was working a couple days.

Results: Lowest amount 2 wishlists per day, Highest at 18. Lowest was when no posts for 2 days, highest was when I posted WIP gifs.

21. September

Took some actual time again to balance previous week of no action. Found more subreddits to post to (r/indiedev), figured out how to post to imgur, did another facebook post (game maker studio community). The indiedev post got 500 upvotes, game maker community post got 70 likes. Imgur was mostly a dud.

Results: 34 new wishlists.

Conclusions I’ve drawn:

 

1. Overall a single tweet, facebook or reddit post even if it looks relatively impressive (500 favourites, 120 retweets,  700 upvotes etc) nets less actual action than I’d expect personally.

This has made me look at the tweets and posts I see at like 5k favourites/likes from other games a bit differently. It’s great, but you still even at that level need a bunch of them.

If I tweet out a solid tweet with a flashy gif then the amount of retweets is approximately comparable to the amount of actual page visits I get – page visits are 1.5x-2x the number of retweets. Half are direct link clicks, the rest are people going on steam and writing in the name of the game directly. This amount is surprising (and a bit lower than I thought) to me.

Luckily since the gifs usually show a lot of the game already though then a high percentage of these page clicks seem to turn to wishlists directly (about half off the top of my head).

2. Gathering wishlists is 100% up to me for the foreseeable future.

I need to keep posting. Steam gives almost no pageviews at all at these scales.

Maybe this is due to the algorithm also factoring in my previous game (which is showing it’s age in sales), or maybe it’s just standard by now. I’m still figuring that part out. In any case the days I did basically 0 posting anywhere got added wishlists at maximum 9 (which was probably leftovers from a previous day) and at minimum a super low unsustainable 2.

3. Luckily though there are relatively low effort places to post and get ok results.

r/indiegaming, r/indiedev, facebook Indie Game Promo, sending a press release to gamespress.com etc. Most of the time is spent finding these places, not actually posting there, which is also good since if I generate new content to post once found these places can be reused.

4. I seem to be on track (when comparing to my previous games stats + other stats I have access to) to hit 2000 wishlists by march or april 2021.

+ This is good, because it basically says that the game is worth it to create for me at the current level or resource investment.
+ This is especially good because it’s only factoring in stuff that I’m doing currently. It’s not factoring in possible bigger media interest later, hiring a marketer, compounding interest over time, releasing a demo and a surge of wishlists from youtubers playing it (most of the wishlists for my previous game came from there) etc. Basically there’s a big possibility of raising the ceiling here quite well since I haven’t really done much yet.
+ This is bad though because it’s also quite a grind so far. I’m personally generating every single wishlist and page view. While also programming the game, doing art for it etc all this not full time. I’ll have to check sustainability a month or two down the line and maybe get a marketer earlier depending on how tired I get and if the trend goes up or down.

I can do another post a bit down the line on how I made it to the 2000 wishlists are enough for me conclusion, how I’m tracking progress towards that etc.

Hope these stats and conclusions are helpful to you on your own journeys! If you enjoyed the post and like the game itself then please consider wishlisting and following on steam. Much luck to you all with your own games! 🙂

The post Voidspeed Marketing Stats and what I’ve done so far appeared first on Cydonian Games.

]]>
https://cydonian.games/development/voidspeed-marketing-stats-1/feed/ 0
Voidship: The Long Journey to launch in Steam on February 8th https://cydonian.games/development/voidship-the-long-journey-to-launch-in-steam-on-february-8th/ https://cydonian.games/development/voidship-the-long-journey-to-launch-in-steam-on-february-8th/#respond Mon, 04 Feb 2019 13:29:18 +0000 http://cydonian.games/?p=235 Gather around as we polish the hull, fine-tune the engines and prepare for liftoff. Voidship: The Long Journey will release on February 8th. The Terran Empire is in shambles and you barely escaped the onslaught.[...]

The post Voidship: The Long Journey to launch in Steam on February 8th appeared first on Cydonian Games.

]]>
Gather around as we polish the hull, fine-tune the engines and prepare for liftoff.
Voidship: The Long Journey will release on February 8th.

The Terran Empire is in shambles and you barely escaped the onslaught. Your only mission is to reach a set of coordinates, a journey that will take several centuries. To reach your destination you´ll need to build your ship, explore unknown sectors, gather resources, find new crew members, discover new technologies, assist your allies and defeat your enemies.

Key features:
  • Build your own ship
  • Space travel takes time
  • Uniquely skilled crew members
  • Complex strategic gameplay
  • Play RTS or shooter mode
  • Real-time 2D space combat
  • Randomly generated maps and rogue-lite gameplay

If you love exploring and battling through unknown quadrants of space with a fully customizable warship… Voidship: The Long Journey is for you!

Come chat with us in Discord or Twitter!
Wishlist Voidship: The Long Journey in Steam and we´ll see you at launch!

The post Voidship: The Long Journey to launch in Steam on February 8th appeared first on Cydonian Games.

]]>
https://cydonian.games/development/voidship-the-long-journey-to-launch-in-steam-on-february-8th/feed/ 0
Everything that can happen, will happen – A quick tip on making your GM:S project failsafe. https://cydonian.games/tips/everything-that-can-happen-will-happen/ https://cydonian.games/tips/everything-that-can-happen-will-happen/#respond Wed, 06 Jun 2018 13:17:09 +0000 http://cydonian.games/?p=197 Since releasing the first public alpha demo of Voidship I’ve gotten a lot of interesting bug reports. Sometimes there are bugs which are so unlikely to ever happen that I find it extremely surprising that[...]

The post Everything that can happen, will happen – A quick tip on making your GM:S project failsafe. appeared first on Cydonian Games.

]]>
Since releasing the first public alpha demo of Voidship I’ve gotten a lot of interesting bug reports.

Sometimes there are bugs which are so unlikely to ever happen that I find it extremely surprising that anyone found them at all. But everything that can happen in a game will happen. Sometimes quite unlikely stuff in the first 10 minutes of gameplay.

A player ran into a game crashing when playing Voidship. What happened was the game crashed to windows from the battlemap when he paused the game. Pausing the action is pretty integral to the gameplay so this was instantly a priority 1 thing to fix for me.

The specific cause I found though was that the player managed to pause the game exactly at the same moment he killed an enemy ship. Two things clash here:

1.When you kill an enemy ships bridge all the modules of it update themselves to also destroy themselves.
2.When you pause the game all objects on screen get “thrown into memory” and replaced by static clones of them. That is how I keep the game mechanics still interactable but freeze everything without complex timing code.

So the player destroyed an enemy ships bridge. Then by pausing the game at the exact same moment managed to start the game pausing code. Throwing everything off screen and replacing it with clones. Due to the awesome timing the game did this before the modules destroyed themselves. So now we have no paused version of the ships bridge (because it got blown up), but we do have paused clones of the modules. The modules orient themselves according to the bridge and since they couldn’t find it the game went haywire resulting in a crash.

This is a pretty unlikely scenario. One which I personally (as far as I know) haven’t ever seen in all my time of testing. Yet a player ran into it just 10 minutes into playing. This is what happens when you let your games loose into the world. This is why your game has to be as failsafe as possible.

A tip on avoiding problems like this in GMS

Basically Game Maker Studio wise the problem in the previous bug was that we were referencing an object in code which didn’t exist anymore. Getting the dreaded “Unable to find any instance for object index FATAL ERROR”.

This is a type of error that keeps popping up in every game I develop in GM:S ever. Since I always have complex interlocked systems and you can’t ever be 100% sure in what order you’ll have to unlink them again when one of the objects referenced gets destroyed. I could fix this by being super super careful and thoughtful about the order I run my scripts in. How I link the objects etc. But I usually have a game to finish and things are tight enough as it is time wise.

So what I do is this: Pretty much absolutely everywhere ever I get even the slightest gut instinct that this object I am referencing in code might not be there when I want it. I put if instance_exists(object_im_referencing) {} around the code I’m running. So we only run it if the object actually exists. I do this preemptively and you can find this function everywhere all over my code. (Looks like I obviously still miss a few spots at times though).

It’s not stupid if it works

Depending on the situation it’s somewhere between a solid robust fix and extremely hacky.

But on the hacky side let’s see what would actually happen in the above scenario with this “hack” fix (which I already implemented). If this unlikely scenario that this bugtester found ever happens again (it will). Then instead of trying to orient the module clones in the paused game according to the ships bridge… we do nothing with them. I create them already in the same place as the object their clone anyway. Heading in the same direction. They might not be in sync positionally as well. Maybe a modules is a frame off in position since we are not updating. But all the player will really see is an enemy ship with an explosion instead of a bridge module. Not much wrong there. I think the player will understand if when they unpause the whole ship blows up.

Since the rest of my code is usually pretty robust it’s almost always fine if these extremely rare cases of objects being referenced just don’t execute their code if the object isn’t there. Some things will be out of place slightly. A pop up will not be created. A bullet will not be given the correct speed etc. Tiny things. Much much better for these unlikely happenstance scenarios to result in a small floating bullet with speed 0, or a ever so slightly misplaced module. Nowhere near as nice if the game just completely crashes.

So basically my tip to you is stick if instance_exists absolutely everywhere!

The post Everything that can happen, will happen – A quick tip on making your GM:S project failsafe. appeared first on Cydonian Games.

]]>
https://cydonian.games/tips/everything-that-can-happen-will-happen/feed/ 0
Voidship – Battle Map Gameplay https://cydonian.games/features/voidship-battle-map-gameplay/ https://cydonian.games/features/voidship-battle-map-gameplay/#respond Tue, 05 Jun 2018 13:11:15 +0000 http://cydonian.games/?p=178 This is a very quick overview of Voidships 2D top down space battle gameplay. This is part of the game is the battle map and it’s where most of the action takes place. Battle Map[...]

The post Voidship – Battle Map Gameplay appeared first on Cydonian Games.

]]>
This is a very quick overview of Voidships 2D top down space battle gameplay. This is part of the game is the battle map and it’s where most of the action takes place.

Battle Map

Every time there is a hostile fleet encountered on the system map you get transported to the battle map.

You will battle enemy fleets consisting of large battleships like your own and various smaller units. These battleships are built out of modules. Each module is either an engine, a defensive ship system or a weapon. You can target specific enemy modules ony by one. This means you can make strategic decisions on the battle field. Allowing you for instance to destroy an enemy battleships engines to leave it stranded on the battle field. Or if the enemy has a specific weaponsystem for which you have no good counter you could use all your special systems and abilities to destroy that specific weapon. Then move in and finish the job impervious to the rest of the enemies firepower.

How this all plays out depends immensely on the enemy ships countered and your own ship build. Each enemy faction will use very different tactics, weapons and systems. You have 32 different weapons and systems to choose from when building your own ship to counter them. Most of the fun in the game for me is trying to figure out different builds for your ship so I’ve tried to make the selection of modules as varied as possible.

Controls:

You can either control your ship in RTS style. Right click to move, Right click and hold to move and turn in a specific direction, Right click on enemy to attack that enemy etc. Most of the usual RTS controls apply. You can also select specific modules from your ship like they are units and give them separate targets.

The other option is WASD control mode. This uses WASD (+QE for strafing) to pilot your ship directly. In this mode the mouse targets and left mouse button fires.

You can also pause the game any time to scan enemy ship stats. Make more strategic decisions and precisely target special weapons and crew skills. Like launching area defense satellites, nuclear bombs, energy dissipating ion pulses etc.

 

The post Voidship – Battle Map Gameplay appeared first on Cydonian Games.

]]>
https://cydonian.games/features/voidship-battle-map-gameplay/feed/ 0
Voidship – System map and Star map Gameplay https://cydonian.games/features/voidship-system-map-and-star-map-gameplay/ https://cydonian.games/features/voidship-system-map-and-star-map-gameplay/#respond Sun, 01 Apr 2018 04:00:01 +0000 http://cydonian.games/?p=167 This is a very quick overview of the System Map and Star Map screen from the game Voidship. These are the screens where a lot of strategic decisions on where to go next and what[...]

The post Voidship – System map and Star map Gameplay appeared first on Cydonian Games.

]]>
This is a very quick overview of the System Map and Star Map screen from the game Voidship. These are the screens where a lot of strategic decisions on where to go next and what order to tackle your mission in will take place.

System Map


The system map is divided into sectors (squares in the screenshot). The contents of a sector can be very different. Some have unexplored planets, some have friendly space stations, enemy stations, resource fields to harvest and so on. Once you arrive at a new star system you can explore it sector by sector. As each system layout is always unique there will be a lot of decisions to make here. Do I brave coming up against a major enemy stronghold just to visit the resource field behind it? Might be worth it, might not. Maybe instead I try to slip past all enemies and head directly for a friendly station to resupply.

You solve events that happen on this map either on the battlemap in real time combat or in dialogues like in the next screenshot:

Events can be your run of the mill asteroid harvesting to get resources, visiting an allied outpost for trade or you might accidentally stumble on and awaken an ancient robotic guardian protecting a treasure trove of long forgotten knowledge.

After you’ve battled your way through a system: entering the outgoing system gate takes you to the star map.

Star Map

(Starmap screenshot slightly WIP, missing enemy faction borders)

On the starmap you can choose the next system you want to travel to. You see what systems are controlled by what faction and what systems are connected to each other by starlanes. You’ll need to plot a trajectory to accomplish your mission objectives as fast as possible. Travel between the stars takes years and a lot can change during that time. Every decade you spend travelling between the enemy grows stronger.

The post Voidship – System map and Star map Gameplay appeared first on Cydonian Games.

]]>
https://cydonian.games/features/voidship-system-map-and-star-map-gameplay/feed/ 0
Feature Overview https://cydonian.games/features/voidship-feature-overview/ https://cydonian.games/features/voidship-feature-overview/#respond Sun, 11 Mar 2018 09:10:08 +0000 http://cydonian.games/?p=153 I’d like to get deeper into voidship development talk. Show how specific systems are built and how far along the game is. But most people who end up here are not going to know what[...]

The post Feature Overview appeared first on Cydonian Games.

]]>
I’d like to get deeper into voidship development talk. Show how specific systems are built and how far along the game is. But most people who end up here are not going to know what I am talking about before I write some quick overviews of what is Voidship: The Long Journey.


Features and what makes Voidship special.

Features wise Voidship is a 2D top-down space combat/rpg.

Unlike in most similar games space travel in Voidship takes a long time.

Travelling from one star system to another takes on average 20 years. Your crew will grow old and die which makes crew management very important. Your mission will take 4 or 5 centuries and a lot will change in the galaxy in the mean time.

Gameplay consists of:

The Battle map – 2D real time space combat. Either controlled like an RTS or using WASD and mouse to play it like a top down shooter. Pause any time to give more complex orders like using special weapons and powers.

The Starsystem map – Where to visit next. Building your ship out of modules. Crew management. Various events that are solved in dialogues.

The Overworld galactic map – Making strategic decisions on what starsystem to go to next. Seeing the galaxy develop during your 5 century mission.

There are heavy influences of the Star Control series, FTL and Homeworld. Although it plays quite different to any specific one of those games. It is basically me collecting together everything I love about space games, ditching the things I consider tedious and adding additions of my own.

In the next posts I’ll discuss these specific subparts of the game further.

 

 

The post Feature Overview appeared first on Cydonian Games.

]]>
https://cydonian.games/features/voidship-feature-overview/feed/ 0
How to: Ship AI movement basics. https://cydonian.games/development/how-to-ship-ai-1/ https://cydonian.games/development/how-to-ship-ai-1/#comments Sun, 04 Mar 2018 17:13:15 +0000 http://cydonian.games/?p=120 As said in my previous post I’ve been working on space games hobby wise for quite some time. This has lead to certain patterns of doing things that I have used for the past 15[...]

The post How to: Ship AI movement basics. appeared first on Cydonian Games.

]]>
As said in my previous post I’ve been working on space games hobby wise for quite some time. This has lead to certain patterns of doing things that I have used for the past 15 years. Surprisingly these are the patterns I came up with very early in my journey. What I did for the next games was simply iterated to make them better, but still kept the core ideas.

One of the oldest tricks in my book is how to enemy ship AI movement easy, fast and cheap. This might be too basic to some, then you can leave a comment and I’ll go into detail on some fancyer code next time. But for all the rest…

Mikk’s Interactable Guide to how to do Ship/other vehicle movement AI:

This is a Interactable How To Tutorial. Scroll down to the end of the page to try what the various bits of code feel like in game.

I mainly work in Game Maker: Studio, so this will all be in GML. But GML should be very easily readable to most devs working on most languages. Just think of it as pseudocode if you’re working in C# for instance. All you’d have to do to use this somewhere else is recreate the few GM internal functions I use. I’ll add notes on what they do so this is easier.

Let’s start with the basics.

We have the player. We have an enemy. We want the enemy to attack the player. Obvious first timer first step is to make the enemy move towards the player. Probably also point towards the player when we are moving there, since that makes it look like it makes sense.

So the code we would constantly run inside the enemy ship (step event in GM:S, Update or similar for you non GM folk) would be:
direction = point_direction(x,y,o_player.x,o_player.y);
speed = 6;

Test this in Playable Test 1. (Scroll way down the page)

Set the movement direction to be towards the player. Then add an arbitrary speed so we start moving there. The enemy moves towards us and attacks. Makes sense.

For non GM folk: Internally in GM every frame the speed and direction get turned into a x,y movement vector which gets added to the enemy x,y coordinates. So we move speed amount of pixels in direction every frame automatically.

If you test this in the playable html5 at the end of this post you can see this makes for a very bad enemy AI though. It feels mechanical, in a bad way. Difficult, again in a bad way. If the AI speed is anywhere near decent it’s close to impossible to escape. The AI always heads straight towards you. It will not miss. It gets even worse though if we add more enemies with the same AI.

My favourite two lines of code.

There are two lines of code underneath pretty much all of my space ship AI. There are 10 completely different AI movement types in Voidship which all stem from using these two lines in different ways.

The previous way I demonstrated had one giant problem. The AI is boringly mechanical and never misses. We can solve this by accelerating towards the player instead of directly moving towards it. This boils down to some vector math, where we take the current x,y movement vector stemming from direction and speed and we add a new vector stemming from direction and acceleration to it n times a second/once a frame.

In GM:S luckily all of that boils down to the command motion_add(direction,acceleration);

This leads to us not directly ever touching speed and direction. We just slowly use vector addition to change it. Meaning the direction will lag behind the actual direction from enemy to player and the speed will slowly ramp up in a nice natural way. We have nothing to stop the speed from going too far though so we also have to add a speed limiter. The new code would be:

motion_add(point_direction(x,y,o_player.x,o_player.y),0.3);
if (speed>4) {speed=4;}

The 0.3 is how much we want to accelerate per frame. The 6 is our maximum speed of pixels per frame we want to limit the ship to.

Test this in Playable Test 2.

For non GM folk: As previously in GM the engine still automatically moves the enemy every frame according to a x,y movement vector which gets added to the enemy x,y coordinates. Just now we are no longer driving that vector with speed and direction. We are driving that vector by adding a x,y acceleration vector stemming from the acceleration and direction we used in motion_add();.

If you test the demo out you can see this is already a much more enjoyable enemy. It twirls like an enemy fighter around you. Dives in. Can sometimes miss you if you move fast enough at the right time etc.

What if we would add more enemies though. I’ll make them smaller so we can get a nice swarm going. Everything is still better than our first option, but the enemies clump together ontop of each other. Which is boring and unnatural.

Test this in Playable Test 3.

This is where my favourite combination of two lines of code comes in:

motion_add(point_direction(x,y,o_player.x,o_player.y),0.2);
motion_add(random(360),0.1);

What we are doing now is both moving the enemy in our nice accelerating way towards the player, but also giving them a slight random nudge in a random direction. These random nudges every frame add up. This means that no two enemies are ever going to have the exact same trajectory. If we keep the random acceleration small enough they won’t veer of trajectory too much, just enough that it looks interesting and natural.

Test this in Playable Test 4.

What happens is something which visually looks quite a lot like a flocking swarm. But we never actually orient ourselves according to the other enemies. It comes completely naturally. This is basically (with a few omissions) the AI for all fighters in voidship.

Simple beginnings.

This is a pretty good start and basically how all ships worked in my space game tests back in 2002. Although I had no idea of speed and direction, nor x,y vectors and had just discovered while playing some orbit cannon example game that if I moved the planet the cannon ball orbits then it looks like a fighter darting after its prey. The code I used back then was:

gravity_direction = point_direction(x,y,o_player.x,o_player.y);
gravity = 0.3;

It’s functionally identical to motion_add, but used GM’s inbuilt gravity feature.

Let’s improve on this a bit further.

Moving to about 2004-2006 and some first awkward teenage years of mine. I started noticing that it’s really not nice that the enemy ships literally dart into my ship like ramming frigates from homeworld cataclysm. Unless I’m actually making ramming frigates this won’t do (totally made those for Voidship btw).

So let’s add a simple if statement to only accelerate towards the player if they are far away. This means that if the enemies hit us not exactly directly on or we move they wont dart into us. They’ll take a wider arc and fly around.

Let’s also introduce friction (inbuilt GM:S variable which gets subtracted from speed every frame) to add some tighter curves and more natural movement. Not real space natural mind you, but natural for the environments humans and most players are used to.

if (point_distance(x,y,o_player.x,o_player.y) > 100)

{

motion_add(point_direction(x,y,o_player.x,o_player.y),0.3);
motion_add(random(360),0.1);

}

if (speed>6) {speed=6;}

friction = 0.1;

Test this in Playable Test 5.

If you look at the demo you can see this is pretty solid natural movement code. Both for big enemies and also fighters.

How do I turn this into a whole game though?

This is the most basic movement type I use. It’s fluid and natural and looks cool in big groups.

You can build on this and modify it into much more things though. For instance what if instead of only checking if the player is far enough to accelerate towards them we add other distance checking if clause’s to it. For instance we could if the player is between the distances of 100 to 200 pixels instead do: motion_add(point_direction(x,y,o_player.x,o_player.y)-90,0.3);

What this would do is create an enemy which accelerates towards the player. Then once they get near they start orbiting the player. Of course in motion since the player can also move and the enemy has inertia this can look a lot more complex and cooler than what I am writing.

We could also add timers which periodically reverse the direction we are acceleration towards. Meaning we get an enemy that strafes in for attack runs every 10 seconds and then retreats.

We could also take into account where your bullets are in releation to the enemy:

motion_add(point_direction(x,y,nearest_bullet.x,nearest_bullet.y)-90,0.3);

nearest_bullet in this case is pseudocode. But we can find it by using instance_nearest();

This would create an enemy which moves in and attacks you, but then strafes when shot at.

There are a lot more options to choose from. But pretty much all of them for me stem from creative uses of motion_add();

If people want I can go into more detail on what this can be built into in a later post.

Interactable HTML5 example

Keep in mind this example only demonstrates the basic code. The speed, acceleration, friction etc variables are all untweaked. Tweaking these to perfection will lead to much cooler gameplay.

(Also, just because people are asking. This is a demo made from scratch code wise in 60 minutes which I timed. This is not how Voidship plays. We are talking 60 minutes of dev time vs over a year here.)

 

The post How to: Ship AI movement basics. appeared first on Cydonian Games.

]]>
https://cydonian.games/development/how-to-ship-ai-1/feed/ 1
Voidship – The beginning https://cydonian.games/development/voidship-beginning/ https://cydonian.games/development/voidship-beginning/#respond Thu, 01 Mar 2018 20:27:54 +0000 http://cydonian.games/?p=107 What is Voidship Voidship is a 2D space combat/role-playing game for PC that I’ve been developing on/off between contract gamedev projects. It’s been in development for quite a while, but actual development time there is about a[...]

The post Voidship – The beginning appeared first on Cydonian Games.

]]>
What is Voidship

Voidship is a 2D space combat/role-playing game for PC that I’ve been developing on/off between contract gamedev projects. It’s been in development for quite a while, but actual development time there is about a year and a half of my full time effort put into it.

“You are the captain of a modular spaceship entrusted with a mission which might take centuries to complete. Gather resources, crew and technology to build your spaceship into a titan warship to fulfill your objective.”

Check out the main game page for a more thorough rundown of what the game is: http://cydonian.games/

Why is Voidship

I’ve been fascinated with space since I was very young. Books, movies, tv shows, I loved diving into different sci-fi visions of humanity’s future in the stars. This obviously collided with my love of gaming very early on. Most of my top 10 games of all time are space games or closely related to space themes. Master of Orion II, Homeworld, Homeworld: Cataclysm, Startopia, later on the Mass Effect series etc. Playing these games as youngster made me want to create my own.

I first downloaded game maker and made my first gamedev experiments just a few months before the new millenium was ushered in. I know this because I remember making a basic screensaver with it that would show a black screen until the clock turns 00:00 and it’s 2000. Then fireworks would shoot onto the screen generated with a very basic self made particle system. From about the same time as that my dream was to make computer games as a living. Especially space games. In fact most of my giant folder of prototypes built in my teenage years are space games.

I made basic 360 degree turning top down space shooter tests for quite some time. I’d share screenshots of the first game, but I’ve lost them to old rundown harddrives. Here’s a bunch of assets I have saved tho:

From about 2002 I started building an age of empires’like in space. It went through various versions between the years of 2000-2010, but never got finished. Kid me had the first 80% of gamedev well covered and didn’t know anything about the last 20% which takes just as much effort, if not more.

These were all separate games.

There were plenty more but I would need a working GM 6 or GM 8 pro edition to export .exes and make playables or screenshots. (If anyone knows how to get one, tell me)

This long saga of space game making lead me to Voidship. Lead me to me wanting to take all this love for space and gamedevelopment and as an adult and professional developer finally put it into a concrete project. Voidship was supposed to distill everything from some of the best games and stories I’ve loved from the genre Homeworld, FTL, Battlestar Galactica etc and distill it into my own quintessential spacegame. I take all the features I love the most, skip the ones I don’t like and I finally make the damn game.

Spurred from my childhood dream I somehow managed to become an actual game developer. I’m 28 now. I’ve worked on 3 titles shipped on steam ( Good Robot, Unrest, WFFF) . Another one that will be soon releasing (No Truce With The Furies). A bunch of other small commercial and non commercial game projects. I now know what releasing an actual PC title entails. Kid me isn’t completely gone though. I still like the same things. Still rewatch Babylon 5 and Farscape. Still try to replay MOO2 once a year and then stop disappointed that I have the whole tech tree memorized and no new events ever happen.

I first started on Voidship seriously when I was about 25. I worked on it as a labor of love next to all my paid work. Building up the engine. Testing different storylines. I’ve now taken a break to work on Voidship full time.

It’s time to finish it.

The post Voidship – The beginning appeared first on Cydonian Games.

]]>
https://cydonian.games/development/voidship-beginning/feed/ 0