An open-source project dedicated to bringing fair, balanced, and cinematic multiplayer police chase gameplay to BeamMP

- Wanted system - speeding and zigzag violations, bust mechanic, escape system
- Rank progression - 5 ranks with task-based advancement for both roles
- Repair system - limited repairs earned through gameplay
- Parts shop - parts purchase system with free/banned vehicle series enforcement
- Minimap - real-time wanted tracking
- Multi-language - Arabic, Chinese (Simplified), Czech, English, French, German, Hebrew, Hungarian, Italian, Japanese, Polish, Portuguese (Brazil), Portuguese (Portugal), Russian, Spanish, Swedish, Turkish, Ukrainian
- Performance limiter - server-enforced vehicle rating cap with admin commands and optional community voting
- Economy - per-second income during chases, markers, money transfers
- Police / Civilian roles - detected automatically by vehicle skin
- Multi-map - West Coast USA, East Coast USA (expandable to any map)
Optional:
- Air Polluter β hidden special mission with fog effects
- Day/Night sync β server-controlled time cycle, requires a map with night lighting support
- Loading Screen β custom branded loading screen with slideshow, music, and police-themed progress bar
Each mod consists of a server-side component and a client-side package.
| Mod | Server folder | Client package |
|---|---|---|
| Economy / Wanted System / Parts Shop | UIMPIT/ |
UIMPIT.zip |
| Performance Limiter | UIMPI/ |
UIMPI.zip |
| Day/Night Sync (optional) | MPDN/ |
MPDN.zip |
| Loading Screen (optional) | β | MPLC.zip |
Click to expand
BeamMP-Server/
βββ BeamMP-Server.exe
βββ config_editor.pyw # Optional GUI config editor (Windows)
βββ Resources/
βββ Client/
β βββ UIMPIT.zip # Economy / Wanted System / Parts Shop
β β βββ lua/ge/extensions/
β β β βββ key.lua # Core client logic & UI data bridge
β β β βββ minimap.lua # Minimap logic & rendering
β β β βββ PartsShop.lua # Parts Shop client logic
β β βββ scripts/
β β β βββ EconomyUI/modScript.lua
β β β βββ PartsShop/modScript.lua
β β βββ settings/ui_apps/layouts/default/pit.uilayout.json
β β βββ ui/modules/apps/
β β βββ BeamMP-PlayerList/
β β β βββ app.html
β β β βββ app.js
β β β βββ app.css
β β β βββ app.json
β β β βββ app.png
β β β βββ redesign.css
β β βββ EconomyHUD/
β β β βββ app.html
β β β βββ app.js
β β β βββ app.css
β β β βββ app.json
β β β βββ app.png
β β βββ PoliceWantedList/
β β β βββ app.html
β β β βββ app.js
β β β βββ app.css
β β β βββ app.json
β β β βββ app.png
β β βββ PartsShop/
β β βββ app.html
β β βββ app.js
β β βββ app.css
β β βββ app.json
β β βββ app.png
β β
β βββ UIMPI.zip # Performance Limiter
β β βββ lua/ge/extensions/performanceLimiter.lua
β β βββ scripts/perf-ui/modScript.lua
β β βββ ui/modules/apps/perf/
β β βββ app.html
β β βββ app.js
β β βββ app.css
β β βββ app.json
β β βββ app.png
β β
β βββ MPDN.zip # Day/Night Sync (optional)
β β βββ lua/ge/extensions/mpdn.lua
β β βββ scripts/envsync/modScript.lua
β β
β βββ MPLC.zip # Loading Screen (optional)
β βββ lua/ge/extensions/srs/
β β βββ loading.lua
β βββ scripts/
β β βββ modScript.lua
β βββ ui/scenic_route_loading/
β βββ loading_config.json
β βββ srs_loading.css
β βββ srs_loading.js
β βββ images/
β β βββ 1.jpg β¦ 5.jpg # Slideshow images
β β βββ PIT1.gif β¦ PIT4.gif # Police animation overlay
β βββ music/
β βββ police.mp3
β
βββ Server/
βββ UIMPIT/ # Economy, Wanted System, Parts Shop
β βββ main.lua
β βββ schema.sql
β βββ modules/
β β βββ AirPolluter.lua
β β βββ MinimapSystem.lua
β β βββ PartsShop.lua
β β βββ database.lua
β βββ config/
β β βββ config.json
β β βββ db.json # β οΈ Never commit
β β βββ SpawnLocations.lua
β β βββ PoliceSkins.lua
β β βββ RanksConfig.lua
β β βββ MessageColors.lua
β β βββ parts_config.lua
β β βββ free_vehicles.lua
β β βββ banned_vehicle_series.lua
β βββ lang/
β βββ {ar,de,en,es,fr,he,it,ru}.json # Mod translations
β βββ editor_{ar,de,en,es,fr,he,it,ru}.json # Config editor translations
β
βββ UIMPI/
β βββ main.lua
β βββ config.json
β
βββ MPDN/ # Day/Night Sync (optional)
βββ main.lua
- BeamMP Server
- MySQL / MariaDB +
luasql.mysqlLua library (optional β falls back to local JSON storage)
- Place the
UIMPITandUIMPIfolders inResources/Server/ - Place
UIMPIT.zipandUIMPI.zipinResources/Client/ - Restart your BeamMP server
Optional steps:
- Run
schema.sqland fill inUIMPIT/config/db.jsonto enable MySQL β without this the server runs on local JSON storage automatically - Edit
UIMPIT/config/config.jsonto set youradminsandmoderators - Edit
UIMPI/config.jsonto set youradminsand desired rating limit - Place the
MPDNfolder inResources/Server/andMPDN.zipinResources/Client/to enable day/night sync β only if your map supports night lighting - Place
MPLC.zipinResources/Client/to enable the custom loading screen β see Loading Screen for configuration
| File | Purpose |
|---|---|
config/config.json |
Gameplay settings, timers, admins |
config/db.json |
MySQL credentials (never commit this file) |
config/SpawnLocations.lua |
Spawn points and marker locations per map |
config/PoliceSkins.lua |
Vehicle skins that grant the police role |
config/RanksConfig.lua |
Rank names, task targets, and rewards |
config/MessageColors.lua |
Controls chat message color prefixes. Add a key to apply a color, remove it to send the message uncolored |
config/parts_config.lua |
All parts with their prices (0 = free, >0 = purchasable, -1 = banned) |
config/free_vehicles.lua |
Vehicle series that bypass the purchase system |
config/banned_vehicle_series.lua |
Vehicle series that are completely prohibited |
The welcome screen (Step 4) supports optional buttons that open your Discord invite and server rulebook directly from inside the game.
β οΈ This requires editing client-side UI files. Only do this if you are comfortable with JavaScript and JSON.
1. In Resources/Client/UIMPIT.zip β ui/modules/apps/EconomyHUD/app.js, set your links near the top of the file:
var LINKS_ENABLED = true; // enable the buttons
var DISCORD_URL = 'https://discord.gg/XXXXXXX'; // your Discord invite
var RULEBOOK_URL = 'https://yoursite.com/rules'; // your rulebook URL
var SHOW_QR_CODES = false; // set to true if you add QR images (see below)2. Add the 5 new translation keys to each language file in Resources/Server/UIMPIT/lang/.
A helper script is provided for this β run it once from the server root:
python add_link_translations.py
3. (Optional β QR codes) If you want QR code images to appear alongside the buttons, place two PNG files in the EconomyHUD/ folder:
qr_discord.pngqr_rulebook.png
Then set SHOW_QR_CODES = true in app.js.
A custom loading screen that replaces BeamNG's default with a branded slideshow, background music, and a police-themed animated progress bar.

