Hmm, I just tested the issue under the
SoA 23037 executable, and the infinite spell absorption as well as the graphic not showing also exist. Did you see the graphic in a different version of
SoA?
Update: Turns out
SoA 22941 still plays the spell turn graphic, and that this code is added somewhere between 22941 and 23037.
In void CVisualEffect::AIUpdate()
//using ToB26498 offsets
mov edx, [ebp+var_34]
mov eax, [edx+6450h]
mov [ebp+var_1A0], eax
mov ecx, [ebp+var_1A0]
cmp ecx, ds:dword_AAD1D0
jnz short loc_654CCA
mov edx, [ebp+var_2B4]
mov eax, [edx+30h]
mov [ebp+var_1A8], eax
mov ecx, [ebp+var_34]
mov [ebp+var_1A4], ecx
mov edx, [ebp+var_1A4]
mov eax, [ebp+var_1A8]
mov [edx+6450h], eax
jmp short loc_654D36 //if cre.eVisualEffect == -1, cre.eVisualEffect = this.e; ...
loc_654CCA:
mov ecx, [ebp+var_34]
mov edx, [ecx+6450h]
mov [ebp+var_1AC], edx
mov eax, [ebp+var_2B4]
mov ecx, [ebp+var_1AC]
cmp ecx, [eax+30h] //if cre.eVisualEffect == this.e, ...
jz short loc_654D36
mov edx, dword_B773CC
mov eax, [edx+42BAh]
mov [ebp+var_1B0], eax
push 0FFFFFFFFh
mov cl, ds:byte_AAD1CB
push ecx
mov edx, [ebp+var_2B4]
mov eax, [edx+25Eh]
push eax
mov ecx, [ebp+var_1B0]
add ecx, 37F6h
call sub_676808
mov byte ptr [ebp+var_14], al
mov ecx, [ebp+var_2B4]
call sub_656D2E //purge!
jmp loc_6561E8
Since the spell turning graphic on the ground is already owned by the cre, the extra graphic gets purged because it is a new visual effect and doesn't have the same index (e) as the graphic on the ground.
Probably an unintentional bug created by a bugfix for something else, so we can't just remove this extra code.
Update2: So, you can simply make it play independently of the cre by not giving the VisualEffect an owner.
In void CProtectedSplList::Update(CCreatureObject&)
loc_465116:
mov ecx, [ebp+var_100]
mov [ebp+var_68], ecx
mov [ebp+var_4], 0FFFFFFFFh
mov edx, [ebp+var_68]
mov [ebp+var_30], edx //pVisualEffect
sub esp, 8
mov ecx, esp
mov [ebp+var_70], esp
push offset aSpsturni ; "spsturni"
call sub_999EFB
lea ecx, [ebp+var_40]
call sub_64C310
mov [ebp+var_4], 3
lea ecx, [ebp+var_40]
call sub_64C49B
mov [ebp+var_44], eax //pVidCell
mov eax, [ebp+var_20]
add eax, 6
push eax
mov ecx, [ebp+arg_0]
add ecx, 6
push ecx
call sub_8AD080
add esp, 8
movsx edx, ax
mov eax, [ebp+var_44]
mov [eax+30Ch], edx
mov ecx, [ebp+var_44]
mov dword ptr [ecx+7Ah], 8
mov edx, [ebp+var_44]
mov byte ptr [edx+38Eh], 1
mov eax, [ebp+arg_0]
mov ecx, [eax+30h]
mov [ebp+var_C4], ecx //pCreatureObject->e
mov edx, [ebp+var_30]
mov eax, [ebp+var_C4]
//------------------------------------------------------- nop me!
mov [edx+25Eh], eax //pVisualEffect->eOwner
//-------------------------------------------------------
mov ecx, [ebp+var_30]
mov dword ptr [ecx+52h], 1
mov edx, [ebp+arg_0]
mov eax, [edx+6]
mov ecx, [edx+0Ah]
mov edx, [ebp+var_30]
mov [edx+256h], eax
mov [edx+25Ah], ecx
mov eax, [ebp+arg_0]
mov ecx, [eax+12h]
mov [ebp+var_C8], ecx
mov dl, ds:byte_AAA9EE
push edx
push 20h
mov eax, [ebp+arg_0]
add eax, 6
push eax
mov ecx, [ebp+var_C8]
push ecx
mov ecx, [ebp+var_30]
call sub_6561F8
Edited by Ascension64, 10 January 2012 - 10:40 PM.