Another year, another update!

Hello all, it’s that time again for another momentous occasion! It’s been over a year and (almost) two months since the last released update, 0.7.2. A lot has happened since then, so I am extremely pleased to finally be able to talk about the next step for Momentum.

0.8.0 is a major milestone for Momentum Mod as it lays all of the groundwork for the future of the game. The game now has working leaderboards, XP systems, map selection with pre-zoned maps, and many, many more features, quality-of-life improvements, and bug fixes that I’ll cover in a bit!

And before we jump in to the main changelog, I’d like to thank everyone with their patience towards the game. Development slows down to a crawl sometimes, but the game is still going strong!

So, without further ado:


Mr. World Wide Web

Momentum Mod has a completely revamped website, written from the ground-up to support the features we need. It has a map selector, leaderboards display, rudimentary stats, profiles, and much more!

Check it out here: !

Everything on the site is going to be improved alongside the game. Just keep in mind: everything is subject to change, including layouts! If stuff is missing, we most likely know, but feel free to suggest any changes as well!

If you’re experienced with web design or website programming, we could always use more help with it. Please reach out to Gocnak about helping out!

Tracks, Zones, and Triggers, Oh My!

0.8.0 sees a major overhaul to the zoning system found in the game. We now use a Track->Zone->Trigger system for maps. This system has a couple extra steps to it from the old zone tools, so let me break down the terminology:

Tracks: Tracks are entire courses through a map. Track 0 is considered the default or “main” track, whereas tracks 1 to 63 are the “bonus” tracks for a map.

Zones: Zones split up tracks into different areas, and denote where the player is on the track. The end zone, reserving zone number 0, denotes the end of the track. The start zone, reserving zone number 1, specifies the start of the track. Tracks need to have both a start and end zone to be valid! Optionally, though recommended for lengthy maps, the stage and checkpoint zones can be used to denote player progress throughout the map. These start at zone number 2 and go up to 63. Stages are used when the map usually has clear-cut sections that typically don’t flow together, and failing them starts at a specified point (the stage start). Checkpoints are used to denote player progress on purely linear maps, where resetting/failing places the player back at the start of the map.

Triggers: Invisible geometries that serve as the contact points for zones. Zones can have multiple triggers, up to 63 if needed. This allows maps to have multiple end zones and start zones, allowing some freedom for symmetrical designs.

So now that you (hopefully) understand the system, you may be wondering: how does one go about making the zones for maps? Well, enter our (sorta) new zoning tools:

The box builder is a simple rectangular volume builder for easy rectangular platform zones. It’s the same as before, but now paired with the new Zone Menu UI, you can customize your simple zones even further. But that’s not all...

Thanks to Mehis, we are now able to support any shape prism you could think of. This includes concave shapes as well!


The zones are outlined by default, but every single one of them can be customized with the commands:



What all of this means:

Maps should not have zones embedded in them anymore! The map uploading process takes in a separate .zon file and stores the zones on the website, so any updates to the zones while the map is in testing can be done without having to re-download the entire map. We will eventually update our VBSP to parse these zones and their geometries and spit out a proper .zon file with all the correct settings, but for now, just use the in-game tools!

Bonuses can have stages/checkpoints! Maps can have up to 64 total tracks (1 main track and 63 bonuses), each track can have 64 total zones (1 start + 1 end + 62 stages/checkpoints), and each zone can have up to 64 triggers. We hope this flexibility allows for some creative zoning layouts and eases the pain found in the old zoning tools.

Maps Make The World Go ‘Round

What’s Momentum Mod without the pre-zoned maps to play it? A good surf/bhop mapping testing tool, I guess... Anyways, this update sees some major overhauling work done to the Map Selector and relevant UIs.


The main UI was overhauled to show the three main tabs of interest (for 0.8.0; we’ll add more in the future): Browse (for browsing maps), Favorites (for favorite maps), and Library. Maps in your Library are maps that you would like to play, and are downloaded to your computer. You have to add maps to your library in order to be able to play them, but it also serves as a good indicator of how many people like the map enough to want to be able to play it. Removing a map from your library will also delete the map from your computer, to help save that precious hard drive space.


The Map Info dialog also got a major face lift, using a design by Juxtapo. At a quick glance you can see the map’s info, and even a mini leaderboards for the default map category!

The Map Info dialog also features a brand new, all-VGUI control called ImageGallery, which allows you to peruse the map’s images to get a good idea of how the map looks like before downloading it!

