rem: NPCPhrase_cb (int index,  void (*cb) ())
add: NPCPhrase_cb (int index,  void (*cb) (void))
context: NPCPhrase_cb (int index,  void (*cb) ()){	UNICODE *pStr, numbuf[100];	void *pClip, *pTimeStamp;	switch (index)	{		case GLOBAL_PLAYER_NAME:			pStr = GLOBAL_SIS (CommanderName);			pClip = 0;			pTimeStamp = 0;			break;		case GLOBAL_SHIP_NAME:			pStr = GLOBAL_SIS (ShipName);			pClip = 0;			pTimeStamp = 0;			break;		case GLOBAL_PLAYER_LOCATION:		{			SIZE dx, dy;			COUNT adx, ady;			dx = LOGX_TO_UNIVERSE (GLOBAL_SIS (log_x)) - 333;			adx = dx >= 0 ? dx : -dx;			dy = 9812 - LOGY_TO_UNIVERSE (GLOBAL_SIS (log_y));			ady = dy >= 0 ? dy : -dy;			wsprintf (numbuf,					"%+04d.%01u,%+04d.%01u",					(SIZE)(dy / 10), (COUNT)(ady % 10),					(SIZE)(dx / 10), (COUNT)(adx % 10));			pStr = numbuf;			pClip = 0;			pTimeStamp = 0;			break;		}		case 0:		{			return;		}		default:			if (index < 0)			{				if (index > UNREASONABLE_NUMBER)				{					if (CommData.AlienNumberSpeech)					{						NPCNumberPhrase (-index, NULL);						return;					}					sprintf (numbuf, "%d", -index);				}				else				{					COUNT i;					STRING S;					index -= GLOBAL_ALLIANCE_NAME;					i = GET_GAME_STATE (NEW_ALLIANCE_NAME);					S = SetAbsStringTableIndex (CommData.ConversationPhrases, (index - 1) + i);					wstrcpy (numbuf, (UNICODE *)GetStringAddress (S));					if (i == 3)						wstrcat (numbuf, GLOBAL_SIS (CommanderName));				}				pStr = numbuf;				pClip = 0;				pTimeStamp = 0;			}			else			{				pStr = (UNICODE *)GetStringAddress (						SetAbsStringTableIndex (CommData.ConversationPhrases, index - 1)						);				pClip = GetStringSoundClip (						SetAbsStringTableIndex (CommData.ConversationPhrases, index - 1)						);				pTimeStamp = GetStringTimeStamp (						SetAbsStringTableIndex (CommData.ConversationPhrases, index - 1)						);			}			break;	}	SpliceTrack (pClip, pStr, pTimeStamp, cb);}