News:

For the most up to date reports about what is going on with the forum, and the latest topics of interest, throw us a like on Facebook, and if you're wanting some light banter with the seasoned and spiced members, join the Second Sphere Members Group.

Main Menu

Army List Editor Production Log (ALEP)

Started by Sorck, September 09, 2014, 12:13:37 AM

Previous topic - Next topic

Sorck

Well I'm going to try and catalogue what I do as part of this project here... it doesn't normally work out but hey, I can try again and one day I may succeed. :P

This time around the Army List Editor (henceforth ALE) will not do much talking with the 2S servers. In fact, it's being designed so it doesn't need a remote server at all - i.e. so you can load the editor (download the needed files first) and then you can "open" a file off of your local disk and then also "save" back to your local disk. If you need to then it will offer a method of syncing your army list with the Second Sphere servers. Whether the system will automatically try and sync with 2S, or it will primarily base itself on local files is another story. I'll decide whilst I code...

.ale files
In order to allow the ability to download files we need a file format. I am, rather unimaginatively, going to use the extension .ale for the files produced by the ALE. These files are inspired by the Microsoft OpenXML files... though we're not following their definitions literally. This format should allow a .ale file to also contain extra information such as army definitions. You could also import these files into another application that supported our format.

Army Definitions
When you used the old ALE you would create an army list which would be associated with a given army (say Orks) and you would then be presented with a number of units when you clicked "add unit" e.g. Warboss, Big Mek, Grotsnik etc. These lists could become out of date or may have missed a unit. It was probably annoying if you couldn't add a new unit. Our way of dealing with this is allowing you to create your own "army definitions" which list  properties such as which section of the army the unit belongs to (HQ/Troops/Rare etc), possible unit types (winged, beast, jump infantry etc) and, of course, the unit "title".

Custom Game Systems
Although we will maintain an 'official' 40k and WHFB system, we want you to use our editor for all kinds of lists and rosters. To this end we will allow you to write your own game system definitions - these will include what sections exist in an army (HQ/Elites/Troops/FA/HS for standard 40k old edition), unit types in the game system (infantry, jump infantry, monstrous creature etc) and possibly other information that may be pertinent - suggestions welcome.

To be continued...
I'll finish writing this up when I've had my nap.

Narric


Sorck

Feel free to suggest better names...

Rosters
I have decided that we need some better terminology in order to define parts of your 'army list'. A roster is your entire 'list'. It might be your 400 point Eldar combat patrol army or it might be your 4000 point force IG army with SM allies using two detachments (2 full FOCs of IG and 2 Allied FOCs of SM).

