Team Comtress 2 Versions Save

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

0.0.15

3 years ago

Please set r_fastzreject 0! It was accidentally set to 1 in this release.

  • Fixed thread delays/contention
    • Greatly improves frame consistency, especially when there are many particles rendered
    • Removed spin waits from thread mutexes, which were set too high for large amounts of threads, taking away time from actual work. Ideal wait times are job specific anyway, and job start times are not reliable. So, spinning will usually result in a lot of useless work.
    • Increased global thread pool priority to above normal, to reduce delays in scheduling and finishing a job list. This is especially important for particles, which efficiently split the work up across many threads, but return too early for the blocking thread to efficiently end in most circumstances. Before, particle system rendering time was entirely up to the scheduler to finish, and it would more often than not respond to all jobs being done until 3 to 5ms later.
  • Reduce draw calls by increasing buffer sizes for index and vertex buffer, and uncapping vert/index counts
  • Optimized mouse calculations
    • Mouse no longer locked to center of screen per frame, instead it is bounded within the window passively
      • This was happening twice (now not at all) due to a bug in how VGUI updated the mouse
      • This should also fix issues with the mouse leaving the window on multi monitor set ups
    • Cached window offset so that a transformation from window to screen is not needed
  • Optimized thread distribution to better respect the main thread and better use hyper-threading/SMT threads
    • There seems to have been a few bugs which biased threads towards the first few cores
  • Reduced the number of clears done to RTs and screen
    • Shadows no longer clear twice every frame
    • Additional buffers do not clear as a side effect to being added to the main view
    • Got rid of many duplicate skybox related clears
    • View now relies on clear at end of frame from VGUI, rather than clearing screen twice per frame
    • Optimized some clears related to water reflection and refraction
  • Make beam count optimization default for TF
  • Disabled using inefficient D3D managed texture pool (probably off for most people anyway)

0.0.14

3 years ago

NOTE: This was re-released to fix a crash in sound threading.

  • Added r_force_fastpath: forces shader fast paths for higher GPU performance
  • Added tf_weaponspread_continuous_seed: If set to >-1, the base seed for fixed recoil spread for continuous single bullet fire weapons.
    • Defaults to -1 (effectively disables fixed continuous fire spread)
  • Added tf_weaponspread_continuous_seed_multishot: If set to >-1, the base seed for fixed recoil spread for continuous multi-bullet fire weapons like the Minigun.
    • Defaults to -1 (effectively disables fixed continuous fire spread)
  • Added fully threaded sound updates
    • DSP and spatialization is now runs just in time on the async mixer thread
    • This disables support for non-async mixing and extra sound updates (can be re-enabled for comparisons within the source code)
  • Skipped an Xbox 360 only dashboard music update in sound frame
  • Optimized leaf drawing
    • Inlined surface data access
    • Skipped a decal surface add which seems unnecessary
  • Optimized some shadow code
    • Reduced calculations, copying and memory access
    • Branch optimization
    • Reduced shadow distance for TF (from 50 to 25), to reduce leaf draws
  • Fixed there being more than one I/O thread
    • More than 1 causes too many requests on a single drive, better to just queue them up on a single thread
  • Fixed iron bomber projectile having a ~9x larger hitbox (@wgetJane)
  • Fixed invisible characters being abused to clear chat (@wgetJane)
  • Fixed Heavy sandvich throws forcing a secondary attack on the last weapon
    • Reverts a redundant demo det fix that shouldn't be needed anymore
  • Tuned hardware sync
  • Removed shadow spew which could cause contention in the rendering system
  • Fixed a crash when using lower shader quality
  • Slight optimizations to lightmapped generic, world vertex alpha and skin shader
  • Use native atomic functions rather than ThreadInterlockedAssignIf64 for spin RW lock
  • Optimized thread pool calculations for processors with less cores
  • Forced hardware dxlevel, to prevent legacy settings from interfering from performance gains

0.0.13

