comparison mm7_5.cpp @ 899:393a83dcc359

Paperdoll equipment error fixed
author Ritor1
date Thu, 18 Apr 2013 11:15:54 +0600
parents 10fa7dad1391
children f3ccfc765502
comparison
equal deleted inserted replaced
898:10fa7dad1391 899:393a83dcc359
5987 } 5987 }
5988 } 5988 }
5989 } 5989 }
5990 5990
5991 //----- (0043C91D) -------------------------------------------------------- 5991 //----- (0043C91D) --------------------------------------------------------
5992 int __fastcall _43C91D_FormItemTextureFilename(char *a1, signed int a2, int a3, int a4) 5992 int __fastcall GetItemTextureFilename(char *pOut, signed int item_id, int index, int shoulder)
5993 { 5993 {
5994 int result; // eax@2 5994 int result; // eax@2
5995 char v5; // zf@3 5995 char v5; // zf@3
5996 const char *v6; // [sp-Ch] [bp-18h]@88 5996 const char *v6; // [sp-Ch] [bp-18h]@88
5997 signed int v7; // [sp-8h] [bp-14h]@61 5997 signed int v7; // [sp-8h] [bp-14h]@61
5998 int v8; // [sp-4h] [bp-10h]@61 5998 int v8; // [sp-4h] [bp-10h]@61
5999 signed int v9; // [sp-4h] [bp-10h]@69 5999 signed int v9; // [sp-4h] [bp-10h]@69
6000 6000
6001 result = 0; //BUG fn is void 6001 result = 0; //BUG fn is void
6002 if ( a2 <= 500 ) 6002 if ( item_id <= 500 )
6003 { 6003 {
6004 //v5 = *((char *)&pBloodsplatContainer->std__vector_pBloodsplats[62].field_20 + a2 + 2) == 0; 6004 //v5 = *((char *)&pBloodsplatContainer->std__vector_pBloodsplats[62].field_20 + a2 + 2) == 0;
6005 v5 = byte_5111C0[(a2 - 100) + 32 + 2] == 0; 6005 v5 = party_has_equipment[(item_id - 100) + 32 + 2] == 0;
6006 LABEL_21: 6006 switch ( item_id )
6007 {
6008 case 516:
6009 v5 = byte_5111F6[2] == 0;
6010 break;
6011 case 505:
6012 v5 = byte_5111F6[1] == 0;
6013 break;
6014 case 504:
6015 v5 = byte_5111F6[0] == 0;
6016 break;
6017 case 533:
6018 v5 = byte_5111F6[16] == 0;
6019 break;
6020 case 512:
6021 v5 = byte_5111F6[3] == 0;
6022 break;
6023 case 521:
6024 v5 = byte_5111F6[4] == 0;
6025 break;
6026 case 522:
6027 v5 = byte_5111F6[5] == 0;
6028 break;
6029 case 523:
6030 v5 = byte_5111F6[6] == 0;
6031 break;
6032 case 532:
6033 v5 = byte_5111F6[7] == 0;
6034 break;
6035 case 544:
6036 v5 = byte_5111F6[8] == 0;
6037 break;
6038 case 524:
6039 v5 = byte_5111F6[9] == 0;
6040 break;
6041 case 535:
6042 v5 = byte_5111F6[10] == 0;
6043 break;
6044 case 525:
6045 v5 = byte_5111F6[11] == 0;
6046 break;
6047 case 530:
6048 v5 = byte_5111F6[12] == 0;
6049 break;
6050 case 547:
6051 v5 = byte_5111F6[13] == 0;
6052 break;
6053 case 548:
6054 v5 = byte_5111F6[14] == 0;
6055 break;
6056 case 550:
6057 v5 = byte_5111F6[15] == 0;
6058 break;
6059 default:
6060 break;
6061 }
6007 if ( v5 ) 6062 if ( v5 )
6008 return result; 6063 return result;
6009 result = 516; 6064 result = 516;
6010 if ( a2 < 66 || a2 > 78 ) 6065 if ( item_id < 66 || item_id > 78 )
6011 { 6066 {
6012 if ( a2 == 516 ) 6067 if ( item_id == 516 )
6013 goto LABEL_79; 6068 {
6014 if ( a2 != 504 && a2 != 505 && a2 != 533 ) 6069 if ( !shoulder )
6015 { 6070 return sprintf(pOut, "item%3.3dv%d", 234, index);
6016 if ( (a2 < 100 || a2 > 104) && a2 != 524 && a2 != 535 ) 6071 if ( shoulder == 1 )
6072 return sprintf(pOut, "item%3.3dv%da1", 234, index);
6073 if ( shoulder == 2 )
6074 return sprintf(pOut, "item%3.3dv%da2", 234, index);
6075 }
6076 if ( item_id != 504 && item_id != 505 && item_id != 533 )
6077 {
6078 if ( (item_id < 100 || item_id > 104) && item_id != 524 && item_id != 535 )
6017 { 6079 {
6018 if ( a2 >= 115 && a2 <= 119 || a2 == 512 ) 6080 if ( item_id >= 115 && item_id <= 119 || item_id == 512 )
6019 { 6081 {
6020 if ( a2 == 512 ) 6082 if ( item_id == 512 )
6021 a2 = 312; 6083 item_id = 312;
6022 goto LABEL_87; 6084 return sprintf(pOut, "item%3.3dv%d", item_id, index);
6023 } 6085 }
6024 if ( (a2 < 89 || a2 > 99) && a2 != 521 && a2 != 522 && a2 != 523 && a2 != 532 && a2 != 544 ) 6086 if ( (item_id < 89 || item_id > 99) && item_id != 521 && item_id != 522 && item_id != 523 && item_id != 532 && item_id != 544 )
6025 { 6087 {
6026 result = 525; 6088 result = 525;
6027 if ( (a2 < 105 || a2 > 109) && a2 != 525 && a2 != 530 && a2 != 547 && a2 != 548 && a2 != 550 ) 6089 if ( (item_id < 105 || item_id > 109) && item_id != 525 && item_id != 530 && item_id != 547 && item_id != 548 && item_id != 550 )
6028 return result; 6090 return result;
6029 switch ( a2 ) 6091 switch ( item_id )
6030 { 6092 {
6031 case 525: 6093 case 525:
6032 a2 = 325; 6094 item_id = 325;
6033 break; 6095 break;
6034 case 530: 6096 case 530:
6035 a2 = 330; 6097 item_id = 330;
6036 break; 6098 break;
6037 case 547: 6099 case 547:
6038 a2 = 347; 6100 item_id = 347;
6039 break; 6101 break;
6040 case 548: 6102 case 548:
6041 a2 = 348; 6103 item_id = 348;
6042 break; 6104 break;
6043 case 550: 6105 case 550:
6044 a2 = 350; 6106 item_id = 350;
6045 break; 6107 break;
6046 } 6108 }
6047 v8 = a3; 6109 if ( !shoulder )
6048 v7 = a2; 6110 return sprintf(pOut, "item%3.3dv%d", item_id, index);
6049 if ( !a4 ) 6111 return sprintf(pOut, "item%3.3dv%da1", item_id, index);
6050 goto LABEL_88; 6112 }
6051 LABEL_91: 6113 if ( item_id == 521 )
6052 v6 = "item%3.3dv%da1"; 6114 return sprintf(pOut, "item%3.3dv%d", 239, index);
6053 return sprintf(a1, v6, v7, v8); 6115 if ( item_id == 522 )
6054 } 6116 return sprintf(pOut, "item%3.3dv%d", 240, index);
6055 if ( a2 == 521 ) 6117 if ( item_id == 523 )
6056 { 6118 return sprintf(pOut, "item%3.3dv%d", 241, index);
6057 a2 = 239; 6119 if ( item_id != 532 )
6058 goto LABEL_87; 6120 {
6059 } 6121 if ( item_id == 544 )
6060 if ( a2 == 522 ) 6122 item_id = 344;
6061 { 6123 return sprintf(pOut, "item%3.3dv%d", item_id, index);
6062 a2 = 240; 6124 }
6063 goto LABEL_87; 6125 return sprintf(pOut, "item%3.3dv%d", 93, index);
6064 }
6065 if ( a2 == 523 )
6066 {
6067 a2 = 241;
6068 goto LABEL_87;
6069 }
6070 if ( a2 != 532 )
6071 {
6072 if ( a2 == 544 )
6073 a2 = 344;
6074 goto LABEL_87;
6075 }
6076 v9 = 93;
6077 goto LABEL_70;
6078 } 6126 }
6079 if ( a2 == 524 ) 6127 if ( item_id == 524 )
6080 { 6128 return sprintf(pOut, "item%3.3dv%d", 324, index);
6081 a2 = 324; 6129 if ( item_id == 535 )
6082 goto LABEL_87; 6130 item_id = 104;
6083 } 6131 return sprintf(pOut, "item%3.3dv%d", item_id, index);
6084 if ( a2 == 535 )
6085 {
6086 v9 = 104;
6087 LABEL_70:
6088 a2 = v9;
6089 }
6090 LABEL_87:
6091 v8 = a3;
6092 v7 = a2;
6093 LABEL_88:
6094 v6 = "item%3.3dv%d";
6095 return sprintf(a1, v6, v7, v8);
6096 } 6132 }
6097 } 6133 }
6098 if ( a2 != 516 ) 6134 if ( item_id != 516 )
6099 { 6135 {
6100 switch ( a2 ) 6136 switch ( item_id )
6101 { 6137 {
6102 case 504: 6138 case 504:
6103 a2 = 235; 6139 item_id = 235;
6104 break; 6140 break;
6105 case 505: 6141 case 505:
6106 a2 = 236; 6142 item_id = 236;
6107 break; 6143 break;
6108 case 533: 6144 case 533:
6109 a2 = 73; 6145 item_id = 73;
6110 break; 6146 break;
6111 } 6147 }
6112 LABEL_86: 6148 if ( !shoulder )
6113 if ( a4 ) 6149 return sprintf(pOut, "item%3.3dv%d", item_id, index);
6114 { 6150 if ( shoulder == 1 )
6115 if ( a4 != 1 ) 6151 return sprintf(pOut, "item%3.3dv%da1", item_id, index);
6116 { 6152 if ( shoulder == 2 )
6117 if ( a4 != 2 ) 6153 return sprintf(pOut, "item%3.3dv%da2", item_id, index);
6118 return result; 6154 }
6119 v8 = a3; 6155 if ( !shoulder )
6120 v7 = a2; 6156 return sprintf(pOut, "item%3.3dv%d", 234, index);
6121 v6 = "item%3.3dv%da2"; 6157 if ( shoulder == 1 )
6122 return sprintf(a1, v6, v7, v8); 6158 return sprintf(pOut, "item%3.3dv%da1", 234, index);
6123 } 6159 if ( shoulder == 2 )
6124 v8 = a3; 6160 return sprintf(pOut, "item%3.3dv%da2", 234, index);
6125 v7 = a2; 6161 }
6126 goto LABEL_91; 6162 result = item_id - 504;
6127 }
6128 goto LABEL_87;
6129 }
6130 LABEL_79:
6131 a2 = 234;
6132 goto LABEL_86;
6133 }
6134 result = a2 - 504;
6135 switch ( a2 )
6136 {
6137 case 516:
6138 v5 = byte_5111F6[2] == 0;
6139 goto LABEL_21;
6140 case 505:
6141 v5 = byte_5111F6[1] == 0;
6142 goto LABEL_21;
6143 case 504:
6144 v5 = byte_5111F6[0] == 0;
6145 goto LABEL_21;
6146 case 533:
6147 v5 = byte_5111F6[16] == 0;
6148 goto LABEL_21;
6149 case 512:
6150 v5 = byte_5111F6[3] == 0;
6151 goto LABEL_21;
6152 case 521:
6153 v5 = byte_5111F6[4] == 0;
6154 goto LABEL_21;
6155 case 522:
6156 v5 = byte_5111F6[5] == 0;
6157 goto LABEL_21;
6158 case 523:
6159 v5 = byte_5111F6[6] == 0;
6160 goto LABEL_21;
6161 case 532:
6162 v5 = byte_5111F6[7] == 0;
6163 goto LABEL_21;
6164 case 544:
6165 v5 = byte_5111F6[8] == 0;
6166 goto LABEL_21;
6167 case 524:
6168 v5 = byte_5111F6[9] == 0;
6169 goto LABEL_21;
6170 case 535:
6171 v5 = byte_5111F6[10] == 0;
6172 goto LABEL_21;
6173 case 525:
6174 v5 = byte_5111F6[11] == 0;
6175 goto LABEL_21;
6176 case 530:
6177 v5 = byte_5111F6[12] == 0;
6178 goto LABEL_21;
6179 case 547:
6180 v5 = byte_5111F6[13] == 0;
6181 goto LABEL_21;
6182 case 548:
6183 v5 = byte_5111F6[14] == 0;
6184 goto LABEL_21;
6185 case 550:
6186 v5 = byte_5111F6[15] == 0;
6187 goto LABEL_21;
6188 default:
6189 return result;
6190 }
6191 return result; 6163 return result;
6192 } 6164 }
6193 6165
6194 //----- (0043ED6F) -------------------------------------------------------- 6166 //----- (0043ED6F) --------------------------------------------------------
6195 bool _43ED6F_check_party_races(bool a1) 6167 bool _43ED6F_check_party_races(bool a1)
6276 return 0; 6248 return 0;
6277 } 6249 }
6278 // A750D8: using guessed type __int64 qword_A750D8; 6250 // A750D8: using guessed type __int64 qword_A750D8;
6279 6251
6280 //----- (0043EE15) -------------------------------------------------------- 6252 //----- (0043EE15) --------------------------------------------------------
6281 bool __fastcall sub_43EE15_player_has_item(unsigned int uItemID, Player *pPlayer, char a3) 6253 bool __fastcall Player_has_item(unsigned int uItemID, Player *pPlayer, char a3)
6282 { 6254 {
6283 bool result; // eax@0
6284 signed int v4; // edi@3
6285 int *v5; // esi@3
6286 signed int v6; // edi@7
6287 bool *v7; // esi@7
6288
6289 if ( !a3 || pParty->pPickedItem.uItemID != uItemID ) 6255 if ( !a3 || pParty->pPickedItem.uItemID != uItemID )
6290 { 6256 {
6291 v4 = 0; 6257 for ( uint i = 0; i < 126; ++i )
6292 v5 = pPlayer->pInventoryIndices; 6258 {
6293 while ( 1 ) 6259 if ( pPlayer->pInventoryIndices[i] > 0 )
6294 { 6260 {
6295 if ( *v5 ) 6261 if ( (unsigned int)pPlayer->pInventoryItems[pPlayer->pInventoryIndices[i] - 1].uItemID == uItemID )
6296 { 6262 return true;
6297 result = 9 * *v5;
6298 if ( *(int *)&pPlayer->pInventoryItems[*v5-1] == uItemID )
6299 break;
6300 } 6263 }
6301 ++v4; 6264 }
6302 ++v5; 6265 for ( uint i = 0; i < 16; ++i )
6303 if ( v4 >= 126 ) 6266 {
6304 { 6267 if ( pPlayer->pEquipment.pIndices[i] )
6305 v6 = 0; 6268 {
6306 v7 = (bool *)&pPlayer->pEquipment; 6269 if ( (unsigned int)pPlayer->pInventoryItems[pPlayer->pEquipment.pIndices[i] - 1].uItemID == uItemID )
6307 while ( 1 ) 6270 return true;
6308 {
6309 result = *v7;
6310 if ( *v7 )
6311 {
6312 result *= 9;
6313 if ( *(int *)&pPlayer->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * result + 5] == uItemID )
6314 break;
6315 }
6316 ++v6;
6317 ++v7;
6318 if ( v6 >= 16 )
6319 {
6320 LOBYTE(result) = 0;
6321 return result;
6322 }
6323 }
6324 break;
6325 } 6271 }
6326 } 6272 }
6327 } 6273 }
6328 LOBYTE(result) = 1; 6274 return false;
6329 return result;
6330 } 6275 }
6331 6276
6332 //----- (0043EE77) -------------------------------------------------------- 6277 //----- (0043EE77) --------------------------------------------------------
6333 bool __fastcall sub_43EE77_ProbablyIfUnderwaterSuitIsEquipped(signed int a1) 6278 bool __fastcall sub_43EE77_ProbablyIfUnderwaterSuitIsEquipped(signed int a1)
6334 { 6279 {
6345 { 6290 {
6346 pPlayers = &::pPlayers[1]; 6291 pPlayers = &::pPlayers[1];
6347 v5 = 604; 6292 v5 = 604;
6348 while ( 1 ) 6293 while ( 1 )
6349 { 6294 {
6350 result = sub_43EE15_player_has_item(v5, *pPlayers, 0); 6295 result = Player_has_item(v5, *pPlayers, 0);
6351 if ( !result ) 6296 if ( !result )
6352 break; 6297 break;
6353 result = v6->pEquipment.uArmor; 6298 result = v6->pEquipment.uArmor;
6354 if ( !result ) 6299 if ( !result )
6355 break; 6300 break;
6361 goto LABEL_13; 6306 goto LABEL_13;
6362 } 6307 }
6363 } 6308 }
6364 goto LABEL_6; 6309 goto LABEL_6;
6365 } 6310 }
6366 result = sub_43EE15_player_has_item(604u, ::pPlayers[a1], 0); 6311 result = Player_has_item(604u, ::pPlayers[a1], 0);
6367 if ( !result 6312 if ( !result
6368 || (result = v2->pEquipment.uArmor) == 0 6313 || (result = v2->pEquipment.uArmor) == 0
6369 || (result *= 9, *(int *)&v2->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * result + 5] != v3) ) 6314 || (result *= 9, *(int *)&v2->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * result + 5] != v3) )
6370 { 6315 {
6371 LABEL_6: 6316 LABEL_6: