rem: init_sis ()
add: init_sis (void)
context: init_sis (){	RACE_DESCPTR RaceDescPtr;	COUNT i;	static RACE_DESC new_sis_desc;	/* copy initial ship settings to new_sis_desc */	new_sis_desc = sis_desc;	if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE)	{		for (i = 0; i < NUM_VIEWS; ++i)		{			new_sis_desc.ship_data.ship[i] = 0;			new_sis_desc.ship_data.weapon[i] = 0;			new_sis_desc.ship_data.special[i] = 0;		}		new_sis_desc.ship_info.icons = 0;		new_sis_desc.ship_data.captain_control.background = 0;		new_sis_desc.ship_data.victory_ditty = 0;		new_sis_desc.ship_data.ship_sounds = 0;			new_sis_desc.ship_data.ship[0] = (FRAME)SIS_HYPER_MASK_PMAP_ANIM;		new_sis_desc.preprocess_func = sis_hyper_preprocess;		new_sis_desc.postprocess_func = sis_hyper_postprocess;		new_sis_desc.characteristics.max_thrust -= 4;	}	else	{		new_sis_desc.preprocess_func = sis_battle_preprocess;		new_sis_desc.postprocess_func = sis_battle_postprocess;		new_sis_desc.init_weapon_func = initialize_blasters;		new_sis_desc.cyborg_control.intelligence_func =				(void (*) (PVOID ShipPtr, PVOID ObjectsOfConcern, COUNT						ConcernCounter)) sis_intelligence;		num_trackers = 0;		for (i = 0; i < NUM_MODULE_SLOTS; ++i)		{			BYTE which_mod;			which_mod = GLOBAL_SIS (ModuleSlots[					(NUM_MODULE_SLOTS - 1) - i					]);			switch (which_mod)			{				case GUN_WEAPON:				case BLASTER_WEAPON:				case CANNON_WEAPON:					new_sis_desc.characteristics.weapon_energy_cost +=							(which_mod - GUN_WEAPON + 1) * 2;					if (i <= 1)						new_sis_desc.ship_info.ship_flags |= FIRES_FORE;					else if (i == 2)						new_sis_desc.ship_info.ship_flags |= FIRES_LEFT | FIRES_RIGHT;					else						new_sis_desc.ship_info.ship_flags |= FIRES_AFT;					break;				case TRACKING_SYSTEM:					++num_trackers;					break;				case ANTIMISSILE_DEFENSE:					++new_sis_desc.characteristics.special_energy_cost;					break;				case SHIVA_FURNACE:					++new_sis_desc.characteristics.energy_regeneration;					break;				case DYNAMO_UNIT:					if ((new_sis_desc.characteristics.energy_wait -= 2) < 4)						new_sis_desc.characteristics.energy_wait = 4;					break;			}		}		if (num_trackers > MAX_TRACKING)			num_trackers = MAX_TRACKING;		new_sis_desc.characteristics.weapon_energy_cost += num_trackers * 3;		if (new_sis_desc.characteristics.special_energy_cost)		{			new_sis_desc.ship_info.ship_flags |= POINT_DEFENSE;			if (new_sis_desc.characteristics.special_energy_cost > MAX_DEFENSE)				new_sis_desc.characteristics.special_energy_cost = MAX_DEFENSE;		}		if (GET_GAME_STATE (CHMMR_BOMB_STATE) == 3)		{			SET_GAME_STATE (BOMB_CARRIER, 1);		}	}	new_sis_desc.characteristics.thrust_wait = 0;	for (i = 0; i < NUM_DRIVE_SLOTS; ++i)	{		switch (GLOBAL_SIS (DriveSlots[i]))		{			case FUSION_THRUSTER:				new_sis_desc.characteristics.max_thrust += 2;				++new_sis_desc.characteristics.thrust_wait;				break;		}	}	new_sis_desc.characteristics.thrust_wait = (BYTE)(			THRUST_WAIT			- (new_sis_desc.characteristics.thrust_wait >> 1)			);	new_sis_desc.characteristics.max_thrust =			((new_sis_desc.characteristics.max_thrust /			new_sis_desc.characteristics.thrust_increment) + 1)			* new_sis_desc.characteristics.thrust_increment;	for (i = 0; i < NUM_JET_SLOTS; ++i)	{		switch (GLOBAL_SIS (JetSlots[i]))		{			case TURNING_JETS:				new_sis_desc.characteristics.turn_wait -= 2;				break;		}	}	if (GLOBAL_SIS (CrewEnlisted) < MAX_CREW - 1)		new_sis_desc.ship_info.crew_level = (BYTE)(				GLOBAL_SIS (CrewEnlisted) + 1				);	new_sis_desc.ship_info.energy_level = new_sis_desc.ship_info.max_energy;	RaceDescPtr = &new_sis_desc;	return (RaceDescPtr);}