Mike and I are working on another balancing pass in Achron, and we started putting in the new resource processor changes. Based on the great feedback we've gotten on our forums about the start game, we came up with some changes that should help improve the balance between strategies.
Resource processors are the fundamental backbone of Achron's economy, and so changing them changes the entire economy. We were putting the new values in and experimenting with minor adjustments to see how they would affect things.
On the forums, people have been talking a bit about how marines in Achron aren't very useful against any other units because they're too expensive. This surprised us. According to our analysis, they should be strong against a few tactics, especially air-based attacks and late-game mech rushes. However, our gut intuition from playing Achron agreed with the sentiment of the forum posts.
The importer supplies the Humans with reserve soldiers, needed to make marines or to pilot any ship or vehicle. We decided to see how changing the importer costs would affect things; maybe our model's abstraction had some inaccuracy. I went into the spreadsheet, made the importer cheaper and... it actually made the reserve soldiers more valuable. That was completely wrong behavior - it should have gotten cheaper.
I dug in further and found two columns with nonsensical equations buried deep in a spreadsheet on the economic foundation of Achron. I must have been really tired when I made that calculation because the math in those two columns was incomprehensible and not documented as I usually do. Because the results of the math were generally plausible, it wasn't until now that we found it.
I reworked the math in a very straightforward manner and that bug in our balancing process has been fixed. The result of the bug was that reserve soldiers were valued considerably less than they were worth. For the more expensive units, this change in value was not much more than a big rounding error, but for the least expensive units that used reserved soldiers, namely the marine and special op, the balancing is off considerably.
In this next balancing pass, we've also decided to apply a different rounding approach to resources to be more consistent and to reduce the magnitude of numbers. This does mean that many of the unit costs will change, some of them quite dramatically.
Outside of the aspects of this balancing bug, do you have any comments or questions about Achron balancing? Discuss on our forums: http://achrongame.com/forums/viewtopic.php?f=73&t=1531
If you're making a AAA title you may want to squeeze more detail into a scene. If you're making a casual game for a mobile device, you might want to improve responsiveness on the slowest device or reduce the battery drain of your game.
Normally, developers run the game engine using a profiler to see how the code is performing. Profilers are commonly used development tools that tell you which parts of your code are running what percentage of the time. Profiling is an essential skill every developer should have, only a few pegs behind being able to debug effectively. Part of the skill is knowing what to profile.
The first pass on profiling is to simply sit down and play some of the game yourself with the profiler running in the background. You take a look at the profiler results, and it tells you that 30 percent of the time is spent doing some task like collision detection. You look at the code, figure out a way to make it better, and test it functionally. It works! Now, how do you know it performs better?
If you play the game for more profiling, you can't exactly compare your previous results. Even if you were in the same area in the game when you play again, your results won't be the same. Maybe you missed a jump your second time around, or your fingers were a little slower, or you play through faster. It's difficult and time consuming to ensure the same scenario, so it's better to automate it.
Having a replay framework either in your game engine or in your development environment does not just offer major benefits for reproducing bugs, but it also helps with profiling. You can play through several areas of the game, ideally with different play styles by different people, and now you have a suite of performance tests. Every time you run your regular testing for code or content changes, you can run your profile suite.
Another strategy is to use your AI against itself. Each random number seed you use to kick the game off is another test case. The obvious risk here is that human players won't use the same playstyle as the AI, leaving your performance results biased.
In software testing, there's the idea of code coverage. That means that you make sure your tests run through every functional area in your code. You make sure that every part of code that checks constraints, triggers an action, etc. is run. It's impossible to test every case, but the goal is to make sure that all of the code is tested at least once. In performance testing, an analogous case is to make sure you've gone through all the major use cases of the game. Do your automated replays go through the area with the biggest number of bad guys, the biggest number of lights, and that mini-game you so cleverly designed by hacking around the game mechanics?
The game my company is currently working on, the time travel RTS Achron, is very performance intensive on the CPU. The motivation for this blog post came from a recent discovery. We had a small battery of performance tests that we'd always run, and we depended on its results. Recently, one of our users made a custom map that was quite large and complained that the performance on his map was so bad that it eventually became unplayable. My initial reaction was to think that he was using a slow CPU or that it'd be some issue we couldn't fix, but because he'd posted his save game (which, in Achron includes most of the game replay), I decided to profile it. It turned out that he had hit upon a performance case that was not included in our suite: a large battle as it moves off the timeline. Over 20 percent of the CPU was being spent checking to see if a set of resources could be freed, a function that had never even appeared on the list of the top 100 most time-consuming functions. All I had to do was reduce the frequency that the engine attempts to reclaim those resources. By checking only one twentieth of the amount of time, I was able to reclaim 19 percent of the CPU, and the only drawback was that certain resources on average took a few hundred milliseconds longer to be reclaimed.
Are you a developer who has had interesting experiences profiling? Share it on our forums: http://achrongame.com/forums/viewtopic.php?f=73&t=1485
Being an indie developer making an RTS, I'm often asked about how I think the release of Starcraft 2 will affect our game. With Blizzard's hundred million dollar development budget, unrelenting pursuit of polish, and entrenchment in esports, how could we possibly stand a chance to be relevant?
The RTS genre has been a little less prominent in the past few years, but all the buzz behind Starcraft 2 is igniting it. Some people who haven't played an RTS game since the original Starcraft feel renewed interested in the genre. I personally don't think Starcraft 2 could come out at a much better time for us. By the time many people have played a lot of Starcraft 2 and are looking for new challenges, Achron will be coming out.
I think every indie developer looking to succeed in the business of making games needs to reflect upon the question, "why should people play my game instead of a big budget game?" There's a notion in mathematics (originally stemming from economics) called the Pareto frontier. If a product is on the Pareto frontier, then that means a customer can't choose another product that is better in every way, price included.
By simply having multiplayer time travel, Achron is already on the Pareto frontier. Even beyond that, both Starcraft 2 and Achron have very different feels even when time travel is excluded. Achron has command hierarchies instead of unit groups, and is focused on hard science fiction rather than the more fantasy-based science fiction of Starcraft, with all of the things like psionic energies. Conversely, Achron won't have the gorgeous cutscenes or all-encompassing matching service that Blizzard can provide.
A big studio can easily spend millions in marketing to sell a large number of copies of a game that may not otherwise be on the Pareto frontier. With significant marketing, you could argue that they've moved it to the Pareto frontier simply by providing name recognition. You can stand out by having significant innovation, excellent gameplay, unique graphics, or a great mod community, just to name a few. You don't need to be the best at any one aspect, you just need to be the best for your combination and niche, however large your niche may be. For example, Blizzard focuses on game polish over innovation, as they openly admit. If your game is about ninja animals, is the sequel to a game that fans love, has a strong community, and your company is reaches out to the community, then you're most likely squarely on the Pareto frontier. However, if you're an indie making another first person military shooter without laudable gameplay, graphics, or a compelling story, you're most definitely not. Business people often call being clearly on the Pareto frontier as "best in class" or "best of breed".
This isn't to say that you can't make money by offering "me too" type games. On the one hand, you're competing for attention from fans, and if you have an inferior game, you probably won't sell as many. On the other hand, if there are two games, people can play both, and the added attention to the type of game can benefit the sales of one or both games. If you can produce a similar game for a tiny fraction of the cost of the original, you've moved yourself back on to the Pareto frontier with respect to cost.
Discuss what you would do on our forums: http://achrongame.com/forums/viewtopic.php?f=73&t=1313
The past week has been quite an active week on the Achron forums, partly due to a newcomer named Kron who came in and stirred up a lot of old discussions with new ideas. One of the active threads, titled "If you were a soldier from Achron...", examines what it would be like in the game if you weren't an achron yourself, and knew that someone could be changing the past on you. For example, would you be more likely to march off to certain death if you knew that your death could be undone? Would you help out another you from another point of time if it meant that helping the other you would cause the current version of you to no longer exist once the next time wave came by (and afterward only a different version of you with different experiences would exist)? Or would you only be concerned with the current you?
How far does the concept of "you" extend? Parents typically help their kids as much as they can, and identical twins sometimes are very close, but what if we take it a step further. Suppose you were able to instantly have 5 perfectly identical clones of yourself starting right now. The clones would be perfectly identical down to every subatomic particle at this instant, not like the movie Multiplicity where each copy was less accurate. Each of you would think that you are the original "you". However, you all will start to diverge.
What would the lot of you do? Would you stick together or separate? Would you take on different specialties? Would you share everything or nothing? Would you all try different things, or would you all try to be the same? Would you get jealous of or angry at the other versions of you? Which one of you would spend time with your significant other? If one of you got rich, would you share your wealth?
I've asked some of my friends this question and have gotten very different answers. Many of my friends were also quite sure of what the outcome would be. After all, you generally know yourself pretty well. But how would you react to you?
Myself? I've thought about it quite a bit. I'd probably coordinate with the other versions of me, specialize, and share the fruits of our labor.
Discuss what you would do on our forums: http://achrongame.com/forums/viewtopic.php?f=73&t=1253
In addition to my work on Achron, I also do research as part of a large Army initiative on the science of "quality of information". The idea is that they have information coming from a variety of sources (sensor networks, soldiers on the ground, local people, international forces, etc.), and they want a system that can combine the vast quantities of information and determine what is trustworthy and correct. This is obviously a very complex problem, which is why there are over 100 researchers on the grant from dozens of universities across the USA, spanning a wide range of disciplines such as game theory, networks, graph theory, and social networks. The 100 researchers does not even include their many PhD students and post docs! An academic grant of this scale in computer science is quite rare.
I generally keep my two activities of research and Achron very separate, but our meeting today here in Cambridge, Massachusetts had a point that I thought was particularly relevant to discuss here. (If you're curious about my work on the other area, my dissertation can be found here: http://www4.ncsu.edu/~cjhazard/cjhazard_dissertation.pdf.)
One of the neat things about working on this grant are the number of really smart and interesting people you get to work with. Major General Nick Justice, who oversees this grant, was talking about the effects of communication on military forces (yes, he has a cool name, and he also thinks Achron is really cool from a strategic/game theoretic perspective). One of his points was how simply having a 5 kilobit per second channel completely revolutionized warfare, even though those 5 kilobits per second had to be shared over 1000 nodes in the network! Prior to that, military forces would need to perform operations and then regroup, perform operations and then regroup. He likened it to war formerly being like plays in gridiron football, but now it's more like soccer. The constant stream of data allows them to continually adapt without having to pause. Imagine trying to play gridiron football against an opponent that never had to stop when the whistle was blown (but your team still had to).
Now the US Army has far more bandwidth, but now they have more data than they know what to do with. That's one of the main reasons for the grant: to figure out how to get useful information out of vast quantities of data where that data could potentially be compromised or manipulated.
In Achron, the humans not only have massive AIs that can process this kind of data, but they have virtually instant communication across vast distances by using their teleportation networks. That would be amazingly impressive. However, when faced against an opposing force that can not only see the future but affect the past, the difference is would be even more stark than having that 5 kilobit per second channel when your opponent has no such communication channel.
Being able to see the future means that you're no longer reactive; you're proactive. On the Achron forums, pdyxs linked to a recent blog post of his discussing some of the philosophical aspects of time travel on combat. If you can communicate across time, one strategy is to march your troops to their doom in order to get your opponent to reveal their weapons, then go back in time, undo marching your troops in, and then systematically target only their biggest weapons from a distance. In this case, all of your troops eventually survive. But they are defeated once first.
Suppose that you were in a military force and you had time travel. Would you be willing to follow orders that you lead to instant death simply to learn about your enemy, assuming that your commander promised that he'd do his best to revise history and undo your death? Discuss this or other topics related to military communication on our forums: http://achrongame.com/forums/viewtopic.php?f=73&t=1215
We just opened our wiki for Achron today! Because Achron opens up so many new strategies with time travel and people have many ideas to create mods, we thought a wiki would be a great repository for all of that information, in addition to details about Achron itself.
The wiki is publicly viewable and editable by anyone who has preordered Achron. The wiki will also be automatically backed up with the rest of our data (online and offline) to multiple regions of the USA, so the data won't be lost like the unfortunate incident with the fan-hosted wiki on chronofrag.com several months ago.
Feel free to contribute to the wiki here: http://achrongame.com/wiki. Feel free to discuss the wiki on the forums as well: http://achrongame.com/forums/viewtopic.php?f=73&t=1201
Path planning, that is, figuring out how a unit should move to arrive at its destination quickly, is a very tough problem in making RTS games. You not only need to solve an optimization problem, but also handle the uncertainties related to other units moving around and unknown elements in the environment (such as an unforeseen wall blocking one path). I've known people whose entire PhD dissertations were focused on the topic of path planning in robotics. Path planning in Achron is much more difficult than most RTS games because time travel puts significant constraints on memory and available CPU.
One of the major results from this last week is that we've made some progress on improving path planning in Achron. Our main change largely involves a new way of caching some path planning results. So far, we've been able to approximately double the area that units search when planning a path for the same amount of CPU throughput, at least on our preliminary tests. The new path planning seems to work well.
This path planning improvement will be helpful with our upcoming addition of units only being able to climb slopes less than their maximal values.
What games have you played that you felt had particularly good or bad path planning? What situations in RTS games is having good path planning most essential? Discuss on our forums: http://achrongame.com/forums/viewtopic.php?f=73&t=1187
I've been thinking a lot lately about where the "Big Hollywood Sound" comes from. We like our games full of this sound, because it has almost a chemical familiarity to it, and it's really only in the last 10 years that such a thing has really been a possibility. As many of the bigger budget games are going to full orchestra, I've had some mixed feelings on the matter. On one hand, it's a wonderful development, but like many other advances, it's also a guilty pleasure that can stand to be moderated.
This is tangentially related to the broader conversation of giving the audience the experience that they want. I'm vaguely familiar with a concept in public speaking where the experienced speaker will learn to push the audiences buttons with certain voice inflections and choices of words that he knows will sort of tug at them, shake them awake, or get them fired up, generate a predictable response, and may be particularly effective with a certain cultural segment. The crazy thing is that it works. If a speaker "spikes" the audience too often, especially with less compelling subject matter, it can be reduced to a cheap parlor trick, getting a rise out of you over nothing in particular.
Composers can do the same thing! We can choose certain sounds which bear familiarity to the listeners in another context. We can also use cymbal rolls and those monster Wagner bass drums to make things feel big. The great thing about writing for games is that gamers are well versed in various forms of popular and anthropological culture, especially core gamers. This gives a composer many angles by which to find the soft spot of a segment of the audience.
It's just like any other kind of art or skill. Know when to play to the audience, when a thrill becomes a cheap thrill, when even a cheap thrill can be the right thing, when you've overthought the decision making process, and when to stop a run-on sentence. I think about these things every time I produce.
Here is the Achron track we are including with the upcoming release. Hopefully it's fun for all of the right reasons.
Frozen Over Theme Download (mp3)
Discuss this track or other Achron music on our forums: http://achrongame.com/forums/viewtopic.php?f=73&t=1137
These last couple weeks have been quite crazy with regard to Achron development. Coding up a level editor from scratch is no small feat, but it's been moving along nicely. It won't have every bell and whistle imaginable in the first release, but the core functionality will be there. Plus, we'll be using it ourselves, so we'll be fixing and improving things.
The Mac port is nearly done as well. All but two things work perfectly. The first is the automatic router configuration for multiplayer (which currently causes an odd crash) and the other is support for wav sound files due to the ALUT library being deprecated and broken on OS X (we're debating solutions). Ogg files work just fine.

We're looking to make the next Achron release sometime near the extended weekend (it's a holiday weekend in the USA through Monday), depending on how everything goes. This will be by far the largest single release of functionality we've made since the January 1st release (though the functionality is mostly tools rather than gameplay).
We're making good progress on the art and content for the single player game as well, which will be released later on in development. We will be including another one of Achron's songs into this next release though.
Which interests you more, the Mac port or tools? Discuss on our forums: http://achrongame.com/forums/viewtopic.php?f=73&t=1123
The physics of the universe is full of interesting oddities like time being affected by gravity, "spooky action at a distance", and symmetric rules of the universe. As we're creating a game around the idea of time travel, we like to keep up to date with what's going on in physics.
Some interesting results have been coming out of Fermilab recently that could offer a little bit more explanation to one of the big questions in physics: why are we made out of matter and why is there so little antimatter in the universe? (Antimatter is matter's evil twin, and the two "explode" into energy on contact.)
Imagine that you're adding together a huge list of numbers, each with a lot of decimal places, on a calculator. You add 3829.23428923 to 19.4819231, then add 4.2333871, and so on. At the end, you take the sum and start subtracting all the numbers you just added together. When you're done, you end up with something that isn't zero! That's because the calculator was doing rounding. (That's why, at least in computer science courses on numerical analysis, they teach you to sort the numbers and to always add the smallest numbers first. That technique minimizes this error.)
This isn't all that dissimilar from the issue of the universe: the matter and antimatter quantities should be equal if things were symmetric. There are three things that physics is often concerned with being symmetrical: charge, parity, and time. Colloquially speaking, charge is the positive or negative property of a material that causes a force on other opposite materials, and can create voltages and thus electrical currents. Parity is a bit more of an obscure idea, but you can imagine it to being analogous to whether something is spinning clockwise or counter-clockwise with respect to the direction it's traveling. Time symmetry means if you reverse time, you get things in reverse.
As presented in a recent talk, some folks at Fermilab have found that there's quite a lot more "rounding error" in the universe than they expected in some cases. It could explain why there's so little antimatter.
What other ideas or results from physics have surprised you the most? What other theories might prove to be approximations to some exotic or elegant underlying principle? Discuss on our forums: http://www.achrongame.com/forums/viewtopic.php?f=73&t=1103.
We have an old level editor that we've been using internally, but it desperately needs to be revamped. This past week I've spent quite a bit of time working on the new editor, which we're aiming to be released in a couple weeks. Why does our old level editor not get much love you may wonder? Well for starters, it's an archaic application that Chris originally put together reusing some old code from previous editor projects he wrote in undergrad. We're talking about code thats over a decade old and hasn't really been changed since. It started out being a small paint-like application with a few edit modes, providing several options for each mode, but we kept adding more and more options as Achron and Resequence grew. It's very tied to the Windows platform and uses some old ways of rendering things. Driver changes in the past couple years by ATI and Nvidia have made it particularly slow to render, to put it kindly. Everytime I change edit modes I have to wait 5 seconds for the windows to redraw. It's like using a photo editor over a modem connection (of the old telephone kind). Though the level editor is fully functional, it's buggy and the user interface wasn't well-planned from the start.
Old level editor in action
Instead of rewriting the current level editor from scratch as a desktop application and then porting it to the different platforms, we instead decided to reimplement it using the in-game engine. Besides the fact that this new in-game editor will readily work on all platforms we intend to support, it will allow the user to see the level exactly as it will appear in game while they edit it. This should vastly improve usability and enable us to continually add more functionality much easier and faster. I should also mention that it makes it a lot more fun to use, shoving around units by actively editing terrain and evelation is like watching a volcano ripple up under them on the fly. Because it is being implemented in-game, the user interface for the level editor is now simply a different skin that I am in the process of writing using our skin language. The benefit of having the interface be a skin is it makes improvements in appearance and functionality trivial to add. Do I need to add a toggle to switch to a different brush shape? Write a few lines of code specifying what to toggle and where to display it and boom, it's there on the interface.
In the meantime, in order to make the skin within the game itself, Chris has been busy exposing many of the controls to the skin language. Starting the game engine in edit mode enables the skin to access these different controls. Personally I am looking forward to finishing this new level editor so we can finally stop using the old one.
If you have any thoughts or comments on the level editor, feel free to discuss it here: http://achrongame.com/forums/viewtopic.php?f=73&t=1077.
Estimating software development timelines is tricky due to the amount of uncertainty. Sometimes you get lucky. Back when I worked at Motorola, I designed one project that entailed a development effort of several tens of person-months, and my initial estimations for time and lines of code both only had about 3 percent error. Sometimes you're not so lucky. In designing a warehouse management system for the Chicago Public School system a few years ago, the development was about 30 percent larger than I estimated.
So far things have been mostly on track for Achron. I updated the calendar for what we're aiming to accomplish at the end of the next two months.
We're pushing the level editor back into late May for two reasons. The first is that April ended up being a crazier month than I anticipated. I needed to devote more to managing art production than I anticipated, and my PhD defense had to be delayed as my advisor was stuck in Europe for a week due to that infamous Eyjafjallajökull volcano in Iceland. The second reason is that a couple of development tasks I had originally scheduled for early summer would make creating the level editor significantly easier, so I decided to work on those before the level editor.
We are planning another release next week that may include the ability to create new environments for levels via an XML file (textures, terrain objects, etc.), which are stored in the ".til" files. The new level editor itself is well on its way. At the moment you can paint the terrain and terrain objects nicely. The main remaining tasks are integrating the editing controls, adding the ability to place and modify playable units, and to add the controls to save, load, import, and export. We've decided to change the way game mechanics are specified, moving away from our overly-complex and poorly designed dialogue boxes to a more flexible XML specification, so this will be coming soon as well.
We're also going to be releasing our skin compiler for making your own UI at the end of the month, and Mike is working on implementing our first (of many) balancing pass on the humans. I'm also going to go buy a Mac to start porting to that platform.
If you have any thoughts or comments on our schedule, feel free to discuss it here: http://achrongame.com/forums/viewtopic.php?f=73&t=1013.
Earlier in Achron's development, one of our developers really wanted factories (and other production facilities) to automatically put units in hierarchies based on their production order. If I recall correctly, this was also before we had dispatch points.
However, now that we've been having a wider range of people play Achron, we see that this feature does not live up to our expectations of usefulness. We are planning to remove it; if you want your units to automatically enter a hierarchy, you can dispatch them to a particular location and enable autohierarchy using a comm center.

We were considering making units default to not be in a hierarchy when produced at a factory and give each factory a toggle such that you can turn this feature on. However, when we thought about it, we really couldn't come up with a good use case of why this automatic linear production-based hierarchy would be preferred over manual management or autohierarchy. Further, managing which factories have this feature enabled and which don't seems like another mental burden for the player.
Before we remove this feature, we want to hear any objections. If you strongly believe that having this feature is worth keeping, please let us know that you do, let us know why you think it should be kept, and also how you'd use it. If you think this factory-specific auto-hierarchy should be kept in a modified form, let us know that as well.
Remember that there is always a "cost" associated with keeping controls; each button we have makes the game appear more complex to a new player, so we don't want to keep features that don't significantly add to the gameplay.
Should we keep these automatic production hierarchies? Is there a better solution? Give us your feedback: http://achrongame.com/forums/viewtopic.php?f=73&t=1003.
An interesting point regarding chronoenergy and micromanagement has been brewing on the forums for quite some time that we have been meaning to address. The point is that, based on the current chrononenergy (CE) recharge rates, viewing the past is technically not "free" because CE recharges at a slower rate than it does at the present. If more time is spent in the present instead of the past, more CE is recharged enabling the player to issue more orders. In effect, the cost of viewing the past is you losing the potential to issue more commands; you will not be able to issue the same number of orders as if you were viewing the present because your CE will not have been recharged as much.

One of the reasons we are willing to explore a uniform recharge rate is because we do not want players bouncing around back and forth between the present and the past solely to increase their CE regeneration rate. As mentioned on the forums by several users, experienced players would be driven to use this exact tactic. Such behavior is undesirable from a game design perspective and can be categorized as user interface micromanamegement. We want the players to concentrate on the strategy of the game rather than focusing on playing the user interface.
Our primary goals in designing chrononergy usage are to limit players from camping out at the furthest playable point in the past and to promote strategic decision making in altering the timeline. The current mechanism for preventing camping out in the past increased CE cost of commands issued further in the past, reducing the player's ability to micromanage units and shifting the focus to strategic changes. Along with this current mode of increasing CE cost of ordering commands, a uniform CE recharge rate would allow players to remain at any point on the timeline while still limiting their ability to issue multiple commands. Players are still rewarded for playing closer to the present with decreasing CE costs, increasing their ability to micromanage. We think this may be a good direction for CE recharge rates, but before we commit to this change across the board we will try it out on a couple of levels. This trial will provide us with useful feedback to drive the decision for standardizing a uniform chronenergy recharge rate.
Share your thoughts on the forum here: http://achrongame.com/forums/viewtopic.php?f=73&t=987.
For any of you who follow indie games and don't know about Wolfire Games' blog, it's packed with tons of usefull stuff through the years related to indie development, much of it following their upcoming title, Overgrowth. A little while back, I was honored when John asked me if I'd write up a guest post for their blog. I decided to write it on something useful across nearly every game genre: feedback in game design. Check out my guest blog post here: http://blog.wolfire.com/2010/04/Feedback-In-Game-Design.
The Triangle Game Conference was a good time last week. As with last year, there was a great showing of talent from the many the game companies in the triangle area in North Carolina. I didn't bring a camera with me, but Jason Della Rocca posted some pictures on his blog here: http://www.realitypanic.com/archives/432. After the conference, it was also rather amusing that Jason and I were on the same flight to Washington, DC at 5:45am Friday morning, given that neither of us are from Washington DC nor had a layover. I was going to the University of Maryland for a research meeting, and I believe Jason was going to visit friends.
I've posted the slides of my talk on my personal website here: http://www4.ncsu.edu/~cjhazard/publications/cjhazard_TGC_2010_04_07.pdf. The slides by themselves are fairly sparse, but can provide some reminders for those who saw my talk. It was filmed by both the The Escapist and also Wake Tech, so hopefully it'll be online sometime in the not-too-distant future. I plan to write some articles based on my talk sometime in the next year, and I'll post announcements when I do.
Share your experiences at TGC or thoughts on my talk here: http://achrongame.com/forums/viewtopic.php?f=73&t=949.
Last week I posted about working on improving units' attack logic. Actively attacking enemies is one core functionality, and being defensive while the unit has not been assigned an objective is also an important aspect of attack behavior. A stationary unit that is waiting for orders is idle and is essentially on defense since it should attack any enemy targets that may show up, even if this unit happens to be idling inside an enemy base. This specific case can occur when the player attack-moves units to the enemy's base and those units return to idling after destroying all the targets at the selected destination. In this scenario they should be more offensive-minded since their intention is to keep attacking all the nearby enemies, bringing up up the challenge of figuring out when should your idle units engage the enemy.
We don't want idling units simply engaging any enemy that's just appeared on the edge of their vision because it's possible that this enemy unit is a lure that will set you up for an ambush. Alternatively maybe this enemy unit is just passing through and coincidentally skimmed by the edge of your unit's visibility radius, so we don't want to automatically follow since having idle units leave their defensive positions would probably make the player go "why are my guys moving away for no reason?". Units that have long-range firing capabilities are able to shoot the target right away, but for units with shorter range weapons our goal is to design the logic such they won't completely leave their outposts but will be willing to move a reasonable distance in order to engage the enemy units.
In the process of updating and improving idle-attack logic, I fixed an issue where units could become indecisive in selecting which target to attack next when idling inside an enemy base. This left them doing nothing instead of continuing their attacks. While working on this code I also found and fixed a long-standing and hard-to-reproduce bug where in certain specific situations units froze and would not follow their commander's orders until that commander returned to idle.
Share your thoughts on the forum here: http://achrongame.com/forums/viewtopic.php?f=73&t=941.
I'm giving a talk tomorrow for North Carolina State University's philosophy department on time travel in games, particularly as they pertain to Achron. Dr. John Carrol is hosting my talk as part of his class on the philosophy of time travel. If you're in the area, it will be in the Park Shoppes building, room 200, at 7:00 PM.
In addition to the various time travel mechanisms in Achron and games as a whole, I'll briefly be touching on some of the dynamics of time travel from a computational perspective, which spills over into the realm of physics. Perhaps one of the most interesting aspects of physics to me is what happens when you reverse time. Some attributes, such as position, acceleration, force, and electric field stay the same in both directions, whereas other attributes are negated, such as velocity, momentum, and magnetic field. Further, what happens if matter goes back in time? Does it become antimatter, or even dark matter? One of the principals of reversible computing is that a lot of the energy involved in computing is simply the destruction of information (specifically, power loss of switching).
Share your thoughts, curiosities, and questions about reversibility on our forum here: http://achrongame.com/forums/viewtopic.php?f=73&t=915.
Back when I played football in high school (the gridiron type for those of you not in North America), I once sprained my right thumb. Every day before practice, one of our trainer's assistants would put a layer of bubble wrap on it and then wrap it up. For our team's style of play, playing defensive end means that you need to line up in a three-point stance with 1/3 of your weight resting on your hand. It was too painful for me to put that much weight on my thumb, so I started lining up using my nondominant hand. It actually was a much more comfortable and natural stance for me, and I was able to start faster. I started lining up for track that way too.
While using a nondominant stance probably doesn't work for most people, assuming a stance I wasn't used to happened to offer beneficial results. Several of us at Hazardous Software, including Mike and myself, have been typing exclusively using the Dvorak layout for many years (12 years for me, 9 years for Mike), and have enjoyed using Dvoark far more than QWERTY.
So what does all this have to do with Achron? How you use the keyboard is a very important part of playing many PC games. When you type, most peoples' fingers usually hover on or near the home row. When you play a game, your hand may hover above the WASD keys (AOE. keys for us Dvorak users), over the arrow keys, or elsewhere depending on the game.
When we started deciding the keyboard layout for Achron, one of the first questions was whether we wanted to have the shortcuts be positional or mnemonically driven. Positional had the benefit of never having to move your hand, but also had the dueling drawbacks of varying keyboard layouts (particularly in Europe and ergonomic keyboards), the shape of the keyboard necessitating a wide layout (keyboards are very wide), and the difficulty to naturally find your home position when you need to hit a key outside of the area (like the bumps on the f and j keys or separation of the F-keys).
We're frequently asked why the ctrl is used instead of shift for enqueueing commands to units. The main reason we chose it to be ctrl in the first place is due to the initial hand stance we started using, which consists of using fingers for the F5-F12 keys (time bookmarks and time speed), backspace, 7-0, and delete (and also home/end before we added mouse wheel zoom). Ctrl is used frequently for bookmarking times and units, and on most keyboards, ctrl is easier to find and press than shift due to it being a corner key. Shift is a longer key than ctrl, so if you are liable to hit it quickly on the side, it takes more force on many keyboards than ctrl. The extra force required is a drawback for a commonly used key. Also in this stance, I tend to use the quick icons (the radial menu) more often than the shortcut keys, and so I don't need to move my hand across the keyboard very often.
The ctrl-key was also chosen because it is consistent in doing one thing: it selects another. It selects another unit, it selects another position to move to, it selects another command.
We understand that other games do things certain ways. However, we try to evaluate ideas on merit, and not just do them because that's what everyone else does.
The space key is used to issue priority commands, and is big and easy to hit. Due to the layout of the keyboard, it's also easy for your hand to find the aforementioned stance.
Shift is currently used to set the mouse at a particular height level. It's less important now, but it was more important earlier on in development, and might be slightly relevant once we start integrating more artillery style attacks.
We are planning to add keyboard customizations in the not too distant future.
All that said, some people play using a laptop keyboard, and other people have some different layouts as well.
What hand stances have you liked or disliked in games and why? Do you have any ideas for a keybinding layout you would put in place when we make it available? Share your ideas on our forum here: http://achrongame.com/forums/viewtopic.php?f=73&t=897. If we get some good suggestions, we may add them.
I'm giving two talks in the upcoming weeks related to Achron and game development. The first talk will be on time travel with respect to gameplay and and philosophy. It's being hosted by John Carroll for his class on the philosophy of time travel at North Carolina State University. My talk is at 7:00pm, on April 5th in the Park Shops building room 200. Shortly after my talk, they'll be showing the movie Primer.
My second talk is titled "What Every Game Designer Should Know About Game Theory", and I'll be giving it at the Triangle Game Conference which runs April 7th and 8th. Here's the abstract:
Effective game design is both an art and science, but too often, the science part is neglected. How do you know whether your multiplayer game will remain balanced and fun for new-comers and seasoned players alike after people have learned its secrets and devised new strategies of gameplay?
In this talk, I will go over what every game designer should know about game theory. This talk will not just be a crash course on game theory basics. Instead I will focus on those aspects of game theory, both beginning and advanced, that directly apply to practical interactive game design. I will cover diverse examples, such as how to automate your game balancing to ensure that weapons in a shop in an MMORPG are priced properly and how drafting strategies in a racing game can be modeled as a repeated prisoner's dilemma. I will go over different design templates from game theory beyond rock-paper-scissors that can be applied across genres for single player, cooperative, and competitive games.
This past week I have been working on the logic of idling units, specifically how they decide to attack enemies, trying to improve the existing heuristic. Our current strategy that seems to work well (and some people have really liked) is that units first look for attack-capable enemies and target those easiest to destroy first. Units automatically team up on those weaker targets for faster reduction of total enemy numbers in order to reduce the total damage per second your opponent is producing. The attackers then progress onto the harder-to-destroy targets as the weaker ones are eliminated. If no attack-capable enemies are found, your units then look for passive enemies (buildings). We found that this logic reduces micromanagement and disincentivizes cannon-fodder strategies such as sending Resource Processors into battle in order to soak up damage (since they'll be ignored if attack-capable targets are present).
One strategy to utilize this behavior is to send in a weak unit to soak up the initial fire, followed up by strong units behind it. This will force the idle defending units to use their first volley on the weak initial unit.
There is one issue regarding idle behavior in the current release where units will not attack passive enemy buildings in specific situations, but we're fixing that and improving the overall behavior.
What's the best way to develop software when people won't start using it for at least 7 years?
This was the question I asked myself back when I started working on Achron. In terms of development tools, Visual Studio 6.0 was still being used (Visual Studio .NET had not come out yet), which had many incompatibilities with GCC (the compiler used on GNU/Linux). The XBox had not been released, so Windows was the only platform DirectX ran on. When I started working on rendering more than just regular 2D images to the screen, I banked on shaders being the future, so I sarted using GLSL when it was only in beta.
When it came time to port to Linux, most of my coding-for-the-future thankfully paid off. About 75% of the code compiled on Linux without even a warning, and most of the platform-specific code was contained in just a few files. That said, there were several issues that came up in the port.
The first major issue was that GCC generated code that crashed on load. After about 4 hours of poking around, it turned out that I had been using explicit template instantiation in a non-standard way that GCC didn't like: I was explicitly instantiating the templates before GCC saw all of the template's code. I'd move the declaration from one header file to another, one would work, the other would crash. Once I saw what was going on, I just had to move 5 lines of code from one spot to another and it worked.
Another issue was of paths being listed with forward slashes versus backslashes, as in "/opt/Achron/terrains" versus "C:\Program Files (x86)\Hazardous Software Achron Demo\terrains". As most other operating systems other than Windows use forward slashes, and Windows generally permits forward slashes, I used them when I could. However, there are a few Windows API calls that either don't like backslashes, or don't like it when you mix forward and back slashes. This can arise when you call a Windows function, say, one that gets the user's home directory, and then look for a file within that. The Windows function will return backslashes for the first part of the string and the engine uses forward slashes. As the initial development effort was on Windows, I was able to resolve issues right away. When I first started compiling on Linux, I used an Ubuntu Linux distribution with a shared Windows. When Ubuntu was using the shared Windows drive, it didn't care about mixed forward slashes and backslashes, but when it was on a local install, it certainly did matter! I found a couple spots in the code where there were lingering backslashes outside of platform-specific code.
A third issue, that really caused a lot of confusion, was the fact that some vendors' video card drivers don't like it when you attempt to use textures that are smaller than 4 pixels by 4 pixels and then try to do anything fancy with them (like mipmapping). We had some very confusing crashes after I started the Linux port, even on Mike's Windows installation! Out came the heavy tools like Microsoft's Application Verifier (on Windows) and Valgrind (on Linux). Application Verifier found nothing. We found that Valgrind did a much better job at detecting issues than Application Verifier. On some video card drivers, trying to mipmap 2x2 texturemaps caused a buffer overflow and corrupted other data! You might be wondering why we're mipmapping a 2x2 texturemap in the first place. We don't do it that often, but when you have an entire shader path and video card state set up and a particular model has a plain glossmap, it's just easier to give it a small texture to save on video card memory. Let's just say that Mike was surprised when I sent him 8 image files and told him it would fix the crash he was seeing.
Using Valgrind also helped us track down another bug. We got everything working in Linux regarding the menu, then we'd load up a level, everything would load fine, and then it'd crash when attempting to render the units. It turned out that there were 5 uninitialized variables when loading a level in the Achron code. In Windows, one of those variables stored a time stamp was always 0, even on debug builds, which is fine. On Linux, given the slightly different memory layout and reuse, the value ended up being a large negative value. This crept into the rendering code and told the engine to render a unit's animation using a negative keyframe, something we'd never checked for; we only checked to make sure the keyframe was less than the maximum. Valgrind pointed us right toward the line with the uninitialized value, and by a quick process of elimination we found it.
Our current build (0.2.2.0) of Achron is our first official release that has experimental Linux support. Currently the release is for 64-bit Linux, with 32-bit Linux support planned for the future. We knew we wanted to only support one architecture for Linux for now (just like we're only supporting 32-bit architecture for Windows for now), because each platform adds many more hours to our build and testing process; because we're such a small team, this time takes its toll. Eventually, we may set up a first round of testers if there's interest, which would ease this process a little.
The decision to initially only support 64-bit instead of 32-bit basically came down to these main points:
1) Our local Linux installations are currently 64-bit (we mainly use Ubuntu); compiling and linking all the libraries with 32-bit code instead of 64-bit code proved to be a bit of extra work (not to mention support for debuggers, etc.). Further, we had some library portability issues getting a version of Achron built on a 64-bit system to run on someone's 32-bit installation.
2) From the people we've talked to who are running Linux, most of those who had computers fast enough to run Achron were running 64-bit.
3) 64-bit is "the future". Despite the increased extra address size, the increased number of registers and other ISA improvements help out a lot.
So, unless there's a rapid migration to 64-bit Linux over the next year, we'll release Achron for 32-bit Linux at some point. Most likely this will be after we have an automatic update system to make our lives simpler.
Also, Achron pretty much needs the Nvidia or ATI proprietary drivers to be playable. The Mesa software OpenGL drivers work and render fine, but it's too slow to be playable. The only exception here is the GL_ARB_draw_buffers extension, which isn't critical now, but may be in the future.
Here are the release notes:
Achron changelog:
*major update to support multiplayer
Resequence Engine changelog:
*added multiplayer connection service
EDIT Feb-16-2010 2:36am: We have solved and fixed the pregame lobby issue with the QuadTactics level. While we were at it, we threw in a couple other improvements to the multiplayer experience. If you have already downloaded v0.2.0.0, you only need to download the patch installer on the downloads page.
Resequence Engine changelog:
*fixed issue with > 2 players being unable to play in the same game
If you have some talent and contribute something that we use, at a minimum, we'll put your name in the credits and give you a couple copies of Achron to give to your friends. If you do enough quality work that we use, then we may (at our discretion) offer you monetary contracts or include you in the same profit sharing program that Hazardous Software's founders use.
The rest of the Achron development team and I have been very pleased so far by the response we've gotten from the Achron community, especially in terms of support and feedback. With multiplayer coming out next month, we have some exciting times ahead.
Here are the release notes:
Summary:
This release is the first to contain the Resequence Model Compiler, used to build models to import into Resequence. This release also contains numerous fixes and improvements. The Frigate unit is also officially introduced, however, like many other units, not all of its abilities are enabled yet.
Achron changelog:
*added graphics settings low / med / high choices to: main menu -> settings
Resequence Engine changelog:
*right-click cancels command waiting further input
Things are moving along smoothly now (had a few technical issues with website stuff earlier in the week), but as long as no other issues arise, there's a 75% chance we'll launch on January 1st, most likely later in the day. We'll keep you posted on this, and again, we'll make the announcement first via Twitter.
These different ways of thinking actually influence where we look at the screen. The relative time offset is shown above the timeline (which Mike usually uses as a reference), and the absolute time offset is shown below the timeline (which I usually use as a reference).
We haven't had a chance to ask our testers yet which way they think, but this is something we'll need to poll after Achron is released and people are playing the game. I wonder if the preference to think in absolute time versus relative time has any psychological bearing or offers any indication of a person's manner of thinking.
Here's a general outline of our current tools that we're planning to release:
1) Scenario Editor: This is our primary editor, which we're planning to rewrite into two components prior to release: a level editor and game mechanism editor. The level editing portion has what you'd expect in a typical RTS level editor, such as editing the terrain, environmental effects, placing things on the map, specifying specialized scripts for the level, etc. The game mechanism editing portion is extremely powerful. When you add a new unit to a game, you specify the 3D model, how it moves, what it can do, and all of the ways it can interact with everything else in the world. Each unit has some basic attributes supported by the engine (e.g., position, health), but the unit's actions and reactions are programmable. This tool is also used to assign controls and scripts to the unit (HUD buttons, mouse controls, keyboard controls).
2) Unit and Level Scripting Compiler: Our scripting drives all unit interactions. It is a procedural C-like language (with a sprinkle of SQL-like constructs), that was specifically designed for use with an engine that supports time travel. Time travel imposes many interesting constraints and development challenges that other games don't have to deal with, so the language gives fine-tuned control over some of those nuances. We're interested in investigating other paradigms (functional, object oriented) for this scripting down the road. The script compiler is separate from the engine, so designing another language and writing a compiler wouldn't require changes to the engine. The level scripts can be both chronal and achronal (situated in game time or beyond game time), and have special capabilities in that they have access to virtually all data in the game. Using level scripts, you can make triggers, decide who wins or loses, and even see when each player is on the timeline.
3) Skin Scripting Compiler: We have a unique but concise language that we use to create and control the user interface (HUD, menus, etc.). It supports animations, and can be driven by the level scripting. The skin scripting also maintains in-game settings and maps player controls to more global actions (i.e., those that don't involve controlling an in-game unit, like moving the camera). You could even make a game that had no HUD.
4) Animation Editor: Our animation editor is what we use to pull in 3D models and prep them for in-game use. This editor is really more of a compiler and in-game preview, as we make a short script to attach flags and attributes to specify how a model will work in the engine. When we split the scenario editor, we may merge the animation editor with the unit editor.
5) Campaign Compiler: This tool is how we chain the levels together to make a coherent single-player game.
Most of the tools also have command line support and some logging to make automation easy.
We go over various ways that an advanced player can use the hierarchy. Most of the main hierarchy functionality is covered except for auto-healing and auto-response to attacks.
We're also working on some big plans for Achron early next year. We'll let you know when the plans are finalized.
We typically test by playing full RTS games, but, as I've said before, many of our units are not ready to show to the public yet (see the wallpapers and screenshots page to get an idea as to the programmer art still in the game). We're working on a number of aspects on the art side right now, and are looking to start ramping up art production on the units soon. In the mean time, we decided to make a more tactical level for this video using some of our current 3D models. Also note that the set of units used in this level have mostly mid-range attacks.
Playing a tactical level is quite different from general RTS because you only start with a fixed number of units (and chronoporters!). It was a good test because it forced us to focus more on unit behaviors, which we've been working on lately. It was also simultaneously slower and faster than a full RTS game as you spend more time deciding strategy and less time building things.
The videos are recorded from Mike's computer, with him (dark blue) and I (green) allied playing against an alliance of Greg and Konrad (two of our testers in yellow and light-blue). Mike and I tried to talk a little more than usual to say what we were doing, and Mike used the mouse more than the keyboard shortcuts to allow viewers to see what was happening a little better (not using the keyboard shortcuts, for some reason, made Mike use the hierarchy less than usual in retrospect). We played three games, and each lasted about 20 minutes.
When a multi-player game starts, the present starts on the left of the time window and moves toward its eventual position on the timeline, as the player can't go to back before the game started. Both of these videos are near the start of a game, so you'll see the present moving forward in time before it reaches its eventual position.
Of the videos we captured, these two were the most interesting to watch. Since these were the first full games played after some significant changes to balancing and unit behavior, we walked away from these games with about a dozen new items on the todo list.
We're also beginning to work on improving the rendering algorithms. Already, the current terrain and units models (as previously seen in the videos) are looking a bit better; look for a new video in the next week or two. We're also going to start ramping up the visual arts soon.
For anyone not following us on Twitter, I've had two interviews recently, one on OfficialRTS here: http://officialrts.blogspot.com/2009/10/interview-with-chris-hazard.html, and another on the iGameRadio podcast here: http://www.igameradio.com/2009/10/15/podcast-ep-83-hazardous-software-word-ace/ (though their webserver was having issues at the time I posted this).
Now on to balancing...
In developing an RTS, the real proof of the effectiveness of balancing is always when you test it with people. However, you can do significant initial balancing before testing on a wider scale. By employing basic mechanism design principals, you can design the high-level game structure and somewhat guarantee that no unit types will be dominant or worthless in actual games, based on cost, abilities, and how they compare to all other possible units. Using nontransitive relations (colloquially referred to in game development as rock-paper-scissors technique) is the easiest way to guarantee that players are incentivized to use mixed strategies.
Games that are based on simple mixed strategies are often difficult for people because we're not that great at making up random numbers (but we may not be that bad either). Simply label two of each of the six sides of a fair die "rock", "paper", and "scissors", and play against it. Given enough rounds, you can't beat the die on total wins. However, if you're not playing perfectly random, another player could take advantage of the lack of your perfect randomness and win.
You can also play off people's abilities too. One strategy can be made overall ineffective unless a player is good at micromanagement, in which case it can beat another method. You can't allow a single dominant strategy though, otherwise the game isn't fun. Essentially, all well-balanced RTS games are, to some degree, extremely large nontransitive games.
Simple mixed strategy games can get boring, so setting up interesting combinations of dominant substrategies within a larger strategy space helps considerably. People try to out-think each other, and because people are bad random number generators and also because it's difficult for people to model common knowledge with uncertainty, such relations can and do make for interesting games.
In Achron, spending chronoenergy to change the past creates an interesting situation for mixed strategy games. When you see your opponent's strategy, you can go back, expend chronoenergy, and change your strategy to a winning one. Your opponent can do this too, making for some interesting game dynamics in the high-level strategy, keeping the game balanced even with the addition of time travel (other than the addition of chronoporting, which is a balancing topic for another day).
In working through our first balancing pass in Achron, we have designed our high-level gameplay strategy structure. The step we're working on now is translating that into actual gameplay. Whereas you can simply change the weapon strength, range, speed, reactions, and other attributes of a unit and hope that you get the balance to what you designed and modeled, we actually have an automated process that drives the engine (units' AI and all), and tells us exactly how close we are to achieving our design, including the statistical error. This obviously takes quite a while to run at full statistical significance, but it makes sure that the empirical data matches our theory. That way, we can don't have to guess; it just works. We're working on using this to balance the humans initially. Once we've perfected the process, then we'll expand this to balance all 3 races, internally and externally at the same time.
I'm really looking forward to playing some games after a couple balancing passes. However, I think it really shows what multiplayer time travel does to an RTS; Achron has been fun even before we started balancing!
[Edited 10/26, 8:29pm to correct minor error in RPS example.]
In the beginning, my approach to designing Achron was drawn from straightforward hard core sci-fi traditional structures and conventional design elements. As the concept rounds evolved a tighter connection with science along with a focus on integrating the story line, I began to push the conceptual designs towards a unique look. Following an evolutionary path, the two alien races in Achron began to take shape. Genetic manipulation, the relationship between all three races across time, and their motivations defined the look and feel of the alien races. Technology was also a factor in the character designs. Each race's technological strengths are critical factors in how the story and gameplay evolve in Achron. Design considerations on how each race interacts in space and on ground as well as how players can distinguish between hierarchical ranks and provide visual feedback on their function within the game were all elements integrated into the design. An evolutionary theme became evident in the designs; quirky and exaggerated proportions were incorporated in creating a distinctive world.
In this initial character concept art you can see that scale and proportions come into play. This will affect how the player interacts with adversaries during game play.
As we continue working on art design and production, the focus will remain to stay with the creators' original vision of Achron.
At least once every couple months, I spend some hours profiling Achron while it's playing a big battle. In software development, profiling tells you what parts of your code take how long to run. You find the areas where the engine spends the most time, and you either try to figure out a better algorithm or improve the efficiency of your code. On modern processors, there are many issues to worry about, and sometimes performance can be counter-intuitive.
Mike and I have been working on some new features for unit projectile weapons (e.g., missiles, etc.). I added some new functionality to the engine that helps units choose the position to attack, rather than just the unit. As I finished implementing it, I reasoned that this new code might improve performance slightly. The new code orders the possible attack positions first before checking to see if they're attackable by the weapon (e.g., make sure it is in direct line-of-sight for line-of-sight weapons). It doesn't need to waste as much time checking bad positions (e.g., the back side of the target).
I went to perform profiling, and sure enough, it did improve performance a little bit. I ran a few large battles to see what the new performance characteristics were like. In one game, I noticed a function using a lot of the CPU time (~8%) that had never been on the radar before. In the other games, it was only few percent of the CPU, but still, I wanted to look into it.
The function is one part of checking whether one unit can see another. In the ~30 line function, I noticed a whopping 2-3% of the CPU time being spent on a single line of code!
That line of code is a heuristic that decided whether visibility was worth investigating further. Effectively, the line basically says, "if the unit is too far away, don't bother doing detailed checks". To make the heuristic accurate, I used floating point numbers (numbers that can have decimal places). I looked at how fast the processor was executing the code (known as IPC), and it was quite low. In light of the surrounding code, I decided to make the heuristic use integers instead. In this case, integers are less accurate, meaning that it will need to perform the full detailed checks slightly more often, but given the code, should run faster.
Sure enough, with the integer code, that line used 0.3% of the CPU! The extra detailed checks did use up some of the CPU time, but the new code was still used about 2% less CPU time than the old floating point code while still providing correct results. (And of course I made note of this in the comments.) Using 2% less CPU may not sound like a lot, but small improvements like this add up through development.
We've recently put together a mod of Achron called DARTT, which stands for During Action Review Tactical Trainer. It is an early experimental prototype game designed to teach higher-level strategy to commanding officers in the military by allowing the player to instantly revisit any point on the timeline. In some ways, it reinvents After Action Review, as the player has immediate feedback and can explore the strategy space by changing committed decisions.
DARTT was also a success in that we did not need to modify any of Achron's engine code. Granted, DARTT is an RTS and shares similarities with Achron. However, we were able to build DARTT's mechanics and create two playable levels in only a couple days using only our mod tools. Additionally, building DARTT gave us ideas for better honing a couple aspects of Achron's gameplay.
Next week Friday (Sept. 18th) and Saturday (Sept. 19th), DARTT will be featured at GamingSPARK: http://www.sparkcon.com/2009/09/18/video-games/. If you'll be near Raleigh, NC during that time, both DARTT and four introductory single-player Achron levels will be available for anyone and everyone to play. The Achron levels available at GamingSPARK will consist of 2 tutorial levels (one that walks through basic controls, another that walks through time manipulation) and 2 basic levels (no building or resource gathering involved). See the GamingSPARK website for the location and times. Unfortunately, due to travel conflicts, I won't be able to attend GamingSPARK, but Mike may make an appearance.
But I can't really talk about that in depth, now can I? That would ruin the surprise.
When Chris asked me to start posting here, it initially seemed that the best way to go would be to discuss the writing process for this project. However, after spending some time trying to write out a few posts it became clear to me that that process isn't nearly as interesting as discussions of working out unit balance and strategy. In any case, I'd much rather have a story for you to read than a blog post that was all about the writing process.
With that in mind, we're going to be unveiling some short stories over the following months that paint the Achron universe with a little bit more depth. You can find them by following the link to the story page, and looking for links within the story.
In the games we typically play, it's quite rare to have such large armies facing off head-to-head all at once, mostly because people don't wait that long before first strike... which, as usual, may be undone after seeing how bad it went and then followed up with a new attack in the past from a different direction. Utilizing large groups of units and working through the tactics with time manipulation was a lot of fun. These larger tactical battles will be in the single player campaigns, as several parts of the story call for them.
Being able to travel through time allows both players to react and correct mistakes, so tactics become even more interesting. In one battle, I initially tried sweeping a group of Mike's tanks by the side with about ten lancers. Lancers are fast and nimble air units, but aren't particularly strong. My lancers did some damage, but were then flanked by another one of Mike's tank groups. However, the next time I jumped back to the beginning of the battle, I saw that Mike had intercepted my lancers with a group of his own.
Throughout the games, Mike or I would partly surround and defeat a small group of opponent units... and then the other would change history.
I distinctly remember the point in 2006 when we first put restrictions on some units' firing directions. It had been on the todo list for a while, something we had planned at the earliest stages of development. Before this was implemented, all units could rotate to fire in any direction almost instantly. These directional restrictions required tanks and many other units to rotate or move to face a target before firing. Flanking instantly became an effective way to gain an advantage on an opposing force, especially when coupled with some tactical teleportation.
The hierarchy controls were very useful at this larger scale. I tried a few different management strategies. In the first game, I put all of my units in one big hierarchy, with 4-8 subordinates per commander at the lowest level and about 3-5 subordinates per commander at the higher levels. Because I found myself using various parts of the hierarchy frequently and hardly used the top-level commander, I used about 6 independent command hierarchies instead for the later games, varying their compositions.
Initially organizing the units was pretty easy. The communications center building has an auto-hierarchy control that tells units to form hierarchies automatically based on units' types, ranks, and positions. Even with the large number of units in a random layout, it only took a handful of commander assignments to get the form of hierarchy I wanted. The only times I changed the hierarchy structure during battle were when Mike had my units almost surrounded and I was trying to hold off some of his units while others of mine attempted to break away.
All is moving along well on development. We've been working on improving the in-game scripting API to add all sorts of features to levels, especially those where we teach the player to use various aspects of time travel. It's particularly interesting developing this, as there are really multiple times going on, while the player is only watching one at the same time. If an event occurs 2 minutes ago in a tutorial, you have to consider whether the player should be notified in the present.
We're also still working on fine tuning chronoenergy consumption and generation models for gameplay purposes.
Achron was also discussed on last week's Dogear Nation podcast.
For those of you following us from the USA, have a safe and fun 4th of July weekend!
The second demo video is of the grandfather paradox, and can be found on our new paradox page.
Our unveiling at the Experimental Gameplay Session went well! Check it out some demo videos on our youtube channel: http://www.youtube.com/hazardoussoftware
Here is the Achron Alpha first demo video, the general demonstration of time travel:
This is the second demo video, highlighting a two-player game:
The third demo, highlighting chronoporting (sending units through time):