diff options
-rw-r--r-- | rules.js | 29 |
1 files changed, 24 insertions, 5 deletions
@@ -3,7 +3,7 @@ /* TODO: confirm stacking when re-entering Arenberg on Flanders map? -TODO: stacking order (supreme) when re-entering genarals. +TODO: stacking order (supreme) when re-entering generals. OPTIMIZE: fewer/smarter/smaller lists, smarter power control checks OPTIMIZE: range checks instead of set checks @@ -2225,8 +2225,10 @@ states.movement_flanders_next = { } function has_moved_any_pieces() { - if (game.power === P_AUSTRIA && !(game.flags & F_MOVE_FLANDERS)) - return has_moved_any_bohemia_pieces() + if (!is_two_player()) { + if (game.power === P_AUSTRIA && !(game.flags & F_MOVE_FLANDERS)) + return has_moved_any_bohemia_pieces() + } for (let p of all_controlled_generals(game.power)) if (set_has(game.moved, p)) return true @@ -2522,6 +2524,13 @@ states.move_supply_train = { }, } +function can_force_march(who, here) { + for (let next of data.cities.main_roads[here]) + if (can_move_general_to(who, here, next)) + return true + return false +} + states.move_general = { inactive: "move", prompt() { @@ -2532,7 +2541,7 @@ states.move_general = { let here = game.pos[who] if (game.count === 0) { - if (data.cities.main_roads[here].length > 0) + if (can_force_march(who, here)) view.actions.force_march = 1 let s_take = count_stacked_take() @@ -5667,6 +5676,15 @@ function may_cancel_subsidy() { return result } +function may_create_subsidy() { + if (is_two_player()) { + let major = coop_major_power(game.power) + if (major === P_PRAGMATIC || major === P_AUSTRIA) + return is_saxony_austrian() + } + return true +} + function goto_cancel_subsidy() { game.proposal = { save_power: game.power, save_state: game.state, from: -1, to: -1 } game.state = "cancel_subsidy_from" @@ -6242,7 +6260,8 @@ exports.view = function (state, player) { if (!game.proposal && !is_intro()) { if (may_cancel_subsidy()) view.actions.cancel_subsidy = 1 - view.actions.propose_subsidy = 1 + if (may_create_subsidy()) + view.actions.propose_subsidy = 1 } } |