Monday, September 28, 2015

Dev Diary Week 3 - BattleTech Design Software

Not much progress this week code wise, but a lot when it came to implementing everything in the Interstellar Operations Beta, and a lot of cleaning up of my data to support all the new features and systems in IOBeta.  

I am already running into the headaches I knew I'd get without the ability to get questions to rules answered.  Some of the unanswered questions I have:

- Can ProtoMech/Battle Armor LRM/SRM's use special ammunition?
- Do the prototype and clan improved SRM/LRMs have torpedo versions?
- Is requiring "fusion", like a Heavy Gauss Rifle, the same as requiring "fission"?
- Do sub-capital weapons require power amps?
- Can sub-capital weapons on a large support vehicle utilize a targeting computer?
- Are all the various kinds of ATOW ordnance available to the Clans?
- The Mechwarrior combat suit has a common date before its prototype date.
- The Mechwarrior cooling suit (CL and IS) have a prototype date before its introduction.
- Is the Artemis IV Prototype really 1 slot on a support vehicle?
- A lot of the hardpoint weapons (like bomb's) don't have weights.
- Many capital weapons with ammo don't indicate if the BV is per shot, or per ton.
- Since a Long Tom arty can fit on a superheavy mech, can it split locations and be on one?
- Was ATM ER Ammo introduced by CSA, or CCY?
- How much damage do iATM improved inferno rounds do in an explosion, and are they subject to inferno heat ammo explosion avoidance?

Another huge issue, kinda related to the first item above, is ammunition.  Typically I would track ammunition like other design software had.  That would be a year of availability, a cost mod, a BV mod, and maybe a damage mod.  The thing is that simply isn't sufficient.  We now have weapons that have a different effect for each ammo type, different availability for ammo types, and all sorts of unique situations where trying to track the ammo so "lightly" will simply lead to limitations and issues in the future.

So, I have to track each ammo, for each weapon class separately.  Ammo can change any parameter of the weapon itself, from rate of fire, to ranges, to damage, costs, BV, even the battleforce abilities.  This allows complete versatility in the future to bend to whatever possible ammo CGL thinks up for its 3rd Generation Tech.

Right now, I have 16 LRM systems (4 classes, each of Inner Sphere, Clan, Clan Improved, and Prototype), 12 SRM systems (3 classes, each same as LRM), 4 MML's (4 classes).  I have 23 LRM and 17 SRM ammo types (11 and 7 respectively are IS only).  On top of that, I have 30 more types of LRM classes for ProtoMechs and BA, and 18 more for SRM.  Confusing right?  That can be up to 2740 types of ammunition combinations.  If the PM/BA SRM/LRM's don't get special ammo, that reduces it in half or so, but still, daunting eh?

And yes, it has to be done that way in order to be versatile enough for the future, and for the data to be used in other sources, like a real time megamek game.

Another thing I have to do that most design software never did was actually look at all the data.  Many games may just say "C" for cluster, but I can't do that.  I also have to track the # of clusters, the damage each, and the damage grouping.  I can't track artillery as a string like "20/10", but I have to track each of those as a number.  I can't take those string like shortcuts and let players interpret them.  I *have* to be able to have a computer read every single value, and that means no strings.

A potential huge issue is all the rumors that BV2 will be replaced with something else.  I may have to revisit every single piece of equipment to update some value whenever that is adopted.  While a pain sure, it shouldn't prevent me from quick adoption of whatever it may be.

CGL needs a MUL for equipment.  I guess I could make one, but I gotta finish this first :D

My goal this week is to finish the data update.  Hopefully by next weekend I'll be coding again.  What is really funny is even though I'm not coding, it is constantly on my mind.  As of right now, the code itself seems trivial (though time consuming) in comparison to getting all the data done.  The application is just a skeleton and will just read in all that data to determine how it functions.  The program will be data driven, making for easy updates and a long lifespan.

Thank you for all the support.  If anybody wants to help I won't accept money, but your time could be useful.  Some of the things I'll need are:
- Somebody to translate everything to German, or any other language.  This will be later once the application is in beta.  I simply can't do this, or would have to rely on flaky online translators.
- Somebody to go through all the record sheets, get the best resolution PNG of an empty version, and then plot the X/Y coordinate of everywhere data can be inputted as well as the font size, and maximum length/height.  Also the coordinates of a region where the armor dots will go.  This takes me a long time to do, as there are a lot of record sheets, and it would help me focus on the coding.  These will be user configurable, so if they wanted to mod their record sheets they could.
- Somebody who can go post on the forums in the questions area all the questions I have.  I'll email them a question, they can send me the link for it so I can keep track.

And finally, for the heck of it:
Whoever can get me reinstated on the official forums (so I can ask my own questions and pimp my product), I'll send, at ZERO cost, a full company of a dozen unassembled, unseen, old school lead, Battledroids Marauders.  If you can get CGL to officially sanction my designer, I'll send you 2 companies :D

Monday, September 21, 2015

Dev Diary Week 2 - BattleTech Design Software

Over the last week production has been slow due to all sorts of things (vendor, cars, parties, etc) but I have cleaned up most of my equipment data, and have now gone through and inputted quite a bit of the stuff from IO Beta, though just the 2 big sets of tables I found 40 errors on them, and some inconsistencies with formation/combat unit/etc sizes.  However, its a beta, so I won't be critical of it.

This isn't the kind of work that lets me show you much, but it does need to be done.  I have to make sure I have full support for 4 availability ratings, not 3, as well as a lot more information on years and factions equipment is available and what its production state is.  A couple changes that if I hard-coded things, would have been a serious pain to fix.

So over the next week I plan on finishing up the data import from IO Beta (about 12-16 hours I think).  At that point I'll tweak my data once more (another 8 hours) and be ready to jump back into the code.

The main portion of the code I'll be working on first is ensuring I can design out units down to the equipment level.  This means tonnage, speeds, engine/gyro/cockpit/etc types, and even armor type.  All of these should fall pretty fast once I start coding on them, so that is good.  This could take from a few days to a few weeks, depending on how much I finish before moving onto the next item.  For example, I may not worry about calculating cost or BV right now (isn't there a new BV anyway?) so may just skip those.  

