[Release] ACE v1.0f

User avatar
UT Sniper (SJA94)
Masterful
Posts: 513
Joined: Thu Jun 24, 2010 10:35 pm
Personal rank: noob programmer
Location: England

Re: [Release] ACE v1.0f

Post by UT Sniper (SJA94) » Mon Mar 25, 2019 4:40 pm

I set fps limit with Direct3D9 render, and also XC_Engine fps limiter(at different times). If I play with highperftoggle off and set fps limit with either to say 60 it will still force 167fps, it feels like highperftoggle is on because the fps is a rock solid 167fps, not like when you use a fps limiter with it off where it jumps around a few fps over the limit. My netspeed is normally on 20'000, or 25'000 on servers that support it. This happens with and without XC_Engine installed, with xc_engine installed it appears to be impossible to go over 200fps, which is nice when I'm playing offline to stop the engine going nuts.

User avatar
anth
Skilled
Posts: 197
Joined: Thu May 13, 2010 2:23 am

Re: [Release] ACE v1.0f

Post by anth » Mon Mar 25, 2019 5:11 pm

UT Sniper (SJA94) wrote:I set fps limit with Direct3D9 render, and also XC_Engine fps limiter(at different times). If I play with highperftoggle off and set fps limit with either to say 60 it will still force 167fps, it feels like highperftoggle is on because the fps is a rock solid 167fps, not like when you use a fps limiter with it off where it jumps around a few fps over the limit. My netspeed is normally on 20'000, or 25'000 on servers that support it. This happens with and without XC_Engine installed, with xc_engine installed it appears to be impossible to go over 200fps, which is nice when I'm playing offline to stop the engine going nuts.
The highperftoggle option is only used to select the timing function ACE uses. Even when highperftoggle is off, ACE might still affect your framerate. The reason why ACE does this is to fix multi-core timing issues on the one hand and to block speedhacks on the other hand. That said, it is very much possible that ACE doesn't pick up your frameratelimit setting correctly. This is definitely the case for the XC_Engine frameratelimit because ACE doesn't know how to parse that one. The D3D9Drv one should be recognized, however. Could you paste your D3D9Drv settings so I can see what's going on?

Higor
Godlike
Posts: 1781
Joined: Sun Mar 04, 2012 6:47 pm

Re: [Release] ACE v1.0f

Post by Higor » Mon Mar 25, 2019 5:54 pm

anth wrote:How did you configure the 195 limit? Did you use one of the UTGLR renderers and set the frameratelimit variable?

Code: Select all

FLOAT UXC_GameEngine::GetMaxTickRate()
{
	guard(UXC_GameEngine::GetMaxTickRate);
	ULevel* ALevel = Level();
	if (ALevel && ALevel->NetDriver && !GIsClient)
		return Clamp( (&ALevel->NetDriver->NetServerMaxTickRate)[LanPlay], 10, 120);
	else
	{
		FLOAT Limit = 200.f;
		if( ALevel && ALevel->NetDriver && ALevel->NetDriver->ServerConnection )
			Limit = ALevel->NetDriver->ServerConnection->CurrentNetSpeed/64;
		else if (ALevel && ALevel->DemoRecDriver && !ALevel->DemoRecDriver->ServerConnection)
			Limit = Clamp( (&ALevel->DemoRecDriver->NetServerMaxTickRate)[LanPlay], 10, 120);

		//Limit FPS!
		if ( ClientFrameRateLimit >= 4 )
			Limit = Min( (FLOAT)ClientFrameRateLimit, Limit);
		return Clamp( Limit, 4.0f, 200.0f);
	}
	unguard;
}

Code: Select all

	else if (ParseCommand(&Cmd, TEXT("FPS")) || ParseCommand(&Cmd, TEXT("FPSLimit")))
	{
		while (*Cmd == ' ')
			Cmd++;
		INT Limit = appAtoi(Cmd);
		if ( !Limit )
			Ar.Logf( NAME_XC_Engine, TEXT("Current frame rate limit is %i, use 'FPS [4-200]' to specify a framerate limit."), ClientFrameRateLimit);
		else
		{
			ClientFrameRateLimit = Clamp(appAtoi(Cmd), 0, 200);
			SaveConfig();
			Ar.Logf(NAME_XC_Engine, TEXT("Client frame rate limit set to %i"), ClientFrameRateLimit);
		}
	}
