5D Diplomacy With Multiversal Time Travel
Go to file
Jaculabilis 158c952b6b Update README with order parsing grammar 2024-08-09 07:13:30 -07:00
.vscode Get nix-ld to work with the Roslyn analyzer 2024-08-08 07:51:08 -07:00
MultiversalDiplomacy Add adjudicate command and implement AdjudicateOrders 2024-08-09 07:13:30 -07:00
MultiversalDiplomacyTests Update projects to dotnet 8 2024-08-09 06:53:22 -07:00
.gitignore Initialize dotnet project 2022-02-12 15:05:12 -08:00
5dplomacy.sln Fix path separator in sln 2022-11-08 22:18:52 -08:00
MDATC.html Create a DATC-inspired document for illustrating time travel test cases 2022-04-22 13:33:17 -07:00
README.md Update README with order parsing grammar 2024-08-09 07:13:30 -07:00
flake.lock Update nixpkgs pin 2024-08-08 07:49:26 -07:00
flake.nix Add repl alias to nix shell 2024-08-09 07:13:24 -07:00

README.md

5D Diplomacy With Multiversal Time Travel

5D Diplomacy with Multiversal Time Travel is a Diplomacy variant that adds multiversal time travel in the style of its namesake, 5D Chess with Multiversal Time Travel.

Acknowledgements

This project was inspired by Oliver Lugg's proof-of-concept version. The implementation is based on the algorithms described by Lucas B. Kruijswijk in the chapter "The Process of Adjudication" found in the Diplomacy Adjudicator Test Cases as well as "The Math of Adjudication". Some of the data model is inspired by that of Martin Bruse's godip.

Variant rules

Multiversal time travel and timeline forks

Diplomacy is played on a single board, on which are placed armies and fleets. Sequential sets of orders modify the positions of these units, changing the board as time progresses. This may be described as something like an "inner" view of a single timeline. Consider instead the view from "above" the timeline, from which each successive state of the game board is comprehended in sequence. From "above", each turn from the beginning of the game to the present can be considered separately. In 5D Diplomacy with Multiversal Time Travel, units moving to another province may also move to another turn, potentially changing the past.

If the outcome of a battle in the past of a timeline is changed by time travel, then the subsequent future will be different. Since the future of the original outcome is already determined, history forks, and the alternate future proceeds in an alternate timeline.

Just as units in Diplomacy may only move to adjacent spaces, units in 5D Diplomacy with Multiversal Time Travel may only move to adjacent times. For the purposes of attacking, supporting, or convoying, turns within one season of each other adjacent. Branching timelines and the timelines they branched off of are adjacent, as well as timelines that branched off of the same turn in the same timeline. A unit cannot move to the province it is currently in, but it can move to the same province in another turn or another timeline.

When a unit changes the outcome of a battle in the past, only the timeline of the battle forks. If an army from one timeline dislodges an army in the past of a second timeline that was supporting a move in a third timeline, an alternate future is created where the army in the second timeline is dislodged. The third timeline does not fork, since the support was given in the original timeline. Similarly, if a unit moves into another timeline and causes a previously-successful move from a third timeline to become a bounce, the destination timeline forks because the outcome of the move changed, but the newly-bounced unit's origin timeline does not fork because the move succeeded in the original timeline.

Sustaining timelines and time centers

Since there are many ways to create new timelines, the game would rapidly expand beyond all comprehension if this were not counterbalanced in some way. This happens during the sustain phase, which occurs after the fall movement and retreat phases and before the winter buid/disband phase.

WIP: the sustain phase has not been implemented yet

Victory conditions

The Great Powers of Europe can only wage multiversal wars because they are lead by extradimensional beings masquerading as human politicians. When a country is eliminated in one timeline, its extradimensional leader is executed, killing them in all timelines.

Unit designations

