Guide

Map Submission

Introduction #

Momentum’s map submission system is how maps are officially added to Momentum Mod.
Map submission is open to everyone, but we have higher standard than e.g. GameBanana or Steam Workshop. Notably:

  • Submissions go through a minimum-week-long public testing period where other players can give feedback
  • Submissions must be approved by an Official Reviewer
  • Once a submission is approved, the submitter can’t modify or delete the map!

The ultimate goal of this system is to avoid the need for leaderboard wipes, ensuring we catch as many bugs prior to approval as possible.

...

Map Porting

Introduction #

This guide gives an overview of all the steps required to officially port a map to Momentum Mod.
The goal of porting is two-fold:

  • Ensuring the map functions correctly
  • Conforming to a high standard of competitive integrity
Maps should not be significantly modified.
It’s very important to respect the spirit and intent of the map’s design.

You are free to port any publicly available map with some exceptions:

...

Fixing Entities and Other Issues

Setup #

Some fixes and required modifications can be automated using in-game Entity Tools.
Changes made with Entity Tools need to be Exported To Lumper and then saved in the .bsp.

  1. Open Entity Tools by typing devui_show entitytools in console
  2. Go through each section of the Entity Tools and follow to guide to apply correct fixes
You can change the font size of Entity Tools by using devui_font_scale command in console.
When making these changes it’s perfectly fine to Export them only once, when you are done with everything, however there is no downside to gradually saving your progress.

Entity Tools #

Teleport Velocity Mode #

Teleports in Momentum Mod retain player speed by default.
This needs to be sometimes changed as explained in scenarios below.
Go through each teleport destination by clicking Teleport To Destination and apply relevant fixes.

Entity Tools match every trigger that teleports the player to chosen destination and add/change the velocitymode keyvalue.

...

Map Zoning

Introduction #

Zones allow players to measure and submit times to the leaderboards.
This guide focuses on zoning using Momentum Mod’s in-game tool.
Zoning using Hammer is briefly covered in this section

Glossary #

Term Definition
Track A timed part of the map with a start and an end, and a leaderboard for players to compete on.
Main Track The main track of a map. Every map has exactly one Main Track.
Bonus Track A Track distinct from the Main Track, often shorter than the Main Track.
Segment / Stage / Course A section within the Main Track which has its own leaderboard.
Zone A trigger that controls the run timer when players enter or exit it.
Region A volume component of a Zone. Each Zone is made of one or more Regions, which may be in different areas.
Checkpoint A type of zone used within a Segment that activates a timer split when touched; it does not save progress.
Global Region A special type of region that applies to all tracks; some manipulate more than just the timer.
Region Teleport Destination The location and rotation the player is teleported to when using a command to restart or change tracks.

Examples #

Zone Example 1

...

Map Review Checklist

This checklist is intended for experienced map porters that already understand general porting concepts.

For more in-depth information on map porting, please see the map porting and zoning guides.

First check:

  • The map has been in public testing for at least 7 days
  • The map hasn’t already been ported by someone else

Step 1: Review zones #

Region Geometry #

  • Zone points are placed precisely and are well aligned to map geometry
    • Zone points are snapped to map vertices
    • Zones meant to fill a platform go all the way to the edge and not inset slightly
    • Make sure to review all regions if there is more than one
  • Zone regions are not overlapping
  • Zones with multiple regions could not have been achieved with fewer regions
  • Start/Stage zones are large enough to prestrafe in
  • Start/Stage zones encapsulate the restart teleport destination and use it as the teleport destination entity
    • If there is a teleport destination entity present, it should be used (not a custom position)
  • Region heights are not less than 256 units for no reason
    • Regions under a low ceiling should probably end at the ceiling
    • End zone regions at the bottom of a pit the player falls into may be short, even 1 unit tall
  • Regions are not so short that the player could possibly fly over them and have to wait to fall into them (especially end zones)
  • Regions are not so thin that the player could pass through them without activating them.
    • A minimum of 64 units is generally sufficient, but may not be enough if the player is moving exceptionally fast.
  • Regions do not protrude into walls unnecessarily
    • The shape should conform to the geometry, not be lazily covered with a box
    • Multiple regions should be used to cover split paths, not one stretched region
  • The Safe Height is high enough to encapsulate any small protrusions on the floor, but also below platforms that can give the player an unfair height advantage. This includes platforms that cannot be reached just by walking or jumping.
    • Explosive weapon modes should generally use the full height while non-explosive modes should use the base height when possible

