/****************************************************************************** * edited vars ******************************************************************************/ struct UStruct : UField { DWORD Unknown0x0040; DWORD Unknown0x0044; UField * pChildren; DWORD Size; FName FriendlyName; //this one is new TArray Script; char Unknown0x0060[0x02C]; }; /****************************************************************************** * new vars ******************************************************************************/ FName Process_Tick_FName = -1; FName Process_PreRender_FName = -1; FName Process_PostRender_FName = -1; FName Process_KeyEvent_FName = -1; bool bAllFNamesIndexed = false; struct Process_Tick_Parms { TArray InteractionArray; FLOAT DeltaTime; INT Index; }; struct Process_PreRender_Parms { TArray InteractionArray; void* Canvas; INT Index; }; struct Process_PostRender_Parms { TArray InteractionArray; void* Canvas; INT Index; }; struct Process_KeyEvent_Parms { TArray InteractionArray; BYTE Key; BYTE Action; FLOAT Delta; unsigned ReturnValue:1; INT Index; }; /****************************************************************************** * new functions ******************************************************************************/ void __stdcall NewProcessEvent(UFunction *Func, void *Parms, void *Result) { try { EngineInit(); if(Func->FriendlyName == Process_Tick_FName) { Process_Tick_Parms* TickParams = (Process_Tick_Parms*)Parms; if(TickParams->InteractionArray.Count != 0) Tick(TickParams->DeltaTime); } else if(Func->FriendlyName == Process_PreRender_FName) { Process_PreRender_Parms* PreRenderParms = (Process_PreRender_Parms*)Parms; if(PreRenderParms->InteractionArray.Count != 0) PreRender((UObject*)PreRenderParms->Canvas); } else if(Func->FriendlyName == Process_PostRender_FName) { Process_PostRender_Parms* PostRenderParms = (Process_PostRender_Parms*)Parms; if(PostRenderParms->InteractionArray.Count != 0) PostRender((UObject*)PostRenderParms->Canvas); } else if(Func->FriendlyName == Process_KeyEvent_FName) { Process_KeyEvent_Parms* KeyEventParms = (Process_KeyEvent_Parms*)Parms; if(KeyEventParms->InteractionArray.Count != 0) KeyEvent(KeyEventParms->Key, KeyEventParms->Action, KeyEventParms->Delta); } else if(!bAllFNamesIndexed) { WCHAR* CurFName = GetFName(Func->FriendlyName); if(wcscmp(CurFName, L"[empty]")) { if(!wcscmp(CurFName, L"Process_Tick")) Process_Tick_FName = Func->FriendlyName; else if(!wcscmp(CurFName, L"Process_PreRender")) Process_PreRender_FName = Func->FriendlyName; else if(!wcscmp(CurFName, L"Process_PostRender")) Process_PostRender_FName = Func->FriendlyName; else if(!wcscmp(CurFName, L"Process_KeyEvent")) Process_KeyEvent_FName = Func->FriendlyName; } if((Process_Tick_FName != -1) && (Process_PreRender_FName != -1) && (Process_PostRender_FName != -1) && (Process_KeyEvent_FName != -1)) { bAllFNamesIndexed = true; } } } catch(...) { Log("NewProcessEvent() -> GPF"); } }