you still alive Harry ?

ie here

and the real hardware

It's like that for the entire section
Anyway in the viewport there are some values we aren't passing out
- Code: Select all
0x1c: xxxxxxxx xxxxxxxx -------- -------- "lj"
-------- -------- xxxxxxxx xxxxxxxx "li"
These values are almost always zero, except for this section of scud. As soon as the fog shows where it shouldn't suddenly these values spring to life.
In the SDK I think it's this
- Code: Select all
void SetLOSPosition ( float los_position_i
, float los_position_j ) ;
In the decompiled lib comes out as
- Code: Select all
void __thiscall PRO_Viewport::SetLOSPosition(PRO_Viewport *this, float los_position_i, float los_position_j)
{
int v3; // eax@1
*((float *)this + 53) = los_position_i;
*((float *)this + 54) = los_position_j;
*((_DWORD *)this + 13) = (*((_DWORD *)g_API_Data + 343))++;
v3 = *((_DWORD *)this + 14) | 1;
*((_DWORD *)this + 14) = v3;
*((_DWORD *)this + 14) = v3 | 0x80;
PRO_Pingpong_Data_Block::NotifyUpdate(this);
}
And
- Code: Select all
void __thiscall PRO_Viewport::updateLOSPosition(PRO_Viewport *this)
{
if ( *((_DWORD *)this + 4) == 1 )
{
*(_DWORD *)(*((_DWORD *)this + 7) + 112) = *(_DWORD *)(*((_DWORD *)this + 7) + 112) & 0xFFFF | ((signed __int16)(signed __int64)(*((float *)this + 53) * *((float *)this + 47) * 8.0) << 16);
*(_DWORD *)(*((_DWORD *)this + 7) + 112) = *(_DWORD *)(*((_DWORD *)this + 7) + 112) & 0xFFFF0000 | (unsigned __int16)(signed __int64)(*((float *)this + 48) * *((float *)this + 54) * 8.0);
}
}
The updateLosPosition tells us the values are multiplied by 8
(float *)this + 47) * 8.0) << 16
and
(float *)this + 54) * 8.0
So we can read out this los position ?? with this code
- Code: Select all
float li = (vpnode[0x1c] & 0xFFFF) / 8.0f;
float lj = (vpnode[0x1c] >> 16) / 8.0f;
Any idea what the hell a los position is? I guess it's related to lighting or the lens flair somehow.