Team Comtress 2 Versions Save

Team Fortress 2, but with a lot of fixes, QoL improvements and performance optimizations!

0.4.0

2 years ago

Team Fortress 2 changes

  • Reverted Ullapool Caber, Holiday Punch, Enforcer, Quick Fix, and Loose Cannon changes from 0.3.1 as they affected balance too much and TC2 is not the place for that
  • Fixed a few code inspection warnings (dimhotepus, #553)
  • Fixed -nomaster not disabling master server updates
  • Adjusted priority of various threads, including increasing the default priority class of TF2 to above normal
  • Increased the max static props per rendering batch to 2048 from 512
  • Implemented a new frame synchronization algorithm which only holds frame waits for half of the refresh rate, improving parallelism which accounting for meaningful input lag
    • Also improved frame sync interval, to use a pause instruction with backoff, so that frames with varying finish times do not overly affect the delay with which a frame is synced
  • Fixed possible case of rendering freezing at very high frame rates
  • Fixed incorrect pool being used for textures in D3D9Ex mode
  • Disabled heavy query cache system, which is only used in L4D

Reworked math optimizations

  • Faster, cleaner, and less buggy in certain cases
  • This should fix animation errors on Linux, and in tools
  • Updated to DirectXMath January 2021

Reworked threading changes

  • Moved new threading events to separate system, so that it does not break ABI compatibility
    • This should fix Linux & macOS crashing in vphysics
  • Changed all thread pool usage to loop through their queue, and then wait
    • This is fine even for the IO thread: it receives calls from the main thread, but it can continue multi-threading its jobs before responding to the main thread, since the main thread will process lingering jobs as a prerequisite anyway
  • Added result caching to thread pool multi-wait, to speed up job processing
  • Added yield backoff algorithm to wait
  • Reverted priority boost while processing a job
  • Increased multi-wait event count support from 5 to 14
  • Condition queue improvements
    • Changed condition queue from FIFO to LIFO
    • Fixed ordering of multi-waits always overriding standard Wait
    • Removed locking overhead from internal queue
  • Disabled thread affinity
  • Added yield scaling, so that different processors do not use different pause times
  • Improved thread reply logic
  • Improved thread calls latency, by caching the result of a peek instead of rechecking afterwards
  • Fixed spurious wakeups causing threads to become dormant over time
  • Improved parallel processing behavior in constrained scenarios
  • Optimized locking overhead to atomic operation for thread events in some cases
  • Implemented CThreadPool::Yield
  • Improved behavior of JF_NO_ADD
  • Reverted RWLock changes, instead, allow inlining by removing ASM
  • Added 4 thread burst IO system, which should improve load times
  • Enabled queued material system by default on start up
  • Improved thread parallelism by balancing thread work
  • Fixed contention in the data cache
  • Updated parallel processing to use balanced workload scheme

Client leaf system changes

  • Greatly improved the efficiency of parent bound calculations
  • Improved when leaf system renders
  • Added robust bounds caching for all entities (for both bloated and standard bounds)
    • Skips most leaf system work if bounds are up to date, even after a renderable change notification
    • Static prop bounds are cached at level start
  • Entities with out of date bounds will have their bounds updated all at once, efficiently using multithreading
  • Enabled leaf system for brush models
  • Added cl_leafsystemvis from CS:GO, to help visualize the client leaf system
  • Fixed a few bugs, crashes and hangs

Reworked sound changes

  • Greatly reduced latency of the sound thread
    • Added an early wait exit by allowing the game thread to notify the sound thread when a game frame has finished. This way, game frames instantly get processed by a sound frame.
    • Optimized DirectSound to have a much more precise cursor location
    • Optimized DirectSound to skip unnecessary sound processing in surround sound setups
    • If the sound frame is behind, it will not wait, even for a short amount of time.
  • Async sound data loading
  • Greatly improved sound quality
  • Fixed a few crashes caused by the sound thread

Team Comtress 2 fixes

  • Fixed r_queued_post_processing being set to 1, causing a missing texture overlay
  • Fixed some games not compiling correctly (Margen67, #506)
  • Removed matchmaking options from main menu
  • Removed featured items from main menu
  • Ported fixes for player disconnect reason from TF2
    • Improved: Player disconnect reason is still displayed if it is a built-in reason
  • Ported removal of streams list from TF2
  • Removed player material fixes from TC2, as there are newer player materials in TF2
  • Ported minor HUD fixes and localization file changes from TF2
  • Update protobuf from 2.5.0 to 2.6.1
  • Moved to src directory
  • Reverted strict max usrcmd process ticks change from CS:GO

0.3.1

3 years ago

Please manually set r_queued_post_processing 0 to avoid a rendering bug with this release.

Team Fortress 2 changes

  • Explosions now check in a 5% inner radius for a trace, so that small differences in geometry do not block explosion damage entirely. This is a 8 point box additional check if the center point fails, and damage is scaled based on how many points hit.
  • Holiday Punch now uses backstab logic
  • Enforcer now pierces Sentry Gun sapper resistance, Battalion's Backup crit resistance
  • Quick Fix ubered players can now block captures
  • The Ullapool Caber now uses the attacker's hitbox center, instead of the shooter position, for more consistency with how explosive damage is calculation (usually from the hitbox center of the victim).
  • The Ullapool Caber now has correct damage force applied to victims and self, rather than using the attacker's position
  • The Ullapool Caber explosion no longer has distance based damage on top of explosion radius damage
  • The Loose Cannon now uses the standard grenade physics model for simulation, with the cannonball's physics material. This improves consistency and fixes the projectile speed stat on the Loose Cannon.
  • Fixed an issue where the attacker does not hit themselves with the Boston Basher if there are enemies within melee range at the time of swing start, rather than if there enemies within melee range at the time of swing start, who then die when the swing ends, as originally intended (https://youtu.be/mb8XfWyUOcg?t=275)

0.3.0

3 years ago

Team Fortress 2 changes

  • Restored threading functionality in client leaf system prerender
  • Optimized client leaf system bounds calculation caching and added threading
  • Restored threading functionality in client shadow manager
  • Restored threading functionality in view renderables
  • Restored threading functionality for bone setup
  • Reduced thread contention in bone setup
  • Restored queued functionality for post processing

Team Comtress 2 fixes

  • Fixed video settings not applying on first apply
  • Re-enabled threaded rendering spin wait
  • Removed equally distributed parallel process jobs, as it does not scale well
  • Fixed a few memory leaks related to texture streaming

0.2.1

3 years ago

Team Comtress 2 fixes

  • Fixed a memory leak in texture streaming
  • Reverted threaded rendering spin wait introduced in 0.1.12

0.2.0

3 years ago

Team Fortress 2 changes

  • Attempted to solve various problems with jitter with player movement (particularly while crouch jumping)
  • Fixed possible cases of slightly misaligned hitboxes
  • Projectiles no longer spawn with an interp delay
  • Optimized threading behavior
    • Removed overhead introduced in 0.1.10
    • Waits on a single object no longer are forced into a full sleep state if they were already signaled at wait start
    • Being signaled at wait start now forces a context switch to emulate sleep states entered for other types of waits, improving thread scheduling
    • Removed all optimistic cases for thread waits, as they added overhead in most cases
  • Cleaned up preload files so that the game does not attempt to load unused or non-existent files on startup
  • HLTV now defaults to off in listen servers (can be enabled with -hltv in launch options)

Team Comtress 2 fixes

  • Fixed incorrect values for audio quality settings

0.1.12

3 years ago

Team Fortress 2 changes

  • The main thread now never enters a sleep state while waiting for threaded rendering to finish the current frame.
    • This reduces the latency for frame ends.
  • In a parallel process operation, all units of divided work will be submitted all together, instead of one at a time. This makes parallel processing thread scheduling more fair, as there are a multitude of jobs for any thread in the pool to pick up, rather than one thread being able to take jobs as they come.
    • This greatly improves distribution of threading work in a very efficient way.
  • Removed the optimistic case from event waits. It was too optimistic, and had two negative side effects: 1) Without a lock, an event could be thought of as signaled when it really wasn't, causing unnecessary thread wake-ups. 2) With such low latency on checking for events, one thread could consume the whole queue once woken up, as it would re-enter the shared queue at a time where new jobs are available/getting added, in the optimistic, "low latency" mode.
    • This greatly improves distribution of threading work, and reduces redundant resource usage across threads.

Team Comtress 2 fixes

  • Fixed Shader Detail showing Medium when it was set to Low

0.1.11

3 years ago

Team Fortress 2 changes

  • Fixed being able to bypass holster speed penalty and switch from speed bonus by switching to a weapon without the stat and then switching to the desired weapon
  • Updated sound quality options to include dsp_off. It's recommended that you choose a new sound quality for your preference with this update.
    • High is now Very High, Medium is now High, Low is now Medium, and a new Low setting has been added
  • Updated shader quality options to include various related quality options. It's recommended that you choose a new shader quality for your preference with this update.
    • Shader Quality: Medium and lower (mat_reducefillrate 1) now reduces the quality of cables and the sky
    • Shader Quality: Low now enables fast path rendering on most objects, disables phong, and enables low quality skybox textures
    • Low is now Medium, and a new Low setting has been added (High remains the same)
  • Windows now always uses the lower quality DX8 wireframe
  • Fixed a crash when a streamed texture was already at the new target size. This likely didn't happen in TF2 due to a race condition where the streamed texture would never reach this step early, but does in TC2 due to adjustments to how streamed textures are scheduled.
  • Fixed various bugs when missing a shader
  • Made particles which take up very little of the screen retire, instead of particles that are very large. This does not optimize for fill cost, but rather meets standard "LOD" functionality where particles further away are lower quality. This can be controlled through negative values for cl_particle_retire_cost, defaults to -10 (particles that take less than 10% of the screen are retired). The previously existing functionality (particles that take more than x% of the screen), can be used through positive values.

Team Comtress 2 fixes

  • Fullscreen support is now restored, as crashes associated with it have been resolved.
  • Restored support for debug and DX8 and below shaders, so that DX9 mode and tools can use them
  • Cleaned up particle errors due to missing implementations for newer JI particles on this version of the game
  • Fixed MvM max players being too high (12 instead of 10)

0.1.10

3 years ago

Team Fortress 2 changes

  • Fixed various packet timing inaccuracies
  • Optimized weapon deployment

Team Comtress 2 fixes

  • Implemented thread ownership checks on mutexes
    • Fixes a common crash when there were too many sounds playing, and on sound system shutdown
  • Implemented Gloves of Running Urgently speed multiplier attribute
  • Updated from Visual Studio 16.7.4 to 16.7.5 to fix various ABI/codegen issues

0.1.9

3 years ago
  • Further improved the responsiveness of thread jobs:
    • Fixed lock free check not auto resetting the event
    • Made the lock free check have a spin count of 20, to improve latency and have a higher chance of skipping the overhead from entering a sleep condition from the OS API
  • Fixed a crash when using addcond 88 when the game does not support it

0.1.8

3 years ago

Team Fortress 2 changes

  • Added Flip Ex present mode support for running in windowed mode and anti-aliasing disabled.
  • Re-enabled PresentEx usage whenever D3D9Ex is available
  • Tuned performance of optimistic thread scheduling path (wait free signal)
    • Now first checks events lock free, just in case threads are synchronized already
    • Then, locks each event individually to reduce contention and overhead
    • Shared job queue in thread pool is now first, then master call, then direct queue. This is because the shared job queue is the most frequent signaled event, and then master call and then finally direct queue.

Team Comtress 2 fixes

  • Fixed a crash in class menu on HUD reloads
  • Fixed normal wave start announcer sound missing in MvM
  • Fixed GPU thread priority being set in some invalid cases