With the Map Selector comes some fun commands to configure how the map selector works:

  • mom_map_delete_queue [0,1] when 1, queues deleting maps removed from library to when the game shuts down
  • mom_map_download_auto [0,1] when 1, automatically downloads maps when added to library
  • mom_map_download_queue [0,1] when 1, queues map to be downloaded, using a defined parallel count
  • mom_map_download_queue_parallel [1,20] specifies how many maps can download at once in the queue
  • mom_map_download_cancel_confirm [0,1] when 1, opens a confirmation box when trying to cancel a download

All map data is cached inside of the new “map_cache.dat” file found in your momentum folder. If there’s ever any issues with the map lists, just delete this file and restart your game!

With the new track-zone-trigger system, and this fancy map selector, we’ve created 10 zoned surf maps to test the systems in place for 0.8.0:

  • surf_666
  • surf_ace
  • surf_kitsune
  • surf_lt_omnific
  • surf_mdrn
  • surf_me
  • surf_mesa
  • surf_overgrowth
  • surf_saturday
  • surf_stonework3

All of these maps support Leaderboards and Rank/Cosmetic XP via the website. Speaking of those...

Leaderboards? I barely even know her boards

Momentum Mod 0.8.0 also features the first iteration of the global leaderboards and XP systems. Let’s start with XP.

There are two XP systems in place for Momentum Mod: Rank and Cosmetic XP.

