Saturday, 30 April 2011

PlanExecutionHelper, Plan types

Yeah, these two are now under development. Some Plan types were invented, so different events and behavior based impulses of the entities can use those types:
public static final byte PLAN_TYPE_EXPLORATION = 0;
public static final byte PLAN_TYPE_SPYING = 1;
public static final byte PLAN_TYPE_PEACE_MISSION = 2;
public static final byte PLAN_TYPE_ENCOUNTER_TRADE_AND_INFO = 3;
public static final byte PLAN_TYPE_PLUNDER_EASY_PREY = 4;
public static final byte PLAN_TYPE_MASSIVE_ATTACK = 5;
public static final byte PLAN_TYPE_SIEGE_POPULATION = 6;
public static final byte PLAN_TYPE_KILL_PMI = 7;
public static final byte PLAN_TYPE_PACIFY_PMI* = 8;
(*PMI = PersistentMemberInstance aka "Non-Playing-Character")
These will have different Executor implementations used by the PlanExecutionHelper. The helper class is also mapping available units of the entity for the tasks based on priority of the plans and the power level of the units. So these plans gonna be in the InformationContainer of the entities serving as incentive and source of information towards other entities like the player.

I imagine that the EntityInstances (large groups of similar beings) will by default have some Plans like exploration/encounter/plunder easy pray based on their set of Behaviors specified for their 'race' in the HumanoidEntityDescription of the EntityInstance. Those plans will lead to meeting with other Entities and thus relations will start to change leading into alliances and massive attacks/sieges etc.

Monday, 25 April 2011

Lesson learnt: Fate of world sealed. plus some AI concept.

Things progressing further: HistoricalEvents stored after won or lost or left battles; more refined decisions can be programmed for Humanoids (of type HumanoidEntityDescription) when they think about choice for encounter (choice: Hide, Attack, Indifference, Encounter (exchange info, commerce)) based on their Behavior patterns, and when they think about how to interpret a relationship level with another group of beings (e.g. based on their Behavior they can be forgetful, raising the relationship level a bit higher) -- these will have a huge impact on the AI vs/pro AI/Player happenings later. Now for test purposes the humanoid races are all quite nasty, attacking each other almost always, downgrading relationships and thus giving more aggressive battles turn after turn, railing down the entity groups around their hometown... Of coures this will receive more care and folks that are peaceful are always going to try to negotiate neutralization, commerce and info exchange with friends etc.

Now to the lesson learned: I had to root out all the HashMap.keySet() or values() method calls for iterating lists of those maps and replace HashMaps with TreeMaps in the encounter/ecology part. Otherwise a random order crawled into the happenings of the historical test application run. EncounterInfo was the culprit, full of HashMaps featuring EncounterUnit as the key, now I use TreeMap instead, and EncounterUnit implementer classes implement the Comparable class as well.

...And randomness was replaced with the Hash based quasi-randomness, and thus the fate of jClassicRPG test worlds had been sealed and unchangeably progressing the same route test run after test run with the same TreeMaps to Eternity. ;P

Friday, 22 April 2011

BattleCalculator, InformationContainer, Positioning

Progress is slowly continuing on the matter of '(Artificial) Intelligence -> Information/Dialog/Quest' field. Events are now starting to shape up with the simple decisions of EntityInstances. Aside the UI based combat/encounter involving the player, now AI vs. AI happenings are being tested out with the IntelligenceSystemTest runnable (you can find it in the codebase in SVN if you want to test, and look for your log file under /.jclssicrpg/logs). Firstly BattleCalculator is mostly done that does a simplified, weighted combat calculation with impact of death toll and neutralization (making the enemy give up/surrender). Simple stuff, but for the time being it will suffice and serve well the history creation / plan growing of jcrpg's seed based worlds.
Also first memories are being put into AI information containers, first of all Positining information that mirrors the knowledge of a unit about the location of other entity instances. A lot more to add (like the Historical events that will serve as a backgroundish spice for the conversations, and Plans that will serve as a joining point for the Player to do things related to other entities...in other words do some quests ;))
I can say it's really a tiresome process with a lot of stuff to plan and realize, but it's at the same time rather interesting. A snippet of log for you, as this doesn't involve a screenshot yet:

org.jcrpg.game.logic.ai.BattleCalculator - *INITIATOR MEAN: martial 1.0
org.jcrpg.game.logic.ai.BattleCalculator - #TARGET MEAN: martial 1.0
org.jcrpg.game.logic.ai.BattleCalculator - rollOfInitiator = 961
org.jcrpg.game.logic.ai.BattleCalculator - rollOfTarget = 2500
org.jcrpg.game.logic.ai.BattleCalculator - Absorbing ratio 1 Warthog (4) 0 : 1.0 Impact ratio: 0.0 neutralization: 1.0
org.jcrpg.world.ai.EntityFragments$EntityFragment - AI BATTLE DAMAGE fragment of size 29 - Warthogs 496 = 0.0 / Neut.: 0.0
org.jcrpg.game.logic.ai.BattleCalculator - Absorbing ratio 1 Plant'o'Bite (0) 0 : 1.0 Impact ratio: 2.0 neutralization: 0.0
org.jcrpg.world.ai.EntityFragments$EntityFragment - AI BATTLE DAMAGE fragment of size 7 - Plantoid Horde 495 = Infinity / Neut.: 0.0
org.jcrpg.world.ai.EntityFragments$EntityFragment - Plantoid Horde - decrease relation by 1 level for Warthogs RESULT 0
org.jcrpg.world.ai.EntityInstance - EntityInstance destroyed Plantoid Horde 495

