Skip to content

For Overwatch Workshop and OverPy

Workshop code, checked.

Stop guessing where the server-load risks are. Wright statically analyzes Workshop and OverPy code and points every problem to a line.

curl -fsSL https://install.wrightkit.dev/wright/install.sh | bash
Terminal
$ wright lint rules.txtWARN lint  2 finding(s) across 6 rule(s)warning[min-wait-loop]: loop body waits at the workshop minimum rate; the loop runs at maximum frequency  --> rules.txt:18:3info[expensive-loop-check]: geometry predicate evaluated inside a loop body may be expensive per iteration  --> rules.txt:20:4

Copy. Save. Check.

  1. 1

    Copy from the game

    Copy your rules or full game settings, the same way you would to share them.

  2. 2

    Paste into a file

    Save it as a text file, such as rules.txt. English and Chinese client code both work.

  3. 3

    Run Wright

    Each finding points to a line in the file. Fix it, then paste it back into the game.

    wright lint rules.txt

What it catches.

  • Typos

    A misspelled action or value, caught before you paste the code back.

    Heall(Event Player, Null, 10);

    error[unknown-action]: unknown action spelling 'Heall'

  • While without Wait

    A loop that never pauses can overload the server.

    While(Is Alive(Event Player));
    	Heal(Event Player, Null, 10);
    End;

    warning[while-without-wait]: loop body contains no wait call

  • Waiting 0.016 seconds

    The loop runs as fast as the game allows.

    While(Is Alive(Event Player));
    	Wait(0.016, Ignore Condition);
    	Heal(Event Player, Null, 10);
    End;

    warning[min-wait-loop]: loop body waits at the workshop minimum rate

  • Line of sight in a loop

    A geometry check repeated on every pass can get expensive.

    While(Is Alive(Event Player));
    	Wait(0.25, Ignore Condition);
    	If(Is In Line of Sight(Event Player, Vector(0, 0, 0), Barriers Do Not Block LOS));
    		Heal(Event Player, Null, 10);
    	End;
    End;

    info[expensive-loop-check]: geometry predicate evaluated inside a loop body

More tools.

  • Analyze

    Your most complex rules and the variables most rules share.

    wright analyze
  • Inspect

    Every rule, variable, and reference in a project.

    wright inspect
  • Editor

    Errors as you type, plus go to definition, completion, and rename, in editors that support language servers. No VS Code extension yet.

    wright-lsp
  • CI

    Run Wright in GitHub Actions and findings show up on the pull request.

    wright lint

Workshop, OverPy, and OSTW.

  • Workshop

    Supported

    Full native syntax. Code from the English or Chinese client works as is.

    workshop-rs
  • OverPy

    Partial

    Keep your .opy files. Wright checks them and compiles them to Workshop, with output held to the original OverPy compiler.

    opy-rs
  • OSTW

    In development

    deltin-rs is in progress. Wright support follows.

    deltin-rs

Built for coding agents, too.

  • JSON output

    Add --format json to any command. One versioned schema.

  • Stable codes

    Diagnostic codes, rule IDs, and exit codes an agent can rely on.

  • Agent Skill

    Teach your agent Wright with the skill in wrightkit/skills.

Coming soon
  • Request to change
  • Checked edits
  • Project queries
  • Cost estimates

Get Wright.

wright and wright-lsp, in one install.

Homebrew

Apple silicon & Intel
brew install wrightkit/tap/wright

Installs the released wright and wright-lsp binaries.

Installer script

curl -fsSL https://install.wrightkit.dev/wright/install.sh | bash

Release archives and checksums for every platform are on the GitHub Releases page.