I was pretty surprised when the approach chosen for the instantiation of the rocket projectile was to instantiate it as the child of a node which doesn’t have a transform.
The approach that is usually used and recommended, if you want your instance to be independent from the script/node spawning it, is to instantiate something as a child of the root of the scene tree - so get_tree().get_root().add_child(instance).
Doing it as a child of a nested node of type node has the same effect in regards to relative movement, however it obscures the fact that the instances are not living independently in the scene tree and instead still remain children of the player instance.
What would be the benefit of this approach?
A clear downside here is that if the parent node, in this case the player is destroyed, all bullet instance are destroyed too. For the player this may not matter as much, but if this approach were used on a shooting enemy, it would be very weird behavior.