diff options
author | Frans Bongers <fransbongers@macbookpro.home> | 2025-03-11 21:48:13 +0100 |
---|---|---|
committer | Frans Bongers <fransbongers@macbookpro.home> | 2025-03-11 21:48:13 +0100 |
commit | 56871d01a90bfa23e6f959b69c1d751c6b2903ea (patch) | |
tree | e0ea7d89d65aecb72c52260653bced0f0a24a7ec /rules.ts | |
parent | b596edb8672efb58649b8ef6aedeb6c6a3cb5d24 (diff) | |
download | land-and-freedom-56871d01a90bfa23e6f959b69c1d751c6b2903ea.tar.gz |
fix: game stuck when moving track at max
Diffstat (limited to 'rules.ts')
-rw-r--r-- | rules.ts | 36 |
1 files changed, 29 insertions, 7 deletions
@@ -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) { |