Arquitecto Sire Publicado 1 Noviembre Arquitecto Compartir Publicado 1 Noviembre Los parámetros que gobiernan la IA se encuentran en la siguiente ruta codificada*: data/luascripts/ia (Por codificada quiero decir encriptada dentro del correspondiente GTP, y por lo tanto modificable sólo mediante el uso de mods). Para no tener que estar nosotros desencriptando los GTP podemos abrir un mod que ya los haya abierto para nosotros y así lo hacemos con el mod de IA Gunnery que nos permite apreciar, dentro de la carpeta ia, una serie de archivos de los que extraigo dos imágenes: ... Estamos viendo los archivos de datos en texto plano que configuran el comportamiento de los aviones de la IA. Para que se entienda, el movimiento general de la IA (cualquier tipo de reacción, incluido disparos), se resuelve con una misma fórmula igual para todos y esta fórmula se alimenta de datos (variables) que cambian dependiendo del modelo de avión (y de la veteranía del piloto). Un ejemplo sencillito: un avión avanzará cada segundo más metros cuanto mayor velocidad pueda generar. Así a un bombardero le pondrás un valor de velocidad bajo y a un caza un valor más alto. La misma fórmula gobierna su avance, pero la variable de velocidad determinará la diferencia entre ambos. Esto no sólo es lógico, si no que facilita la creación de nuevos modelos nada más que proporcionando su propio perfil específico de variables. Así en la primera captura podemos ver que cada avión del juego tiene su perfil, como por ejemplo el bf-10 g2, el 64, etc, etc. todos precedidos de "caeroplane". Bien. Llama la atención ver que hay dos archivos que no hacen mención a ningún modelo concreto, el caeroplane.txt y el cplaneai.txt. Estos archivos son genéricos y aplicables a todos los modelos. Así cada avión de la IA se gobierna por los comunes "caeroplane", el "cplaneai" y su propio archivo de definición del modelo, por ejemplo "caeroplane_bf_109_g2". Un vistazo a los archivos de definición de la IA Ahora vamos a echar un vistazo al contenido de los archivos. Tengamos en cuenta que sus parámetros (sus valores) han podido ser modificados por el modder del IA Gunnery. En este punto no lo sé. Sería mejor ver los valores sacados directamente del GTP para saber que son los oficiales, o investigar lo que dice el modder que ha tocado. Pero ahora mismo no me apetece dedicar el tiempo a eso. Me interesa saber qué variables gobiernan la IA. caeroplante.txt Controla los parámetros derivados de la veteranía del piloto que son: En la captura (de un trozo) podéis ver los parámetros que gobierna cada grado de veteranía. También podéis ver que los comentarios internos están hechos algunos en inglés y otros en ruso. (He traducido los comentarios del "normal" para que se vea que lo explican bastante claro. Afortunadamente el nombre de las variables es en inglés. Y el sistema de métrica del juego es en unidades de SMI, es decir metros, segundos, kilogramos... que es el que usan los rusos (los programadores son rusos) y todo el mundo menos los americanos y los británicos Forestalling Angle hace referencia al Forestall Angle, que es el ángulo de (no estoy seguro de cómo se traduce en español) deflexión. Me explico: para acertar a un blanco que se te cruza de izquierda a derecha no puedes disparar donde ahora está el blanco, si no donde estará. Por tanto tienes que anticipar dónde estará para poner allí el disparo. Esa anticipación, se mide como el ángulo entre tu visión al objetivo actual y tu visión a donde (crees que) estará cuando llegue el tiro, es decir, insisto, el ángulo de deflexión. Bien. Pues ahí podemos ver que el ángulo máximo de deflexión con el que trabaja una IA novata es de 15º, un normal es de 25º, un veterano es de 30º y un as (aunque no se ve en la captura) es de 45º. Forestalling Altitude es la diferencia de altura entre la IA y su objetivo que es capaz de manejar para hacer un apuntado correcto. Novato/ normal/ veterano/ as = 0/125/250/500. ¿Unidades? Ya lo he dicho antes, utilizan el sistema métrico internacional, así que metros. Si quieres saber más sobre cómo funcionan las fórmulas para programar una predicción de tiro aquí te dejo un pequeño artículo técnico en inglés) Os invito a que leáis el resto de parámetros y tratéis de imaginar a qué se refieren. ¡Si alguien averigua cuál es y mejor, cómo funciona el modo de ataque 80Z que me lo haga saber, por favor! Yo entiendo que es una fórmula que gobierna el comportamiento de la IA para pasarla al ataque (o dejarla en modo "tranquilo"). Veamos ahora el siguiente archivo genérico: cplaneai.txt (Lo que está en español lo he traducido del ruso) En este archivo tenemos otra serie de variables genéricas. En el anterior eran dependiendo de la veteranía y en esta realmente aplicables a todos los aviones. En este archivo, fundamentalmente se gobierna la relación entre las formaciones de IA. Siendo el master el avión líder de la formación, y los slaves los diferentes puntos. Senior slave es el punto precedente en una serie. Así #3 es el precedente de #4. Según esto (si no hay otro parámetro que no conozco que lo gobierne), una formación de 4 aviones nunca se va a dividir en dos secciones de 2 como harían los humanos. En esa relación de formación, los slaves van a buscar a su master y a su senior slave para saber cómo deben actuar. Así, por ejemplo, para el despegue, un slave iniciará su carrera cuando su predecesor le supere en 20 Km/h en la pista. Adicionalmente este archivo gobierna algunos parámetros de ataque. Destaco uno en la captura que es el "tiempo de decisión para ataque en picado": es el tiempo teórico máximo que se le da a la IA para coger la altura necesaria para hacer un ataque en picado. Si el ordenador calcula que no le va a dar tiempo en ese tiempo para subir, no subirá y hará un ataque en pendiente suave. Esto es evidente en el comportamiento de los Stukas de la IA. Finalmente hay unos parámetros que activan unos modos de prueba para los desarrolladores. Imagino que presentando sobreimpreso en el juego valores de configuración y parámetros de vuelo. Habrá que probarlo a ver qué se ve. caeroplane_bf_109_g2.txt Este es el conjunto de parámetros que gobierna al 109-g2. (Tened en cuenta que en esta captura algún parámetro ha podido ser modificado por el modder. De hecho seguro que alguno está modificado, ya que es el objeto del mod AI gunner: cambiar los parámetros de disparo) Lo voy a poner como una entrada de código porque hay mucho texto y todo es importante: (El texto en español traducido del ruso con el Google) // // Bf109G2 // // [performance] MaxSpeed = 550.3 MaxClimbRate = 21.0 ServiceCeiling = 11500.0 MinStructureHealth = 0.863 MinEngineHealth = 0.6 EngineWarming = true TurnRate = 300.0, 67.0 ////// ClimbTime = <float ALTITUDE>, <float TIME> // 1.3 ATA, радиатор автомат ClimbTime = 0,0 ClimbTime = 1000,48 ClimbTime = 2000,97 ClimbTime = 3000,149 ClimbTime = 4000,201 ClimbTime = 5000,258 ClimbTime = 6000,317 ClimbTime = 7000,389 ClimbTime = 8000,471 ClimbTime = 9000,574 ClimbTime = 10000,702 ClimbTime = 11000,892 ////// MaxAltTAS = <float ALTITUDE>, <float TAS> // 1.3 ATA, радиатор автомат MaxAltTAS = 0,530 MaxAltTAS = 1000,550 MaxAltTAS = 2000,577 MaxAltTAS = 3000,597 MaxAltTAS = 4000,615 MaxAltTAS = 5000,632 MaxAltTAS = 6000,653 MaxAltTAS = 7000,656 MaxAltTAS = 8000,656 MaxAltTAS = 9000,652 MaxAltTAS = 10000,642 MaxAltTAS = 11000,623 ////// turn time at altitude (m/s) = <float ALTITUDE>, <float TIME> // временно от G4 TurnTimeAlt = 0,21.2 TurnTimeAlt = 1000,22.4 TurnTimeAlt = 2000,24.4 TurnTimeAlt = 3000,27.2 TurnTimeAlt = 4000,29.5 TurnTimeAlt = 5000,32.6 TurnTimeAlt = 6000,36.7 TurnTimeAlt = 7000,45.0 ////// optimal turn CAS at altitude= <float ALTITUDE>, <float CAS> TurnOptimal_CAS_Alt = 0,275 TurnOptimal_CAS_Alt = 1000,275 TurnOptimal_CAS_Alt = 2000,265 TurnOptimal_CAS_Alt = 3000,265 TurnOptimal_CAS_Alt = 4000,265 TurnOptimal_CAS_Alt = 5000,265 TurnOptimal_CAS_Alt = 6000,260 TurnOptimal_CAS_Alt = 7000,260 MaxClimbCAS = 280 MaxClimbRate = 21.0 MaxAltitude = 11500.0 CruiseFuelRate = 1.86 //[л./мин.] 280 км/ч (MinCruiseCAS); 1000 м; 50% бака, без подвесов, стандартная атмосфера PriorityType = 1 //FIGHTER=1,HEAVY_FIGHTER=2,LIGHT_BOMBER=3,BOMBER=4,LIGHT_RECON=5,RECON=6,SHTURMOVIK=7,CARGO=8 [end] [cruise] RefAngle = 90.0 RefRoll = 85.0 MaxRoll = 60.0 MaxRollClimb = 40.0 RefRollFactor = 0.5 RefAltError = 100.0 RefClimb = 20.0 RefClimbFactor = 1.5 RefDive = 20.0 RefDiveFactor = 1.5 TurnOffError = -5 TurnOnError = -2 MinRPM = 550 MinCruiseCAS = 260.0 MinWingmanCAS = 240.0 WingLeaderLagCorrectionK = 1.0 // coeficiente de 0,0 a 1,0 (predeterminado), lo que reduce el grado de reducción de velocidad por parte del líder cuando espera a los esclavos PursueWingmanDist = 300.0 // Distancia umbral hasta el lugar de la formación a partir del cual comienza a caer un límite de velocidad determinado. WingLeaderThrottleLowLimit = 0.25 // Limitar el mínimo de gas adelantado en descenso y frenada. WingLeaderThrottleUpLimit = 0.95 // Limitar la aceleración máxima durante el ascenso y la aceleración. LandRoundCAS0 = 290 // Velocidad de aproximación al aeródromo, ida y vuelta, 2º y 3º giros LandRoundCAS1 = 280 // Velocidad en la aproximación a la 4ª curva. LandRoundCAS2 = 240 // Velocidad de aproximación al punto de entrada de la trayectoria de planeo LandingApproachCAS = 210.0 LandingTouchDownCAS = 190.0 TouchDownDistance = 300.0 // Distancia desde el punto de inicio de la alineación hasta el final de la pista TouchDownPitch = 14.0 LandingApproachCAS_NoFuel = 210.0 LandingTouchDownCAS_NoFuel = 185.0 TouchDownDistance_NoFuel = 100.0 TouchDownPitch_NoFuel = 14.0 StartTurnBeforeGlissadeDistance = 600.0 TouchDownPitchUpSpeed = 140.0 // la velocidad a la que, al aterrizar, comienza a tirar intensamente del mango hacia usted para frenar después de tocarlo TouchDownAlignHeight = 50.0 // altura inicial de nivelación SmoothTouchDownHeight = 3 // altura del inicio del "toque suave (sostener)" LandingThrottleLimit = false BrakePitchMax = 15.0 // Paso en el que los frenos comienzan a soltarse. BrakePitchMin = 10.0 // Paso en el que ya no se aplicarán los frenos. BrakeLimMin BrakeLimMin = 1.0 // multiplicador de la señal de freno de paso especificada BrakePitchMin (protección anti-adherencia) ApproachLowering = false ApproachIgnition = false LandingRoundIgnition = false TouchDownCYRFactor = 0.0 RestrictAttackAngle = true MinAttackAngle = 14 MaxAttackAngle = 17 MinNegativeAttackAngle = -8.0 MaxNegativeAttackAngle = -12.0 MinSlipAngle = 15.0 MaxSlipAngle = 20.0 TaxiD1 = 2.0 TaxiD2 = 5.0 TaxiD3 = 80.0 TaxiD4 = 300.0 TaxiSpeedD1 = 10.0 // la velocidad de rodaje especificada hasta la distancia D1, hasta D2 se interpola linealmente TaxiSpeedD2D3 = 15.0 // velocidad de rodaje especificada desde la distancia D2 a D3, a D2 interpolada linealmente TaxiSpeedD4 = 60.0 // velocidad de rodaje especificada desde la distancia D4 TaxiMaxAngle = 90.0 // ángulo de desviación de la dirección de dirección especificada en el que la velocidad especificada disminuirá a TaxiSpeedD1 TaxiMaxAside = 50.0 // desviación lateral de la dirección de dirección especificada, en la que la velocidad especificada disminuirá a TaxiSpeedD1 TaxiBrakingThrottleUp = 0.5 // cuánto acelerar al usar el freno para girar a una velocidad menor que TaxiSpeedD1 TaxiingPitch = false // control del bloqueo de la rueda trasera tirando de la palanca de control hacia usted, tirando de la palanca cuando esté lejos del punto de rodaje y durante el despegue. Si está apagado, siempre funciona. TaxiingPIDSpeed = 150.0 // Velocidad de cambio PID de [pid_taxiing] a [pid_0] durante el despegue, durante el aterrizaje cambio inverso a velocidad 0,75*TaxiingPIDSpeed predeterminado = TakeOffCAS+10 Switch_2_TaxiingPIDSpeed = 140.0 // Velocidad de cambio de PID de [pid_0] a [pid_taxiing] al aterrizar. Predeterminado = LandingTouchDownCAS - 20.0 TakeOffCAS = 210.0 // velocidad objetivo, al alcanzar la cual el robot comienza a intentar arrancar el avión de la pista. TakeoffPitch = 15.0 // Ángulo de cabeceo hasta una determinada altitud de finalización de la maniobra de despegue. TakeoffElevatorSafe = true TakeoffSafePitch = 0.0 TakeoffSurfaceSlope = false TakeoffCriticalSlope = 0.0 CriticalTakeoffRoll = 10 TakeoffYawFactor = 0 TakeOffBrakingMax = 0.0 // valor de frenado al desviarse en el despegue a lo largo del rumbo en TakeOffBrakingAngle (hasta la velocidad de pid_taxiing) TakeOffBrakingAngle = 10.0 // desviación de rumbo durante el despegue, durante el cual el frenado se realiza mediante TakeOffBrakingMax StallRollRate = 160.0 StallYawRate = 60.0 StructureAlert = true StructureAlertNy = 5 // límite por piloto, por avión =8 StructureAlertTAS = 700.0 AttackIgnitionControl = false TakeoffRefAngle = 10.0 MaxFlapsCAS = 160.0 MinFlapsCAS = 250.0 TakeOFFFlapsAngle = 0.5 // 0..1 posición de flap durante el despegue LandingFlapsAngle = 1.0 // 0..1 posición de flap en configuración de aterrizaje FlapsPosQuantity = 0 DifferentialBrakes = true // "true" si el control de freno está separado (Messer), "false" - general (LaGG) OpenCocpitWhileTaxi = false // true - rodaje para el despegue con la cabina abierta NeedFilter = true // ¿Es necesario aplicar un filtro de control? MinStickMoveTime = 0.2 // el tiempo mínimo durante el cual se lanza el mango desde la posición extrema a la posición extrema MaxStickMoveTime = 0.4 // el tiempo máximo durante el cual se lanza el mango desde la posición extrema a la posición extrema MinStickMoveCAS = 350.0 // velocidad a la que tiempo de transferencia m_MinStickMoveTime MaxStickMoveCAS = 400.0 // velocidad a la que tiempo de transferencia m_MaxStickMoveTime CruiseThrottleLimit = 1.0 // limitador de posición del acelerador en modos de vuelo de crucero, 0..1, predeterminado - 1 taxiWindLimit = 7.5 // Velocidad del viento (m/s) por encima de la cual el avión no puede rodar en tierra y, al aterrizar, se desvía y se detiene en la pista (predeterminado: 15,0 m/s). [end] [dogfight] [novice] RefNoseAngle = 30.0 MinCAS1 = 200.0 MaxCAS2 = 650.0 MaxPitchRate = 180.0 AttackDistance = 500.0 EngageDistance = 1500.0 MinFireDistance = 100.0 MaxFireDistance = 800.0 MinOpenFireAngle = 13.0 MaxOpenFireAngle = 1.0 MinStopFireAngle = 26.0 MaxStopFireAngle = 2.0 CollisionTimeTreshold = 3.0 HBTNegativeRoll = -60.0 HBTPositiveBTRoll = 60.0 InterceptAltitudeAdvance = 0.0 [end] [normal] RefNoseAngle = 30.0 MinCAS1 = 200.0 MaxCAS2 = 600.0 MaxPitchRate = 180.0 AttackDistance = 800.0 EngageDistance = 2000.0 MinFireDistance = 70.0 MaxFireDistance = 600.0 MinOpenFireAngle = 10.7 MaxOpenFireAngle = 3.67 MinStopFireAngle = 18.57 MaxStopFireAngle = 5.51 CollisionTimeTreshold = 3.0 HBTNegativeRoll = -70.0 HBTPositiveBTRoll = 70.0 InterceptAltitudeAdvance = 0.0 [end] [high] RefNoseAngle = 30.0 MinCAS1 = 200.0 MaxCAS2 = 500.0 MaxPitchRate = 180.0 AttackDistance = 1200.0 EngageDistance = 2500.0 MinFireDistance = 50.0 MaxFireDistance = 500.0 MinOpenFireAngle = 8.5 MaxOpenFireAngle = 4.0 MinStopFireAngle = 12.7 MaxStopFireAngle = 5.99 CollisionTimeTreshold = 3.0 HBTNegativeRoll = -75.0 HBTPositiveBTRoll = 75.0 InterceptAltitudeAdvance = 300.0 [end] [ace] RefNoseAngle = 30.0 MinCAS1 = 200.0 MaxCAS2 = 450.0 MaxPitchRate = 180.0 AttackDistance = 2000.0 EngageDistance = 3000.0 MinFireDistance = 30.0 MaxFireDistance = 400.0 MinOpenFireAngle = 5.61 MaxOpenFireAngle = 3.64 MinStopFireAngle = 6.93 MaxStopFireAngle = 4.47 CollisionTimeTreshold = 1.5 HBTNegativeRoll = -80.0 HBTPositiveBTRoll = 80.0 InterceptAltitudeAdvance = 1000.0 [end] MinSafeAltitude0 = 50.0 MaxSafeAltitude0 = 100.0 MinSafeAltitude45 = 80.0 MaxSafeAltitude45 = 250.0 MinSafeAltitudeVP = 600.0 MaxSafeAltitudeVP = 1200.0 CASPitchLimit = false MinPitchCAS = 125.0 MaxPitchCAS = 365.0 STVOffset = -1.5 // -5.5 YawAimingAngle = 7.0 AirTargetToLeaderCriticalDistance = 10000,15000 DiveCAS = 700.0 CruiseCAS = 400.0 ClimbCAS = 300.0 RestrictPitchBySSA = true MinPitchSSA = 10.0 MaxPitchSSA = 15.0 GunAirAimSmooth = 0.4 // Suavizar la guía del arma en combate aéreo (necesaria en caso de accidente). [0..1], 0 - máximo, 1 - mínimo, -1 - deshabilitado [end] [approach] GroundTargetToLeaderCriticalDistance = 10000,15000 VFAngle = 0.0 ApproachCAS = 400.0 ApproachRadius = 600.0 ApproachDistance = 2500.0 ApproachAltitude = 600.0 GroundAttackExitAltitude = 100.0 // altitud mínima de recuperación en picado al atacar con cohetes y cañones (establecida por encima de las copas de los árboles, y luego +40 m) GroundAttackDistance = 300.0 GroundEngageDistance = 2200.0 GroundEngageRocketK = 1.0 // el número por el cual se multiplica m_GroundEngageDistance al atacar con cohetes SpiralAttackApproach = true DiveBombAltitude = 2500.0 // la altitud mínima para el inicio de un bombardeo en picado, si el avión está más bajo y hay una orden de atacar, ganará esta altitud antes de bombardear DiveBombExitAltitude = 650.0 // altitud mínima para salir de un bombardeo en picado DeepDiveWeaponSet = -1 // conjunto de cargas útiles adecuadas para bombardeo en picado vertical, -1 no utilizada, hasta 15 valores por línea ShallowDiveWeaponSet = 1,2 // conjunto de cargas útiles adecuadas para bombardeos en picado poco profundos, no se utiliza -1, hasta 15 valores por línea OwerWingDive = true // entrar en picado vertical, verdadero: volteando el ala, falso: alejando el mango de usted DiveSoftness = 1.0 // "suavidad" al seleccionar el mango en una inmersión, un valor más alto significa que se lleva más lentamente al punto de liberación, mientras que el avión, si el número es grande, puede no ser capaz de mantener el ritmo a bajas altitudes (para un giro 0,5 ) PushDiveEntranceDistance = 1500.0 // la distancia horizontal (m) al objetivo desde donde comienza la entrada en inmersión "con el mango alejado de usted", selecciónela de tal manera que la aeronave tenga tiempo de tomar la posición para bombardear en inmersión, cuanto menor sea la inmersión ángulo - cuanto más alto PushDiveEntranceK = 1.3 // Coef. intensidad de entrada en el pico "con el mango alejado de usted", cuando aumenta - entrada más intensa, aproximadamente, (Distancia horizontal - PushDiveEntranceDistance)*PushDiveEntranceK = ángulo de inclinación requerido (para un rollover 2.0) ShallowDiveAngle = 30.0 // ángulo en una inmersión plana (para un flip 42.0) ShallowExitAltitude = 260.0 // altitud mínima de salida desde una inmersión poco profunda (establecida por encima de las copas de los árboles, y luego +40 m) ShallowDiveEnterKoef = 1.3 // el coeficiente por el cual se multiplica el alcance estimado del inicio de la inmersión, >1 - la aeronave comienza a bucear antes, < 1 - más tarde, seleccione para el individuo. características de la aeronave Salvo2WeaponSet = 1 // un conjunto de cargas útiles, durante el cual se produce una salva/lanzamiento de bombas/cohetes de 2 piezas, -1 no se utiliza, hasta 15 valores por línea Salvo4WeaponSet = -1 // un conjunto de cargas útiles, durante el cual se produce una salva/lanzamiento de bombas/cohetes de 4 piezas, -1 no se utiliza, hasta 15 valores por línea SalvoAllWeaponSet = -1 // un conjunto de cargas útiles en las que se lanzan todas una salva de bombas/misiles a la vez, -1 no se utiliza, hasta 15 valores por línea GunAimSmooth = 1.8 // Nitidez del cañón apuntando a objetivos terrestres. En <1 es más suave, en >1 es más nítido. Predeterminado = 1,8 AimDamperCompensationTime = 1.45 // compensación del amortiguador de guía, que intenta detener la rotación de la aeronave. [end] [adapt_pid_0] CAS = 200.0 Roll = 15.0, 0.0, 1.5, 0.04 Pitch = 80.0, 0.0, 30.0, 0.1 PitchVy = 50.0, 0.0, 30.0, 0.1 Yaw = 50.0, 0.0, 8.0, 0.05 Speed = 20.0, 50.0, 30.0, 0.25 [end] [adapt_pid_1] CAS = 280.0 Roll = 15.0, 0.0, 1.5, 0.04 Pitch = 35.0, 0.0, 6.0, 0.1 PitchVy = 17.0, 0.0, 10.0, 0.1 Yaw = 60.0, 0.0, 7.0, 0.05 Speed = 20.0, 50.0, 30.0, 0.25 [end] [adapt_pid_2] CAS = 320.0 Roll = 12.0, 0.0, 1.2, 0.03 Pitch = 25.0, 0.0, 1.7, 0.05 PitchVy = 11.0, 0.0, 4.0, 0.05 Yaw = 50.0, 0.0, 7.0, 0.05 Speed = 20.0, 50.0, 30.0, 0.25 [end] [adapt_pid_3] CAS = 500.0 Roll = 10.0, 0.0, 1.0, 0.02 Pitch = 18.0, 0.0, 1.0, 0.05 PitchVy = 8.0, 0.0, 4.0, 0.05 Yaw = 40.0, 0.0, 7.0, 0.05 Speed = 20.0, 50.0, 30.0, 0.25 [end] [pid_taxiing] Roll = 20.0, 0.0, 0.0, 0.04 Pitch = 4.0, 0.0, 0.0, 0.1 Yaw = 15.0, 0.0, 0.0, 0.05 Speed = 30.0, 20.0, 2.0, 0.25 WheelBrakes = 2.0, 0.0, 0.0 [end] Ahí os lo dejo para estudiarlo. Todo esto es lo que he tenido que hacer para encontrar los parámetros que fijan el patrón de aterrizaje de cada avión. Y sí, aquí está. Así que ahora toca experimentar a ver si se pueden conseguir patrones más realistas. Como deberes para los más aplicados os propongo que reviséis si los parámetros de vuelo del G2 IA son iguales a los parámetros de vuelo que le dan al jugador. Sería lo lógico, pero no tiene necesariamente que ser así. Los parámetros de la IA se definen en este archivo, y los "volables" se definen en otro archivo (probablemente diferente y quizás más complejo). Si alguien lo hace que me diga aquí si son iguales. Un saludo y hasta la próxima. 1 Citar Enlace al comentario Compartir en otros sitios web More sharing options...
Arquitecto Sire Publicado 1 Noviembre Autor Arquitecto Compartir Publicado 1 Noviembre El mapa va creciendo. He añadido más iconos al mapa. Ocupa toda la extensión del mapa de Kuban, pero eso es para toda la extensión de la campaña. Lo lógico sería hacerla por lo menos entres fases: inicial, media y final. Así los aeródromos irían cambiando de manos conforme avanzan las líneas y los alemanes creando más aeródromos auxiliares en su retaguardia. En la fase final tenían su fuerza aérea completamente diseminada y ningún avión estaba más de 8h en el mismo lugar debido a la frecuencia con la con los aliados machacaban sus aeródromos. En la práctica eso resuelve con tres misiones diferentes, cargándose la que corresponda. Lo que no tengo nada claro es que la carga se pueda hacer conforme a las condiciones de victoria de un determinado escenario. Otra opción sería sobreponer en capas las tres misiones y activar sólo la capa correspondiente. Pero para mi que el número de objetos (aunque no estén activos) de la misión puede acabar siendo brutal. Creo que voy a empezar desde el escenario de mediados, que es lo que se ve en la imagen, y ya veremos por donde continúo. 1 Citar Enlace al comentario Compartir en otros sitios web More sharing options...
Publicaciones recomendadas
Unirse a la conversación
Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, conecta ahora para publicar con tu cuenta.