changeset 656:6abf5b610585

OnSelectNPCDialogueOption clean
author zipi
date Tue, 12 Mar 2013 21:58:10 +0000
parents 6a2d29c21d09
children cec42951eda0
files mm7_4.cpp
diffstat 1 files changed, 204 insertions(+), 202 deletions(-) [+]
line wrap: on
line diff
--- a/mm7_4.cpp	Tue Mar 12 21:07:57 2013 +0000
+++ b/mm7_4.cpp	Tue Mar 12 21:58:10 2013 +0000
@@ -10811,7 +10811,7 @@
 //----- (004BC49B) --------------------------------------------------------
 void OnSelectNPCDialogueOption(DIALOGUE_TYPE newDialogueType)
 {
-    //unsigned int v1; // esi@1
+	//unsigned int v1; // esi@1
     NPCData *speakingNPC; // ebp@1
     //unsigned int v3; // eax@1
     int npc_event_id; // ecx@10
@@ -10828,208 +10828,210 @@
     const char *v15; // [sp-4h] [bp-14h]@60
 
     //v1 = _this;
-  speakingNPC = GetNPCData(sDialogue_SpeakingActorNPC_ID);
+	speakingNPC = GetNPCData(sDialogue_SpeakingActorNPC_ID);
     //v3 = v1;
-  uDialogueType = newDialogueType;
-  if (!speakingNPC->uFlags)
-  {
-    speakingNPC->uFlags = 1;
-        //v3 = uDialogueType;
-  }
-  if ((newDialogueType > DIALOGUE_24) || (newDialogueType < DIALOGUE_19))
-  {
-        if (newDialogueType != DIALOGUE_76)
-            {
-            if (newDialogueType == DIALOGUE_PROFESSION_DETAILS)
-                {
-                dialogue_show_profession_details = ~dialogue_show_profession_details;
-                }
-            else
-                {
-                if ( (signed int)newDialogueType > 84 && (signed int)newDialogueType <= 88 )
-                    {
-                    ArenaFight();
-                    return;
-                    }
-                }
-            goto LABEL_87;
-            }
-        if (speakingNPC->Hired())
-            {
-            v8 = 0;
-            if ( (signed int)pNPCStats->uNumNewNPCs > 0 )
-                {
-                v6 = (char *)pNPCStats->pNewNPCData;
-                while ( !(v6[8] & 0x80) || strcmp(speakingNPC->pName, *(const char **)v6) )
-                    {
-                    ++v8;
-                    v6 += 76;
-                    if ( v8 >= (signed int)pNPCStats->uNumNewNPCs )
-                        goto LABEL_44;
-                    }
-                goto LABEL_43;
-                }
-LABEL_44:
-            if ( !pParty->pHirelings[0].pName || _strcmpi(pParty->pHirelings[0].pName, speakingNPC->pName) )
-                {
-                if ( !pParty->pHirelings[1].pName || _strcmpi(pParty->pHirelings[1].pName, speakingNPC->pName) )
-                    {
-LABEL_51:
-                    pParty->field_709 = 0;
-                    sub_44A56A();
-                    dword_591084 = 0;
-                    pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-
-                    goto LABEL_89;
-                    }
-                v11 = &pParty->pHirelings[1];
-                }
-            else
-                {
-                v11 = pParty->pHirelings;
-                }
-            memset(v11, 0, sizeof(NPCData));
-            goto LABEL_51;
-            }
-        if ( pParty->pHirelings[0].pName && pParty->pHirelings[1].pName )
-            {
-            v7 = pGlobalTXT_LocalizationStrings[533]; // ""I cannot join you, you're party is full""
-LABEL_64:
-            ShowStatusBarString(v7, 2u);
-            goto LABEL_87;
-            }
-        //v9 = v2->uProfession;
-        if ( speakingNPC->uProfession != 51 )
-            {
-            v10 = pNPCStats->pProfessions[speakingNPC->uProfession - 1].uHirePrice;
-            if ( pParty->uNumGold < v10 )
-                {
-                ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);// "You don't have enough gold"
-                dialogue_show_profession_details = false;
-                uDialogueType = 13;
-                if ( uActiveCharacter )
-                    pPlayers[uActiveCharacter]->PlaySound(SPEECH_NotEnoughGold, 0);
-                v7 = pGlobalTXT_LocalizationStrings[155];
-                ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);
-                goto LABEL_87;
-                }
-            Party::TakeGold(v10);
-            }
-        LOBYTE(speakingNPC->uFlags) |= 0x80u;
-        if ( pParty->pHirelings[0].pName )
-            {
-            memcpy(&pParty->pHirelings[1], speakingNPC, sizeof(pParty->pHirelings[1]));
-            v15 = speakingNPC->pName;
-            v13 = pParty->pHireling2Name;
-            }
-        else
-            {
-            memcpy(pParty->pHirelings, speakingNPC, 0x4Cu);
-            v15 = speakingNPC->pName;
-            v13 = pParty->pHireling1Name;
-            }
-        strcpy(v13, v15);
-        pParty->field_709 = 0;
-        sub_44A56A();
-
-        pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-
-        if ( (sDialogue_SpeakingActorNPC_ID & 0x80000000u) == 0 )
-            pDialogue_SpeakingActor->uAIState = Removed;
-        if ( uActiveCharacter )
-            pPlayers[uActiveCharacter]->PlaySound(SPEECH_61, 0);
-        goto LABEL_87;
-        if (newDialogueType == DIALOGUE_9)
-            {
-            if ( !sub_4BB756(speakingNPC->uProfession) )
-                {
-                if ( speakingNPC->uProfession != 41 )
-                    speakingNPC->bHasUsedTheAbility = 1;
-
-                pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
-                }
-            else
-                {
-                ShowStatusBarString(pGlobalTXT_LocalizationStrings[140], 2u); //"Your packs are already full!"
-                }
-
-            goto LABEL_87;
-            }
-        if (newDialogueType == DIALOGUE_13)
-            {
-            if (!speakingNPC->Hired())
-                {
-                sub_4B3E1E();
-                dialogue_show_profession_details = false;
-                goto LABEL_87;
-                }
-            else
-                {
-                v5 = 0;
-                if ( (signed int)pNPCStats->uNumNewNPCs > 0 )
-                    {
-                    v6 = (char *)pNPCStats->pNewNPCData;
-                    while ( !(v6[8] & 0x80) || strcmp(speakingNPC->pName, *(const char **)v6) )
-                        {
-                        ++v5;
-                        v6 += 76;
-                        if ( v5 >= (signed int)pNPCStats->uNumNewNPCs )
-                            goto LABEL_44;
-                        }
-LABEL_43:
-                    v6[8] &= 0x7Fu;
-                    goto LABEL_44;
-                    }
-                goto LABEL_44;
-                }
-            }
-        }
-    else
-        {
-        switch(newDialogueType)
-            {
-        case DIALOGUE_19:  npc_event_id = speakingNPC->evt_A; break;
-        case DIALOGUE_20:  npc_event_id = speakingNPC->evt_B; break;
-        case DIALOGUE_21:  npc_event_id = speakingNPC->evt_C; break;
-        case DIALOGUE_22:	 npc_event_id = speakingNPC->evt_D; break;
-        case DIALOGUE_23:  npc_event_id = speakingNPC->evt_E; break;
-        case DIALOGUE_24:	 npc_event_id = speakingNPC->evt_F; break;
-            }
-        if ( (npc_event_id >= 200) && (npc_event_id <= 310) )
-            sub_4B3FE5(npc_event_id); //200-310
-        else if (( npc_event_id >= 400) && (npc_event_id <= 410) )
-            { //400-410
-            dword_F8B1D8 = newDialogueType;
-            DrawJoinGuildWindow(npc_event_id - 400);
-            }
-        else
-            {
-            switch ( npc_event_id )
-                {
-            case 139:
-                sub_4B1ECE();
-                break;
-            case 311:
-                sub_4BBA85_bounties();
-                break;
-            case 399:
-                sub_4BBCDD();
-                break;
-            default:
-                activeLevelDecoration = (LevelDecoration*)1;
-                ptr_F8B1E8 = 0;
-                EventProcessor(npc_event_id, 0, 1);
-                activeLevelDecoration = NULL;
-                break;
-                }
-            }
-        }
-LABEL_87:
-    if ( !dword_7241C8 )
-        pGame->Draw();
-LABEL_89:
-    dword_7241C8 = 0;
-    }
+	uDialogueType = newDialogueType;
+	if (!speakingNPC->uFlags)
+	{
+		speakingNPC->uFlags = 1;
+		//v3 = uDialogueType;
+	}
+
+	if(newDialogueType == DIALOGUE_PROFESSION_DETAILS)
+	{
+		dialogue_show_profession_details = ~dialogue_show_profession_details;
+	}
+	else if(newDialogueType == DIALOGUE_76)
+	{
+		if (speakingNPC->Hired())
+		{
+			v8 = 0;
+			if ( (signed int)pNPCStats->uNumNewNPCs > 0 )
+			{
+				v6 = (char *)pNPCStats->pNewNPCData;
+				while ( !(v6[8] & 0x80) || strcmp(speakingNPC->pName, *(const char **)v6) )
+				{
+					++v8;
+					v6 += 76;
+					if ( v8 >= (signed int)pNPCStats->uNumNewNPCs )
+						break;
+				}
+				if( v8 < (signed int)pNPCStats->uNumNewNPCs )
+					v6[8] &= 0x7Fu;
+			}
+			if ( pParty->pHirelings[0].pName && !_strcmpi(pParty->pHirelings[0].pName, speakingNPC->pName) )
+			{
+				v11 = pParty->pHirelings;
+				memset(v11, 0, sizeof(NPCData));
+			}
+			else if ( pParty->pHirelings[1].pName && !_strcmpi(pParty->pHirelings[1].pName, speakingNPC->pName) )
+			{
+				v11 = &pParty->pHirelings[1];
+				memset(v11, 0, sizeof(NPCData));
+			}
+			pParty->field_709 = 0;
+			sub_44A56A();
+			dword_591084 = 0;
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+			dword_7241C8 = 0;
+			return;
+		}
+		if ( pParty->pHirelings[0].pName && pParty->pHirelings[1].pName )
+		{
+			v7 = pGlobalTXT_LocalizationStrings[533]; // ""I cannot join you, you're party is full""
+			ShowStatusBarString(v7, 2u);
+		}
+		else
+		{
+			//v9 = v2->uProfession;
+			if ( speakingNPC->uProfession != 51 )
+			{
+				v10 = pNPCStats->pProfessions[speakingNPC->uProfession - 1].uHirePrice;
+																	if ( pParty->uNumGold < v10 )
+			{
+				ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);// "You don't have enough gold"
+				dialogue_show_profession_details = false;
+				uDialogueType = 13;
+				if ( uActiveCharacter )
+					pPlayers[uActiveCharacter]->PlaySound(SPEECH_NotEnoughGold, 0);
+				v7 = pGlobalTXT_LocalizationStrings[155];
+				ShowStatusBarString(pGlobalTXT_LocalizationStrings[155], 2u);
+				if ( !dword_7241C8 )
+					pGame->Draw();
+				dword_7241C8 = 0;
+				return;
+			}
+				Party::TakeGold(v10);
+			}
+			LOBYTE(speakingNPC->uFlags) |= 0x80u;
+			if ( pParty->pHirelings[0].pName )
+			{
+				memcpy(&pParty->pHirelings[1], speakingNPC, sizeof(pParty->pHirelings[1]));
+				v15 = speakingNPC->pName;
+				v13 = pParty->pHireling2Name;
+			}
+			else
+			{
+				memcpy(pParty->pHirelings, speakingNPC, 0x4Cu);
+				v15 = speakingNPC->pName;
+				v13 = pParty->pHireling1Name;
+			}
+			strcpy(v13, v15);
+			pParty->field_709 = 0;
+			sub_44A56A();
+
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+
+			if ( (sDialogue_SpeakingActorNPC_ID & 0x80000000u) == 0 )
+				pDialogue_SpeakingActor->uAIState = Removed;
+			if ( uActiveCharacter )
+				pPlayers[uActiveCharacter]->PlaySound(SPEECH_61, 0);
+		}
+	}
+	else if ( (signed int)newDialogueType > 84 && (signed int)newDialogueType <= 88 )
+	{
+		ArenaFight();
+		return;
+	}
+	else if(newDialogueType == DIALOGUE_9)
+	{
+		if ( !sub_4BB756(speakingNPC->uProfession) )
+		{
+			if ( speakingNPC->uProfession != 41 )
+				speakingNPC->bHasUsedTheAbility = 1;
+
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+		}
+		else
+		{
+			ShowStatusBarString(pGlobalTXT_LocalizationStrings[140], 2u); //"Your packs are already full!"
+		}
+	}
+	else if(newDialogueType == DIALOGUE_13)
+	{
+		if (!speakingNPC->Hired())
+		{
+			sub_4B3E1E();
+			dialogue_show_profession_details = false;
+		}
+		else
+		{
+			v5 = 0;
+			if ( (signed int)pNPCStats->uNumNewNPCs > 0 )
+			{
+				v6 = (char *)pNPCStats->pNewNPCData;
+				while ( !(v6[8] & 0x80) || strcmp(speakingNPC->pName, *(const char **)v6) )
+				{
+					++v5;
+					v6 += 76;
+					if ( v5 >= (signed int)pNPCStats->uNumNewNPCs )
+						break;
+				}
+				if ( v5 < (signed int)pNPCStats->uNumNewNPCs )
+					v6[8] &= 0x7Fu;
+			}
+			if ( pParty->pHirelings[0].pName && !_strcmpi(pParty->pHirelings[0].pName, speakingNPC->pName) )
+			{
+				v11 = pParty->pHirelings;
+				memset(v11, 0, sizeof(NPCData));
+			}
+			else if ( pParty->pHirelings[1].pName && !_strcmpi(pParty->pHirelings[1].pName, speakingNPC->pName) )
+			{
+				v11 = &pParty->pHirelings[1];
+				memset(v11, 0, sizeof(NPCData));
+			}
+			pParty->field_709 = 0;
+			sub_44A56A();
+			dword_591084 = 0;
+			pMessageQueue_50CBD0->AddMessage(UIMSG_Escape, 1, 0);
+			dword_7241C8 = 0;
+			return;
+		}
+	}
+	else if(newDialogueType >= 19 && newDialogueType <= 24)
+	{
+		switch(newDialogueType)
+		{
+			case DIALOGUE_19:  npc_event_id = speakingNPC->evt_A; break;
+			case DIALOGUE_20:  npc_event_id = speakingNPC->evt_B; break;
+			case DIALOGUE_21:  npc_event_id = speakingNPC->evt_C; break;
+			case DIALOGUE_22:	 npc_event_id = speakingNPC->evt_D; break;
+			case DIALOGUE_23:  npc_event_id = speakingNPC->evt_E; break;
+			case DIALOGUE_24:	 npc_event_id = speakingNPC->evt_F; break;
+		}
+		if ( (npc_event_id >= 200) && (npc_event_id <= 310) )
+			sub_4B3FE5(npc_event_id); //200-310
+		else if (( npc_event_id >= 400) && (npc_event_id <= 410) )
+		{ //400-410
+			dword_F8B1D8 = newDialogueType;
+			DrawJoinGuildWindow(npc_event_id - 400);
+		}
+		else
+		{
+			switch ( npc_event_id )
+			{
+				case 139:
+					sub_4B1ECE();
+					break;
+				case 311:
+					sub_4BBA85_bounties();
+					break;
+				case 399:
+					sub_4BBCDD();
+					break;
+				default:
+					activeLevelDecoration = (LevelDecoration*)1;
+					ptr_F8B1E8 = 0;
+					EventProcessor(npc_event_id, 0, 1);
+					activeLevelDecoration = NULL;
+					break;
+			}
+		}
+	}
+	if ( !dword_7241C8 )
+		pGame->Draw();
+	dword_7241C8 = 0;
+}