summaryrefslogtreecommitdiff
path: root/rules.ts
diff options
context:
space:
mode:
authorFrans Bongers <fransbongers@macbookpro.home>2025-03-11 21:48:13 +0100
committerFrans Bongers <fransbongers@macbookpro.home>2025-03-11 21:48:13 +0100
commit56871d01a90bfa23e6f959b69c1d751c6b2903ea (patch)
treee0ea7d89d65aecb72c52260653bced0f0a24a7ec /rules.ts
parentb596edb8672efb58649b8ef6aedeb6c6a3cb5d24 (diff)
downloadland-and-freedom-56871d01a90bfa23e6f959b69c1d751c6b2903ea.tar.gz
fix: game stuck when moving track at max
Diffstat (limited to 'rules.ts')
-rw-r--r--rules.ts36
1 files changed, 29 insertions, 7 deletions
diff --git a/rules.ts b/rules.ts
index c84bbf7..31d4e92 100644
--- a/rules.ts
+++ b/rules.ts
@@ -1101,18 +1101,26 @@ states.choose_area_ap = {
gen_spend_hero_points();
view.prompt = 'Use Action Points.';
const strength: number = get_active_node_args().strength;
+ let can_use_ap = false;
for (const track of tracks) {
- gen_move_track_change(track.id, strength);
+ can_use_ap = gen_move_track_change(track.id, strength) || can_use_ap;
}
const fronts = get_fronts_to_add_to(ANY);
+ if (fronts.length > 0) {
+ can_use_ap = true;
+ }
for (const front of fronts) {
gen_action_front(front);
}
for (const bonus of bonuses) {
if (game.bonuses[bonus] === OFF) {
gen_action_bonus(bonus);
+ can_use_ap = true;
}
}
+ if (!can_use_ap) {
+ gen_action('skip');
+ }
},
spend_hp() {
resolve_spend_hp();
@@ -1156,6 +1164,9 @@ states.choose_area_ap = {
move_track_to(4, x);
resolve_active_and_proceed();
},
+ skip() {
+ resolve_active_and_proceed();
+ },
};
states.change_bonus = {
@@ -1652,18 +1663,23 @@ states.move_track = {
view.prompt = `Move ${name} away from center.`;
}
+ let can_move_track = false;
+
if (track === LIBERTY_OR_COLLECTIVIZATION) {
- gen_move_track(LIBERTY, game.tracks[LIBERTY] + value);
- gen_move_track(COLLECTIVIZATION, game.tracks[COLLECTIVIZATION] + value);
+ can_move_track = gen_move_track(LIBERTY, game.tracks[LIBERTY] + value) || can_move_track;
+ can_move_track = gen_move_track(COLLECTIVIZATION, game.tracks[COLLECTIVIZATION] + value) || can_move_track;
} else if (
track === GOVERNMENT &&
(value === TOWARDS_CENTER || value === AWAY_FROM_CENTER)
) {
const direction = get_government_track_direction(value);
// Value equals direction because away / towards always moves 1 step
- gen_move_track(track, game.tracks[track] + direction);
+ can_move_track = gen_move_track(track, game.tracks[track] + direction) || can_move_track;
} else {
- gen_move_track(track, game.tracks[track] + value);
+ can_move_track = gen_move_track(track, game.tracks[track] + value) || can_move_track;
+ }
+ if (!can_move_track) {
+ gen_action('skip');
}
},
spend_hp() {
@@ -1689,6 +1705,9 @@ states.move_track = {
move_track_to(4, x);
resolve_active_and_proceed();
},
+ skip() {
+ resolve_active_and_proceed();
+ },
};
/**
@@ -1740,6 +1759,7 @@ function can_move_track_down(track_id): boolean {
return true;
}
+// NOTE: we can probably remove this state. I don't think it's used anywhere anymore
states.move_track_up_or_down = {
inactive: 'move a track',
auto_resolve() {
@@ -3003,13 +3023,15 @@ function gen_move_track(track_id: number, new_value: number) {
function gen_move_track_change(track_id: number, change: number) {
const current_value = game.tracks[track_id];
+ let can_move_track = false;
if (can_move_track_up(track_id)) {
- gen_move_track(track_id, current_value + change);
+ can_move_track = gen_move_track(track_id, current_value + change) || can_move_track;
}
if (can_move_track_down(track_id)) {
- gen_move_track(track_id, current_value - change);
+ can_move_track = gen_move_track(track_id, current_value - change) || can_move_track;
}
+ return can_move_track;
}
function move_track(track_id: number, change: number) {