To create the ghost trail effect we will create a new function.

This function creates a fading ghost trail by copying the player’s appearance, adding it to the scene, and gradually making it transparent until it disappears. 

Create a function called dash_effect()

This function relies on 4 local variables

visual_copy_of_player

This creates a copy (duplicate) of the player’s AnimatedSprite2D. This copy will be used as a "ghost" that appears behind the player to create the dash effect.

animation_time

This sets how long each fade step will last. It divides the dash duration by the dash speed to get a short delay for each step of the effect. 

fade_steps

how many times the ghost will fade gradually before disappearing. 

fade_amount

how much the ghost's opacity (or transparency) will decrease each time, giving it a fading effect. 



The rest of the code is explained below:

Line 118: get_parent().add_child(visual_copy_of_player) 

This adds the duplicated ghost sprite to the scene, making it visible as part of the game. 

Line 119: visual_copy_of_player.global_position = global_position 

This places the ghost copy at the same position as the player, so it appears exactly where the player is at the start of the dash. 

Line 122: for i in range(fade_steps): 

This starts a loop that will run for the number of times specified by fade_steps. Each loop iteration represents one step in the fading process. 

Line 123: await get_tree().create_timer(animation_time).timeout 

This line creates a timer for the duration of animation_time, pausing the loop momentarily. This creates a delay between each fade step.

Line 124: visual_copy_of_player.modulate.a -= fade_amount

This reduces the opacity (modulate.a) of the ghost by fade_amount, making it slightly more transparent each time the loop runs.

Line 127: visual_copy_of_player.queue_free() 

Once the loop finishes and the ghost has fully faded, this line removes the ghost from the scene, cleaning up to free memory. 

We don't need to call this function as it is triggered by the timer: