Great info Spike.
Can you elaborate more on the ground planes? Is that a map only specific or can QCC connect to it in some way?
I am also wondering if its just as simple as merely doing an old fashioned traceline from the player origin perhaps 2-4 units below its absolute min_z to check for either .solid or if the trace is touching world. Maybe assign the player a .touch field, call the traceline upon it touching something. Or perhaps .blocked would be better suited? I am guessing the difference between the 2 are .blocked checks for a velocity of 0 0 0 or whatever to call that field? Where .touch dont rely on anytning else at all except collision.
Interesting you mentioned makestatic. Lord Havoc has described that to me as if you were merely 'freezing' all the specifics that entity holds so its no longer a dynamic entity, which means in MP netplay, its no longer considered part of the sign-on packet. I am messing with this for my ng nails and I have it coded so that a nail will sometimes stick in the wall, and become static. If you remain in the game you can see the nails stuck in the walls , but if another player joins, they do not see the nails. I had hoped this would cut down on framerates on the client end, and also the number of entities in the netplay packets. On one map however there is a problem where you sign on and get message: "too many static entities" which I found very strange and yet have to look into.
So if indeed the engine removed static entities, I am not sure why it would be transmitting them in the sign on packets anymore unless this is just a DP only type bug.
Spike wrote:
Quake considers ground planes with a trace_plane_normal_z < 0.7 to be walls. It must be >0.7 for it to be considered ground, by the engine.
actually, one exception to that - makestatic contains an implicit remove. A copy of the ent lives on as a static entity, but the original qc entity is indeed removed in that case.
Even with csqc, the engine expects the csqc to call the final remove() on entities that left pvs (this allows entities to live on as explosions or corpses or whatever, which is handy with the pvsf_noremove flag, which is really handy with allowing longer-lived event entities).