(WIP) Rust Racers - Battlecars/MadMax Inspired Competetive Destructive Racing Addon and Gamemode


Greetings! For the past 3 months we have been developing a new racing gamemode & service and a car framework for Garry’s Mod which is unlike anything you have seen before.

The Gamemode(s)
Rust Racers is the name of both the car and the gamemode. The gamemode currently consists of four different subgames, with a 5th one in development:

Time Attack

Classic time based racing where the fastest player wins.

Circle of Death

Spawn on a series of structurally unsound platforms that gets destroyed as the game progress. Extra rewards for pushing people off the grid.

Destruction Derby

Destroy every other car in the arena and take home the biggest reward.

Hot Potato

A single player gets marked for death unless he can crash into a different player within 30 seconds. For each transfer of the Hot Potato
the time gets shorter. Last man standing wins.

WIP - Fortress Attack
Every player has to co-operate to take down the Rust Fortress. This is a Player vs Environment fight and the goal is to destroy the boss before he destroys you. The Rust Fortress will deploy trike drones with chainsaws to disable your cars part by part, flying helicopter drones that will plant their sharp blade into your car at any given chance. Combine this with The Fortress special super powers like Power Charge and Slam Dunk and you are in for some serious trouble. The various drones the Rust Fortress will produce and deploy against you:
Wheel Jacker, Will try and salvage parts from other cars for the big boss to turn into more drones. These are continously deployed by the big crane.

Iron Wasp, Sole purpose of existence is to be a persistant pain in the ass for the playeres. Will plant its oversized stinger into cars to help slow them down for the Wheel Jackers.

Pre-Processors, Will try and make the Wheel Jackers job easier by doing some initial disassembly upon contact with a car. Explodes into a volley of sticky chainsaws.

Fluffy Bunnies & Happy Times, Pre-Processors less precise older brother. You will mostly encounter this guy in Destruction Derby.

The Website & Match Making Service
Early on we realized that veteran players are going to dominate the living crap out of new players. This is not fun for anyone in the long run.
To combat this problem we designed our own Match Making & Lobby System capable of orcheastrating new Source Dedicated Servers on demand.
This means that any group of players can create their own private dedicated server to compete on and the system will provide new servers as needed.

The Match Making system requires that you sign in through our website using Steam. This means that we do not handle any of your sensitive information. Steam will provide us with a unique token that we use to identify your profile in the steam database.
This is necessary to provide persistent information about your play sessions and progression throughout your Race Carreer.

Leaderboards provide an insight to what went down the last 10 races.
Season Top 10 shows the top 10 performing players across all servers.

Race Profile
Above is my Race Profile from the gamemode. It shows a compiled view of my total races, wins, losses and a preview of what cars you have acquired.

The Car Framework

Starting out last year and continuing the effort 3 months ago we have designed a whole new car framework for Garry’s Mod unrelated to all other previously released car mods. Similar in how you create SWEPs and SENTs you can now also make cars relatively easy. The car framework & addon is designed to give you a decent range of drivable cars but also serve as a base to create new cool custom vehicles.

Optimized for Multiplayer, No major difference in the cars handling between tickrate 16 and 120
Fully Destructible Cars
Engine Upgrades ( 13 different engines available from start, more to come )
Turbo Upgrades
Exhaust Upgrades
Armor Upgrades
Suspension Upgrades
Wheel Upgrades
Skins Upgrades
Horns Upgrades
Headlights & Tail lights
Multiple Seats
Manual Gearbox
Automatic Gearbox
Engine Malfunctions ( overheating, breakdown etc )
Steering / Propulsion scaling with damage, integrity and weight of ugprades
Engine & Power toggle (you can leave the car running if you want for quick escapes)

Currently Released or soon to be Released cars

The Upgrade System

By default, the cars will spawn without any upgrades or customization and will leave that part up to you. You can access the Sandbox Upgrade Menu from
your +Walk bind (default Left Alt) when inside a car.

Not every car has every upgrade but as we progress with the content we will expand on upgradable parts to make each car even more customizable.

Developing with The Car Framework

If you are not interested in creating your own cars with this framework you can skip this segment.

If we open up the file sent_neurotec_madmax_die_rolla.lua we are greeted by this:

