rem: SET_GAME_STATE (WHY_MELNORME_PURPLE, 1)
add: SET_GAME_STATE (WHY_MELNORME_PURPLE, 1);
context: NatureOfConversation (RESPONSE_REF R){	BYTE num_new_rainbows;	UWORD rainbow_mask;	COUNT Credit;	if (PLAYER_SAID (R, get_on_with_business))	{		SET_GAME_STATE (MELNORME_YACK_STACK2, 5);		R = 0;	}	Credit = DeltaCredit (0);	if (R == 0)	{		BYTE stack;		stack = (BYTE)(GET_GAME_STATE (MELNORME_YACK_STACK2) - 5);		switch (stack++)		{			case 0:				NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_1);				break;			case 1:				NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_2);				break;			case 2:				NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_3);				break;			case 3:				NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_4);				break;			case 4:				NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_5);				break;			case 5:				NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_6);				break;			case 6:				NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_7);				break;			case 7:				NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_8);				break;			case 8:				NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_9);				break;			default:				--stack;				NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_10);				break;		}		SET_GAME_STATE (MELNORME_YACK_STACK2, stack + 5);	}	rainbow_mask = MAKE_WORD (			GET_GAME_STATE (RAINBOW_WORLD0),			GET_GAME_STATE (RAINBOW_WORLD1)			);	num_new_rainbows = (BYTE)(-GET_GAME_STATE (MELNORME_RAINBOW_COUNT));	while (rainbow_mask)	{		if (rainbow_mask & 1)			++num_new_rainbows;		rainbow_mask >>= 1;	}	if (GLOBAL_SIS (FuelOnBoard) > 0			|| GLOBAL_SIS (TotalBioMass)			|| Credit			|| num_new_rainbows)	{		if (!GET_GAME_STATE (TRADED_WITH_MELNORME))		{			SET_GAME_STATE (TRADED_WITH_MELNORME, 1);			NPCPhrase (TRADING_INFO);		}		if (R == 0)		{				/* Melnorme reports any news and turns purple */			NPCPhrase (BUY_OR_SELL);			AlienTalkSegue(1);			XFormPLUT (GetColorMapAddress (					SetAbsColorMapIndex (CommData.AlienColorMap, 1)					), ONE_SECOND / 2);			AlienTalkSegue((COUNT)~0);		}		else if (PLAYER_SAID (R, why_turned_purple))		{			SET_GAME_STATE (WHY_MELNORME_PURPLE, 1)			NPCPhrase (TURNED_PURPLE_BECAUSE);		}		else if (PLAYER_SAID (R, done_selling))		{			NPCPhrase (OK_DONE_SELLING);		}		else if (PLAYER_SAID (R, done_buying))		{			NPCPhrase (OK_DONE_BUYING);		}		if (!GET_GAME_STATE (WHY_MELNORME_PURPLE))		{			Response (why_turned_purple, NatureOfConversation);		}		if (!AskedToBuy)			Response (buy, DoBuy);		if (PHRASE_ENABLED (sell))			Response (sell, DoSell);		Response (goodbye, ExitConversation);	}	else /* needs to be rescued */	{		if (GET_GAME_STATE (MELNORME_RESCUE_REFUSED))		{			NPCPhrase (CHANGED_MIND);			Response (yes_changed_mind, DoRescue);			Response (no_changed_mind, ExitConversation);		}		else		{			BYTE num_rescues;			num_rescues = GET_GAME_STATE (MELNORME_RESCUE_COUNT);			switch (num_rescues)			{				case 0:					NPCPhrase (RESCUE_EXPLANATION);					break;				case 1:					NPCPhrase (RESCUE_AGAIN_1);					break;				case 2:					NPCPhrase (RESCUE_AGAIN_2);					break;				case 3:					NPCPhrase (RESCUE_AGAIN_3);					break;				case 4:					NPCPhrase (RESCUE_AGAIN_4);					break;				case 5:					NPCPhrase (RESCUE_AGAIN_5);					break;			 }			if (num_rescues < 5)			{				++num_rescues;				SET_GAME_STATE (MELNORME_RESCUE_COUNT, num_rescues);			}			NPCPhrase (SHOULD_WE_HELP_YOU);			Response (yes_help, DoRescue);			Response (no_help, ExitConversation);		}	}}