diff options
-rw-r--r-- | README | 3 | ||||
-rw-r--r-- | about.html | 21 | ||||
-rw-r--r-- | cover.1x.jpg | bin | 0 -> 28162 bytes | |||
-rw-r--r-- | cover.2x.jpg | bin | 0 -> 96136 bytes | |||
-rw-r--r-- | cover.png | bin | 0 -> 208551 bytes | |||
-rw-r--r-- | create.html | 0 | ||||
-rw-r--r-- | play.html | 109 | ||||
-rw-r--r-- | rules.js | 55 | ||||
-rw-r--r-- | thumbnail.jpg | bin | 0 -> 16465 bytes | |||
-rw-r--r-- | title.sql | 1 |
10 files changed, 189 insertions, 0 deletions
@@ -0,0 +1,3 @@ +This game is implemented with the generous permission of Fort Circle Games. + +Rules and art assets are Copyright 2022 Fort Circle Games. diff --git a/about.html b/about.html new file mode 100644 index 0000000..2687996 --- /dev/null +++ b/about.html @@ -0,0 +1,21 @@ +<p> +Votes for Women is a card-driven game covering the American women's suffrage +movement from 1848-1920, culminating with the ratification (or rejection) of +the Nineteenth Amendment. + +<p> +To win, the Suffragist player must have Congress pass the proposed Amendment +and then have three-fourths of the states (36 of the then 48 states) ratify the +Amendment. The Opposition player wins by either preventing Congress from +passing the proposed Amendment or by having 13 states reject the Amendment. + +<p> +Designer: Tory Brown. +<br>Publisher: Fort Circle Games. +<br>Programming: Mischa Untaga. + +<ul> +<li><a href="/votes-for-women/info/rules.html">Rules of the Game</a> +<li><a href="/votes-for-women/info/history.html">Historical Supplement</a> +<li><a href="/votes-for-women/info/cards.html">Card Gallery</a> +</ul> diff --git a/cover.1x.jpg b/cover.1x.jpg Binary files differnew file mode 100644 index 0000000..727fb68 --- /dev/null +++ b/cover.1x.jpg diff --git a/cover.2x.jpg b/cover.2x.jpg Binary files differnew file mode 100644 index 0000000..0d50825 --- /dev/null +++ b/cover.2x.jpg diff --git a/cover.png b/cover.png Binary files differnew file mode 100644 index 0000000..d6b6fd5 --- /dev/null +++ b/cover.png diff --git a/create.html b/create.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/create.html diff --git a/play.html b/play.html new file mode 100644 index 0000000..4721946 --- /dev/null +++ b/play.html @@ -0,0 +1,109 @@ +<!DOCTYPE html> +<!-- vim:set nowrap: --> +<html> +<head> +<meta name="viewport" content="width=device-width, height=device-height, user-scalable=no, interactive-widget=resizes-content, viewport-fit=cover"> +<meta name="theme-color" content="#444"> +<meta charset="UTF-8"> +<title>VOTES FOR WOMEN</title> +<link rel="icon" href="Flag_of_Tripoli_18th_century.svg"> +<link rel="stylesheet" href="/fonts/fonts.css"> +<link rel="stylesheet" href="/common/client.css"> +<script defer src="/common/client.js"></script> +<script defer src="play.js"></script> +<style> + +main { + background-color: slategray; +} + +#mapwrap { + width: 2200px; + height: 1700px; + box-shadow: 0 1px 8px #0008; +} + +#map { + width: 2200px; + height: 1700px; + background-color: #f0e7d0; + background-image: url(map.webp); +} + +#map-texture { + position: absolute; + width: 2200px; + height: 1700px; + background-image: url(map-texture.jpg); + mix-blend-mode: multiply; +} + +</style> +</head> +<body> + +<div id="tooltip" class="card"></div> + +<menu id="popup"> + <li class="title">TITLE + <li class="separator"> + <li data-action="card_event"> 🎴 Event +</menu> + +<header> + <div id="toolbar"> + <details> + <summary><img src="/images/cog.svg"></summary> + <menu> + <li><a href="info/rules.html" target="_blank">Rules</a> + <li><a href="info/history.html" target="_blank">History</a> + <li><a href="info/cards.html" target="_blank">Cards</a> + <li class="resign separator"> + <li class="resign" onclick="confirm_resign()">Resign + </menu> + </details> + </div> +</header> + +<aside> + <div id="roles"> + <div class="role" id="role_Suffragist"> + <div class="role_name"> + Suffragist + <div class="role_user">-</div> + </div> + </div> + <div class="role" id="role_Opposition"> + <div class="role_name"> + Opposition + <div class="role_user">-</div> + </div> + </div> + <div class="card_info"></div></div> + </div> + <div id="log"></div> +</aside> + +<main data-min-zoom="0.75" data-max-zoom="1.5" onclick="hide_popup_menu()"> + + <div id="map"> + + <svg id="svgmap" width="2200px" height="1700px" viewBox="0 0 2200 1700"> + </svg> + + <div id="pieces"> + </div> + + </div> + + <div id="hand" class="hand"> + </div> + + <br><br><br> + <br><br><br> + +</main> + +<footer id="status"></footer> + +</body> diff --git a/rules.js b/rules.js new file mode 100644 index 0000000..3486699 --- /dev/null +++ b/rules.js @@ -0,0 +1,55 @@ +"use strict" + +var game +var view +var states + +const SUF = "Suffragist" +const OPP = "Opposition" + +exports.scenarios = [ "Standard" ] +exports.roles = [ SUF, OPP ] + +exports.setup = function (seed, scenario, options) { + game = { + seed: seed, + log: [], + undo: [], + active: null, + state: null, + } + return game +} + +exports.action = function (state, current, action, arg) { + game = state + let S = states[game.state] + if (action in S) + S[action](arg, current) + else + throw new Error("Invalid action: " + action) + return game +} + +exports.resign = function (state, current) { + game = state + if (game.state !== "game_over") { + if (current === SUF) + goto_game_over(OPP, "Suffragist resigned.") + if (current === OPP) + goto_game_over(SUF, "Opposition resigned.") + } + return game +} + +exports.view = function(state, current) { + game = state + + let view = { + log: game.log, + prompt: null, + actions: null, + } + + return view +} diff --git a/thumbnail.jpg b/thumbnail.jpg Binary files differnew file mode 100644 index 0000000..55b2a93 --- /dev/null +++ b/thumbnail.jpg diff --git a/title.sql b/title.sql new file mode 100644 index 0000000..dab8f33 --- /dev/null +++ b/title.sql @@ -0,0 +1 @@ +insert or replace into titles ( title_id, title_name, bgg ) values ( 'votes-for-women', 'Votes for Women', 311900 ); |