OK a few tests and I believe I can do what I want.
The setup is:
Skybox shader with something like:
//////////////////////////////////////////////////////////////////////////
// Sky box
textures/fogtest/skybox
{
qer_editorimage textures/mml_church_se_a1/mml_church_ft.tga
surfaceparm noimpact
surfaceparm nolightmap
surfaceparm nodlight
q3map_globaltexture
q3map_lightsubdivide 512
q3map_sun 1.0 1.0 0.9 120 220 60
q3map_surfacelight 100
fogvars ( 0.95 0.95 1.0 ) 8192
skyparms - 128 -
q3map_backsplash 0 0
q3map_bounce 0
}
The idea is this never ever gets drawn, it’s purely for lighting.
Then you have a skyportal in the middle of a cube. Onto the faces of this cube you paint your skybox manually. For now I’ve dumped an extremely bright light in the middle so all the skybox textures are as bright as can be (obviously you wouldn’t want shading on the fake skybox!).
So now, quite happily, I can change my fog as I want and the skybox is always maximum brightness.
Two remaining issues:
- Seams on the faked skybox
- Far fog clips, so skybox can be right in front of you if you set fogfar near.
Solutions (to be tested but as ever the theory should be ‘fine’ ;)):
- Set the shaders to not repeat. Then either inset the UVs slightly (probably easiest to make cube they paint onto 512x512, stretch them all to fit, then shrink the box sides by 1 unit and disable mipmaps, or else use the method detailled in the clampMap help in the updated q3map2 shader - only reason I don’t like that is cos it limits the visible part of the texture to 256x256 pixels maximum)
- Set up an extremely big script_mover that matches the 4 sides of the faked skybox. Onto the insides of this new box paint a texture to fit. This texture will basically be an alpha’ed texture - the colour will match one of the destination fog colours, while the fade is from totally translucent to fully opaque. It’ll use polygonoffset. Then, when a fog change is triggered, I simply scroll this script_mover up and it will appear like the skybox is getting fogged. Top and bottom would work similarly.
The above is the only way I can think of of making a texture change to a solid colour under scripted control.
If anyone can prove me wrong, I’ll be grateful 
Overall the skybox being drawn shouldn’t be too slow. It means it’ll be a static skybox with no clouds (could put them in on the faked bit but quite frankly I need the skybox to take as little CPU as possible), but it’s only drawing at most the 6 faked skybox faces, and 6 very large brushfaces for the blend (which won’t be all the time) - 12 polygons should cull reasonably well.
Now of course I want to ask:
What’s so bad about distance fog that people stopped using it? This last question kinda worries me - if there’s inherent bugs then I will have to stop this method entirely and give up 