Why is get_tree().paused = true pausing PARTS of a node that is set to PAUSE_MODE_PROCESS all the way up the tree?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By jerryjrowe

So I have a problem I do not entirely understand that is related to get_tree().paused .

My game is one root node (“Rooty”) with two child nodes (“Overworld” and “Combat”). Overworld also has 2 child nodes: one Player node and one Enemy node. The Player and the Enemy are KinematicBody2D nodes with a 2D collision shape child, and their shapes are not disabled.

In order to make the Combat node as performant as possible, I had this idea:

First, I made:

Rooty.pause_mode = PAUSE_MODE_PROCESS
Combat.pause_mode = PAUSE_MODE_PROCESS
Player.pause_mode = PAUSE_MODE_PROCESS
Enemy.pause_mode = PAUSE_MODE_PROCESS

Then I made:

Overworld.pause_mode = PAUSE_MODE_STOP

When the Player encounters the Enemy on the Overworld, it unparents both of them from the Overworld node, and makes both of them children of the Combat node. Then, I call get_tree().paused = true.

I thought that this would just pause the Overworld node, but…

This is the problem!
The KinematicBody2D of the Player and Enemy nodes stop moving when .paused = true, even though they are all set to process.

The Player and Enemy still respond properly to input, and properly move around the screen. Even children of the KinematicBody2D’s shape are visibly moving correctly around the screen.
In order to test this, I added a sprite and made it a child of the 2D collision shape. This square properly follows the Player and Enemy, but the shape, evidently, does not move. Instead, the KinematicBody2D’s shape stops in place the moment get_tree().paused = true.

I don’t understand why this would happen if all of those nodes are set to PAUSE_MODE_PROCESS.

I know the documentation says that it stops calling physics processes, but it also says it stops processing input and other things. But it is clearly accepting input and moving things around the screen, so I assume it means it stops calling physics processes on non-whitelisted nodes. But maybe I am misunderstanding the documentation.

So…does anyone know why the KinematicBody2D’s collision2D shape would stop in place, even when it is set to PAUSE_MODE_PROCESS?