Modding visual: mapas, vehículos, ropa y texturas
Todo el modding visual de un servidor: las herramientas (OpenIV, CodeWalker, Blender + Sollumz), los formatos de GTA, y cómo añadir y editar mapas/MLO, vehículos, ropa y texturas que se transmiten al cliente, con rendimiento, legalidad y seguridad.
Hasta ahora has trabajado con scripts: lógica en Lua que reacciona a eventos. Pero gran parte de lo que hace único a un servidor no es código, sino contenido: coches que no existen en el GTA base, comisarías con interior, gasolineras nuevas, una isla entera, uniformes a medida o el reskin de un vehículo policial. Todo eso son assets: modelos 3D y texturas que tu servidor envía al juego de cada jugador. Este capítulo es tu mapa del modding visual: las herramientas, los formatos, y cómo añadir y EDITAR mapas, vehículos, ropa y texturas, con honestidad sobre dónde se complica.
Qué es un asset y cómo llega al jugador
Un asset es un archivo de modelo o textura del motor de GTA V. Los más habituales son los .yft (geometría con física, p. ej. la carrocería de un coche), los .ydr (modelos estáticos como props o un edificio), los .ytd (diccionarios de texturas) y los .ymap (mapas que colocan props e interiores en el mundo). Tú no los metes en el juego del jugador a mano: los pones en una carpeta llamada stream/ dentro de tu recurso, y FiveM se encarga de transmitirlos («stream») al cliente cuando se conecta.
resources/
└── crx_adder/
├── fxmanifest.lua
├── stream/
│ ├── adder.yft
│ └── adder.ytd
└── data/
├── handling.meta
├── vehicles.meta
├── carcols.meta
└── carvariations.metaRecurso de un coche add-on
La carpeta stream/ es mágica para FiveM: cualquier asset que pongas dentro se envía automáticamente al cliente, esté en subcarpetas o no. No necesitas declararlos uno a uno. Lo que SÍ hay que declarar son los .meta de datos, que no son assets sino configuración que el motor tiene que registrar.
Los formatos de archivo de GTA V
Antes de tocar nada conviene saber qué es cada extensión. GTA V guarda casi todo dentro de archivos empaquetados y comprimidos; las herramientas de modding existen para abrir, leer y volver a empaquetar esos formatos. Esta es la chuleta básica que vas a usar a diario.
- .rpf (RAGE Package File): el «zip» propietario de GTA. Dentro viven todos los demás archivos. Se abren con OpenIV. Los DLC del juego, los mods grandes y el contenido base están empaquetados así.
- .ydr (Drawable): un modelo 3D estático sin física compleja: un prop, una farola, un edificio. Lleva su geometría, materiales y referencias a texturas.
- .ydd (Drawable Dictionary): un contenedor con varios drawables dentro. Es el formato típico de la ROPA del ped (cada componente y sus variaciones).
- .yft (Fragment): un modelo con física y piezas rompibles. Es el formato de los VEHÍCULOS (chasis, puertas, capó que se abolla) y de objetos destructibles.
- .ytd (Texture Dictionary): un diccionario de texturas: el «paquete» de imágenes (.dds) que visten un modelo. Reskins, liveries y pintura van aquí.
- .ymap (Map): coloca objetos en el mundo: posiciones, rotaciones y qué props aparecen. Es lo que «pone» un MLO o unos coches aparcados en su sitio.
- .ytyp (Type Definitions): define los tipos de props y de interiores (qué entidades existen y sus límites). Muchos MLO lo necesitan para que el juego «conozca» sus piezas.
- .ybn (Bounds / colisiones): la geometría invisible con la que choca el jugador y los coches. Sin .ybn correcto atraviesas paredes o flotas.
Regla mental: .yft = se mueve/rompe (coches), .ydr = está quieto (props/edificios), .ydd = se viste (ropa), .ytd = colorea/texturiza, .ymap = coloca, .ytyp = define, .ybn = choca. Si memorizas esto, el 90% de los tutoriales dejan de sonar a chino.
Las herramientas del oficio
Crear o adaptar assets no se hace en un editor de texto: hay programas especializados, cada uno para una fase. No necesitas dominarlos todos para INSTALAR contenido ajeno, pero sí para entenderlo y, llegado el caso, repararlo o crearlo desde cero.
- OpenIV: el explorador y editor de los archivos del propio GTA V. Abre los .rpf, te deja mirar cómo están hechos los assets originales, extraerlos, editar metadatos y reemplazar texturas. Tiene un «modo edición» (Edit mode) que hay que activar para cambiar archivos, y soporta paquetes .oiv que instalan mods de un clic. Es la base de todo.
- CodeWalker: el visor y editor del mundo. Con él vuelas por todo el mapa de GTA, abres y editas .ymap, colocas y mueves props con precisión milimétrica, sacas coordenadas exactas (X Y Z y heading), revisas colisiones .ybn y compruebas que un MLO no choca con otro antes de subirlo. Permite crear interiores básicos y ymaps nuevos.
- Blender + Sollumz: Blender es el programa de modelado 3D (gratuito) y Sollumz es el complemento (addon) imprescindible que le enseña a leer y exportar los formatos de GTA: importas/exportas .ydr, .ydd, .yft y .ytd, ajustas materiales al shader de GTA, pintas pesos del esqueleto en la ropa y exportas modelos listos para el juego. Es la vía moderna para crear o portar un coche, un prop o una prenda.
- 3DS Max + GIMS Evo: la alternativa clásica al binomio Blender+Sollumz. GIMS Evo es el plugin equivalente para 3DS Max. Mucha gente veterana sigue ahí; si empiezas hoy, Blender + Sollumz es más accesible y gratis.
- Photoshop o GIMP + plugin DDS: para crear y editar las texturas (.dds) que luego empaquetas en un .ytd. Necesitas el plugin de DDS (Intel/NVIDIA en Photoshop; GIMP lo trae casi nativo) para abrir y guardar con la compresión correcta.
Sé honesto contigo mismo sobre la curva: instalar un pack ya hecho es cuestión de minutos; modelar un coche propio en Blender, ajustar un MLO en CodeWalker o resolver los pesos del esqueleto de una prenda es un oficio que lleva semanas de práctica. Empieza por instalar y editar; crea desde cero cuando ya domines el flujo.
Añadir y editar un MLO (un interior o mapa)
Un MLO («Map Loading Object») es un interior o una zona del mapa hecha a medida: la planta de una comisaría, un club, una mansión, o todo un barrio. Llega como un recurso con sus assets en stream/ y uno o varios .ymap que colocan esa geometría y esos props en coordenadas concretas del mundo. La forma sencilla de cargar los mapas de un recurso es declararlo como mapa.
fx_version 'cerulean'
game 'gta5'
author 'TuNombre'
description 'Comisaria interior MLO'
version '1.0.0'
-- Marca este recurso como un mapa: carga los .ymap automaticamente
this_is_a_map 'yes'
files {
'data/comisaria.ymap',
'data/props.ytyp'
}
-- Registra las definiciones de tipos (props/entidades) del MLO
data_file 'DLC_ITYP_REQUEST' 'data/props.ytyp'fxmanifest.lua de un MLO
Con this_is_a_map 'yes', FiveM trata los .ymap del recurso como parte del mundo. Muchos MLO incluyen también un .ytyp (definición de tipos de props), que se registra con data_file 'DLC_ITYP_REQUEST'. Una vez cargado, el interior existe en el mundo: para verlo necesitas las coordenadas de entrada que suele indicar el autor del MLO, y te teletransportas allí con un comando de admin (por ejemplo /tp x y z) para comprobarlo.
Editar un .ymap en CodeWalker, paso a paso
Editar un mapa no da miedo cuando entiendes el ciclo: abres, mueves, exportas, pruebas. CodeWalker hace todo lo visual; tú solo decides dónde va cada cosa.
- Abre CodeWalker (RPF Explorer) y arrastra el .ymap, o usa el World/Project para cargarlo sobre el mapa real y ver dónde cae.
- Activa el modo edición del proyecto (Project window → New Project → añade el .ymap) para poder mover y crear entidades, no solo mirar.
- Selecciona un prop existente y muévelo/rótalo con los gizmos; o añade props nuevos desde el catálogo de la entidad (Add Entity) buscando el modelo por nombre.
- Para sacar coordenadas exactas de una entrada, sitúa la cámara, mira la posición (Position X Y Z) y el ángulo: eso es lo que pasarás a un teleport o a un blip.
- Guarda el .ymap (Save) y, si tocaste tipos nuevos de props, asegúrate de tener el .ytyp correspondiente listado en el fxmanifest.
- Vuelve a FiveM, reinicia el recurso (restart) y comprueba in-game. Si algo no aparece, revisa que el modelo del prop esté en stream/ o en un DLC ya cargado.
Las colisiones (.ybn) son la causa nº1 de MLOs «rotos»: si caminas por el suelo nuevo pero te caes al vacío, o atraviesas una pared, falta o falla el .ybn de esa zona. CodeWalker te deja visualizar las collision bounds para localizar el hueco. Un interior bonito sin colisión es decorado, no un sitio jugable.
Si tras cargar el MLO ves geometría flotando, paredes que atraviesas o el interior antiguo mezclado con el nuevo, casi siempre es un conflicto entre dos recursos que tocan la misma zona, o falta el .ytyp. Cárgalo solo, sin otros mapas activos, para aislar el problema.
Añadir y editar un vehículo add-on
Un coche add-on es un vehículo nuevo que convive con los del GTA base, con su propio nombre de aparición («spawn name»). Necesita los modelos en stream/ (el .yft del chasis y su .ytd de texturas) y cuatro archivos .meta que describen sus propiedades: cómo conduce, qué nombre interno tiene, sus colores y sus variaciones. Esos .meta van en files{} del fxmanifest y, además, se conectan al motor con una línea data_file por cada uno.
fx_version 'cerulean'
game 'gta5'
author 'TuNombre'
description 'Coche add-on Adder'
version '1.0.0'
-- Los .meta son datos, no scripts: hay que listarlos en files{}
files {
'data/handling.meta',
'data/vehicles.meta',
'data/carcols.meta',
'data/carvariations.meta'
}
-- Y conectarlos al motor con su tipo correspondiente:
data_file 'HANDLING_FILE' 'data/handling.meta'
data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'
data_file 'CARCOLS_FILE' 'data/carcols.meta'
data_file 'VEHICLE_VARIATION_FILE' 'data/carvariations.meta'fxmanifest.lua de un coche add-on
- vehicles.meta: define el coche, incluido su spawn name (el <modelName>). Es el nombre que usarás para spawnearlo. También enlaza el modelo, el audio y la clase del vehículo.
- handling.meta: cómo conduce (velocidad punta, aceleración, frenada, agarre, masa, distribución de peso, daños). Es el archivo que tocarás para «balancear» un coche.
- carcols.meta: colores, combinaciones de pintura y mods/extras disponibles (kits, alerones).
- carvariations.meta: qué variaciones, colores por defecto, llantas y extras aparecen ligados a ese modelo cuando spawnea.
Tras poner el recurso en resources/ y añadir ensure crx_adder en tu server.cfg, reinicia. Para probarlo, si tu framework trae un comando de spawn úsalo (por ejemplo /car adder), donde «adder» es el spawn name que viste en vehicles.meta. Si escribes mal el spawn name no aparecerá nada: no es un error de código, simplemente no existe un modelo con ese nombre.
Editar el comportamiento: handling, colores y extras
El balance de un vehículo se toca en el handling.meta. No hace falta Blender para esto: es un XML que abres con cualquier editor de texto. Los campos clave: fMass (peso en kg), fInitialDriveForce (empuje), fBrakeForce (frenada), fTractionCurveMax/Min (agarre) y nInitialDriveGears/fInitialDriveMaxFlatVel (velocidad). Cambia poco y prueba: subir la masa hace el coche más estable pero más lento, bajar la frenada lo hace peligroso.
<Item type="CHandlingData">
<handlingName>adder</handlingName>
<fMass value="1800.000" />
<fInitialDriveForce value="0.350" />
<fBrakeForce value="1.200" />
<fTractionCurveMax value="2.700" />
<fTractionCurveMin value="2.300" />
<fInitialDriveMaxFlatVel value="180.000" />
</Item>Fragmento de handling.meta — ajusta peso, fuerza, frenada, agarre y velocidad
Los colores y extras se gestionan en carcols.meta y carvariations.meta. Los «extras» (extra_1, extra_2…) son piezas opcionales del modelo (un portaequipajes, una barra de luces): se activan por script o desde un menú de tuning. Si quieres retocar la geometría del coche en sí (añadir un alerón modelado, corregir un faro), ahí sí abres el .yft en Blender con Sollumz, editas la malla, y vuelves a exportar.
Regla práctica: un coche, una prueba. Mete UN vehículo, reinícialo y compruébalo en el juego antes de meter el siguiente. Así, si algo peta, sabes exactamente cuál fue. Y nunca edites handling de 50 coches a la vez sin probar: un valor mal puesto puede hacer que el coche salga volando al spawnear.
Ropa (clothing): vestir al ped
La ropa en GTA V no es una sola pieza: el personaje (ped) se compone de partes intercambiables. Cada parte tiene un «drawable» (la malla 3D de la prenda) y una «texture» (el dibujo/color de esa prenda). Cambiar de camiseta = cambiar el número de drawable del componente torso; cambiar de color de esa camiseta = cambiar el número de textura. Hay dos grandes grupos: componentes (lo que cubre el cuerpo) y props (accesorios que se ponen y quitan: cascos, gafas, gorros).
- Componentes (component IDs): 0 = cabeza/cara, 1 = máscara, 2 = pelo, 3 = torso/brazos (manos), 4 = piernas (pantalón), 5 = mochila/parachute, 6 = pies (zapatos), 7 = accesorios (cadenas), 8 = camiseta interior (undershirt), 9 = chaleco/armor, 10 = parches/decals, 11 = torso (chaqueta/abrigo, la prenda principal de arriba).
- Props (prop IDs): 0 = sombreros/cascos, 1 = gafas, 2 = pendientes/orejas, 6 = relojes, 7 = pulseras. Se ponen y quitan de forma independiente.
- OJO con el truco clásico: la prenda visible de arriba suele ser el componente 11 (torso), y el 3 (torso/brazos) controla qué manos/brazos asoman. Por eso a veces cambias la chaqueta y se ven unas manos raras: hay que casar el 11 con el 3 correcto.
Hay dos formas de meter ropa nueva en un servidor, y conviene elegir bien:
- Ropa add-on (por stream): metes los .ydd (drawables) y .ytd (texturas) en stream/ junto a sus .meta, y se añade como ropa extra a un modelo de ped (mp_m_freemode_01 / mp_f_freemode_01). Es lo más limpio para uniformes de servicios (policía, EMS) y packs grandes.
- Ropa por script: recursos de vestuario como illenium-appearance, qb-clothing o codem-vehiclekeys/clothing gestionan tiendas de ropa y guardan el atuendo del jugador en base de datos. Muchos packs comerciales vienen ya listos para ser usados desde estos sistemas (eup-style).
Crear o portar una prenda en Blender + Sollumz
Crear ropa es de lo más exigente porque la malla tiene que deformarse con el esqueleto del personaje. El flujo con Sollumz es: importas el .ydd base del componente que vas a sustituir (para tener el esqueleto correcto), modelas o importas tu prenda, y haces lo crítico: los skin weights (pesos del esqueleto). Cada vértice de la ropa tiene que estar «pegado» a los huesos correctos para que se mueva con el cuerpo; si los pesos están mal, la prenda se estira como chicle al correr.
- Importa el drawable base con Sollumz para heredar el esqueleto (armature) del ped.
- Modela/importa la prenda y emparenta la malla al armature; transfiere o pinta los weights (Weight Paint o Data Transfer desde el cuerpo base).
- Asigna el material al shader de GTA (Sollumz) y crea/empaqueta su .ytd de texturas.
- Exporta como .ydd y nómbralo según la numeración del componente y su variación (drawable + texture index).
- Pruébalo cambiando el componente al número que le toque y revisa LOD (a distancia) y deformación al correr/agacharse.
La numeración importa: si tu prenda es el drawable 12 del torso (componente 11), tiene que llamarse y registrarse exactamente como tal, con sus texturas como variaciones (0,1,2…). Un fallo típico es la prenda que aparece en la tienda pero sale invisible o como una bola negra: casi siempre es numeración mal casada o el .ytd no enlazado.
Texturas: el .ytd por dentro
Una textura es la imagen que recubre un modelo: la pintura de un coche, el dibujo de una camiseta, el cartel de una tienda. En GTA viven empaquetadas en un .ytd (texture dictionary). Para reskins no necesitas Blender: basta OpenIV para abrir el .ytd, exportar la imagen, editarla y volver a meterla.
- Abre el .ytd con OpenIV (activa el Edit mode). Verás la lista de texturas que contiene.
- Exporta la textura que quieras cambiar como .dds (o .png para editar más cómodo).
- Edítala en Photoshop/GIMP respetando tamaño y nombre. Vuelve a guardarla como .dds con la compresión correcta.
- Reimpórtala en el .ytd (Replace) manteniendo el mismo nombre interno, guarda, y prueba in-game.
Sobre el formato DDS: GTA usa texturas comprimidas en bloques. Usa DXT1 (BC1) para texturas sin transparencia (pintura opaca, asfalto), DXT5 (BC3) cuando necesitas canal alfa (transparencias, logos con borde recortado). El tamaño debe ser potencia de 2 (256, 512, 1024, 2048, 4096) y conviene generar mipmaps (versiones reducidas que el juego usa a distancia) para que no parpadee ni gaste de más.
Coherencia de nombres: si reemplazas una textura, el modelo la busca por su nombre interno. Si renombras o cambias el tamaño/compresión sin querer, el coche puede salir blanco, rosa fucsia (el «no texture» de GTA) o negro. Rosa = textura perdida; es la señal universal de «no encuentro este material».
Rendimiento y streaming: el coste oculto de los assets
Cada asset que añades tiene dos costes: el jugador tiene que descargarlo al conectar (más megas = entrada más lenta al servidor) y el juego tiene que mantenerlo en memoria (más RAM y, si abusas, caídas de FPS y crasheos por falta de memoria). Un servidor con 300 coches add-on en 4K y diez MLO gigantes puede tardar minutos en cargar y rendir mal en máquinas modestas. El streaming no es gratis: es el factor que más echa para atrás a jugadores nuevos.
- Optimiza las texturas (.ytd): resoluciones absurdas (4K en una llanta o en un cartel diminuto) hinchan la descarga sin que se note en pantalla. Baja a 1024 o 512 lo que no se mira de cerca.
- Cuida los LODs (niveles de detalle): un modelo debe simplificarse a distancia. Un coche o MLO sin LODs renderiza la malla completa siempre y dispara la carga gráfica.
- No abuses de MLO enormes con muchísimos props si solo usas un rincón. Cada prop colocado es geometría que se carga.
- Vigila el peso total de la carpeta de recursos: es exactamente lo que cada jugador descarga la primera vez (y tras cada actualización).
- Mide con resmon (consola del cliente, tecla F8 → escribe resmon): un recurso de mapa o de coches debería marcar 0.00–0.01 ms en reposo. Si un recurso de stream dispara CPU/memoria, algo va mal.
- Quita lo que no uses. Cada asset cargado pesa y ocupa cupo de streaming aunque nadie lo pise.
El tamaño del recurso afecta directamente al tiempo de unión: lo que tarda un jugador en pasar de «Joining…» a estar dentro es, en gran parte, descargar tus assets. Un servidor ligero retiene; uno que tarda 4 minutos en cargar pierde jugadores antes de que entren.
Legalidad y seguridad: el lado peligroso
Los assets tienen autor y, muchas veces, licencia o precio. Usar contenido sin permiso es robar trabajo ajeno y puede traerte problemas (incluido el cierre del servidor y baneos de Cfx/Tebex). Pero hay un riesgo aún más directo: los packs «gratis» o «filtrados» que circulan por sitios dudosos y servidores de Discord random a veces vienen con backdoors: código oculto que da control de tu servidor a un tercero, borra tu base de datos o roba datos de tus jugadores.
- Usa assets con permiso: comprados, propios, o liberados explícitamente para uso libre. Respeta los TOS de Rockstar y de Cfx.re (FiveM).
- Desconfía de los packs «filtrados», «leaks» o «gratis premium»: si parece demasiado bueno, suele esconder algo.
- Escanea y revisa cualquier recurso de origen incierto antes de meterlo: un pack de coches o de ropa NO necesita un server.lua que haga peticiones a webs raras, que use PerformHttpRequest a dominios desconocidos, ni código ofuscado/encadenado.
- Sospecha del código ofuscado (cadenas en base64, loadstring, nombres ilegibles): es la firma habitual de un backdoor escondido dentro de lo que debería ser solo modelos.
- Prueba lo desconocido en un servidor local aislado, nunca directamente en producción, y mantén copias de seguridad de tu base de datos.
Crxative-M incluye auditoría de seguridad de recursos precisamente para esto: detectar backdoors y patrones peligrosos en packs antes de que lleguen a tu servidor. Aun así, la regla de oro no cambia: si no confías en la fuente, no lo subas a producción.
Cierre honesto: el modding visual tiene una curva alta y muy desigual. Reskinar una textura o mover un prop lo haces hoy mismo; crear un coche o una prenda desde cero en Blender lleva semanas. Empieza por EDITAR lo que ya existe (reskins de vehículos, mover props en CodeWalker, balancear un handling) y deja la creación desde cero para cuando el flujo te resulte natural. Cada asset que dominas es una pieza de identidad propia para tu servidor.
¿Una duda sobre esto? El chat de la IA lo sabe todo y te responde con código.
Pregunta a la IA