Detachment
A detachment is a single Force Organisation Chart, in many cases your roster will contain only one detachment for various reasons (e.g. being in a game system where you don't have detachments, or you use a 40k army with no allies). A detachment is tagged as being from a single army.

Section
A section is a sub-category of a detachment. This is HQ/Elites/Troops/FA/HS for 40k.



Small doses of extra information and it will eventually be worth something. :P

Narric

Quick idea. As some people would be "Adding" their own game systems to the list, would these additions be shared amongst everybodies copy of the editor?

So say I input the skeleton of a roster for Void, and this allows people afterwards to use the same Roster. And of course if someone inputs the skeleton for Infinity/Malifuax/Warmachine, I see that as a valid framework to work around.

Make sense?

InsaneTD

#4
Why is this in here and not comments and suggestions?



Edit, you should of deleted this post when your moved the thread.

Sorck

Quote from: Narric on September 09, 2014, 11:15:14 PM
Quick idea. As some people would be "Adding" their own game systems to the list, would these additions be shared amongst everybodies copy of the editor?

So say I input the skeleton of a roster for Void, and this allows people afterwards to use the same Roster. And of course if someone inputs the skeleton for Infinity/Malifuax/Warmachine, I see that as a valid framework to work around.

Make sense?
The idea would be that it would be possible to share a game system definition through some method. This could either be done by exporting the file, or sharing it using the 2S servers (we might have it so that you can tick a box which makes the game system definition you've made searchable on a 2S template library of sorts).

Quote from: InsaneTD on September 10, 2014, 03:00:42 AM
Why is this in here and not comments and suggestions?
:shifty:

Narric

Quote from: InsaneTD on September 10, 2014, 03:00:42 AM
Why is this in here and not comments and suggestions?
What are you talking about, its always been in the CS&T board :P

Quote from: Sorck on September 10, 2014, 10:47:45 AM
Quote from: Narric on September 09, 2014, 11:15:14 PM
Quick idea. As some people would be "Adding" their own game systems to the list, would these additions be shared amongst everybodies copy of the editor?

So say I input the skeleton of a roster for Void, and this allows people afterwards to use the same Roster. And of course if someone inputs the skeleton for Infinity/Malifuax/Warmachine, I see that as a valid framework to work around.

Make sense?
The idea would be that it would be possible to share a game system definition through some method. This could either be done by exporting the file, or sharing it using the 2S servers (we might have it so that you can tick a box which makes the game system definition you've made searchable on a 2S template library of sorts).
That sounds cool :) I approve :P

Sorck

Attached is an example of how the army list editor may look (shown on a 720p Android device).

The Guard and Sanguinary Allies tabs each contain a list of units that are in those army lists. You can search for specific units using the search box and, if it were a functioning system, you'd be able to download your army list from the editor in either our custom .ale file format or as a formatted PDF.

Ignore the 'Create Message' button... that's not supposed to be there. :P Also, the insert tab isn't used at all because there aren't enough buttons to warrant it's use. The file tab is just for show as well.

Sorck

#8
Here's a prototype army list editor file... this one only specifies the structure of a Blood Angels force (and the required other 40k information such as unit types and basic FOCs).

The code section shows the file contents of BloodAngels.json.

{
"schema": "http://schema.lan/2014/09/ale-json.html",
"gameSystems": [
{
"name": "Warhammer 40,000",
"focCharts": [
{
"name": "Standard",
"sections": [
{ "section": "HQ", "min": 1, "max": 2 },
{ "section": "Elites", "min": 0, "max": 3 },
{ "section": "Troops", "min": 2, "max": 6 },
{ "section": "Fast Attack", "min": 0, "max": 3 },
{ "section": "Heavy Support", "min": 0, "max": 3 }
]
},
{
"name": "Allies",
"sections": [
{ "section": "HQ", "min": 1, "max": 1 },
{ "section": "Elites", "min": 0, "max": 1 },
{ "section": "Troops", "min": 1, "max": 2 },
{ "section": "Fast Attack", "min": 0, "max": 1 },
{ "section": "Heavy Support", "min": 0, "max": 1 }
]
}
],
"unitTypes": {
"Infantry": [],
"Jump Infantry": [],
"Vehicle": ["Walker", "Fast", "Tank", "Skimmer", "Open-topped"],
"Monstrous Creature": ["Flying"],
"Beast": [],
"Bikes": [],
"Jetbikes": []
}
}
],
"armyBook": {
"name": "Blood Angels",
"gameSystem": "Warhammer 40,000",
"groupMacros": {
"lightTransports": [
{"name":"Rhino","min":0,"max":1},
{"name":"Razorback","min":0,"max":1},
{"name":"Drop Pod","min":0,"max":1}
],
"heavyTransports": [
{"name":"Land Raider","min":0,"max":1},
{"name":"Land Raider Crusader","min":0,"max":1},
{"name":"Land Raider Redeemer","min":0,"max":1}
]
},
"units": [
{ "name": "Commander Dante", "section": "HQ", "type": "Jump Infantry", "unique": true,
"children": [{"name": "Honour Guard", "min": 0, "max": 1}] },
{ "name": "Chapter Master Gabriel Seth", "section": "HQ", "type": "Infantry", "unique": true,
"children": [{"name": "Honour Guard", "min": 0, "max": 1}] },
{ "name": "Astorath the Grim", "section": "HQ", "type": "Jump Infantry", "unique": true,
"children": [{"name": "Honour Guard", "min": 0, "max": 1}] },
{ "name": "The Sanguinor, Example of the Host", "section": "HQ", "type": "Jump Infantry", "unique": true,
"children": [{"name": "Honour Guard", "min": 0, "max": 1}] },
{ "name": "Mephitson, Lord of Death", "section": "HQ", "type": "Infantry", "unique": true,
"children": [{"name": "Honour Guard", "min": 0, "max": 1}] },
{ "name": "Captain Tycho", "section": "HQ", "type": "Infantry", "unique": true,
"children": [{"name": "Honour Guard", "min": 0, "max": 1}] },
{ "name": "Librarian", "section": "HQ", "type": "Infantry", "types": ["Infantry", "Jump Infantry", "Bikes"] ,
"children": [{"name": "Honour Guard", "min": 0, "max": 1}] },
{ "name": "Reclusiarch", "section": "HQ", "type": "Infantry", "types": ["Infantry", "Jump Infantry", "Bikes"],
"children": [{"name": "Honour Guard", "min": 0, "max": 1}] },
{ "name": "Captain", "section": "HQ", "type": "Infantry", "types": ["Infantry", "Jump Infantry", "Bikes"],
"children": [{"name": "Honour Guard", "min": 0, "max": 1}] },
{ "name": "Honour Guard", "type": "Infantry", "types": ["Infantry", "Jump Infantry"], "children": "groupMacros(['lightTransports','heavyTransports'])" },
{ "name": "Chaplain", "section": "Elites", "type": "Infantry", "types": ["Infantry", "Jump Infantry", "Bikes"] },
{ "name": "Sanguinary Guard", "section": "Elites", "type": "Jump Infantry" },
{ "name": "Furioso Dreadnought", "section": "Elites", "type": "Vehicle", "subTypes": ["Walker"],
"transportSize": 10, "children": [{"name":"Drop Pod","min":0,"max":1}] },
{ "name": "Terminator Squad", "section": "Elites", "type": "Infantry", "children": "groupMacros('heavyTransports')",
"transportSize": 2 },
{ "name": "Terminator Assault Squad", "section": "Elites", "type": "Infantry", "children": "groupMacros('heavyTransports')" },
{ "name": "Techmarine", "section": "Elites", "type": "Infantry" },
{ "name": "Sternguard Veteran Squad", "section": "Elites", "type": "Infantry", "children": "groupMacros(['lightTransports','heavyTransports'])" },
{ "name": "Sanguinary Priests", "section": "Elites",
"children": [{"name": "Sanguinary Priest", "min": 1, "max": 3}] },
{ "name": "Sanguinary Priest", "section": "Sanguinary Priests", "type": "Infantry",
"types": ["Infantry", "Jump Infantry", "Bikes"] },
{ "name": "Tactical Squad", "section": "Troops", "type": "Infantry", "children": "groupMacros(['lightTransports','heavyTransports'])" },
{ "name": "Death Company", "section": "Troops", "type": "Infantry", "types": ["Infantry", "Jump Infantry"],
"min": 0, "max": "[1,100][army.has('Astorath the Grim')]", "children": "groupMacros(['lightTransports','heavyTransports'])" },
{ "name": "Death Company Dreadnoughts", "section": "Troops", "type": "Vehicle", "subTypes": ["Walker"],
"min": 0, "max": "army.numberOf('Death Company')", "transportSize": 10, "children": [{"name":"Drop Pod","min":0,"max":1}] },
{ "name": "Assault Squad", "section": "Troops", "type": "Jump Infantry", "types": ["Infantry", "Jumpy Infantry"],
"children": "groupMacros(['lightTransports','heavyTransports'])" },
{ "name": "Vanguard Veteran Squad", "section": "Fast Attack", "type": "Jump Infantry", "types": ["Infantry", "Jump Infantry"],
"children": "groupMacros(['lightTransports','heavyTransports'])" },
{ "name": "Land Speeder Squadron", "section": "Fast Attack", "type": "Vehicle", "subTypes": ["Fast", "Skimmer"] },
{ "name": "Baal Predator", "section": "Fast Attack", "type": "Vehicle", "subTypes": ["Fast", "Tank"] },
{ "name": "Attack Bike Squad", "section": "Fast Attack", "type": "Bikes" },
{ "name": "Bike Squad", "section": "Fast Attack", "type": "Bikes" },
{ "name": "Scout Bike Squad", "section": "Fast Attack", "type": "Bikes" },
{ "name": "Dreadnought", "section": "Heavy Support", "type": "Vehicle", "subTypes": ["Walker"],
"transportSize": 10, "children": [{"name":"Drop Pod","min":0,"max":1}] },
{ "name": "Stormraven Gunship", "section": "Heavy Support", "type": "Vehicle", "subTypes": ["Fast", "Skimmer"] },
{ "name": "Predator", "section": "Heavy Support", "type": "Vehicle", "subTypes": ["Fast", "Tank"] },
{ "name": "Devastator Squad", "section": "Heavy Support", "type": "Infantry", "children": "groupMacros(['lightTransports','heavyTransports'])" },
{ "name": "Vindicator", "section": "Heavy Support", "type": "Vehicle", "subTypes": ["Fast", "Tank"] },
{ "name": "Whirlwind", "section": "Heavy Support", "type": "Vehicle", "subTypes": ["Fast", "Tank"] },
{ "name": "Rhino", "type": "Vehicle", "subTypes": ["Fast", "Tank"], "capacity": 10 },
{ "name": "Razorback", "type": "Vehicle", "subTypes": ["Fast", "Tank"], "capacity": 6 },
{ "name": "Drop Pod", "type": "Vehicle", "subTypes": ["Open-topped"], "capacity": 10 },
{ "name": "Land Raider", "type": "Vehicle", "subTypes": ["Tank"], "capacity": 10 },
{ "name": "Land Raider Crusader", "type": "Vehicle", "subTypes": ["Tank"], "capacity": 16 },
{ "name": "Land Raider Redeemer", "type": "Vehicle", "subTypes": ["Tank"], "capacity": 12 }
]
}
}


It may be difficult to read if you don't understand JSON. However, it shouldn't be too difficult to pick up. Basically the file starts by defining how 40k works. It says that there's a standard and allies FOC available to use and that there are a number of unit types available (this list isn't actually full but is enough for Blood Angels). This is, I believe, enough to describe how 40k works. The file then defines an army book - in this case Blood Angels. The two "macros" are experimental things that are used to make the rest of the list quicker to type and a bit smaller... so they may not make it into the final file format. They are basically lists of transport vehicles so I need not repeat them multiple times in the list.

The unit definitions here are much more complex than in the old editor - we used to say a unit belonged to an army list section and had a name. Now we give a default section, the default type of unit, additional types (for vehicles) and optional types (e.g. Jump Infantry if you upgrade a captain with a jump pack). If a unit is unique the editor should not allow you to include it twice in a roster. The children of a unit are a useful idea - it says which units are in effect a child of the current unit. For example, a rhino can be a child of a tactical squad - the rhino doesn't take up an FOC slot but still requires the tactical squad to remain in the army. This is especially useful for units such as Imperial Guard Platoons as these need a container unit but a lot of children. This will allow the editor to accurately monitor the number of used army sections (HQ/Elites/etc). Also, children can have minimum and maximum requirements - e.g. a tactical squad can have 0-1 rhinos whilst a IG platoon can have 2-5 infantry squads. Unfortunately the current system would let you have both a rhino and drop pod - I'm not quite sure how to fix this unless I only allow one transport but this may be allowed in some game systems. This could potentially be solved by having a "maxTransports" toggle in the army definition. (A unit is a transport if it has a "capacity" entry).

NB: if a unit has no section then it can *only* be added as a child unit. For technical reasons, you should be able to override a unit section (as long as it had one to start with) in case things such as Dante allow you to have differently placed Sanguinary Guard (troops not elites) or similar circumstances. If you validate your army list it should warn you about any overrides that cause your list not to follow the army definition file.

Hopefully I can push out something in the next couple of days to allow you to edit army definition files.

Narric

Sounds good so far Sorck. Looking forward to the open Beta :)

