I know this is a long time coming because as usual I’ve been quiet for the last year. Anyway we are heading for the Spring Equinox release 2.0.9, and although we seem to be dropping in to a habit of one annual release, I figure that’s better than nothing at all; so I thought I’d take a moment to give a brief overview of what to expect.
Axmol port
#246 fix crash when recruiting soldiers from depleted stronghold
So the big one here is the Axmol port. That has taken some work. Firstly thanks to the team at Axmol for giving me all the assistance needed. And also to Francisco Rosa who is becoming an essential right arm for me. He has taken care of all the Windows builds and installers for some time now, makes sure any code changes I make still work on windows, and created the Windows Axmol project for me this time around.
Moving to Axmol is huge. The las SDK cocos2dx still hasn’t been updated in over 4 years so was becoming very stale with no bug fixes or improvements. This new engine, which is a fork from Cocos2dx being everything up to date, and hopefully secures a few more years of continuous development allowing me to keep up to date with Apple’s and Google’s requirements.
A number of bug fixes. A bit of a nasty crash when recruiting soldiers from a stronghold. Some minor screen adjustments. A fix for not displaying who killed a lord, or how he was killed in DDR. A fix for Shareth keep showing up in guidance even though she is dead!
#253 – Dreams open up the Fey, is a new gameplay rule, thanks to Franciso Ross, that is eyeing the Novel scenario. Basically you can choose to play the game without the ability to recruit the fey, or you can only recruit them once Dreams is recruited. This is experimental as we have no real idea how it will affect game play.
#252 Refactor DDR for tunnels – this is connected to the LoM Novel scenario and is about decoupling the tunnels feature from DDR so that it can be available in other scenarios. See this post here about it.
LoM Novel Scenario will be a work in progress as there is still a lot of work to do. But currently tunnels are supported and impassible mountains around the Plains of Doom. Basically you can’t get the Ice Crown without using the tunnels. You can follow progress here #171 should you be inclined.
A spring release for The Lords of Midnight and Doomdark’s Revenge. Version 2.0.8 has hit the stores. There are a number of LoM changes but it’s a huge DDR update. Check out the last post for full details of all the changes. Last thing for me to do with this update is to get it back one GoG.
Unless there are any problems then this will be the last Cocos2d-x release. Don’t worry – there is a replacement plan…
As you will be aware if you’ve paid attention to my many troubles with development over the years, I moved from Marmalade SDK to Cocos2d-x a few years ago due to Marmalade getting out of the SDK game. It’s been two years since I managed the v2 release which was the first under Cocos2d-, and. it was six years ago that I managed my last Marmalade build.
Well Cocos2d-x is pretty much no longer supported. After they released v4 they have not done any updates in 3 years. As we all know, mobile platforms move forward very quickly, and there is always the chance that either Google or Apple will change something enough that the games don’t work anymore, and then even though it’s open source you’ll need to be luck enough that someone fixes the problem for you, or you are deep in to it yourself. However, changes are usually just small fixes, if Apple decide something fundamentally needs to change in the system, low level c++ SDKs are going to need a lot of work. There are already bugs in the Metal implementation that have dogged my port since I released it that have never been addressed.
Luckily, there is a new supported fork of Cocos2d-x called Axmol. They’ve pushed the SDK forward and fixed a huge amount of issues that existed in Cocos2d-x. I’ve been eyeing it for a while but I finally took the plunge earlier this year and have ported to it. It was a relatively smooth transition as far as most of the engine was concerned. Because it’s based on Cocos2d-x it was mainly about getting the project setup file correctly formatted and not much about the code. However there were a number of issues with the OSX port, which is the one I started with, that were probably unique to me. I say that because I suspect at this stage not many people have released Mac games fully through the App Store with Axmol, or indeed Cocos2d-x to be fairl. But the team were fantastic and we got them all ironed out relatively quickly.
I just have some tweaking on the Windows version which is more to do with building with multiple assets, (my projects are setup to be both LoM and DDR which is not quite the expected process for Axmol). But I expect to be fully operational across all platforms very soon.
I’d like to get test versions out soon, and will likely start that process in the next month.
With the move to Axmol I believe that the games will be safe on the current platforms for at least a few more years yet. I actually think it’s remarkable that it’s been 11 years since I originally released LoM on iOS.
Here is something that I have been working on in the background – Tunnels in The Lords of Midnight. It’s not something that is going to be used in the main game, but I am hoping to have a new scenario released later this year, early next at the latest.
For those of you who have read Drew’s novelisation, then the need for tunnels will make sense. For those of you who haven’t, well something for your list…
Normal Tunnels
Now, you’d think that adding tunnels to LoM would be pretty straight forward. It is as you may know from following my posts, the same codebase as Doomdark’s Revenge, having been unified a few years back. However, there are some issues.
Firstly, even though they are the same engine, and use the same data structures etc, the games are built conditionally as separate projects. This means certain part of the engine is not compiled depending on the games. For example, tunnels, mist, AI lords, special objects, are not part of LoM. Regiments, Ice Fear, and Waypoints, are not part of DDR. There are other little things like critters and battles working differently, and small UI changes.
The engine is written in c++ and most of these features are turned on or off using preprocessor macros like this..
Some of it is handled with c++ object inheritance.
Some of it is not handled very well. The code base, like many projects has morphed and evolved over the years. I as a 30+ year veteran software developer, understand the vast gulf of academic based code structure, and real world getting it done with deadlines. And it’s no surprise that the engine has many of these pitfalls.
The following piece of code makes sure that two characters tunnel status is the same. ie: These two characters can only see each other if they are both either in, or both out of the tunnel.
#if defined(_DDR_)
// they both need to be in or out of a tunnel
if ( c->IsInTunnel() != IsInTunnel() )
return false;
#endif
The thing you will notice is that the preprocessor check that will include this code is _DDR_ which means, it only gets compiled when I build Doomdark’s Revenge. Ideally this code should either be governed with a _TUNNELS_ feature preprocessor macro or better still, a feature check based on the capabilities of the scenario. So, that was the first thing I had to do and it took a few iterations to get it right.
The landscaping view for DDR is different as it has a header, therefore the tunnel view needed to be modified.
New graphics were used to distinguish the two.
Text had to change. The DDR strings database has ways of describing that a character is in a tunnel, or can see and entrance. LoM did not.
I found a bug on the think page that is in DDR in that it will show you information about a character in a location that does not have the same tunnel status. There were a couple of other UI issues specific to LoM for showing characters or armies in a tunnel. These just come out of different code paths.
Narrow tunnels
You will notice in the above image, a slightly different tunnel view. This is for narrow tunnels. The novel explicitly has Farflame not entering the tunnels when Morkin does even though they are together, and this is because he is too large. This is a story specific plot device, but that makes no sense when we consider the tunnels in DDR. So the change I made to accommodate this was to have normal and narrow tunnels. In this instance Farflame can enter the tunnels, but there are some important areas that he cannot go because they are too narrow, and the game indicates this with the slightly different layout. Narrow tunnels will also be extended to armies, and too many characters in one location.
Something else I have done with the tunnels is to tweak the concept of entrance and exit. In DDR these are always one of four terrain types – Palace, Pit, Gate, and Temple. However using the mapping software you can now override this and mark any location as an exit, an entrance, or both.
Tunnel view in mapping tools
And finally, while I was make changes for the mapping I extended two other features. Firstly impassable mountains. This was added as a rule recently to help make games optionally harder or just different and it was locked to just mountains. However, I have now added a feature to allow any location on the map to be marked as impassable. In this instance it will be used for all the mountains around Ushgarak. This means that the only way to enter the plains of despair is to take Kor and Grarg. The slight pass at Vorgath as been closed off but I am having to think this through a little more because of the consequences to a western attack.
And finally, respawning of things. In DDR critters and things (claws, thorns, springs, etc) regenerate randomly. I am planning on adding this to LoM as a rule, but for the next scenario I am also adding it as a mapping feature so that certain locations can respawn. In this instance I am using it for critters in the tunnels.
Tunnel Exit
There will be more information about the Novel Campaign later as I work my way through it.