you can greyscale (or whatever) the original 8bit image and treat it as a heightmap and generate a normalmap from that, which is what tenebrae did.
while FTE can do that, it doesn't do so by default because imho its ugly. I think DP is the same.
instead a normalmap with x=0,y=0,z=1 is perfectly sufficient. note that if your lighting directions are in worldspace then you'll need some sort of matrix to rotate the lighting directions into surface space (if you have an rtlight you can just do this on the cpu as you submit the texture coords for each vertex), and they also need to be normalised instead of saturating (cubemaps are handy for this if you're stuck with fixed function hardware). if you're doing deluxmapping (mapname.lux files) then both textures should already encode both vectors in surface space so you can just do a simple dotproduct and scale the per-pixel lighting by the result of that. Do note that you'll end up with darker lighting everywhere that the two vectors don't exactly match - you might want some bias or bounds or ambient lighting or something.
but yeah, if you want some placeholder normalmap, fill it with that pastely blue colour, and it'll effectively be perfectly flat.
and yes, removing hacks takes much longer than originally implementing them did... don't worry about removing them all at once because you'll never get it working again afterwards.

I assume you mean svc_spawnstatic... with the bjp1-3 protocols, the modelindex value is always a short. the vanilla protocol (including nehahra's demos) uses bytes.
if you can play a demo recorded by another engine using that protocol, then the problem is probably in your server (you can also run your server with -dedicated and see if the other client can connect okay as a demonstration that a server-protocol bug doesn't discriminate).
.