Calificación:
  • 4 voto(s) - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Diseñando una pista en 3D [+Assetto Corsa +mods +tutorial +hilo de seguimiento]
Parte 11. Custom Shader Patch (CSP), SOL y Content Manager (CM): iluminación nocturna, lluvia, sonidos ambientales, etc.


Assetto Corsa se estuvo desarrollando desde el año 2010 hasta 2020, publicándose diversas actualizaciones desde la "early access" hasta la última versión (v.1.16.3). Entre medias los jugadores demandaban más opciones para el juego, pero la empresa desarrolladora (Kunos Simulazioni) se negaba alegando que no era posible, que el motor gráfico (Unreal Engine 4) no lo soportaría.

El porqué no se sabe (¿ya ganaban bastante con el juego tal y como estaba?), pero sí es posible. Un usuario llamado Ilja, conocido como X4fab, desarrolló el Custom Shader Patch (CSP), que agrega nuevos shaders y por lo tanto nuevas opciones de iluminación, reflejos y demás. Se desarrolló conjuntamente con Peter Boose el SOL, un parche que agrega nuevas climatologías. El resultado es que podemos agregar nuevas opciones al juego: correr de noche con iluminación en el circuito, correr con lluvia, correr en realidad virtual (VR)... un montón de cosas. También creó el Content Manager (CM), un gestor del juego que podemos usar opcionalmente.

Todo esto funciona como una extensión del juego original, añade más opciones sin modificar el contenido original. Hasta la parte 10 del tutorial he hecho todo lo que se puede hacer con el juego de serie. A partir de aquí es necesario CSP, SOL y CM si queremos agregar todas estas opciones a nuestra pista.


- Preparando la extensión para nuestra pista.

La extensión se aplica a todos los layouts y todos los modos de juego de la pista, salvo que lo especifiquemos.

Abrimos la carpeta de nuestra pista y creamos una nueva carpeta llamada "extension".

[Imagen: jD89Yfx.png]

[Imagen: HylNvZq.png]

Entramos en la carpeta creada y creamos el archivo "ext_config.ini".

[Imagen: lxdPzxj.png]

Es en este archivo donde hay que "programar" todas las nuevas funciones de la pista. Iluminación, modo lluvia y nuevos sonidos, hasta el momento. En el futuro es posible que se añadan más efectos, no se sabe, eso dependerá del desarrollador.

¿De dónde sacamos todas estas líneas de programación? De otra pista que ya tenga estas líneas. Copiar, pegar, y cambiar algunos parámetros para adaptarlos a nuestra pista. Empiezo con la iluminación.


- Iluminación nocturna.

Aquí es donde va a cobrar importancia el haber separado los materiales que se iluminan de los que no, y las geometrías de los objetos que iluminan de los que no.

Lo primero, la iluminación en el juego no funciona como en la vida real. Si tú enciendes una bombilla, esa bombilla emite luz que se refleja en la superficie. En el juego son dos cosas separadas: la parte incandescente del foco (yo lo llamo GLOW) y la parte que emite la luz (la llamo EMISSIVE). Se utiliza material para glow (por ejemplo, de una farola solo el material de la bombilla) y para emissive el objeto (uno solo, en una farola toda ella si fuese objeto de una pieza).

¿Por qué así? Pues porque si selecciono glow para un objeto, veremos todo el objeto brillando, como si fuese todo bombilla. En el ejemplo de la farola veríamos todo el metal brillando. Por eso separo materiales: uno para la parte que brilla y otro para la que no, aunque sea un único objeto.

Los objetos más complejos, por ejemplo coches aparcados, igual. Suelen tener múltiples materiales y partes. Asigno glow blanco para faros delanteros, glow rojo para luces traseras, y si tuviera más elementos que se iluminan (sirenas), otro glow para cada uno de ellos.

Resumiendo. Podemos hacer que un foco se encienda y brille, pero que no ilumine. O un objeto que no brille, pero que emita luz y se refleje en las superficies. Es decir, que van por separado, y que por lo tanto si queremos que la bombilla de un foco brille y emita luz tendremos que hacer dos operaciones. Esto es bueno, nos permite que un único emissive ilumine un área entera, pero que dentro de esa área haya varios glows. Esto reduce muchísimo la carga en el procesador sin quitarle realismo, además no tiene sentido que varios emissive se solapen.

