The function func_45b40 (at offset 45b40 in original EXE) is an implementation of random generator. The function next to it is the same. They only differ on where they store prevoius result - most likely one is used for random numbers which require to be identical for all players (in network game), and 2nd generates random numbers specific to a player (ie. for effects randomization which is not synchronized between player). In KeeperFX (which is remake of Dungeon Keeper, which is based on the same engine) these are named UNSYNC_RANDOM() and ACTION_RANDOM().
Anyway, KeeperFX could help in giving names to many functions. Same goes with INSTALL.EXE from SW, which has debug symbols (function names and variable names) left inside.
For example, at 13C220 we have _Unsmack() function from RAD Smacker library; then goes _SmackDoPCM at 13C5F0, and _SmackGetSizeDeltas, _SmackGetRect, finally _SmackRemapTables at 13CF60.
And not only Smacker is easy to find - at 41950 we have W?setup_language$n()v, which is called from W?game_setup$n()l at 41668. At 8C510 is LbIKeyboardOpen_, and below at 8C554 - LbIKeyboardClose_.
At DC6A0 there's memory allocation - LbMemoryAlloc_, then LbMemoryAllocLow_, LbMemoryCheck_, LbMemoryFree_, LbMemoryGrow_ at DC920 and other memory related routines.
E0C90 is LbScreenSetup_, E0CC0 - LbScreenIsModeAvailable_, then sprites loading routines, and at E0FFB we have standard C library sprintf_.
I found a lot more, but to really see it you need to use IDA Pro.
I think about 1/3 of all the functions in SW can be named by comparing them to debug binaries of Magic Carpet, SW Install and Dungeon Keeper.
It just requires a lot of time to do so.