From fcaf699542d993bf9f04645e3bc92ff4e30f53b3 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sat, 13 May 2023 23:57:55 +0200 Subject: Momentum cleanup and manual cube shuffling from momentum tracks. --- play.js | 15 +++++-- rules.js | 146 ++++++++++++++++++++++++++++++++++++++++----------------------- 2 files changed, 103 insertions(+), 58 deletions(-) diff --git a/play.js b/play.js index e2bf241..4dcf283 100644 --- a/play.js +++ b/play.js @@ -502,17 +502,24 @@ function on_update() { for (let i = 0; i < space_names.length; ++i) layout[i] = [] + for (let i = 0; i < 36; ++i) { if (view.pieces[i] >= 0) { layout[view.pieces[i]].push(ui.cubes[i]) ui.cubes[i].classList.remove("hide") - ui.cubes[i].classList.toggle("action", is_piece_action(i)) - ui.cubes[i].classList.toggle("selected", i === view.selected_cube) - } - else { + } else if (i >= 18) { ui.cubes[i].classList.add("hide") } + ui.cubes[i].classList.toggle("action", is_piece_action(i)) + ui.cubes[i].classList.toggle("selected", i === view.selected_cube) } + + let red_out_of_play = [] + for (let i = 0; i <= 17; ++i) + if (view.pieces[i] < 0) + red_out_of_play.push(ui.cubes[i]) + layout_cubes(red_out_of_play, 1225, 225) + for (let i = 0; i < space_count; ++i) { layout_cubes(layout[i], space_layout_cube[i].x, space_layout_cube[i].y) ui.spaces[i].classList.toggle("action", is_space_action(i)) diff --git a/rules.js b/rules.js index dba7cbb..54bf7fd 100644 --- a/rules.js +++ b/rules.js @@ -1161,8 +1161,7 @@ states.advance_revolutionary_momentum = { view.actions.red_momentum = 1 }, red_momentum() { - advance_revolutionary_momentum1(1) - advance_revolutionary_momentum2(1) + increase_revolutionary_momentum() }, } @@ -1172,8 +1171,7 @@ states.advance_prussian_collaboration = { view.actions.blue_momentum = 1 }, blue_momentum() { - advance_prussian_collaboration1(1) - advance_prussian_collaboration2(1) + increase_prussian_collaboration() }, } @@ -1238,59 +1236,108 @@ function discard_final() { // === PLAYER MOMENTUM TRACKS === -function advance_revolutionary_momentum(x) { - advance_revolutionary_momentum1(x) - advance_revolutionary_momentum2(x) +function increase_revolutionary_momentum() { + game.red_momentum += 1 + log("Increased RM to " + game.red_momentum + ".") + goto_increase_revolutionary_momentum_trigger() } -function advance_revolutionary_momentum1(x) { - game.red_momentum += x - if (x > 0) - log("Increased RM to " + game.red_momentum + ".") - else - log("Decreased RM to " + game.red_momentum + ".") - for (let i = game.red_momentum; i < 3; ++i) - for_each_commune_cube(RED_CUBE_POOL[i], remove_piece_from_play) -} - -function advance_revolutionary_momentum2(x) { +function goto_increase_revolutionary_momentum_trigger() { game.momentum_active = game.active game.active = VERSAILLES - if (x > 0 && game.red_momentum >= 2 && can_place_cube_in_any(INSTITUTIONAL)) { + if (game.red_momentum >= 2 && can_place_cube_in_any(INSTITUTIONAL)) { clear_undo() - game.state = "revolutionary_momentum_trigger" + game.state = "increase_revolutionary_momentum_trigger" } else { - end_momentum_trigger() + end_increase_momentum() } } -function advance_prussian_collaboration(x) { - advance_prussian_collaboration1(x) - advance_prussian_collaboration2(x) +function increase_prussian_collaboration() { + game.blue_momentum += 1 + log("Increased BM to " + game.blue_momentum + ".") + goto_increase_prussian_collaboration_add() } -function advance_prussian_collaboration1(x) { - game.blue_momentum += x - if (x > 0) - log("Increased BM to " + game.blue_momentum + ".") - else - log("Decreased BM to " + game.blue_momentum + ".") +function goto_increase_prussian_collaboration_add() { + game.state = "increase_prussian_collaboration_add" for (let i = 0; i < game.blue_momentum; ++i) - for_each_versailles_cube(PRUSSIAN_COLLABORATION[i], remove_piece) + if (has_versailles_cube(PRUSSIAN_COLLABORATION[i])) + return + goto_increase_prussian_collaboration_trigger() } -function advance_prussian_collaboration2(x) { +function goto_increase_prussian_collaboration_trigger() { game.momentum_active = game.active game.active = COMMUNE - if (x > 0 && game.blue_momentum >= 2 && can_place_cube_in_any(PUBLIC_OPINION)) { + if (game.blue_momentum >= 2 && can_place_cube_in_any(PUBLIC_OPINION)) { clear_undo() - game.state = "prussian_collaboration_trigger" + game.state = "increase_prussian_collaboration_trigger" } else { - end_momentum_trigger() + end_increase_momentum() } } -states.revolutionary_momentum_trigger = { +function end_increase_momentum() { + game.active = game.momentum_active + delete game.momentum_active + if (game.vm) + vm_next() + else + end_card_play() +} + +function decrease_revolutionary_momentum() { + game.red_momentum -= 1 + log("Decreased RM to " + game.red_momentum + ".") + goto_decrease_revolutionary_momentum_remove() +} + +function goto_decrease_revolutionary_momentum_remove() { + game.state = "decrease_revolutionary_momentum_remove" + for (let i = game.red_momentum; i < 3; ++i) + if (has_commune_cube(RED_CUBE_POOL[i])) + return + end_decrease_momentum() +} + +function decrease_prussian_collaboration() { + game.blue_momentum -= 1 + log("Decreased BM to " + game.blue_momentum + ".") + end_decrease_momentum() +} + +function end_decrease_momentum() { + vm_next() +} + +states.decrease_revolutionary_momentum_remove = { + prompt() { + view.prompt = "Revolutionary Momentum: Remove cubes from Pool." + for (let i = game.red_momentum; i < 3; ++i) + for_each_commune_cube(RED_CUBE_POOL[i], gen_action_piece) + }, + piece(p) { + log("Removed RC from play.") + remove_piece_from_play(p) + goto_decrease_revolutionary_momentum_remove() + }, +} + +states.increase_prussian_collaboration_add = { + prompt() { + view.prompt = "Prussian Collaboration: Add cubes to Pool." + for (let i = 0; i < game.blue_momentum; ++i) + for_each_versailles_cube(PRUSSIAN_COLLABORATION[i], gen_action_piece) + }, + piece(p) { + log("Added BC to Pool.") + remove_piece(p) + goto_increase_prussian_collaboration_add() + }, +} + +states.increase_revolutionary_momentum_trigger = { prompt() { view.prompt = "Revolutionary Momentum: Place a cube in an Institutional space." for (let s of INSTITUTIONAL) @@ -1301,14 +1348,14 @@ states.revolutionary_momentum_trigger = { space(s) { log("Placed RC in S" + s + ".") place_cube(s) - end_momentum_trigger() + end_increase_momentum() }, pass() { - end_momentum_trigger() + end_increase_momentum() }, } -states.prussian_collaboration_trigger = { +states.increase_prussian_collaboration_trigger = { prompt() { view.prompt = "Prussian Collaboration: Place a cube in a Public Opinion space." for (let s of PUBLIC_OPINION) @@ -1319,22 +1366,13 @@ states.prussian_collaboration_trigger = { space(s) { log("Placed BC in S" + s + ".") place_cube(s) - end_momentum_trigger() + end_increase_momentum() }, pass() { - end_momentum_trigger() + end_increase_momentum() }, } -function end_momentum_trigger() { - game.active = game.momentum_active - delete game.momentum_active - if (game.vm) - vm_next() - else - end_card_play() -} - // === CRISIS TRACK & CUBE POOLS === function end_card_play() { @@ -2479,7 +2517,7 @@ states.vm_increase_revolutionary_momentum = { }, red_momentum() { push_undo() - advance_revolutionary_momentum(1) + increase_revolutionary_momentum() }, } @@ -2490,7 +2528,7 @@ states.vm_increase_prussian_collaboration = { }, blue_momentum() { push_undo() - advance_prussian_collaboration(1) + increase_prussian_collaboration() }, } @@ -2501,7 +2539,7 @@ states.vm_decrease_revolutionary_momentum = { }, red_momentum() { push_undo() - advance_revolutionary_momentum(-1) + decrease_revolutionary_momentum() }, } @@ -2512,7 +2550,7 @@ states.vm_decrease_prussian_collaboration = { }, blue_momentum() { push_undo() - advance_prussian_collaboration(-1) + decrease_prussian_collaboration() }, } -- cgit v1.2.3