After going around and around for a while trying to satisfy the compiler, you’ll eventually conclude that either the game loop must hold no mutable state at all or that the actors must not get mutable access to the game state. The easiest solution is to give actors a read–only view of the world and have them produce a list of changes that they would like to make. Then the whole thing becomes trivially parallelizable. It doesn’t matter how many threads you scatter the actors out over because none of them are modifying the world. You just gather up the list of changes and merge them. Even merging them can be incremental and spread over multiple threads if your merge is associative.
Of course for some game designs you may still need or want the actors to be more serialized than that. For example in Factorio there are dependencies between inserters and belts and power networks and circuit conditions and so on. The inserters cannot be updated before the power networks or circuit conditions have been computed, and so on. But that just means that you have multiple steps where you scatter the computation for some set of actors across all available cpus, gather the results into a single list of changes to the world, then update the world based on those changes.