Code needs a series of consistency changes and cleanups, but that's pretty much what it does.
Sleeping is left to the launcher, or ACE's Engine hook.
ImageImage
Image unreal://23.111.157.138:7777
Image unreal://46.228.199.205:7788

User avatar
anth
Skilled
Posts: 197
Joined: Thu May 13, 2010 2:23 am

Re: [Release] ACE v1.0f

Post by anth » Mon Mar 25, 2019 6:09 pm

ack. What is the full type and context of the ClientFrameRateLimit variable? Is this variable exposed directly to UScript?

Higor
Godlike
Posts: 1781
Joined: Sun Mar 04, 2012 6:47 pm

Re: [Release] ACE v1.0f

Post by Higor » Mon Mar 25, 2019 6:22 pm

Helper func
Show

Code: Select all

XC_CORE_API UProperty* FindScriptVariable( UStruct* InStruct, const TCHAR* PropName, INT* Found)
{
	FName NAME_PropName = FName( PropName, FNAME_Find);
	if ( NAME_PropName != NAME_None )
	{
		for( TFieldIterator<UProperty> Prop( InStruct ); Prop; ++Prop )
			if( Prop->GetFName() == NAME_PropName )
			{
				if ( Found ) //Useful when finding many props and checking all were found on a single test.
					(*Found)++;
				return (UProperty*) *Prop;
			}
	}
	return NULL;	
}
This is how I'm doing it to inform servers of client tickrate (a netcode overhaul that's coming for XCGE 24)
Just call

Code: Select all

Engine->GetMaxTickRate();
Spoiler
Show

Code: Select all

	guard(UpdateRender);
	if ( Engine->Client->Viewports(0)->RenDev != RenDev ) //RenDev is our cached pointer, we're doing this because the game may be able to switch it
	{
		RenDev = Engine->Client->Viewports(0)->RenDev;
		RenDevTickRate = NULL;
		UProperty* TickRateProp;
		if ( RenDev	
			&& (TickRateProp=FindScriptVariable( RenDev->GetClass(), TEXT("FrameRateLimit")))
			&& TickRateProp->IsA(UIntProperty::StaticClass()) )
		{
			RenDevTickRate = (INT*) ((BYTE*)RenDev + TickRateProp->Offset);
		}
	}
	unguard;

Code: Select all

	//** This is a net client **//
	// Update TICKRATE on XC_Engine server
	if ( XCGE_Server_Ver >= 24 )
	{
		INT NewTickRate = appRound(Engine->GetMaxTickRate());
		if ( RenDevTickRate && (*RenDevTickRate > 4) )
			NewTickRate = Min(NewTickRate, *RenDevTickRate);
		if ( (NewTickRate >= 4) && (NewTickRate <= 200) && (NewTickRate != TickRate) && ((TickRate == 0) || (NetDriver->Time - LastTickRateTime > 0.5)) )
		{
			TickRate = NewTickRate;
			LastTickRateTime = NetDriver->Time;
			NetDriver->ServerConnection->Logf( TEXT("TICKRATE %i"), TickRate);
		}
	}




But if you wanna do it the hard way :loool:

Code: Select all

	new( TheClass,TEXT("ClientFrameRateLimit"), RF_Public) UIntProperty(CPP_PROPERTY(ClientFrameRateLimit), TEXT("XC_GameEngine"), NativeEditConfig);

Code: Select all

	static INT* XCGE_CFRL_Ptr = NULL;
...
	UProperty* XCGE_CFRL_Prop = FindScriptVariable( Engine->GetClass(), TEXT("ClientFrameRateLimit"));
	if ( XCGE_CFRL_Prop )
		XCGE_CFRL_Ptr = (INT*) ((BYTE*)Engine + XCGE_CFRL_Prop->Offset);

