<?xml version="1.0" encoding="utf-8"?>
<!--
  ═══════════════════════════════════════════════════════════════════════════════
  WitosWeapon — Referencia Completa de Configuración de Armas  [ESPAÑOL]
  ═══════════════════════════════════════════════════════════════════════════════

  CÓMO FUNCIONA
  ═════════════
  Cada asiento del vehículo puede tener su propio sistema de armas independiente.
  La configuración se hace mediante propiedades en el XML del vehículo
  (entityclasses.xml) con el nombre "VW_Seat{N}",
  donde N es el número de asiento (empezando desde 0).

  El valor es una lista de pares Clave=Valor separados por punto y coma:
	  <property name="VW_Seat0" value="Enabled=true;Weapon=mg;Key=Mouse0;..."/>

  Las claves son insensibles a mayúsculas (Weapon=mg y weapon=mg son iguales).
  Tipos de arma: "mg" (ametralladora) o "gm"/"guidedmissile" (misil guiado).

  NODOS DEL MODELO 3D
  ════════════════════
  Tu prefab de Unity debe contener GameObjects (transforms) con nombres
  específicos que el sistema busca por nombre. Puedes colocarlos en cualquier
  punto de la jerarquía del modelo. El sistema usa búsqueda recursiva (BFS),
  por lo que el anidamiento es flexible.

  Ejemplo de jerarquía para ametralladora con torreta:

	  VehicleRoot
	  ├── turret_yaw              ← Nodo de rotación horizontal
	  │   └── turret_pitch        ← Nodo de rotación vertical
	  │       ├── mg_muzzle       ← Punto de origen del disparo
	  │       │   └── MuzzleFlash ← ParticleSystem de destello del cañón
	  │       ├── barrel_spin     ← Barril giratorio (minigun)
	  │       └── recoil_bone     ← Hueso de retroceso
	  ├── turret_mesh             ← Malla visible (oculta sin el mod)
	  ├── weapon0                 ← Punto de lanzamiento de misil 1
	  └── weapon1                 ← Punto de lanzamiento de misil 2

  Ejemplo de jerarquía para misil guiado con torreta:

	  VehicleRoot
	  ├── missile_turret_yaw      ← Nodo de rotación horizontal (TurretYawNode)
	  │   └── missile_turret_pitch← Nodo de rotación vertical (TurretPitchNode)
	  │       ├── weapon0         ← Punto de lanzamiento de misil 1
	  │       └── weapon1         ← Punto de lanzamiento de misil 2
	  └── ...

  MUNICIÓN
  ════════
  Los items de munición deben existir en items.xml. El jugador debe llevarlos
  en su inventario (mochila). Para misiles guiados, los items de munición
  también pueden definir propiedades de explosión (ver sección MUNICIÓN MISILES).
-->