Rank XP: Commonly referred to as “rank points” from servers, this is only rewarded when you achieve a Personal Best (PB) run on a map. Rank XP is determined by three categories, and you can read more about the calculation here. ( In short, as long as you’re submitting a run above the rank 50000, you will get Rank XP. How much you get depends on where you place. You can use Rank XP as a way to determine how good someone is at playing Momentum.

Cosmetic XP: Cosmetic XP, on the other hand, aims to fill the gaps that Rank XP creates. Cosmetic XP is gained from submitting runs (PB or not), completing challenges, earning achievements, racing other players, and so on. You can see the Cosmetic XP details used in 0.8.0 here. ( Cosmetic XP is designed to be grindable, but has no effect on anything other than your level shown on your profile. You can use Cosmetic XP/Levels as a way to determine how much someone has played Momentum.

With these two XP systems in place, we hope that the leaderboards become a fun challenge to improve in, rewarding every attempt along the way. But that being said, we will be iterating upon the values used in both systems, and clearing times all along the way. Every time set in 0.8.0’s leaderboards, all the way up to 1.0.0, will be removed by 1.0.0. 1.0.0 will launch with a clean slate and hopefully thoroughly tested and agreeable XP systems in place.

On a similar note, with 0.8.0, the only runs we are accepting are the main track, and specifically doing all of the zones for it. We will be adding Bonuses and ILs with 0.9.0!

Bang Bang, Pew Pew


All of the CS:S weapons have gotten a facelift as well, thanks to Cabbage McGravel on the team. The LMG, shotgun, sniper, SMG, and knife have a custom model and design to them, to further distance the reliance from mounting CS:S to play the game.


On a similar note, the icons for the weapons have been updated, along with the tokens used in the HUD, as to not have any #Unlocalized_Tokens_Show_Up everywhere.

All The… Small Things

Discord Rich Presence


For the Windows build only, we have added Discord Rich Presence so that you can show off important gaming statistics like just how long you’re really taking to beat surf_mesa.

Checkpoint Menu Checks Out

The “Checkpoint” menu has changed its name to “Saveloc” menu, to help clear the distinction (“checkpoint”s are reserved for linear map zones now). All the saveloc related commands are now under the mom_saveloc_ prefix, so make sure to fix up your custom binds!

Timer Sounds

The timer features some new sounds from Monolith, so you can have complimentary sounds to several timer-related actions, such as starting the timer, resetting the timer, when the timer fails to start, as well as completing a run that’s either a PB or WR!

Map-Based Autoexecs

We’ve added in map-specific auto-executed commands (ran every time you load the map). This helps with running specific commands when the map starts up, if need be.

  • Use mom_mapcfg_add (command) to add a convar/concommand to execute upon map load
  • Use mom_mapcfg_clear to remove the map's saved commands/convars
  • Use mom_mapcfg_print to see all the map's current saved commands

New Triggers/Entities


From Cabbage McGravel, we have added custom trigger textures for various triggers for use in Hammer, to help distinguish between which triggers are which! These are just visual helper textures and must be set manually.

On top of that, we’ve added three convenience entities:

  • trigger_momentum_reversespeed
    • Reverses the speed of the player upon touching it
  • trigger_momentum_setspeed
    • Sets the speed of the player to a fixed value and angle upon touch (prevents boost spamming)
  • trigger_momentum_speedthreshold
    • A trigger that fires an event if the player is going over or under a certain speed threshold

We’ve also improved some of the existing ones:

  • Added outputs for trigger_momentum_onehop/multihop
  • Added WASD blocking to trigger_momentum_limitmovement
  • All Momentum triggers force the Clients spawnflag on now


Lots of things were improved upon between 0.7.2 and 0.8.0. I’ll tackle this by just… giving you the entire list. Don’t worry, I’ll also bold the important ones to help.

Gameplay Improvements Galore

  • m_rawinput now defaults to 1
  • Add null bind support (mom_enable_overlapping_keys)

    *We decided to just allow nulls in Momentum due to the detection for them potentially causing innocent people to get banned.

  • Add "release forward key on jump" setting (mom_release_forward_on_jump)
  • Removed default vertical movement in noclip -- use +moveup and +movedown
  • sv_tickrate is now sv_interval_per_tick for further clarity (1 / desired tickrate)
  • Refactored all hud convars/concommands to be under the namespace “mom_hud_”
  • Replay files have a new name, home folder, and a slightly updated format (old ones need not apply)
  • Added disabled buttons to ghosts as well, only exception is the BHOP blocking
  • Show in_strafe on the keypress display
  • Allow sv_cheats 1 to still save your replay, but not submit it
  • Put most commands of interest (Zone tools, ent_create, ent_teleport, set_[pos/ang], etc) behind requiring launching the game with -mapping, which does not submit runs by default [Image of enabling this]
  • Add mom_timer_stop (default bound to the B key) which allows you to manually stop your run
  • Whitelisted some common commands for point_[server/client]command and defaulted the sv_allow_point_command to the whitelist

UI/UX Improvements Galore

  • Added turnbind direction into the keypress display [Image]
  • New ICO to match the new logo of the game [Image]
  • TextEntry Improvements:
    Added CTRL+backspace and CTRL+delete to all text entries
    Allow negative numbers in numeric TextEntry
  • Added proportionality to the game console (scales to resolution) [Image]
  • Added proportionality to the changelog panel
  • Added ConsoleScheme.res for players that want to customize just the Console's Look and Feel
  • Further tweaked the HUD layout and scheme, minor adjustments like position of text and dropshadows
  • RichText additions: triple click to select the current line, CTRL+A to select all text
  • Made the loading bar continuous and added percentage [Image]
  • Added timer fail color animation to the HUD timer [GFYCAT]
  • Lobby members panel moved to its own panel, bound to "L" (+show_lobby_members) [Image]
  • In-game VGUI Editable Panel hotloading with CTRL+ALT+SHIFT+C (and hud_reloadcontrols for HUD)
  • Re-added "mute audio when game loses focus" to audio settings
  • Main menu colors are more legible [Image of New]
  • Converted map info and timer to res files for extra customization
  • Optimized some HUD element rendering
  • Show a pop-up letting the player know if the game did not authenticate with the site for particular reasons
  • Spectating-related strings have replay-specific versions when spectating a replay
  • Added new experimental "energy" hud_speedometer type (mom_hud_speedometer_units 4) (thanks @Beetle179 !) [Image]
  • Updated in-game credits to include more of the current team, as well as new music by Monolith
  • New background map and texture, and new loading icon texture by Cabbage

Miscellaneous Improvements Galore

  • Backported Alien Swarm's "Set Player FOV" for point_viewcontrol
  • Removed the Source Shader Editor
  • Updated Steamworks API to latest
  • Improved cubemaptest map to properly show parallax corrected cubemaps [Image]
  • Prevent empty files "stats.txt" and "voice_ban.dt" file from being created
  • Updated VMT of grenade by BlockBuilder57 and SethJH
  • Added white/black color materials to materials/ for mappers to use instead of cs_italy/white
  • Images that can load from common image types/URL
  • Automatically detect external cvar changes in CvarTextEntries
  • Default crosshair to be 1

All of these improvements come directly from community feedback, so if you ever have any suggestions on things to improve, let us know in our Discord!


Everything. Bugs have been exterminated, bugs are illegal now, there aren’t anymore bug-

Okay for real, there’s a lot here. I’ll bold the really big ones, but I don’t blame you for power-scrolling past this gargantuan list.

Gameplay Bugs Begone


  • Fixed crouch jumps and scrolling to be more like CS:S, with 64-jumps having a more consistent pattern
  • Fixed wallbugs and rampbugs at places with multiple planes intersecting the player, most notably at 250 tick
  • Fixed view going through ceilings, raising the height of the player camera back to the proper 64 units
  • Fixed and improved ladder grabbing and movement
  • Fixed teleports in and out of a solid not resetting velocity
  • Fixed some angle issues on teleport -- angles are now a bit more consistently set
  • Fixed rotating objects slowly pushing players away when standing on them
  • Default in_usekeyboardsampletime to 0


  • Fix hud hints showing for the local player when triggered by ghosts
  • Fix game_player_equip entities not working
  • Fixed crashes when changing graphics settings
  • Fixed practice mode safeguard to only apply when the timer is running
  • Fixed underwater state not being updated in noclip
  • Fixed game crash when the last member of the lobby leaves while the player is spectating them
  • Fixed momentum triggers not properly checking filters on the player
  • Fixed game pausing when the steam overlay is opened
  • Fix CS:S soundscapes not properly playing
  • Start mark commands are now: mom_start_mark_[create/clear]
  • Fixed teleports being interpolated in replays (thanks @TotallyMehis)
  • Whitelist point_client/servercommands by command
  • Fixed incorrect triggers touch logic when teleporting (EndTouch the old -> StartTouch on the new)
  • The timer now properly stops when using the saveloc menu
  • Disable flashlight when spectating
  • Fixed linear tracks to properly set zone enter time
  • Fixed current zone status and logic when playing on linear maps
  • Fixed practice mode sending events if timer is running
  • Fixed being able to spectate in background/credit maps
  • Fixed ghosts spawning in background/credits maps
  • Fixed finding another ghost to spectate; the logic properly iterates through all online ghosts and filters ones that are spectating
  • Fixed chat spam when iterating between spectating an online ghost and a replay
  • Fixed place colors not updating after deleting a local run
  • Fixed comparisons not reloading upon deleting a local run

UI/UX Bugs Begone

  • Fixed spectator names still showing in the spectator names UI after the spectator has left
  • Fixed options->keyboard settings not having a bind option for chat
  • Fixed HudMenus not closing after changing screen resolution
  • Fixed layout of the Map Finished UI panel
  • Fixed potential input trapping with ReplayUI
  • Fixed various UI layout/scheme issues, including making Momentum Settings and ReplayUI proportional (scale to resolution)
  • Fixed bug where pressing the leaderboards key showed up as IN_STRAFE on hud_keypress
  • Fixed frame resize grip not rendering correctly
  • Removed menu background blurring
  • Properly hide certain hud elements when leaderboards are open
  • Fixed chat panel showing and fading every time the player spawns
  • Fix HUD elements not having proper layout/sizing after changing in-game resolution
  • RichText fixes:
    Fixed double click to not select so much whitespace
    Fixed selection color bug
    Fixed selection being reset/truncated when pressing CTRL+C to copy
  • Fixed buildgroup rulers (CTRL+R when in build mode) showing the wrong value
  • Fix run comparisons not reloading on new run save
  • Fixed improper order of popups when booting the game with no steam & for the first time
  • Fixed some linear comparison string calculations
  • Fixed chat not properly scrolling down after a given amount of messages
  • Fixed the loading dialog not showing after clicking "Join Player" in the lobby member list
  • Fixed menu not properly detecting if player was in spectating mode or not
  • Fixed some server localization tokens to be shorter

Internal Bugs Begone

  • Fixed crash on boot for OSX
  • Fixed Steam Avatar Images not loading 184x184 correctly
  • Fixed potential memory leak with deleting savelocs
  • Make map zone files load from the "GAME" path, which allows packing inside of maps
  • Momentum trigger flags are proper values
  • Fix various triggers that required proper thinking logic, including multi/onehop triggers
  • Fixed run stats not resetting with manual restart
  • Fixed “game_write” in gameinfo.txt to point to the Momentum folder
  • Prevent needless reservation of memory for packets (thanks @crashfort!)
  • Fixed some memory leaks in the Map Selector

Phew… yeah so as you can see, lots of stuff was fixed. But as they say, squash a bug, and two more may take its place...


More Maps

We will be adding more and more maps with each incremental update to the game!

More Game Types

Bhop and KZ are planned to be supported before 1.0.0 drops!

More Bugs

Just kidding! ...Hopefully! Well…

Achievement Unlocked: Helped Make Achievements

...but we’re after some more and would like your ideas on more of them! Check out our achievement submission form here:

If you’re looking for ideas we’ve already taken into consideration, you can find them on the spreadsheet here:

Another year, another update?

Although 0.8.0 took a monumentally long time to come out, it did set the groundwork for most of the things left for 1.0.0. You can expect more frequent, minor updates to the game, alongside a much faster development turnaround now that the core features have their groundwork laid out under them. It’s easier to iterate on a design than it is to design it from the ground-up.

I have stopped giving out predictions for versions because it’s just hard to properly estimate how long this volunteer-based passion project takes sometimes. But I can assure you that 0.8.1, 0.8.2, 0.9.0, etc are all going to come much sooner than 0.7.2 -> 0.8.0 took.

In the meantime, please feel free to join our Discord server ( and hang out while we update the game!

Thank you all again for your active support,
Nick “Gocnak” K.
Momentum Mod Project Lead