=====================
Oh yeah, did i tell you that when I switched to a Glide wrapper, ACE would kick me when going windowed due to Glide <-> Software change?
That was on v08h tho.
ImageImage
Image unreal://23.111.157.138:7777
Image unreal://46.228.199.205:7788

User avatar
UT Sniper (SJA94)
Masterful
Posts: 513
Joined: Thu Jun 24, 2010 10:35 pm
Personal rank: noob programmer
Location: England

Re: [Release] ACE v1.0f

Post by UT Sniper (SJA94) » Mon Mar 25, 2019 7:17 pm

anth wrote:Could you paste your D3D9Drv settings so I can see what's going on?

This is the current settings I use, I did try a fresh render install(included removing the 3d9 settings so ut made afresh copy) a while ago the problem still persisted:

Code: Select all

[D3D9Drv.D3D9RenderDevice]
FrameRateLimit=146
Translucency=False
VolumetricLighting=False
ShinySurfaces=False
Coronas=False
HighDetailActors=False
DetailTextures=False
UseBGRATextures=True
UseAA=False
UseSSE=False
UseTexIdPool=False
DynamicTexIdRecycleLevel=100
UseTexPool=False
SwapInterval=0
OneXBlending=False
TruFormMinVertices=0
TruFormTessellation=3
UseTruForm=False
NumAASamples=0
RequestHighResolutionZ=False
MaskedTextureHack=False
UseVertexProgram=False
UseCVA=False
UseMultiDrawArrays=False
AAFilterHint=0
TexDXT1ToDXT3=False
BufferClippedActorTris=False
SinglePassDetail=False
ColorizeDetailTextures=False
DetailClipping=False
UseDetailAlpha=False
RefreshRate=144
MaxTMUnits=0
NoFiltering=False
UseFilterSGIS=False
MaxAnisotropy=0
UseTNT=False
Use4444Textures=false
UseS3TC=False
UseAlphaPalette=False
AutoGenerateMipmaps=False
UseTrilinear=False
UsePrecache=False
AlwaysMipmap=True
ShareLists=False
UsePalette=False
UseMultiTexture=False
UseZTrick=False
MaxLogTextureSize=8
MinLogTextureSize=0
MaxLogVOverU=8
MaxLogUOverV=8
GammaCorrectScreenshots=True
GammaOffset=0.090000
LODBias=-5.000000
DescFlags=0
GammaOffsetBlue=0.000000
GammaOffsetGreen=0.000000
GammaOffsetRed=0.000000
Description=GTX 750 TI
CacheStaticMaps=False
Use16BitTextures=false
ZRangeHack=False
NoAATiles=False
UseSoftwareVertexProcessing=False
UsePureDevice=False
UseTripleBuffering=False
SmoothMaskedTextures=False
UseSSE2=False
BufferTileQuads=False
SinglePassFog=False
DetailMax=0
Use565Textures=False
SceneNodeHack=True
UseFragmentProgram=False

BaTHuK
Novice
Posts: 14
Joined: Sat May 27, 2017 11:34 am

Re: [Release] ACE v1.0f

Post by BaTHuK » Tue May 28, 2019 5:55 pm

Hello

People are getting troubles with ACE after getting the last win 10 update (1903 build)
On the previous ace versions (ace 08) it says this: you have been kicked from the server because ace has found a corrupted file DDraw.dll
Image
On the newest ones (1.0) it says that any render file (.dll) is corrupted
Image
I guess after the update DDraw.dll was changed and it needs to be whitelisted in the ACE.
Can anyone help with that?

Thanks

User avatar
anth
Skilled
Posts: 197
Joined: Thu May 13, 2010 2:23 am

Re: [Release] ACE v1.0f

Post by anth » Sun Jun 02, 2019 9:47 pm

I should have a fix for this ready very soon...

User avatar
Hitman
Skilled
Posts: 157
Joined: Mon Aug 16, 2010 11:01 am
Location: Sweden
Contact:

Re: [Release] ACE v1.0f

Post by Hitman » Fri Nov 22, 2019 5:47 pm