3 years ago
  • Sentry now updates correctly, rather than using an assumed static time interval
    • This fixes sentries behaving faster/slower when server tick rate changes
  • Sentry now fires correct amount of bullets according to fire rate
  • Optimized VGUI
    • Skipped rendering root panel (which seems to be the Steam application)
    • Added improved caching for fonts for the fast path (common English characters)
  • Miscellaneous distance calculation optimizations throughout the source code
    • Skips a costly square root operation when calculating distance in many scenarios
  • Fix many bugs with sound time
  • Shader optimizations
  • Optimized various IO find functions
  • Threaded sound now updates closer to clock, so that there is not wasted computation
    • Also releases resources
  • Updated max backpack slots from 2000 to 2500
  • Fixed a crash on model decals
  • Greatly improved server tickrate accuracy
  • Fixed model decals being created and destroyed out of frame loop, causing queuing issues
  • Greatly improved thread scheduling
    • Sleeps now alert for IO threads (Windows only)
    • SwitchToThread is used for better usage sharing (Windows only)
    • All spin waits now use the sleep intrinsic to hint to the CPU to more efficiently spin-wait
    • These changes allow for uncapped global thread pool on logical processors, rather than a maximum of 3 threads on physical processors. TF2 will now scale threads for all of your logical processors.

0.0.12

3 years ago
  • Fixed studio renderer not properly queuing data in some cases and creating functors inefficiently
    • Added queued mode for glint precache per frame and model array draws
  • Fixed more cases of sound script pure bypass
  • Fixed ping calculations in scoreboard and net graph
  • Removed holiday restrictions from items and effects
  • Removed support for Win32 files, as they doubled the filesystem cost due to failing
  • Added multi-threading support to LZMA persistent buffer
  • Further optimized math functions
  • Tuned async IO stack size and thread count
  • Global thread pool is now distributed and uses correct setup
    • Limited to 4 threads now, but automatic determination uses proper processor setup
  • Increased mat_picmip max to 4
    • Unlocked Very High (-1) on macOS
  • Optimized world list building algorithms
  • Optimized world surface creation
  • Fixed sound crackling on some systems by reverting back to 0.05s mixahead
  • Removed busy-waiting from threaded sound update, at the cost of slightly less exact sound clock
  • Occlusion system clean up
  • Fixed typos (@micwoj92)

0.0.11

3 years ago
  • Fixed some entities being invisible (introduced in 0.0.4)
  • Fixed sound scripts not being enforced for pure servers
  • Added HUD fixes from CriticalFlaw's TF2 HUD Fix (@micwoj92)
  • Fixed a memory crash introduced in 0.0.10
  • Updated base seed for fixed recoil spread
  • Greatly reduced sound latency and sound replication delay from server
    • Re-enables threaded sound mixing, with a 1ms frame time
    • Mixahead reduced from 50ms to 40ms
  • Optimized server snapshot generation (reduced sound and temp ent counts, optimized buffer usage)
  • Optimized buffer usage in bug reporter
  • Tuned spread gain factor for panic attack from 50% to 25%
  • Fixed a movement stutter
    • Reverts velocity latching introduced in 0.0.4
  • Fixed various issues with hitreg (@wgetJane):
    • Teammates are now always lag compensated, so that teammates blocking hitscan is not awkward
    • Removed teammates blocking melee attacks, as it can adversely affect hitreg in crowded situations
  • Fixed spy not being able to uncloak while holding a weapon deployed (introduced in 0.0.10)
    • Reverts flamethrower item frame rework
  • Updated links to HTTPS to prevent MiTM attacks (@micwoj92)
  • Fixed README instructions (@micwoj92)
  • Fixed some usages of temporary string buffers

0.0.10

