Thanks to you HapoZen and to Muusisoosi who have notified me by email about this problem. This is not an engine problem but an old ID software hack combined with my modifications that cause the crash.
Just for the fun of developers, I post here the full explanation.
In g_spawn.c there is a hack added by J. Carmack or one of his teammates for correcting a mapper error :
Code:
// yet another map hack
if (!Q_stricmp(level.mapname, "command") && !Q_stricmp((*pent)->classname, "trigger_once") && !Q_stricmp((*pent)->model, "*27"))
(*pent)->spawnflags &= ~SPAWNFLAG_NOT_HARD;
This is ugly, but it was easiest for ID to upgrade the exe and the dll than upgrade the map. You all know the quake source is full of these littles gifts
The problem with coopordie occurs because the worldserver can remotely add new entity, including triggers. These triggers have no model value, their dimensions are provided by parameters value, not from a map brush. So the model member can be NULL, and the test CRASH !
A case of typical trigger_once added by the worldserver is for dead bodies persistence. It display a message like "Here lies
player X killed by
something".
So now, here is the right culprit :
mazdaplz is the only player who was dead in the "launch command" map. It was on october 15 of 2006
Don't blame him, I will release a new version with correction ASAP.
Code:
// yet another map hack
// <worldserver/> : the "(*pent)->model" test was added for preventing crash
// when parsing trigger added by xmlrules without model
if ( !Q_stricmp(level.mapname, "command") && !Q_stricmp((*pent)->classname, "trigger_once")
&& (*pent)->model && !Q_stricmp((*pent)->model, "*27") )
(*pent)->spawnflags &= ~SPAWNFLAG_NOT_HARD;
EDIT : correction is available, go to http://www.coopordie.com and download the new 0.5d version