summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rules.js256
-rw-r--r--rules.ts288
2 files changed, 300 insertions, 244 deletions
diff --git a/rules.js b/rules.js
index c58c751..b0a9662 100644
--- a/rules.js
+++ b/rules.js
@@ -541,6 +541,18 @@ function player_can_resolve_icon(icon) {
}
return true;
}
+const track_icon_to_track_id_map = {
+ collectivization: data_1.COLLECTIVIZATION,
+ d_collectivization: data_1.COLLECTIVIZATION,
+ foreign_aid: data_1.FOREIGN_AID,
+ d_foreign_aid: data_1.FOREIGN_AID,
+ government: data_1.GOVERNMENT,
+ d_government: data_1.GOVERNMENT,
+ liberty: data_1.LIBERTY,
+ d_liberty: data_1.LIBERTY,
+ soviet_support: data_1.SOVIET_SUPPORT,
+ d_soviet_support: data_1.SOVIET_SUPPORT,
+};
states.activate_icon = {
inactive: 'activate an icon',
prompt() {
@@ -548,7 +560,42 @@ states.activate_icon = {
view.prompt = 'Choose an icon to activate';
const c = cards[game.played_card];
for (const i of c.icons) {
- gen_action(i);
+ const count = get_icon_count_in_tableau(i);
+ let direction = 0;
+ switch (i) {
+ case 'add_to_front':
+ const possible_fronts = get_fronts_to_add_to(data_1.ANY);
+ for (let f of possible_fronts) {
+ gen_action_front(f);
+ }
+ break;
+ case 'collectivization':
+ case 'foreign_aid':
+ case 'liberty':
+ case 'soviet_support':
+ gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + count);
+ break;
+ case 'government':
+ direction = game.active === data_1.COMMUNIST ? -1 : 1;
+ gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + direction * count);
+ break;
+ case 'd_collectivization':
+ case 'd_foreign_aid':
+ case 'd_government':
+ case 'd_liberty':
+ case 'd_soviet_support':
+ gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] - count);
+ break;
+ case 'government_to_center':
+ direction = game.tracks[data_1.GOVERNMENT] >= 6 ? -1 : 1;
+ gen_move_track(track_icon_to_track_id_map[i], game.tracks[track_icon_to_track_id_map[i]] + direction * count);
+ break;
+ case 'teamwork_on':
+ gen_action_bonus(data_1.TEAMWORK_BONUS);
+ break;
+ default:
+ gen_action(i);
+ }
if (!player_can_resolve_icon(i)) {
view.actions[i] = 0;
}
@@ -557,70 +604,52 @@ states.activate_icon = {
spend_hp() {
resolve_spend_hp();
},
- add_to_front() {
- insert_after_active_node(create_state_node('add_to_front', get_active_faction(), {
- t: data_1.ANY,
- v: get_icon_count_in_tableau('add_to_front'),
- }));
- resolve_active_and_proceed();
- },
- collectivization() {
- const count = get_icon_count_in_tableau('collectivization');
- if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(data_1.COLLECTIVIZATION, count);
- }
- else {
- move_track(data_1.COLLECTIVIZATION, count);
- }
+ front(f) {
+ update_front(f, get_icon_count_in_tableau('add_to_front'), get_active_faction());
resolve_active_and_proceed();
},
- d_collectivization() {
- const count = -1 * get_icon_count_in_tableau('d_collectivization');
+ tr0(x) {
if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(data_1.COLLECTIVIZATION, count);
+ insert_use_organization_medallion_node(data_1.LIBERTY, x);
}
else {
- move_track(data_1.COLLECTIVIZATION, count);
+ move_track_to(0, x);
}
resolve_active_and_proceed();
},
- d_foreign_aid() {
- const count = -1 * get_icon_count_in_tableau('d_foreign_aid');
+ tr1(x) {
if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(data_1.FOREIGN_AID, count);
+ insert_use_organization_medallion_node(data_1.COLLECTIVIZATION, x);
}
else {
- move_track(data_1.FOREIGN_AID, count);
+ move_track_to(1, x);
}
resolve_active_and_proceed();
},
- d_government() {
- const count = -1 * get_icon_count_in_tableau('d_government');
+ tr2(x) {
if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(data_1.GOVERNMENT, count);
+ insert_use_organization_medallion_node(data_1.GOVERNMENT, x);
}
else {
- move_track(data_1.GOVERNMENT, count);
+ move_track_to(2, x);
}
resolve_active_and_proceed();
},
- d_liberty() {
- const count = -1 * get_icon_count_in_tableau('d_liberty');
+ tr3(x) {
if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(data_1.LIBERTY, count);
+ insert_use_organization_medallion_node(data_1.SOVIET_SUPPORT, x);
}
else {
- move_track(data_1.LIBERTY, count);
+ move_track_to(3, x);
}
resolve_active_and_proceed();
},
- d_soviet_support() {
- const count = -1 * get_icon_count_in_tableau('d_soviet_support');
+ tr4(x) {
if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(data_1.SOVIET_SUPPORT, count);
+ insert_use_organization_medallion_node(data_1.FOREIGN_AID, x);
}
else {
- move_track(data_1.SOVIET_SUPPORT, count);
+ move_track_to(4, x);
}
resolve_active_and_proceed();
},
@@ -628,54 +657,8 @@ states.activate_icon = {
draw_hand_cards(get_active_faction(), get_icon_count_in_tableau('draw_card'));
resolve_active_and_proceed();
},
- foreign_aid() {
- const count = get_icon_count_in_tableau('foreign_aid');
- if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(data_1.FOREIGN_AID, count);
- }
- else {
- move_track(data_1.FOREIGN_AID, count);
- }
- resolve_active_and_proceed();
- },
- government() {
- const direction = game.active === data_1.COMMUNIST ? -1 : 1;
- const count = direction * get_icon_count_in_tableau('government');
- if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(data_1.GOVERNMENT, count);
- }
- else {
- move_track(data_1.GOVERNMENT, count);
- }
- resolve_active_and_proceed();
- },
- government_to_center() {
- const direction = game.tracks[data_1.GOVERNMENT] >= 6 ? -1 : 1;
- move_track(data_1.GOVERNMENT, direction * get_icon_count_in_tableau('government_to_center'));
- resolve_active_and_proceed();
- },
- liberty() {
- const count = get_icon_count_in_tableau('liberty');
- if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(data_1.LIBERTY, count);
- }
- else {
- move_track(data_1.LIBERTY, count);
- }
- resolve_active_and_proceed();
- },
- soviet_support() {
- const count = get_icon_count_in_tableau('soviet_support');
- if (can_use_medallion(data_1.ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(data_1.SOVIET_SUPPORT, count);
- }
- else {
- move_track(data_1.SOVIET_SUPPORT, count);
- }
- resolve_active_and_proceed();
- },
- teamwork_on() {
- game.bonuses[data_1.TEAMWORK_BONUS] = data_1.ON;
+ bonus(b) {
+ update_bonus(b, data_1.ON);
resolve_active_and_proceed();
},
};
@@ -857,8 +840,9 @@ states.choose_area_ap = {
prompt() {
gen_spend_hero_points();
view.prompt = 'Use Action Points.';
+ const strength = get_active_node_args().strength;
for (const track of tracks) {
- gen_action_standee(track.id);
+ gen_move_track_change(track.id, strength);
}
const fronts = get_fronts_to_add_to(data_1.ANY);
for (const front of fronts) {
@@ -887,11 +871,24 @@ states.choose_area_ap = {
update_front(f, s, get_active_faction());
resolve_active_and_proceed();
},
- standee(track_id) {
- insert_after_active_node(create_state_node('move_track_up_or_down', get_active_faction(), {
- track_id,
- strength: get_active_node()?.a.strength,
- }));
+ 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();
},
};
@@ -1664,13 +1661,22 @@ states.return_card = {
resolve_active_and_proceed();
},
};
+function gen_spend_hero_points_move_track(track_id, change) {
+ for (let i = 1; i <= change; ++i) {
+ gen_move_track_change(track_id, i);
+ }
+}
+function pay_hero_points_to_move_track(track_id, new_value) {
+ const cost_per_step = [3, 3, 4, 2, 2];
+ const change = Math.abs(game.tracks[track_id] - new_value);
+ pay_hero_points(get_active_faction(), cost_per_step[track_id] * change);
+}
states.spend_hero_points = {
inactive: 'spend Hero points',
prompt() {
const hero_points = game.hero_points[get_active_faction()];
view.prompt = `Spend up to ${hero_points} Hero Points.`;
const faction = get_active_faction();
- gen_action('done');
if (hero_points === 0) {
return;
}
@@ -1689,17 +1695,17 @@ states.spend_hero_points = {
gen_action_bonus(bonus);
}
}
- gen_action_standee(data_1.FOREIGN_AID);
- gen_action_standee(data_1.SOVIET_SUPPORT);
+ gen_spend_hero_points_move_track(data_1.FOREIGN_AID, Math.floor(hero_points / 2));
+ gen_spend_hero_points_move_track(data_1.SOVIET_SUPPORT, Math.floor(hero_points / 2));
if (hero_points < 3) {
return;
}
- gen_action_standee(data_1.COLLECTIVIZATION);
- gen_action_standee(data_1.LIBERTY);
+ gen_spend_hero_points_move_track(data_1.COLLECTIVIZATION, Math.floor(hero_points / 3));
+ gen_spend_hero_points_move_track(data_1.LIBERTY, Math.floor(hero_points / 3));
if (hero_points < 4) {
return;
}
- gen_action_standee(data_1.GOVERNMENT);
+ gen_spend_hero_points_move_track(data_1.GOVERNMENT, Math.floor(hero_points / 4));
},
add_to_front() {
const faction = get_active_faction();
@@ -1710,9 +1716,6 @@ states.spend_hero_points = {
}));
resolve_active_and_proceed();
},
- done() {
- resolve_active_and_proceed();
- },
bonus(b) {
update_active_node_args({
turn_on_bonus: false,
@@ -1738,23 +1741,29 @@ states.spend_hero_points = {
insert_after_active_node(create_state_node('remove_blank_marker', faction));
resolve_active_and_proceed();
},
- standee(track_id) {
- update_active_node_args({
- move_track: false,
- });
- let amount = 2;
- if (track_id === data_1.LIBERTY || track_id === data_1.COLLECTIVIZATION) {
- amount = 3;
- }
- else if (track_id === data_1.GOVERNMENT) {
- amount = 4;
- }
- const faction = get_active_faction();
- pay_hero_points(faction, amount);
- insert_after_active_node(create_state_node('move_track_up_or_down', faction, {
- track_id,
- strength: 1,
- }));
+ tr0(x) {
+ pay_hero_points_to_move_track(data_1.LIBERTY, x);
+ move_track_to(0, x);
+ resolve_active_and_proceed();
+ },
+ tr1(x) {
+ pay_hero_points_to_move_track(data_1.COLLECTIVIZATION, x);
+ move_track_to(1, x);
+ resolve_active_and_proceed();
+ },
+ tr2(x) {
+ pay_hero_points_to_move_track(data_1.GOVERNMENT, x);
+ move_track_to(2, x);
+ resolve_active_and_proceed();
+ },
+ tr3(x) {
+ pay_hero_points_to_move_track(data_1.SOVIET_SUPPORT, x);
+ move_track_to(3, x);
+ resolve_active_and_proceed();
+ },
+ tr4(x) {
+ pay_hero_points_to_move_track(data_1.FOREIGN_AID, x);
+ move_track_to(4, x);
resolve_active_and_proceed();
},
};
@@ -1892,7 +1901,7 @@ states.use_organization_medallion = {
pay_hero_points(faction, 1);
game.used_medallions.push(data_1.ORGANIZATION_MEDALLION_ID);
let { t, v } = get_active_node_args();
- if (v > 0) {
+ if (v > game.tracks[t]) {
v++;
}
else {
@@ -2343,13 +2352,20 @@ function get_government_track_direction(direction) {
}
}
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;
+function gen_move_track(track_id, new_value) {
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 gen_move_track_change(track_id, change) {
+ const current_value = game.tracks[track_id];
+ if (can_move_track_up(track_id)) {
+ gen_move_track(track_id, current_value + change);
+ }
+ if (can_move_track_down(track_id)) {
+ gen_move_track(track_id, current_value - change);
+ }
+}
function move_track(track_id, change) {
const current_value = game.tracks[track_id];
let new_value = current_value + change;
diff --git a/rules.ts b/rules.ts
index eda7085..dda4fac 100644
--- a/rules.ts
+++ b/rules.ts
@@ -753,6 +753,19 @@ function player_can_resolve_icon(icon: Icon): boolean {
return true;
}
+const track_icon_to_track_id_map = {
+ collectivization: COLLECTIVIZATION,
+ d_collectivization: COLLECTIVIZATION,
+ foreign_aid: FOREIGN_AID,
+ d_foreign_aid: FOREIGN_AID,
+ government: GOVERNMENT,
+ d_government: GOVERNMENT,
+ liberty: LIBERTY,
+ d_liberty: LIBERTY,
+ soviet_support: SOVIET_SUPPORT,
+ d_soviet_support: SOVIET_SUPPORT,
+};
+
states.activate_icon = {
inactive: 'activate an icon',
prompt() {
@@ -760,7 +773,55 @@ states.activate_icon = {
view.prompt = 'Choose an icon to activate';
const c = cards[game.played_card] as PlayerCard;
for (const i of c.icons) {
- gen_action(i);
+ const count = get_icon_count_in_tableau(i);
+ let direction = 0;
+ switch (i) {
+ case 'add_to_front':
+ const possible_fronts = get_fronts_to_add_to(ANY);
+ for (let f of possible_fronts) {
+ gen_action_front(f);
+ }
+ break;
+ case 'collectivization':
+ case 'foreign_aid':
+ case 'liberty':
+ case 'soviet_support':
+ gen_move_track(
+ track_icon_to_track_id_map[i],
+ game.tracks[track_icon_to_track_id_map[i]] + count
+ );
+ break;
+ case 'government':
+ direction = game.active === COMMUNIST ? -1 : 1;
+ gen_move_track(
+ track_icon_to_track_id_map[i],
+ game.tracks[track_icon_to_track_id_map[i]] + direction * count
+ );
+ break;
+ case 'd_collectivization':
+ case 'd_foreign_aid':
+ case 'd_government':
+ case 'd_liberty':
+ case 'd_soviet_support':
+ gen_move_track(
+ track_icon_to_track_id_map[i],
+ game.tracks[track_icon_to_track_id_map[i]] - count
+ );
+ break;
+ case 'government_to_center':
+ direction = game.tracks[GOVERNMENT] >= 6 ? -1 : 1;
+ gen_move_track(
+ track_icon_to_track_id_map[i],
+ game.tracks[track_icon_to_track_id_map[i]] + direction * count
+ );
+ break;
+ case 'teamwork_on':
+ gen_action_bonus(TEAMWORK_BONUS);
+ break;
+ default:
+ gen_action(i);
+ }
+
if (!player_can_resolve_icon(i)) {
view.actions[i] = 0;
}
@@ -769,66 +830,51 @@ states.activate_icon = {
spend_hp() {
resolve_spend_hp();
},
- add_to_front() {
- insert_after_active_node(
- create_state_node('add_to_front', get_active_faction(), {
- t: ANY,
- v: get_icon_count_in_tableau('add_to_front'),
- })
+ front(f: FrontId) {
+ update_front(
+ f,
+ get_icon_count_in_tableau('add_to_front'),
+ get_active_faction()
);
resolve_active_and_proceed();
},
- collectivization() {
- const count = get_icon_count_in_tableau('collectivization');
- if (can_use_medallion(ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(COLLECTIVIZATION, count);
- } else {
- move_track(COLLECTIVIZATION, count);
- }
- resolve_active_and_proceed();
- },
- d_collectivization() {
- const count = -1 * get_icon_count_in_tableau('d_collectivization');
+ tr0(x: number) {
if (can_use_medallion(ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(COLLECTIVIZATION, count);
+ insert_use_organization_medallion_node(LIBERTY, x);
} else {
- move_track(COLLECTIVIZATION, count);
+ move_track_to(0, x);
}
resolve_active_and_proceed();
},
- d_foreign_aid() {
- const count = -1 * get_icon_count_in_tableau('d_foreign_aid');
+ tr1(x: number) {
if (can_use_medallion(ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(FOREIGN_AID, count);
+ insert_use_organization_medallion_node(COLLECTIVIZATION, x);
} else {
- move_track(FOREIGN_AID, count);
+ move_track_to(1, x);
}
resolve_active_and_proceed();
},
- d_government() {
- const count = -1 * get_icon_count_in_tableau('d_government');
+ tr2(x: number) {
if (can_use_medallion(ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(GOVERNMENT, count);
+ insert_use_organization_medallion_node(GOVERNMENT, x);
} else {
- move_track(GOVERNMENT, count);
+ move_track_to(2, x);
}
resolve_active_and_proceed();
},
- d_liberty() {
- const count = -1 * get_icon_count_in_tableau('d_liberty');
+ tr3(x: number) {
if (can_use_medallion(ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(LIBERTY, count);
+ insert_use_organization_medallion_node(SOVIET_SUPPORT, x);
} else {
- move_track(LIBERTY, count);
+ move_track_to(3, x);
}
resolve_active_and_proceed();
},
- d_soviet_support() {
- const count = -1 * get_icon_count_in_tableau('d_soviet_support');
+ tr4(x: number) {
if (can_use_medallion(ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(SOVIET_SUPPORT, count);
+ insert_use_organization_medallion_node(FOREIGN_AID, x);
} else {
- move_track(SOVIET_SUPPORT, count);
+ move_track_to(4, x);
}
resolve_active_and_proceed();
},
@@ -839,53 +885,8 @@ states.activate_icon = {
);
resolve_active_and_proceed();
},
- foreign_aid() {
- const count = get_icon_count_in_tableau('foreign_aid');
- if (can_use_medallion(ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(FOREIGN_AID, count);
- } else {
- move_track(FOREIGN_AID, count);
- }
- resolve_active_and_proceed();
- },
- government() {
- const direction = game.active === COMMUNIST ? -1 : 1;
- const count = direction * get_icon_count_in_tableau('government');
- if (can_use_medallion(ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(GOVERNMENT, count);
- } else {
- move_track(GOVERNMENT, count);
- }
- resolve_active_and_proceed();
- },
- government_to_center() {
- const direction = game.tracks[GOVERNMENT] >= 6 ? -1 : 1;
- move_track(
- GOVERNMENT,
- direction * get_icon_count_in_tableau('government_to_center')
- );
- resolve_active_and_proceed();
- },
- liberty() {
- const count = get_icon_count_in_tableau('liberty');
- if (can_use_medallion(ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(LIBERTY, count);
- } else {
- move_track(LIBERTY, count);
- }
- resolve_active_and_proceed();
- },
- soviet_support() {
- const count = get_icon_count_in_tableau('soviet_support');
- if (can_use_medallion(ORGANIZATION_MEDALLION_ID)) {
- insert_use_organization_medallion_node(SOVIET_SUPPORT, count);
- } else {
- move_track(SOVIET_SUPPORT, count);
- }
- resolve_active_and_proceed();
- },
- teamwork_on() {
- game.bonuses[TEAMWORK_BONUS] = ON;
+ bonus(b: number) {
+ update_bonus(b, ON);
resolve_active_and_proceed();
},
};
@@ -1085,9 +1086,9 @@ states.choose_area_ap = {
prompt() {
gen_spend_hero_points();
view.prompt = 'Use Action Points.';
+ const strength: number = get_active_node_args().strength;
for (const track of tracks) {
- // TODO: generate action for moving on the track directly
- gen_action_standee(track.id);
+ gen_move_track_change(track.id, strength);
}
const fronts = get_fronts_to_add_to(ANY);
for (const front of fronts) {
@@ -1121,13 +1122,24 @@ states.choose_area_ap = {
update_front(f, s, get_active_faction());
resolve_active_and_proceed();
},
- standee(track_id: number) {
- insert_after_active_node(
- create_state_node('move_track_up_or_down', get_active_faction(), {
- track_id,
- strength: get_active_node()?.a.strength,
- })
- );
+ tr0(x: number) {
+ move_track_to(0, x);
+ resolve_active_and_proceed();
+ },
+ tr1(x: number) {
+ move_track_to(1, x);
+ resolve_active_and_proceed();
+ },
+ tr2(x: number) {
+ move_track_to(2, x);
+ resolve_active_and_proceed();
+ },
+ tr3(x: number) {
+ move_track_to(3, x);
+ resolve_active_and_proceed();
+ },
+ tr4(x: number) {
+ move_track_to(4, x);
resolve_active_and_proceed();
},
};
@@ -2051,6 +2063,18 @@ states.return_card = {
},
};
+function gen_spend_hero_points_move_track(track_id: number, change: number) {
+ for (let i = 1; i <= change; ++i) {
+ gen_move_track_change(track_id, i);
+ }
+}
+
+function pay_hero_points_to_move_track(track_id: number, new_value: number) {
+ const cost_per_step = [3, 3, 4, 2, 2];
+ const change = Math.abs(game.tracks[track_id] - new_value);
+ pay_hero_points(get_active_faction(), cost_per_step[track_id] * change);
+}
+
states.spend_hero_points = {
inactive: 'spend Hero points',
prompt() {
@@ -2060,8 +2084,6 @@ states.spend_hero_points = {
const faction = get_active_faction();
- gen_action('done');
-
if (hero_points === 0) {
return;
}
@@ -2084,21 +2106,27 @@ states.spend_hero_points = {
}
}
- gen_action_standee(FOREIGN_AID);
- gen_action_standee(SOVIET_SUPPORT);
+ gen_spend_hero_points_move_track(FOREIGN_AID, Math.floor(hero_points / 2));
+ gen_spend_hero_points_move_track(
+ SOVIET_SUPPORT,
+ Math.floor(hero_points / 2)
+ );
if (hero_points < 3) {
return;
}
- gen_action_standee(COLLECTIVIZATION);
- gen_action_standee(LIBERTY);
+ gen_spend_hero_points_move_track(
+ COLLECTIVIZATION,
+ Math.floor(hero_points / 3)
+ );
+ gen_spend_hero_points_move_track(LIBERTY, Math.floor(hero_points / 3));
if (hero_points < 4) {
return;
}
- gen_action_standee(GOVERNMENT);
+ gen_spend_hero_points_move_track(GOVERNMENT, Math.floor(hero_points / 4));
},
add_to_front() {
const faction = get_active_faction();
@@ -2111,9 +2139,6 @@ states.spend_hero_points = {
);
resolve_active_and_proceed();
},
- done() {
- resolve_active_and_proceed();
- },
bonus(b: number) {
update_active_node_args({
turn_on_bonus: false,
@@ -2138,24 +2163,29 @@ states.spend_hero_points = {
insert_after_active_node(create_state_node('remove_blank_marker', faction));
resolve_active_and_proceed();
},
- standee(track_id: number) {
- update_active_node_args({
- move_track: false,
- });
- let amount = 2;
- if (track_id === LIBERTY || track_id === COLLECTIVIZATION) {
- amount = 3;
- } else if (track_id === GOVERNMENT) {
- amount = 4;
- }
- const faction = get_active_faction();
- pay_hero_points(faction, amount);
- insert_after_active_node(
- create_state_node('move_track_up_or_down', faction, {
- track_id,
- strength: 1,
- })
- );
+ tr0(x: number) {
+ pay_hero_points_to_move_track(LIBERTY, x);
+ move_track_to(0, x);
+ resolve_active_and_proceed();
+ },
+ tr1(x: number) {
+ pay_hero_points_to_move_track(COLLECTIVIZATION, x);
+ move_track_to(1, x);
+ resolve_active_and_proceed();
+ },
+ tr2(x: number) {
+ pay_hero_points_to_move_track(GOVERNMENT, x);
+ move_track_to(2, x);
+ resolve_active_and_proceed();
+ },
+ tr3(x: number) {
+ pay_hero_points_to_move_track(SOVIET_SUPPORT, x);
+ move_track_to(3, x);
+ resolve_active_and_proceed();
+ },
+ tr4(x: number) {
+ pay_hero_points_to_move_track(FOREIGN_AID, x);
+ move_track_to(4, x);
resolve_active_and_proceed();
},
};
@@ -2327,7 +2357,7 @@ states.use_organization_medallion = {
let { t, v } = get_active_node_args();
- if (v > 0) {
+ if (v > game.tracks[t]) {
v++;
} else {
v--;
@@ -2914,14 +2944,24 @@ 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;
+function gen_move_track(track_id: number, new_value: number) {
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 gen_move_track_change(track_id: number, change: number) {
+ const current_value = game.tracks[track_id];
+
+ if (can_move_track_up(track_id)) {
+ gen_move_track(track_id, current_value + change);
+ }
+
+ if (can_move_track_down(track_id)) {
+ gen_move_track(track_id, current_value - change);
+ }
+}
+
function move_track(track_id: number, change: number) {
const current_value = game.tracks[track_id];
let new_value = current_value + change;