The keep state rules do not take care of it because there may be no existing state to keep. The reason this kind of translation works for Starcraft is that its version of Battle.net expects Starcraft to be listening on the same port as was used for the source port. It then tells the other players that you are listening on that port number. For Starcraft you can also change the source port number through the registry, but the router needs to be told not to change the source port when it translates the outbound packets. In either case a port forward is needed, though.
For Warcraft III, its version of Battle.net does not care about the source port. It directly tells Battle.net what port it is listening on instead. Because of this, it only requires a simple port forward with the external and local ports set the same and no special outbound configuration.