Sorry this turned out to be long, please be gentle.
One of the things i've always wanted to do is make a calculator of sorts for vehicles, guns, and decks. The problem i've always had with programming those things is programming the options available. Then you have usually two parts to it, first a set of options that are for creating the base item, then a set of options to adding to the base item or enhancing an item from the books.
What i've been looking into is not creating a program but putting together some ideas, specs and what not for objects/classes that can be used by others to put together a general tool or one for a specific purpose.
One of the first issues was to think of a way to handle option incompatibilities and required options. This was complicated by the fact that some options allow another option but only upto a specific rank/level. So I tried to figure out a way to give each option/level pair a unique id for incompatibility checks. My first thought was a database table setup with link tables and predefined queries for checking compatability of options. That's not really cross platform, would linux users need to compile and setup a mysql database, and what would mac users do. So i thought it best to keep things simple and put together a base format for the data and allow the programmers of any platform to restructure it for their set of api's. Windows guys can roll the data into a access db for their com objects and linux guys can produce a generic dbase format or require mysql.
So here's the idea and example of this.
srid = TONNNVV
T: type of equipment, F-firearms, V-Vehicle, D-Deck, P-Program...
O: Option group A-Z,
NNN: Option in the group, 999 if base 10, 4095 if hex
VV: Version, used for levels, max 99 if base 10, 255 if hex
Inclusion and exclusion checks
TONNN* = all options matching the TONNN base
TONNNVV+ = only options greater then or equal to this VV of option TONNN
TONNNVV- = only options less then or equal to this VV of option TONNN
TONNNVV= = only options equal to this VV of option TONNN
<option>
<name>Bullpup Configuration</name>
<srid>FA00301</srid>
<dp>+25</dp>
<fcu>-0.5</fcu>
<con>+2</con>
<notes></notes>
<incompatable>FA011*</incompatable>
<required></required>
</option>
<option>
<name>Improved Concealability (1)</name>
<srid>FA01101</srid>
<dp>+20</dp>
<fcu>-0.25</fcu>
<con>+1</con>
</option>
The next thing that i think would help would be to create a pseudo language of sorts to easily define how options modify the item they are being applied to and maybe one day for skill and attribute checks. For firearms most DP cost are static but smartgun links are based on the the frame DP cost, something like (frame.dp * 1.5) could be done. If something was defined so that every program would know that frame.dp means the dp cost of the frame this item is using, things would be easier.
If the platform api knew what it means and can evaluate it, the guys putting together the front end can focus on putting together a cool front end and not have to worry about the backend stuff.
I've been working on stuff in .net and I've got skills, contacts, and attributes mostly done. I've been working on firearms for a little bit. Here's some examples of what I working towards.
character(1).firearms(1).opt(1).dp
character(1).firearms.count
character(1).firearms.opt.count
character(1).firearms("MEAT (Predator II)").legality
character(1).firearms("POTATOS (Predator II)").power
issuccess(roll(character("Axle").attribute("Modified").body,character("Red Samurai #1").firearms("HK227").power-character("Axle").armor("total").ballistic),2)
issuccess([successes],[needed successes])
roll([dice],[target#])