Vehicle Configuration – DayZ
Lou Montana (talk | contribs) m (Text replacement - "\[https\:\/\/community\.bistudio\.com\/wiki\/(.*) (.*)\]" to "$2") |
Lou Montana (talk | contribs) m (Some wiki formatting) |
||
Line 32: | Line 32: | ||
You can debug all simulation properties directly in game when using the Diag binary of the game. | You can debug all simulation properties directly in game when using the Diag binary of the game. | ||
The debug is accessible through the [[DayZ:Diag_Menu#Simulation | The debug is accessible through the [[DayZ:Diag_Menu#Simulation|diag menu]] (holding {{Controls|Win|Alt}} keys) where you can navigate using the arrow keys. | ||
To access car simulation window and controls, in the diag menu go to Game -> Vehicles -> Simulation. | To access car simulation window and controls, in the diag menu go to Game -> Vehicles -> Simulation. |
Revision as of 15:19, 21 February 2023
This page describes all basics of the DayZ vehicle simulation and its configuration.
Legend
The following table describes some shortcuts, symbols and units used inside this page.
symbol | meaning |
---|---|
kg | kilogram (mass unit) |
km | kilometer (unit of length) |
km/h | kilometers per hour (unit of speed) |
kW | kilowatt (unit of power) |
l | liter (unit of volume) |
m | meter (unit of length) |
N | Newton (unit of force) |
Nm | Newton-meter (unit of torque) |
RPM | revolutions per minute |
Debugging
You can debug all simulation properties directly in game when using the Diag binary of the game.
The debug is accessible through the diag menu (holding ⊞ Win + Alt keys) where you can navigate using the arrow keys.
To access car simulation window and controls, in the diag menu go to Game -> Vehicles -> Simulation.
Wheels
TBD.
Model
This section explains all the basics inside the model that influence the car simulation.
Geometry LOD
Make sure your car has a Geometry LOD with convex components. Every component's vertex should have weight assigned. From these weights the total mass of vehicle and its center of mass is computed.
Wheel hubs should have their own components as well, to prevent the vehicle from sinking into the ground without wheels.
FireGeometry LOD
Inside the fire geometry LOD there must be a proxy object placed with the correct name of the wheel slot so the simulation can attach a wheel and suspension to that position.
Config
This section explains all parts related to the simulation of the CarScript config class.
Crew
Crew module specifies all available positions inside a car for players. Every position has its own class where the class name is the name of the crew member position (like Driver, CoDriver etc.)
property | type | description |
---|---|---|
actionSel | string | Name of the named selection(s) in view or fire geometry LOD of the model. This selection is used as entry point for user action. |
proxyPos | string | Name of the named proxy selection in view geometry LOD of the model. This proxy is used as position where to put player inside car. This proxy has to have defined bone inside skeleton config of the car. |
getInPos | string | Name of the selection point from which player gets in/out the car. |
getInDir | string | Name of the selection of second point serving as direction from the first one. |
isDriver | boolean | Indicates if this crew position serves for driver. There can be max. one driver position at the time. |
Example
class Crew
{
class Driver
{
actionSel = "seat_driver";
proxyPos = "crewDriver";
getInPos = "pos_driver";
getInDir = "pos_driver_dir";
isDriver = true;
};
class CoDriver
{
actionSel = "seat_coDriver";
proxyPos = "crewCoDriver";
getInPos = "pos_coDriver";
getInDir = "pos_coDriver_dir";
};
};
SimulationModule
SimulationModule class contains car's controls properties, engine and drivetrain configuration.
- drive
- Determines drivetrain configuration of the car.
Steering
The steering class determines how the steering wheel behaves when the steering keys are pressed. To make steering on the keyboard less painful, we have introduced so-called steering curves to help players maintain better control of the vehicle.
Every point of the curve determines how fast the steering wheel rotates based on vehicle speed.
Increase speed curve controls the steering when performing classic steering maneuver.
Decrease speed curve controls the steering when performing counter steering maneuver (for example when car wheels are turned left and player starts steering right).
Centering speed curve controls how fast the steering get back to neutral position when no steering input is given.
Example
class Steering
{
maxSteeringAngle = 35; // maximum angle by which the wheel on the steered axle can turn
increaseSpeed[] = {
0, 40, // at 0 km/h, steering speed is 40 degrees per second
60, 20, // at 60 km/h, steering speed is 20 degrees per second
100, 10 // at 100 km/h, steering speed is 10 degrees per second
};
decreaseSpeed[] = {
0, 80, // at 0 km/h, counter steering speed is 80 degrees per second
60, 40, // at 60 km/h, counter steering speed is 40 degrees per second
90, 20 // at 90 km/h, counter steering speed is 20 degrees per second
};
centeringSpeed[] = {
0, 0, // at 0 km/h, centering speed is 0 degrees per second
15, 18, // at 15 km/h, centering speed is 18 degrees per second
60, 30, // at 60 km/h, centering speed is 30 degrees per second
100, 45 // at 100 km/h, centering speed is 45 degrees per second
};
};
Throttle
The throttle class determines how the throttle is reacting to the player's input. When using a keyboard it might be difficult to control the car smoothly, so various helpers have been introduced.
There are 3 main modes how to control the throttle: Gentle, default, and turbo.
Gentle - when this modifier is used, the max pressure on the gas pedal is limited by gentleThrust value from the config file.
Default - used when the action for acceleration is active without any modifiers. The max pressure on the gas pedal is limited by defaultThrust value from the config file.
Turbo - when this modifier is used, it means that the player is flooring the gas pedal.
Example
class Throttle
{
reactionTime = 1.0; // how long it takes to get wanted value of thrust (in seconds)
defaultThrust = 0.85; // thrust value when only the action for acceleration is active
gentleThrust = 0.7; // thrust value when the VehicleSlow keyboard key is pressed together with acceleration
turboCoef = 4.0; // how many times is reaction time faster when full thrust is applied
gentleCoef = 0.75; // how many times is reaction time slower when gentle thrust is applied
};
Brake
property | type | description |
---|---|---|
pressureBySpeed | array of pair of floats | How much brake pressure is applied with respect to car's speed. |
reactionTime | float | How long (in seconds) it takes to get 100% brake pressure when panic braking is applied. Panic braking is applied when holding LShift (by default controls) key while braking. In other words how long it takes to floor the brake pedal. |
driverless | float in range [0, 1] | How much brake the game should apply when no driver is present. |
Example
class Brake
{
pressureBySpeed[] = {
0, 0.43, // at 0 km/h, apply 43% of brake pressure
20, 0.35, // at 20 km/h, apply 35% of brake pressure
100, 0.31 // at 100 km/h, apply 31% of brake pressure
};
reactionTime = 0.25;
driverless = 0.1;
};
Aerodynamics
The aerodynamic simulation consists of two main factors, frontal aerodynamic drag and downforce.
The frontal drag practically determines maximal forward speed of car. Downforce can be used to increase load on tires thus increasing their grip. This is the reason why racing cars has additional spoilers and wings.
property | type | description |
---|---|---|
frontalArea | float | Frontal area of car in squared meters. |
dragCoefficient | float | Coefficient used to quantify the air resistance of a car. You can read more about this value on here. See list of example values here. Negative values are forbidden, car simulation does not calculate upwards lift force. |
downforceCoefficient | float | Coefficient of a downwards lift force. Usually this value is in range [0, 3]. More explanation of the topic can be found here. |
downforceOffset | array of 3 floats | Local position offset from car's center of mass indicating where the downforce should be applied. |
Example
class Aerodynamics
{
// drag
frontalArea = 2.2;
dragCoefficient = 0.45;
// downforce
downforceCoefficient = 0.8;
downforceOffset[] = { 0, 0.4, -2.2 };
};
Engine
Power source of the car. DayZ allows users to manually insert its torque curve allowing for simulation of various engines from classic internal combustion engines to electric ones.
Clutch
A clutch is a mechanical part that engages and disengages engine from transmission. When not fully engaged it allows engine and drivetrain to operate in different rotating speeds through slipping.
property | type | description |
---|---|---|
maxTorqueTransfer | float | Maximal torque in Nm that the clutch can transfer before it starts to slip. |
uncoupleTime | float | Time in seconds to disengage clutch. |
coupleTime | float | Time in seconds to engage clutch. |
Example
class Clutch
{
maxTorqueTransfer = 400;
uncoupleTime = 0.3;
coupleTime = 0.3;
};
Gearbox
Connects engine and driveline. Simply put, it is a set of gears that allow the rotational speed of the driveline to be varied while maintaining RPM of the engine within its effective range.
The gearbox has one reverse gear ratio so the car can go backwards and multiple forward gear ratios.
There are two types:
Manual - Player must change all gears manually to prevent overrevving the engine.
Automatic - Player manually changes only the direction of movement by choosing between R (reverse) and D (drive) modes.
Note that the types effectively change the way how a player controls the car, but the automatic gearbox also has more forward gears to allow the car to move at higher speeds.
Example
class Gearbox
{
// for automatic use GEARBOX_AUTOMATIC constant
type = GEARBOX_MANUAL;
// reverse gear ratio
reverse = 3.51;
// forward gear ratios
ratios[] = {
3.50,
2.26,
1.45,
1.00
};
};
CentralDifferential
Valid only for AWD and 642 drivetrains. It is the differential connecting gearbox with the rest of the driveline.