Support Baron von Powell's 1900 variant #964
johnpooch
started this conversation in
Feature Ideas
Replies: 2 comments
|
There will also need to be some work on the variant creator to support these options. |
0 replies
|
Hello, If needed, I have a SVG version of the map, with layers etc. So this can allow to skip the PNG-to-SVG steps with Claude. Also if it can help, on vDiplomacy you can find the DATC with tests of edge cases coming from the special rules: |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Goal
Add Baron M. Powell's 1900 as a playable variant. 1900 is a Classical-style redraw of Europe and the North African coast for seven powers, but it carries three custom rules the current adjudicator cannot express: the Suez Canal half-strength crossing, the Russian Emergency Measures Rule, and Gibraltar acting as a convoy-capable yet army-occupiable space. Supporting it means adding the variant data plus a small set of generic, reusable adjudicator mechanisms so these rules — and similar mechanics in future variants — are declarative schema features rather than one-off hacks.
Definition of done
1900 is published and plays to Baron Powell's official rules. Concretely:
Context
Most of 1900 is ordinary variant data and needs no adjudicator change — the map, starting units, the victory condition (already handled by
check_for_solo_winnerinservice/victory/utils.py, including the strict-majority tiebreak), and the Egypt/Algeria non-build rule (automatic once neither is declared a home center). Three rules are the real work, and they resolve to two reusable schema loci plus one contained solver change:Suez half-strength lives on the edge, not the province. The same province (Egypt, Mid) is entered at full strength from its normal neighbours and at half strength only across the cape, so the reduced strength attaches to the specific adjacency, not the destination. The generic form is an optional strength attribute on the
Adjacencyschema object (default full), read by the movement strength solver. The solver has no fractional strength today; the intended encoding scales strengths (normal base 2, a half-strength crossing seeds base 1) so every comparison stays integer. This is the one change toservice/adjudicator/resolution.py— the most tightly-guarded module in the engine, whose architectural guide asks for maintainer sign-off before structural changes — so the solver work should be reviewed before it is implemented. The sibling Suez rules (no support across the cape, and the cut-exception) are also edge-level and ride on the same adjacency; the cut-exception reuses machinery the solver already has for DATC 6.D.4.Gibraltar convoy capability lives on the province. Every convoy path-finding step and the convoy-issue check gate on a province being sea (
service/adjudicator/convoy.py,ConvoyerIsInSeaCheckinservice/adjudicator/types.py), so acoastalGibraltar cannot be a convoy link while aseaGibraltar cannot be occupied by an army — neither existing type fits. The generic form is a province-level convoy-node flag consulted by the convoy gates alongside the sea check, leaving occupancy behavior untouched.Russian EMR is expressible as input/output rewriting. When the EMR condition holds, injecting Siberia as a Russia-owned home supply center into the adjudication input produces all three effects — one extra build allowed, Siberia buildable, one fewer required disband — by reusing the existing build, disband, and limit logic unchanged (
NationView.allowed_builds/required_disbands,EnforceBuildLimits), then stripping the phantom center from the output so it never persists or counts toward victory. The rewrite must be conditional on live home-supply-center ownership rather than static variant data, and must not leak the phantom center into stored ownership.The adjudication-modifier system is currently a set of bare string tags with no parameters. The EMR and the edge/province features are parameterized (which nation, which province, which edges), so carrying that metadata will require extending how modifiers or variant data express parameters.
All reactions