I am also suffering from this crash. 2.1.1. It was the most recent Win32 from sourceforge on May 4th 2007. Version confesses "2.1.1 x86 May 1 2007 Win32 DEBUG"
I can produce it regularly, and can also avoid it regularly by calling back my original dropship and deploying another.
Looks like the line number in cl_team differs now to 613.
Part of my ufoconsole.log follows.
...added nations subsystem (check b)
Shared Client/Server Info loaded
====== UFO Initialized ======
Loading savegame
...version: 1
...game version: 2.1.1
Global data loaded - size (null)u bytes
...techs: 131
...buildings: 18
...ranks: 8
...nations: 8
Load 'slot0'
...subsystem 'base' - loaded 22988 bytes
Initializing aircraft and aircraft-items ...
...aircraft and aircraft-items inited
Activate stage ufos_are_coming
...subsystem 'campaign' - loaded 241 bytes
...subsystem 'hospital' - loaded 2 bytes
...subsystem 'market' - loaded 2176 bytes
...subsystem 'research' - loaded 6288 bytes
...subsystem 'employee' - loaded 31617 bytes
...subsystem 'aliencont' - loaded 0 bytes
...subsystem 'production' - loaded 61 bytes
...subsystem 'aircraft' - loaded 1 bytes
...subsystem 'messagesystem' - loaded 28458 bytes
...subsystem 'stats' - loaded 28 bytes
...subsystem 'nations' - loaded 32 bytes
File 'slot0' loaded.
Changing to Singleplayer
==== InitGame ====
------- Server Initialization -------
Created AI player (team 0)
Created AI player (team 7)
-------------------------------------
Map: pdi08n
pics
civilians/male/body02
civilians/male/head02
aliens/taman/body01
aliens/taman/head01
aliens/ortnok/body01
aliens/ortnok/head02
aliens/ortnokmedium/body01
aliens/ortnokmedium/head02
images
Unnamed has joined team 0
Unnamed has taken control over team 1.
Starting the game...
(player 0) It's team 1's round
==== ShutdownGame ====
here you can see the offending procedure from cl_team.c, lines 588 - 625.
assert(cp); is the implicated failure.
/**
* @brief
* @sa CL_AddWeaponAmmo
*/
extern void CL_ReloadAndRemoveCarried (equipDef_t * ed)
{
character_t *cp;
invList_t *ic, *next;
int p, container;
assert(baseCurrent);
assert((baseCurrent->aircraftCurrent >= 0) && (baseCurrent->aircraftCurrent < baseCurrent->numAircraftInBase));
/* Iterate through in container order (right hand, left hand, belt, */
/* holster, backpack) at the top level, i.e. each squad member reloads */
/* her right hand, then each reloads his left hand, etc. The effect */
/* of this is that when things are tight, everyone has the opportunity */
/* to get their preferred weapon(s) loaded before anyone is allowed */
/* to keep her spares in the backpack or on the floor. We don't want */
/* the first person in the squad filling their backpack with spare ammo */
/* leaving others with unloaded guns in their hands... */
Com_DPrintf("teamNum in aircraft %i: %i\n", baseCurrent->aircraftCurrent, baseCurrent->teamNum[baseCurrent->aircraftCurrent] );
for (container = 0; container < csi.numIDs; container++) {
for (p = 0; p < baseCurrent->teamNum[baseCurrent->aircraftCurrent]; p++) {
cp = baseCurrent->curTeam[p];
assert(cp);
for (ic = cp->inv->c[container]; ic; ic = next) {
next = ic->next;
if (ed->num[ic->item.t] > 0) {
ic->item = CL_AddWeaponAmmo(ed, ic->item);
} else {
/* drop ammo used for reloading and sold carried weapons */
Com_RemoveFromInventory(cp->inv, container, ic->x, ic->y);
}
}
}
}
}