Vamos allá. Abrimos nuestro ext_config.ini y paralelamente abrimos el de otra pista que tenga estos efectos. Vamos a copiar partes de esa pista terminada y pegarlas en la pista que estamos desarrollando.

Empezamos por copiar:

Cita:[LIGHTING]
LIT_MULT = 1

[INCLUDE]
INCLUDE=common/conditions.ini, common/conditions_blm.ini

[CONDITION_30]
; turns lights on a little earlier (5° above horizon). used for indoor lights, windows, etc.
NAME = SMOOTHSUNA
INPUT = SUN
LUT = (|0=0|85=0|85=1|180=1)
LAG = 0.97

Y pegarlo en nuestro archivo ext_config.ini

Los primeros párrafos indican que aparte de estos efectos hay que incluir los que trae el juego originalmente, el último párrafo establece que las iluminación de la pista se encenderá automáticamente cuando esté amaneciendo, anocheciendo o sea de noche.

[Imagen: vVq0mR5.png]

Ahora, justo encima del último párrafo, iremos copiando y pegando todo lo que necesitamos.

Iniciamos el juego. Seleccionamos la pista en modo. Le ponemos de clima "Night Dark" y las 18h. Iniciamos partida en modo Práctica.

[Imagen: XR9qY7e.png]

[Imagen: PKfWioy.png]

Se trata de editar el ext_config.ini con el juego encendido de fondo. En el menú de apps encendemos el "Objects Inspector". Esta herramienta es muy útil. Además, según vayamos editando nuestro ext_config.ini y salvando, iremos viendo los cambios en tiempo real.

[Imagen: iu6vh7P.png]

Como bien pone ahí mantenemos pulsada la tecla Alt y pinchamos en el objeto que queremos que se ilumine. Podemos usar el Objects Inspector en la cámara de repetición, para movernos libremente.

[Imagen: Lh8tO7j.png]

Mantengo pulsada la tecla Alt y pincho en la bombilla del foco que hay justo en la pared de boxes. El objeto seleccionado se marcará de color azul.

[Imagen: pi9X1H9.png]

Ahora Objects Inspector nos está dando unos valores. Nombre del material, nombre del objeto, etc. Esto es lo que necesito.

Lo primero, busco en el ex_config.ini de la pista terminada el párrafo que necesito. Las líneas que establecen las bombillas brillantes en blanco. Y lo pego en mi ext_config, justo encima del párrafo [CONDITION_30].

En nuestro ext_config.ini donde pone "MATERIAL_ADJUSTMENT_elnumeroquesea" debe ir, como siempre, por riguroso orden númerico. En este caso ambos coinciden (primer material) con lo cual no hace falta cambiar nada, solo copiar y pegar.

[Imagen: qUmuj0Y.png]

Pichamos en el juego, que está en segundo plano. En la ventana de Objects Inspector pinchamos en el nombre del material, y automáticamente se copiará al portapapeles.

[Imagen: mwkYOxt.png]

Ahora vamos a nuestro config_ext.ini y donde pone MATERIALS= borramos lo que pone, pegando el que copiamos de Objects Inspector.

[Imagen: NQdrSwH.png]

En cuanto guardemos los cambios del config_ext.ini, automáticamente veremos el cambio en el juego. Y así lo hacemos. Resultado:

[Imagen: FNLZzxr.png]

Siguiente paso, luz reflejada en el suelo (emissive). Lo mismo, copio el párrafo que nos interesa de la otra pista y lo copio en nuestro ext_config.ini

[Imagen: 0L4F7jg.png]

En Objects Inspector pincho sobre el objeto que queremos que emita luz, y copio lo que pone en Mesh.

[Imagen: 3dIRdR7.png]

En nuestro ext_config.ini, donde pone pone MESHES= añado a continuación lo copiado desde Objects Inspector.

[Imagen: 1NsAn3l.png]

Salvo cambios y automáticamente vemos los cambios en el escenario.

[Imagen: Tp969hz.png]

Bien, "progresa adecuadamente" como nos ponían en la EGB Elrisas . Ahora quiero al primer ajuste de materiales añadir los faros delanteros de los coches. Pero solo esto, sin que emitan luz para no sobrecargar la pista (cuantos más efectos añadamos más se ralentizará el juego).

