Hi,
I racked my brain on this for about three days before realizing this: the reserve_transfer function is NOT the same as Transfer Player.
Internally, there is some difference. Externally, you can notice some effects, like $game_map.map_id not changing.
- Create a map (Map ID #1)
- Create another map (Map ID #2)
- Add a script event on map #1 that calls reserve_transfer to transfer to map #2
- Print out (raise, log, etc.) the value of $game_map.map_id directly after the reserve_transfer call
You'll notice the ID is still 1 (Map #1's ID). It appears that this doesn't change until the script finishes executing.
To give you a comparison, this is like the difference between Autorun and Parallel Process. Autorun events on a map run after the map is fully initialized and faded in; Parallel Process runs while the map is fading in.
Hopefully someone else will see this and not waste as much time as I did figuring it out. (The solution is, unfortunately, to use the Transfer Player map event; you can't achieve everything in code.)