Guide

Surf

What is Surf? #

Surf is a very popular gamemode in which a player slides down a ramp to gain speed.

History of Surf #

3kliksphilip has created an excellent video going over the history of Surf with Mariowned, the creator of the gamemode:

How Surf Works #

In Source, a player can only stand on a angled surface if it is less than 45.573° from the horizontal. If the slope is greater than this, the player slides down it. However, if the player holds the direction key pointing into the slope, they can stall themselves from falling and remain “airborne” without actually moving downwards. This can be exploited by increasing the air acceleration value to allow the player to convert their downwards speed into horizontal speed, and their horizontal speed into upwards speed.

...

Tricksurf

What is Tricksurf? #

A spinoff mode formed from the Surf game mode, players can create and complete sequences of locations to surf to, known as tricks, for XP and bragging rights.

Unlike regular surf, tricksurf typically has loosely defined goals that are not intentionally placed by the author of the surf map. Sometimes the most fun part of tricksurf is developing new tricks that are flashy and difficult, and then challenging your friends.

...

Adding Slick to Your Map

Slick is a defrag mechanic that gives frictionless ground movement. Slick is distinct from the slide mechanic that func_slide provides. There are three ways to add slick to a map: the func_slick brush entity, the %compileSlick material paramater, and the SetSlick player input.

func_slick #

The func_slick entity is a brush entity that will give the slick effect to the player when they stand on it. This entity has no special properties.

...

Ammo System

The ammo system allows mappers to control how many shots the player can fire from weapons that use ammo. All defrag weapons, the RJ rocket launcher, the sticky bomb launcher, and concs can be controlled with separate ammo types. The default state for the player is infinite ammo, but the player’s ammo can be changed with player IO inputs and entities. Additionally, an ammo limit can be set that doesn’t allow the player to have more than a certain amount.

...

Chat Commands

This guide covers all of the supported chat commands and potential inputs they have. These commands can be entered in chat at any time regardless of being in a lobby or not.

All commands are activated by using "/" or "!" or "." and then the trigger keywords listed below. Example: "/spec" or ".spec" or "!spec" all trigger the "Spectate Player" command.
Do not make "say binds"!! Instead, prefer to create binds to the linked commands. There will never be any exclusive chat commands; they all directly tie to console commands/variables!

...

Collectibles

This guide covers how to use collectibles in Momentum Mod. Collectibles are a tool that lets mappers create non-linear, staged maps.

Prerequisites #

To follow this guide you should:

  • Be on Momentum 0.8.7+
  • Have a working Hammer install with the Momentum FGD
  • Some experience with entity I/O and filters

What are Collectibles? #

Collectibles are any entity that the player must interact with to continue in the map. They can be thought of like pickups, but any entity can be a collectible, so long as the player can interact with it to “collect” it. The entity filter_momentum_collectibles is used to control entities based on how many collectibles the player has gathered.

...

Creating Docs Pages

All pages on this site are hosted in the Momentum Mod docs GitHub repository. The site uses Hugo with the Hugo Book, and is entirely open source.

Content on the site is written using Markdown, a simple and lightweight markup language. This allows docs pages to be written in a much more accessible format than HTML.

If you're having trouble with any parts of this guide, please feel free to ask for help in the `#docs` channel on our [Discord](https://discord.gg/momentummod). It's completely fine if you've not used a command line or Git before, we're happy to help you through the process.

Setting up Locally #

The two prerequisites for local development are:

...

Creating Surf Ramps

Ramp Guide Header

Note: This guide assumes that you have a basic working knowledge of the hammer editor and the tools used.

Basic Surf Ramps #

Planning #

devstage header

Before you start to create your ramps in hammer, there are a few factors you should consider:

  • How steep do I want the ramps to be?
    • A ramp that is too steep / wide may be considered awkward to board.
    • People tend to use a 5:4 ratio for the dimensions of their ramps
  • What size do I want for my ramps?
    • People may find themselves sliding off the bottoms of small ramps.
    • They may feel like they are going slow on oversized ramps, it is important to find a balance.
  • How do I want to detail my ramps?
    • Will models be needed to achieve the visual style, or can it be brushes?

These characteristics of your ramps will inevitably be refined through testing, but it is a good idea to start off with a plan for how you want the surf to feel. Look at different surf maps that you enjoy and try to get an idea of how exactly you want yours to pan out.

...

Gamemode Specific CFGs

Hud

This guide covers all gamemode-specific settings available to players, at least at the time of writing.

Config Files #

When the game loads into a map of a known gamemode, a specific config file located in momentum/cfg/ is executed if it exists. The names of these config files correspond to the gamemode prefixes found in map names. For instance, momentum/cfg/sj.cfg will be executed when loading a sticky jump map, such as sj_amazon.

...

Giving Players Powerups

Two powerups are implemented: Haste and Damage Boost. They can be given or removed with these inputs:

SetHaste (time in seconds)

SetDamageBoost (time in seconds)

If time = 0, the effect will be removed. If time < 0, then the effect will last indefinitely until removed.

There are also powerup entities: momentum_powerup_haste and momentum_powerup_damage_boost. They both take a ResetTime key like the weapon spawner entity. The haste powerup takes a HasteTime key, and the damage boost powerup takes a DamageBoostTime key. They are both specified in seconds the same way as the inputs.

...