From 92f2c633812483d73ae294ea6374321ddbf77827 Mon Sep 17 00:00:00 2001 From: Alexander Vansach Date: Sat, 12 Oct 2024 23:02:33 +0200 Subject: [PATCH 1/2] System18: Remove discarded trains from the game Fixes #11264 --- lib/engine/game/g_system18/game.rb | 10 +++++++-- .../game/g_system18/step/discard_train.rb | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 lib/engine/game/g_system18/step/discard_train.rb diff --git a/lib/engine/game/g_system18/game.rb b/lib/engine/game/g_system18/game.rb index 38088d6bc9..a402f776e4 100644 --- a/lib/engine/game/g_system18/game.rb +++ b/lib/engine/game/g_system18/game.rb @@ -460,7 +460,7 @@ def operating_steps GSystem18::Step::Token, Engine::Step::Route, GSystem18::Step::Dividend, - Engine::Step::DiscardTrain, + GSystem18::Step::DiscardTrain, GSystem18::Step::BuyTrain, ] else @@ -475,7 +475,7 @@ def operating_steps GSystem18::Step::Token, Engine::Step::Route, GSystem18::Step::Dividend, - Engine::Step::DiscardTrain, + GSystem18::Step::DiscardTrain, GSystem18::Step::BuyTrain, [Engine::Step::BuyCompany, { blocks: true }], ] @@ -692,6 +692,12 @@ def place_home_token(corporation) send("map_#{map_name}_place_home_token", corporation) end + + def remove_discarded_train?(train) + return true unless respond_to?("map_#{map_name}_remove_discarded_train?") + + send("map_#{map_name}_remove_discarded_train?", train) + end end end end diff --git a/lib/engine/game/g_system18/step/discard_train.rb b/lib/engine/game/g_system18/step/discard_train.rb new file mode 100644 index 0000000000..1e541aafc8 --- /dev/null +++ b/lib/engine/game/g_system18/step/discard_train.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require_relative '../../../step/discard_train' + +module Engine + module Game + module GSystem18 + module Step + class DiscardTrain < Engine::Step::DiscardTrain + def process_discard_train(action) + train = action.train + + return super unless @game.remove_discarded_train?(train) + + @game.remove_train(train) + @log << "#{action.entity.name} discards #{train.name}, #{train.name} is removed from the game" + end + end + end + end + end +end From 62c42862b34dbba140fc1cdb21424c294efae81f Mon Sep 17 00:00:00 2001 From: Alexander Vansach Date: Sun, 13 Oct 2024 10:02:04 +0200 Subject: [PATCH 2/2] System18: Remove discarded trains from the game in correct way --- lib/engine/game/g_system18/game.rb | 11 +++------- .../game/g_system18/step/discard_train.rb | 22 ------------------- 2 files changed, 3 insertions(+), 30 deletions(-) delete mode 100644 lib/engine/game/g_system18/step/discard_train.rb diff --git a/lib/engine/game/g_system18/game.rb b/lib/engine/game/g_system18/game.rb index a402f776e4..8e521303d3 100644 --- a/lib/engine/game/g_system18/game.rb +++ b/lib/engine/game/g_system18/game.rb @@ -278,6 +278,7 @@ class Game < Game::Base BANKRUPTCY_ENDS_GAME_AFTER = :one STATUS_TEXT = {}.freeze TILE_UPGRADES_MUST_USE_MAX_EXITS = [].freeze + DISCARDED_TRAINS = :remove def find_map_name optional_rules&.find { |r| r.to_s.include?('map_') }&.to_s&.delete_prefix('map_')&.downcase @@ -460,7 +461,7 @@ def operating_steps GSystem18::Step::Token, Engine::Step::Route, GSystem18::Step::Dividend, - GSystem18::Step::DiscardTrain, + Engine::Step::DiscardTrain, GSystem18::Step::BuyTrain, ] else @@ -475,7 +476,7 @@ def operating_steps GSystem18::Step::Token, Engine::Step::Route, GSystem18::Step::Dividend, - GSystem18::Step::DiscardTrain, + Engine::Step::DiscardTrain, GSystem18::Step::BuyTrain, [Engine::Step::BuyCompany, { blocks: true }], ] @@ -692,12 +693,6 @@ def place_home_token(corporation) send("map_#{map_name}_place_home_token", corporation) end - - def remove_discarded_train?(train) - return true unless respond_to?("map_#{map_name}_remove_discarded_train?") - - send("map_#{map_name}_remove_discarded_train?", train) - end end end end diff --git a/lib/engine/game/g_system18/step/discard_train.rb b/lib/engine/game/g_system18/step/discard_train.rb deleted file mode 100644 index 1e541aafc8..0000000000 --- a/lib/engine/game/g_system18/step/discard_train.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -require_relative '../../../step/discard_train' - -module Engine - module Game - module GSystem18 - module Step - class DiscardTrain < Engine::Step::DiscardTrain - def process_discard_train(action) - train = action.train - - return super unless @game.remove_discarded_train?(train) - - @game.remove_train(train) - @log << "#{action.entity.name} discards #{train.name}, #{train.name} is removed from the game" - end - end - end - end - end -end