Developing Avoyd, an abstract six degrees of freedom First Person Shooter voxel game.
This page lists all the posts we've published since we first worked on Avoyd in 1999, up to the present day.
Doug Binks - 31 Oct 2017
It's rare for me to read a blog post and immediatly put the information to use, but this post from Aras Pranckevičius (@aras_p on twitter) Best unknown MSVC flag: d2cgsummary is one. Within a short time I had cut elapsed compile and link times for Runtime Compiled C++ live coding with Visual Studio by 1.5x, and eventually 3x with total compile time (total time for all compile processes in a multithreaded system) down 10x. This post explains how.Adding a new menu item using RCC++ with the changes made to improve compile times. The above video compile time was a little longer than I finally achieved due to FRAPS taking some CPU time.
Doug Binks - 20 Oct 2017
Last hit kill scoring in multiplayer team based games feeds toxic behaviour by encouraging competition within teams over cooperation. I propose that we take a different approach to scoring where two equal player attacks at the same time do not result in one player arbitrarily reaping all the reward.
Doug Binks - 03 Feb 2017
We've just stealth launched the Avoyd Editor Prototype for download, along with a purchase button for Avoyd.
From now on we'll be releasing new versions of Avoyd periodically, increasing the price as we add functionality. If you activate a purchased license key for Avoyd you'll get all the future updates we post, along with access to the multiplayer services we'll be rolling out. However for quite some time our Avoyd releases will continue to be free.
Juliette Foucaut - 02 Aug 2016 - edited 17 Nov 2016
Return of the black triangles: our friend, musician Peter Highspot, surprised us by producing original music and sound effects for the 2014 in-game fly-through. We couldn't resist sharing the video, and hope you enjoy it as much as we do!Peter Highspot.
Rebecca Michalak - 26 Jul 2016
[Concept artist Rebecca Michalak explores colours and lighting for Avoyd.]
For the fourth round of concepts I wanted to explore palettes some more, since colour is an important part of Avoyd. This was my biggest challenge, being generally used to doing fairly monotone paintings and letting texture denote form.
I started by gathering a range of colour palettes from various sources (I have a library of about 5000 reference images saved to my computer for when I want to start a new painting or need inspiration) in order to have a starting off point. Working in a more abstract way was unfamiliar to me and difficult when I started the project, but I've found that as long as the basic tenants of any artwork are solid (values, colour schemes, composition) then you can push experimentation much easier and further.
Juliette Foucaut - 27 May 2016
We started working with artist Rebecca Michalak on concept art to help us figure out a general feel for Avoyd, as well as ideas for abstract shapes and colours we could implement in the game. Below is a series of the latest concepts drafts, as well as the preliminary sketches Rebecca drew, enjoy!
If you want to see more of Rebecca Michalak’s art, check out her portfolio!
Doug Binks - 05 Sep 2015
This is the second in a series of articles detailing the inner workings and evolution of the permissively open source multithreading task scheduler enkiTS for C and C++ (including C++ 11). In the first article of this series I covered the external interfaces and their implementation. This post will cover the task threading function, running tasks, and waiting for tasks.
Figure 1: Screenshot of Avoyd being profiled with microprofile and ImGui integration available in enkiTSExamples. Solid bars above named tasks show when threads are active - the wait functionality allows the core to idle or other threads to run.
Doug Binks - 22 Aug 2015 - edited 27 Aug 2015
This is the first in a series of articles detailing the inner workings and evolution of the permissively open source multithreading task scheduler enkiTS for C and C++ (including C++ 11).
enkiTS - Code and basic examples for the task scheduler described this article.
If you're writing a compute intensive programming task on consumer hardware, and you want to use as much of the systems resources as possible, then you'll need to consider multithreading on the CPU. There are a number of ways to approach this, but the current gold standard approach for developers who want both simplicity and control is a task scheduler which can handle data-parallelism (in the games industry a task is often referred to as a job). Task parallelism allows you to run different types of computation at the same time, whilst data-parallelism enables you to run the same computation over a set of data across different threads at the same time. Note that I won't consider Single Instruction Multiple Data (SIMD) parallelism here, but if you're doing computations you probably should. Additionally, I won't cover multithreading methods for handling large latency, such as waiting on hard disk or socket transactions.
Juliette Foucaut - 29 Jun 2015
At the end of May, a month ago today, we attended Feral Vector. We saw many projects and met lots of interesting people. Although we hadn’t planned on it, we ended up showing Avoyd for the first time. In light of the nice feedback we got, we think that releasing it sooner, even without gameplay, would probably be a good idea.
Doug Binks - 31 Jan 2015
As usual, whilst working on one aspect of Avoyd I hit a hurdle and decided to take a break by tweaking some visuals - specifically looking at the normals for my surfaces. I added a step to generate face normals in the pixel shader using the derivatives of world space position [see: Normals without normals by Angelo Pesce and the Volumes of Fun wiki on Computing Normals], and immediately noticed precision issues when close to the surface. I'll demonstrate the issue and my quick fix which uses eye relative position instead of world space, before explaining what's happening in full.
Juliette Foucaut - 31 Dec 2014 - edited 30 Apr 2016
Alongside PyCharm Professional Edition, JetBrains generously offers a free version of their IDE: PyCharm Community Edition. We've found that PyCharm CE can, with some effort, be made to work with Google App Engine (GAE). Although lacking in some features, it is still useful if all you're after is a python debugger and IDE for GAE.
This post details how to configure the free PyCharm Community Edition to enable debugging of python code destined to run on Google App Engine. Further, we explain how to enable smart code navigation and completion for GAE libraries. The final section explains how to use a PyCharm path variable to make the code more portable, which should help for distributed projects. Throughout the tutorial we'll attempt to use the PyCharm UI as often as possible, but we'll also explain how to do the whole configuration by editing the PyCharm files directly. The specific paths examples are from Windows, but they should also be applicable to other Operating Systems.
Note: Doug figured out the configuration settings described in this tutorial through trial and error, our experience with python GAE debugging with Visual Studio, and by looking at the open-source PyCharm CE code. If you want to enjoy the full power of PyCharm and save yourself some time, skip this tutorial and use PyCharm Professional Edition instead.
Doug Binks - 22 Oct 2014
In this post and video I'm going to cover the recent changes I've made to Avoyd's technology to add shadows, ambient occlusion and procedural texturing. I'll describe simple procedural texturing and its anti-aliasing, along with the use of voxel octree data to generate lighting and ambient occlusion using ray casts and 3D textures in the game Avoyd.
There's a good deal of information on all of these topics online, and they certainly aren't novel additions to a game - however in Avoyd I'm taking a slightly unusual approach so I thought it worth documenting. It's worth checking out the video before reading further.
Juliette Foucaut - 23 Aug 2014
Doug has recently made some changes to the visuals and the editing tool in Avoyd. On top of performance improvements, he added a spherical brush and started experimenting with procedural texture patterns.
(click to enlarge) Saturated colours in the distance, Spheres and texture patterns. Notice how the patterns are affected by the specular lighting.
We want to use texture patterns to show different properties of the materials in-game, such as health, culture (*), etc. as well as give a better idea of the scale of the world. At the moment we're playing with the patterns' shapes, colours, scale, periodicity and animation.
(* Note: the culture is related to a team's territory / area of influence).
Juliette Foucaut - 14 Aug 2014 - edited 12 Aug 2015
[Update 12 Aug 2015 - The methods described below do not work in Visual Studio 2015 PTVS with GAE 1.9.17 or above. We haven't found a new workaround. We've switched to using the free PyCharm CE which works great. See our tutorial to configure it.]
For python code destined to run on Google App Engine, we needed an IDE with comprehensive local debugging abilities, i.e. breakpoints, step-by-step execution and variables watch. PyCharm Professional Edition does all this [Edit 31 Dec 2014: for PyCharm Community Edition GAE configuration, see our tutorial], but we chose instead to use a free solution from Microsoft called Python Tools for Visual Studio (a.k.a. PTVS or PyTools). [Edit 28 Nov 2014: now Microsoft Visual Studio Community]
Sadly, due to a bug, breakpoints don't get hit when debugging dev_appserver.py. After lots of searching and trial and error, we found out that an acceptable workaround is to configure Visual Studio as follows:
Once setup, using it is no different from normal debugging. The downside is that some newer GAE functionality won't work.
Juliette Foucaut - 06 Jul 2014
Chris Priestman interviewed us and wrote an article about our work a couple of weeks ago on Warpdoor. We went into more depth about our plans than we have so far on our website, so do check it out if you want to find out more about what we're putting into Avoyd.
Juliette Foucaut - 20 Jun 2014
In this post I'll describe how to use Google App Engine to masked redirect a URL to a desired domain. Our proposed method of URL redirection involves a python script using the webapp2 framework running server-side on GAE. As a result of this setup, you can have visitors requesting content from one domain, say www.new-url.com, see content which is hosted on another such as www.old-url.com.
Doug Binks - 27 Feb 2014 - edited 27 Oct 2014
The video showcases three players zooming around at high speed in an environment being streamed from one player's PC to the other two, with the recording being done on one of the clients. This devblog post is about the steps I took to get this working smoothly.
Performance tuning is a large and varied topic, so I'm going to concentrate on one aspect which came up during development of the streaming system - framerate hitch removal. A framerate hitch occurs when one frame takes longer than most of the rest of the frames. To the player it can feel like a sudden start/stop. If frequent, the game takes on the feeling of being played on sandpaper.
Juliette Foucaut - 01 Feb 2014
How we started with a bug and ended up with a music video collaboration with the awesome nervous_testpilot:
Music by nervous_testpilot a.k.a. Paul Taylor of Mode 7, follow Paul on @mode7games
Juliette Foucaut - 23 Jan 2014 - edited 06 May 2017
[Update 06 May 2017 - We no longer maintain our presskit() for Google App Engine project. The Github repository is deprecated and the installer is no longer available.]
presskit() is a free, open-source tool that enables game studios to present information to the press in a unified format. However the current php implementation doesn't work on Google App Engine (GAE). Recently, Leonard Ritter started the ball rolling, showing it could be done and offering some code changes. After Rami Ismail mentioned that it would indeed be useful, and since we needed it ourselves, Doug and I decided to do the port.
If you would like to use presskit() on GAE, I'll explain in this post how to download and install our implementation. As an example see our presskit() at press.enkisoftware.com.
Warning: our code is in beta. We've only tested the installation ourselves, on Windows. Any feedback you can give us (use the comments below or email me), successful or not, would be very helpful: it'll enable us to fix remaining issues with the build or the documentation.
presskit() runs on Google App Engine
Doug Binks - 16 Jan 2014
This tech update video shows off multiple players rapidly and smoothly editing fairly large sections of the environment whilst in edit mode. Materials and rendering are all still simple debug visuals for clarity rather than beauty, but there's still a fair degree of artistic freedom available. It's a real pleasure being able to carve and paint geometry fluidly in a connected online world.
Getting this to work, and work well, took a fair amount of effort and I'll explain some of the technical details here.
Doug Binks - 14 Jan 2014
The post follows on from the earlier post on Octree Streaming. You should be able to read them out of order, but you get cake if you read part 1 first.
Our latest tech update video shows off players moving through the world shortly after joining the game - the video starts only a few seconds after where the last one ends, so about 30 seconds after loading. At this point large sections of the world are still being streamed to clients, but the prioritization of nearby regions ensures detail is present close to the player.
Doug Binks - 12 Jan 2014
The original Avoyd stored the internal voxel representation of its game world as a standard 3D array. At the time this provided a good trade off between performance and memory for the size of levels we required for a multiplayer PvP game with a fully modifiable environment. In the new version we wanted to increase the size of worlds we could handle, whilst maintaining large view distances.
Our second technology update video shows off how the voxel octree streaming gives rapid loading over the internet.
Doug Binks - 05 Dec 2013
I was recently testing my LAN server browser dialogue menu with multiple machines running servers when I encountered an unusual issue. I had two machines, each running a server and a client. On one machine the client could see both servers, but on the other machine only the local server was found. The application had firewall permissions, and since the server was both sending and receiving packets without problem the firewall didn't seem to be the culprit.
Working LAN discovery with two servers running on two different machines. Note the two IP addresses listed for Machine 1.
Doug Binks - 30 Oct 2013
It's been a busy couple of months since my last technology update. After being laid low by a viral modification program masquerading as an Autumn cold, I have emerged into my cold weather form with time to spare for a bit of programming.
Some of my work has gone into improvements in the Runtime Compiled C++ I use to help program Avoyd with which you can catch up on over at the RCC++ blog. The rest has been on two fundamental features: materials and multiple voxel models.
Juliette Foucaut - 30 Oct 2013
There's still a lot of work to do on the site as it's still pretty basic, but one thing I've been able to do thanks to the automation is to import the entire archive of the Developer's Diary which Doug wrote in 2001-2002 when he was working on the first version of Avoyd. It's been quite emotional to go through those old posts as it brought up a lot of memories, both good and bad.
I hope you enjoy having a peek at the archive (list of posts below), and if you're one of the people who supported us all those years ago by testing the game and/or buying it, I'd like to give you a big thanks. You're part of the reason why we got back to working on our dream game. And also, there's you, thank you! :)
Note: you can find an overview of the Avoyd v1 (a.k.a Avoyd 1999) story and download the full game here.
Juliette Foucaut - 30 Oct 2013
A couple of months ago, my friend bananako made great suggestions to improve the looks of our website. I started tinkering and I hope the changes do justice to her input. (I recommend checking her blog, her drawings always put me in a happy mood :)
I also finally made a home page about Avoyd. I've been struggling to figure out what to say on that page, but we're happy with the result for now and I can easily change it as the project evolves. I still have to come up with a logo for Avoyd.
Juliette Foucaut - 22 Oct 2013 - edited 04 Jul 2017
I think we should call sandbox first person games First Person Editors (FPE).
I was doodling around in Avoyd looking for inspiration: how do I describe our game? It's an FPS, but there's more to it and I think it's not the only game in that category.
Doug Binks - 30 Aug 2013
Our first technology update video is available on Youtube. I wanted to show how modifying the environment works since I've recently improved this area. The graphics are still in the early prototype phase and I'm only rendering debug colours rather than materials - I find the aesthetic oddly pleasing though.
Juliette Foucaut - 23 Aug 2013 - edited 10 Feb 2014
A robust website that successfully weathers spikes in traffic is a must when trying to sell and support a game over the internet. Last July Picroma suffered temporarily when they released their game, Cube World, for purchase. They then had to deal with a DDoS attack. More recently, Oculus Rift's site stalled when they tweeted about John Carmack's involvement in their technology.
Whilst we can only dream of enjoying the same level of interest, we'd like to spare ourselves the worry. When Doug researched a web hosting solution, he spotted that Wolfire used Google App Engine. They list their reasons clearly on their blog, and given that they have years of hands-on experience on the matter, we decided to follow their lead. As an added bonus, this solution is free for low levels of traffic.
Doug Binks - 29 May 2013
I've just added networking using RakNet, and implemented level load from a server along with synced editing. This proved to be very simple to add as RakNet has a fairly clean interface. I'll admit to being very tempted to develop further the network code I used for the original Avoyd, but RakNet has a number of features I'd need to implement which aren't trivial.
Doug Binks - 09 May 2013
One of the key features we wanted for the new Avoyd was to support large environments. The old version of the game used a simple three dimensional array for storing the voxel data which restricted the size of the world. So for the new code I've implemented an optimized octree structure, which both helps with data storage limits and the calculation of lower level of detail (LOD) graphics for distant structures.
Doug Binks - 27 Apr 2013
Our plan for the new Avoyd is to expand upon the original free-for-all gameplay with single player, co-op and team vs team. We intend for all modes to use the same ruleset to create a consistent universe.
Competitive games are normally symmetric. This means players on either side have access to capabilities of the same power, though often with different styles. For example, in Quake Arena, every player is equal and has access to the same weapons.
Juliette Foucaut - 11 Apr 2013
Over 13 years ago, Doug Binks (mainly) and I started working on a shareware-style game called Avoyd.
A first-person shooter set in zero gravity, gamers could play deathmatches against bots or other people on a LAN. To our knowledge, it was the first editable voxel game in which the players could build and destroy the entire environment.
We sold digital copies of Avoyd over the internet for a few pounds, steadily increasing the price as we added more features. After Doug joined a games development company, we slowly stopped development and released the last version, Avoyd 1.7.1, in 2003. At that stage, many features and designs we had in mind had yet to be implemented in the game.
Our current project is based on the original Avoyd 1999. For more information and screenshots of Avoyd 1999, visit its press kit page.
Doug Binks - 19 Aug 2002 - edited 30 Oct 2013
[This is an archive post about the first version of Avoyd which we now call Avoyd 1999. The full game is now free to download.]
ECTS, a yearly video games conference is coming up in a week's time, and if any developers out there fancy meeting up in the developer bar then drop me an email.
Additionally, we're considering developing a single player branch of Avoyd which will be sold both as an individual product and hopefully as part of Avoyd (so all current owners will get it). I know many people would like to see more effort going into furthering the multiplayer aspect of Avoyd, so many of the features going into this will make it into the multiplayer game as well.
Doug Binks - 22 Jun 2002 - edited 30 Oct 2013
[This is an archive post about the first version of Avoyd which we now call Avoyd 1999. The full game is now free to download.]
Following a suggestion from Warhead in the forums I've made the score chart and Avatar name display using the Avatars colour. Avoyd members can get a patch from the login pages.
Doug Binks - 10 Jun 2002 - edited 30 Oct 2013
[This is an archive post about the first version of Avoyd which we now call Avoyd 1999. The full game is now free to download.]
The new version is out, whith some changes that people have been asking for in addition to an overhaul of the network code to get it ready for internet play. As some may have noticed, it's been a very long while since the last update. As the only one working on Avoyd, small things like other full time jobs can get in the way.
Hope you all enjoy the new version - I'll get back to working on the next update right now!
Doug Binks - 09 Nov 2001 - edited 30 Oct 2013
My current development schedule points one way, and a body of evidence points the other. Both directions have benefits and drawbacks, and it's really a matter of biting the bullet and making the call. Perhaps a coin toss would work?
Doug Binks - 19 Oct 2001 - edited 30 Oct 2013
Both the demo and the full version of our new release, Avoyd 1.5, are out. This release could be thought of as a spit-and-polish, as its main purpose is to put a shine to the game rather than add significant new features. For Avoyd members, the ability to select your background opens up the possibility of user created backgrounds, and of course we'll be making a few more of our own for you.
Doug Binks - 15 Oct 2001 - edited 30 Oct 2013
The mayhems' for the whole week, as we grind our gears and prepare for another release. With much ado, and a short vacation looming over the horizon, I'm hedging my bets by saying that we'll delay rather than release if there are any problems.
Doug Binks - 12 Oct 2001 - edited 30 Oct 2013
We've released the full version of Avoyd 1.5 alpha 1, which is available from the downloads section of the member pages. Be sure to download the correct version, as we've left V1.4 up in case people have problems with 1.5 alpha 1. This version is not as significant an update as 1.4, but adds a few nice elements which make the game a better experience.
Doug Binks - 14 Sep 2001 - edited 30 Oct 2013
We've released both the demo and the full version of Avoyd 1.4. This adds simple computer controlled opponents, which really makes a big difference to the game as you can now practice on your own or have huge battles with friends. There are quite a few other improvements in there too.
Doug Binks - 06 Sep 2001 - edited 30 Oct 2013
Last night I got back from ECTS, travelling from a sunny London morning to a dark and rainy Manchester afternoon. It's good to be back :)
Doug Binks - 01 Sep 2001 - edited 30 Oct 2013
I'm not sure which is the news - that we've got AvoydV1_4alpha1.exe up for download on the member pages, or that this is my second diary update in less than a week.
The big news in Version 1.4 is Single Play against bots! You can also use them in a LAN game, and if the server gets too full the bots drop out one by one, reappearing when people leave. We've also got some new skins for the avatar, and improved performance. Due to a few additional extra variables which need passing over the LAN, I've had to decrease the maximum number of players to 13 at the moment (unlucky eh?). This should increase again when I move to optimising the network code.
Doug Binks - 30 Aug 2001 - edited 30 Oct 2013
It's an exiting time here in front of my monitor. Recently we've had a spate of hardware troubles, not the least of which is the ongoing saga of getting the car repaired. However, the worst of these was a keyboard and mouse failure at the same time, which led me to first believe I had a more serious problem.
Doug Binks - 17 Aug 2001 - edited 30 Oct 2013
Exactly a month has gone by since the last post, and some might be wondering if I'd given up the promise to keep this diary regularly, or just fallen under a passing bus.
Doug Binks - 17 Jul 2001 - edited 30 Oct 2013
And I'm not talking about politicians.
The main feature I'm busy working on at the moment is a single player component. This will be in the form of computer controlled opponents, or bots as the games community calls them.
Doug Binks - 06 Jul 2001 - edited 30 Oct 2013
You get to keep one, and I'll try and keep the other.
Avoyd is now available for purchase, somewhat later than I outlined in the previous post. The game was ready to go 'online' at the start of June, but fate dealt me a a small blow by taking out my internet connection for about a week. That was long enough to take some time to reassess the schedule, and it was decided to postpone the launch to add two features. These were on the map to be included in the next version, but for a variety of reasons we moved them forward. Avoyd is much better for their inclusion.
Doug Binks - 22 May 2001 - edited 30 Oct 2013
Those of you who actually read some of the blurb we've been putting out with the demo may have noted that Avoyd is supposed to be sold over the internet sometime in the summer of 2001. Indeed, the mysterious silence here at EnkiSoftware over the last couple of months has in part been down to getting prepared for this. Soon, we'll be releasing the latest demo version, and also giving you the chance to buy the full game.
Doug Binks - 23 Apr 2001 - edited 30 Oct 2013
As some may have noticed, things on this site have been rather quiet for the last month. You'll be glad to know that I've been hard at work preparing the next release, which is going to contain a host of new features.
Doug Binks - 03 Apr 2001 - edited 30 Oct 2013
A month has passed since our first release, and we're still alive and well. Those of you who have been to our forums may have spotted that at least one person experienced a bug in version 1.1 which stopped him from playing it. We've fixed that (thanks Ouroboros for your patience and assistance), and have released a patch. This patch also includes further optimizations, so things should run faster.
Doug Binks - 28 Mar 2001 - edited 30 Oct 2013
Things are going well with the Avoyd demo, and to our knowledge we now have over ten thousand downloads from the various sites which have counters on their download pages (combining versions 1.0 and 1.1 but excluding the patch). We think this is pretty good going for a small game from a small company with a small budget, and hope that it bodes well for our commercial release.
A recent email to us concerned whether we'd release the Avoyd game engine to the public. There are many ways we could do this, and I thought I discuss them here, along with the pros, cons and likelihood of them happening.
Doug Binks - 19 Mar 2001 - edited 30 Oct 2013
We've released both a patch and a full install for the new version, which includes some new features and a few fixes. I'd like to thank Ranger55 for pointing out several bugs to us in our support forum, along with everyone else who posted in the forums!
Doug Binks - 12 Mar 2001 - edited 30 Oct 2013
It's been a great week, nervously surfing the web to see how many downloads we've made, responding to emails and posts in the forum, and tracking down strange behaviour from the Microsoft Visual C++ compiler. So far, we're doing very well for a small independent developer, with over four thousand downloads from our site in the first week and about twenty thousand visitors to the site. With the other sites which are hosting the demo, we probably made over five thousand downloads in the first week. What that means is anyone's guess, but it does make Avoyd one of the most downloaded 'small' action games. Without feedback from players it's difficult to form any opinion, but most comments we have had have been very positive about the concept. So, many thanks, and I encourage you all to post what you think in our forums.
Doug Binks - 04 Mar 2001 - edited 30 Oct 2013
Finally, the culmination of over a year's work has been reached. It's been great fun, with hopefully more to come. But it's somewhat frightening to unveil to the public something which has been at the core of my life for so long. The positive remarks from those who have seen our test versions have been extremely encouraging. So I now find myself typing in the last few lines to a long chapter in my life.