¿Hay que copiar un párrafo para cada material que querramos añadir? No. Podemos usar un párrafo para varios materiales, solo los añadimos a continuación, separados por una coma y un espacio. Ejemplo, voy a añadir los faros delanteros de uno de los coches aparcados.

[Imagen: JEI40MA.png]

[Imagen: gH8IgAB.png]

Y así repetimos con todos los objetos que nos interesan iluminar. Por eso era importante durante el diseño de cada objeto separar en distintos materiales las partes que se iluminan. Yo suelo separar de la siguiente manera:

- Faros delanteros de coche aparcado / bombillas de farolas = material glow blanco.
- Faros traseros de coche aparcado = material glow rojo.
- Ventanas de edificios (interior con luces encendidas) = material glow blanco pero muy atenuado.
- Luces verdes de semáforo = material glow verde.
- Luces parpadeantes = material / objeto blink (el que corresponda, sirena azul de ambulancia, sirena verde de coche de la guardia civil, flechas de indicación en pista, etc).
- Luces reflejadas en superficie = objeto emissive (el que corresponda: objetos de farola, objetos de apliques de pared, etc).

En cada uno de los párrafos se establece los parámetros de la luz como color (RGB), intensidad, orientación, extensión (cuanto más arriba esté situado el objeto que emite luz, más área iluminará)... en fin, mil cosas. En la línea CONDITION de cada tipo de luz se establece cómo se comporta esa luz, remitiéndonos al nombre del párrafo donde se marcan los párametros ([utilizo el nombre b]BLINK[/b] para parpadeos, con el número que corresponda, y SMOOTHSUNA es para que se enciendan solo de noche, si lo dejamos en blanco estarán encendidas día y noche).

Podéis usar cualquiera de mis pistas como base para hacer la vuestra, es copiar y pegar, y luego sustituir los nombres de los materiales o de los objetos por los de vuestra pista. Incluso podéis copiar directamente el ext_config.ini de una de mis pistas a la vuestra, luego es solo cambiar materiales y objetos en las líneas MATERIALS y MESHES, según sea un glow o un emissive. Y por último, si queréis cambiar algo, es jugar con los parámetros de cada luz (más intensidad, distinto color, parpadeo, o lo que queráis) hasta dejarlos totalmente a vuestro gusto.

Resultado:

[Imagen: smYgvZM.jpg]

Luces parpadeantes de las sirenas de policías, ambulancias, etc, (glow) funcionando. Luces de las ventanas de la torre de control (glow) funcionando. Iluminación de la zona de boxes (emissive) funcionando.

[Imagen: aIAEYMN.jpg]

[Imagen: aS08cye.jpg]

Luces verdes de start / meta (glow + emissive) funcionando.

[Imagen: ZmzaGm3.jpg]

Luces glow de coches aparcados (blanco y rojo) funcionando.

[Imagen: ofcMjIH.jpg]

[Imagen: EeMZeMV.jpg]

[Imagen: HsI10v8.jpg]

Iluminación general de la pista (emissive) funcionando.

[Imagen: jR7zoTR.jpg]

Como siempre todo en esta vida es mejorable, me he inventado la luminaria de Kotarr porque nunca he visto una carrera de noche en esta pista. Por otro lado esto es un juego, podemos "mejorar" la realidad como hice en el circuito de Jarama, que en la vida real tiene una luminaria claramente insuficiente, y en el juego podemos correr con claridad.

La primera prueba de luz está casi perfecta. Probablemente añada un par de farolas donde los espectadores, para iluminar más área. Tal vez sustituya algún par de luces blancas por amarillas.


- Efecto de lluvia (RAIN_FX).

El efecto de lluvia es una parte del CSP que aún está en desarrollo. De momento solo incluye efectos visuales, pero está proyectado que en el futuro incluya efectos físicos: banda de rodadura "seca" sobre el asfalto, cambio de agarre según ruedes sobre seco o mojado, etc.

El autor del CSP, viendo la demanda, ofrece el parche CSP gratis excepto el efecto lluvia, que hay que pagarlo en su Patreon aparte. Para hacer las pistas estoy usando la versión 176-preview-full-4.

Para añadir el efecto lluvia utilizamos la misma mecánica de trabajo que para los efectos de iluminación. Abrimos nuestro ext_config.ini para añadirle las líneas necesarias de otra pista.

[Imagen: UxOSODV.png]

[Imagen: CzSFWuM.png]

[Imagen: 5ziCaFM.png]

Después borramos las referencias a los materiales de la otra pista, para poner los nuestros.

[Imagen: 42X2ySv.png]

Aquí lo importante son las siguientes líneas:

- PUDDLES_MATERIALS = y SOAKING_MATERIALS = : se refieren a superficies horizontales (suelos). Asfalto, pianos, líneas pintadas, tierra, césped, etc. Ojo, no incluir la vegetación (árboles, objetos de césped, matorrales, etc). Son charcos de agua sobre la superficie. Estas dos líneas deben ser exactamente iguales.
- SMOOTH_MATERIALS = : se refieren a superficies verticales (paredes) y objetos bajo la lluvia (coches, neumáticos, cristales, lo que sea). Lo mismo, no se incluye la vegetación. Son gotas sobre superficie que "corren" hacia abajo.

Como ya dice la propia nomenclatura lo que vamos a añadir son los materiales de los objetos. No hace falta añadirlos todos, por ejemplo las banderas son objetos en movimiento y no se van a apreciar las gotas en superficie. Tampoco aquellas zonas que estén fuera del alcance visual. Incluir lo que no es necesario, como siempre, solo aumentará la carga sobre el motor gráfico.

Solo necesitaremos el párrafo de las imágenes e ir añadiendo los materiales, nada más. Los iremos añadiendo exactamente igual que hicimos con las luces, separados por una coma y un espacio, mientras tenemos el juego en segundo plano.

Bien. Ahora cargamos el juego. Iniciamos carrera en práctica, a una hora diurna, y con el clima RAIN.

[Imagen: xdxQiek.png]

Y repetimos el proceso. Abrimos Objects Inspector, mantenemos pulsada la tecla ALT sobre la superficie horizontal a mojar, y la añadimos a las líneas que correspondan. Veremos los cambios en tiempo real al guardar el archivo.

[Imagen: BdCOSTZ.png]

[Imagen: ET5CRJt.png]

[Imagen: eiSubjC.png]

[Imagen: XMvy237.png]

[Imagen: FkgJrWR.jpg]

Primer material de superficie horizontal añadido. El cambio es evidente. Seguimos con las demás.

[Imagen: 6khatP0.png]

[Imagen: XsCJNyh.png]

[Imagen: 5BpPERU.png]

[Imagen: Dwok121.jpg]

Ojo. Hay que añadir los materiales de todas las superficies horizontales. Todas. Sino puedes encontrarte con zonas totalmente secas y otras mojadas.

Terminadas las superficies horizontales nos vamos a la tercera línea (SMOOTH_MATERIALS), para las superficies verticales y los objetos bajo la lluvia. Y añadimos los materiales que nos interesen.

[Imagen: qNyPPga.png]

[Imagen: 66f6uRo.jpg]

[Imagen: VJsQLLB.jpg]

[Imagen: LN1f7Lw.jpg]

[Imagen: fekpz1l.jpg]

[Imagen: 345bsmL.jpg]

[Imagen: 5zxJTFz.jpg]

El resultado final es bastante bueno. Toca iniciar una partida, de noche (luces encendidas) y con lluvia.

[Imagen: 9X9iAuv.jpg]

[Imagen: IjNdnqx.jpg]

[Imagen: Vws5cnF.jpg]

Reflejo de la luminaria sobre las superficies horizontales, cambio de efectos de partículas (ya no hay humo o polvo al derrapar, ahora son salpicaduras de agua), etc. Por estas cosas Assetto Corsa sigue siendo increíble, a pesar de que su primera salida a mercado fue en el año 2010.

¿Y qué hay de las otras líneas del párrafo que hemos añadido a nuestro ext_config.ini? Pues son otras funciones que sobrecargan el juego y que realmente no aportan nada a una carrera, como por ejemplo "cortinas de agua". Así que por mi parte las dejo en blanco.


- Grass_FX.

Grass_FX es un efecto que nos permite que determinadas áreas planas de la pista, por arte de magia, se conviertan en 3D. Lo que peor queda en todos los juegos es un césped plano (una textura pegada sobre una superficie plana). En todas mis pistas y como hemos podido ver a lo largo de este tutorial, siempre coloco geometrías 3D de césped encima de la superficie plana. Si bien queda aceptable no es perfecto, así que CPS incluye esta función de Grass_FX, que añadiremos a nuestro ext_config.ini.

