

public static uint PlayFX(float[] Origin, int EffectIndex)
{
uint ent = (uint)RPC.Call(0x1C0B7C, Origin, 0x56);
PS3.WriteInt32(ent + 0xA0, EffectIndex);
PS3.WriteInt32(ent + 0xD8, 0);
PS3.WriteFloat(ent + 0x40, 0f);
PS3.WriteFloat(ent + 0x44, 0f);
PS3.WriteFloat(ent + 0x3C, 270f);
return ent;
}
public static void Earthquake(int Duration, float[] origin, float radius, float scale)
{
int ent = RPC.Call(0x1C0B7C, origin, 0x5F);
PS3.WriteFloat((uint)ent + 0x5C, radius);
PS3.WriteFloat((uint)ent + 0x54, scale);
PS3.WriteFloat((uint)ent + 0x58, Duration);
PS3.WriteInt32((uint)ent + 0xD8, 0x00);
}
//Following is ghosts+xbox, but if you understand C++, then finding this on PS3 & converting to C# shouldn't be an issue.
int LoadFX(char*effectName)
{
if(!*(int*)(0x83375128 + 0x2C)) *(int*)(0x83375128 + 0x2C) = 0x01; // This is the initializing variable with the level_local_t structure, All G_XXXIndex function's have this check, if initializing is false, that means nothing has been initialized. The check is to see if the current effect inserted has to be precached, and this check id's it to be either precached or not. Setting it to 1 (true), will make the game think everything has been initialized...therefore, all precached index's will be returned.
if(stricmp(effectName,"fx/",0x3) != 0 || stricmp(effectName,"vfx/",0x4) != 0)//cmp function's return null when both strings are equal. the 3rd param is just the length in the first param's string to check.
{
if(G_EffectIndex(effectName) != 0) return G_EffectIndex(effectName);//whole point in this if statement is to just make sure the inserted effect name is valid at all, this way there should be no issue's memory wise.
return 0;
}
return -1;
}
Copyright © 2026, NextGenUpdate.
All Rights Reserved.