Mercurial > might-and-magic-trilogy
comparison Party.cpp @ 87:c0cf9393af64
Слияние
author | Ritor1 |
---|---|
date | Mon, 29 Oct 2012 09:28:08 +0600 |
parents | 30ec77bbd018 |
children | acf7f12714a7 dac041fc74e8 |
comparison
equal
deleted
inserted
replaced
86:c83d06692295 | 87:c0cf9393af64 |
---|---|
278 } | 278 } |
279 | 279 |
280 //----- (0049137D) -------------------------------------------------------- | 280 //----- (0049137D) -------------------------------------------------------- |
281 void Party::CreateDefaultParty(char bGiveItems) | 281 void Party::CreateDefaultParty(char bGiveItems) |
282 { | 282 { |
283 Party *v2; // esi@1 | 283 Party *pParty; // esi@1 |
284 signed __int16 v3; // ax@1 | 284 signed __int16 v3; // ax@1 |
285 int v4; // ecx@1 | 285 int pResMagicBase; // ecx@1 |
286 Player *v5; // esi@3 | 286 Player *pCharacter; // esi@3 |
287 signed int v6; // edx@5 | 287 signed int uSpellBookPageCount; // edx@5 |
288 int v7; // eax@5 | 288 int v7; // eax@5 |
289 int uSkillIdx; // eax@11 | 289 int uSkillIdx; // eax@11 |
290 unsigned __int8 v9; // zf@37 | 290 unsigned __int8 v9; // zf@37 |
291 char v10; // sf@37 | 291 char v10; // sf@37 |
292 unsigned __int8 v11; // of@37 | 292 unsigned __int8 v11; // of@37 |
293 char *v12; // eax@38 | 293 char *v12; // eax@38 |
294 signed int v13; // ecx@38 | 294 signed int v13; // ecx@38 |
295 int v14; // eax@42 | 295 int uMaxSP; // eax@42 |
296 unsigned int v15; // [sp-4h] [bp-44h]@14 | 296 unsigned int v15; // [sp-4h] [bp-44h]@14 |
297 unsigned int v16; // [sp-4h] [bp-44h]@26 | 297 unsigned int v16; // [sp-4h] [bp-44h]@26 |
298 int v17; // [sp+10h] [bp-30h]@1 | 298 int v17; // [sp+10h] [bp-30h]@1 |
299 int v18; // [sp+14h] [bp-2Ch]@11 | 299 int v18; // [sp+14h] [bp-2Ch]@11 |
300 signed int v19; // [sp+18h] [bp-28h]@1 | 300 signed int uNumPlayers; // [sp+18h] [bp-28h]@1 |
301 ItemGen Dst; // [sp+1Ch] [bp-24h]@10 | 301 ItemGen Dst; // [sp+1Ch] [bp-24h]@10 |
302 | 302 |
303 v2 = this; | 303 pParty = this; |
304 strcpy(this->pPlayers[0].pName, pGlobalTXT_LocalizationStrings[509]); | 304 strcpy(this->pPlayers[0].pName, pGlobalTXT_LocalizationStrings[509]); //Zoltan |
305 v2->pPlayers[0].field_1928 = 17; | 305 pParty->pPlayers[0].field_1928 = 17; |
306 v2->pPlayers[0].uFace = 17; | 306 pParty->pPlayers[0].uFace = 17; |
307 v2->pPlayers[0].field_1924 = 17; | 307 pParty->pPlayers[0].field_1924 = 17; |
308 v2->pPlayers[0].uVoiceID = 17; | 308 pParty->pPlayers[0].uVoiceID = 17; |
309 v2->pPlayers[0].uMight = 30; | 309 pParty->pPlayers[0].uMight = 30; |
310 v2->pPlayers[0].uIntelligence = 5; | 310 pParty->pPlayers[0].uIntelligence = 5; |
311 v2->pPlayers[0].uWillpower = 5; | 311 pParty->pPlayers[0].uWillpower = 5; |
312 v2->pPlayers[0].uEndurance = 13; | 312 pParty->pPlayers[0].uEndurance = 13; |
313 v2->pPlayers[0].uAccuracy = 13; | 313 pParty->pPlayers[0].uAccuracy = 13; |
314 v2->pPlayers[0].uSpeed = 14; | 314 pParty->pPlayers[0].uSpeed = 14; |
315 v2->pPlayers[0].uLuck = 7; | 315 pParty->pPlayers[0].uLuck = 7; |
316 v2->pPlayers[0].pActiveSkills[9] = 1; // leather | 316 pParty->pPlayers[0].pActiveSkills[9] = 1; // leather |
317 v2->pPlayers[0].pActiveSkills[33] = 1; // armsmaster | 317 pParty->pPlayers[0].pActiveSkills[33] = 1; // armsmaster |
318 v2->pPlayers[0].pActiveSkills[5] = 1; // bow | 318 pParty->pPlayers[0].pActiveSkills[5] = 1; // bow |
319 v2->pPlayers[0].pActiveSkills[1] = 1; // sword | 319 pParty->pPlayers[0].pActiveSkills[1] = 1; // sword |
320 v2->pPlayers[1].field_1928 = 3; | 320 pParty->pPlayers[1].field_1928 = 3; |
321 v2->pPlayers[1].uFace = 3; | 321 pParty->pPlayers[1].uFace = 3; |
322 v2->pPlayers[1].field_1924 = 3; | 322 pParty->pPlayers[1].field_1924 = 3; |
323 v2->pPlayers[1].uVoiceID = 3; | 323 pParty->pPlayers[1].uVoiceID = 3; |
324 strcpy(v2->pPlayers[1].pName, pGlobalTXT_LocalizationStrings[506]); | 324 strcpy(pParty->pPlayers[1].pName, pGlobalTXT_LocalizationStrings[506]); //Roderic |
325 v2->pPlayers[1].uMight = 13; | 325 pParty->pPlayers[1].uMight = 13; |
326 v2->pPlayers[1].uIntelligence = 9; | 326 pParty->pPlayers[1].uIntelligence = 9; |
327 v2->pPlayers[1].uWillpower = 9; | 327 pParty->pPlayers[1].uWillpower = 9; |
328 v2->pPlayers[1].uEndurance = 13; | 328 pParty->pPlayers[1].uEndurance = 13; |
329 v2->pPlayers[1].uAccuracy = 13; | 329 pParty->pPlayers[1].uAccuracy = 13; |
330 v2->pPlayers[1].uSpeed = 13; | 330 pParty->pPlayers[1].uSpeed = 13; |
331 v2->pPlayers[1].uLuck = 13; | 331 pParty->pPlayers[1].uLuck = 13; |
332 v2->pPlayers[1].pActiveSkills[9] = 1; // leather | 332 pParty->pPlayers[1].pActiveSkills[9] = 1; // leather |
333 v2->pPlayers[1].pActiveSkills[34] = 1; // stealing | 333 pParty->pPlayers[1].pActiveSkills[34] = 1; // stealing |
334 v2->pPlayers[1].pActiveSkills[2] = 1; // dagger | 334 pParty->pPlayers[1].pActiveSkills[2] = 1; // dagger |
335 v2->pPlayers[1].pActiveSkills[29] = 1; // disarm trap | 335 pParty->pPlayers[1].pActiveSkills[29] = 1; // disarm trap |
336 v2->pPlayers[2].field_1928 = 14; | 336 pParty->pPlayers[2].field_1928 = 14; |
337 v2->pPlayers[2].uFace = 14; | 337 pParty->pPlayers[2].uFace = 14; |
338 v2->pPlayers[2].field_1924 = 14; | 338 pParty->pPlayers[2].field_1924 = 14; |
339 v2->pPlayers[2].uVoiceID = 14; | 339 pParty->pPlayers[2].uVoiceID = 14; |
340 strcpy(v2->pPlayers[2].pName, pGlobalTXT_LocalizationStrings[508]); | 340 strcpy(pParty->pPlayers[2].pName, pGlobalTXT_LocalizationStrings[508]); // Serena |
341 v2->pPlayers[2].uMight = 12; | 341 pParty->pPlayers[2].uMight = 12; |
342 v2->pPlayers[2].uIntelligence = 9; | 342 pParty->pPlayers[2].uIntelligence = 9; |
343 v2->pPlayers[2].uWillpower = 20; | 343 pParty->pPlayers[2].uWillpower = 20; |
344 v2->pPlayers[2].uEndurance = 22; | 344 pParty->pPlayers[2].uEndurance = 22; |
345 v2->pPlayers[2].uAccuracy = 7; | 345 pParty->pPlayers[2].uAccuracy = 7; |
346 v2->pPlayers[2].uSpeed = 13; | 346 pParty->pPlayers[2].uSpeed = 13; |
347 v2->pPlayers[2].uLuck = 7; | 347 pParty->pPlayers[2].uLuck = 7; |
348 v2->pPlayers[2].pActiveSkills[35] = 1; // alchemy | 348 pParty->pPlayers[2].pActiveSkills[35] = 1; // alchemy |
349 v2->pPlayers[2].pActiveSkills[9] = 1; // leather | 349 pParty->pPlayers[2].pActiveSkills[9] = 1; // leather |
350 v2->pPlayers[2].pActiveSkills[18] = 1; // body | 350 pParty->pPlayers[2].pActiveSkills[18] = 1; // body |
351 v2->pPlayers[2].pActiveSkills[6] = 1; // mace | 351 pParty->pPlayers[2].pActiveSkills[6] = 1; // mace |
352 strcpy(v2->pPlayers[3].pName, pGlobalTXT_LocalizationStrings[507]); | 352 strcpy(pParty->pPlayers[3].pName, pGlobalTXT_LocalizationStrings[507]); // Alexis |
353 v3 = 10; | 353 v3 = 10; |
354 v2->pPlayers[3].field_1928 = 10; | 354 pParty->pPlayers[3].field_1928 = 10; |
355 v2->pPlayers[3].uFace = 10; | 355 pParty->pPlayers[3].uFace = 10; |
356 v4 = (int)&v2->pPlayers[0].sResMagicBase; | 356 pResMagicBase = (int)&pParty->pPlayers[0].sResMagicBase; |
357 v2->pPlayers[3].uEndurance = 13; | 357 pParty->pPlayers[3].uEndurance = 13; |
358 v2->pPlayers[3].uAccuracy = 13; | 358 pParty->pPlayers[3].uAccuracy = 13; |
359 v2->pPlayers[3].uSpeed = 13; | 359 pParty->pPlayers[3].uSpeed = 13; |
360 v2->pPlayers[3].field_1924 = 10; | 360 pParty->pPlayers[3].field_1924 = 10; |
361 v2->pPlayers[3].uVoiceID = 10; | 361 pParty->pPlayers[3].uVoiceID = 10; |
362 v2->pPlayers[3].uMight = 5; | 362 pParty->pPlayers[3].uMight = 5; |
363 v2->pPlayers[3].uIntelligence = 30; | 363 pParty->pPlayers[3].uIntelligence = 30; |
364 v2->pPlayers[3].uWillpower = 9; | 364 pParty->pPlayers[3].uWillpower = 9; |
365 v2->pPlayers[3].uLuck = 7; | 365 pParty->pPlayers[3].uLuck = 7; |
366 v2->pPlayers[3].pActiveSkills[9] = 1; // leather | 366 pParty->pPlayers[3].pActiveSkills[9] = 1; // leather |
367 v2->pPlayers[3].pActiveSkills[13] = 1; // air | 367 pParty->pPlayers[3].pActiveSkills[13] = 1; // air |
368 v2->pPlayers[3].pActiveSkills[12] = 1; // fire | 368 pParty->pPlayers[3].pActiveSkills[12] = 1; // fire |
369 v2->pPlayers[3].pActiveSkills[0] = 1; // staff | 369 pParty->pPlayers[3].pActiveSkills[0] = 1; // staff |
370 v17 = (int)&v2->pPlayers[0].sResMagicBase; | 370 pCharacter = &pParty->pPlayers[0]; |
371 v19 = 4; | 371 uNumPlayers = 4; |
372 while ( 1 ) | 372 while ( 1 ) |
373 { | 373 { |
374 v5 = (Player *)(v4 - 6014); | 374 if ( !pCharacter->uClass ) |
375 if ( !*(char *)(v4 - 5829) ) | 375 *(short *)pResMagicBase = v3; |
376 *(short *)v4 = v3; | 376 uSpellBookPageCount = 0; |
377 v6 = 0; | 377 v7 = pResMagicBase - 5726;// Skills |
378 v7 = v4 - 5726; | |
379 while ( !*(short *)v7 ) | 378 while ( !*(short *)v7 ) |
380 { | 379 { |
381 ++v6; | 380 ++uSpellBookPageCount; |
382 v7 += 2; | 381 v7 += 2; |
383 if ( v6 >= 9 ) | 382 if ( uSpellBookPageCount >= 9 ) |
384 goto LABEL_10; | 383 goto LABEL_10; |
385 } | 384 } |
386 v5->field_1A4E = v6; | 385 pCharacter->pNumSpellBookPage = uSpellBookPageCount; |
387 LABEL_10: | 386 LABEL_10: |
388 v5->uExpressionTimePassed = 0; | 387 pCharacter->uExpressionTimePassed = 0; |
389 Dst.Reset(); | 388 Dst.Reset(); |
390 if ( bGiveItems ) | 389 if ( bGiveItems ) |
391 { | 390 { |
392 pItemsTable->GenerateItem(2, 40, &Dst); | 391 pItemsTable->GenerateItem(2, 40, &Dst); |
393 v5->AddItem2(0xFFFFFFFFu, &Dst); | 392 pCharacter->AddItem2(-1, &Dst); |
394 uSkillIdx = 0; | 393 uSkillIdx = 0; |
395 v18 = 0; | 394 v18 = 0; |
396 do | 395 do |
397 { | 396 { |
398 if ( v5->pActiveSkills[uSkillIdx] ) | 397 if ( pCharacter->pActiveSkills[uSkillIdx] ) |
399 { | 398 { |
400 switch ( uSkillIdx ) | 399 switch ( uSkillIdx ) |
401 { | 400 { |
402 case PLAYER_SKILL_STAFF: | 401 case PLAYER_SKILL_STAFF: |
403 v15 = ITEM_STAFF_1; | 402 v15 = ITEM_STAFF_1; |
430 v15 = ITEM_CHAINMAIL_1; | 429 v15 = ITEM_CHAINMAIL_1; |
431 goto wear_item; | 430 goto wear_item; |
432 case PLAYER_SKILL_PLATE: | 431 case PLAYER_SKILL_PLATE: |
433 v15 = ITEM_PLATE_1; | 432 v15 = ITEM_PLATE_1; |
434 wear_item: | 433 wear_item: |
435 v5->WearItem(v15); | 434 pCharacter->WearItem(v15); |
436 break; | 435 break; |
437 case PLAYER_SKILL_FIRE: | 436 case PLAYER_SKILL_FIRE: |
438 v16 = ITEM_SPELLBOOK_FIRE_STRIKE; | 437 v16 = ITEM_SPELLBOOK_FIRE_STRIKE; |
439 goto add_item; | 438 goto add_item; |
440 case PLAYER_SKILL_AIR: | 439 case PLAYER_SKILL_AIR: |
460 case PLAYER_SKILL_MEDITATION: | 459 case PLAYER_SKILL_MEDITATION: |
461 case PLAYER_SKILL_PERCEPTION: | 460 case PLAYER_SKILL_PERCEPTION: |
462 case PLAYER_SKILL_DIPLOMACY: | 461 case PLAYER_SKILL_DIPLOMACY: |
463 case PLAYER_SKILL_TRAP_DISARM: | 462 case PLAYER_SKILL_TRAP_DISARM: |
464 case PLAYER_SKILL_LEARNING: | 463 case PLAYER_SKILL_LEARNING: |
465 v5->AddItem(0xFFFFFFFFu, ITEM_POTION_BOTTLE); | 464 pCharacter->AddItem(-1, ITEM_POTION_BOTTLE); |
466 v16 = 5 * (rand() % 3 + 40); // simple reagent | 465 v16 = 5 * (rand() % 3 + 40); // simple reagent |
467 goto add_item; | 466 goto add_item; |
468 case PLAYER_SKILL_DODGE: | 467 case PLAYER_SKILL_DODGE: |
469 v16 = ITEM_BOOTS_1; | 468 v16 = ITEM_BOOTS_1; |
470 goto add_item; | 469 goto add_item; |
471 case PLAYER_SKILL_UNARMED: | 470 case PLAYER_SKILL_UNARMED: |
472 v16 = ITEM_GAUNTLETS_1; | 471 v16 = ITEM_GAUNTLETS_1; |
473 add_item: | 472 add_item: |
474 v5->AddItem(0xFFFFFFFFu, v16); | 473 pCharacter->AddItem(-1, v16); |
475 break; | 474 break; |
476 default: | 475 default: |
477 break; | 476 break; |
478 } | 477 } |
479 } | 478 } |
481 v11 = __OFSUB__(v18 + 1, 36); | 480 v11 = __OFSUB__(v18 + 1, 36); |
482 v9 = v18 == 35; | 481 v9 = v18 == 35; |
483 v10 = v18++ - 35 < 0; | 482 v10 = v18++ - 35 < 0; |
484 } | 483 } |
485 while ( (unsigned __int8)(v10 ^ v11) | v9 ); | 484 while ( (unsigned __int8)(v10 ^ v11) | v9 ); |
486 v12 = (char *)&v5->pInventoryItems[0].uAttributes; | 485 v12 = (char *)&pCharacter->pInventoryItems[0].uAttributes; |
487 v13 = 138; | 486 v13 = 138; |
488 do | 487 do |
489 { | 488 { |
490 if ( *((int *)v12 - 5) ) | 489 if ( *((int *)v12 - 5) ) |
491 *(int *)v12 |= 1u; | 490 *(int *)v12 |= 1u; |
492 v12 += 36; | 491 v12 += 36; |
493 --v13; | 492 --v13; |
494 } | 493 } |
495 while ( v13 ); | 494 while ( v13 ); |
496 } | 495 } |
497 v5->sHealth = v5->GetMaxHealth(); | 496 pCharacter->sHealth = pCharacter->GetMaxHealth(); |
498 v14 = v5->GetMaxMana(); | 497 pCharacter->sMana = pCharacter->GetMaxMana(); |
499 v17 += 6972; | 498 pCharacter++; |
500 v9 = v19-- == 1; | 499 v9 = uNumPlayers-- == 1; |
501 v5->sMana = v14; | |
502 if ( v9 ) | 500 if ( v9 ) |
503 break; | 501 break; |
504 v4 = v17; | 502 pResMagicBase = (int)pCharacter; |
505 v3 = 10; | 503 v3 = 10; |
506 } | 504 } |
507 } | 505 } |
508 | 506 |
509 //----- (004917CE) -------------------------------------------------------- | 507 //----- (004917CE) -------------------------------------------------------- |
775 do | 773 do |
776 { | 774 { |
777 if ( ((Actor *)((char *)v0 - 59))->Actor::CanAct() && *((char *)v0 + 2) != 4 && *(char *)v0 != 5 ) | 775 if ( ((Actor *)((char *)v0 - 59))->Actor::CanAct() && *((char *)v0 + 2) != 4 && *(char *)v0 != 5 ) |
778 { | 776 { |
779 v1 = abs(*(short *)((char *)v0 + 83) - pParty->vPosition.x); | 777 v1 = abs(*(short *)((char *)v0 + 83) - pParty->vPosition.x); |
780 v2 = abs(*(short *)((char *)v0 + 85) - pParty->vPosition.z); | 778 v2 = abs(*(short *)((char *)v0 + 85) - pParty->vPosition.y); |
781 v3 = abs(*(short *)((char *)v0 + 87) - pParty->vPosition.y); | 779 v3 = abs(*(short *)((char *)v0 + 87) - pParty->vPosition.z); |
782 if ( (double)sub_4621DA(v1, v2, v3) < 512.0 ) | 780 if ( (double)sub_4621DA(v1, v2, v3) < 512.0 ) |
783 Actor::_402968(v4, 4, 0, 0); | 781 Actor::_402968(v4, 4, 0, 0); |
784 } | 782 } |
785 ++v4; | 783 ++v4; |
786 v0 = (char *)v0 + 836; | 784 v0 = (char *)v0 + 836; |