Equipment critical allocation is a big step.  This only applies to mechs/industrialmechs, and is the process of placing criticals in particular locations.  I know people like dragging stuff around, and moving slots to particular numbers, but all 6 or 12 locations have the *exact* same chance to hit, so the actual # is 100% irrelevant.  So, I was thinking when I get to that part just skipping the allocation completely.  Actuators would go first, then equipment that can take a critical, and finally things like armor/structure that are "reroll on hit".  I know this may upset some folks, but it really shouldn't.  I may do something later to let you rearrange them, but for right now that interface is pretty time consuming for me to write, and it'll be skipped the first time around I think.  If you think location matters, read the rules again, when you roll 1 dice for upper/lower, and another for 1-6, and you get a reroll or something that has already been hit, you reroll BOTH dice, not just one.  I know numerous people who have made that mistake (and that WOULD affect locations of stuff, dramatically).  

Anyway, just a quick update to know things are progressing.  If I had to guess right now, which is a wild guess, I'd say I have about 2-4 months before having something you can do designs with.  There are a LOT of variables in there, but mostly it just comes down to hours I have available (most of which are spent on this).

Monday, September 14, 2015

Dev Diary, Week 1 - BattleTech Design Software

I'll be doing these weekly updates to my development progress until I am completed.  If you want more detail, as in a *LOT* more detail, you can join my facebook group instead.  Whenever I go beta, those will be the guys that know about and get it first though.

If you want to help, I have already done all the hard stuff, and all that is left is coding.  Splitting coding to a team IMO reduces the quality of the code, so I'll be doing it all myself.  If you really want to help PM some moderators on the forums and have them reinstate me, not like they haven't done that before to perma-banned folks that were far worse than I was.  However, at some point perhaps I'd be better off just forgetting about it like most of my fellow BT players have with the "I don't use the forums because of the politics" comments.

So, week 1, a lot of progress, but not nearly as much as I had hoped.  I had a family drama night, got tied up another night (literally, haha), and I have vendors here until about 6 or so working on my house siding, but I still got a few good nights of coding in there!  I also put together a few IWM LAM miniatures, which are a freaking pain (hands separate, REALLY?!?!?!), and got a few dozen more micro-armor pieces assembled in preparation for me learning to airbrush in the next couple weeks (which yes, will cut back code time a bit).

