Your provably fair algo is flawed as it doesn't protect the users from being cheated by the last player.
I can create a program to monitor the game address until it has 99 players and then start generating addresses until I find one that will make me the winner.
You are partly right, after some thought. You are wrong in the fact you cannot generate an address to send from. Your client, or you, have to spend previous outputs, these cannot be generated by you unless you continually send yourself coins in attempt to generate an output that could win. This output would have to contain enough coin for the game or it might not be selected as the payment address if multiple previous outputs are used.
So technically yes, this could be achieved through lots of work and many (possibly 100's) of txn fees to the network.
I have come up with a method to account for this and will post an update when the code is in place.
Thanks for taking the time to look at this!