Workshop.codes
Login
Create
Alomare

Project Momentum: Doomfist Parkour Framework

Explore maps and submit your runs in the Project Momentum Website!
https://doom.pk/
Join the Project Momentum Discord Server!
https://dsc.gg/projectmomentum

What is This?

Project Momentum is a framework for multilevel Doomfist parkour maps. It uses an online template that enables easy plug & export by taking your custom data and compiling a fully playable and feature-complete parkour map.

The import code is an empty demo of a custom map.

How to Create a Map

  1. Access the online template.
  2. In the ❇️ Customize Map item, insert your custom data:
    1. setup_map: the map name. Only skirmish maps are supported, unless you manually change game mode and map after compilation (things might break if you do that).
    2. setup_author: the name, BattleNet ID or link of the author.
    3. setup_version: the map's current symbolic version. Versioning rules are up to you.
    4. setup_importcode: your map's import code. If you just shared the map into a new code, write it here, compile and upload it again to the same code.
    5. setup_levels: the levels in your map. A level is represented by one instance of @include addLevel();. The template comes with a placeholder level that has simple descriptions of its parameters, but they will be elaborated further below.
  3. Click the COMPILE button in the top right corner.
  4. Paste the code into your Overwatch lobby by clicking the paste script button.

Feel free to take a look at the rest of the code or even toy with it. The template is immutable and will reset if you reload the page. Only, I, the author of the project, can permanently modify it.

As such, copy your modified template and save it elsewhere so you don't lose your custom map!

Level Parameters

If you don't want to include a certain feature in your level, simply leave it as Null,, like this:

It is important that you do not skip over it / delete the code line.

You don't need to define values for ALL checkpoints when using a feature.
You only need to define values up to the last checkpoint that uses it.

0 Level ID Required
The numerical ID of a level. Should start on zero.

1 Name and Color Required
An array containing the name and theme color of the level. Examples:

Array(
    Custom String("A Cool Level Name"), 
    Color(Sky Blue)
)

This second example adds Sigma's SHIFT ability icon to the name. Custom color is Red, Green, Blue and Alpha (Opacity).

Array(
    Custom String("{0} A Cooler Level Name", @include abilityIcon(Sigma, Ability 1)), 
    Custom Color(170, 255, 200, 255)
)

2 Checkpoints Required
An array containing all the checkpoints in sequence. The first one will be the starting point in level selection.

Array(
    Vector(15, 0, -15), 
    Vector(-15, 0, -15), 
    Vector(-15, 0, 15), 
    Vector(15, 0, 15), 
    Vector(15, 0, -15)
)

3 Checkpoint Alternate Starts
An array containing alternate start point vectors for checkpoints. They're hard-chained by default (the destination of the current checkpoint is the start of the next one), but you can customize this by adding an alternate vector to this array.

Array(
    Null,
    Vector(5, 0, 5),
    Null,
    Vector(-5, 0, -5),
)

Here, checkpoints 2 and 4 have alternate starts.

4 Checkpoint View Angles
An array containing directions to which the player's facing will be set to when reaching or resetting from a certain checkpoint.

Array(
    Null,
    Vector(0.95, 0.54, 0.12),
    Up
)

Here, the player's facing on checkpoint 2 will be set to that value, and on checkpoint 3 will be set to upwards.

5 Checkpoint Sizes
An array containing the radius (in meters) of each checkpoint in sequence. If Null or less than 2, it defaults to 2 meters.

Array(
    Null,
    Null,
    3,
    4.25,
    Null
)

6 Liquid Checkpoints
An array of booleans indicating whether each checkpoint is liquid. If True, missing it sends the player back to the last solid checkpoint.

Array(
    False,
    True,
    True,
    False
)

In the example above, missing checkpoint 3 will send the player back to checkpoint 1.

7 Checkpoint Time Limits
An array of time limits (in seconds) for each checkpoint. If the timer reaches zero, the player is reset to the start of the checkpoint.

Array(
    Null,
    10,
    5
)

8 Checkpoint Height Goals
An array of required absolute heights, a.k.a Y values, the player must reach before proceeding past each checkpoint.

Array(
    Null,
    Null,
    15
)

