After some bug fixing and restructuring the Blackboard class (yet again), I did manage to fix the AI. After a lot of sweating swearing and sighing, I decided to have 2 Blackboard classes, which are annoyingly similar:
One Blackboard class is for general variable storage explicitly handled by the client, typically application states. So that they can for example pass variables from one state to another.
The other Blackboard class is for automatic variable storage where the variables, on request for access, are calculated automatically via functions and cache their values to avoid recalculations. So there can be automatic function chaining if a variable depends on another and so on. This can still be overridden by the user, and in that case I need to track dependencies to invalidate the cached values of all dependents. Example:
In the above, if I explicitly set "entity:CurrentEnemy", then float:EnemyPowerLevel and float:BattleSuccessEstimate both become dirty, therefore next time I request them they need to run their respective functions. This functionality will be used in the Instanced Decision Groups that I mentioned in another post
Now the AI manages to actually stay alive for a while. So compared to 8 months of survival (1 move is approx one day), the new AI can stay alive for more than 7 years!
So I guess I'll consider that good enough for now and move on to other things. As an interlude, I wanted to do some graphics... So I was testing some visualizations and recreated a style that I want to have at some point in the game, perhaps in the form of a cutscene or who knows... So, here it goes!
The style is reminiscent of SNES Mode 7 when applied for overworld visualization, and I remember it (and loved it) from the ending of Chrono Trigger
At the moment of course the tile visualization is severely boring and flat (even though I like the palette), soon-to-come features will be smooth tile transitions, textures (whenever I find good enough textures for all the biomes), trees, mountains, and some water animation. And perhaps try a few visualization tricks :)