Checkpoint Locations #

  • Checkpoints are placed in a way that minor short-term routing differences do not affect timer splits
    • This means placing them in the middle of straightaways rather than after a turn where the player can hit the checkpoint sooner or later depending on how much they cut the corner (see zoning guidelines)
  • Checkpoints are placed at locations that feel most like the player has reached a new area and has made clear progress through the map.
    • For Bhop maps, this usually means placing checkpoints at locations where the map teleports you to when you fail a section.
    • Generally, the player should not get sent back before a checkpoint when they fail.
  • Checkpoints are fairly evenly spaced and not too close together.
    • A rough rule of thumb is checkpoints should be at least 10 seconds apart in a reasonably optimized run.
  • Checkpoints are unskippable and marked “required” except where absolutely necessary.
    • Even when a map has skips, it is usually reasonable to place checkpoints in a way that they are not bypassable.
  • Checkpoints are marked “ordered” except where necessary, even if it does not appear physically possible to activate them in an arbitrary order.
  • Checkpoints with multiple regions positioned in mirrored paths should be equivalent.
  • There should be no gaps between the sides of a checkpoint and the surrounding walls.

Other #

  • The position and yaw of start, stage, and bonus TP destinations are ok (preview position with zoning menu)
  • Max velocity should be the mapper intended value
    • This is sometimes found on a point_servercommand. Other times this is only listed where the map was downloaded from.
  • Cancel zones are used in hub/stage select areas if it is possible to return to hub area without teleporting with a command.
  • Start/Stage zones with multiple regions in distinct locations with their own teleport destinations should assign each destination to the appropriate region, rather than using the same one for all regions.
  • When the map uses a filter entity to gate progress to the area a zone is in, the zone should be assigned that filter entity even if the zone cannot be physically reached without the filter due to a filtered teleport trigger in the way. If the filter has Negated value of 1, then it should be negated in the zoning menu.
    • This is for general safety and also because it allows zones to be given a different appearance when they are untriggerable.
  • (Optional) Stages and bonuses may have names where appropriate to make them easier to identify. Names should only be used when they are intuitive and in the spirit of the map, like the fruit-themed stages of surf_fruits. Track names should not just be used as mapper credits in a collaborative map.
  • (Surf only) “Limit ground speed” option should be enabled for stages unless you are supposed to bhop in start zones during a full map run
  • (Surf only) Carefully review intended bhop platforms and add Allow Bhop regions if needed
    • Use mom_bhop_area_debug 1 and jump on the ground to check the automatic bhop platform detection.
    • Review WR videos for ramp spine bhops or other commonly allowed bhop skips.

Step 2: Review in-game entities with entity tools #

  • Teleport Velocity Mode Tool: Teleport destinations are marked as “Keep Negative Z” when the map design intends to stop the players horizontal velocity, including when there is a floating “cage”.
  • Boost Triggers Tool: Check boost triggers for exploits (see required entity conversions guide)
    • For boosts at the start of tracks that were turned into trigger_setspeed, make sure the boost gives the same speed as when walking into the original trigger. Use the “Restore Original Trigger” and “Reload from BSP” buttons (if available) to easily do a before-and-after comparison. Also make sure these boosts have Strict Mode enabled, and do not use “Ignore” mode for vertical speed.
  • Gravity Triggers Tool: Gravity triggers should persist gravity changes when the player exits the volume in CS:S maps, but not in CS:GO maps
  • Model Scale Fix Tool: Check for any incorrectly sized props
  • Bhop Trigger Fix Tool (Bhop only): If the map uses mpbhop triggers (triggers that force bhopping with targetname filters), check if they have been converted (bhop trigger fix entities should be 0)
  • Bhop Block Fix Tool (Bhop only): If the map uses func_button/func_door bhop platforms, check if they have been converted to func_bhop
  • CSM Fix Tool: CS:GO maps have an env_cascade_light entity if they use CSM shadows