Al final del archivo añadiremos las siguientes líneas:

[GRASS_FX] ; https://github.com/ac-custom-shaders-pat...3-Grass-FX
; Spawning areas
GRASS_MATERIALS = materiales encima de los cuales aparecerá el césped 3D.
GRASS_MESHES = objetos / superficies encima de los cuales aparecerá el césped 3D.
OCCLUDING_MATERIALS = materiales que pasan por encima del césped 3D, tapándolo (asfalto y esas cosas).
OCCLUDING_MESHES = objetos/superficies que pasan por encima del césped 3D, tapándolo (asfalto y esas cosas).
OCCLUDING_MATERIALS_ALPHA = mezcla de materiales de césped 3D y otros (arena y césped, por ejemplo).
OCCLUDING_MESHES_ALPHA = mezcla de objetos / superficies de césped 3D y otros (arena y césped, por ejemplo).
ORIGINAL_GRASS_MATERIALS = para tapar el césped original si césped 3D está activo (yo no lo uso, para mi no tiene sentido).
; NOTE: if you want to keep original 3dgrass (using ksGrass shader), then use an
; EMPTY line above with NO NAME after the "=" !!!

MASK_MAIN_THRESHOLD = -1
MASK_RED_THRESHOLD = 0
MASK_MIN_LUMINANCE = -1
MASK_MAX_LUMINANCE = 1

SHAPE_SIZE = 3.0 ; general size
SHAPE_TIDY = 0.1 ; how tidy grass is (untidy grass in uneven, tilted more)
SHAPE_CUT = 0.0 ; how cut grass is
SHAPE_WIDTH = 1.3 ; grass width relative to its height

Si tenemos muchos archivos de un solo tipo (1ROAD_1, 1ROAD_2, etc) podemos seleccionarlos todos sustituyendo el guión y el sufijo por un interrogante (1ROAD?).

Resumiendo, mi archivo ext_config.ini queda así:

[Imagen: uf98OhG.png]

Resultado ingame:

[Imagen: qiW1uEo.jpg]

[Imagen: 9sYHflG.jpg]

[Imagen: GuXAruH.jpg]

[Imagen: tamdNxo.jpg]

[Imagen: Jcy9BUd.jpg]

[Imagen: ZMxsW1i.jpg]

Como se puede ver el efecto utiliza la textura del terreno para darle la apariencia al césped. Es decir, modificando esa textura podemos hacerlo más verde, más seco, más oscuro, lo que queramos. En el caso de Kotarr y Choqueiro tuve suerte y las geometrías encajaban perfectamente con el efecto Grass_FX. En el caso de Jarama no. Tengo que separar una zona del terreno (que está cementada, la zona del karting) para que no le "crezca" el césped encima, hacer un nuevo KN5 con esa parte modificada, y entonces sí, ya quedaría listo.

Este efecto es especialmente importante para hacer pistas de mundo abierto, o que abarquen un área de terreno rural grande, ya que nos ahorra una barbaridad de trabajo. Para mi ha sido un gran descubrimiento, me facilita muchísimo el trabajo en varios mapas ajenos a los circuitos que estoy haciendo.


- Efectos de sonidos ambientales.

Podemos añadir a nuestro juego sonidos ambientales, de tal manera que al pasar por un determinado lugar suene un determinado sonido, y que desaparezca al alejarse. Ideal para poner sonidos de semáforos, de sirenas, de aplausos, etc.

Lo primero es crear un paquete de sonidos con la extensión .bank, que es la que utiliza AC. Pero si ya tenemos una que nos puede valer, como es mi caso, podemos "trasplantar" este archivo y sus archivos asociados a nuestra pista.

Abrimos la carpeta "extension" de una pista que tenga efectos de sonidos ambientales. Lo primero que vamos a ver es que, además del archivo ext_config.ini, hay una carpeta llamada "sfx" que no tenemos en nuestra pista. Es en esa carpeta donde se encuentran los archivos de sonido, así que la copiamos y la pegamos dentro de la carpeta "extension" de nuestra pista.

[Imagen: s1IBm85.png]

[Imagen: 3QCh9Jn.png]

