IntelOrca/OpenRCT2 — pull request #341 by qcz (2014-08-20 13:56:38+00:00)
Title: Decompile the hire staff game command

This pull request contains the decompiled version of the hire staff game command.
The implementation was almost straightforward except one thing: this command returns the new staff member ID in the `EDI` register, and this information is required on the caller site. Unfortunately the code generated by MSVC pops this register at the end of the function, so the value I set with inline assembly will be unavailable. To circumvent this I created a new game command table with function pointers like this:
`typedef void (GAME_COMMAND_POINTER)(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp);`
With this we can set any register to any value as required by the command implementations (It is more than possible that more game commands return values to the caller site.)
If a function pointer in the original `game_do_command_table` is set to 0, the `game_do_command(_p)` function will use this new game command table.
It's not the nicest solution IMO, but had no better idea, so suggestions are welcome.
Also, game command stuff should be moved to a new file as `game.c` is getting very huge.