Skip to content

Conversation

@Tkain
Copy link
Contributor

@Tkain Tkain commented Nov 14, 2025

Description

In TF2, when most projectiles (barring sticky bombs) are reflected by an enemy, they change to the team of the enemy reflector, changing their appearance to that of the enemy team as a result. However, the Sandman's baseballs and the Wrap Assassin's ornaments have a few visual (and audial) discrepancies between their displayed and actual teams when reflected:

  • Baseballs and ornaments have auras of both teams' colors when reflected.
  • Unlike other projectile trails, baseballs' and ornaments' trails do not change colors when reflected by an enemy.
  • Ornaments' shatter particles use their original thrower's team color rather than their current team color.
  • Ornaments' shatter sounds play more loudly to their original thrower rather than the person who last reflected them.
  • Unlike other projectiles, reflected baseball and ornament kills are attributed to the person who threw the ball rather than the person who reflected the ball.

These can be observed below:

Current baseball/ornament behavior

Reflected baseball/ornament particles and sounds (note: host_timescale set to 0.5 for clarity):

Reflecting.ornament.without.PR.mp4

Reflected baseball/ornament kill attribution:

Baseball reflect kill without PR

This PR attempts to resolve these inconsistencies, ensuring that these characteristics correspond to (the team of) the enemy reflector after these projectiles are reflected. These changes can be observed below:

Baseball/ornament behavior with this PR

Reflected baseball/ornament particles and sounds (also with host_timescale set to 0.5):

Reflecting.ornament.with.PR.mp4

Reflected baseball/ornament kill attribution:

Baseball reflect kill with PR

Although they work best together, these changes are largely independent of one another, so feel free to cherry-pick them as you'd like.

Tkain added 7 commits November 7, 2025 22:09
When a Wrap Assassin's ornament is reflected by an enemy, it changes its color to that of the enemy's team. However, when it shatters, the particles it creates are of the original thrower's team color rather than the reflecting enemy's team color. This means RED ornaments can shatter into BLU shards and vice versa. This commit fixes that.
When a Wrap Assassin ornament shatters, it plays a shattering sound. This sound plays at a higher volume to the person who threw the ornament so they know when it breaks. When an enemy reflects an ornament, however, the sound still plays at a higher volume to the original thrower rather than the reflecting enemy, even though the information of when the ornament breaks is more useful to the reflector than the thrower. This commit makes the sound effect play louder to the reflector rather than the thrower when applicable.
…ornaments

GetOwnerEntity returns the 'owner entity' of the baseball/ornament, which is the player that originally threw it. However, this is used in multiple places where we really want to know who is responsible for the ball's damage (including who may have last reflected it) which is returned by GetThrower.

This change should fix reflected baseball/ornament hits and kills being attributed to their original thrower rather than their reflector like other projectiles.
@Tkain Tkain force-pushed the baseball-reflect-fixes branch from e7d11bd to c7c62b0 Compare November 29, 2025 04:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant