handling.meta explicado: campos, unidades y flags

Por Nilo3D · Actualizado:

handling.meta define cómo se conduce un vehículo en GTA V. Cada entrada fija la masa, la fuerza motriz, las marchas, la velocidad máxima, los frenos, la dirección, el agarre de los neumáticos, la suspensión y los multiplicadores de daño, además de flags en hexadecimal y bloques opcionales de sub-handling para coches, motos, barcos y aeronaves. Un vehículo usa la entrada cuyo handlingName es igual a su handlingId en vehicles.meta.

¿Qué es handling.meta?

handling.meta es una lista XML de elementos CHandlingData. Cada elemento es un perfil de física, identificado por handlingName. En FiveM se carga con data_file 'HANDLING_FILE'. La entrada de abajo es el Sultan original con el nombre cambiado; los valores de las tablas de esta página se refieren a ella.

<?xml version="1.0" encoding="UTF-8"?>
<CHandlingDataMgr>
  <HandlingData>
    <Item type="CHandlingData">
      <handlingName>MYCAR</handlingName>
      <fMass value="1400.000000" />
      <fInitialDragCoeff value="8.000000" />
      <fPercentSubmerged value="85.000000" />
      <vecCentreOfMassOffset x="0.000000" y="0.000000" z="0.000000" />
      <vecInertiaMultiplier x="1.000000" y="1.400000" z="1.600000" />
      <fDriveBiasFront value="0.400000" />
      <nInitialDriveGears value="5" />
      <fInitialDriveForce value="0.260000" />
      <fDriveInertia value="1.000000" />
      <fClutchChangeRateScaleUpShift value="1.800000" />
      <fClutchChangeRateScaleDownShift value="1.800000" />
      <fInitialDriveMaxFlatVel value="145.000000" />
      <fBrakeForce value="0.400000" />
      <fBrakeBiasFront value="0.650000" />
      <fHandBrakeForce value="0.700000" />
      <fSteeringLock value="35.000000" />
      <fTractionCurveMax value="2.350000" />
      <fTractionCurveMin value="1.950000" />
      <fTractionCurveLateral value="22.500000" />
      <fTractionSpringDeltaMax value="0.150000" />
      <fLowSpeedTractionLossMult value="1.400000" />
      <fCamberStiffnesss value="0.000000" />
      <fTractionBiasFront value="0.485000" />
      <fTractionLossMult value="1.000000" />
      <fSuspensionForce value="2.800000" />
      <fSuspensionCompDamp value="1.200000" />
      <fSuspensionReboundDamp value="2.100000" />
      <fSuspensionUpperLimit value="0.150000" />
      <fSuspensionLowerLimit value="-0.140000" />
      <fSuspensionRaise value="0.000000" />
      <fSuspensionBiasFront value="0.500000" />
      <fAntiRollBarForce value="0.300000" />
      <fAntiRollBarBiasFront value="0.530000" />
      <fRollCentreHeightFront value="0.240000" />
      <fRollCentreHeightRear value="0.250000" />
      <fCollisionDamageMult value="0.700000" />
      <fWeaponDamageMult value="1.000000" />
      <fDeformationDamageMult value="0.700000" />
      <fEngineDamageMult value="1.500000" />
      <fPetrolTankVolume value="65.000000" />
      <fOilVolume value="5.000000" />
      <fSeatOffsetDistX value="0.000000" />
      <fSeatOffsetDistY value="0.000000" />
      <fSeatOffsetDistZ value="0.050000" />
      <nMonetaryValue value="35000" />
      <strModelFlags>440010</strModelFlags>
      <strHandlingFlags>0</strHandlingFlags>
      <strDamageFlags>0</strDamageFlags>
      <AIHandling>AVERAGE</AIHandling>
      <SubHandlingData>
        <Item type="CCarHandlingData">
          <fBackEndPopUpCarImpulseMult value="0.100000" />
          <fBackEndPopUpBuildingImpulseMult value="0.030000" />
          <fBackEndPopUpMaxDeltaSpeed value="0.600000" />
        </Item>
        <Item type="NULL" />
        <Item type="NULL" />
      </SubHandlingData>
    </Item>
  </HandlingData>
</CHandlingDataMgr>

Cada campo tiene un mínimo y un máximo en el esquema de datos del juego. Para la mayoría de los floats el rango es de 0 a 1000, fMass llega hasta 100000 y el número de marchas está limitado a 10. Los valores de las tablas son lo que el juego hace con el número después de cargarlo, sacado del código de handling.

¿Qué hacen fMass, la resistencia del aire y el centro de masa?

CampoUnidadSultanQué hace
fMasskg1400Masa del vehículo. Se usa en todos los cálculos de fuerzas y colisiones.
fInitialDragCoeffse multiplica por 0.0001 al cargar8.0Resistencia del aire. Los valores altos frenan más al vehículo a alta velocidad.
fPercentSubmerged%85Qué parte del vehículo queda bajo el agua cuando flota. El juego calcula su constante de flotabilidad como 100 dividido por este valor.
vecCentreOfMassOffsetmetros0, 0, 0Mueve el centro de masa. y es de delante a atrás, z es arriba y abajo. Un centro más alto hace que el vehículo vuelque con más facilidad.
vecInertiaMultipliermultiplicador por eje1.0, 1.4, 1.6Inercia de rotación. Un valor más bajo en un eje hace que el vehículo gire con más facilidad alrededor de él.

¿Qué campos definen la aceleración y la velocidad máxima?

La velocidad máxima sale de fInitialDriveMaxFlatVel y la aceleración de fInitialDriveForce. El juego convierte la velocidad de km/h a m/s al cargar y después le suma un 20% para obtener la velocidad que usa para las marchas. Por eso los vehículos van un poco más rápido que el número del archivo.

CampoUnidadSultanQué hace
fInitialDriveMaxFlatVelkm/h145Referencia de velocidad máxima en llano. Las marchas usan este valor multiplicado por 1.2.
fInitialDriveForceescala0.26Fuerza motriz del motor. Aumenta la aceleración.
nInitialDriveGearscantidad5Número de marchas hacia delante. Todo lo que pase de 10 se recorta a 10.
fDriveInertiaescala1.0Con qué rapidez suben y bajan las revoluciones del motor.
fClutchChangeRateScaleUpShift, ...DownShiftescala1.8Con qué rapidez vuelve a acoplarse el embrague tras un cambio. Cuanto más alto, más rápido el cambio.
fDriveBiasFront0 a 10.4Parte de la tracción que va a las ruedas delanteras. Por debajo de 0.1 el juego lo trata como tracción trasera pura, por encima de 0.9 como tracción delantera pura, y todo lo que queda en medio es tracción total.

¿Cómo funcionan los campos de frenos y dirección?

CampoUnidadSultanQué hace
fBrakeForceescala0.4Fuerza de frenado general.
fBrakeBiasFront0 a 10.65Parte del frenado que va al eje delantero. El trasero recibe el resto.
fHandBrakeForceescala0.7Fuerza del freno de mano.
fSteeringLockgrados35Ángulo máximo de giro de las ruedas. Se convierte a radianes al cargar.

¿Qué es la curva de tracción?

La curva de tracción es el modelo de agarre de los neumáticos. El agarre es máximo con un ángulo de deslizamiento pequeño (fTractionCurveMax) y cae hacia fTractionCurveMin a medida que el neumático desliza. Max debe ser mayor que Min y estar por encima de cero, o el cargador avisa de una curva no válida.

CampoUnidadSultanQué hace
fTractionCurveMaxcoeficiente de agarre2.35Agarre máximo, antes de que el neumático empiece a deslizar.
fTractionCurveMincoeficiente de agarre1.95Agarre cuando el neumático ya está deslizando.
fTractionCurveLateralgrados22.5Rango de ángulo de deslizamiento de la curva. Un ángulo mayor hace que el agarre caiga más poco a poco, así que los derrapes perdonan más.
fTractionSpringDeltaMaxlímite0.15Límite que usa el muelle lateral del modelo de neumático.
fLowSpeedTractionLossMultmultiplicador1.4Pérdida de agarre extra al arrancar desde parado. 0 desactiva el efecto; los valores altos hacen que las ruedas patinen más en la salida.
fCamberStiffnesssmultiplicador0Fuerza lateral al inclinarse; solo hace algo por encima de 0 y lo usan sobre todo las motos. La etiqueta se escribe de verdad con tres s.
fTractionBiasFront0 a 10.485Parte del agarre que va al eje delantero. Los valores bajos hacen que el tren delantero deslice primero (subviraje).
fTractionLossMultmultiplicador1.0Cuánto agarre quita, cuánta resistencia añade y cuánta velocidad máxima recorta la superficie bajo las ruedas (hierba, arena, barro). 0 ignora la superficie.

El flag de handling HF_HAS_RALLY_TYRES (0x8) invierte la curva: el agarre sube hacia Max a medida que el neumático desliza en lugar de bajar.

¿Qué hacen los campos de suspensión?

CampoSultanQué hace
fSuspensionForce2.8Rigidez del muelle.
fSuspensionCompDamp, fSuspensionReboundDamp1.2, 2.1Amortiguación mientras el muelle se comprime y mientras se extiende. Ambos se multiplican por 0.1 al cargar. Con valores bajos el vehículo rebota, con valores altos se siente asentado.
fSuspensionUpperLimit, fSuspensionLowerLimit0.15, -0.14Cuánto puede subir y bajar la rueda desde la posición de reposo, en metros.
fSuspensionRaise0Sube o baja la carrocería respecto a las ruedas, en metros.
fSuspensionBiasFront0.5Parte de la fuerza del muelle que va al eje delantero (0 a 1).
fAntiRollBarForce, fAntiRollBarBiasFront0.3, 0.53Fuerza de la barra estabilizadora y su reparto delantero. Con más fuerza, la carrocería balancea menos en las curvas.
fRollCentreHeightFront, fRollCentreHeightRear0.24, 0.25Alturas del centro de balanceo en metros, que se usan para la transferencia de peso en las curvas.

Si las ruedas de un coche rebajado atraviesan los pasos de rueda, suele ser que tiene demasiado recorrido superior para el hueco que hay: reduce fSuspensionUpperLimit y sube la amortiguación antes de tocar la fuerza del muelle.

¿Qué son los campos de daño y los campos varios?

  • fCollisionDamageMult, fWeaponDamageMult, fEngineDamageMult: multiplicadores del daño por choques, por armas y al motor.
  • fDeformationDamageMult: cuánto se deforma visiblemente la carrocería.
  • fPetrolTankVolume, fOilVolume: volumen del depósito y del aceite.
  • fSeatOffsetDistX/Y/Z: desplazamientos de la posición del asiento.
  • nMonetaryValue: valor base del vehículo, hasta 1000000.
  • AIHandling: nombre del perfil de conducción de la IA, por ejemplo AVERAGE. Solo afecta a los conductores controlados por el ordenador.
  • fDownforceModifier (0 a 100), fRocketBoostCapacity y fBoostMaxSpeed: campos opcionales más recientes para la carga aerodinámica y el impulso de cohete.

¿Cómo funcionan strModelFlags y strHandlingFlags?

Los tres campos de flags son máscaras de bits en hexadecimal escritas sin el prefijo 0x. Para construir una, suma los valores hexadecimales de los flags que quieres. El 440010 del Sultan son tres flags:

MF_ABS_STD           0x00000010
MF_AXLE_F_MCPHERSON  0x00040000
MF_AXLE_R_MCPHERSON  0x00400000
                     ----------
strModelFlags        0x00440010  ->  <strModelFlags>440010</strModelFlags>
CampoFlagHexEfecto
strModelFlagsMF_IS_VAN0x1Furgoneta.
MF_ABS_STD0x10ABS de serie.
MF_NO_DOORS0x100El vehículo no tiene puertas.
MF_NO_WHEEL_BURST0x2000000Los neumáticos no pueden reventar.
MF_IS_RC0x10000000Coche teledirigido.
strHandlingFlagsHF_HAS_RALLY_TYRES0x8Invierte la curva de tracción.
HF_NO_HANDBRAKE0x10Sin freno de mano.
HF_STEER_REARWHEELS0x20Gira con las ruedas traseras.
HF_NO_REVERSE0x200No puede ir marcha atrás.
HF_CVT0x1000Transmisión variable continua.
HF_OFFROAD_ABILITIES0x100000Gravedad extra para el agarre fuera de carretera.
HF_ARMOURED0x8000000A prueba de balas.
strDamageFlagsDF_DRIVER_SIDE_FRONT_DOOR0x1Flag de daño de puerta para la puerta del conductor.
DF_BONNET, DF_BOOT0x10, 0x20Flags de daño de puerta para el capó y el maletero.

