Devlog Watcher – an introduction Date November 6, 2018 Views 199 Views Reading Time 3 Mins Read This is hardly news: people like to connect stuff to the Internet. The ones I’ve always found the most interesting are IP cameras, which people knowingly or unknowingly have left publicly accessible. For more than 10 years many of these could be found via well-targeted Google queries and nowadays Shodan will do some of the heavy lifting. However, I’ve always wanted to write a program which would automate this search and present the results in an usable way: present a map of Earth, lay down all the cameras and then be able to click on them and begin streaming. There were three important considerations when deciding on how this program would be made: It must run locally rather than being an online service. Needs to run on both Windows and Linux. Must not require elevated privileges to run. Underlying technology C++17 This is being written in C++, more specifically the C++17 variant. This lets me write code which can be (mostly) shared between Windows and Linux, without requiring too many platform-specific implementations. SDL Using SDL provides the basic window creation, OpenGL backed rendering and input handling, without having to deal with the OS implementations. SDL_image A support library for SDL, SDL_image is capable of loading image files. Since I wanted to have a map of Earth, having to store everything as BMPs (supported by the base SDL) would mean a pretty large download. SDL_image allows me to load other image formats, such as PNG or JPG, with a minimum amount of extra code. sqlite3 Given that Watcher needs to scan the internet to find accessible cameras, this information has to go somewhere. To keep the required set up needed in order to be able to run the program, I’ve settled on sqlite3 as a database backend as it just stores… Devlog Replacing Havok with Bullet Date October 2, 2018 Views 155 Views Reading Time 4 Mins Read The issue Most people involved in games development have likely heard of Havok Physics: a middleware solution which provides collision detection. HEXTERMINATE used Havok for a long time, as it was free for Windows even in commercial projects, as long as they didn’t sell over a certain threshold. However, the hobbyist version has stopped being distributed years ago and this caused some issues: more modern versions of Visual Studio weren’t supported (anything past VS2012) and most importantly, could the game still be shipped with it? An open-source approach The alternative chosen was to use the open-source library Bullet: Conceptually similar: most of what HEXTERMINATE uses could be done in Bullet without massive refactoring. Functionally equivalent: there were no holes in the feature list, everything I needed was present. Permissive licence: the ZLIB licence puts essentially no restrictions on the game. Source code available: I could republish the library binaries myself, getting me up and running in VS2017 quickly. Linux support: although not something I have spent time on, Havok was the last library holding off multi-platform support. Making it all work Getting the basics up and running was fairly straightforward. What ended up taking up most of the time was that many places in the game’s code were using Havok’s maths library rather than GLM, which required some head scratching and debugging to make sure that it was all working. Most of it was fine, but swapped order of operations caught me off-guard a couple of times. When a battle goes wrong, it can go really wrong. In the end it was actually the smaller things that took the longest: getting callbacks with the required information for when two ships collide was non-trivial, as I needed information about which two modules were colliding, not just the parent “ships”. The other… Devlog September development highlights Date September 28, 2015 Views 151 Views Reading Time 2 Mins Read It has been a busy month in HEXTERMINATE’s universe. I’ve assembled a short trailer to showcase the game, backed as usual by =kontinue’s great sound track! Be sure to check it out. But lets take a look at the game’s development itself. Sound effects A game can’t be complete without sound effects, even if it is a space game and have to ignore little things like physics going “you’re aware there’s no sound in space, right?” Hogwash. Most of the sound effects are now in place, making use of FMOD’s positional audio which made it easy to implement automatic panning and volume rolloff based on distance. Overall I’m quite pleased with it and it makes battles sound far, far more alive. I’ve also written a small post on the the implementation gotchas that might be of use to other developers. Balancing pass Balancing a game’s is almost always tricky and HEXTERMINATE is no exception to this. The variety of factions, the kinds of ships they use and the large amount of modules that can be used make the task of balancing everything properly a fairly time consuming one. Overall the pace of the game has been slowed down as ships were exploding too quickly, which made it both difficult for the player to manage to pull successful, higher-risk raids into hostile sectors and fairly frustrating to try and keep a fleet’s losses manageable. Additionally, most ships of the Ascent and Iriani factions have been redesigned and made more specialised. The Iriani in particular remain, as before, terrifying: attacking their territory is not for the weak of heart or for those afraid of losing ships in the process. Of course that over the campaign you’ll have to conquer their homeworld but hey, no one said that the life of an Imperial captain was an easy one. Loading… Commercial Implementing 3D audio with FMOD Date September 9, 2015 Views 154 Views Reading Time 2 Mins Read One of the great things about FMOD is its ability to play sounds in 3D space, internally handling all the details of panning, volume rolloff and Doppler effects without requiring too much trouble from the developer’s side. I’ve recently started adding sound effects to Tannhauser and I’d like to share with other people some of the problems I’ve had – perhaps it will save someone a bit of time. Setting up the listener The listener is the player’s “head” in 3D space. It is setup by calling set3DListenerAttributes() and receives a position, a velocity, as well as a forward and up vectors. However, make sure that the forward and up vectors are normalised: due to a bug in my code the forward vector hadn’t been normalised and it was causing the sounds to always play at full volume from both speakers. 3D sounds are initially placed at the listener If a 3D sound is created without being set to start paused, it will begin playing at the listener’s location. Even if the sound’s 3D attributes are set immediately afterwards, you’ll likely still get a noticeable “pop” as the sound starts playing and gets relocated. To avoid this, create the sound as initially paused, set the attributes and then unpause it. Minimum sound instance distance Setting the minimum distance on a channel allows us to define how audible the sound is as you get further away from it. Something I am currently playing with, however, is having different minimum distances for the player and for other ships, making the player’s actions more noticeable in the chaos of battle. Too many active sounds There are explosions in Tannhausers. Lots of explosions. On a bad day, there are over fifteen ships all flinging large amounts of missiles, torpedoes and other fun things at… Devlog Gameplay video and hyperspace Date October 2, 2014 Views 153 Views Reading Time 2 Mins Read Hello and welcome to HEXTERMINATE’s third devlog. The last week has provided a big jump forward with the project. I’m now collaborating with kontinue for the game’s soundtrack and it is a very promising start which does make want to integrate FMOD right now so I can get these songs in. Do check his bandcamp and soundcloud. So, let us take a look at what’s new in-game… Hyperspace In the last week I’ve added a proper effect for visualisation for the hyperspace effect, which makes entering and leaving a normal sector much more interesting. It is particularly pleasant to see the hyperspace gate open when the player’s ship is being shot to pieces and desperately trying to fleet to safety. As it had been talked about in a previous devlog, the player is not the only one that makes use of hyperspace. While contesting a sector the galaxy does not stop dead in its tracks, so all the fleets in the galaxy keep doing what they were doing: contesting a sector of their own, travelling… or perhaps they’ll spot the player’s battle and decide to join in. This is something that works both ways, with both enemies and allies considering if this is a battle they have a stake on. This does add an extra layer to the game, as the player does should consider if a region of space is too “hot” to attack, as the risk of being caught off-guard by mid-fight reinforcements is quite real. This risk can be reduced by having a bridge with hyperspace sensors, which will provide an early warning. Further work Additionally, most items are now in-game and can be found as loot from the enemy ships. As expected, the quality of the loot is proportional to the kind of enemies the player is facing. It is… Devlog Flagships and hardcore mode Date September 22, 2014 Views 155 Views Reading Time 2 Mins Read Hello and welcome to HEXTERMINATE’s second devlog. To start with, a quick update about the state of play: the game is coming together very well, with the save games now working and a considerable amount of modules now in-game. Having a blast playing it at the moment, now that there is a real progression in how powerful the player’s ship is and in retaking the galaxy. Today I’ll be taking a look at two important features, Flagships and the alternative Hardcore mode. Flagships Although the player will find himself knee-deep in hostiles, each faction that roams the galaxy has a fleet that contains a Flagship. Flagships are considerably more powerful than the regular ships of that faction, game changers that represent that faction’s technological pinnacle. Additionally, these ships have bridges with specialised equipment which increase the performance of their faction’s fleet, so taking these command and control ships out is extremely important. The player goes unprepared to a fight with the Marauder flagship. This does mean that need to be approached carefully and with a finger ready to hit the “Enter hyperspace” but the rewards are well worth it. Flagships drop high-end modules, with the flagships of the more advanced factions dropping the most advanced modules in the game, making them the perfect targets if you want to get those shiny Artefact / Legendary weapons… Hardcore mode Usually the destruction of the player ship is small setback – the player is respawned at his home sector’s shipyard. In hardcore mode, however, it is a different matter. Playing in hardcore mode provides a real challenge, where the ship’s destruction is final. The influx of adrenaline is that much greater, seeing that last engine explode, the hyperdrive charging and praying that it will get to those 100% and jump out before the… Load More Loading More… You’ve reached the end of the list
Devlog Watcher – an introduction Date November 6, 2018 Views 199 Views Reading Time 3 Mins Read This is hardly news: people like to connect stuff to the Internet. The ones I’ve always found the most interesting are IP cameras, which people knowingly or unknowingly have left publicly accessible. For more than 10 years many of these could be found via well-targeted Google queries and nowadays Shodan will do some of the heavy lifting. However, I’ve always wanted to write a program which would automate this search and present the results in an usable way: present a map of Earth, lay down all the cameras and then be able to click on them and begin streaming. There were three important considerations when deciding on how this program would be made: It must run locally rather than being an online service. Needs to run on both Windows and Linux. Must not require elevated privileges to run. Underlying technology C++17 This is being written in C++, more specifically the C++17 variant. This lets me write code which can be (mostly) shared between Windows and Linux, without requiring too many platform-specific implementations. SDL Using SDL provides the basic window creation, OpenGL backed rendering and input handling, without having to deal with the OS implementations. SDL_image A support library for SDL, SDL_image is capable of loading image files. Since I wanted to have a map of Earth, having to store everything as BMPs (supported by the base SDL) would mean a pretty large download. SDL_image allows me to load other image formats, such as PNG or JPG, with a minimum amount of extra code. sqlite3 Given that Watcher needs to scan the internet to find accessible cameras, this information has to go somewhere. To keep the required set up needed in order to be able to run the program, I’ve settled on sqlite3 as a database backend as it just stores…
Devlog Replacing Havok with Bullet Date October 2, 2018 Views 155 Views Reading Time 4 Mins Read The issue Most people involved in games development have likely heard of Havok Physics: a middleware solution which provides collision detection. HEXTERMINATE used Havok for a long time, as it was free for Windows even in commercial projects, as long as they didn’t sell over a certain threshold. However, the hobbyist version has stopped being distributed years ago and this caused some issues: more modern versions of Visual Studio weren’t supported (anything past VS2012) and most importantly, could the game still be shipped with it? An open-source approach The alternative chosen was to use the open-source library Bullet: Conceptually similar: most of what HEXTERMINATE uses could be done in Bullet without massive refactoring. Functionally equivalent: there were no holes in the feature list, everything I needed was present. Permissive licence: the ZLIB licence puts essentially no restrictions on the game. Source code available: I could republish the library binaries myself, getting me up and running in VS2017 quickly. Linux support: although not something I have spent time on, Havok was the last library holding off multi-platform support. Making it all work Getting the basics up and running was fairly straightforward. What ended up taking up most of the time was that many places in the game’s code were using Havok’s maths library rather than GLM, which required some head scratching and debugging to make sure that it was all working. Most of it was fine, but swapped order of operations caught me off-guard a couple of times. When a battle goes wrong, it can go really wrong. In the end it was actually the smaller things that took the longest: getting callbacks with the required information for when two ships collide was non-trivial, as I needed information about which two modules were colliding, not just the parent “ships”. The other…
Devlog September development highlights Date September 28, 2015 Views 151 Views Reading Time 2 Mins Read It has been a busy month in HEXTERMINATE’s universe. I’ve assembled a short trailer to showcase the game, backed as usual by =kontinue’s great sound track! Be sure to check it out. But lets take a look at the game’s development itself. Sound effects A game can’t be complete without sound effects, even if it is a space game and have to ignore little things like physics going “you’re aware there’s no sound in space, right?” Hogwash. Most of the sound effects are now in place, making use of FMOD’s positional audio which made it easy to implement automatic panning and volume rolloff based on distance. Overall I’m quite pleased with it and it makes battles sound far, far more alive. I’ve also written a small post on the the implementation gotchas that might be of use to other developers. Balancing pass Balancing a game’s is almost always tricky and HEXTERMINATE is no exception to this. The variety of factions, the kinds of ships they use and the large amount of modules that can be used make the task of balancing everything properly a fairly time consuming one. Overall the pace of the game has been slowed down as ships were exploding too quickly, which made it both difficult for the player to manage to pull successful, higher-risk raids into hostile sectors and fairly frustrating to try and keep a fleet’s losses manageable. Additionally, most ships of the Ascent and Iriani factions have been redesigned and made more specialised. The Iriani in particular remain, as before, terrifying: attacking their territory is not for the weak of heart or for those afraid of losing ships in the process. Of course that over the campaign you’ll have to conquer their homeworld but hey, no one said that the life of an Imperial captain was an easy one. Loading…
Commercial Implementing 3D audio with FMOD Date September 9, 2015 Views 154 Views Reading Time 2 Mins Read One of the great things about FMOD is its ability to play sounds in 3D space, internally handling all the details of panning, volume rolloff and Doppler effects without requiring too much trouble from the developer’s side. I’ve recently started adding sound effects to Tannhauser and I’d like to share with other people some of the problems I’ve had – perhaps it will save someone a bit of time. Setting up the listener The listener is the player’s “head” in 3D space. It is setup by calling set3DListenerAttributes() and receives a position, a velocity, as well as a forward and up vectors. However, make sure that the forward and up vectors are normalised: due to a bug in my code the forward vector hadn’t been normalised and it was causing the sounds to always play at full volume from both speakers. 3D sounds are initially placed at the listener If a 3D sound is created without being set to start paused, it will begin playing at the listener’s location. Even if the sound’s 3D attributes are set immediately afterwards, you’ll likely still get a noticeable “pop” as the sound starts playing and gets relocated. To avoid this, create the sound as initially paused, set the attributes and then unpause it. Minimum sound instance distance Setting the minimum distance on a channel allows us to define how audible the sound is as you get further away from it. Something I am currently playing with, however, is having different minimum distances for the player and for other ships, making the player’s actions more noticeable in the chaos of battle. Too many active sounds There are explosions in Tannhausers. Lots of explosions. On a bad day, there are over fifteen ships all flinging large amounts of missiles, torpedoes and other fun things at…
Devlog Gameplay video and hyperspace Date October 2, 2014 Views 153 Views Reading Time 2 Mins Read Hello and welcome to HEXTERMINATE’s third devlog. The last week has provided a big jump forward with the project. I’m now collaborating with kontinue for the game’s soundtrack and it is a very promising start which does make want to integrate FMOD right now so I can get these songs in. Do check his bandcamp and soundcloud. So, let us take a look at what’s new in-game… Hyperspace In the last week I’ve added a proper effect for visualisation for the hyperspace effect, which makes entering and leaving a normal sector much more interesting. It is particularly pleasant to see the hyperspace gate open when the player’s ship is being shot to pieces and desperately trying to fleet to safety. As it had been talked about in a previous devlog, the player is not the only one that makes use of hyperspace. While contesting a sector the galaxy does not stop dead in its tracks, so all the fleets in the galaxy keep doing what they were doing: contesting a sector of their own, travelling… or perhaps they’ll spot the player’s battle and decide to join in. This is something that works both ways, with both enemies and allies considering if this is a battle they have a stake on. This does add an extra layer to the game, as the player does should consider if a region of space is too “hot” to attack, as the risk of being caught off-guard by mid-fight reinforcements is quite real. This risk can be reduced by having a bridge with hyperspace sensors, which will provide an early warning. Further work Additionally, most items are now in-game and can be found as loot from the enemy ships. As expected, the quality of the loot is proportional to the kind of enemies the player is facing. It is…
Devlog Flagships and hardcore mode Date September 22, 2014 Views 155 Views Reading Time 2 Mins Read Hello and welcome to HEXTERMINATE’s second devlog. To start with, a quick update about the state of play: the game is coming together very well, with the save games now working and a considerable amount of modules now in-game. Having a blast playing it at the moment, now that there is a real progression in how powerful the player’s ship is and in retaking the galaxy. Today I’ll be taking a look at two important features, Flagships and the alternative Hardcore mode. Flagships Although the player will find himself knee-deep in hostiles, each faction that roams the galaxy has a fleet that contains a Flagship. Flagships are considerably more powerful than the regular ships of that faction, game changers that represent that faction’s technological pinnacle. Additionally, these ships have bridges with specialised equipment which increase the performance of their faction’s fleet, so taking these command and control ships out is extremely important. The player goes unprepared to a fight with the Marauder flagship. This does mean that need to be approached carefully and with a finger ready to hit the “Enter hyperspace” but the rewards are well worth it. Flagships drop high-end modules, with the flagships of the more advanced factions dropping the most advanced modules in the game, making them the perfect targets if you want to get those shiny Artefact / Legendary weapons… Hardcore mode Usually the destruction of the player ship is small setback – the player is respawned at his home sector’s shipyard. In hardcore mode, however, it is a different matter. Playing in hardcore mode provides a real challenge, where the ship’s destruction is final. The influx of adrenaline is that much greater, seeing that last engine explode, the hyperdrive charging and praying that it will get to those 100% and jump out before the…