I'll keep these updates much less verbose than my daily's, so here goes:

  • Wrote initial code to parse the classes.  I can now start up the app, choose a tech base (clan, IS, etc), chassis type (mech, proto, sv, cv, etc), a mobility type (quad, lam, hover, etc), a weight class (light, medium, etc), and a tonnage.  I also now properly parse structure, cockpits/control, engines, gyros, and armor.  None of these sum up weights or costs or anything, but that will come soon enough.  Still a couple minor bugs (an infantry platoon crashes it) but these are also easily fixed as I get to them.
  • Cleaned up my chassis data source.This is 177 unique values for 653 unique chassis (400k of data right now) that does things like determine the tonnage, structure points, what parts (arms, legs, turret, etc) a unit has, and various other things.  This is a critical first step to moving forward.
  • Cleaned up a large chunk of my equipment data source.  This file has 115 unique values (one of which that can be 20 or so other values) for 2232 pieces of equipment (9mb of data right now).
  • Added objects so I can load all the chassis, equipment, as well as my 6845 unique element types (45mb of data right now) upon startup.  It currently takes about 14 seconds at most to do all this, but it isn't optimized or multi-threaded yet and should be much faster upon release.
  • I created a feature list.  I'll post it at the bottom as I think that is important enough to post on the weekly update.  Please comment if I am missing something that should be there!
  • Created a method to dynamically populate an object from my tables.  This may not sound like much, but it went from a thousand or more lines of code to 3.  Plus, this allows the fans to create their own datasets to use quite easily, which I think most folks will like.

Currently planned feature list:

- Designer for BattleMech/IndustrialMech
- Designer for ProtoMech
- Designer for Battle Armor
- Designer for Conventional Infantry
- Designer for Combat Vehicle (WiGE, VTOL, Hover, Wheeled, Hydrofoil, Naval, Submarine)
- Designer for Support Vehicle (WiGE, VTOL, Hover, Wheeled, Naval, Fixed-Wing, Rail, Airship)
- Designer for Aerospace Fighters and Conventional Fighters
- Designer for Small Craft
- Designer for Dropships
- Designer for Jumpships
- Designer for Warships
- Designer for Space Stations
- Designer for Buildings
- Designer for Mobile Structures
- Automatic Update support
- Output record sheets to PDF
- Output to Alpha Strike cards
- Load/Read all canon designs (including full search capabilities, including by weapons loadouts and owned miniature inventory)
- MUL integration
- Links to art, megamek icons, faction/unit logos, etc, all of which can be added to the record sheets
- Support for Strategic Battle Force and ACS
- Force tracker
- Designers can have limits by year, tech rating, technology type, rules level, faction availability, and allow for prototype equipment
- Support for canon and custom integral, with custom always having a note on them so it is obvious
- Pre-existing damage
- Support for atmospheric conditions and scale differences when creating record sheets
- Ability to input damage to units and track them, repair times are calculated.
- Support for quirks
- Support for ALL rules will be implemented, even stuff in various April Fools products (though obviously marked as non-cannon)
- Support for uploading designs to a centeral location, for others to download

- Custom Equipment Types
- Output record sheets to PNG
- Ability to output a TRO format to PDF
- Ability to output a TRO like equipment rulset to PDF (this would include all errata)
- Random Force Generator, with support for RATs from all the books od a more dynamic system
- Random Star System Generator
- Random Scenario Generator
- Take a design, make changes, return the refit level, amount of time it takes, rolls, etc
- Export designs to XML
- Export designs to Text
- Multiple language support (this requires design changes in the app, but languages can be added easily after)
- Option for some of my special rules (mostly alpha strike, things like tracking how some units may only have 1-2 turns of ammo, repair costs, underwater attacks, rocket launchers as an abiliity, and so forth)
- Option to use my own "above alpha strike" system. Essentially AS is now at a 4:1 scale for elements:maneuver units, I'll add support for 12:1, 36:1, and 108:1 (plus clan/wob/CS equivalents) to better support strategic games (ACS is completely broke IMO)

- Designer for Base Layouts
- Illegal Designs
- Output Unit data to Megamek MTF
- Integrated combat simulator (real time battletech with megamek style graphics)
- Support for special pilot abilities
- Inner sphere hex map with factories and planet data
- Designer for A Time of War characters (LOTS of data entry needed, could be a late feature)
- Dynamic record sheets. Basically a record sheet you bring up and can mark damage/crits to instead of using paper.
- Unit availability list. Essentially each element gets a popularity, from 1 to 100, by era, and then random tables can be created dynamically from that.
- Box of Death

- Random unit generator (not sure how well I could do this)
- warchest campaign support
- New unit acquisition
- Support for custom rankings on all units. Think Mech A is the best ever? Give it 10/10, think Mech C is the worst? Give it 1/1. All the users upload that data and when you view mechs, you can also sort by player rank.