¿Qué son los bloques SubHandlingData?

SubHandlingData contiene hasta cuatro bloques extra, cada uno para un tipo de vehículo. Añade el bloque que corresponde al vehículo y deja los demás huecos como <Item type="NULL" />. El juego ignora un bloque del tipo equivocado.

Tipo de bloqueParaEjemplos de campos
CCarHandlingDataCochesfToeFront, fCamberFront, fCastor, fEngineResistance, strAdvancedFlags
CBikeHandlingDataMotos y bicicletasfMaxBankAngle, fWheelieBalancePoint, fInAirSteerMult, fJumpForce
CFlyingHandlingDataAviones y helicópterosfThrust, fYawMult, fRollMult, fPitchMult, fFormLiftMult
CBoatHandlingDataBarcosfBoxFrontMult, fAquaplaneForce, fRudderForce
CSpecialFlightHandlingDataModos de levitación y de vuelo en vehículos terrestresmode, fMaxThrust, vecAngularDamping, strFlags
CSubmarineHandlingData, CTrailerHandlingData, CSeaPlaneHandlingData, CVehicleWeaponHandlingDataSubmarinos, remolques, hidroaviones, vehículos armadosVelocidad de inmersión, límites de enganche, flotadores, límites de la torreta

El handling de vuelo de los hoverboards de Nilo3D está hecho así, en el archivo de handling y sin ningún script. En el bloque de moto, los ángulos de inclinación y de equilibrio se escriben en grados y se convierten a radianes al cargar.

Los demás archivos que necesita una tabla están en cómo funciona un hoverboard FiveM sin script.

¿Cómo pruebo los cambios de handling?

Cambia un valor cada vez, reinicia el resource y conduce por el mismo tramo de carretera antes de cambiar el siguiente. Guarda una copia de la última versión que iba bien. La entrada original de un vehículo parecido es la mejor referencia para saber si un valor está en un rango normal: el handling.meta del propio juego tiene una entrada para cada vehículo original.

El handling solo tiene efecto cuando la entrada está bien enlazada: handlingName aquí, handlingId en vehicles.meta, y una línea HANDLING_FILE en el manifest, como se muestra en cómo añadir un vehículo add-on a FiveM. Si el vehículo no reacciona a ningún cambio, consulta la sección de handling de la guía de solución de problemas.

Preguntas frecuentes

¿Cómo aumento la velocidad máxima en handling.meta?
Sube fInitialDriveMaxFlatVel, que está en km/h. El juego usa ese valor multiplicado por 1.2 para las marchas. Si el vehículo deja de acelerar antes de llegar, sube fInitialDriveForce o baja fInitialDragCoeff.
¿En qué unidad está fInitialDriveMaxFlatVel?
En kilómetros por hora. Al cargar, el juego lo multiplica por 1000/3600 para obtener metros por segundo.
¿Cómo hago que un coche tenga tracción total?
Pon fDriveBiasFront entre 0.1 y 0.9. 0.5 reparte la tracción por igual. Por debajo de 0.1 el juego trata el coche como tracción trasera y por encima de 0.9 como tracción delantera.
¿Por qué mi handling.meta no cambia nada?
O el handlingName no coincide con el handlingId de vehicles.meta, o el archivo no se carga con una línea data_file HANDLING_FILE, u otro resource define el mismo handlingName. Dale a cada vehículo add-on un nombre de handling único.
¿Cómo escribo los flags de handling?
Suma los valores hexadecimales de los flags que quieres y escribe la suma sin 0x. Por ejemplo, 0x10 + 0x40000 + 0x400000 se escribe 440010.

Fuentes

Productos de esta guía

Todas las guías