Installation: place MPLC.zip in Resources/Client/ and restart the server. No server-side files are required.
Configuration is done via ui/scenic_route_loading/loading_config.json inside the ZIP:
| Field | Default | Description |
|---|---|---|
title |
"Welcome to the server" |
Text shown in the top-right corner |
holdAfterLoadSec |
0 |
Seconds to keep the screen visible after loading completes |
slideshow.enabled |
true |
Enable/disable the image slideshow |
slideshow.intervalSec |
12 |
Seconds between image transitions |
slideshow.fadeSec |
3 |
Cross-fade duration in seconds |
slideshow.shuffle |
true |
Randomize image order |
slideshow.useStockImages |
false |
Use BeamNG's built-in loading images |
slideshow.stockCount |
18 |
How many stock images to include (if enabled) |
slideshow.images |
[...] |
List of custom image paths (JPG/PNG) |
music.enabled |
true |
Enable/disable background music |
music.volume |
0.45 |
Playback volume (0.0 β 1.0) |
music.fadeOutMs |
1500 |
Fade-out duration in milliseconds when loading ends |
music.tracks |
[...] |
List of audio file paths (MP3) |
music.shuffle |
true |
Randomize track order |
Adding your own images: place JPG/PNG files in ui/scenic_route_loading/images/ inside the ZIP and add their paths to slideshow.images.
Adding your own music: place MP3 files in ui/scenic_route_loading/music/ inside the ZIP and add their paths to music.tracks.
βΉοΈ The progress bar reflects real loading progress across all BeamNG loading stages and will not reach 100% until loading is fully complete.
A graphical desktop editor that manages both UIMPIT/config/config.json and UIMPI/config.json β intended for server owners who prefer not to edit JSON manually.
Requirements: Python 3.10+ and PySide6
pip install PySide6
Run: double-click config_editor.pyw from the server root, or:
python config_editor.pyw
On Linux, double-click may not work depending on your file manager. Run from terminal instead:
python config_editor.pyw
Reads and writes config files directly, with hover tooltips for every field.
| File | Purpose |
|---|---|
config.json |
Rating cap, display offset, admins, vote settings |
| File | Purpose |
|---|---|
main.lua |
Cycle speed, sync interval, initial time preset |
| Backend | When active | Use case |
|---|---|---|
| MySQL | config/db.json present and reachable |
Multiple servers sharing one economy |
| JSON | config/db.json absent or unreachable |
Single-server |
The backend is selected automatically at startup with no code changes required.
In Resources/Server/UIMPIT/config/SpawnLocations.lua, add an entry with the exact BeamNG map folder name:
["your_map_name"] = {
vehicles = { ... },
markers = { ... },
optional_spawns = { ... },
air_polluter_marker = { x = 0, y = 0, z = 0 },
}Have questions about the mods or want to play on the server? Join the Discord
- beamsofnorway β speed detection code reference
- OfficialLambdax β day/night sync implementation (learned from published code)
- StanleyDudek β extensive help and published code examples that shaped much of this project
- Codex & MYNAMEISJEFF482 β original Scenic Route loading screen base (
srs_loading.js/srs_loading.css)
| Mod | License |
|---|---|
UIMPIT β Economy / Wanted System / Parts Shop |
AGPL-3.0 |
UIMPI β Performance Limiter |
The Unlicense (public domain) |
MPDN β Day/Night Sync |
MIT |
MPLC β Loading Screen |
MIT |


