Mercurial > mm7
changeset 2330:5133eea7a4ca
Merge
author | Grumpy7 |
---|---|
date | Tue, 01 Apr 2014 23:44:27 +0200 |
parents | 4791895e4396 (diff) 846e28e41fb4 (current diff) |
children | 9551756f46c4 |
files | |
diffstat | 1 files changed, 292 insertions(+), 664 deletions(-) [+] |
line wrap: on
line diff
--- a/Spells.cpp Fri Mar 28 12:32:18 2014 +0600 +++ b/Spells.cpp Tue Apr 01 23:44:27 2014 +0200 @@ -355,729 +355,357 @@ void __fastcall EventCastSpell(int uSpellID, int uSkillLevel, int uSkill, int fromx, int fromy, int fromz, int tox, int toy, int toz)//sub_448DF8 { int v9; // esi@1 - double v10; // st7@4 - double v11; // st6@4 - double v12; // st5@4 + signed __int64 v10; // st7@4 + signed __int64 v11; // st6@4 + signed __int64 v12; // st5@4 double v13; // st7@6 int v14; // ST44_4@7 - signed int v15; // ebx@9 - signed int v16; // edx@15 - char *v17; // ecx@16 - unsigned __int16 v18; // ax@20 - char *v19; // ecx@31 - int v20; // edx@35 - signed int v21; // edx@37 - char *v22; // ecx@38 - unsigned __int16 v23; // ax@41 + uint skillMasteryPlusOne; // ebx@9 + uint v16; // edx@15 int i; // esi@42 - signed int v25; // edx@55 - char *v26; // ecx@56 - unsigned __int16 v27; // ax@59 int j; // esi@60 - signed int v29; // edx@66 - char *v30; // ecx@67 - unsigned __int16 v31; // ax@70 - //Player *v32; // eax@80 - //unsigned __int16 v33; // si@85 - int v34; // eax@96 - int v35; // eax@97 unsigned __int64 v36; // qax@99 SpellBuff *v37; // ecx@99 int v38; // esi@103 signed __int64 v39; // qax@105 - int v40; // ebx@108 - int v41; // ebx@109 int v42; // esi@111 int v43; // ebx@111 - int v44; // eax@117 - //unsigned __int16 v45; // si@137 - unsigned __int16 v46; // [sp-8h] [bp-BCh]@99 int v47; // [sp-4h] [bp-B8h]@35 - unsigned __int16 v48; // [sp-4h] [bp-B8h]@99 int v49; // [sp+0h] [bp-B4h]@35 - int v50; // [sp+0h] [bp-B4h]@99 - int v51; // [sp+4h] [bp-B0h]@35 - unsigned __int8 v52; // [sp+4h] [bp-B0h]@99 - float v53; // [sp+14h] [bp-A0h]@4 - float v54; // [sp+18h] [bp-9Ch]@4 int v55; // [sp+28h] [bp-8Ch]@7 unsigned int yaw; // [sp+30h] [bp-84h]@7 int pitch; // [sp+34h] [bp-80h]@7 - //SpriteObject a1; // [sp+38h] [bp-7Ch]@12 - int v59; // [sp+A8h] [bp-Ch]@1 int v60; // [sp+ACh] [bp-8h]@1 - //int spellnum_; // [sp+B0h] [bp-4h]@1 - //signed int levela; // [sp+BCh] [bp+8h]@80 int a6_4; // [sp+C8h] [bp+14h]@117 - float a7a; // [sp+CCh] [bp+18h]@6 - signed int a7b; // [sp+CCh] [bp+18h]@12 int a7c; // [sp+CCh] [bp+18h]@29 int a7d; // [sp+CCh] [bp+18h]@55 - float a8a; // [sp+D0h] [bp+1Ch]@6 + signed __int64 xSquared; // [sp+D0h] [bp+1Ch]@6 int a8b; // [sp+D0h] [bp+1Ch]@37 int a8c; // [sp+D0h] [bp+1Ch]@55 - float toza; // [sp+D4h] [bp+20h]@6 + signed __int64 ySquared; // [sp+D4h] [bp+20h]@6 v9 = 0; - v59 = uSkillLevel + 1; + skillMasteryPlusOne = uSkillLevel + 1; //spellnum_ = uSpellID; v60 = 0; if ( tox || toy || toz ) { - v10 = (double)tox - (double)fromx; - v53 = v10; - v11 = (double)toy - (double)fromy; - v54 = v11; - v12 = (double)toz; + v10 = tox - fromx; + v11 = toy - fromy; + v12 = toz - fromz; } else { - v10 = (double)pParty->vPosition.x - (double)fromx; - v53 = v10; - v11 = (double)pParty->vPosition.y - (double)fromy; - v54 = v11; - v12 = (double)(pParty->vPosition.z + pParty->sEyelevel); + v10 = pParty->vPosition.x - fromx; + v11 = pParty->vPosition.y - fromy; + v12 = (pParty->vPosition.z + pParty->sEyelevel) - fromz; } - a7a = v12 - (double)fromz; - toza = v11 * v11; - a8a = v10 * v10; - v13 = sqrt(a7a * a7a + a8a + toza); + v13 = sqrt(v10 * v10 + v11 * v11 + v12 * v12); if ( v13 <= 1.0 ) { - LOBYTE(v55) = 1; + v55 = 1; yaw = 0; pitch = 0; } else { - v55 = (signed __int64)v13; - v14 = (signed __int64)sqrt(a8a + toza); - yaw = stru_5C6E00->Atan2((signed __int64)v53, (signed __int64)v54); - pitch = stru_5C6E00->Atan2(v14, (signed __int64)a7a); + v55 = (int)v13; + ySquared = v11 * v11; + xSquared = v10 * v10; + v14 = (int)sqrt(xSquared + ySquared); + yaw = stru_5C6E00->Atan2((int)v10, (int)v11); + pitch = stru_5C6E00->Atan2(v14, (int)v12); } - v15 = v59; - if ( v59 <= 0 || v59 > 4 ) - v15 = 1; - a7b = v15; + Assert(skillMasteryPlusOne > 0 && skillMasteryPlusOne <= 4, "Invalid mastery level"); SpriteObject a1; // [sp+38h] [bp-7Ch]@12 //SpriteObject::SpriteObject(&a1); - a1.uType = stru_4E3ACC[uSpellID].uType; - if ( uSpellID > 58 ) - { - if ( uSpellID == SPELL_BODY_PROTECTION_FROM_BODY ) - goto LABEL_117; - if ( uSpellID != SPELL_LIGHT_DAY_OF_THE_GODS ) - return; - v40 = v15 - 2; - if ( v40 ) - { - v41 = v40 - 1; - if ( !v41 ) - { - v42 = 14400 * uSkill; - v43 = 4 * uSkill + 10; - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 0); - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 1u); - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 2u); - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 3u); - v39 = (signed __int64)((double)(v42 << 7) * 0.033333335); - v37 = &pParty->pPartyBuffs[PARTY_BUFF_DAY_OF_GODS]; - v36 = pParty->uTimePlayed + v39; - v37->Apply(v36, a7b, v43, 0, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - if ( v41 == 1 ) - { - v42 = 18000 * uSkill; - v43 = 5 * uSkill + 10; - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 0); - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 1u); - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 2u); - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 3u); - v39 = (signed __int64)((double)(v42 << 7) * 0.033333335); - v37 = &pParty->pPartyBuffs[PARTY_BUFF_DAY_OF_GODS]; - v36 = pParty->uTimePlayed + v39; - v37->Apply(v36, a7b, v43, 0, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - } - v42 = 10800 * uSkill; - v43 = 3 * uSkill + 10; - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 0); - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 1u); - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 2u); - pGame->pStru6Instance->SetPlayerBuffAnim(0x53u, 3u); - v39 = (signed __int64)((double)(v42 << 7) * 0.033333335); - v37 = &pParty->pPartyBuffs[PARTY_BUFF_DAY_OF_GODS]; - v36 = pParty->uTimePlayed + v39; - v37->Apply(v36, a7b, v43, 0, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - if ( uSpellID != 58 ) + switch ( uSpellID ) { - switch ( uSpellID ) - { - case SPELL_FIRE_FIRE_BOLT: - case SPELL_FIRE_FIREBALL: - case SPELL_AIR_LIGHNING_BOLT: - case SPELL_WATER_ICE_BOLT: - case SPELL_WATER_ACID_BURST: - case SPELL_WATER_ICE_BLAST: - case SPELL_EARTH_BLADES: - case SPELL_EARTH_ROCK_BLAST: - a1.stru_24.Reset(); - v16 = 0; - a1.spell_id = uSpellID; - a1.spell_level = uSkill; - a1.spell_skill = v15; - if ( (signed int)pObjectList->uNumObjects <= 0 ) + case SPELL_FIRE_FIRE_BOLT: + case SPELL_FIRE_FIREBALL: + case SPELL_AIR_LIGHNING_BOLT: + case SPELL_WATER_ICE_BOLT: + case SPELL_WATER_ACID_BURST: + case SPELL_WATER_ICE_BLAST: + case SPELL_EARTH_BLADES: + case SPELL_EARTH_ROCK_BLAST: + case SPELL_WATER_POISON_SPRAY: + case SPELL_AIR_SPARKS: + case SPELL_EARTH_DEATH_BLOSSOM: + a1.uType = stru_4E3ACC[uSpellID].uType; + a1.stru_24.Reset(); + a1.spell_id = uSpellID; + a1.spell_level = uSkill; + a1.spell_skill = skillMasteryPlusOne; + v16 = 0; + while (v16 < pObjectList->uNumObjects) + { + if ( a1.uType == pObjectList->pObjects[v16].uObjectID) { - //v18 = 0; - a1.uObjectDescID = 0; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - //v20 = yaw; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 0; - a1.uFacing = yaw; - a1.uSoundID = 0; - v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; - a1.Create(yaw, pitch, v49, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; + break; } - v17 = (char *)&pObjectList->pObjects->uObjectID; - while ( (short)a1.uType != *(short *)v17 ) - { - ++v16; - v17 += 56; - if ( v16 >= (signed int)pObjectList->uNumObjects ) - { - //v18 = 0; - a1.uObjectDescID = 0; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - //v20 = yaw; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 0; - a1.uFacing = yaw; - a1.uSoundID = 0; - v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; - a1.Create(yaw, pitch, v49, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - } - v18 = v16; - a1.uObjectDescID = v18; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - //v20 = yaw; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 0; - a1.uFacing = yaw; - a1.uSoundID = 0; + v16++; + } + a1.uObjectDescID = v16; + a1.vPosition.x = fromx; + a1.vPosition.y = fromy; + a1.vPosition.z = fromz; + a1.uAttributes = 16; + a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); + a1.field_60_distance_related_prolly_lod = v55; + a1.uSpriteFrameID = 0; + a1.spell_caster_pid = 8000 | OBJECT_Item; + a1.uSoundID = 0; + break; + } + + switch ( uSpellID ) + { + case SPELL_FIRE_FIRE_BOLT: + case SPELL_FIRE_FIREBALL: + case SPELL_AIR_LIGHNING_BOLT: + case SPELL_WATER_ICE_BOLT: + case SPELL_WATER_ACID_BURST: + case SPELL_WATER_ICE_BLAST: + case SPELL_EARTH_BLADES: + case SPELL_EARTH_ROCK_BLAST: + //v20 = yaw; + a1.spell_target_pid = 0; + a1.uFacing = yaw; + a1.uSoundID = 0; + v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; + a1.Create(yaw, pitch, v49, 0); + pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); + return; + case SPELL_WATER_POISON_SPRAY: + switch ( skillMasteryPlusOne ) + { + case 1: + v60 = 1; + break; + case 2: + v60 = 3; + break; + case 3: + v60 = 5; + break; + case 4: + v60 = 7; + break; + } + a1.spell_target_pid = 0; + a1.uFacing = yaw; + if ( v60 == 1 ) + { v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; a1.Create(yaw, pitch, v49, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - case SPELL_WATER_POISON_SPRAY: - switch ( v15 ) - { - case 1: - v60 = 1; - break; - case 2: - v60 = 3; - break; - case 3: - v60 = 5; - break; - case 4: - v60 = 7; - break; - } + } + else + { a7c = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360; - if ( v60 != 1 ) - { - a8b = a7c / (v60 - 1); - a1.stru_24.Reset(); - v21 = 0; - a1.spell_id = uSpellID; - a1.spell_level = uSkill; - a1.spell_skill = v15; - if ( (signed int)pObjectList->uNumObjects <= 0 ) - v23 = 0; - else - { - v22 = (char *)&pObjectList->pObjects->uObjectID; - while ( (short)a1.uType != *(short *)v22 ) - { - ++v21; - v22 += 56; - if ( v21 >= (signed int)pObjectList->uNumObjects ) - { - v23 = 0; - a1.uObjectDescID = v23; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 4; - a1.uSoundID = 0; - for ( i = a7c / -2; i <= a7c / 2; i += a8b ) - { - a1.uFacing = i + yaw; - a1.Create((signed __int16)(i + (short)yaw), pitch, pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0); - } - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - } - v23 = v21; - } - a1.uObjectDescID = v23; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 4; - a1.uSoundID = 0; - for ( i = a7c / -2; i <= a7c / 2; i += a8b ) - { - a1.uFacing = i + yaw; - a1.Create((signed __int16)(i + (short)yaw), pitch, pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0); - } - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - a1.stru_24.Reset(); - a1.spell_id = uSpellID; - a1.spell_level = uSkill; - a1.spell_skill = v15; - if ( (signed int)pObjectList->uNumObjects <= 0 ) - { - //v18 = 0; - a1.uObjectDescID = 0; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - //v20 = yaw; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 0; - a1.uFacing = yaw; - a1.uSoundID = 0; - //v51 = 0; - v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; - //v47 = pitch; - a1.Create(yaw, pitch, v49, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - //v19 = (char *)&pObjectList->pObjects->uObjectID; - for ( v16 = 0; v16 < (signed int)pObjectList->uNumObjects; ++v16 ) + a8b = a7c / (v60 - 1); + for ( i = a7c / -2; i <= a7c / 2; i += a8b ) { - if ( (short)a1.uType == pObjectList->pObjects[v16].uObjectID ) - { - //v18 = v16; - a1.uObjectDescID = v16; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - //v20 = yaw; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 0; - a1.uFacing = yaw; - a1.uSoundID = 0; - //v51 = 0; - v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; - //v47 = pitch; - a1.Create(yaw, pitch, v49, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - //v19 += 56; - } - //v18 = 0; - a1.uObjectDescID = 0; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - //v20 = yaw; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 0; - a1.uFacing = yaw; - a1.uSoundID = 0; - //v51 = 0; - v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; - //v47 = pitch; - a1.Create(yaw, pitch, v49, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - case SPELL_AIR_SPARKS: - switch ( v15 ) - { - case 1: - v60 = 3; - break; - case 2: - v60 = 5; - break; - case 3: - v60 = 7; - break; - case 4: - v60 = 9; - break; - } - a7d = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360; - a8c = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360 / (v60 - 1); - a1.stru_24.Reset(); - v25 = 0; - a1.spell_id = uSpellID; - a1.spell_level = uSkill; - a1.spell_skill = v15; - if ( (signed int)pObjectList->uNumObjects <= 0 ) - { - //v27 = 0; - a1.uObjectDescID = 0; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 4; - a1.uSoundID = 0; - for ( j = a7d / -2; j <= a7d / 2; j += a8c ) - { - a1.uFacing = j + yaw; - a1.Create((signed __int16)(j + (short)yaw), pitch, pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0); - } - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - v26 = (char *)&pObjectList->pObjects->uObjectID; - while ( (short)a1.uType != *(short *)v26 ) - { - ++v25; - v26 += 56; - if ( v25 >= (signed int)pObjectList->uNumObjects ) - { - v27 = 0; - a1.uObjectDescID = v27; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 4; - a1.uSoundID = 0; - for ( j = a7d / -2; j <= a7d / 2; j += a8c ) - { - a1.uFacing = j + yaw; - a1.Create((signed __int16)(j + (short)yaw), pitch, pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0); - } - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - } - v27 = v25; - a1.uObjectDescID = v27; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 4; - a1.uSoundID = 0; - for ( j = a7d / -2; j <= a7d / 2; j += a8c ) - { - a1.uFacing = j + yaw; - a1.Create((signed __int16)(j + (short)yaw), pitch, - pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0); + a1.uFacing = i + yaw; + a1.Create((signed __int16)(i + (short)yaw), pitch, pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0); } - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - case SPELL_EARTH_DEATH_BLOSSOM: - if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) - return; - a1.stru_24.Reset(); - v29 = 0; - a1.spell_id = uSpellID; - a1.spell_level = uSkill; - a1.spell_skill = v15; - if ( (signed int)pObjectList->uNumObjects <= 0 ) - { - //v31 = 0; - a1.uObjectDescID = 0; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 4; - a1.uSoundID = 0; - //v51 = 0; - v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; - //v20 = yaw; - v47 = (signed int)stru_5C6E00->uIntegerHalfPi / 2; - a1.Create(yaw, v47, v49, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } - v30 = (char *)&pObjectList->pObjects->uObjectID; - break; - - case SPELL_FIRE_HASTE: - if ( v15 > 0 ) - { - if ( v15 <= 2 ) - v9 = 60 * (uSkill + 60); - else if ( v15 == 3 ) - v9 = 180 * (uSkill + 20); - else if ( v15 == 4 ) - v9 = 240 * (uSkill + 15); - } - //levela = 1; - //v32 = pParty->pPlayers;//[0].pConditions[1]; - //do - for (uint i = 0; i < 4; ++i) - if (pParty->pPlayers[i].IsWeak()) - return; - //while ( v32 <= &pParty->pPlayers[3] ); - //if ( !levela ) - // return; - pParty->pPartyBuffs[PARTY_BUFF_HASTE].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)(v9 * 128) * 0.033333335), - v15, 0, 0, 0); - //v33 = spellnum_; - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);//звук алтаря - return; - case SPELL_AIR_SHIELD: - case SPELL_EARTH_STONESKIN: - case SPELL_SPIRIT_HEROISM: - switch ( v15 ) - { - case 1: - case 2: - v9 = 300 * (uSkill + 12); - break; - case 3: - v9 = 900 * (uSkill + 4); - break; - case 4: - v9 = 3600 * (uSkill + 1); - break; - } - switch ( uSpellID ) - { - case 17: - v60 = 0; - uSkill = 14; - break; - case 38: - v35 = uSkill + 5; - uSkill = 15; - v60 = v35; - break; - case 51: - v34 = uSkill + 5; - uSkill = 9; - v60 = v34; - break; - } - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3); - //v52 = 0; - //v50 = 0; - //v48 = v60; - //v46 = v15; - v36 = pParty->uTimePlayed + (signed int)(signed __int64)((double)(v9 << 7) * 0.033333335); - //v37 = &pParty->pPartyBuffs[uSkill]; - pParty->pPartyBuffs[uSkill].Apply(v36, v15, v60, 0, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); + } + pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); + return; + case SPELL_AIR_SPARKS: + switch ( skillMasteryPlusOne ) + { + case 1: + v60 = 3; + break; + case 2: + v60 = 5; + break; + case 3: + v60 = 7; + break; + case 4: + v60 = 9; + break; + } + a7d = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360; + a8c = (signed int)(60 * stru_5C6E00->uIntegerDoublePi) / 360 / (v60 - 1); + a1.spell_target_pid = 4; + for ( j = a7d / -2; j <= a7d / 2; j += a8c ) + { + a1.uFacing = j + yaw; + a1.Create((signed __int16)(j + (short)yaw), pitch, pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed, 0); + } + pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); + return; + case SPELL_EARTH_DEATH_BLOSSOM: + if ( uCurrentlyLoadedLevelType == LEVEL_Indoor ) return; - case SPELL_FIRE_IMMOLATION: - if ( v15 == 2 || v15 == 3 || v15 != 4 ) - v38 = 60 * uSkill; - else - v38 = 600 * uSkill; - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3); - v52 = 0; - v50 = 0; - v48 = uSkill; - v46 = v15; - v39 = (signed __int64)((double)(v38 << 7) * 0.033333335); - v37 = &pParty->pPartyBuffs[PARTY_BUFF_IMMOLATION]; - v36 = pParty->uTimePlayed + v39; - v37->Apply(v36, v46, v48, v50, v52); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - case SPELL_FIRE_PROTECTION_FROM_FIRE: - case SPELL_AIR_PROTECTION_FROM_AIR: - case SPELL_WATER_PROTECTION_FROM_WATER: - case SPELL_EARTH_PROTECTION_FROM_EARTH: - goto LABEL_117; - default: - return; - } - while ( (short)a1.uType != *(short *)v30 ) - { - ++v29; - v30 += 56; - if ( v29 >= (signed int)pObjectList->uNumObjects ) + a1.spell_target_pid = 4; + v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; + v47 = (signed int)stru_5C6E00->uIntegerHalfPi / 2; + a1.Create(yaw, v47, v49, 0); + pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); + return; + + case SPELL_FIRE_HASTE: + if ( skillMasteryPlusOne > 0 ) { - //v31 = 0; - a1.uObjectDescID = 0; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 4; - a1.uSoundID = 0; - //v51 = 0; - v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; - //v20 = yaw; - v47 = (signed int)stru_5C6E00->uIntegerHalfPi / 2; - a1.Create(yaw, v47, v49, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; + if ( skillMasteryPlusOne <= 2 ) + v9 = 60 * (uSkill + 60); + else if ( skillMasteryPlusOne == 3 ) + v9 = 180 * (uSkill + 20); + else if ( skillMasteryPlusOne == 4 ) + v9 = 240 * (uSkill + 15); + } + for (uint i = 0; i < 4; ++i) + if (pParty->pPlayers[i].IsWeak()) + return; + pParty->pPartyBuffs[PARTY_BUFF_HASTE].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)(v9 * 128) * 0.033333335), skillMasteryPlusOne, 0, 0, 0); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3); + pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0);//звук алтаря + return; + case SPELL_AIR_SHIELD: + case SPELL_EARTH_STONESKIN: + case SPELL_SPIRIT_HEROISM: + switch ( skillMasteryPlusOne ) + { + case 1: + case 2: + v9 = 300 * (uSkill + 12); + break; + case 3: + v9 = 900 * (uSkill + 4); + break; + case 4: + v9 = 3600 * (uSkill + 1); + break; + } + switch ( uSpellID ) + { + case SPELL_AIR_SHIELD: + v60 = 0; + uSkill = 14; + break; + case SPELL_EARTH_STONESKIN: + v60 = uSkill + 5; + uSkill = 15; + break; + case SPELL_SPIRIT_HEROISM: + v60 = uSkill + 5; + uSkill = 9; + break; } - } - v31 = v29; - a1.uObjectDescID = v31; - *(_QWORD *)&a1.vPosition.y = __PAIR__(fromz, fromy); - a1.vPosition.x = fromx; - a1.uAttributes = 16; - a1.uSectorID = pIndoor->GetSector(fromx, fromy, fromz); - a1.field_60_distance_related_prolly_lod = v55; - a1.uSpriteFrameID = 0; - a1.spell_caster_pid = 8000 | OBJECT_Item; - a1.spell_target_pid = 4; - a1.uSoundID = 0; - //v51 = 0; - v49 = pObjectList->pObjects[(signed __int16)a1.uObjectDescID].uSpeed; - //v20 = yaw; - v47 = (signed int)stru_5C6E00->uIntegerHalfPi / 2; - a1.Create(yaw, v47, v49, 0); - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); - return; - } -LABEL_117: - v44 = uSkill; - a6_4 = 3600 * uSkill; - if ( v15 == 1 ) - { - v60 = v44; - goto LABEL_125; - } - if ( v15 == 2 ) - { - v44 = 2 * uSkill; - v60 = v44; - goto LABEL_125; - } - if ( v15 == 3 ) - { - v44 = 3 * uSkill; - v60 = v44; - goto LABEL_125; + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3); + v36 = pParty->uTimePlayed + (signed int)(signed __int64)((double)(v9 << 7) * 0.033333335); + pParty->pPartyBuffs[uSkill].Apply(v36, skillMasteryPlusOne, v60, 0, 0); + pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); + return; + case SPELL_FIRE_IMMOLATION: + if (skillMasteryPlusOne == 4) + v38 = 600 * uSkill; + else + v38 = 60 * uSkill; + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3); + v39 = (signed __int64)((double)(v38 << 7) * 0.033333335); + v36 = pParty->uTimePlayed + v39; + pParty->pPartyBuffs[PARTY_BUFF_IMMOLATION].Apply(v36, skillMasteryPlusOne, uSkill, 0, 0); + pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); + return; + case SPELL_FIRE_PROTECTION_FROM_FIRE: + case SPELL_AIR_PROTECTION_FROM_AIR: + case SPELL_WATER_PROTECTION_FROM_WATER: + case SPELL_EARTH_PROTECTION_FROM_EARTH: + case SPELL_MIND_PROTECTION_FROM_MIND: + case SPELL_BODY_PROTECTION_FROM_BODY: + a6_4 = 3600 * uSkill; + switch (skillMasteryPlusOne) + { + case 1: + v60 = uSkill; + break; + case 2: + v60 = 2 * uSkill; + break; + case 3: + v60 = 3 * uSkill; + break; + case 4: + v60 = 4 * uSkill; + break; + } + switch ( uSpellID ) + { + case SPELL_FIRE_PROTECTION_FROM_FIRE: + uSkill = PARTY_BUFF_RESIST_FIRE; + break; + case SPELL_AIR_PROTECTION_FROM_AIR: + uSkill = PARTY_BUFF_RESIST_AIR; + break; + case SPELL_WATER_PROTECTION_FROM_WATER: + uSkill = PARTY_BUFF_RESIST_WATER; + break; + case SPELL_EARTH_PROTECTION_FROM_EARTH: + uSkill = PARTY_BUFF_RESIST_EARTH; + break; + case SPELL_MIND_PROTECTION_FROM_MIND: + uSkill = PARTY_BUFF_RESIST_MIND; + break; + case SPELL_BODY_PROTECTION_FROM_BODY: + uSkill = PARTY_BUFF_RESIST_BODY; + break; + } + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3); + pParty->pPartyBuffs[uSkill].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)a6_4 * 4.2666669), skillMasteryPlusOne, v60, 0, 0); + pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); + return; + case SPELL_LIGHT_DAY_OF_THE_GODS : + switch (skillMasteryPlusOne) + { + case 2: + v42 = 10800 * uSkill; + v43 = 3 * uSkill + 10; + break; + case 3: + v42 = 18000 * uSkill; + v43 = 5 * uSkill + 10; + break; + case 4: + v42 = 14400 * uSkill; + v43 = 4 * uSkill + 10; + break; + } + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2); + pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3); + v39 = (signed __int64)((double)(v42 << 7) * 0.033333335); + v36 = pParty->uTimePlayed + v39; + pParty->pPartyBuffs[PARTY_BUFF_DAY_OF_GODS].Apply(v36, skillMasteryPlusOne, v43, 0, 0); + pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); + return; + default: + return; } - if ( v15 == 4 ) - { - v44 = 4 * uSkill; - v60 = v44; - goto LABEL_125; - } -LABEL_125: - switch ( uSpellID ) - { - case 3: - uSkill = 6; - break; - case 14: - uSkill = 0; - break; - case 25: - uSkill = 17; - break; - case 36: - uSkill = 4; - break; - case 58: - uSkill = 12; - break; - case 69: - uSkill = 1; - break; - } - //v45 = spellnum_; - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 0); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 1); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 2); - pGame->pStru6Instance->SetPlayerBuffAnim(uSpellID, 3); - pParty->pPartyBuffs[uSkill].Apply(pParty->uTimePlayed + (signed int)(signed __int64)((double)a6_4 * 4.2666669), v15, v60, 0, 0); - //levela = 1; -//LABEL_138: - //if ( levela ) -//LABEL_139: - pAudioPlayer->PlaySound((SoundID)word_4EE088_sound_ids[uSpellID], 0, 0, fromx, fromy, 0, 0, 0); } //----- (00427769) -------------------------------------------------------- bool sub_427769_isSpellQuickCastableOnShiftClick(unsigned int uSpellID) { - return ( pSpellDatas[uSpellID].stats & 0xC ); + return ( pSpellDatas[uSpellID].stats & 0xC ) != 0; } //----- (0043AFE3) -------------------------------------------------------- int _43AFE3_calc_spell_damage(int spellId, int spellLevel, signed int skillMastery, int currentHp)