AddCSLuaFile() -- Send this file to the clients
ENT.PrintName = "Die Rolla" -- The name of the car 
ENT.Author = "Hoffa & Killstr3aks" -- Author(s)
ENT.Category = "Rust Racers" -- Category to place this in 
ENT.Base = "sent_neurotec_car_framework" -- Our own custom framework for cars, you shouldn't change this unless you have your own framework adhering ot our format.
ENT.Spawnable = true -- Default Garry's Mod variable, spawnable in sandbox?
ENT.AdminOnly = false -- Admin Only?
ENT.HealthVal = 650 -- Vehicle Health
ENT.Model = "models/MMcars/die_rolla/die_rolla_chassis.mdl" -- The chassis 3D model.
ENT.BodyGroupArmorDamageScale = { 1.0, 0.8, 0.5, 0.4, 0.25, 0.05 } -- Damage multipliers based on armor level. Lower value = Less Damage 
ENT.IsDriftCar = false  -- Changes steering configuration to one that is more responsive.
ENT.DisabledUpgrades = {} -- valid types are: suspension, engines, armor, wheels, skins, horns, exhausts
-- This is where the magic happens:
ENT.DriveTrain = {
	SteeringRatio = 2.87, -- Default is 1.0, if this is too fast or too sluggish you either remove or add to this value.
	SteeringWheel = "models/MMcars/die_rolla/die_rolla_swheel.mdl", -- The steering Wheel 3D model. 
	SteeringWheelPos = Vector(2, -19.3, 55 ), -- World Position Relative to the Chassis 
	SteeringWheelAng = Angle( 20, 0, 0 ), -- Angle relative to chassis 
	Engine = { -- Default, Non-upgraded engine stats:
		Mdl = "models/MMcars/common/v6_1.mdl", -- 3D Model to represent engine 
		Pos = Vector(), -- Relative to Chassis 
		Ang = Angle(), -- Relative to Chassis 
		Health = 100, -- Health Value before exploding / destroyed
		HorsePower = 120, -- Amount of horse power 
		MaxRPM = 7500, -- Max RPM of the Engine. 
		TurboBoostFactor = 1.10, // 110% of engine output
		Gears = 5, -- Gearcount
		-- I used real life data for my initial tests with the cars, the higher ratio the less top speed you get.
		GearRatios = { 
					3.00, // 1st gear 
					2.70, // 2nd gear 
					2.10, // 3rd gear 
					1.70, // 4th gear 
					1.20, // 5th gear
					-3.15 // reverse, Negative ratio to go backwards.
		StartupDuration = 2, -- Time it takes to start the engine up.
		Sounds = {  -- Sound Data, customize your engine with cool sounds.
			StartupSound = "v6/start.wav",
			ShutdownSound = "v6/stop.wav",
			IdleSound = Sound("v6/idle_loop.wav"), 
			GearSounds = {		
				"v6/first.wav", // 1st 
				"v6/second.wav", // 2nd 
				"v6/third.wav", // 3rd 
				"v6/fourth_cruise_loop.wav", // 4th 
				"v6/turbo_on_loop.wav", // 5th 
				"v6/rev_short_loop.wav" // Reverse
	Axles = { -- Visual Drive Axles 
		{ Pos = Vector(0,0,-0), Ang = Angle(), Mdl = "models/mmcars/common/front_axle.mdl",	 Health = 100 }; -- Front Axle, Position & Angle are relative to chassis.
		{ Pos = Vector(0,0,-0), Ang = Angle(), Mdl = "models/mmcars/common/rear_axle.mdl",	 Health = 100 }; -- Rear Axle, Position & Angle are relative to chassis.
	Wheels = { -- Wheel positions, relative to chassis.
		{ Pos = Vector( 63, 40, 24-5 ), Mdl = "models/MMcars/common/wheel_1.mdl" };
		{ Pos = Vector( 63, -40, 24-5 ), Mdl = "models/MMcars/common/wheel_1.mdl" };
		{ Pos = Vector( -72, 40, 24-5  ), Mdl = "models/MMcars/common/wheel_1.mdl" };
		{ Pos = Vector( -72, -40, 24-5 ), Mdl = "models/MMcars/common/wheel_1.mdl" };
	Seats = { -- Extra Seats, your car needs atleast one seat to place the driver in. 
		{ Pos = Vector( -18, -21, 31 ), Ang = Angle(0,-90,15), Mdl = "models/nova/airboat_seat.mdl", NoDraw = true };
		{ Pos = Vector( -15, 19, 31 ), Ang = Angle(0,-90,15), Mdl = "models/nova/airboat_seat.mdl", NoDraw = false };
		{ Pos = Vector( -68, 13, 28 ), Ang = Angle(0,-90,5), Mdl = "models/nova/airboat_seat.mdl", NoDraw = true };
		{ Pos = Vector( -68, -13, 28 ), Ang = Angle(0,-90,5), Mdl = "models/nova/airboat_seat.mdl", NoDraw = true };
	Parts = { -- Additional Junk that we attach to the car. These tables will vary a bit between cars and there's quite a few options you can specify here.
		{ Pos = Vector(), Ang = Angle(), Mdl = "models/MMcars/common/bumper_1.mdl",				 Health = 100, Weld = 75000 }; -- First Extra Part is always the bumper.
		{ Pos = Vector(), Ang = Angle(), Mdl = "models/MMcars/die_rolla/die_rolla_hood.mdl",	 Health = 100, Weld = 15000 };
		{ Pos = Vector(), Ang = Angle(), Mdl = "models/MMcars/die_rolla/die_rolla_ldoor.mdl",	 Health = 100, Weld = 15000 };
		{ Pos = Vector(), Ang = Angle(), Mdl = "models/MMcars/die_rolla/die_rolla_rdoor.mdl",	 Health = 100, Weld = 15000 };
		{ Pos = Vector(), Ang = Angle(), Mdl = "models/MMcars/die_rolla/die_rolla_exhaust_1.mdl",Health = 100, Weld = 55000, Solid = COLLISION_GROUP_DEBRIS, IsExhaust = true };

-- This is a map for the upgrade system. If you don't have this table the system will attempt to use the default upgrade ents and visuals.
-- If you have custom models for say exhausts, bumpers and so on this is where you specify them so they are available as upgrades. 
ENT.Upgrades = {
	Engines = { -- Engine Upgrades, entity class names.
	Exhausts = { -- Exhaust upgrades 3D model replacements.
	Wheels = { -- Wheel upgrades 3D model replacements. 

And that is (almost) all there is to it. This is a template that you customize to your needs and you can make a lot of crazy combinations. The different cars will show you what default functionality exists and how to use it creatively.

Developing with Rust Racers for your own Gamemode
Rust Racers car framework is very hook driven. Every action you do with the upgrades will trigger a hook which exposes information about the car, driver and the upgrade in question.

The upgrade system is designed around an Economy so any gamemode that is driven by players making and spending money should be able to utilize this car framework.

Upgrade Hooks

MadMax_CanAffordCar( Player player, int cost ) -- Asks if a player can afford to buy a car for cost. Return false to deny or true to accept.
MadMax_PurchaseUpgrade( Player player, number UpgradeNumber, number cost, number previousUpgradeLevel ) -- Return false to block
MadMax_RestoreVehicleData( Player player, Table Upgrades ) -- Called after a new upgrade has been added to a car. Returns updated UpgradeTable.
MadMaxPlayerBoughtUpgrade( Player player, UpgradeType, UpgradeNumber, Boolean dontSave ) -- called when an upgrade has been succesfully applied.

Car Hooks

MadMaxOnSeatsCreated( Entity car, Table AllSeats )
MadMaxOnEngineCreated( Entity car, Entity engine )
MadMaxOnWheelsCreated( Entity car, Table Wheels, Table PhysWheels )
MadMaxOnPartsCreated( Entity car, Table DestructibleParts )
MadMaxOnSteeringWheelCreated( Entity car, Entity SteeringWheel )
MadMax_CarImpactObject( Entity driver, Entity HitEntity ) -- Called when a car touches another object
MadMax_OnCarDestroyed( Entity car, Player driver, DmgInfo dmg ) -- Called when a car is destroyed. 
MadMax_CarSwipedCar( Entity driver, Entity HitEntity ) -- Called when a car deals damage to another car by collision.
MadMax_PlayerSmashedPlayer( Entity victim, Entity attacker, Entity AttackerVehicle ) -- Called when a player driving a car kills another car.

What’s your goal with this?
We want to create a community in Garry’s Mod centered around driving cars in fun and unique ways. We realized we had the capacity, skill and potential to create something fun and unique and we hope to achieve this goal by listening to your requests, suggestions and feedback and use that to shape a racing community unlike any previous ones.

Additional Media



Console Commands & Settings

neurotec_madmax_gearup      - Gear Up ( rebindable )
neurotec_madmax_geardown  - Gear Down (rebindable )
neurotec_rustracers_upgrade  <type> <level> - If you want to make your own menu integration. Example: neurotec_rustracers_upgrade engines 12 would give you last level engine upgrade. Calls the MadMax_PurchaseUpgrade.
neurotec_rustracers_buyvehicle - Entname, calls MadMax_CanAffordCar hook.
neurotec_rustracers_repaircar   - Repair your current vehicle.
rustracers_camera_mode        - 0 to 9. Mapped to Numpad by default.
rustracers_automatic_gearbox ( 1 or 0 ) - Default 0, manual is the shit
rustracers_lamp_toggle           - Toggle Headlights (rebindable)

Default Keybinds

Start Engine - Jump
Turn Off Enginge - Reload
Brakes - Jump
Turbo Boost - Sprint(Shift)
Gear-Up: 1 
Gear-Down: 2
WASD - Controls
Jump / Flip Car - Duck/Ctrl
Toggle Headlights - F (Impulse 201

Useful Links
Official Workshop Collection - This is where you will find the cars once they are released
Season Top 10 Players
Match Making System
Frequently Asked Questions - Read this before you post
Rust Racers Official Steam Group - Help/Support/Suggestions goes here
My youtube channel, subscribe to stay updated

Credits & Special Thanks
Aftokinito - IT, Backend and Infrastructure development and management
Smithy265 - UI Design and Implementation
Killstr3aks - Mad Max Car Ports and Initial Ideas for Addon.
The Vman - Michael Bay/Special Effects
Heddvilde - Fortress Bumper & Knife Model
Hoffa - Gamemode, Website & Car physics
MadMan - Testing efforts & bug reporting
VinylScratch - Testing efforts & bug reporting
Radek - Testing efforts & bug reporting

this is the kind of creativity gmod needs

looks genuinely fun!

holy shit. this sounds like the best thing ever

This look’s very fun. Definitely a very genuine gamemode indeed.

I could play this all day.

Some very recent additions that are not covered on the OP yet.


never thought that it would get that awesome ^^

omg best addon evar, i want in now!

Here’s another ‘car’ that didn’t make the OP:


I am very impressed with the integration of match making, it is the first time I have seen it done this way.

Congratulations, despite having worked on Rust Racers for a while it still blows my mind how awesome it is.

It’s getting even better after the initial release. Right now, we’re focusing on polishing the cars to get them ready for release and, after that, I will shift focus to the backend again.

I can’t give many details yet as it is half-working as of now but, basically, the matchmaking system is composed of individual nodes (virtual machines, as of now) that communicate with a master server via our own proprietary software. This master server is responsible of distributing load and returning the correct data to the user. Those nodes can, and will, easily be deployed on Azure or AWS from our orchestration software with a few clicks, and it can even adjust the amount of nodes itself based on usage (this last part is not working yet but I’m working on it).

The most important change, though, is that the servers are only running when they are being used.
This means that no resources are wasted at all, since you need at least 2 players on the server or it will stop itself.

It is also worth noting that the video on the OP about matchmaking is slightly outdated, we have improved it a lot since that video was recorded.

Your initial work kicked off this entire production so you’ve been a vital part in realising this project from the start. a very big thank you for your hard work and dedicated effort in this as we wouldn’t be anywhere near where we are today had it not been for your commitment towards this.

That does sound very complicated, but interesting at the same time. If I was going to approach something like this it would be in a much more simple way.

if its out we gonna have much fun and a awesome bug reporting for those we dindnt found :slight_smile:

Emm. Really fun to play. 10/10. Hoping to see more.

The gamemode UI main menu was incredibly fun to make with you guys, such a lovely team!

Best of luck with the gamemode, I will be sure to stay a part of the team

Go ahead, break everything, kill our servers and tell us how you did it so we can fix it

have fun

pst join our steam group http://steamcommunity.com/groups/rustracers

So this is what you neurotec folks have been working on.
If you need cars from mad max I can try getting some for you.


Have you considered using the vehicles from DIPRIP, Ravaged or the Junker from Gears?

We are trying to move away from ported content and use as much OC as possible.

Alrighty. Still, if there’s any port you still want, I can try getting it for you.
Awesome looking gamemode so far.