Template:Metrics/Capture return

From Team Fortress Wiki
Jump to: navigation, search

Template documentation [view] [edit] [history] [purge]

Multiplier Adjustment Rate
x1 1 100%
x2 0.66666666666667 150%
x3 0.54545454545455 183%
x4 0.48 208%
x5 0.43795620437956 228%
x6 0.40816326530612 245%
x7 0.38567493112948 259%
x8 0.36793692509855 272%
x9 0.35348576237902 283%
x10 0.34141715214741 293%
x11 0.33113927679755 302%
x12 0.3222468932005 310%
x13 0.31445218251769 318%
x14 0.30754446618812 325%
x15 0.30136557845783 332%
x16 0.29579419172694 338%
x17 0.29073549347409 344%
x18 0.28611418520599 350%
x19 0.2818696118207 355%
x20 0.2779522965244 360%
x21 0.27432142650145 365%
x22 0.27094299608389 369%
x23 0.26778841368733 373%
x24 0.26483344171861 378%
x25 0.26205737940994 382%
x26 0.25944242548188 385%
x27 0.25697317570452 389%
x28 0.25463622288863 393%
x29 0.25241983552654 396%
x30 0.25031369744854 399%
x31 0.24830869526721 403%
x32 0.24639674358231 406%

The values are computed using the equation sum(1/i for i=1 to n), where n is the number of capturing players, a harmonic number. This equation is derived from the source file trigger_area_capture.cpp that is available as part of the Source SDK. Values generated from WolframAlpha using the input Table[1/HarmonicNumber[n], {n, 32}]


Previous experimental results

These decay rates were determined by creating a map with a 100 second capture point, then using Puppet Bots to capture said point. I am unable to derive a simple equation that explains these values. These times were generated using a SourceMod script as follows:

#include <sourcemod>

public Plugin:myinfo =
{
	name = "Capture Timing",
	author = "Org",
	description = "Console out debug info",
	version = "1.0.0.2",
	url = "example.org"
};

public OnPluginStart()
{
	HookEvent("controlpoint_starttouch", Event_StartCapture)
	HookEvent("teamplay_point_captured", Event_EndCapture)
}

public Action:Event_StartCapture(Handle:event, const String:name[], bool:dontBroadcast)
{
	new Float:time = GetEngineTime()
	PrintToServer("Control Point Entered : %f", time)
	return Plugin_Continue
}

public Action:Event_EndCapture(Handle:event, const String:name[], bool:dontBroadcast)
{
	new Float:time = GetEngineTime()
	PrintToServer("Control Point Captured: %f", time)
	return Plugin_Continue
}