9 Checkpoint Minimum Speeds
An array of minimum speeds the player must maintain toward the next checkpoint upon leaving the current one (with a short grace period). If the speed limit is broken, the player is reset to the start of the checkpoint.

Array(
    Null,
    8,
    10
)

10 Disabled Abilities
A 2D array defining disabled abilities per checkpoint. In order: Slam, Block, Punch.

Array(
    Array(True, False, False),
    Array(False, True, True)
)

This will make it so the player can only use Slam in the first checkpoint, and only Block and Punch in the second checkpoint.

11 Touch Orb Locations
A 2D array where each checkpoint contains an array of vectors for touch orb positions.
All must be collected to proceed, in no particular order.

Array(
    Null,
    Null,
    Array(Vector(1.1, 4.5, 3), Vector(2, 7, 2)),
    Array(Vector(3, 5, 3))
)

Here, the first two checkpoints have no orbs, the third checkpoint has two orbs and the fourth has only one.

12 Touch Orb Sizes
A 2D array of radiuses for touch orbs per checkpoint. Will default to 0.5 if Null or less.

Array(
    Null,
    Null,
    Array(1, 1.5),
    Array(3)
)

13 Ability Orb Locations
A 2D array where each checkpoint contains an array of vectors for ability orb positions, working similarly to touch orbs.
These are optional to collect.

Array(
    Array(Vector(1.1, 4.5, 3), Vector(2, 7, 2)),
    Array(Vector(3, 5, 3))
)

14 Ability Orb Abilities
A 3D array that defines which abilities are granted by each orb in each checkpoint. In order: Slam, Block, Punch.

Array(
    Array(
        Array(True, True, True), 
        Array(True, False, False)),
    Array(
        Array(True, False, False))
)

There are 2 ability orbs in the first checkpoint, so 2 arrays are defined. In the second checkpoint, only 1 is defined.

15 Ability Orb Sizes
A 2D array of radiuses for touch orbs per checkpoint. Will default to 0.5 if Null or less.

Array(
    Array(1, 1.5),
    Array(3)
)

16 Lava Locations
A 2D array of lava zone positions per checkpoint. Touching lava resets the player.

Array(
    Array(Vector(-18, 2, 15), Vector(5, 0, 5)),
    Null, 
    Array(Vector(12, 5, -4), Vector(-5.2, 3, 5.5))
)

17 Lava Sizes
A 2D array of radiuses for lava zones per checkpoint.

Array(
    Array(3, 10),
    Null, 
    Array(15, 8.5)
)

18 Bot Target Locations
An array of positions where bots spawn per checkpoint. Only 1 bot is allowed per checkpoint. Player must damage the bot to proceed.

Array(
    Null,
    Vector(15, 0, 15),
    Vector(-10, 0, 3)
)

19 Bot Target Requirements
Bot Targets can represent one of two objectives:

  1. Hit the bot with an allowed ability to proceed.
  2. Damage the bot until you hit the damage requirement to proceed.

For the first one, write an array of allowed abilities. In order: Cannon, Slam, Punch, Melee.
For the second one, simply write a number.

Here:

  • The first checkpoint has no bot, so nothing is needed.
  • The second checkpoint demands the player to hit the bot with either Slam or Punch.
  • The third checkpoint demands the player to damage the bot for 150 health.
Array(
    Null,
    Array(False, True, True, False),
    150
)

20 Impulse Pads
A 2D array of positions for impulse pads that launch the player when touched.

Array(
    Array(Vector(-13, 2, 15)),
    Array(Vector(12, 5, -4), Vector(-5.2, 3, 5.5))
)

Here, the first checkpoint has one impulse pad, and the second has two.

21 Impulse Pad Directions
A 2D array of direction vectors for each impulse pad in sequence.

Array(
    Array(Up), 
    Array(Up, Vector(0.9, 0.8, 0.85)
)

22 Impulse Pad Speeds
A 2D array of impulse speed values applied by each impulse pad in sequence.

Array(
    Array(12), 
    Array(7, 20)
)

23 Portals
A 2D array containing pairs of vectors: entry and exit positions. Only one pair is allowed per checkpoint.

Array(
    Null,
    Null,
    Array(Vector(-9, 0, -20), Vector(2, 15, 3)),
    Array(Vector(5, 0, 5), Vector(15, 0, 15))
)
Workshop.codes