Although most bugs in the git build are due to work in progress, anyway thanks for the bug reports.
I'm currently refactoring a few classes and relations. Because I now have some new insights that I didn't have earlier on. For everyone who is interested... read on.
Removing:
UnitSpriteRule - since this data is directly linked to graphics it makes no sense to have it configurable for now, it just complicates things.
MapModel - there is not really an added value to keep track of all individual models of map objects after all, voxel data will be looked up directly in the loftemps data.
Adding:
RuleArmor - holds armor value for different types of armor, including aliens' armor
RuleUnit - holds initial stats and other unit specific data for both xcom and aliensRuleSoldier - RuleAlien
Unit - abstract class that is used as an interface to both Soldier and Alien
Alien - the counterpart of Soldier, but for aliens. It doesn't hold any data, but looks it up in the associated RuleUnit
Changing:
Soldier - implements Unit, although this changes nothing on the geoscape side.
BattleUnit - holds pointer to Unit.
The philosophy behind this construction is driven by the idea that an x-com soldier is a unique entity, existing both outside and on the battlescape. An alien is just a pointer to a ruleset.
The advantage of using the abstract Unit class, is to simplify the usage on the battlescape. For example you want to get a unit's name, you do: unit->getName(); and depending whether it's an Alien or a Soldier, it will call the appropriate function.
Note that BattleUnit is not a descendant of Unit, this is intentional. Otherwise if a Soldier enters a battlescape, the Soldier class should be "morphed" into a BattleSoldier class, this is tricky business and especially hard to maintain - if new attributes are added to the Soldier class. So for each Unit participating in battle a BattleUnit instance is created which holds it's corresponding Unit pointer.
As a rule the Alien class counts for all NPC units: so including civilians. The type of class does not define whether a unit's AI is hostile towards x-com. This is taken care of with a "faction" attribute : friendly, neutral or hostile.