diff options
author | Tor Andersson <tor@ccxvii.net> | 2025-02-09 11:19:25 +0100 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2025-02-09 12:13:54 +0100 |
commit | 5ee57d1a8ef1bcb5e228b171016626a9f7c10f71 (patch) | |
tree | c379e8d6a930321e81fd3ad144294b701d02f21a /rules.js | |
parent | 423c8b68dd1213939dc3591b28a7f08ab56ae78d (diff) | |
download | crusader-rex-5ee57d1a8ef1bcb5e228b171016626a9f7c10f71.tar.gz |
Add handicap scenarios to adjust initial draws.
Diffstat (limited to 'rules.js')
-rw-r--r-- | rules.js | 63 |
1 files changed, 57 insertions, 6 deletions
@@ -8,7 +8,10 @@ // TODO: sea move into attacked fortified port as defender responder? -- not besieged yet exports.scenarios = [ - "Standard" + "Standard", + "+1/-1 Handicap", + "+2/-2 Handicap", + "+3/-3 Handicap", ] exports.roles = [ @@ -44,6 +47,7 @@ const MASYAF = town_index["Masyaf"] const ST_SIMEON = town_index["St. Simeon"] const TRIPOLI = town_index["Tripoli"] const TYRE = town_index["Tyre"] +const ACRE = town_index["Acre"] const NOBODY = -1 const ASSASSINS = block_index["Assassins"] @@ -1023,6 +1027,25 @@ function is_valid_frank_deployment() { } function goto_frank_deployment() { + // handicap option (pilgrims to port, crusaders to holding) + for (let i = 0; i < game.f_draw; ++i) { + let b = select_random_block(F_POOL) + log(BLOCKS[b].name + " arrived.") + switch (block_type(b)) { + case 'pilgrims': + deploy(b, ACRE) // start pilgrims at Acre, can redeploy to any other port + break + case 'crusaders': + deploy(b, block_home(b)) + break + default: + throw "IMPOSSIBLE" + } + } + if (game.f_draw > 0) + log("") + delete game.f_draw + game.active = FRANKS game.state = 'frank_deployment' } @@ -1037,7 +1060,9 @@ states.frank_deployment = { gen_action(view, 'next') for (let b = 0; b <= last_block; ++b) { if (block_owner(b) === game.active && is_block_on_land(b)) - if (block_seats[b].length > 1) + if (block_type(b) === 'pilgrims') + gen_action(view, 'block', b) + else if (block_seats[b].length > 1) gen_action(view, 'block', b) } if (errors.length > 0) @@ -1065,9 +1090,15 @@ states.frank_deployment_to = { gen_action_undo(view) gen_action(view, 'block', game.who) let from = game.location[game.who] - for (let town of block_seats[game.who]) - if (town !== from) - gen_action(view, 'town', town) + if (block_type(game.who) === 'pilgrims') { + for (let town = first_town; town <= last_town; ++town) + if (town !== from && is_friendly_port(town)) + gen_action(view, 'town', town) + } else { + for (let town of block_seats[game.who]) + if (town !== from) + gen_action(view, 'town', town) + } }, town: function (where) { game.location[game.who] = where @@ -1079,11 +1110,13 @@ states.frank_deployment_to = { } function goto_saracen_deployment() { - for (let i = 0; i < 4; ++i) { + for (let i = 0; i < game.s_draw; ++i) { let nomad = select_random_block(S_POOL) log(BLOCKS[nomad].name + " arrived in #" + block_home(nomad) + ".") deploy(nomad, block_home(nomad)) } + delete game.s_draw + game.active = SARACENS game.state = 'saracen_deployment' game.who = SALADIN @@ -3889,6 +3922,24 @@ exports.setup = function (seed, scenario, options) { log(".h1 Crusader Rex") log("") + game.f_draw = 0 + game.s_draw = 4 + + switch (scenario) { + case "+1/-1 Handicap": + game.f_draw = 1 + game.s_draw = 3 + break + case "+2/-2 Handicap": + game.f_draw = 2 + game.s_draw = 2 + break + case "+3/-3 Handicap": + game.f_draw = 3 + game.s_draw = 1 + break + } + if (options && options.iron_bridge) { game.iron_bridge = 1 log("Iron Bridge:\nThe road between Antioch and Harim has a move limit of 3.") |