How are you matching the functions btw?
A general way is:
1. Find functions with matching strings. Even if functions are a bit different, debug strings inside are often identical. So these are no-brainers, you just need to check whether size of the function is similar (to notice functions inlined into caller).
2. Check which functions are called within, and are callers of the functions you already named. Try to match them based on size and the offset within function where the `call` command is.
3. Check if functions before and after given one match. Functions are linked in the order they had in source file, so if a file contained multiple functions, you get names to all of them. Some functions are missing in some games due to removal of unused code (though Syndicate Wars beta I'm using had that optimization disabled, so all functions are there in the exact order they had in source files; it also has inlining completely disabled. Useful.)
4. While naming functions, skim them and also name global vars which are accessed within. Then check in which functions each global is used, match them based on function size and offset within function where the variable is used.
After repeating 2-4 multiple times, there are usually only a few missing. These need to be matched by looking at assembly code.
Some functions are a bit changed between games; in that case I'm just gathering multiple pieces of evidence (callers, callee, globals, code structure) before deciding that these are representations of the same function.
If you were hoping for a plugin which matches functions automatically - there is such plugin for IDA, I used in in the past. It mostly works. Though in the end I tend to check each function anyway just to be sure, so I'm not using that anymore.