Hey @picnic!
Sorry about the late reply, was busy with other stuff :smile:
I looked at the project, and I think I see why the initial problem was not working. I changed the code and added a comments on things I changed, hopefully explaining how it works, and why I changed what I did. One thing I did not realize until looking at the code was you are calling add_child before setting the position, which made old_position always equal (0,0) (assuming it was not being set in _physics_process). I changed the code to store the starting position, and now when two faces collide, their positions are reset correctly.
As for stopping the sound, you can just need to use $GrowlSound.stop() (I think that is the name of the node) and that will stop the sound from playing.
I also changed the color of the sprites based on which type they are to make it easier to tell which move and which do not. This is just a personal preference, as I like to know which node does what at a glance. Feel free to remove the code if you want! I added a comment showing which part changes the color.
Feel free to remove/change anything I added to the project! Hopefully it will help!