Tuesday, 19 April 2011

AI getting care, which is planned to result in dialogs

New things are getting into place, EntityInstances (group of beings) are being beefed up with decision making (based on behavior and additional relation data plus informations later) and quick battle calculus is being created to let things happen in the world/history generation phase and later. A lot of placeholder TODO's are placed, which means it's a much wider task than that I'm currently wanting to implement. I'd like to get to the first test of history flows and AI decision flows as soon as I can, leaving the less crucial (but important) parts for later.
After this first part will get it's first iteration of development finished, next stuff will be to add a capability to beings to flush out information streams to other beings (like the player) based on their relationship level. That stream of information tokens will be converted into meaningful dialog by a layer of 'info types to nice text' engine that needs to be created. Also player should be a source of information stream too, of those information that the player gets hold of while communicating beforehand. So you might be kind of resolving gameplay things by sharing information you got. Most probably player shouldn't be able to resolve a communication without the proper informations in the party's 'information container'. So the choices for dialog will depend on both sides' possesed information tokens and relation ship levels.
At least now we have a plan and some of the codes are already being forged. :)

Monday, 18 April 2011

Unified Feed for hardcore jClassicRPG fans

Using yahoo feed pipeing system, I've unified all the available RSS feeds of jClassicRPG. If you're a hardcore fan of the project you can use the following url from now on: http://feeds.feedburner.com/JcrpgPipes This one contains all blog posts, forum posts and trac project management events going on in the project.

Sunday, 17 April 2011

RSS forum feeds added. Working on ecology AI.

Global RSS feed and individual ones are now served on forum by Smartfeed phpbb module. Works great so far. Global URL if you want to subcribe in your Reader app: link. READ edit2 part for the really good ATOM/RSS feed choice down below. :)
Continuously working on AI. A test suite is now working, in console mode, spitting out turn by turn, entity by entity what's going on in their decision making. Soon to add more, like a quick combat/impact scenario tool for them, appending of history. Entities can now hold information in their 'container' which are past HistoricalEvents or future Plans. (All these are yet placeholder classes to be filled with real content on the long.) Additional Behavior types were added a bit like those that Civilization I of Sid Meiers had, so these traits can have an effect on how different races/populations act in the turns. So... it's under construction... :)
EDIT: indivudual forum/topic RSS feeds doesn't work yet, I'd need to tweak the CSS/style files more as it turned out.Sorry! Global RSS is working well, so use that for now. Thanks! :)

EDIT2: Oh, just found out that phpBB3.0.7+ has ATOM feed by default. *FACEPALM* Anyway, I've enabled it, and now you can subscribe to virtually any part and subpart of the forum, and to New topics too as a separate feed. phpBB coolnes, kudos! Global phpbb based feed: link

Friday, 15 April 2011

Forum registration corrected

Forum got some troubles preventing registration. Now theme is corrected, you can register hopefully without any trouble.

Tuesday, 12 April 2011

Seems like we're dead. But no, undead we are. Updating.

Hey, folks.
SVN just got dependencies updated and code updated to work with it. Well, it's quite quite here to say the least. Because this one bus factor project's solo dev at these times felt like he has to continue some chillout time. Promise was not much kept, the ideas about quest/dialog system was not perfected since the last posts. No excuses.
But yesterday I was kind of say...unnerved by the brainless console fight of dragon age 2. And then I told myself, hey, why don't you friggin get your ass moving and finish those few things that need to be done to get jcrpg into alpha stage... and so I cleaned the dust out of the svn directories and see what's going on in ardor3d first. Now that that's done, I should finally design that brilliant quest/motivation/society's weave generator system. So let's see...
First of all it must be quite simple. Keeping the KISS design (some of you well know it, dear readers) here as well, till we get to a gamma stage. So simple and stupid.
We need a Pattern interface. Patterns should be weighed by importance. These should be blended together into a 'Social Tension Field' so the stuff in them can kind of 'inter-lock' with each other. You should be able to get info about the 'Patterns' and how those interrelate between the different 'Entity' groups. Then you can decide yourself what you want to do. Patterns should materialize in kind of 'Quest Points' where you go and resolve Pattern related tasks. These by the way should be 'player' independent so these stuff should be accessible to other AI parties or just simply put other 'Entities' aka groups or 'Persistent Entity Members' aka NPCs. So all the stuff should be just plain generated on grand level, no pestering with small details. Let me conquer the world...in those Patterns. After all that's what you mostly want in a good ol' RPG?! Have your say.

Twitter