Tuning reference
Every value on the VtTuning asset, with the default the package ships, the allowed range and what it changes. For how to use it, see Tuning.
VtTuning
Asset. Create it with Create → Vantage → Tuning.
Project-wide gameplay numbers in one asset: combat clamps, ability timing, projectiles, threat, multiplayer limits, party and loot, social limits and movement feel. Read the live values through Instance; VtCombatConstants, VtThreatConstants and VtMovementConstants are read-only views of the same asset.
Inspector fields
Combat clamps
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Max Resistance (maxResistance) |
float |
0.75 | 0 to 1 | Maximum per-element resistance fraction (hard cap). 0.75 = 75% cap so stacked resistances can’t reach ‘immune’. |
Max Evade Chance (maxEvadeChance) |
float |
0.8 | 0 to 1 | Maximum evade chance fraction. 0.80 = at least 20% of hits always land. |
Max Crit Chance (maxCritChance) |
float |
1 | 0 to 1 | Maximum crit chance fraction. 1.0 = every swing may crit; stacking past 100% is wasted. |
Default Crit Multiplier (defaultCritMultiplier) |
float |
2 | ≥ 1 | Base multiplier on a successful crit before any stat.crit_multiplier bonus. 2.0 = crit doubles damage; a ‘+50% crit damage’ item adds 0.5 on top. |
Armor K (armorK) |
float |
100 | ≥ 0.01 | K in the armor formula damage × K / (K + armor). Lower = each armor point matters more; higher = smoother diminishing returns. |
Min Attack Interval (minAttackInterval) |
float |
0.1 | ≥ 0.01 | Floor on attack interval (seconds) after attack-speed modifiers. Prevents unbounded DPS from stacked haste. |
Max Cooldown Reduction (maxCooldownReduction) |
float |
0.8 | 0 to 1 | Hard cap on cooldown-reduction fraction. 0.80 = a 10s spell bottoms out at 2s. |
Thorns Filter (thornsFilter) |
VtThornsFilter | PhysicalOnly |
Which incoming damage triggers stat.thorns reflection. PhysicalOnly = classic spiked armor (casters punch through); All = every direct hit is reflected. | |
Out Of Combat Threshold (outOfCombatThreshold) |
float |
5 | ≥ 0 | Seconds without an incoming or outgoing hit before a unit counts as out of combat. Drives CombatOnly / OutOfCombatOnly regen. 5s is a common choice for action RPGs. |
Abilities
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Global Cooldown (globalCooldown) |
float |
1.5 | ≥ 0 | Global cooldown in seconds after a GCD-triggering cast. Abilities opt in via triggersGcd and opt out of respecting it via ignoresGcd. 1.5s is typical for MMO-style combat. |
Min Cast Time (minCastTime) |
float |
0 | ≥ 0 | Cast times below this floor (seconds) are treated as instant. 0 = no floor. |
Min Ability Cooldown (minAbilityCooldown) |
float |
0 | ≥ 0 | Floor on ability cooldown (seconds). 0 = zero-cooldown abilities allowed (the GCD still governs them). |
Max Ability Queue Depth (maxAbilityQueueDepth) |
int |
1 | ≥ 0 | How many ability presses a unit buffers while mid-cast. 0 = presses during a cast are dropped; 1 = one buffered press fires when the cast resolves. |
Cast Pushback Seconds (castPushbackSeconds) |
float |
0.5 | ≥ 0 | Seconds a hit adds to the cast bar of an ability whose Damage Reaction is Pushback. The bar never grows past its full cast time. |
Channel Pushback Fraction (channelPushbackFraction) |
float |
0.25 | 0 to 1 | Share of the full channel duration a hit removes from a channel whose Damage Reaction is Pushback. 0.25 = each hit takes away a quarter of the channel. |
Max Pushbacks (maxPushbacks) |
int |
2 | ≥ 0 | How many hits can push back one cast, and separately one channel. Later hits do nothing. 0 = hits never push back. |
Projectiles
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Projectile Arrival Radius (projectileArrivalRadius) |
float |
0.3 | ≥ 0.01 | Distance (world units) from the target at which a projectile counts as arrived and resolves damage. |
Projectile Max Lifetime (projectileMaxLifetime) |
float |
10 | ≥ 0.1 | Safety limit on projectile lifetime (seconds). A projectile that hasn’t arrived by then self-destructs. |
Projectile Spawn Height (projectileSpawnHeight) |
float |
1 | Spawn height above the caster’s transform.position (world units). 1.0 puts the projectile at roughly shoulder / bow height. |
Threat
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Heal Threat Ratio (healThreatRatio) |
float |
0.5 | ≥ 0 | Fraction of a heal that becomes threat on the healer, on every hostile already engaging the healed unit. 0.5 = healing 100 adds 50 threat. |
Taunt Multiplier (tauntMultiplier) |
float |
1.1 | ≥ 1 | A taunt sets the caster’s threat to the current top × this. 1.1 = 10% above whoever was leading, so one taunt sticks for a beat under continued damage. |
Call For Help Ratio (callForHelpRatio) |
float |
0.25 | ≥ 0 | Fraction of damage propagated to faction-mates within aggroRange (‘call for help’). 0 disables propagation. Per-unit override on VtThreatAutoSubscriber. |
Multiplayer
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Interact Range Tolerance (interactRangeTolerance) |
float |
1.5 | ≥ 0 | Extra world units past a pickable’s own radius that the authority still accepts an interact command from a client at. Covers replication lag between the client’s and the authority’s idea of where the player stands. |
Max Commands Per Second (maxCommandsPerSecond) |
float |
15 | ≥ 0 | Commands the authority accepts from one unit per second, on average. 0 = no limit. A burst up to Command Burst is allowed before the average applies. |
Command Burst (commandBurst) |
int |
10 | ≥ 1 | How many commands a unit may send at once before the per-second limit applies. |
Interest Margin (interestMargin) |
float |
2 | ≥ 0 | Extra world units past a viewer’s vision radius within which other units are still sent to that client. Hides the edge of vision from pop-in. |
Interest Update Interval (interestUpdateInterval) |
float |
0.25 | ≥ 0.05 | Seconds between visibility passes on the server when interest management is on. |
Party
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Party Max Size (partyMaxSize) |
int |
5 | ≥ 2 | Most members a party may have. |
Party Share Range (partyShareRange) |
float |
40 | ≥ 0 | Party members within this many world units of a kill share its XP, currency and quest credit. 0 = any distance. |
Party Xp Bonus Per Member (partyXpBonusPerMember) |
float |
0.1 | ≥ 0 | Extra XP per additional member sharing a kill, as a fraction of the award. 0.1 with three members pays 120% split three ways. |
Loot Reserve Seconds (lootReserveSeconds) |
float |
30 | ≥ 0 | Seconds a drop from a party kill is reserved for that party when its loot rule is Party Reserved. 0 = never reserved. |
Dropped items
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Default World Item Prefab (defaultWorldItemPrefab) |
GameObject |
None | World item spawned when a unit drops an item from its bag and the item sets no World Item Prefab. Must hold a VtWorldItem. Empty: such items cannot be dropped. | |
Drop Distance (dropDistance) |
float |
1 | ≥ 0 | How far in front of the unit a dropped item lands, in world units. |
Chat
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Chat Max Length (chatMaxLength) |
int |
255 | ≥ 1 | Longest chat line in characters after cleaning. |
Chat Say Range (chatSayRange) |
float |
30 | ≥ 0 | World units a Say line reaches. |
Chat Yell Range (chatYellRange) |
float |
120 | ≥ 0 | World units a Yell line reaches. |
Chat Messages Per Second (chatMessagesPerSecond) |
float |
1 | ≥ 0 | Chat lines one player may send per second on average. 0 = no limit. |
Chat Burst (chatBurst) |
int |
5 | ≥ 1 | Chat lines one player may send at once before the per-second limit applies. |
Chat History Size (chatHistorySize) |
int |
100 | ≥ 1 | Received lines kept per player for the chat window. |
Chat Allow Rich Text (chatAllowRichText) |
bool |
Off | Keep markup tags in player chat. Off strips them so players cannot inject rich text. |
Guilds
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Guild Name Min Length (guildNameMinLength) |
int |
3 | ≥ 1 | Shortest guild name. |
Guild Name Max Length (guildNameMaxLength) |
int |
24 | ≥ 1 | Longest guild name. |
Guild Max Members (guildMaxMembers) |
int |
200 | ≥ 1 | Most members a guild may have. |
Guild Invite Seconds (guildInviteSeconds) |
float |
60 | ≥ 1 | Seconds a guild invite stays open. |
Guild Motd Max Length (guildMotdMaxLength) |
int |
200 | ≥ 1 | Longest guild message of the day; longer text is cut. |
Friends
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Friends Max Count (friendsMaxCount) |
int |
200 | ≥ 1 | Most in-game friends one player may have. |
Friend Requests Max Pending (friendRequestsMaxPending) |
int |
50 | ≥ 1 | Most unanswered friend requests one player may receive. |
Friend Request Expiry Days (friendRequestExpiryDays) |
float |
30 | ≥ 0 | Days before an unanswered friend request is dropped. 0 = never. |
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Mail Subject Max Length (mailSubjectMaxLength) |
int |
64 | ≥ 1 | Longest mail subject after cleaning. |
Mail Body Max Length (mailBodyMaxLength) |
int |
1000 | ≥ 1 | Longest mail body after cleaning. |
Mail Max Attachments (mailMaxAttachments) |
int |
8 | ≥ 0 | Most item and currency lines one mail may carry. |
Mailbox Max Count (mailboxMaxCount) |
int |
100 | ≥ 1 | Most mails a mailbox holds before players can no longer send to it. System mail ignores the cap. |
Mail Expiry Days (mailExpiryDays) |
float |
30 | ≥ 1 | Days before mail expires. Player mail with attachments returns to its sender; other mail is deleted. |
Movement feel
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Acceleration (acceleration) |
float |
15 | ≥ 0 | Ramp from 0 to top speed, in units/s². Higher = snappier starts. |
Rotation Speed (rotationSpeed) |
float |
720 | ≥ 0 | Turn rate toward the movement direction, in degrees per second. |
Waypoint Reach Distance (waypointReachDistance) |
float |
0.2 | ≥ 0.01 | Distance at which a waypoint counts as reached and path following advances. |
Unreachable Tolerance (unreachableTolerance) |
float |
1 | ≥ 0 | If a path’s endpoint is farther than this (planar) from the requested destination, the destination is unreachable and movement does not start. Per-request override: MoveTo(…, acceptPartialPath: true). |
Stuck Abort Time (stuckAbortTime) |
float |
0.5 | ≥ 0 | Seconds of sub-threshold movement before stuck recovery skips the current waypoint. |
Stuck Movement Threshold (stuckMovementThreshold) |
float |
0.25 | 0 to 1 | Fraction of full speed below which the agent counts as not moving for stuck detection. |
Gravity (gravity) |
float |
20 | ≥ 0 | Downward acceleration while the CharacterController is airborne (units/s²). |
Server-authoritative movement
| Field | Type | Default | Range | Description |
|---|---|---|---|---|
Movement Reconcile Threshold (movementReconcileThreshold) |
float |
1 | ≥ 0 | A predicting client snaps to the authority’s position when the two differ by more than this many world units on the ground plane. Smaller corrects sooner and more visibly. |
Movement Reconcile Speed (movementReconcileSpeed) |
float |
8 | ≥ 0 | How fast a predicting client closes a correction, as a fraction per second. 8 removes most of it in a quarter second; 0 snaps at once. |
Replica Follow Speed (replicaFollowSpeed) |
float |
10 | ≥ 0 | How fast a replica follows the authority’s position, as a fraction per second. 10 closes most of the gap in a tenth of a second; 0 snaps instantly. |
Scripting API
| Member | Description |
|---|---|
static VtTuning Instance { get; } |
The live tuning: the one handed to OverrideInstance, else your Assets/Resources/VtTuning.asset, else the package’s defaults. If neither asset exists, an in-memory instance with the compiled defaults is used and a warning logs once. |
static void ResetCache() |
Forgets the cached tuning so the next Instance read loads the asset again. Use it after swapping the asset in the editor, or in test teardown after OverrideInstance. |
static void OverrideInstance(VtTuning instance) |
Use instance as the live tuning, such as a copy a boot scene references or a test’s CreateInstance<VtTuning>() with a few fields changed. Call it before gameplay starts. Pass null to behave like ResetCache. |
Enums
VtThornsFilter
Selects which incoming damage is eligible for stat.thorns reflection. Game-wide toggle via VtCombatConstants.ThornsFilter; default PhysicalOnly.
| Value | Description |
|---|---|
All |
Every direct hit reflects, except True damage and damage over time. |
PhysicalOnly |
Only incoming VtDamageType.Physical hits reflect, so spell casters are not punished by thorns. |