What's this?
This is the data repo for the Horus Heresy.
BSData organisation created this project. It's a GitHub repository of datafiles. Maintained by community, in no way endorsed by BattleScribe or any other company/publisher. If you want to develop - cool! We need you! Take a look at our homepage
We strongly recommend you use NewRecruit over Battlescribe, as battlescribe is abandonware.
I found a bug! / I have another request
Great, thank you! Please Report a bug - you can also suggest enhancements and raise other issues there.
We moved it to its own repo. It is no longer maintained.
In general, we remove the "Legion" prefix from units, unless that unit has a non-legion equivalent such as Legion Baneblade
We create a unit entry for each unit, and a model entry within that unit (even if it's a single model unit). This allows us to get an accurate model count and keeps everything consistent.
On UNITS we default them to hidden and add a modifier with constraint to set "Hidden to False" if "Equal to 1 selection in force of <> on". Ensure "And all child selections is checked". On UPGRADES, we default the option to not hidden, and set "Hidden to True" if the "off" condition is selected.
These are requirements on a unit to maintain rites of war:
- Solar Auxillia and Imperialis Militia units need "SA or IM Unit" for rites of war that count that number of units.
-
- Lords of war should be excluded from this as they won't be in the "allied detachment"
A .cattemplate file is a .cat file, renamed to .cattemplate, used by BSCOPY
We used bscopy to copy all 18 legions after implementing the first one. We didn't maintain the template so it's not recommended to re-run bscopy
GitHub actions will load configured lists in tests and ensure they produce the expected outcome. To add a new test:
- Export a roster from NewRecruit or BattleScribe
- Rename that roster from .ros to .test and place it in tests
- Add a new case to tests.py:
def test_NameOfTest(self): self.load_list('Name of Roster file with no extension') errors = self.get_error_list() self.assertEqual(0, len(errors), "This list has validation errors")
- There are other tests, such as checking for points on a specific unit. Look through the code for examples.
- Run the unit tests with python, or create a pull request to have GitHub run them automatically.
- To run them locally, install python and the packages
selenium
andwebdriver-manager
, and Google Chrome.
- To run them locally, install python and the packages
- Horus Heresy: Age of Darkness Rulebook
- Liber Astartes
- Liber Hereticus
- "Both Astartes Army books" refers to the first section of both of the above books, as they are identical
- Liber Mechanicum
- Legacies of The Age of Darkness Legions v1.1 PDF
- Legacies of The Age of Darkness: Mechanicum v1.0 PDF
- Exemplary Battles of Age of Darkness: Unit Update v1.1 PDF
- Exemplary Battles - The Scouring of Gildens Star PDF
- Exemplary Battles in the Age of Darkness: The Battle of Trisolian: Vengeful Spirit
- Exemplary Battles in the Age of Darkness: The Axandrai IV Incident
- Ka'bandha Rules
- Zone Mortalis (White Dwarf 477)
- Warhammer: The Horus Heresy – Age of Darkness Rulebook Errata and FAQ V1.0
- Liber Astartes Errata and FAQ V1.0
- Liber Hereticus Errata and FAQ V1.0
- Liber Mechanicum Errata and FAQ V1.0