https://rustracers.xyz/wp-content/uploads/2016/03/logo.png
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.
DOWNLAOD THE FIRST PUBLIC BETA VERSION HERE
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
https://rustracers.xyz/wp-content/uploads/2016/04/gm_flatgrass0187-1024x576.jpg[/t]
Classic time based racing where the fastest player wins.
Circle of Death
[t]https://rustracers.xyz/wp-content/uploads/2016/04/gm_flatgrass0186-1024x576.jpg[/t]
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
[t]https://rustracers.xyz/wp-content/uploads/2016/04/gm_flatgrass0188-1024x576.jpg[/t]
Destroy every other car in the arena and take home the biggest reward.
Hot Potato
[t]http://images.akamai.steamusercontent.com/ugc/273970070582186914/19E09D0CDF7523A1BFFFC7B3C29D4C14EA9F87CC/[/t]
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
[t]http://puu.sh/pmH8O/82c444f6a8.jpg[/t]
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:
[t]http://puu.sh/pzeLL/d90ac4a650.jpg[/t]
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.
[t]http://puu.sh/pzeM8/35d4c71733.jpg[/t]
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.
[t]http://puu.sh/pzeNT/dd098403db.jpg[/t]
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.
[t]http://puu.sh/pzeM0/ae9cfbe78a.jpg[/t]
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.
[t]http://puu.sh/pBCt2/74697bae05.jpg[/t]
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
[t]http://puu.sh/pBCoX/9e61e72e35.jpg[/t]
https://rustracers.xyz/leaderboards/
https://rustracers.xyz/season-top/
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
[t]http://puu.sh/pBCqV/e6ef22d86f.jpg[/t][t]http://puu.sh/pBCuN/1efd5f9ee9.jpg[/t]
https://rustracers.xyz/user/76561197972161698/
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.
Features
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)
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.
"sent_mm_engine_v6_level1",
"sent_mm_engine_v6_level2",
"sent_mm_engine_v6_level3",
"sent_mm_engine_v6_level4",
"sent_mm_engine_v6_level5",
"sent_mm_engine_v6_level6",
"sent_mm_engine_v8_level1",
"sent_mm_engine_v8_level2",
"sent_mm_engine_v8_level3",
"sent_mm_engine_v8_level4",
"sent_mm_engine_v8_level5",
"sent_mm_engine_v8_level6"
},
Exhausts = { -- Exhaust upgrades 3D model replacements.
"models/MMcars/die_rolla/die_rolla_exhaust_1.mdl",
"models/MMcars/die_rolla/die_rolla_exhaust_2.mdl",
"models/MMcars/die_rolla/die_rolla_exhaust_3.mdl",
"models/MMcars/die_rolla/die_rolla_exhaust_4.mdl",
"models/MMcars/die_rolla/die_rolla_exhaust_5.mdl",
"models/MMcars/die_rolla/die_rolla_exhaust_6.mdl",
},
Wheels = { -- Wheel upgrades 3D model replacements.
"MMcars/common/wheel_1.mdl",
"MMcars/common/wheel_2.mdl",
"MMcars/common/wheel_3.mdl",
"MMcars/common/wheel_4.mdl",
"MMcars/common/wheel_5.mdl",
"MMcars/common/wheel_6.mdl",
"MMcars/common/wheel_7.mdl",
}
}
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
Website
Leaderboards
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