Cerramos la carpeta de la pista desde la que hemos copiado, y abrimos la carpeta "sfx" de nuestra pista. Ahí veremos un archivo .bank que se llama igual que la otra pista. Lo renombramos como el nombre de nuestra pista, "sc_kotarr.bank".

[Imagen: 6vPtsnX.png]

[Imagen: PPGlhNM.png]

Ahora tenemos que cambiar las rutas del archivo GUID.txt, para que el juego sepa dónde está cada archivo de sonido dentro del archivo .bank. Abrimos GUID.txt con bloc de notas o similar, y cambiamos "sc_coruna" por el nombre de nuestra pista, "sc_kotarr", en todas las líneas.

[Imagen: afhJbXc.png]

[Imagen: paSBsnp.png]

Salvamos cambios. Ya solo queda indicarle al juego en qué lugar exacto de la pista debe reproducir cada sonido. Para ello abrimos de nuevo nuestro archivo ext_config.ini y el mismo archivo de la pista a la que le hemos copiado la carpeta "sfx".

[Imagen: oSc3imI.png]

Al final de nuestro ext_config.ini pegamos todo el apartado relativo a los sonidos, desde el ext_config.ini de la pista "donante".

[Imagen: 8Mrw1ck.png]

[Imagen: TgOCNcM.png]

Una vez más debemos cambiar las referencias de nuestro ext_config.ini, de "sc_coruna" a "sc_kotarr" en este caso.

[Imagen: 6F0DLYo.png]

[Imagen: 2Cu3A6r.png]

CASI listo.

Lo primero, los puntos de sonido van determinados por párrafos numerados [EVENT_0], [EVENT_1], [EVENT_2], etc. A diferencia de otros apartados de este tutorial no tienen por qué ser secuenciales, pero sí continuados (podemos saltar números pero deben estar por orden). Esto significa que podemos borrar de la lista los párrafos de los sonidos que no vayamos a utilizar, sin más. En este caso sonidos de semáforos y del concierto de Queen no van a ser utilizados. Se borran esos párrafos y listo.

Para los demás párrafos de eventos, solo debemos cambiar la posición donde se reproduce el sonido.

Y volveremos a utlizar la misma mecánica de trabajo: abrir el juego, con la aplicación Objects Inspector funcionando, copiar los valores necesarios y pegarlos en nuestro archivo ext_config.ini, salvando cambios y viendo el resultado en tiempo real.

[Imagen: PZdN2oO.png]

Pinchamos en donde queremos que se reproduzca el sonido. Y en Objects Inspector, en "clicked at" nos dará las coordenadas. Pinchando en ellas, en una esquina, se pondrá todo el recuadro en rojo y lo copiará al portapapeles.

[Imagen: sgFynb3.png]

Y lo pegamos en nuestro ext_config.ini. Buscamos el párrafo con el sonido que nos interesa para ese sitio, y en donde pone POSITION, borramos los valores que tenga y pegamos los que hemos copiado.

[Imagen: riVvwSD.png]

[Imagen: tajcgBI.png]

Bueno, esto es un tutorial de imágenes, aquí no hay sonido Elrisas Elrisas Elrisas . Pero si lo hubiera podríais oír cómo suena el archivo escogido en el lugar que hemos determinado.

Ahora solo queda repetir y repetir la operación, hasta colocar todos los sonidos en los lugares que queramos.

[Imagen: soRbhki.png]

[Imagen: 87gyLbh.png]

Lo último. Podemos regular el volumen de cada sonido, cambiando el valor VOLUME de cada párrafo. Incluso, si queremos, podemos determinar el volumen con el que se oirá cada efecto desde el interior del coche o desde la cámara de repetición. Vamos, que podemos hilar muy fino si queremos, eso ya es cosa de cada uno.

[Imagen: qXJDZdT.png]

Hasta aquí el apartado de sonido. El último apartado estará dedicado a Content Manager, que aunque no es algo que sirva para crear cosas para nuestra pista, sí permite activar o desactivar multitud de opciones del juego de forma cómoda. También es un poco puñetero, hay una especie de relación amor-odio con este programa.

Saludos para todos.
Responder


Mensajes en este tema
RE: Diseñando una pista en 3D [+Assetto Corsa +mods +tutorial +hilo de seguimiento] - por Stig's Cousin - 26-06-2022, 11:42

Salto de foro: