(game-module "gettysburg" (title "Gettysburg") (version "0.9") (blurb "The Battle of Gettysburg, 1-3 July 1863") (instructions ( "Most of the brigades are off-board, and will come in a few at a time; " "the Confederates from the north and west, the Federals from the south." "" "You have to try to hold your positions, while at the same time " "charging the enemy." "" "Your artillery can be captured and used against you, so be sure to " "guard it." )) (variants (see-all true) ("Day/Night" day-night true (true (world (day-length 24)))) ) ) (unit-type infantry (image-name "soldier-acw") (description-format (name "'s brigade (" side-name ")")) (help "a single brigade")) (unit-type cavalry (description-format (name "'s cavalry (" side-name ")")) (help "a single brigade, fast but weak")) (unit-type artillery (image-name "cannon") (description-format (name "'s artillery (" side-name ")")) (help "a demi-brigade of cannons, about 20 in all")) (unit-type supply-train (image-name "wagon") (help "the `center' of the army")) (define inf infantry) (define cav cavalry) (define arty artillery) (terrain-type clear (image-name "plains") (char "+")) ;; (should become rough-woods and rough-light-woods) (terrain-type rough (image-name "mountains") (char "^")) (terrain-type light-woods (char "%")) (terrain-type orchard) (terrain-type woods (image-name "forest") (char "%")) (terrain-type town (image-name "urban") (char "G")) (terrain-type stream (image-name "river") (subtype border)) (terrain-type ravine (image-name "cliffs") (subtype border)) (terrain-type trail (image-name "tan") (subtype connection)) (terrain-type road (image-name "dirt-road") (subtype connection)) (table drawable-terrain (t* t* true) ((trail road) town false) ) ;; This covers the gamut of elevations, from the bottom of Rock Creek to ;; the top of Big Round Top. Values are in feet. (add t* elevation-min 250) (add t* elevation-max 700) (add (light-woods orchard woods town) thickness (10 10 20 20)) (set grid-color "gray") ;;; Static relationships. (add t* capacity 3) (table unit-size-in-terrain (u* t* 1) (inf road 10) (supply-train t* 0) ) ;(add u* possible-sides (not "independent")) ;;; Vision. (set terrain-seen true) (add u* vision-range 5) (table vision-night-effect ;; Can only see adjacent units at unit. (u* t* 20) ) (add u* vision-bend 0) (table visibility (u* t* 100) (u* (orchard light-woods town) 50) (u* woods 25) ) (table see-chance (u* u* 100) ) (table see-chance-adjacent ;; This is high so that multiplication with visibility yields ;; at least 100%, so we can always see adjacent units. (u* u* 400) ) (table eye-height ;; Infantry can stand on a fence, cavalry is on horse, ;; artillerists can stand on their cannons to see better. (u* t* 9) ) ;;; Actions. (add u* acp-per-turn (8 16 8 8)) ;; Night shuts things down considerably. (table acp-night-effect ;; 1/4 of normal abilities. (u* t* 25) ;; Infantry in open terrain can still move around somewhat. (infantry clear 50) ;; (should allow movement along roads at normal rate?) ) ;;; Movement. ;; Most units pay a cost to get both in and out of a piece of terrain, ;; defaulting to 1 + 1 = 2. (table mp-to-enter-terrain (u* t* 1) ;; Only infantry can get into rough terrain. (u* rough 99) (inf rough 2) ((cav arty) woods 4) ;; It costs artillery time to cross a stream, but not inf or cav. ((inf cav) stream 0) ;; Ravines are especially difficult, though not impassable. ((cav arty) ravine 2) ((cavalry arty) road 0) ) (table mp-to-leave-terrain (u* t* 1) ;; Only infantry can get out of rough terrain. (u* rough 99) (inf rough 2) ((cav arty) woods 4) ((cavalry arty) road 0) ) (table mp-to-traverse ;; Roads and trails help the movement of mounted and wheeled units. ((arty cavalry) road (2 1)) (supply-train (trail road) (2 1)) ) ;; Everybody has to move carefully when in shooting range of the other ;; side. (table zoc-range (inf inf 2) ) (table mp-to-enter-zoc (inf inf 4) ) (table mp-to-traverse-zoc (inf inf 4) ) ;;; Repair. (table acp-to-repair (supply-train u* 4) ) (table hp-per-repair (supply-train u* 2) ) ;;; Combat. (add u* hp-max 8) (table acp-to-attack (u* u* 4) ;; Artillery is numerically too weak to engage in assaults. (arty u* 0) (supply-train u* 0) ) (table acp-to-defend (u* u* 4)) (table hit-chance (u* u* 50) (inf u* (50 40 80 90)) (cav u* (40 30 50 90)) (supply-train u* 0) ) (table damage (u* u* 1d3) (supply-train u* 0) ) (table withdraw-chance-per-attack ;; Lots of running away in this era. (inf u* (30 50 10 10)) (cav u* (40 20 10 10)) ) (add arty range 5) ; (5 or 3 - need two types?) (add arty acp-to-fire 8) (table weapon-height (arty t* 4) ) (table capture-chance ;; Infantry can capture the artillery. (infantry arty 30) ) (table stack-protection ;; Artillery stacked with infantry can't be attacked or captured. ((infantry cavalry) arty 0) ) ;; Everybody bounces back over time. (add u* hp-recovery 0.25) ;;; The world. (world 125000 (axial-tilt 22)) (area 50 36 (cell-width 1000)) (area (terrain "50a" "aea2e5ae5a2e3ae9ae18a" "ae8a2e5aea2e2ae7ae18a" "9aeae5ae2ae2ae7ae18a" "10ae39a" "4ae23ae2ae4ae13a" "13ad6ae8a3e4ae13a" "ae4a2e5aed5ae3ae25a" "ae12ae6ae3ad6a2e3ad12a" "ae2ae2ae2ae3ae12a2e4ae16a" "5aeae2aea2ead11a2e21a" "10aead2ae2a3f6a3e8ae3ae7a" "3ae3ae2a2e4ae2a2fe5a3e8a2e3ae6a" "aeae3ae3ae4ae10a2e6ae2a3e3ae5a" "aea2e2a2e2aead3ad6ae2a2ead4ae7a3e4a" "2ae6a2e2ad3ae6a2ea3e15ae4a" "2a2e4ad4ae3ae6a3ea3e19a" "14ae2ae3ac4aea3eae10ae6a" "15a3e5aea7ea2e6ae2a3ed2a" "13ad2aeae5ae2a2ea2e2ae3a4e8a" "12a2e3ae13ae10ae7a" "11ae2ae2ae2ad3aea2eae3ae16a" "7a2e2aea3e2ae10ae3ae5ae10a" "7a2e2ae7a2d3a2e3ae3ae4a3e7aea" "8a2e14a3ea3e10aead3a2ea" "9a2e3aeaea2ead2e5a3eae14aea" "10ae3aeae3ae2ae3c6ae8a3e3aea" "14ae6ae2ae2c7aeae5ac3e4a" "21ae2a4e6ae9a2c4a" "21ad6e22a" "18a3e2a5e9ae2a3e2ad4a" "19ae4a2e2aead10a3e2ad3a" "18a3e7a2e20a" "19a2e3a3ea2e20a" "25a2e2ae3ae3ae3a3e6a" "50a" )) (area (aux-terrain stream "50a" "6agq7acy33a" "6agL8ahq32a" "6acT8agL32a" "7ahq7acXi31a" "7acXi7ab?y30a" "8ab?y8ahq29a" "10ahq7acT29a" "10acT8ap}4aem22a" "11ady7adU<3agM<21a" "12ahq7ady3agL22a" "12agL8ahq2agL22a" "12agL8acT2agL22a" "ai10agL9adyagL22a" "ady9agL10adygL22a" "2ad}mi6agL11ad:L22a" "3ab=?y5acT12ahL22a" "6ady5ahq11agL22a" "7ahq4agL11acT22a" "6aeoL4agL12ady21a" "6acU<4acTgq11ady20a" "7ady5ahwL12ady19a" "8ad}mi2acZL13ady18a" "9ab=?y2ahL14ahq17a" "12ad}igL14acT17a" "13abCwL15ahqae14a" "14agNT15acXicT13a" "14agLhq14aenKqhq12a" "14acTgL15a?YDgL12a" "15ad:T16abC:L12a" "16ab?y12ac}2moM<12a" "18ahq12ab=CYH2m11a" "18agL14acU3=<10a" "18agL15ady13a" "18acL16adq12a" "50a" )) (area (aux-terrain ravine "50a" "7agq41a" "7agL14ai26a" "7acT14ad}3agq20a" "8ahq14ab<3a<20a" "9a<40a" "50a" "50a" "50a" "35ai14a" "35ady13a" "34agqdy12a" "18ae15agLab12a" "18agL14agL14a" "18agL14acL14a" "18agL30a" "19a<14agq14a" "34agL4ae9a" "34agL4acL8a" "34acT4ae9a" "35ahqeiaoL8a" "35agLgMab<8a" "36au27a" "23a@3ac}21a" "24a@3aj>u19a" "25a>uaj2a>u17a" "27a@j4a@4ai11a" "28aE5a@3aj11a" "27akr6a@2aj11a" "27aj8a@aj11a" "27aj9a@j11a" "18ai8af10aE11a" "18aj9aD9aj11a" "18aj9aj9aj11a" "18ab9aj9aj11a" "28af9aj11a" "7ae21aD8af11a" "8aD20aj9aD10a" "8af20aj9aj10a" "9aD18akr9aj10a" "9af18aj10aj10a" "10a>u12ak3sv10aj10a" "12a@7acu2aj4aD9af10a" "13a>s2{su3a>uj4an10aD9a" "15a2j2a>q3a?suakr@6ai2aj9a" "15a2f10a>r2a@5aj2aj9a" "16a2D9acsu2a@4aj2ab9a" "16a2j12a>ua@3aj12a" "16ajn14a>sP2aj12a" "14acstr@2ae13a>wr12a" "19a@2a@14a@12a" "20a@2a@7aksu4aD11a" "21a<2a>6sr2a>3sr11a" "50a" "50a" )) (area (aux-terrain road "50a" "7ae4ae2ai3ai10aksq17a" "8a>u3a@aj3aj8aksr19a" "acu7a@3a@f3aj7akr21a" "3a>u6a@3a@D2aj5aksr22a" "5a>u5a>u2aE2aj4akr24a" "7a>u5a@af2aj4aj25a" "9a>u4a@aDaj3akr25a" "11a>u3a@faj2akr26a" "13a>u2a@Djakr27a" "15a>uaAnkr28a" "17a>q=?2su26a" "15ak3syi3a>su23a" "13aksr3a2f6a>su20a" "12akr6aDH8a>3su15a" "10aksr7apr@12a>3su10a" "8aksr9aj@a@16a>2su6a" "6aksr11ajaDa@19a>3sqa" "4aksr13ajaf2a@24a" "3acr15aj2a@2a@23a" "20aj3a@2a@22a" "20aj4aD2a>su19a" "20aj4af5a@18a" "20aj5aD5a>u16a" "20aj5af7a>u14a" "20af6aD8a>u12a" "21aD5aj10a>u10a" "21aj5af12a>u8a" "21aj6a@13a>u6a" "21aj7aD14a>u4a" "21aj7af16a>u2a" "21aj8aD17a