Coder Social home page Coder Social logo

hereistand's Introduction

Here I Stand metadata

Here I Stand: Wars of the Reformation 1517-1555 is a board game about the political and religious conflicts of 16th century Europe.

Various virtual implementations exist; I know of ones for Vassal, Wargameroom, and several for Tabletop Simulator.

In working on my own extension to an existing Tabletop Simulator mod, I wanted to create a programmatic model of all the spaces on the board. I was unable to find an existing data set for this that was not tangled up with the details of the other implementations. So I have created my own, available here, and I have endeavoured to make it:

  • Free of error (by use of automatic validation to catch mistakes I made during manual transcription)
  • Easily consumable by others (currently in CSV and JSON formats, but let me know if you need something else. Also, it is released under a permissive licence.)

How to use

Downloads

Depending on your browser you may have to right-click and select "Save Link As" or similar.

  • spaces.csv. A spreadsheet of all the spaces on the board, as well as what type of space they are and who the home power is. Sea zones are included with type "sea".
  • connections.csv. A spreadsheet of all the connections between spaces, between ports and sea zones, and between adjacent sea zones.
  • spaces.json. A JSON file that contains all all the information from both CSV files in an hierarchical structure. It consists of a list of 'space' objects, with associated metadata (space type, home power). Each space contains a list of all outgoing connections, including adjacent sea zones for ports. Sea zones are included as spaces with type "sea".

Reciprocal connections

All connections on the board are represented twice. If Stirling has a connection to Edinburgh then two entries appear in connections.csv (and likewise in the JSON file): one linking Stirling to Edinburgh, and one linking Edinburgh to Stirling.

Space types

These are 'normal', 'fortress', 'key', 'capital', 'electorate', and 'sea'. A normal space is represented as a circle on the game board. Sea zones have type 'sea'. Note that a capital is always a key.

Home powers

These appear in the files like so:

england
protestant
scotland
france
papacy 
hapsburg
hapsburg/ottoman
ottoman
hungary
genoa
venice
independent
sea

Sea zones are listed with 'sea' as their home power. Oran and Tripoli are listed as 'hapsburg/ottoman' to show their switching allegiance after the Barbary Pirates even has been played. Algiers is simply listed as 'ottoman', as it is not in play until that event is played, and when it does come into play it is always Ottoman.

Connection types

These are 'normal', 'pass', 'port', and 'sea'. 'Normal' and 'pass' should be self explanatory to anyone familiar with the game. If a space is a port, then a connection is listed with type 'port' linking the space and the sea zone. If a sea zone is adjacent to another this is also listed as a connection, this time with type 'sea'.

Validation and generation

The CSV files were written by hand.

The python scripts included in this repository show how I validated the CSV files and generated the JSON, and allow others to extend the validation or add more target formats.

To run them yourself, run process.py. Learning how to run Python programs is beyond the scope of this README.

Validation

  • I check to make sure there is no duplication of spaces and connections
  • Space types, connection types and home powers are checked to ensure the values are one of the ones listed above. Additionally, I check that only sea zones use the special home power of "sea".
  • I check that all the connections refer to spaces that exist in the space list, and that all connections are reciprocal. For reciprocal connections, I additionally check that they are of the same type (so not a normal connection one way and a pass the other).
  • I check that connections between land spaces and sea zones are always ports, and that connections between adjacent sea zones are always of type 'sea'.

Generation

The JSON file is generated with pretty printing on, so it could be compressed substantially.

hereistand's People

Contributors

martineden avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.