class_name DrunkDrivingCard extends Card func _init(): super._init() cardName = "Drunk Driving" rank = Rank.RANK_1 duration = 1 effectType = EffectType.SPECIAL_ACTION description = "Force peice to careen towards the enemy side, capturing all pieces in its path" unitWhitelist = ["Rook", "Queen"] func apply_effect(target_piece = null, board_flow = null, game_state = null): if !super.apply_effect(target_piece, board_flow, game_state): return false if !target_piece or !board_flow or !game_state: return false # Get current container and position var current_container = target_piece.get_parent() as PieceContainer var current_pos = current_container.name.split("-") var current_x = int(current_pos[0]) var current_y = int(current_pos[1]) # Calculate target position var target_y = game_state.boardYSize - 1 if target_piece.Item_Color == 1 else 0 var y_direction = 1 if target_y > current_y else -1 # Generate tiles to check var tiles_to_check = [] var y = current_y + y_direction while y != target_y + y_direction: tiles_to_check.append(str(current_x) + "-" + str(y)) y += y_direction if game_state.isPlayerTurn(): print("") else: print("REVERSING TILES TO CHECK") tiles_to_check.reverse() # Find final position (stop before any impassable tile) var final_y = target_y for tile_name in tiles_to_check: var tile = game_state.tileManager.get_tile(tile_name) if tile && !tile.passable: # Stop at the tile before this one var tile_y = int(tile_name.split("-")[1]) final_y = tile_y - y_direction break # Process pieces in path for tile_name in tiles_to_check: var tile = game_state.tileManager.get_tile(tile_name) if tile && !tile.passable: # print("CHECKING TILES ", tile_name, " passable ", tile.passable) break # elif !tile: # print("CHECKING TILES ", tile_name, " no tile") # Only process tiles up to where we're stopping var container = board_flow.get_node(tile_name) as PieceContainer if container.has_piece(): var piece_to_capture = container.get_piece() game_state.updatePointsAndCapture(piece_to_capture) # Move piece to final position print("FINAL TILES ", str(current_x) + "-" + str(final_y)) var final_container = board_flow.get_node(str(current_x) + "-" + str(final_y)) as PieceContainer # print("FINAL TILES ", final_container.get_piece().Item_Color) # Important: Need to remove the piece from its current container first # AND keep a reference to it target_piece = current_container.get_piece() # Get reference before removing final_container.animate_movement(current_container, target_piece) game_state.currentlyMovingPiece = target_piece burned = true game_state.resolveMoveEffects() game_state.clearSelection() game_state.stateMachine.transitionToNextState(Constants.POST_MOVE) # Breaks Stockfish for some reason return true