3 years ago
  • Fixed crosshair having variable gap in multiplayer options due to preview changing crosshair gap parameter (@Knucklestf)
  • Documented new console variables, commands, and launch options: https://github.com/mastercomfig/team-comtress-2#new-console-commands-and-launch-options
  • Fully integrated TF2 base HUD into download, so less setup is required
  • Fixed airblasted projectiles dealing 170 self-damage instead of normal damage (@wgetJane)
    • This fixes a bug which players commonly associated with minicrit self damage
  • Fixed sticky bomb launcher keeping charging sound when you switch away from it (@wgetJane)
  • Fixed sticky bombs not detonating while swinging or deploying melee (@wgetJane)
  • Fixed last display issues with net graph networking cvars
  • Fixed an issue where stunned movement slow could be bypassed through diagonal movement
  • Fixed an issue where base movement speeds above 450 units per second would be slowed as if they were 450 units per second, thereby cancelling all movement above 450 (Baby Face's Blaster)
  • Fixed a crash relating to the Pyro v. Heavy war not being available anymore (@maximsmol)
  • Implemented post-JI sandman changes (@wgetJane)
  • Fixed forums button linking to Steam Forums instead of Steam Discussions for TF2 (@micwoj92)
  • Ported some security fixes and optimizations from CS:GO networking code
  • Skipped setting buffer size for TCP or UDP if the default game's size was not higher than the system's
  • Fixed the sapper not working infinitely if attached to a building while changing models (@maximsmol)
  • Reworked flamethrower attack responses (@maximsmol)
    • Fixes various animation, airblast repeat, and attack command bugs
  • Fixed build for some people
  • Fixed demo support not marking the first kill in a killstreak
  • Fixed a typo in the startmovie help text (@micwoj92)

0.0.9

3 years ago
  • Team Comtress 2 now supports the assets and item schema from the latest build of Team Fortress 2, except for the isotope particle effect, quests and the HUD.
    • This means that you will need to make a new folder, and follow the new installation instructions if you have already installed Team Comtress 2.
    • Most balance changes are now implemented through item schema changes.
  • Fixed replication and prediction issues in the bullet code
  • Fixed Degreaser not applying its holster bonus if it hadn't been deployed for 0.5 seconds (instead of its actual deploy time of 0.3)
  • Fixed cosmetic lighting being inconsistent (based on Cosmetic Lighting Fix)
  • Implemented the Jungle Inferno Panic Attack
  • Implemented the Jungle Inferno Neon Annihilator weapon class
  • Added a weapon class for the Dragon's Fury. Currently uses a basic projectile.
  • Fixed incorrect limits for cl_cmdinterval and cl_updateinterval in a variety of places
  • Fixed incorrect cl_cmdinterval description
  • Fixed net graph using cl_cmdinterval incorrectly
  • Further fixed ping calculations on scoreboard
  • Implemented Mannpower changes from Jungle Inferno (because they were easy to do)
  • Implemented m_bUniformTriggerBloat from Jungle Inferno
  • Skip trying to load DX6, DX7, and DX8 shader DLLs
  • Fixed a build error

0.0.8

3 years ago
  • Replaced cl_cmdrate and cl_updaterate with cl_cmdinterval and cl_updateinterval respectively
    • Defaults to 0.015
    • This syncs up game simulation with networking. Previously, game simulation intervals were 0.015 seconds, while networking intervals were 1/66 (0.0151515).
    • Updated ping calculations to remove legacy Goldsource compatibility
    • Removed hard coded cap of 100 on update rate (would have been a 1/100 cap on update interval)
  • Removed cl_interp, now that networking intervals are precise to game simulation. You can use cl_interp_ratio exclusively to adjust your client interp
  • These two changes also allowed for a lot of simplification of the networking rate calculation code.

0.0.7

3 years ago
  • Fixed event dependence within random number generator
    • Many game systems would set an unrelated seed, overriding the initial engine seed for all later events. Many of these cases were just removed, as they had no business setting the engine seed. Other cases were solved by the next patch note.
    • Some of these game systems would also rely on this seed to generate a sequence of random numbers. However, it is possible that the seed would be set by another system, thus changing the resulting sequence. This was fixed by adding scoped randomness to the system random number generator. This blocks any other interaction with the RNG system until the scope is over, and also restores the RNG state from before the scope was started.
      • One notable system affected by this change was the weapon spread system. It would generate 4 floats to determine the horizontal and vertical spread. Also affected is random crit generation.
    • Notable problematic systems were many places within the UI and animation systems affecting the main random number generator seed.
    • Note: still need to investigate side effects of this, and if they are "intended" (coincidental or decided)
    • Note: this still isn't perfectly replicatable RNG, though it is very close. It is currently unknown what is causing the variance in patterns sometimes, though a possible cause is fast floating point math.
  • Demo player now uses the same RNG seed each play, resulting in fairly consistent demo playback
  • Enabled tf_use_fixed_weaponspreads 1 by default
  • Used new scoped RNG to implement fixed spread for continuous fire weapons. (https://github.com/ValveSoftware/Source-1-Games/issues/2487)
    • Starts at a fixed seed every "perfect shot" (1.25 seconds for single shot continuous weapons like the pistol, and 0.25 seconds for multi shot continuous weapons like the minigun), where TF2 shoots a bullet exactly at the crosshair, and advances the fixed seed every shot after (just like non fixed continuous fire). Video
  • Removed cheat flag from spec_freeze_time, and spec_freeze_traveltime, so that server owners can improve their instant respawn servers without mods
  • Fixed hint on loading screen double updating
  • Potentially fixed a player spawning as a class they selected before respawning which has already reached the class limit (https://github.com/ValveSoftware/Source-1-Games/issues/2084)
  • Fixed an issue where sticky detonation would be delayed (https://github.com/ValveSoftware/Source-1-Games/issues/2185)
  • Added cheat flag to tf_medieval_thirdperson
  • Bullet FX now only spawn client-side when created, rather than on any data update
  • tf_taunt_first_person is now replicated (server controlled). tf_taunt_first_person_enable 1 can be used by the player to force enable first person taunts (like the previous behavior). This lets server operators enforce first person taunts for competitive integrity. (https://github.com/ValveSoftware/Source-1-Games/issues/2079)
  • Set all forms of max routable to 1200 to fix some inconsistent values between client and server caused by the change in 0.0.6
  • Fixed fire rate being incorrectly calculated at certain intervals (most famously affected MvM firing speed upgrades for Heavy's minigun)
  • Removed fall damage variance with tf_damage_disablespread 1 (https://github.com/ValveSoftware/Source-1-Games/issues/2489)
  • Removed cheat flag from tf_viewmodels_offset_override (https://github.com/ValveSoftware/Source-1-Games/issues/2484)
    • Not allowed in competitive matchmaking.
  • Fixed certain projectiles instantly colliding with the world in some cases (@zooxy)
  • Improved installation instructions (@maximsmol)

0.0.6

3 years ago
  • DirectX 9 is now required to run the game, with DirectX 8 being removed even more, and performance options from DirectX 8 being added to DirectX 9:
    • Added tf_disable_weapon_skins 1 to disable weapon skins on DirectX 9
    • Work is ongoing to add an option to enable low-end shaders traditionally only for DX8, but more investigation needs to be done for which shader fallbacks improve performance and which are only there for the less advanced support DX8 has for shaders.
    • More info: DirectX 8 is itself a very outdated graphics API. It doesn't inherently improve performance, especially on any card made past 2002. DirectX 9 is a more efficient renderer in many ways: it has support for up to shader model 3, efficient resource management through D3D9Ex, stream offset support for meshes, hardware skinning, vertex textures, increased texture samplers, vertex compression, boolean and integer shader constants, enhanced texture format support, fetch 4 support, and more!
    • Team Comtress 2 already provides the following DX8 performance options within DX9 mode: tf_skip_halloween_bomb_hat_translucency, r_skybox_lowend, -particle_fallback
  • Updated some more networking options to Valve matchmaking/CS:GO standards:
    • sv_namechange_cooldown_seconds from 30 to 300
    • sv_allow_voice_from_file 0
    • Max routable payload is now 1200 bytes
    • net_compresspackets_minsize 1000
    • sv_minupdaterate/sv_mincmdrate 66
  • cl_interp is now upper bounded by sv_client_max_interp_ratio, so that server owners are given control to limit extremely high interp set by the user. With default settings, the highest interp can be is 0.075.
  • sv_motd_unload_on_dismissal 1 by default, so that the usual case of a simple MOTD is unloaded after close
  • sv_restrict_aspect_ratio_fov 2 by default, so that players cannot gain an advantage with ultrawide displays
  • Added tf_hud_target_id_disable 1 to disable dynamic target IDs which take up a relatively large amount of time for player tick
    • Optimized target ID trace when not a medic in MvM by not tracing debris
    • Reduced trace length from practically infinite to 8192 (weapon range)
  • Fixed broken SteamIDs in the server depending on Steam response time (@maximsmol)
  • Reworked client leaf system for renderables (based on CS:GO). This should greatly reduce hitches/drops when turning corners and entering new areas/rooms:
    • Optimized leaf list algorithm:
      • Box algorithm is less recursive, reducing function call overhead
      • Skipping leaf enumeration and doing it later with our collected leaf list
    • Expanded leaf bounding box for particles, so that as they simulate, their bounding box does not expand or change and cause an expensive re-insert into the tree
    • Bounding box uses a more efficient path instead of outdated wrapper for bounding boxes
    • Reuse leaf calculations when determining area
    • Fix static props not being considered for shadow removal
    • Cache off if the renderable should cast a shadow instead of checking it for every leaf it is added to
    • This also disables threaded client leaf system, since it is not compatible with these changes, and the performance currently is better than the old system was threaded. This also fixes particles flickering.
  • Enabled support for newer SSE functions in Mathlib
  • Optimized particle effects by lagging behind in attachments for 1 frame of updated transformations, so that we do not force a recalculation of bones whenever a particle is attached to an animated object
  • Bone setup now considers lower quality LODs to be setup, when a higher quality LOD is set up. This is because the higher quality ones include a superset of the bones used in the lower quality ones
  • Fixed possible error in bone setup from prediction
  • Remove hack which forced recalculation of bones every frame
  • Skipped expensive check to opt out of the IK in bone calculation
  • Disabled threaded client shadow manager, because it is out of the dependencies for a bone, causing setup bones to be requested again in a frame when it can happen in order
  • Fixed one crashbot exploit
  • Disabled cloud settings by default so that the game does not conflict with live TF2
  • Queued decals are now disabled because they caused crashes in some maps
  • Fixed crash and output handler (@maximsmol)
  • Removed/fixed many warning messages (@maximsmol)
  • Added build instructions (@maximsmol)
  • Fixed many dev scripts (@maximsmol)
  • Optimized excessive memory allocations within static mesh draw pass
  • StatTraks are now only updated on your own viewmodel
  • Significantly optimized TF eye look ats
  • Optimized choreo scene think (from CS:GO)
  • Slightly optimized material precache, and disabled hack on macOS
  • Optimized flexed vertex computations with new Vector4DWeightMADSSE implementation in DirectX Math
  • Optimized world surface mesh index builder
  • Disabled async sound mixing by default, as it spends a lot of empty time. Will revisit in the future if we can find a better way to tie work to the mixer.
  • Updated various trace lengths to 8192 rather than being practically infinite:
    • Server side voice response when looking at another player
    • Inspect trace on other players
    • Sniper rifle dot trace
    • Ash particles
    • Removed change which forced client side traces to be infinite rather than 8192
  • Cleaned up debugging/function overhead in shader logic
  • Fix wrap in index buffer code
  • Cleaned up dynamic mesh draw code to be less intensive and disruptive to the threaded renderer pipeline (would often force flushes and full rendering pipeline to be completed at random times). Fixing this introduced a known bug: viewmodels will not render instantly while player models are spawning in, will be fixed soon.
  • Ported over SlerpBonesSpeed from CS:GO for fast bone calculations
  • Enabled possible fast path in some simple meshes