diff Items.cpp @ 473:7f1b00901cf7

Skill learning menu in shops
author Gloval
date Tue, 26 Feb 2013 02:09:56 +0400
parents fcdaa804074f
children 77430756f06a
line wrap: on
line diff
--- a/Items.cpp	Mon Feb 25 23:33:15 2013 +0400
+++ b/Items.cpp	Tue Feb 26 02:09:56 2013 +0400
@@ -2243,383 +2243,137 @@
 
 // 4505CC: using guessed type int var_A0[32];
 	//----- (004B3703) --------------------------------------------------------
-	int  sub_4B3703( int _this )
+void FillAviableSkillsToTeach( int _this )
+	{
+	char *v30; // ecx@65
+	unsigned int v29; // edx@56
+	int v15; // ecx@19
+	int v33; // [sp-4h] [bp-2Ch]@23
+	int v34; // [sp-4h] [bp-2Ch]@43
+	int v21; // ecx@34
+	int v35[5]; // [sp+Ch] [bp-1Ch]@8
+	int v37=0; // [sp+24h] [bp-4h]@1*
+	int i=0;
+
+	dword_F8B1DC = 0;
+
+	switch (_this)
 		{
-		signed int v1; // edi@1
-		int v2; // eax@1
-		int v3; // ecx@1
-		signed int v4; // ebx@1
-		int v5; // ecx@2
-		int v6; // ecx@3
-		int v7; // ecx@4
-		int v8; // ecx@5
-		int v9; // ecx@6
-		signed int v10; // ebx@13
-		signed int v11; // edi@14
-		signed int v12; // esi@15
-		unsigned int v13; // ecx@16
-		int v14; // ecx@16
-		int v15; // ecx@17
-		int v16; // ecx@19
-		int v17; // ecx@20
-		int v18; // ecx@21
-		signed int v19; // esi@32
-		char *v20; // ecx@33
-		int v21; // ecx@34
-		int v22; // ecx@36
-		int v23; // ecx@37
-		int v24; // ecx@38
-		int v25; // ecx@39
-		int v26; // ecx@40
-		int v27; // ecx@41
-		int *v28; // esi@54
-		unsigned int v29; // edx@56
-		char *v30; // ecx@65
-		int v31; // ecx@106
-		int result; // eax@107
-		int v33; // [sp-4h] [bp-2Ch]@23
-		int v34; // [sp-4h] [bp-2Ch]@43
-		int v35[5]; // [sp+Ch] [bp-1Ch]@8
-		int a2; // [sp+20h] [bp-8h]@1
-		int v37; // [sp+24h] [bp-4h]@1
+	case 1:  //shop weapon
+		for (int i=0; i<2; ++i)
+			{
+			for (int j=0; j<4; ++j)
+				{
+				if ( i )
+					v21 = shopWeap_variation_spc[(unsigned int)window_SpeakInHouse->ptr_1C].item_class[j];
+				else
+					v21 = shopWeap_variation_ord[(unsigned int)window_SpeakInHouse->ptr_1C].item_class[j];
 
-		//need fixing
-		__debugbreak();
-		v1 = 0;
-		v2 = 0;
-		v3 = _this - 1;
-		a2 = 0;
-		v37 = 0;
-		dword_F8B1DC = 0;
-		v4 = 2;
-		if ( !v3 )
-			{
-			while ( 1 )
-				{
-				v19 = 1;
-				do
+				switch (v21)
 					{
-					v20 = (char *)window_SpeakInHouse->ptr_1C + 4 * (unsigned int)window_SpeakInHouse->ptr_1C + v19;
-					/*if ( v1 )
-						v21 = word_4F063E[(signed int)v20];
-					else
-						v21 = word_4F0404[(signed int)v20 - 4];//word_4F03FE[(signed int)v20];*/
-					v22 = v21 - 23;
-					if ( v22 )
-						{
-						v23 = v22 - 1;
-						if ( v23 )
-							{
-							v24 = v23 - 1;
-							if ( v24 )
-								{
-								v25 = v24 - 1;
-								if ( v25 )
-									{
-									v26 = v25 - 1;
-									if ( v26 )
-										{
-										v27 = v26 - 1;
-										if ( v27 )
-											{
-											if ( v27 != v4 )
-												goto LABEL_51;
-											v34 = 36;
-											}
-										else
-											{
-											v34 = 42;
-											}
-										}
-									else
-										{
-										v34 = 41;
-										}
-									}
-								else
-									{
-									v34 = 40;
-									}
-								}
-							else
-								{
-								v34 = 39;
-								}
-							}
-						else
-							{
-							v34 = 38;
-							}
-						}
-					else
-						{
-						v34 = 37;
-						}
-					v37 = sub_4BE571(v34, v35, v37, 5);
-					v2 = dword_F8B1DC;
-					v4 = 2;
-LABEL_51:
-					++v19;
-					}
-					while ( v19 <= 4 );
-					++v1;
-					if ( v1 >= v4 )
-						goto LABEL_53;
+				case 23:  v34 = 37;	break;
+				case 24:  v34 = 38;	break;
+				case 25:  v34 = 39;	break;
+				case 26:  v34 = 40;	break;
+				case 27:  v34 = 41;	break;
+				case 28:  v34 = 42; break;
+				case 30:  v34 = 36;	break;
+				default:
+					continue;
+					}	
+				v37 = sub_4BE571(v34, v35, v37, 5);
 				}
 			}
-		v5 = (int)(v3 - 1);
-		if ( !v5 )
+		break;
+	case 2: //shop armor
+
+		for (int i=0; i<2; ++i)
 			{
-			v10 = 0;
-			while ( 1 )
+			for (int j=0; j<2; ++j)
 				{
-				v11 = 0;
-				do
+				for (int k=0; k<4; ++k)
 					{
-					v12 = 1;
-					do
+					if ( i )
+						v15 = shopArmr_variation_spc[(unsigned int)window_SpeakInHouse->ptr_1C-15+j].item_class[k];
+					else
+						v15 = shopArmr_variation_ord[(unsigned int)window_SpeakInHouse->ptr_1C-15+j].item_class[k];
+					switch (v15)
 						{
-						v13 = v11 + 2 * (unsigned int)window_SpeakInHouse->ptr_1C - 30;
-						v14 = v12 + 4 * v13 + v13;
-					/*	if ( v10 )
-							v15 = word_4F06D8[v14];
-						else
-							v15 = word_4F0498[v14];*/
-						v16 = v15 - 31;
-						if ( v16 )
-							{
-							v17 = v16 - 1;
-							if ( v17 )
-								{
-								v18 = v17 - 1;
-								if ( v18 )
-									{
-									if ( v18 != 1 )
-										goto LABEL_28;
-									v33 = 44;
-									}
-								else
-									{
-									v33 = 47;
-									}
-								}
-							else
-								{
-								v33 = 46;
-								}
-							}
-						else
-							{
-							v33 = 45;
-							}
-						v37 = sub_4BE571(v33, v35, v37, 5);
-						v2 = dword_F8B1DC;
-LABEL_28:
-						++v12;
+					case 31: v33 = 45; break;
+					case 32: v33 = 46; break;
+					case 33: v33 = 47; break;
+					case 34: v33 = 44; break;
+					default:
+						continue;
 						}
-						while ( v12 <= 4 );
-						++v11;
+					v37 = sub_4BE571(v33, v35, v37, 5);
 					}
-					while ( v11 < 2 );
-					++v10;
-					if ( v10 >= 2 )
-						goto LABEL_53;
 				}
 			}
-		v6 = v5 - 1;
-		if ( v6 )
-			{
-			v7 = v6 - 1;
-			if ( v7 )
-				{
-				v8 = v7 - 17;
-				if ( v8 )
-					{
-					v9 = v8 - 2;
-					if ( v9 )
-						{
-						if ( v9 == 7 )
-							{
-							v37 = 2;
-							v35[0] = 69;
-							v35[1] = 60;
-							}
-						}
-					else
-						{
-						v37 = 3;
-						v35[0] = 67;
-						v35[1] = 66;
-						v35[2] = 58;
-						}
-					}
-				else
-					{
-					v37 = 3;
-					v35[0] = 70;
-					v35[1] = 65;
-					v35[2] = 62;
-					}
-				}
-			else
-				{
-				v37 = 2;
-				v35[0] = 71;
-				v35[1] = 68;
-				}
-			}
-		else
-			{
-			v37 = 2;
-			v35[0] = 57;
-			v35[1] = 59;
-			}
-LABEL_53:
-		if ( v37 > 0 )
+		break;
+	case 3:  //shop magic
+		v37 = 2;
+		v35[0] = 57;
+		v35[1] = 59;
+		break;
+	case 4: //shop alchemist
+		v37 = 2;
+		v35[0] = 71;
+		v35[1] = 68;
+		break;
+	case 21:  //tavern
+		v37 = 3;
+		v35[0] = 70;
+		v35[1] = 65;
+		v35[2] = 62;
+		break;
+	case 23:  //temple
+		v37 = 3;
+		v35[0] = 67;
+		v35[1] = 66;
+		v35[2] = 58;
+		break;
+	case 30:  ///trainig
+		v37 = 2;
+		v35[0] = 69;
+		v35[1] = 60;
+		break;
+		}
+	for(i=0;i<v37;++i) 
+		{
+		v29=v35[i];
+		switch(v29)
 			{
-			v28 = v35;
-			while ( 1 )
-				{
-				v29 = *v28;
-				if ( *v28 <= 47 )
-					break;
-				if ( (signed int)v29 <= 66 )
-					{
-					if ( v29 == 66 )
-						{
-						v30 = pSkillNames[30];
-						goto LABEL_106;
-						}
-					if ( v29 == 57 )
-						{
-						v30 = pSkillNames[21];
-						goto LABEL_106;
-						}
-					if ( v29 == 58 )
-						{
-						v30 = pSkillNames[22];
-						goto LABEL_106;
-						}
-					if ( v29 == 60 )
-						{
-						v30 = pSkillNames[24];
-						goto LABEL_106;
-						}
-					if ( v29 == 62 )
-						{
-						v30 = pSkillNames[26];
-						goto LABEL_106;
-						}
-					if ( v29 == 65 )
-						{
-						v30 = pSkillNames[29];
-						goto LABEL_106;
-						}
-					goto LABEL_100;
-					}
-				switch ( v29 )
-					{
-				case 0x43u:
-					v30 = pSkillNames[31];
-					break;
-				case 0x44u:
-					v30 = pSkillNames[32];
-					break;
-				case 0x45u:
-					v30 = pSkillNames[33];
-					break;
-				case 0x46u:
-					v30 = pSkillNames[34];
-					break;
-				default:
-					if ( v29 != 71 )
-						goto LABEL_100;
-					v30 = pSkillNames[35];
-					break;
-					}
-LABEL_106:
-				pShopOptions[v2] = v30;
-				v31 = a2++;
-				dword_F8B1DC = v2 + 1;
-				sub_4B36CC(v31, v29);
-				++v28;
-				if ( a2 >= v37 )
-					goto LABEL_107;
-				v2 = dword_F8B1DC;
-				}
-			if ( *v28 == 47 )
-				{
-				v30 = pSkillNames[11];
-				goto LABEL_106;
-				}
-			if ( (signed int)v29 > 40 )
-				{
-				if ( v29 == 41 )
-					{
-					v30 = pSkillNames[5];
-					goto LABEL_106;
-					}
-				if ( v29 == 42 )
-					{
-					v30 = pSkillNames[6];
-					goto LABEL_106;
-					}
-				if ( v29 == 44 )
-					{
-					v30 = pSkillNames[8];
-					goto LABEL_106;
-					}
-				if ( v29 == 45 )
-					{
-					v30 = pSkillNames[9];
-					goto LABEL_106;
-					}
-				if ( v29 == 46 )
-					{
-					v30 = pSkillNames[10];
-					goto LABEL_106;
-					}
-				}
-			else
-				{
-				if ( v29 == 40 )
-					{
-					v30 = pSkillNames[4];
-					goto LABEL_106;
-					}
-				if ( v29 == 5 )
-					{
-					v30 = pSkillNames[23];
-					goto LABEL_106;
-					}
-				if ( v29 == 36 )
-					{
-					v30 = pSkillNames[0];
-					goto LABEL_106;
-					}
-				if ( v29 == 37 )
-					{
-					v30 = pSkillNames[1];
-					goto LABEL_106;
-					}
-				if ( v29 == 38 )
-					{
-					v30 = pSkillNames[2];
-					goto LABEL_106;
-					}
-				if ( v29 == 39 )
-					{
-					v30 = pSkillNames[3];
-					goto LABEL_106;
-					}
-				}
-LABEL_100:
+		case 40 :v30 = pSkillNames[4];	break;
+		case 5 : v30 = pSkillNames[23];	break;
+		case 36 :v30 = pSkillNames[0];	break;
+		case 37 :v30 = pSkillNames[1];	break;
+		case 38 :v30 = pSkillNames[2];	break;
+		case 39 :v30 = pSkillNames[3];	break;
+		case 41 :v30 = pSkillNames[5];	break;
+		case 42 :v30 = pSkillNames[6];	break;
+		case 44 :v30 = pSkillNames[8];	break;
+		case 45 :v30 = pSkillNames[9];	break;
+		case 46 :v30 = pSkillNames[10];	break;
+		case 47 :v30 = pSkillNames[11];	break;
+		case 66 :v30 = pSkillNames[30];	break;
+		case 57 :v30 = pSkillNames[21];	break;
+		case 58 :v30 = pSkillNames[22];	break;
+		case 60 :v30 = pSkillNames[24];	break;
+		case 62 :v30 = pSkillNames[26];	break;
+		case 65 :v30 = pSkillNames[29];	break;
+		case 67:v30 = pSkillNames[31];	break;
+		case 68:v30 = pSkillNames[32];	break;
+		case 69:v30 = pSkillNames[33];	break;
+		case 70:v30 = pSkillNames[34];	break;
+		case 71:v30 = pSkillNames[35]; break;
+		default:
 			v30 = pGlobalTXT_LocalizationStrings[127]; //"No Text!"
-			goto LABEL_106;
 			}
-LABEL_107:
-		pDialogueWindow->_41D08F(a2, 1, 0, 2);
-		result = pDialogueWindow->pNumPresenceButton;
-		dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
-		return result;
+		pShopOptions[dword_F8B1DC] = v30;
+		++dword_F8B1DC;
+		CreateButtonInColumn(i+1, v29);
 		}
+	pDialogueWindow->_41D08F(i, 1, 0, 2);
+	dword_F8B1E0 = pDialogueWindow->pNumPresenceButton;
+	}