In Diplomacy, orders refer to provinces by name or abbreviation, such as an order given to "Army Munich" or a build order for "London". In 5D Diplomacy with Multiversal Time Travel, this is insufficient to unambiguously identify a province, since the province exists in multiple timelines across multiple turns. The convention for identifying a multiversal location is timeline:province:turn, where timeline is the timeline's identifier and turn is the turn's identifier. Thus, an army in Munich in timeline "bravo" in Spring 1902 might be referenced as "Army bravo:Munich:Spring 1902" or "A b:Mun:S02" for short.

(Why this order? If timeline and turn identifiers were next to each other, it could be difficult to immediately see which one is the timeline and which one is the turn if both are in a short representation, especially for timelines designated foxtrot or sierra compared to turns designated as being Fall or Spring. 5D Diplomacy with Multiversal Time Travel is already complicated enough, so the timeline and turn are put on either side of the province.)

WIP: parsing of turn designations has not been implemented yet

5dp script

Order notation is case-insensitive.

Order element grammar

Where a unit type is expected, either the full unit type name or a single letter is valid.

 <unit-spec> = <unit-long> / <unit-short>
 <unit-long> = "Army" / "Fleet"
<unit-short> = "A" / "F"

Where a timeline is expected, either the full timeline designation or an initial is valid. An omitted secondary designation is equivalent to a secondary designation of 0.

     <timeline-spec> = <tl-long> / <tl-short>
           <tl-long> = <tl-long-primary> <tl-long-secondary>
   <tl-long-primary> = "alfa" / "bravo" / ...
 <tl-long-secondary> = "" / "prime" / "second" / ...
          <tl-short> = <tl-short-primary> <tl-short-secondary>
  <tl-short-primary> = "a" / "b" / ...
<tl-short-secondary> = "" / "1" / "2" / ...

Where a province is expected, either the province's full name or a known abbreviation is valid. A named location in a province may optionally be specified with either its full name or a known abbreviation. A named location is not necessary for the form of a province to be valid, though an order may be invalid if the omission creates an ambiguity.

 <province-spec> = (<province-long> / <province-short>) ["/" (<location-long> / <location-short>)]
 <province-long> = "Munich" / "Tyrolia" / ...
<province-short> = "MUN" / "TYR" / ...
 <location-long> = "north coast" / "south coast" / ...
<location-short> = "nc" / "sc" / ...

Where a turn is expected, either the full seasonal designation or an abbreviated form is valid.

   <turn-spec> = (<season-long> / <season-short>) [" "] (<year-long> / <year-short>)
 <season-long> = "Spring" / "Fall" / "Winter"
<season-short> = "S" / "F" / "W"
   <year-long> = "1901" / "1902" / ...
  <year-short> = "01" / "02" / ...

A multiversal location is a timeline, a province, and a turn separated by a colon.

<multiverse-spec> = <timeline-spec> ":" <province-spec> ":" <turn-spec>

Thus, the following multiversal locations are equivalent:

  • bravoprime:Irish Sea:Fall 1902
  • b1:IRI:F02
  • bravoprime:IRS:Fall02

Order formats

Note that DATC 4.C makes unit designations superfluous outside some build order cases. Thus, the <unit-spec> is considered optional in the orders below.

Hold orders require the unit and an indication of a hold order.

<hold-order> = [<unit-spec>] <multiverse-spec> <hold-token>
<hold-token> = "hold" / "holds"

Move orders require the unit, target, and an indication of movement instead of support.

<move-order> = [<unit-spec>] <multiverse-spec> <move-token> <multiverse-spec>
<move-token> = "-" / " to "

Support-hold orders require the unit, target, and an indication of support instead of movement.

<support-hold-order> = [<unit-spec>] <multiverse-spec> <support-token> <multiverse-spec>
     <support-token> = " S " / " support " / " supports "

Support-move orders require the unit, target, and the support and move indicators.

<support-move-order> = [<unit-spec>] <multiverse-spec> <support-token> <move-order>

Convoy orders WIP.

Retreat orders WIP.

Build orders WIP.

Disband orders WIP.

Sustain orders WIP.