Step 3: Other in-game things to review #

  • Maps don’t have invalid textures, cubemaps (unless from TF2), skyboxes or models
  • Default spawn position and direction faced (yaw) is ok (reload the map to check)
  • Reset triggers don’t face the player backwards when hit (UseLandmarkAngles is set to 1 where this would otherwise occur).

Step 4: Lumper review #

  • Check for invalid entities (“Entity Review” tab)
  • Remove weapon strip entities unless adding/removing weapons is a part of the gameplay
  • Check for Valve assets in the pakfile
  • Check that any custom music files are categorized as such using the appropriate subdirectory
  • Check that there are no absurdly large textures (e.g. 4-megabyte plain color textures that could be compressed significantly)
  • (Surf only) Make sure there is no active “jail” system

Step 5: Submission page review #

  • Required games match what is displayed in Lumper
  • The submission type is Port if the map first released in another game/server
  • Description should mostly match GameBanana submission
  • Date created should match the date on GameBanana
  • Credits should match GameBanana submission
  • Screenshots ideally should showcase iconic/memorable parts of the map. Taking similar screenshots to the ones on GameBanana is also recommended.
  • Extra suffixes like _njv, _fix, or _ksf that are not required to fully distinguish the map are removed from the map name.
  • jump_ prefix is renamed to rj_ or sj_

Ahop

What is Ahop? #

Ahop, short for “Accelerated Hop”, comes from the Orange Box versions of Half-Life 2, its episodes, and Portal 1. Ahop comes from Valve’s attempt to remove bunnyhopping in an older version of the game. By either hopping completely backwards or holding/pressing the back movement key while hopping, players can gain extreme amounts of velocity.

Ahop movement can be commonly found in Any% Speedruns for Half-Life 2, its episodes and Portal 1.

...

Bhop

What is Bhop? #

Bhop, short for “Bunny Hop”, is a very popular gamemode found in many games, such as CS:GO, TF2, and others.

The core mechanic, “bhopping”, is when the player jumps repeatedly, the moment they hit the ground, allowing them to maintain their current velocity. In order to maximize the likelihood of inputting the jump exactly when you hit the ground, players used to bind jump to the scroll wheel, and then roll their mouse wheel very fast whenever they were about to hit the ground. This is sometimes known as traditional style bhopping. This method has fallen out of favor though, as unless the player can frame-perfectly input every jump command the best the player can hope for is a 50% chance of not losing speed. It’s more common now to rely on autobhop, an addon or mod which inputs a jump on the exact frame the player hits the ground every time. This functionality is built into MomentumMod

...

Climb

What is Climb? #

Climb, also known as Kreedz (KZ) in CS 1.6 and CSGO, or Xtreme Climb (XC) in CSS, is a popular community game mode found in every Counter-Strike game.
Climb is a series of platforming challenges that can be best simplified as “trick jumps” which pull from the big 3 movement disciplines in source:
Strafe, Bunnyhop (Bhop), and Surf to challenge players in scaling its maps as fast as possible.

...

Conc

What is Conc? #

Conc, short for “Concussion Grenade Jumping”, is a classic game mode from the classic Team Fortress, involving priming a concussion grenade to explode at just the right time to propel the player throughout the map.

Momentum Mod’s implementation of Conc comes from a mix of Fortress Forever’s implementation combined with reverse engineering specific values from Team Fortress Classic.

History of Conc #

Conc comes from Team Fortress Classic, which was based on the Quake mod “Quake Fortress” by the same developers. Team Fortress Classic is the precursor to the beloved Team Fortress 2, but runs on Valve’s Goldsrc engine.

...

Defrag

What is Defrag? #

Defrag is considered the grandfather mode for all of Momentum Mod’s supported modes. Defrag is based on the movement found in Quake, specifically Quake 3 Arena, and is broken into two modes, “VQ3” and “CPM”.

History of Defrag #

TODO gotta whip out the VCR tapes

How Defrag Works #

TODO