Mercurial > mm7
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: |