Sorck

Here are a couple of screenshots showing some basic pages from the editor.

I'm hoping to upload a demo version over the weekend which will allow you to start putting together the "army definitions" - i.e. lists of what units are available in an army along with important information such as unit types, subtypes*, optional types, whether it's a transport vehicle etc. At some point, hopefully not too long afterwards, I'll be completing the actual roster editor to allow you to write your own army lists.

* It occurs to me that you can't manually add subtypes and, to be honest, they are a slightly more complex component to add by software than other things. I will include instructions on manually adding them by manually modifying the ALE files.

Narric


Sorck

The first part of the release is nearly ready. I'm mainly cleaning up interface pieces now (though a couple of bits of functionality are currently missing).

Alpha 1 is not "cloud enabled" so you can't save to 2S using it (it's on the to do list) but you can download a file with your data on it - you could share this file with other people by the attachment feature on forum posts. Also, you can't create a roster in alpha 1 but you can define armys. I.e. you can create a codex with unit details but you can't actually write your roster. My hope is that people will write up a few codices into the system before the rest of the system is released.

-Sorck

Narric

I've got a couple Codexi to hand :P I guess I know what tedious little bit fo work I could be doing :P

Sorck

The first preview is here:
http://secondsphere.org/ale

Save to 2S is available ahead of schedule. However, you only get one file at the moment and you have to manually save the file (look at the bottom of the editor). If you load the editor before you  lose a web connection you can continue to edit but you won't be able to save to 2S. However, you can export the file and then manually load it into the editor later on.
Also, don't add excess armies as you can't delete them yet. :P
And you can't edit things. Most data items are small so deleting and re-creating things is often the easy way to do things.

NB: You can't currently add/edit rosters...

-Sorck