We get windows 10 users kicked for use D3D9 and openGL... and as i now i cant whitelist dll files..

[ACEv10f]: +------------------------------------------------------------------------------+
[ACEv10f]: | Player Kick |
[ACEv10f]: +------------------------------------------------------------------------------+
[ACEv10f]: PlayerName.....: Gati'
[ACEv10f]: PlayerIP.......: 5.20.241.196
[ACEv10f]: OS.............: Microsoft Windows 10 x64 (Version 10.0.18363)
[ACEv10f]: CPU............: Intel(R) Core(TM) i3-9100F CPU @ 3.60GHz
[ACEv10f]: CPUSpeed.......: 3599.991455 Mhz
[ACEv10f]: NICDesc........: Intel(R) Ethernet Connection (2) I219-V
[ACEv10f]: MACHash1.......: 3DCAD8B6BFDFF1937A69C953804B63AA
[ACEv10f]: MACHash2.......: 06C55401C590A62AFE154A8C9E968644
[ACEv10f]: HWID...........: 1FF2CB3A075D25B4E0B7004A106F06C3
[ACEv10f]: GameVersion....: 436
[ACEv10f]: Renderer.......: D3D9Drv.D3D9RenderDevice
[ACEv10f]: SoundDevice....: Galaxy.GalaxyAudioSubsystem
[ACEv10f]: CommandLine....:
[ACEv10f]: TimeStamp......: 22-11-2019 / 16:40:31
[ACEv10f]: +------------------------------------------------------------------------------+
[ACEv10f]: | Kick Reasons |
[ACEv10f]: +------------------------------------------------------------------------------+
[ACEv10f]: BaseAddress....: 0x6AF10000
[ACEv10f]: LibraryName....: D3D9.dll
[ACEv10f]: LibraryPath....: C:\Windows\SYSTEM32\d3d9.dll
[ACEv10f]: LibrarySize....: 1616784 bytes
[ACEv10f]: LibraryHash....: 50BD9902C00FB258ED1B0A9D9D4AAD93
[ACEv10f]: +------------------------------------------------------------------------------+
[ACEv10f]: KickReason.....: Import Address Mismatch
[ACEv10f]: ModuleName.....: D3D9.dll
[ACEv10f]: ImportNum......: 0
[ACEv10f]: ExpAddress.....: 0x77140F80
[ACEv10f]: ExpModule......: api-ms-win-appmodel-unlock-l1-1-0.dll
[ACEv10f]: ExpType........: 0
[ACEv10f]: ExpName........: IsDeveloperModeEnabled
[ACEv10f]: ActAddress.....: 0x750741B0
[ACEv10f]: ActModule......: kernel.appcore.dll
[ACEv10f]: ActFunction....: IsDeveloperModeEnabled
[ACEv10f]: ActOffset......: 0x0000
[ACEv10f]: +------------------------------------------------------------------------------+
[ACEv10f]: BaseAddress....: 0x6BEB0000
[ACEv10f]: LibraryName....: DDraw.dll
[ACEv10f]: LibraryPath....: C:\Windows\SYSTEM32\ddraw.dll
[ACEv10f]: LibrarySize....: 529408 bytes
[ACEv10f]: LibraryHash....: B293B5DFDAA100F01CB8ECF65F3E160A
[ACEv10f]: +------------------------------------------------------------------------------+
[ACEv10f]: KickReason.....: Import Address Mismatch
[ACEv10f]: ModuleName.....: DDraw.dll
[ACEv10f]: ImportNum......: 0
[ACEv10f]: ExpAddress.....: 0x77403D62
[ACEv10f]: ExpModule......: GDI32.dll
[ACEv10f]: ExpType........: 0
[ACEv10f]: ExpName........: D3DKMTCreateAllocation
[ACEv10f]: ActAddress.....: 0x72907700
[ACEv10f]: ActModule......: dxcore.dll
[ACEv10f]: ActFunction....: FUNC_72907700
[ACEv10f]: ActOffset......: 0x6700
Image
Image
Image
Image

Post Reply