<weapon_reference>

  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--   AMETRALLADORA (MG) — CONFIGURACIÓN MÍNIMA                           -->
  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--
	El mínimo indispensable para que una ametralladora funcione.
	Solo se requieren 4 propiedades: Enabled, Weapon, Key y AmmoItem.
	Todo lo demás usa valores por defecto.
  -->
  <vehicle name="MG_Minimo_Ejemplo">
	<property name="VW_Seat0" value="
	  Enabled=true;
	  Weapon=mg;
	  Key=Mouse0;
	  AmmoItem=ammo9mmBullet
	"/>
  </vehicle>


  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--   AMETRALLADORA (MG) — TODAS LAS OPCIONES                             -->
  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <vehicle name="MG_Completo_Ejemplo">
	<property name="VW_Seat0" value="

	  <!-- ─── General ──────────────────────────────────────────────────── -->
	  <!-- Enabled: activa o desactiva el arma en este asiento              -->
	  <!-- Weapon: tipo de arma ('mg' para ametralladora)                   -->
	  <!-- Key: tecla de disparo (cualquier KeyCode de Unity)               -->
	  <!-- Key_Pad: tecla alternativa de disparo para mando/gamepad.        -->
	  <!--   Si se define, el arma dispara cuando se pulse Key O Key_Pad.   -->
	  <!--   También se puede reasignar por vehículo en la UI de teclas.    -->
	  <!-- RequiredMod: nombre del mod que debe estar instalado en el       -->
	  <!--   vehículo para que el arma funcione. Si está vacío, siempre     -->
	  <!--   disponible.                                                    -->
	  <!-- VisualNode: nodo 3D que se muestra/oculta según RequiredMod      -->
	  <!-- ItemName: item base del juego usado para calcular daño,          -->
	  <!--   efectos pasivos, etiquetas, etc.                               -->
	  Enabled=true;
	  Weapon=mg;
	  Key=Mouse0;
	  Key_Pad=Joystick1Button0;
	  RequiredMod=modMachineGunTurret;
	  VisualNode=turret_mesh;
	  ItemName=gunMGT1;

	  <!-- ─── Munición ─────────────────────────────────────────────────── -->
	  <!-- AmmoItem: nombre del item de munición (debe existir en           -->
	  <!--   items.xml y el jugador debe llevarlo en el inventario)         -->
	  <!-- AmmoItems: para varios tipos de munición, lista separada         -->
	  <!--   por comas. Si se define, tiene prioridad sobre AmmoItem.       -->
	  <!-- AmmoSwitchKey: tecla para cambiar entre tipos de munición        -->
	  <!-- AmmoSwitchSnd: sonido al cambiar munición                        -->
	  AmmoItem=ammo762mmBullet;
	  <!-- AmmoItems=ammo762mm,ammo762mmAP,ammo762mmHP;                    -->
	  AmmoSwitchKey=X;
	  AmmoSwitchSnd=weapon/ammo_switch;

	  <!-- ─── Disparo ───────────────────────────────────────────────────── -->
	  <!-- Range: alcance máximo de disparo (raycast de daño) en metros     -->
	  <!-- AimRange: alcance del raycast de cámara (donde apuntas).         -->
	  <!--   Generalmente mayor que Range para que la mira sea precisa      -->
	  <!--   a cualquier distancia visible.                                 -->
	  <!-- RoundsPerMinute: cadencia de fuego (disparos por minuto)         -->
	  <!-- SpreadDegreesHorizontal/Vertical: dispersión del disparo         -->
	  <!--   en grados. Mayor valor = menos preciso.                        -->
	  <!-- HitmaskOverride: máscara de colisión para el raycast de daño     -->
	  Range=220;
	  AimRange=800;
	  RoundsPerMinute=720;
	  SpreadDegreesHorizontal=1.0;
	  SpreadDegreesVertical=1.0;
	  HitmaskOverride=8;

	  <!-- ─── Daño ──────────────────────────────────────────────────────── -->
	  <!-- damageType: tipo de daño del juego                               -->
	  <!--   Valores: Piercing, Bashing, Slashing, Heat, Electrical,        -->
	  <!--            Radiation                                              -->
	  <!-- material: material de impacto (afecta a las partículas)          -->
	  <!-- EntityDamageMul: multiplicador de daño a entidades (zombis,      -->
	  <!--   animales, jugadores)                                           -->
	  <!-- BlockDamageMul: multiplicador de daño a bloques                  -->
	  damageType=Piercing;
	  material=bullet;
	  EntityDamageMul=1.0;
	  BlockDamageMul=1.0;

	  <!-- ─── Cargador / Recarga ────────────────────────────────────────── -->
	  <!-- RackSize: disparos antes de recargar. 999999 = ilimitado.        -->
	  <!-- ReloadTime: tiempo de recarga en segundos. 0 = sin recarga.     -->
	  <!-- SndFire: sonido de disparo                                       -->
	  <!-- SndReload: sonido de recarga                                     -->
	  RackSize=50;
	  ReloadTime=3.0;
	  SndFire=weapon/gun_fire;
	  SndReload=weapon/gun_reload;

	  <!-- ─── Punto de Disparo ──────────────────────────────────────────── -->
	  <!-- MuzzleNode: nombre del nodo del modelo donde se origina el       -->
	  <!--   disparo. También se usa como padre para el láser y los FX.     -->
	  MuzzleNode=mg_muzzle;

	  <!-- ─── Rotación de Torreta ───────────────────────────────────────── -->
	  <!-- YawNode: nodo que rota horizontalmente (izquierda/derecha)       -->
	  <!-- PitchNode: nodo que rota verticalmente (arriba/abajo)            -->
	  <!-- YawMin/YawMax: límites de rotación horizontal en grados          -->
	  <!--   (-180 a 180 = rotación completa)                               -->
	  <!-- PitchMin/PitchMax: límites de rotación vertical en grados        -->
	  <!-- YawSpeed/PitchSpeed: velocidad de rotación en grados/segundo     -->
	  <!-- YawAxisLocal/PitchAxisLocal: eje de rotación local               -->
	  <!--   Valores posibles: X, Y, Z, -X, -Y, -Z                         -->
	  <!-- YawInvert/PitchInvert: invertir dirección de rotación           -->
	  <!-- YawCameraScale/PitchCameraScale: escala de seguimiento de cámara -->
	  <!--   (1.0 = sigue la cámara 1:1)                                    -->
	  <!-- YawCameraOffset/PitchCameraOffset: desplazamiento base de        -->
	  <!--   rotación en grados (útil si la torreta está descentrada)       -->
	  YawNode=turret_yaw;
	  PitchNode=turret_pitch;
	  YawMin=-180;
	  YawMax=180;
	  PitchMin=-15;
	  PitchMax=60;
	  YawSpeed=180;
	  PitchSpeed=120;
	  YawAxisLocal=Y;
	  PitchAxisLocal=X;
	  YawInvert=false;
	  PitchInvert=false;
	  YawCameraScale=1.0;
	  PitchCameraScale=1.0;
	  YawCameraOffset=0;
	  PitchCameraOffset=0;

	  <!-- ─── Láser ──────────────────────────────────────────────────────── -->
	  <!-- LaserEnabled: mostrar/ocultar el láser                           -->
	  <!-- LaserColor: color en formato R,G,B,A (cada valor de 0 a 1)       -->
	  <!--   Ejemplos: 1,0,0,1 (rojo) | 0,1,0,0.6 (verde semitransparente) -->
	  <!-- LaserWidth: grosor del láser                                     -->
	  <!-- LaserMaxDistance: alcance visual del láser. Si no se especifica, -->
	  <!--   usa el valor de Range.                                         -->
	  LaserEnabled=true;
	  LaserColor=1,0,0,1;
	  LaserWidth=0.015;
	  LaserMaxDistance=250;

	  <!-- ─── Barril Giratorio (Minigun) ───────────────────────────────── -->
	  <!-- SpinNode: nodo del modelo que gira al disparar                   -->
	  <!-- SpinAxis: eje de rotación (X, Y, Z, -X, -Y, -Z)                -->
	  <!-- SpinSpeed / SpinSpeedFire: velocidad de giro al disparar (°/s). -->
	  <!--   Ambos nombres son alias de la misma propiedad.                 -->
	  <!-- SpinSpeedIdle: velocidad de giro en reposo (0 = parado)          -->
	  <!-- SpinAccel: aceleración de giro (°/s²)                            -->
	  <!-- SpinDecel: deceleración de giro (°/s²)                           -->
	  <!-- SpinMinToFire: giro normalizado mínimo (0-1) para poder          -->
	  <!--   disparar. 0.5 = el barril debe estar al 50% antes de disparar. -->
	  <!-- SpinSndMin: giro normalizado mínimo para reproducir sonido       -->
	  <!-- SpinSndStart: sonido de arranque                                 -->
	  <!-- SpinSndLoop: sonido en bucle mientras gira                       -->
	  <!-- SpinSndStop: sonido al detener                                   -->
	  SpinNode=barrel_spin;
	  SpinAxis=Y;
	  SpinSpeed=2400;
	  SpinSpeedIdle=0;
	  SpinAccel=3000;
	  SpinDecel=2000;
	  SpinMinToFire=0.5;
	  SpinSndMin=0.05;
	  SpinSndStart=weapon/minigun_spinup;
	  SpinSndLoop=weapon/minigun_loop;
	  SpinSndStop=weapon/minigun_spindown;

	  <!-- ─── Retroceso ──────────────────────────────────────────────────── -->
	  <!-- RecoilNode: nodo del modelo que retrocede al disparar            -->
	  <!-- RecoilKick: grados de retroceso por disparo (en eje X local)     -->
	  <!-- RecoilReturnSpeed: velocidad de retorno en grados/segundo        -->
	  RecoilNode=recoil_bone;
	  RecoilKick=1.2;
	  RecoilReturnSpeed=12;

	  <!-- ─── FX de Destello del Cañón ─────────────────────────────────── -->
	  <!-- FireParticle: nombre del ParticleSystem hijo del nodo cañón      -->
	  <!--   Puede ser un nombre directo ("MuzzleFlash") o ruta relativa    -->
	  <!--   ("Fx/MuzzleFlash").                                            -->
	  <!-- FireFxNode: nodo padre del efecto. Si no se especifica, usa      -->
	  <!--   MuzzleNode. Útil si el FX está en un nodo diferente.           -->
	  <!-- FireFxScale: escala del efecto de partículas                     -->
	  <!-- FireFxDuration: duración del efecto antes de detener emisión.    -->
	  <!--   0 = no se detiene automáticamente (lo decide el ParticleSystem) -->
	  <!-- FireFxDisableOnStop: desactivar el GameObject al terminar        -->
	  FireParticle=MuzzleFlash;
	  FireFxNode=mg_muzzle;
	  FireFxScale=1.0;
	  FireFxDuration=0.08;
	  FireFxDisableOnStop=true;

	  <!-- ─── IK de Asiento ─────────────────────────────────────────────── -->
	  <!-- Coloca las manos y pies del jugador en nodos específicos del      -->
	  <!-- modelo del vehículo al sentarse. Usa el sistema IK de Unity.      -->
	  <!--                                                                    -->
	  <!-- SeatIK: debe ser true para activar el IK en este asiento.         -->
	  <!--   Si es false (defecto), todas las propiedades IK_* se ignoran.   -->
	  <!--                                                                    -->
	  <!-- Extremidades disponibles: LeftHand, RightHand, LeftFoot, RightFoot -->
	  <!-- Para cada extremidad puedes definir tres propiedades:              -->
	  <!--   IK_{Extremidad}Position: posición local (X,Y,Z) relativa al     -->
	  <!--     nodo padre (o raíz del vehículo si no hay padre definido).     -->
	  <!--     Esta propiedad es OBLIGATORIA para activar la extremidad.      -->
	  <!--   IK_{Extremidad}Rotation: rotación euler local (X,Y,Z).          -->
	  <!--     Por defecto: 0,0,0                                             -->
	  <!--   IK_{Extremidad}Parent: nombre del nodo del modelo al que se     -->
	  <!--     adjunta el objetivo IK. El sistema busca recursivamente en el  -->
	  <!--     prefab. Si no se define, la posición es relativa a la raíz.   -->
	  <!--                                                                    -->
	  <!-- CONSEJO: Usa IK_{Extremidad}Parent con un nodo en el volante,     -->
	  <!-- mango del arma, palanca del acelerador, etc. para que el objetivo  -->
	  <!-- IK se mueva con ese nodo al girar la torreta.                      -->
	  SeatIK=true;
	  IK_LeftHandPosition=0.3,0.9,-0.1;
	  IK_LeftHandRotation=0,0,0;
	  IK_LeftHandParent=steering_wheel;
	  IK_RightHandPosition=-0.3,0.9,-0.1;
	  IK_RightHandRotation=0,0,0;
	  IK_RightHandParent=steering_wheel;
	  IK_LeftFootPosition=0.2,0.1,0.3;
	  IK_LeftFootParent=left_pedal;
	  IK_RightFootPosition=-0.2,0.1,0.3;
	  IK_RightFootParent=right_pedal;

	  <!-- ─── Asiento Sigue Torreta ──────────────────────────────────────── -->
	  <!-- Hace que el cuerpo del jugador rote con la torreta, de forma que   -->
	  <!-- el personaje visualmente "gira en su asiento" al apuntar a los     -->
	  <!-- lados.                                                             -->
	  <!--                                                                    -->
	  <!-- SeatFollowsTurret: activa esta función. Por defecto: false         -->
	  <!-- SeatFollowsTurretYawScale: multiplicador del ángulo de guiñada     -->
	  <!--   aplicado al cuerpo. 1.0 = misma rotación que la torreta.         -->
	  <!--   0.5 = la mitad. Útil para limitar el giro del torso.            -->
	  <!-- SeatFollowsTurretPitch: si es true, también rota el cuerpo en el  -->
	  <!--   eje de cabeceo. Por defecto: false (normalmente no necesario).   -->
	  <!-- SeatFollowsTurretPitchScale: multiplicador para la rotación de     -->
	  <!--   cabeceo.                                                         -->
	  <!-- SeatFollowsPivotOffset: desplazamiento de pivote opcional (X,Y,Z) -->
	  <!--   en espacio local del modelo. Si se define, el cuerpo orbita      -->
	  <!--   alrededor del punto pivote en lugar de rotar en su sitio. Útil   -->
	  <!--   para torretas donde el asiento no está en el centro de rotación. -->
	  SeatFollowsTurret=true;
	  SeatFollowsTurretYawScale=0.5;
	  SeatFollowsTurretPitch=false;
	  SeatFollowsTurretPitchScale=0.3;
	  SeatFollowsPivotOffset=0,0.2,0.1
	"/>
  </vehicle>


  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--   MISIL GUIADO (GM) — CONFIGURACIÓN MÍNIMA                            -->
  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--
	El mínimo indispensable para un lanzador de misiles funcional.
	Solo requiere: Enabled, Weapon, Key y AmmoItem.
  -->
  <vehicle name="GM_Minimo_Ejemplo">
	<property name="VW_Seat1" value="
	  Enabled=true;
	  Weapon=gm;
	  Key=G;
	  AmmoItem=Witos_MissileAmmo
	"/>
  </vehicle>


  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--   MISIL GUIADO (GM) — TODAS LAS OPCIONES                              -->
  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <vehicle name="GM_Completo_Ejemplo">
	<property name="VW_Seat1" value="

	  <!-- ─── General ──────────────────────────────────────────────────── -->
	  <!-- Weapon: 'gm' o 'guidedmissile' (equivalentes)                   -->
	  Enabled=true;
	  Weapon=guidedmissile;
	  Key=G;

	  <!-- ─── Munición ─────────────────────────────────────────────────── -->
	  <!-- Funciona igual que la MG. Cada tipo de munición de misil puede   -->
	  <!-- tener propiedades de explosión distintas definidas en items.xml  -->
	  <!-- (ver sección MUNICIÓN DE MISILES más abajo).                     -->
	  AmmoItem=Witos_MissileAmmo;
	  <!-- AmmoItems=Witos_MissileAmmo,Witos_MissileAmmoAP;                -->
	  AmmoSwitchKey=X;
	  AmmoSwitchSnd=weapon/ammo_switch;

	  <!-- ─── Sistema de Bloqueo (Lock-On) ─────────────────────────────── -->
	  <!-- LockRange: distancia máxima para bloquear un objetivo            -->
	  <!-- ConeAngle: ángulo del cono de búsqueda en grados                 -->
	  <!--   (desde el centro de la mira hacia afuera)                      -->
	  <!-- AcquireTime: segundos para adquirir el bloqueo                   -->
	  <!-- LoseTime: segundos sin ver el objetivo antes de perder el bloqueo -->
	  <!-- LockConfirmTime: tiempo extra de confirmación tras bloqueo total. -->
	  <!--   Simula sistemas más realistas.                                 -->
	  <!-- RequireLockToFire: si es true, no se puede disparar sin un       -->
	  <!--   objetivo bloqueado y confirmado.                               -->
	  LockRange=350;
	  ConeAngle=30;
	  AcquireTime=0.22;
	  LoseTime=0.35;
	  LockConfirmTime=0.5;
	  RequireLockToFire=false;

	  <!-- ─── HUD del Objetivo (Cuadrado de Bloqueo) ───────────────────── -->
	  <!-- HudEnabled: mostrar/ocultar el cuadrado de bloqueo               -->
	  <!-- HudPixels: tamaño del cuadrado en píxeles                        -->
	  <!-- HudOffsetY: desplazamiento vertical sobre el objetivo            -->
	  <!-- HudThicknessPx: grosor de las líneas del cuadrado                -->
	  HudEnabled=true;
	  HudPixels=40;
	  HudOffsetY=1.0;
	  HudThicknessPx=3;

	  <!-- ─── Vuelo del Misil ────────────────────────────────────────────── -->
	  <!-- MaxSpeed: velocidad máxima del misil                              -->
	  <!-- Accel: aceleración del misil                                      -->
	  <!-- TurnRate: tasa de giro del misil (grados/segundo)                 -->
	  <!--   Mayor = más maniobrable, mejor persiguiendo objetivos ágiles.   -->
	  <!-- StartSpeed: velocidad inicial de lanzamiento                      -->
	  <!-- ArmingDelay: segundos antes de que el misil pueda impactar        -->
	  <!--   (evita golpearse al lanzar)                                    -->
	  <!-- NoTargetGravity: gravedad aplicada al misil cuando no tiene       -->
	  <!--   objetivo (cae en arco sin bloqueo)                             -->
	  <!-- FallbackDistance: distancia de vuelo en línea recta al disparar   -->
	  <!--   sin objetivo bloqueado                                          -->
	  MaxSpeed=180;
	  Accel=180;
	  TurnRate=420;
	  StartSpeed=70;
	  ArmingDelay=0.20;
	  NoTargetGravity=25;
	  FallbackDistance=220;

	  <!-- ─── Puntos de Lanzamiento (Hardpoints) ────────────────────────── -->
	  <!-- WeaponNodePrefix: prefijo de los nodos de spawn en el modelo      -->
	  <!--   El sistema busca: weapon0, weapon1, weapon2... hasta WeaponMax. -->
	  <!--   Los misiles se lanzan alternando entre ellos.                   -->
	  <!-- WeaponMax: número máximo de hardpoints a buscar                   -->
	  WeaponNodePrefix=weapon;
	  WeaponMax=2;

	  <!-- ─── Cargador / Recarga ─────────────────────────────────────────── -->
	  <!-- RackSize: misiles antes de recargar                               -->
	  <!-- ReloadTime: tiempo de recarga en segundos                         -->
	  RackSize=8;
	  ReloadTime=3.5;

	  <!-- ─── Sonidos ────────────────────────────────────────────────────── -->
	  <!-- SndBeep: pitido mientras busca objetivo (suena más rápido          -->
	  <!--   conforme se acerca al bloqueo completo)                          -->
	  <!-- SndLocked: sonido al confirmar bloqueo                             -->
	  <!-- SndUnlock: sonido al perder bloqueo                                -->
	  <!-- SndLaunch: sonido al lanzar el misil                               -->
	  <!-- SndReload: sonido al recargar                                      -->
	  SndBeep=misc/locking;
	  SndLocked=misc/locked;
	  SndUnlock=misc/unlock;
	  SndLaunch=weapon/missile_launch;
	  SndReload=weapon/missile_reload;

	  <!-- ─── Rotación de Torreta de Misiles ───────────────────────────── -->
	  <!--                                                                   -->
	  <!-- Los misiles guiados soportan una torreta giratoria independiente  -->
	  <!-- que sigue la cámara del jugador. Los hardpoints (weapon0,          -->
	  <!-- weapon1...) deben ser hijos del nodo de cabeceo (pitch), para     -->
	  <!-- que los misiles se lancen en la dirección que apunta la torreta.  -->
	  <!--                                                                   -->
	  <!-- Estas propiedades son EXCLUSIVAS del sistema GM. Usan el prefijo  -->
	  <!-- "Turret" para diferenciarlas de las propiedades de torreta MG     -->
	  <!-- (YawNode, PitchNode, etc.).                                        -->
	  <!--                                                                   -->
	  <!-- IMPORTANTE: Si TurretYawNode y TurretPitchNode NO están           -->
	  <!-- definidos, el sistema usa YawNode/PitchNode como fallback. Esto   -->
	  <!-- permite que un asiento con MG y GM comparta la misma torreta,     -->
	  <!-- o que cada sistema use nodos independientes.                      -->
	  <!--                                                                   -->
	  <!-- TurretYawNode: nodo que rota horizontalmente (guiñada).           -->
	  <!--   Debe ser un GameObject en el prefab del vehículo.              -->
	  <!-- TurretPitchNode: nodo que rota verticalmente (cabeceo).           -->
	  <!--   Normalmente hijo de TurretYawNode.                             -->
	  <!-- TurretYawMin/TurretYawMax: límites de rotación horizontal         -->
	  <!--   en grados. (-180 a 180 = rotación completa)                    -->
	  <!--   Fallback: usa YawMin/YawMax si no están definidos.             -->
	  <!-- TurretPitchMin/TurretPitchMax: límites de rotación vertical       -->
	  <!--   en grados. Fallback: usa PitchMin/PitchMax.                    -->
	  <!-- TurretYawSpeed: velocidad de rotación horizontal (°/s).           -->
	  <!--   Fallback: usa YawSpeed si no está definido.                    -->
	  <!-- TurretPitchSpeed: velocidad de rotación vertical (°/s).           -->
	  <!--   Fallback: usa PitchSpeed si no está definido.                  -->
	  <!-- TurretSnapOnEnter: si es true, la torreta salta instantáneamente  -->
	  <!--   a la posición de la cámara al entrar al asiento, en lugar de   -->
	  <!--   rotar suavemente. Útil en vehículos rápidos donde esperar       -->
	  <!--   la rotación resulta molesto.                                    -->
	  <!--                                                                   -->
	  <!-- NOTA: YawAxisLocal, PitchAxisLocal, YawInvert, PitchInvert,       -->
	  <!-- YawCameraScale, PitchCameraScale, YawCameraOffset y               -->
	  <!-- PitchCameraOffset son compartidos con MG (sin versión con         -->
	  <!-- prefijo Turret). Los lee el mismo sistema WeaponTurretRotation.   -->
	  TurretYawNode=missile_turret_yaw;
	  TurretPitchNode=missile_turret_pitch;
	  TurretYawMin=-180;
	  TurretYawMax=180;
	  TurretPitchMin=-20;
	  TurretPitchMax=45;
	  TurretYawSpeed=90;
	  TurretPitchSpeed=60;
	  TurretSnapOnEnter=false
	"/>
  </vehicle>


  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--   PROPIEDADES LEGACY DE MISIL GUIADO (prefijo GM_*)                   -->
  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--
	Estas propiedades van directamente en el bloque <property> del vehículo
	(NO dentro de VW_Seat). Se leen primero como valores por defecto.
	Si también existe un VW_Seat con Weapon=gm, los valores del VW_Seat
	tienen prioridad sobre estos.

	Usa este formato cuando no necesitas configuración por asiento, o como
	valores por defecto que VW_Seat sobreescribe selectivamente.
  -->
  <vehicle name="GM_Legacy_Completo_Ejemplo">
	<properties>
	  <property name="GM_Enabled"           value="true"/>
	  <property name="GM_Key"               value="G"/>

	  <!-- Bloqueo -->
	  <property name="GM_LockRange"         value="350"/>
	  <property name="GM_ConeAngle"         value="30"/>
	  <property name="GM_AcquireTime"       value="0.22"/>
	  <property name="GM_LoseTime"          value="0.35"/>
	  <property name="GM_LockConfirmTime"   value="0.5"/>
	  <property name="GM_RequireLockToFire" value="false"/>

	  <!-- Vuelo del misil -->
	  <property name="GM_MaxSpeed"          value="180"/>
	  <property name="GM_Accel"             value="180"/>
	  <property name="GM_TurnRate"          value="420"/>
	  <property name="GM_StartSpeed"        value="70"/>
	  <property name="GM_LifeTime"          value="10"/>
	  <property name="GM_ArmingDelay"       value="0.20"/>
	  <property name="GM_FallbackDistance"  value="220"/>
	  <property name="GM_NoTargetGravity"   value="25"/>
	  <property name="GM_MaxTravelDistance" value="650"/>

	  <!-- HUD -->
	  <property name="GM_HudEnabled"        value="true"/>
	  <property name="GM_HudPixels"         value="40"/>
	  <property name="GM_HudOffsetY"        value="1.0"/>
	  <property name="GM_HudThicknessPx"    value="3"/>

	  <!-- Puntos de lanzamiento -->
	  <property name="GM_WeaponNodePrefix"  value="weapon"/>
	  <property name="GM_WeaponMax"         value="2"/>

	  <!-- Munición -->
	  <property name="GM_AmmoItem"          value="Witos_MissileAmmo"/>
	  <property name="GM_RackSize"          value="8"/>
	  <property name="GM_ReloadTime"        value="3.5"/>

	  <!-- Sonidos -->
	  <property name="GM_SndBeep"           value="misc/locking"/>
	  <property name="GM_SndLocked"         value="misc/locked"/>
	  <property name="GM_SndUnlock"         value="misc/unlock"/>
	  <property name="GM_SndLaunch"         value="weapon/missile_launch"/>
	  <property name="GM_SndReload"         value="weapon/missile_reload"/>
	</properties>
  </vehicle>


  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--   MUNICIÓN DE MISILES (items.xml)                                      -->
  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--
	Cada tipo de munición de misil es un item normal en items.xml.
	El sistema de misiles guiados lee las propiedades del item en el momento
	del disparo. Esto permite que distintos tipos de munición sobreescriban
	el daño de explosión, sonidos, partículas Y el comportamiento de vuelo
	(velocidad, guiado, modelo visual…).

	IMPORTANTE: Estas propiedades van dentro de items.xml, NO en
	entityclasses.xml.

	Orden de resolución (para cada propiedad):
	  1. <property name="..."> directa del item
	  2. Propiedades de Action[0] / Action[1] (compatibilidad vanilla)
	Si una propiedad NO está en el item, se hereda de la configuración
	del asiento del vehículo (entityclasses.xml).

	──────────────────────────────────────────────────────────────────────
	REFERENCIA COMPLETA DE PROPIEDADES — ITEM DE MUNICIÓN DE MISIL
	──────────────────────────────────────────────────────────────────────

	── SONIDO / FX ───────────────────────────────────────────────────────
	GM_SndLaunch          Ruta del sonido de lanzamiento.  Sobreescribe
						  SndLaunch del asiento.  También se acepta
						  sin prefijo: SndLaunch=...
	GM_FxExplode          Nombre del prefab/partícula que se instancia en
						  el punto de impacto.  Ej: "explosion_small".

	── DAÑO DE EXPLOSIÓN ─────────────────────────────────────────────────
	Explosion.AudioName   Sonido reproducido en el impacto.  Se busca
						  primero en props del item, después en Actions.
	Explosion.ParticleIndex  Índice en la tabla de partículas del juego
						  (0 = predeterminado).
	Explosion.EntityDamage   Daño de HP a entidades vivas.  Por defecto 1000.
	Explosion.EntityRadius   Radio (m) de la esfera de daño a entidades.  Por defecto 10.
	Explosion.BlockDamage    Daño aplicado a bloques.  Por defecto 2000.
	Explosion.BlockRadius    Radio (m) de la esfera de daño a bloques.  Por defecto 4.
	Explosion.BlastPower     Impulso físico aplicado a entidades y objetos
						  sueltos.  Por defecto 200.

	── DAÑO A VEHÍCULOS (EXTRA) ──────────────────────────────────────────
	GM_VehicleDamage      Daño extra aplicado específicamente a vehículos
						  (EntityVehicle).  Por defecto 0 (usa EntityDamage).
	GM_VehicleRadius      Radio (m) del daño específico a vehículos.  Por defecto 0.

	── SOBREESCRITURAS DE VUELO ──────────────────────────────────────────
	  Estas propiedades son OPCIONALES.  Si se omiten, el misil usa los
	  valores configurados en el asiento del vehículo.  Si están presentes,
	  sobreescriben los valores del asiento sólo para este tipo de munición.

	GM_MaxSpeed           Velocidad máxima del misil (m/s).
	GM_Accel              Aceleración (m/s²).
	GM_TurnRate           Velocidad de giro máxima (°/s).
	GM_StartSpeed         Velocidad inicial al lanzar (m/s).
	GM_ArmingDelay        Segundos tras el lanzamiento antes de que la
						  ojiva esté armada y pueda detonar.
	GM_LifeTime           Duración del misil en segundos.  También se
						  acepta sin prefijo: LifeTime=...
	GM_NoTargetGravity    Gravedad (m/s²) aplicada cuando no hay objetivo
						  bloqueado.
	GM_MaxTravelDistance  Distancia máxima de vuelo (m) antes de autodestruirse.
	GM_FallbackDistance   Si no hay objetivo bloqueado, el misil vuela
						  en línea recta esta distancia (m) antes de caer.
	GM_Guided             true/false — pon false para cohetes no guiados.
						  También se acepta: GM_IsGuided=...

	── SOBREESCRITURAS DE OBJETIVO ───────────────────────────────────────
	GM_LockRange          Rango de detección de bloqueo (m).
	GM_ConeAngle          Semi-ángulo (°) del cono de bloqueo.
	GM_AcquireTime        Segundos para conseguir un bloqueo completo.
	GM_LoseTime           Segundos antes de perder el bloqueo al salir del cono.
	GM_LockConfirmTime    Segundos extra requeridos tras el bloqueo completo
						  antes de que el HUD confirme (BLOQUEADO).

	── NODO DE ARMA ──────────────────────────────────────────────────────
	GM_WeaponNode         Sobreescribe el nodo hardpoint para este tipo
						  de munición.  Formato: "nombre_nodo" o
						  "WeaponNode;nombre_nodo".

	── MODELO VISUAL ─────────────────────────────────────────────────────
	GM_VisualModel        Ruta al modelo 3D del misil mostrado en vuelo
						  (asset bundle).  También se acepta:
						  GM_MissileVisual=...
						  Si no se especifica, el sistema intenta leer
						  "Meshfile" del item (extrae la parte tras '?').
	GM_VisualScale        Escala uniforme del modelo visual.  Por defecto 0.25.

	── RECARGA / RACK ────────────────────────────────────────────────────
	GM_RackSize           Número de misiles por rack (sobreescribe el asiento).
						  También se acepta: RackSize=...
	GM_ReloadTime         Duración de la recarga en segundos (sobreescribe asiento).
						  También se acepta: ReloadTime=...
	GM_SndReload          Sonido de recarga (sobreescribe SndReload del asiento).
						  También se acepta: SndReload=...

	── DISPARO ALTERNADO ─────────────────────────────────────────────────
	GM_AlternateFire      true/false — dispara desde los hardpoints de forma
						  alternada en lugar de izquierda-derecha.
						  También se acepta: AlternateFire=...
  -->

  <!--
  ════════════════════════════════════════════════════════════════════
  EJEMPLO 1 — Misil anti-entidad estándar (configuración por defecto)
  ════════════════════════════════════════════════════════════════════
  -->
  <!--
  <item name="Witos_MissileAmmo">
	<property name="Stacknumber"              value="10"/>
	<property name="HoldType"                value="45"/>
	<property name="Material"                value="Mmetal"/>

	Sonido / FX
	<property name="GM_SndLaunch"            value="weapon/missile_launch"/>
	<property name="GM_FxExplode"            value="explosion_small"/>

	Explosión
	<property name="Explosion.AudioName"     value="explosion_sound"/>
	<property name="Explosion.ParticleIndex" value="0"/>
	<property name="Explosion.EntityDamage"  value="1000"/>
	<property name="Explosion.EntityRadius"  value="10"/>
	<property name="Explosion.BlockDamage"   value="2000"/>
	<property name="Explosion.BlockRadius"   value="4"/>
	<property name="Explosion.BlastPower"    value="200"/>
  </item>
  -->

  <!--
  ════════════════════════════════════════════════════════════════════
  EJEMPLO 2 — Misil de alto explosivo (HE) anti-estructura
  Sobreescribe parámetros de vuelo: vuela más lento pero impacta más fuerte.
  ════════════════════════════════════════════════════════════════════
  -->
  <!--
  <item name="Witos_MissileAmmoHE">
	<property name="Stacknumber"              value="5"/>
	<property name="HoldType"                value="45"/>
	<property name="Material"                value="Mmetal"/>

	Sonido / FX
	<property name="GM_SndLaunch"            value="weapon/missile_launch_heavy"/>
	<property name="GM_FxExplode"            value="explosion_large"/>

	Explosión — daño masivo a bloques, radio amplio
	<property name="Explosion.AudioName"     value="explosion_heavy"/>
	<property name="Explosion.ParticleIndex" value="1"/>
	<property name="Explosion.EntityDamage"  value="800"/>
	<property name="Explosion.EntityRadius"  value="15"/>
	<property name="Explosion.BlockDamage"   value="5000"/>
	<property name="Explosion.BlockRadius"   value="8"/>
	<property name="Explosion.BlastPower"    value="500"/>

	Vuelo — proyectil más lento y pesado
	<property name="GM_MaxSpeed"             value="120"/>
	<property name="GM_Accel"               value="120"/>
	<property name="GM_TurnRate"             value="280"/>
	<property name="GM_LifeTime"             value="12"/>
  </item>
  -->

  <!--
  ════════════════════════════════════════════════════════════════════
  EJEMPLO 3 — Misil anti-vehículo (AV)
  Daño extra específico a EntityVehicle.
  No guiado (cohete dumb) — GM_Guided=false.
  ════════════════════════════════════════════════════════════════════
  -->
  <!--
  <item name="Witos_MissileAmmoAV">
	<property name="Stacknumber"              value="4"/>
	<property name="HoldType"                value="45"/>
	<property name="Material"                value="Mmetal"/>

	Sonido / FX
	<property name="GM_SndLaunch"            value="weapon/rocket_launch"/>
	<property name="GM_FxExplode"            value="explosion_vehicle"/>

	Daño extra a vehículos (se suma a EntityDamage)
	<property name="GM_VehicleDamage"        value="3000"/>
	<property name="GM_VehicleRadius"        value="6"/>

	Explosión estándar
	<property name="Explosion.AudioName"     value="explosion_sound"/>
	<property name="Explosion.ParticleIndex" value="0"/>
	<property name="Explosion.EntityDamage"  value="500"/>
	<property name="Explosion.EntityRadius"  value="8"/>
	<property name="Explosion.BlockDamage"   value="1500"/>
	<property name="Explosion.BlockRadius"   value="3"/>
	<property name="Explosion.BlastPower"    value="300"/>

	Cohete no guiado — vuela recto, no requiere bloqueo
	<property name="GM_Guided"               value="false"/>
	<property name="GM_MaxSpeed"             value="300"/>
	<property name="GM_Accel"               value="400"/>
	<property name="GM_LifeTime"             value="5"/>
	<property name="GM_NoTargetGravity"      value="5"/>
	<property name="GM_MaxTravelDistance"    value="400"/>
  </item>
  -->

  <!--
  ════════════════════════════════════════════════════════════════════
  EJEMPLO 4 — Misil guiado de largo alcance con modelo visual propio
  También sobreescribe el tamaño del rack y el tiempo de recarga.
  ════════════════════════════════════════════════════════════════════
  -->
  <!--
  <item name="Witos_MissileAmmoLR">
	<property name="Stacknumber"              value="2"/>
	<property name="HoldType"                value="45"/>
	<property name="Material"                value="Mmetal"/>

	Visual — malla personalizada del misil en vuelo
	<property name="GM_VisualModel"          value="MyMod/Assets/missile_lr"/>
	<property name="GM_VisualScale"          value="0.35"/>

	Sonido / FX
	<property name="GM_SndLaunch"            value="weapon/missile_lr_launch"/>
	<property name="GM_SndReload"            value="weapon/missile_lr_reload"/>
	<property name="GM_FxExplode"            value="explosion_medium"/>

	Explosión
	<property name="Explosion.AudioName"     value="explosion_sound"/>
	<property name="Explosion.ParticleIndex" value="0"/>
	<property name="Explosion.EntityDamage"  value="1200"/>
	<property name="Explosion.EntityRadius"  value="12"/>
	<property name="Explosion.BlockDamage"   value="2500"/>
	<property name="Explosion.BlockRadius"   value="5"/>
	<property name="Explosion.BlastPower"    value="250"/>

	Vuelo de largo alcance
	<property name="GM_MaxSpeed"             value="220"/>
	<property name="GM_Accel"               value="220"/>
	<property name="GM_TurnRate"             value="380"/>
	<property name="GM_StartSpeed"           value="80"/>
	<property name="GM_ArmingDelay"          value="0.5"/>
	<property name="GM_LifeTime"             value="20"/>
	<property name="GM_MaxTravelDistance"    value="1200"/>
	<property name="GM_FallbackDistance"     value="600"/>

	Objetivo — cono más estrecho, adquisición más rápida
	<property name="GM_LockRange"            value="800"/>
	<property name="GM_ConeAngle"            value="15"/>
	<property name="GM_AcquireTime"          value="0.4"/>
	<property name="GM_LoseTime"             value="0.6"/>
	<property name="GM_LockConfirmTime"      value="1.5"/>

	Rack — sólo 2 misiles, recarga lenta
	<property name="GM_RackSize"             value="2"/>
	<property name="GM_ReloadTime"           value="12"/>

	Disparo alternado (hardpoints izquierdo/derecho por turnos)
	<property name="GM_AlternateFire"        value="true"/>
  </item>
  -->


  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--   TANQUE MULTIASIENTO — EJEMPLO COMPLETO                              -->
  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--
	Un tanque con 3 puestos de combate que muestra todas las características.
	Asiento 0: Conductor con ametralladora frontal fija (sin torreta).
	Asiento 1: Artillero con torreta giratoria de minigun, láser, giro, retroceso.
	Asiento 2: Operador de misiles con bloqueo guiado Y torreta giratoria.
  -->
  <vehicle name="Tanque_MultiAsiento_Ejemplo">

	<!-- Asiento 0: Conductor — Ametralladora frontal fija (simple) -->
	<!--
	  Sin YawNode/PitchNode = el arma apunta donde mira la cámara pero
	  no hay torreta visible que rote. Ideal para armas montadas en el chasis.
	-->
	<property name="VW_Seat0" value="
	  Enabled=true;
	  Weapon=mg;
	  Key=Mouse0;
	  ItemName=gunPistolT1;
	  AmmoItem=ammo9mmBullet;
	  Range=120;
	  AimRange=500;
	  RoundsPerMinute=450;
	  SpreadDegreesHorizontal=2.0;
	  SpreadDegreesVertical=1.5;
	  MuzzleNode=front_muzzle;
	  SndFire=weapon/pistol_fire;
	  LaserEnabled=false;
	  FireParticle=FrontFlash;
	  FireFxDuration=0.05
	"/>

	<!-- Asiento 1: Artillero — Torreta completa con minigun -->
	<!--
	  Requiere el mod "modMinigunTurret" instalado en el vehículo.
	  Si no está instalado, el nodo "top_turret_mesh" se oculta
	  automáticamente y el arma no funciona.
	-->
	<property name="VW_Seat1" value="
	  Enabled=true;
	  Weapon=mg;
	  Key=Mouse0;
	  RequiredMod=modMinigunTurret;
	  VisualNode=top_turret_mesh;
	  ItemName=gunMGT1;
	  AmmoItem=ammo762mmBullet;
	  AmmoItems=ammo762mmBullet,ammo762mmAP;
	  AmmoSwitchKey=X;
	  AmmoSwitchSnd=weapon/ammo_click;
	  Range=220;
	  AimRange=800;
	  RoundsPerMinute=3000;
	  SpreadDegreesHorizontal=0.8;
	  SpreadDegreesVertical=0.8;
	  EntityDamageMul=1.2;
	  BlockDamageMul=0.8;
	  damageType=Piercing;
	  material=bullet;
	  RackSize=200;
	  ReloadTime=5.0;
	  SndFire=weapon/minigun_shot;
	  SndReload=weapon/reload_heavy;
	  MuzzleNode=top_muzzle;
	  YawNode=top_turret_yaw;
	  PitchNode=top_turret_pitch;
	  YawMin=-180;
	  YawMax=180;
	  PitchMin=-10;
	  PitchMax=70;
	  YawSpeed=120;
	  PitchSpeed=90;
	  YawAxisLocal=Y;
	  PitchAxisLocal=X;
	  LaserEnabled=true;
	  LaserColor=1,0,0,0.8;
	  LaserWidth=0.012;
	  SpinNode=top_barrel_spin;
	  SpinAxis=Z;
	  SpinSpeed=3600;
	  SpinSpeedIdle=200;
	  SpinAccel=4000;
	  SpinDecel=2500;
	  SpinMinToFire=0.6;
	  SpinSndStart=weapon/minigun_windup;
	  SpinSndLoop=weapon/minigun_loop;
	  SpinSndStop=weapon/minigun_winddown;
	  RecoilNode=top_recoil_bone;
	  RecoilKick=0.4;
	  RecoilReturnSpeed=15;
	  FireParticle=TopMuzzleFlash;
	  FireFxDuration=0.04;
	  FireFxDisableOnStop=true
	"/>

	<!-- Asiento 2: Operador de Misiles — Misiles guiados con bloqueo        -->
	<!--            Y TORRETA GIRATORIA INDEPENDIENTE                         -->
	<!--                                                                      -->
	<!--  RequireLockToFire=true obliga al jugador a tener un objetivo        -->
	<!--  bloqueado y confirmado antes de disparar.                           -->
	<!--  LockConfirmTime=1.0 añade 1 segundo extra tras el bloqueo total     -->
	<!--  antes de confirmar (más realista).                                  -->
	<!--                                                                      -->
	<!--  La torreta de misiles usa TurretYawNode/TurretPitchNode para        -->
	<!--  rotar el lanzador siguiendo la cámara del jugador.                  -->
	<!--  Los hardpoints (missile_hp0..3) deben ser HIJOS del                 -->
	<!--  TurretPitchNode para que los misiles salgan en la dirección          -->
	<!--  correcta.                                                           -->
	<!--                                                                      -->
	<!--  TurretSnapOnEnter=true hace que la torreta salte directamente        -->
	<!--  a la dirección de la cámara al entrar al asiento, sin animación.    -->
	<property name="VW_Seat2" value="
	  Enabled=true;
	  Weapon=gm;
	  Key=Mouse0;
	  AmmoItem=Witos_MissileAmmo;
	  AmmoItems=Witos_MissileAmmo,Witos_MissileAmmoHE;
	  AmmoSwitchKey=X;
	  LockRange=400;
	  ConeAngle=25;
	  AcquireTime=0.3;
	  LoseTime=0.5;
	  LockConfirmTime=1.0;
	  RequireLockToFire=true;
	  HudEnabled=true;
	  HudPixels=50;
	  HudOffsetY=1.5;
	  HudThicknessPx=3;
	  MaxSpeed=200;
	  Accel=200;
	  TurnRate=350;
	  StartSpeed=60;
	  ArmingDelay=0.3;
	  NoTargetGravity=20;
	  FallbackDistance=300;
	  WeaponNodePrefix=missile_hp;
	  WeaponMax=4;
	  RackSize=4;
	  ReloadTime=8.0;
	  SndBeep=misc/locking;
	  SndLocked=misc/locked_confirm;
	  SndUnlock=misc/lock_lost;
	  SndLaunch=weapon/missile_launch;
	  SndReload=weapon/missile_reload;
	  TurretYawNode=missile_yaw;
	  TurretPitchNode=missile_pitch;
	  TurretYawMin=-120;
	  TurretYawMax=120;
	  TurretPitchMin=-10;
	  TurretPitchMax=50;
	  TurretYawSpeed=60;
	  TurretPitchSpeed=40;
	  TurretSnapOnEnter=true;
	  YawAxisLocal=Y;
	  PitchAxisLocal=X
	"/>
  </vehicle>


  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--   HELICÓPTERO ARMADO CON ARTILLERO DE PUERTA — EJEMPLO                -->
  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--
	Asiento 0: Piloto con misiles guiados y torreta giratoria de misiles.
	Asiento 1: Artillero de puerta con ametralladora de arco limitado.

	NOTA SOBRE EL AUTOPILOTO:
	El botón AP aparece automáticamente en el HUD del asiento en vehículos
	EntityAirplanePro. No necesita configuración XML.
	Cuando está activo, el motor sigue funcionando aunque el conductor
	cambie de asiento. Se desactiva automáticamente cuando todos los
	ocupantes abandonan el vehículo.
  -->
  <vehicle name="Helicoptero_Armado_Ejemplo">

	<!-- Piloto: Misiles guiados con torreta giratoria -->
	<!--
	  La torreta de misiles del piloto tiene un arco frontal limitado
	  (±60° horizontal) y usa TurretSnapOnEnter=false para que la
	  torreta rote suavemente hacia la posición de la cámara.
	-->
	<property name="VW_Seat0" value="
	  Enabled=true;
	  Weapon=gm;
	  Key=G;
	  AmmoItem=Witos_MissileAmmo;
	  LockRange=500;
	  ConeAngle=20;
	  AcquireTime=0.15;
	  LoseTime=0.4;
	  RequireLockToFire=false;
	  MaxSpeed=250;
	  TurnRate=500;
	  WeaponNodePrefix=pylon;
	  WeaponMax=4;
	  RackSize=8;
	  ReloadTime=4.0;
	  SndLaunch=weapon/rocket_launch;
	  TurretYawNode=pylon_yaw;
	  TurretPitchNode=pylon_pitch;
	  TurretYawMin=-60;
	  TurretYawMax=60;
	  TurretPitchMin=-30;
	  TurretPitchMax=15;
	  TurretYawSpeed=120;
	  TurretPitchSpeed=90;
	  TurretSnapOnEnter=false;
	  YawAxisLocal=Y;
	  PitchAxisLocal=X
	"/>

	<!-- Artillero de puerta: ametralladora con arco limitado -->
	<!--
	  YawMin=-90 e YawMax=45 limitan la rotación horizontal a un arco
	  de 135 grados (90° izquierda + 45° derecha).
	  Simula un artillero que solo puede disparar por la puerta lateral.
	-->
	<property name="VW_Seat1" value="
	  Enabled=true;
	  Weapon=mg;
	  Key=Mouse0;
	  ItemName=gunMGT1;
	  AmmoItem=ammo762mmBullet;
	  Range=180;
	  RoundsPerMinute=900;
	  RackSize=100;
	  ReloadTime=4.0;
	  MuzzleNode=door_muzzle;
	  YawNode=door_gun_yaw;
	  PitchNode=door_gun_pitch;
	  YawMin=-90;
	  YawMax=45;
	  PitchMin=-60;
	  PitchMax=20;
	  YawSpeed=200;
	  PitchSpeed=150;
	  LaserEnabled=true;
	  LaserColor=0,1,0,0.6;
	  SndFire=weapon/mg_fire;
	  SndReload=weapon/mg_reload;
	  FireParticle=DoorMuzzleFlash;
	  FireFxDuration=0.06
	"/>
  </vehicle>


  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--   JEEP CON TORRETA SIMPLE — EJEMPLO PARA PRINCIPIANTES                -->
  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--
	El ejemplo más sencillo de vehículo terrestre armado.
	Solo el pasajero (asiento 1) tiene una ametralladora básica.
	Ideal para empezar.

	PASOS PARA QUE FUNCIONE:
	1. Crea un prefab de Unity con un nodo llamado "simple_muzzle"
	2. Asegúrate de que el item "ammo9mmBullet" existe en items.xml
	3. Añade esta propiedad al entityclasses.xml de tu vehículo
	4. ¡Entra en el asiento 1 y dispara con clic izquierdo!
  -->
  <vehicle name="Jeep_Principiante_Ejemplo">
	<property name="VW_Seat1" value="
	  Enabled=true;
	  Weapon=mg;
	  Key=Mouse0;
	  AmmoItem=ammo9mmBullet;
	  Range=100;
	  RoundsPerMinute=300;
	  MuzzleNode=simple_muzzle;
	  SndFire=weapon/pistol_fire;
	  LaserEnabled=true;
	  LaserColor=1,0,0,1
	"/>
  </vehicle>


  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--   REFERENCIA RÁPIDA DE PROPIEDADES                                     -->
  <!-- ═══════════════════════════════════════════════════════════════════════ -->
  <!--
	┌──────────────────────────────┬────────┬──────────┬────────────────────┐
	│ Clave                        │ Tipo   │ Defecto  │ Usado por          │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ GENERAL                      │        │          │                    │
	│ Enabled                      │ bool   │ true     │ MG, GM             │
	│ Weapon                       │ string │ ""       │ MG, GM             │
	│ Key                          │ KeyCode│ Mouse0   │ MG, GM             │
	│ Key_Pad                      │ KeyCode│ Ninguno  │ MG, GM             │
	│ RequiredMod                  │ string │ ""       │ MG, GM             │
	│ VisualNode                   │ string │ ""       │ MG, GM             │
	│ ItemName                     │ string │ ""       │ MG                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ MUNICIÓN                     │        │          │                    │
	│ AmmoItem                     │ string │ ""       │ MG, GM             │
	│ AmmoItems                    │ string │ ""       │ MG, GM             │
	│ AmmoSwitchKey                │ KeyCode│ Ninguno  │ MG, GM             │
	│ AmmoSwitchSnd                │ string │ ""       │ MG, GM             │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ MG — DISPARO                 │        │          │                    │
	│ Range                        │ float  │ 220      │ MG                 │
	│ AimRange                     │ float  │ 800      │ MG                 │
	│ RoundsPerMinute              │ float  │ 720      │ MG                 │
	│ SpreadDegreesHorizontal      │ float  │ 1.0      │ MG                 │
	│ SpreadDegreesVertical        │ float  │ 1.0      │ MG                 │
	│ HitmaskOverride              │ int    │ 8        │ MG                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ MG — DAÑO                    │        │          │                    │
	│ damageType                   │ enum   │ Piercing │ MG                 │
	│ material                     │ string │ bullet   │ MG                 │
	│ EntityDamageMul              │ float  │ 1.0      │ MG                 │
	│ BlockDamageMul               │ float  │ 1.0      │ MG                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ MG — CARGADOR                │        │          │                    │
	│ RackSize                     │ int    │ 999999   │ MG, GM             │
	│ ReloadTime                   │ float  │ 0        │ MG, GM             │
	│ SndFire                      │ string │ ""       │ MG                 │
	│ SndReload                    │ string │ ""       │ MG, GM             │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ MG — PUNTO DE DISPARO        │        │          │                    │
	│ MuzzleNode                   │ string │ mg_muzzle│ MG                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ ROTACIÓN DE TORRETA (MG)     │        │          │                    │
	│ YawNode                      │ string │ ""       │ MG (+ fallback GM) │
	│ PitchNode                    │ string │ ""       │ MG (+ fallback GM) │
	│ YawMin                       │ float  │ -180     │ MG (+ fallback GM) │
	│ YawMax                       │ float  │ 180      │ MG (+ fallback GM) │
	│ PitchMin                     │ float  │ -60      │ MG (+ fallback GM) │
	│ PitchMax                     │ float  │ 60       │ MG (+ fallback GM) │
	│ YawSpeed                     │ float  │ 360      │ MG (+ fallback GM) │
	│ PitchSpeed                   │ float  │ 360      │ MG (+ fallback GM) │
	│ YawAxisLocal                 │ string │ Y        │ MG, GM             │
	│ PitchAxisLocal               │ string │ X        │ MG, GM             │
	│ YawInvert                    │ bool   │ false    │ MG, GM             │
	│ PitchInvert                  │ bool   │ false    │ MG, GM             │
	│ YawCameraScale               │ float  │ 1.0      │ MG, GM             │
	│ PitchCameraScale             │ float  │ 1.0      │ MG, GM             │
	│ YawCameraOffset              │ float  │ 0        │ MG, GM             │
	│ PitchCameraOffset            │ float  │ 0        │ MG, GM             │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ TORRETA DE MISILES (GM)      │        │          │                    │
	│ TurretYawNode                │ string │ ""       │ GM                 │
	│ TurretPitchNode              │ string │ ""       │ GM                 │
	│ TurretYawMin                 │ float  │ =YawMin  │ GM                 │
	│ TurretYawMax                 │ float  │ =YawMax  │ GM                 │
	│ TurretPitchMin               │ float  │ =PitchMin│ GM                 │
	│ TurretPitchMax               │ float  │ =PitchMax│ GM                 │
	│ TurretYawSpeed               │ float  │ =YawSpeed│ GM                 │
	│ TurretPitchSpeed             │ float  │=PitchSpd │ GM                 │
	│ TurretSnapOnEnter            │ bool   │ false    │ GM                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ LÁSER                        │        │          │                    │
	│ LaserEnabled                 │ bool   │ true     │ MG                 │
	│ LaserColor                   │ string │ 1,0,0,1  │ MG                 │
	│ LaserWidth                   │ float  │ 0.015    │ MG                 │
	│ LaserMaxDistance             │ float  │ =Range   │ MG                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ BARRIL GIRATORIO (MINIGUN)   │        │          │                    │
	│ SpinNode                     │ string │ ""       │ MG                 │
	│ SpinAxis                     │ string │ Y        │ MG                 │
	│ SpinSpeed / SpinSpeedFire    │ float  │ 2400     │ MG                 │
	│ SpinSpeedIdle                │ float  │ 0        │ MG                 │
	│ SpinAccel                    │ float  │ 3000     │ MG                 │
	│ SpinDecel                    │ float  │ 2000     │ MG                 │
	│ SpinMinToFire                │ float  │ 0        │ MG                 │
	│ SpinSndMin                   │ float  │ 0.05     │ MG                 │
	│ SpinSndStart                 │ string │ ""       │ MG                 │
	│ SpinSndLoop                  │ string │ ""       │ MG                 │
	│ SpinSndStop                  │ string │ ""       │ MG                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ RETROCESO                    │        │          │                    │
	│ RecoilNode                   │ string │ ""       │ MG                 │
	│ RecoilKick                   │ float  │ 1.2      │ MG                 │
	│ RecoilReturnSpeed            │ float  │ 12       │ MG                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ DESTELLO DEL CAÑÓN           │        │          │                    │
	│ FireParticle                 │ string │ ""       │ MG                 │
	│ FireFxNode                   │ string │ =Muzzle  │ MG                 │
	│ FireFxScale                  │ float  │ 1.0      │ MG                 │
	│ FireFxDuration               │ float  │ 0        │ MG                 │
	│ FireFxDisableOnStop          │ bool   │ true     │ MG                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ GM — BLOQUEO                 │        │          │                    │
	│ LockRange                    │ float  │ 350      │ GM                 │
	│ ConeAngle                    │ float  │ 30       │ GM                 │
	│ AcquireTime                  │ float  │ 0.22     │ GM                 │
	│ LoseTime                     │ float  │ 0.35     │ GM                 │
	│ LockConfirmTime              │ float  │ 0        │ GM                 │
	│ RequireLockToFire            │ bool   │ false    │ GM                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ GM — HUD                     │        │          │                    │
	│ HudEnabled                   │ bool   │ true     │ GM                 │
	│ HudPixels                    │ int    │ 40       │ GM                 │
	│ HudOffsetY                   │ float  │ 1.0      │ GM                 │
	│ HudThicknessPx               │ int    │ 3        │ GM                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ GM — VUELO DEL MISIL         │        │          │                    │
	│ MaxSpeed                     │ float  │ 180      │ GM                 │
	│ Accel                        │ float  │ 180      │ GM                 │
	│ TurnRate                     │ float  │ 420      │ GM                 │
	│ StartSpeed                   │ float  │ 70       │ GM                 │
	│ ArmingDelay                  │ float  │ 0.20     │ GM                 │
	│ NoTargetGravity              │ float  │ 25       │ GM                 │
	│ FallbackDistance             │ float  │ 220      │ GM                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ GM — PUNTOS DE LANZAMIENTO   │        │          │                    │
	│ WeaponNodePrefix             │ string │ weapon   │ GM                 │
	│ WeaponMax                    │ int    │ 2        │ GM                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ GM — SONIDOS                 │        │          │                    │
	│ SndBeep                      │ string │ misc/... │ GM                 │
	│ SndLocked                    │ string │ misc/... │ GM                 │
	│ SndUnlock                    │ string │ misc/... │ GM                 │
	│ SndLaunch                    │ string │ ""       │ GM                 │
	│ SndReload                    │ string │ ""       │ GM                 │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ MUNICIÓN DE MISIL (items.xml)│        │          │                    │
	│ GM_SndLaunch                 │ string │ ""       │ Item munición      │
	│ GM_FxExplode                 │ string │ ""       │ Item munición      │
	│ GM_LifeTime                  │ float  │ 10       │ Item munición      │
	│ Explosion.AudioName          │ string │ ""       │ Item munición      │
	│ Explosion.ParticleIndex      │ int    │ -1       │ Item munición      │
	│ Explosion.EntityDamage       │ int    │ 1000     │ Item munición      │
	│ Explosion.EntityRadius       │ float  │ 10       │ Item munición      │
	│ Explosion.BlockDamage        │ int    │ 2000     │ Item munición      │
	│ Explosion.BlockRadius        │ float  │ 4        │ Item munición      │
	│ Explosion.BlastPower         │ int    │ 200      │ Item munición      │
	└──────────────────────────────┴────────┴──────────┴────────────────────┘

	TABLA DE IK DE ASIENTO
	┌──────────────────────────────┬────────┬──────────┬────────────────────┐
	│ Clave                        │ Tipo   │ Defecto  │ Usado por          │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ IK DE ASIENTO                │        │          │                    │
	│ SeatIK                       │ bool   │ false    │ MG, GM             │
	│ IK_LeftHandPosition          │ vec3   │ (ninguno)│ MG, GM             │
	│ IK_LeftHandRotation          │ vec3   │ 0,0,0    │ MG, GM             │
	│ IK_LeftHandParent            │ string │ ""       │ MG, GM             │
	│ IK_RightHandPosition         │ vec3   │ (ninguno)│ MG, GM             │
	│ IK_RightHandRotation         │ vec3   │ 0,0,0    │ MG, GM             │
	│ IK_RightHandParent           │ string │ ""       │ MG, GM             │
	│ IK_LeftFootPosition          │ vec3   │ (ninguno)│ MG, GM             │
	│ IK_LeftFootRotation          │ vec3   │ 0,0,0    │ MG, GM             │
	│ IK_LeftFootParent            │ string │ ""       │ MG, GM             │
	│ IK_RightFootPosition         │ vec3   │ (ninguno)│ MG, GM             │
	│ IK_RightFootRotation         │ vec3   │ 0,0,0    │ MG, GM             │
	│ IK_RightFootParent           │ string │ ""       │ MG, GM             │
	├──────────────────────────────┼────────┼──────────┼────────────────────┤
	│ ASIENTO SIGUE TORRETA        │        │          │                    │
	│ SeatFollowsTurret            │ bool   │ false    │ MG, GM             │
	│ SeatFollowsTurretYawScale    │ float  │ 1.0      │ MG, GM             │
	│ SeatFollowsTurretPitch       │ bool   │ false    │ MG, GM             │
	│ SeatFollowsTurretPitchScale  │ float  │ 1.0      │ MG, GM             │
	│ SeatFollowsPivotOffset       │ vec3   │ ""       │ MG, GM             │
	└──────────────────────────────┴────────┴──────────┴────────────────────┘

	VALORES DE EJE (para YawAxisLocal, PitchAxisLocal, SpinAxis):
	  X, Y, Z, -X, -Y, -Z

	VALORES DE TECLA (para Key, AmmoSwitchKey):
	  Mouse0, Mouse1, Mouse2, G, X, F, T, Alpha1..Alpha9, etc.
	  Lista completa: https://docs.unity3d.com/ScriptReference/KeyCode.html

	TIPOS DE DAÑO (para damageType):
	  Piercing, Bashing, Slashing, Heat, Electrical, Radiation

	FORMATO DEL COLOR DEL LÁSER:
	  R,G,B,A  (cada valor entre 0.0 y 1.0)
	  Ejemplos: 1,0,0,1 (rojo)  |  0,1,0,0.6 (verde semitransparente)
				0,0.5,1,1 (azul claro)  |  1,1,0,0.9 (amarillo)

	NOTAS IMPORTANTES:
	● RackSize=999999 (defecto) significa cargador ilimitado (sin recarga).
	● LaserMaxDistance usa el valor de Range si no se especifica.
	● FireFxNode usa MuzzleNode si no se especifica.
	● SpinSpeed y SpinSpeedFire son alias (mismo efecto).
	● RequiredMod: si está vacío, el arma siempre está disponible.
	  Si se especifica, el mod indicado debe estar instalado en el vehículo.
	● VisualNode: si se especifica, el nodo indicado se muestra/oculta
	  automáticamente según si RequiredMod está instalado.
	● El Autopiloto (botón AP en el HUD del asiento) solo funciona en
	  vehículos EntityAirplanePro. No necesita configuración XML.
	● Al cambiar munición con AmmoSwitchKey, se fuerza una recarga
	  si ReloadTime > 0 (simula cambiar el cargador).
	● Los misiles buscan zombis, animales, vehículos y otros jugadores
	  como objetivos válidos. No se bloquean en el propio vehículo ni en el operador.

	NOTAS SOBRE LA TORRETA GIRATORIA DE MISILES:
	● TurretYawNode y TurretPitchNode son exclusivos del sistema GM.
	  Si no se definen, el sistema usa YawNode/PitchNode como fallback
	  (permite compartir una torreta entre MG y GM en el mismo asiento).
	● TurretYawMin/Max, TurretPitchMin/Max, TurretYawSpeed y
	  TurretPitchSpeed también usan fallback a sus equivalentes sin prefijo
	  (YawMin, PitchMin, YawSpeed, etc.) si no están definidos.
	● YawAxisLocal, PitchAxisLocal, YawInvert, PitchInvert,
	  YawCameraScale, PitchCameraScale, YawCameraOffset y
	  PitchCameraOffset NO tienen versión con prefijo Turret.
	  Son compartidos por MG y GM.
	● Los hardpoints (weapon0, weapon1...) deben ser HIJOS del
	  TurretPitchNode para que los misiles salgan en la dirección
	  que apunta la torreta.
	● TurretSnapOnEnter=true es útil en vehículos rápidos (aviones,
	  helicópteros) donde esperar que la torreta rote al entrar al
	  asiento puede resultar molesto. La torreta salta instantáneamente
	  a la posición de la cámara.
	● La torreta se valida en tiempo de ejecución: si los nodos
	  TurretYawNode o TurretPitchNode no existen en el prefab, la
	  rotación de torreta GM se desactiva silenciosamente.
	● Cada asiento + vehículo tiene su propio estado de rotación
	  independiente (curYaw, curPitch). Cambiar de asiento reinicia
	  el estado de la torreta.

	NOTAS SOBRE EL IK DE ASIENTO:
	● SeatIK=true es obligatorio para activar cualquier objetivo IK en el asiento.
	● Una extremidad solo se activa si su IK_{Extremidad}Position está definida.
	  La posición es obligatoria; Rotation y Parent son opcionales.
	● IK_{Extremidad}Parent adjunta el objetivo IK a un nodo con nombre, de forma
	  que se mueve con el modelo (p.ej. un volante o mango de arma).
	● El sistema busca recursivamente en el prefab del vehículo Y en la raíz de
	  la entidad, por lo que la jerarquía profunda no es un problema.
	● Los objetivos IK se aplican con un frame de retardo (coroutine) para
	  asegurar que el animator está listo antes de asignar los targets.
	● Los objetivos IK se destruyen automáticamente cuando el jugador abandona el asiento.

	NOTAS SOBRE ASIENTO SIGUE TORRETA:
	● Rota visualmente el cuerpo del jugador con la guiñada de la torreta
	  (y opcionalmente el cabeceo). Hace que el personaje parezca que
	  apunta de verdad en lugar de mirar al frente.
	● SeatFollowsTurretYawScale permite limitar el giro del cuerpo a una
	  fracción de la rotación de la torreta (p.ej. 0.5 = la mitad del ángulo).
	● SeatFollowsPivotOffset define un desplazamiento (en espacio local del
	  modelo) desde la posición de reposo del personaje. El cuerpo orbita
	  alrededor de ese pivote, útil cuando el asiento no está centrado en
	  el eje de la torreta.
	● Key_Pad permite asignar un botón de mando como disparador secundario.
	  El arma dispara si se pulsa Key O Key_Pad.
	  Key_Pad también se puede reasignar por tipo de vehículo desde el
	  panel de teclas del juego (sin modificar ningún XML).
  -->

</weapon_reference>
