summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor@ccxvii.net>2025-03-08 12:37:26 +0100
committerTor Andersson <tor@ccxvii.net>2025-03-08 16:33:38 +0100
commit4fb27cd996e39b3ee6b2527adfb128a03aad119d (patch)
treee46693749c4f64b4a68b2266dadbcef2f2d049a2
parent9a05c2d2ca2b16dd0c80614ef48944b1440d6b0f (diff)
downloadland-and-freedom-new-play.tar.gz
Move directly on track instead of Up/Down buttons.new-play
-rw-r--r--play.js10
-rw-r--r--rules.js67
-rw-r--r--rules.ts69
3 files changed, 90 insertions, 56 deletions
diff --git a/play.js b/play.js
index 9ef91e1..35b1aca 100644
--- a/play.js
+++ b/play.js
@@ -260,11 +260,11 @@ function on_init() {
m: document.getElementById("role_Moderate"),
}
- build_track(0, "tr_liberty", "Liberty", 0, 10)
- build_track(1, "tr_collectivization", "Collectivization", 0, 10)
- build_track(2, "tr_government", "Government", 1, 10)
- build_track(3, "tr_soviet_support", "SovietSupport", 0, 10)
- build_track(4, "tr_foreign_aid", "ForeignAid", 0, 10)
+ build_track(0, "tr0", "Liberty", 0, 10)
+ build_track(1, "tr1", "Collectivization", 0, 10)
+ build_track(2, "tr2", "Government", 1, 10)
+ build_track(3, "tr3", "SovietSupport", 0, 10)
+ build_track(4, "tr4", "ForeignAid", 0, 10)
build_bonus(0, "Bonus1", "bonus_morale")
build_bonus(1, "Bonus2", "bonus_teamwork")
diff --git a/rules.js b/rules.js
index 6970da0..e7e39f2 100644
--- a/rules.js
+++ b/rules.js
@@ -377,7 +377,7 @@ function game_view(state, current) {
!game.active.includes(current)) {
let inactive = states[game.state].inactive || game.state;
view.prompt = Array.isArray(game.active)
- ? `Waiting for other players to ${inactive}.`
+ ? `Waiting for ${game.active.join(" and ")} to ${inactive}.`
: `Waiting for ${game.active} to ${inactive}.`;
}
else {
@@ -853,7 +853,7 @@ states.choose_area_ap = {
inactive: 'choose area to use Action Points',
prompt() {
gen_spend_hero_points();
- view.prompt = 'Choose area of the board to affect';
+ view.prompt = 'Use Action Points.';
for (const track of tracks) {
gen_action_standee(track.id);
}
@@ -955,7 +955,7 @@ states.choose_card = {
inactive: 'choose a card',
prompt(player) {
gen_spend_hero_points();
- view.prompt = 'Choose a card to play this turn';
+ view.prompt = 'Choose a card to play this turn.';
const faction = player_faction_map[player];
if (game.selected_cards[faction].length === 0) {
view.actions.undo = 0;
@@ -969,7 +969,6 @@ states.choose_card = {
else {
view.actions.undo = 1;
view.actions.confirm = 1;
- view.prompt = 'Confirm your actions or undo';
}
},
spend_hp() {
@@ -1340,6 +1339,7 @@ function can_move_track_down(track_id) {
states.move_track_up_or_down = {
inactive: 'move a track',
auto_resolve() {
+ return false;
const { track_id, strength } = get_active_node_args();
const can_move_up = can_move_track_up(track_id);
const can_move_down = can_move_track_down(track_id);
@@ -1360,21 +1360,12 @@ states.move_track_up_or_down = {
const can_move_up = can_move_track_up(track_id);
const can_move_down = can_move_track_down(track_id);
const track_name = get_track_name(track_id);
- if (can_move_down && can_move_up) {
- view.prompt = `Move ${track_name} up or down`;
- }
- else if (can_move_up) {
- view.prompt = `Move ${track_name} up`;
- }
- else {
- view.prompt = `Move ${track_name} down`;
- }
- if (can_move_up) {
- gen_action('up');
- }
- if (can_move_down) {
- gen_action('down');
- }
+ const node = get_active_node();
+ if (can_move_up)
+ gen_move_track(track_id, node.a.strength);
+ if (can_move_down)
+ gen_move_track(track_id, -node.a.strength);
+ view.prompt = `Move ${track_name} ${node.a.strength} spaces.`;
},
spend_hp() {
resolve_spend_hp();
@@ -1389,6 +1380,11 @@ states.move_track_up_or_down = {
move_track(node.a.track_id, node.a.strength);
resolve_active_and_proceed();
},
+ tr0(x) { move_track_to(0, x); resolve_active_and_proceed(); },
+ tr1(x) { move_track_to(1, x); resolve_active_and_proceed(); },
+ tr2(x) { move_track_to(2, x); resolve_active_and_proceed(); },
+ tr3(x) { move_track_to(3, x); resolve_active_and_proceed(); },
+ tr4(x) { move_track_to(4, x); resolve_active_and_proceed(); },
};
states.peek_fascist_cards = {
inactive: 'peek at Fascist cards',
@@ -1421,10 +1417,10 @@ function resolve_spend_hp() {
}
function set_player_turn_prompt({ can_play_card, can_spend_hp, use_ap, use_momentum, use_morale_bonus, }) {
if (can_play_card && can_spend_hp) {
- view.prompt = 'Play a card or spend Hero points';
+ view.prompt = 'Player Turn: Use card or spend Hero points.';
}
else if (can_play_card && !can_spend_hp) {
- view.prompt = 'Play a card';
+ view.prompt = 'Player Turn: Use card.';
}
else if (use_ap || use_morale_bonus || use_momentum) {
const text_options = [];
@@ -1439,18 +1435,18 @@ function set_player_turn_prompt({ can_play_card, can_spend_hp, use_ap, use_momen
}
if (use_momentum) {
view.prompt = can_spend_hp
- ? 'Play second card or spend Hero Points'
- : 'Play second card';
+ ? 'Play second card or spend Hero Points.'
+ : 'Play second card.';
}
else {
- view.prompt = `Use ${text_options.join(', ')} or end turn`;
+ view.prompt = `Player Turn: Use ${text_options.join(', ')}.`;
}
}
else if (can_spend_hp) {
- view.prompt = 'Spend Hero Points or end turn';
+ view.prompt = 'Spend Hero Points.';
}
else {
- view.prompt = 'End turn';
+ view.prompt = 'End turn.';
}
}
states.player_turn = {
@@ -2373,11 +2369,30 @@ function get_government_track_direction(direction) {
return 1;
}
}
+const track_action_name = [
+ "tr0",
+ "tr1",
+ "tr2",
+ "tr3",
+ "tr4"
+];
+function gen_move_track(track_id, change) {
+ const current_value = game.tracks[track_id];
+ let new_value = current_value + change;
+ new_value = Math.max(new_value, get_min_value_for_track(track_id));
+ new_value = Math.min(new_value, get_max_value_for_track(track_id));
+ gen_action(track_action_name[track_id], new_value);
+}
function move_track(track_id, change) {
const current_value = game.tracks[track_id];
let new_value = current_value + change;
new_value = Math.max(new_value, get_min_value_for_track(track_id));
new_value = Math.min(new_value, get_max_value_for_track(track_id));
+ move_track_to(track_id, new_value);
+}
+function move_track_to(track_id, new_value) {
+ const current_value = game.tracks[track_id];
+ let change = new_value - current_value;
game.tracks[track_id] = new_value;
logi(`${get_track_name(track_id)} to ${new_value}`);
check_initiative();
diff --git a/rules.ts b/rules.ts
index 938c4ac..7347cc8 100644
--- a/rules.ts
+++ b/rules.ts
@@ -559,7 +559,7 @@ function game_view(state: Game, current: Player | 'Observer') {
) {
let inactive = states[game.state].inactive || game.state;
view.prompt = Array.isArray(game.active)
- ? `Waiting for other players to ${inactive}.`
+ ? `Waiting for ${game.active.join(" and ")} to ${inactive}.`
: `Waiting for ${game.active} to ${inactive}.`;
} else {
view.actions = {};
@@ -1080,8 +1080,9 @@ states.choose_area_ap = {
inactive: 'choose area to use Action Points',
prompt() {
gen_spend_hero_points();
- view.prompt = 'Choose area of the board to affect';
+ view.prompt = 'Use Action Points.';
for (const track of tracks) {
+ // TODO: generate action for moving on the track directly
gen_action_standee(track.id);
}
const fronts = get_fronts_to_add_to(ANY);
@@ -1202,7 +1203,7 @@ states.choose_card = {
inactive: 'choose a card',
prompt(player: Player) {
gen_spend_hero_points();
- view.prompt = 'Choose a card to play this turn';
+ view.prompt = 'Choose a card to play this turn.';
const faction = player_faction_map[player];
@@ -1217,7 +1218,6 @@ states.choose_card = {
} else {
view.actions.undo = 1;
view.actions.confirm = 1;
- view.prompt = 'Confirm your actions or undo';
}
},
spend_hp() {
@@ -1667,6 +1667,7 @@ function can_move_track_down(track_id): boolean {
states.move_track_up_or_down = {
inactive: 'move a track',
auto_resolve() {
+ return false;
const { track_id, strength } = get_active_node_args();
const can_move_up = can_move_track_up(track_id);
const can_move_down = can_move_track_down(track_id);
@@ -1686,20 +1687,12 @@ states.move_track_up_or_down = {
const can_move_up = can_move_track_up(track_id);
const can_move_down = can_move_track_down(track_id);
const track_name = get_track_name(track_id);
- if (can_move_down && can_move_up) {
- view.prompt = `Move ${track_name} up or down`;
- } else if (can_move_up) {
- view.prompt = `Move ${track_name} up`;
- } else {
- view.prompt = `Move ${track_name} down`;
- }
-
- if (can_move_up) {
- gen_action('up');
- }
- if (can_move_down) {
- gen_action('down');
- }
+ const node = get_active_node();
+ if (can_move_up)
+ gen_move_track(track_id, node.a.strength)
+ if (can_move_down)
+ gen_move_track(track_id, -node.a.strength)
+ view.prompt = `Move ${track_name} ${node.a.strength} spaces.`;
},
spend_hp() {
resolve_spend_hp();
@@ -1714,6 +1707,11 @@ states.move_track_up_or_down = {
move_track(node.a.track_id, node.a.strength);
resolve_active_and_proceed();
},
+ tr0(x) { move_track_to(0, x); resolve_active_and_proceed(); },
+ tr1(x) { move_track_to(1, x); resolve_active_and_proceed(); },
+ tr2(x) { move_track_to(2, x); resolve_active_and_proceed(); },
+ tr3(x) { move_track_to(3, x); resolve_active_and_proceed(); },
+ tr4(x) { move_track_to(4, x); resolve_active_and_proceed(); },
};
states.peek_fascist_cards = {
@@ -1760,9 +1758,9 @@ function set_player_turn_prompt({
use_morale_bonus,
}: PlayerTurnArgs & { can_spend_hp: boolean; can_play_card: boolean }) {
if (can_play_card && can_spend_hp) {
- view.prompt = 'Play a card or spend Hero points';
+ view.prompt = 'Player Turn: Use card or spend Hero points.';
} else if (can_play_card && !can_spend_hp) {
- view.prompt = 'Play a card';
+ view.prompt = 'Player Turn: Use card.';
} else if (use_ap || use_morale_bonus || use_momentum) {
const text_options = [];
if (use_ap) {
@@ -1778,15 +1776,15 @@ function set_player_turn_prompt({
if (use_momentum) {
view.prompt = can_spend_hp
- ? 'Play second card or spend Hero Points'
- : 'Play second card';
+ ? 'Play second card or spend Hero Points.'
+ : 'Play second card.';
} else {
- view.prompt = `Use ${text_options.join(', ')} or end turn`;
+ view.prompt = `Player Turn: Use ${text_options.join(', ')}.`;
}
} else if (can_spend_hp) {
- view.prompt = 'Spend Hero Points or end turn';
+ view.prompt = 'Spend Hero Points.';
} else {
- view.prompt = 'End turn';
+ view.prompt = 'End turn.';
}
}
@@ -2935,12 +2933,33 @@ function get_government_track_direction(direction: 10 | 11): -1 | 1 {
}
}
+const track_action_name = [
+ "tr0",
+ "tr1",
+ "tr2",
+ "tr3",
+ "tr4"
+]
+
+function gen_move_track(track_id: number, change: number) {
+ const current_value = game.tracks[track_id];
+ let new_value = current_value + change;
+ new_value = Math.max(new_value, get_min_value_for_track(track_id));
+ new_value = Math.min(new_value, get_max_value_for_track(track_id));
+ gen_action(track_action_name[track_id], new_value)
+}
+
function move_track(track_id: number, change: number) {
const current_value = game.tracks[track_id];
let new_value = current_value + change;
new_value = Math.max(new_value, get_min_value_for_track(track_id));
new_value = Math.min(new_value, get_max_value_for_track(track_id));
+ move_track_to(track_id, new_value)
+}
+function move_track_to(track_id: number, new_value: number) {
+ const current_value = game.tracks[track_id];
+ let change = new_value - current_value;
game.tracks[track_id] = new_value;
logi(`${get_track_name(track_id)} to ${new_value}`);