- QR Codes on Record Sheets
- Random Map Generator
- Full inner sphere in flames game. I'll have to custom the rules, as published ones won't work at all.
- Export to HeavyMetal Pro (probably end up getting dropped as HMP doesn't support everything, and it may just be a PITA)
- Export to SSW (probably end up getting dropped as SSW doesn't support everything, and it may just be a PITA)
- My own proprietary system to map out entire planets, accurate to the hex, for only a few mb of space.
- Icon Generator (something to make unit icons from Strategic Ops)
- Tables (basically a page to select any of the tables from the game, and press a button to roll on them)
- Custom record sheet designs (this may just happen anyway, depending on how I write the code. The old BTE site EASILY allowed for this, so I'll try to keep that process)
- Color themed record sheets (faction colors?)
- Ability to recolor black and white graphics on images (I did this on the BTE site, I could specify a few colors and the drawings would be recolored, might implement that same thing)
- Integral combat map. Basically draw the game map in the app, and you can use it to track things like doubleblind, building damage, terrain damage, fires, smoke, illum, etc
- Web based version of the product, or perhaps just one published for folks to use on non-windows devices.

- Many unit types have no alpha strike cards. I'll have to design these if CGL doesn't release one.
- Some units don't even have record sheet designs, so again I'll probably have to design these.
- PDF creation can be tricky, I want to find a fast way to do it without any 3rd party libraries, but may be forced to use them.
- I still have a lot of questions on rules and equipment that haven't been answered, these will often result in "bugs".  I'd ask on the forums but....

Monday, September 7, 2015

Back on Track!

Howdy everybody!  Great news!  

I am coding for Battletech again!  After a long hiatus, lots of frustration, many other games, and far too many purchases of Micro-Armor recently, I am going to start coding for Battletech again.

There were a few things that brought me to this:
#1.  I still play Battletech every couple weekends with 8-12 people.  This means I *need* the ability to design a mobile structure, infantry platoon, or support vehicle.  

#2.  There was a thread started a couple weeks ago on the official Battletech forums.  While I can't post over there, it is obvious CGL is back into the "OMG, we can't design stuff because its too hard!" mentality.  A couple years ago, long before I was banned, I was approached by somebody who sent me a copy of an email that Herb had sent out.  Basically he was freaking out about the fact nobody could build things consistently without tons of bugs.  I said I could do it, then basically sent a list of "holes" in their design systems that needed fixing.  I think the list was too long, that was the last I heard from them.   Apparently though they are still just as bad off, which is no surprise, I don't think anybody but myself really understand the scope of a product that can design *everything*.  As far as I know, I'm the only one who has entered in the 120+ pieces of data, per 2200 or so pieces of equipment, that is *required* for construction.  This is on top of 170 or so pieces of data for around 650 unique chassis!  Its just daunting, really.  This is why the HeavyMetal products haven't been updated since Total War, and why I personally don't think they ever will. This is also why no company would want to take this on, as it is minimal profit (if any) and a *HUGE* amount of work.  But anyway.

#3.  I went through and cleaned up years of email in my inbox.  I saw a lot of emails in there from various people who have been interested in my projects over the years.  A lot of good support in there, and it made me feel bad.  As I've mentioned many times, I don't like to let people down, and if 50 people emailed me every day asking for something I could do I'd damned sure get it done because I don't want to let them down.  It isn't like there is much in my life that is all that important (Just the wife/dogs, everything else is transitive).

So, I wrote a few people I knew emails for that were moderators in some form or fashion, but don't expect any replies.  If folks want to pop over to the thread and maybe mention me (though it could get deleted, if history repeats itself) or at least PM Bosefius about me, it could get them on my side.  I  am not sure of the relationships between the moderators and the actual CGL employees, but surely one can trump another.  About 25% of the reason I went to GenCon in 2014 was to talk to Randall and see if he could get me unbanned based on my development skills.  He gave me a card and told me to write him, but was very busy and slammed with fans while there.  I wrote after GenCon, unsurprisingly haven't heard anything.

So, official or not, I'm going to build a designer for *everything* in universe.  I mean *everything*, and yes it'll even be crazy stuff like a character generator for  a time of war (that'll be last though, completely different code set).  I'll do what I can to support importing/exporting to megamek and HMP formats, though no guarantees as both of those formats have some pretty serious flaws.  I'll also be supporting the IO Beta rules, so LAMs and stuff, though until IO is no longer beta those units will be flagged as not-canon.  

So, here is what this downloadable application will design:
- BattleMechs (15-300 tons), 2, 3, or 4 legged, plus LAM/Quad-Vee
- IndustrialMechs (15-300 tons), 2, 3, or 4 legged
- ProtoMechs (3-15 tons)
- Battle Armor
- Conventional Infantry Platoons
- Combat Vehicles (including superheavies, Wheeled, Tracked, VTOL, Hover, WiGE)
- Support Vehicles of all types and sizes (Even things like 100kt naval, satellites, and maglev)
- Aerospace and Conventional Fighters
- Small Craft
- Dropships
- Jumpships
- Space Stations
- Warships
- Mobile Structures
- Buildings
- Integration with the MUL
- Multi-Structure Bases (lower priority)
- Character Generator (lowest priority)
- Application will update itself as necessary, run on Windows, and probably be under 10mb total with no 3rd party application dependencies.

So *everything*.

I am currently planning on supporting the following features, though subject to change:
- Import/Export to MegaMek
- Import/Export to Heavy metal Pro
- Import/Export to Solaris Skunk Werks
- Import/Export to XML
- Import/Export to Text
- Export to HTML
- Export to PDF
- Export to PNG
- Export to a PDF Record Sheet (same format as canon record sheets)
- Custom components
- Printing of record sheets with all environmental considerations applied
- Ability to modify a dynamic record sheet (for the few of you that hate paper)
- Various refit and repair calculations
- A lot of support for campaign games
- Force builder/tracker, including noting which miniatures you own
- Planet/System Generator (pending rules getting published)
- Random unit tables
- Full support for Alpha Strike in every way
- Full support for *ALL* published rules, even the April Fools stuff 
- I plan on including as much support for German as I can, though my google translations may suck and need some typos fixed :)
- When I release this application, I'll kill my engineer site as it will no longer be necessary.  I suck with web code anyway :D

Some things I'm thinking about, but not sure yet:
- Map Maker
- Planet Mapper (stitch maps together, make a planet)
- Combat simulator (think real time megamek, but with any unit types)
- Random unit designer
- Planetary database
- Dynamic system for mech availability that would allow creation of random units based on any era, by denoting how popular a mech is per faction, per era.
- Inner Sphere in Flames, or whatever it is to be called, game.  I can't use current IO Beta stuff though, its very broken and would not allow for recreations of in-universe events (1 planet can make more mech regiments than all of the Capellan Confederation in 3025 could in a single year!).
- Stellar map support.  I kinda already wrote this with my ISMapper thing, but this will be an updated version that is a bit less klunky.

Obstacles I may encounter:
- Hitting a wall with the way certain rules are implemented.  For example humans kind of assume a lot when we are reading about rules.  Computers though, they can't do that.  So I can come across a system that simply has an unknown interaction with another system.  Or worse, and I know I'll encounter this often, many systems are missing certain data or the data is inconsistent.  What is the BV of the Centurion Weapon System from Jihad Hot Spots: Conspiracies?  Does a full head ejection system count as an ejection seat in Alpha Strike?  Can a combat vehicle really have an aerospace cubicle?  Maglev's have no availability or introduction dates!  There are a lot of things like this I'll have to work around, note, and correct whenever I can get an answer.
- Real life.  I can't predict what will happen, but in the past few months I flooded my house, almost died and had to have a surgery to fix what the army screwed up and said was fine 10 years ago, got sick for 2 weeks, had to take a work trip, and various other things that just kill free time.  I'm also a 90% disabled veteran who has all sorts of medical issues that could interfere.
- Project creep.  I will document EVERY feature when I start, and will stick to that list as much as I can.  I will add other things once I get certain portions done so I don't end up with endless project creep (where I never finish as I'm always adding new features).
- hmmm.... actually, I think that is it, everything else with this project is within my capabilities.

I will release beta's once certain portions are finished.  I'll have more info on how to apply when I actually have one.

I'll try to post an update a month, and an update with any significant milestones, but don't hold me too closely to that :)

I need to go architect this out, but I should have some rudimentary screenshots of the interface within a month.  Luckily the *really* time consuming part I have already finished :D

Off to start design work!

If you got this far congratulations, you get a cookie! Ok, no cookie, but I did start a facebook group for kind of a dev diary and a place to discuss features and issues.  I am BadSyntax on facebook, and the group is "Battletech Design Works" though it is currently closed and you have to request access.